diff --git a/go/go.mod b/go/go.mod index 625ebde0e233..628606631bfc 100644 --- a/go/go.mod +++ b/go/go.mod @@ -1,6 +1,6 @@ module github.com/keybase/client/go -go 1.19 +go 1.22.4 require ( bazil.org/fuse v0.0.0-20200424023519-3c101025617f @@ -70,13 +70,13 @@ require ( github.com/urfave/cli v1.22.1 github.com/vividcortex/ewma v1.1.2-0.20170804035156-43880d236f69 go.uber.org/zap v1.24.0 - golang.org/x/crypto v0.17.0 - golang.org/x/image v0.14.0 - golang.org/x/mobile v0.0.0-20231127183840-76ac6878050a - golang.org/x/net v0.19.0 - golang.org/x/sync v0.5.0 - golang.org/x/sys v0.15.0 - golang.org/x/text v0.14.0 + golang.org/x/crypto v0.28.0 + golang.org/x/image v0.21.0 + golang.org/x/mobile v0.0.0-20241016134751-7ff83004ec2c + golang.org/x/net v0.30.0 + golang.org/x/sync v0.8.0 + golang.org/x/sys v0.26.0 + golang.org/x/text v0.19.0 golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1 gopkg.in/src-d/go-billy.v4 v4.3.2 gopkg.in/src-d/go-git.v4 v4.13.1 @@ -316,8 +316,8 @@ require ( go4.org v0.0.0-20161118210015-09d86de304dc // indirect golang.org/x/exp v0.0.0-20230510235704-dd950f8aeaea // indirect golang.org/x/exp/typeparams v0.0.0-20230307190834-24139beb5833 // indirect - golang.org/x/mod v0.14.0 // indirect - golang.org/x/tools v0.16.1 // indirect + golang.org/x/mod v0.21.0 // indirect + golang.org/x/tools v0.26.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.28.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect diff --git a/go/go.sum b/go/go.sum index ce0f4e182194..0cc5d33e1374 100644 --- a/go/go.sum +++ b/go/go.sum @@ -78,9 +78,11 @@ github.com/akavel/rsrc v0.2.1-0.20151103204339-ba14da1f8271/go.mod h1:2+aQMrY0hB github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs= github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= github.com/alecthomas/assert/v2 v2.2.2 h1:Z/iVC0xZfWTaFNE6bA3z07T86hd45Xe2eLt6WVy2bbk= +github.com/alecthomas/assert/v2 v2.2.2/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ= github.com/alecthomas/go-check-sumtype v0.1.3 h1:M+tqMxB68hcgccRXBMVCPI4UJ+QUfdSx0xdbypKCqA8= github.com/alecthomas/go-check-sumtype v0.1.3/go.mod h1:WyYPfhfkdhyrdaligV6svFopZV8Lqdzn5pyVBaV6jhQ= github.com/alecthomas/repr v0.2.0 h1:HAzS41CIzNW5syS8Mf9UwXhNH1J9aix/BvDRf1Ml2Yk= +github.com/alecthomas/repr v0.2.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -120,6 +122,7 @@ github.com/aws/aws-sdk-go v1.6.11-0.20170104181648-8649d278323e/go.mod h1:ZRmQr0 github.com/aws/aws-sdk-go v1.49.13 h1:f4mGztsgnx2dR9r8FQYa9YW/RsKb+N7bgef4UGrOW1Y= github.com/aws/aws-sdk-go v1.49.13/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -238,6 +241,7 @@ github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4 github.com/firefart/nonamedreturns v1.0.4 h1:abzI1p7mAEPYuR4A+VLKn4eNDOycjYo2phmY9sfv40Y= github.com/firefart/nonamedreturns v1.0.4/go.mod h1:TDhe/tjI1BXo48CmYbUduTV7BdIga8MAO/xbKdcVsGI= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= +github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= @@ -276,6 +280,7 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= +github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= @@ -285,6 +290,7 @@ github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/go-toolsmith/astcast v1.1.0 h1:+JN9xZV1A+Re+95pgnMgDboWNVnIMMQXwfBwLRPgSC8= github.com/go-toolsmith/astcast v1.1.0/go.mod h1:qdcuFWeGGS2xX5bLM/c3U9lewg7+Zu4mr+xPwZIB4ZU= github.com/go-toolsmith/astcopy v1.1.0 h1:YGwBN0WM+ekI/6SS6+52zLDEf8Yvp3n2seZITCUBt5s= @@ -297,6 +303,7 @@ github.com/go-toolsmith/astfmt v1.1.0/go.mod h1:OrcLlRwu0CuiIBp/8b5PYF9ktGVZUjlN github.com/go-toolsmith/astp v1.1.0 h1:dXPuCl6u2llURjdPLLDxJeZInAeZ0/eZwFJmqZMnpQA= github.com/go-toolsmith/astp v1.1.0/go.mod h1:0T1xFGz9hicKs8Z5MfAqSUitoUYS30pDMsRVIDHs8CA= github.com/go-toolsmith/pkgload v1.2.2 h1:0CtmHq/02QhxcF7E9N5LIFcYFsMR5rdovfqTtRKkgIk= +github.com/go-toolsmith/pkgload v1.2.2/go.mod h1:R2hxLNRKuAsiXCo2i5J6ZQPhnPMOVtU+f0arbFPWCus= github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= github.com/go-toolsmith/strparse v1.1.0 h1:GAioeZUK9TGxnLS+qfdqNbA4z0SSm5zVNtCQiyP2Bvw= github.com/go-toolsmith/strparse v1.1.0/go.mod h1:7ksGy58fsaQkGQlY8WVoBFNyEPMGuJin1rfoPS4lBSQ= @@ -425,6 +432,7 @@ github.com/gostaticanalysis/nilerr v0.1.1 h1:ThE+hJP0fEp4zWLkWHWcRyI2Od0p7DlgYG3 github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= github.com/gostaticanalysis/testutil v0.4.0 h1:nhdCmubdmDF6VEatUNjgUZBJKWRqugoISdUv3PPQgHY= +github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Repi5x3CuviD3dgAZaBU= github.com/graph-gophers/graphql-go v0.0.0-20190225005345-3e8838d4614c/go.mod h1:uJhtPXrcJLqyi0H5IuMFh+fgW+8cMMakK3Txrbk/WJE= github.com/guregu/null v2.1.3-0.20151024101046-79c5bd36b615+incompatible/go.mod h1:ePGpQaN9cw0tj45IR5E5ehMvsFlLlQZAkkOXZurJ3NM= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= @@ -573,6 +581,7 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFB github.com/kr/pretty v0.0.0-20150520163514-e6ac2fc51e89/go.mod h1:Bvhd+E3laJ0AVkG0c9rmtZcnhV0HQ3+c3YxxqTvc/gA= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.0.0-20150520163712-e373e137fafd/go.mod h1:sjUstKUATFIcff4qlB53Kml0wQPtJVc/3fWrmuUmcfA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= @@ -660,6 +669,7 @@ github.com/nf/cr2 v0.0.0-20140528043846-05d46fef4f2f/go.mod h1:HazDB3gS/i//QXMMR github.com/nfnt/resize v0.0.0-20160724205520-891127d8d1b5 h1:BvoENQQU+fZ9uukda/RzCAL/191HHwJA5b13R6diVlY= github.com/nfnt/resize v0.0.0-20160724205520-891127d8d1b5/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nishanths/exhaustive v0.11.0 h1:T3I8nUGhl/Cwu5Z2hfc92l0e04D2GEW6e0l8pzda2l0= github.com/nishanths/exhaustive v0.11.0/go.mod h1:RqwDsZ1xY0dNdqHho2z6X+bgzizwbLYOWnZbbl2wLB4= github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk= @@ -682,16 +692,19 @@ github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4= +github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= github.com/onsi/gomega v1.28.1 h1:MijcGUbfYuznzK/5R4CPNoUP/9Xvuo20sXfEm6XxoTA= +github.com/onsi/gomega v1.28.1/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= github.com/otiai10/copy v1.11.0 h1:OKBD80J/mLBrwnzXqGtFCzprFSGioo30JcmR4APsNwc= +github.com/otiai10/copy v1.11.0/go.mod h1:rSaLseMUsZFFbsFGc7wCJnnkTAvdc5L6VWxPE4308Ww= github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= @@ -752,9 +765,12 @@ github.com/rcrowley/go-metrics v0.0.0-20160113235030-51425a2415d2/go.mod h1:bCqn github.com/rcrowley/go-metrics v0.0.0-20161128210544-1f30fe9094a5 h1:gwcdIpH6NU2iF8CmcqD+CP6+1CkRBOhHaPR+iu6raBY= github.com/rcrowley/go-metrics v0.0.0-20161128210544-1f30fe9094a5/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/reiver/go-oi v1.0.0 h1:nvECWD7LF+vOs8leNGV/ww+F2iZKf3EYjYZ527turzM= +github.com/reiver/go-oi v1.0.0/go.mod h1:RrDBct90BAhoDTxB1fenZwfykqeGvhI6LsNfStJoEkI= github.com/reiver/go-telnet v0.0.0-20180421082511-9ff0b2ab096e h1:quuzZLi72kkJjl+f5AQ93FMcadG19WkS7MO6TXFOSas= +github.com/reiver/go-telnet v0.0.0-20180421082511-9ff0b2ab096e/go.mod h1:+5vNVvEWwEIx86DB9Ke/+a5wBI464eDRo3eF0LcfpWg= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= github.com/rubenv/sql-migrate v0.0.0-20190717103323-87ce952f7079/go.mod h1:WS0rl9eEliYI8DPnr3TOwz4439pay+qNgzJoVya/DmY= @@ -951,6 +967,7 @@ github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wK gitlab.com/bosi/decorder v0.4.1 h1:VdsdfxhstabyhZovHafFw+9eJ6eU0d2CkFNJcZz/NU4= gitlab.com/bosi/decorder v0.4.1/go.mod h1:jecSqWUew6Yle1pCr2eLWTensJMmsxHsBwt+PVbkAqA= go-simpler.org/assert v0.6.0 h1:QxSrXa4oRuo/1eHMXSBFHKvJIpWABayzKldqZyugG7E= +go-simpler.org/assert v0.6.0/go.mod h1:74Eqh5eI6vCK6Y5l3PI8ZYFXG4Sa+tkr70OIPJAUr28= go-simpler.org/sloglint v0.1.2 h1:IjdhF8NPxyn0Ckn2+fuIof7ntSnVUAqBFcQRrnG9AiM= go-simpler.org/sloglint v0.1.2/go.mod h1:2LL+QImPfTslD5muNPydAEYmpXIj6o/WYcqnJjLi4o4= go.etcd.io/bbolt v1.3.4-0.20191122203157-7f8bb47fcaf8 h1:Cm+dEQiTej0PFS+I24b9ZZCDEzR3Ey9BZSAij5+LUpA= @@ -968,6 +985,7 @@ go.tmz.dev/musttag v0.7.2/go.mod h1:m6q5NiiSKMnQYokefa2xGoyoXnrswCbJ0AWYzf4Zs28= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= @@ -987,8 +1005,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= -golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= +golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1007,8 +1025,8 @@ golang.org/x/exp/typeparams v0.0.0-20230307190834-24139beb5833 h1:jWGQJV4niP+CCm golang.org/x/exp/typeparams v0.0.0-20230307190834-24139beb5833/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.14.0 h1:tNgSxAFe3jC4uYqvZdTr84SZoM1KfwdC9SKIFrLjFn4= -golang.org/x/image v0.14.0/go.mod h1:HUYqC05R2ZcZ3ejNQsIHQDQiwWM4JBqmm6MKANTp4LE= +golang.org/x/image v0.21.0 h1:c5qV36ajHpdj4Qi0GnE0jUc/yuo33OLFaa0d+crTD5s= +golang.org/x/image v0.21.0/go.mod h1:vUbsLavqK/W303ZroQQVKQ+Af3Yl6Uz1Ppu5J/cLz78= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1022,8 +1040,8 @@ golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPI golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mobile v0.0.0-20231127183840-76ac6878050a h1:sYbmY3FwUWCBTodZL1S3JUuOvaW6kM2o+clDzzDNBWg= -golang.org/x/mobile v0.0.0-20231127183840-76ac6878050a/go.mod h1:Ede7gF0KGoHlj822RtphAHK1jLdrcuRBZg0sF1Q+SPc= +golang.org/x/mobile v0.0.0-20241016134751-7ff83004ec2c h1:zuNS/LWsEpPTLfrmBkis6Xofw3nieAqB4hYLn8+uswk= +golang.org/x/mobile v0.0.0-20241016134751-7ff83004ec2c/go.mod h1:snk1Mn2ZpdKCt90JPEsDh4sL3ReK520U2t0d7RHBnSU= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= @@ -1039,8 +1057,8 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91 golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= -golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= +golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1096,8 +1114,8 @@ golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= -golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= -golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= +golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1121,8 +1139,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= -golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1195,8 +1213,8 @@ golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= +golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1205,7 +1223,8 @@ golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= -golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= +golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24= +golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1219,8 +1238,8 @@ golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= +golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1297,8 +1316,8 @@ golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA= -golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= +golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ= +golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1404,6 +1423,7 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gavv/httpexpect.v1 v1.0.0-20170111145843-40724cf1e4a0 h1:r5ptJ1tBxVAeqw4CrYWhXIMr0SybY3CDHuIbCg5CFVw= diff --git a/go/libkb/appstate.go b/go/libkb/appstate.go index 791ab4e81721..4aee461e2088 100644 --- a/go/libkb/appstate.go +++ b/go/libkb/appstate.go @@ -4,6 +4,7 @@ import ( "fmt" "sync" "time" + "runtime" "github.com/keybase/client/go/protocol/keybase1" "github.com/keybase/go-framed-msgpack-rpc/rpc" @@ -23,6 +24,14 @@ type MobileAppState struct { } func NewMobileAppState(g *GlobalContext) *MobileAppState { + if runtime.GOOS == "android" { + // start as background + return &MobileAppState{ + Contextified: NewContextified(g), + state: keybase1.MobileAppState_BACKGROUND, + mtime: nil, + } + } return &MobileAppState{ Contextified: NewContextified(g), state: keybase1.MobileAppState_FOREGROUND, diff --git a/rnmodules/react-native-drop-view/android/build.gradle b/rnmodules/react-native-drop-view/android/build.gradle index 416e517f83cc..cc52a86bc569 100644 --- a/rnmodules/react-native-drop-view/android/build.gradle +++ b/rnmodules/react-native-drop-view/android/build.gradle @@ -1,4 +1,7 @@ buildscript { + // Buildscript is evaluated before everything else so we can't use getExtOrDefault + def kotlin_version = rootProject.ext.has("kotlinVersion") ? rootProject.ext.get("kotlinVersion") : project.properties["DropView_kotlinVersion"] + repositories { google() mavenCentral() @@ -6,6 +9,8 @@ buildscript { dependencies { classpath "com.android.tools.build:gradle:7.2.1" + // noinspection DifferentKotlinGradleVersion + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } @@ -14,29 +19,7 @@ def isNewArchitectureEnabled() { } apply plugin: "com.android.library" - -import groovy.json.JsonSlurper - -// https://github.com/callstack/react-native-builder-bob/discussions/359 -def registrationCompat = { - def reactNativeManifest = file("$projectDir/../node_modules/react-native/package.json").exists() - ? file("$projectDir/../node_modules/react-native/package.json") // developer mode, to run example app - : file("$projectDir/../../react-native/package.json") - def reactNativeVersion = new JsonSlurper().parseText(reactNativeManifest.text).version as String - // Fabric was introduced at react-native@0.68, full CMake support were introduced at react-native@0.71 - // Use Android.mk for compatibility with react-native@0.68/0.69 - reactNativeVersion.matches('(0.68.*|0.69.*)') -}() - -def codegenViewLibraryName = "DropViewView" -def codegenViewModuleName = { - // Autolink for Fabric uses codegenConfig.name in package.json since react-native@0.70 - // Use codegenViewLibraryName for compatibility with react-native@0.68/0.69 - def libraryManifestJson = new JsonSlurper().parseText(file("$projectDir/../package.json").text) - registrationCompat ? codegenViewLibraryName : libraryManifestJson.codegenConfig.name -}() - -def appProject = rootProject.allprojects.find { it.plugins.hasPlugin('com.android.application') } +apply plugin: "kotlin-android" if (isNewArchitectureEnabled()) { apply plugin: "com.facebook.react" @@ -50,42 +33,39 @@ def getExtOrIntegerDefault(name) { return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["DropView_" + name]).toInteger() } +def supportsNamespace() { + def parsed = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.') + def major = parsed[0].toInteger() + def minor = parsed[1].toInteger() + + // Namespace support was added in 7.3.0 + return (major == 7 && minor >= 3) || major >= 8 +} + android { - ndkVersion getExtOrDefault("ndkVersion") + if (supportsNamespace()) { + namespace "io.keybase.dropview" + + sourceSets { + main { + manifest.srcFile "src/main/AndroidManifestNew.xml" + } + } + } + compileSdkVersion getExtOrIntegerDefault("compileSdkVersion") defaultConfig { minSdkVersion getExtOrIntegerDefault("minSdkVersion") targetSdkVersion getExtOrIntegerDefault("targetSdkVersion") buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString() - buildConfigField "String", "CODEGEN_MODULE_REGISTRATION", (isNewArchitectureEnabled() && registrationCompat ? "\"${codegenViewModuleName}_registration\"" : "null") - if (isNewArchitectureEnabled() && registrationCompat) { - def reactAndroidProject = project(':ReactAndroid') - externalNativeBuild { - ndkBuild { - arguments "APP_PLATFORM=android-21", - "APP_STL=c++_shared", - "NDK_TOOLCHAIN_VERSION=clang", - "GENERATED_SRC_DIR=$buildDir/generated/source", // for react_codegen_* in this library's codegen/jni - "PROJECT_BUILD_DIR=${appProject.buildDir}", // for REACT_NDK_EXPORT_DIR in ReactAndroid's Android-prebuilt.mk - "REACT_ANDROID_DIR=${reactAndroidProject.projectDir}", - "REACT_ANDROID_BUILD_DIR=${reactAndroidProject.buildDir}", - "CODEGEN_MODULE_NAME=$codegenViewModuleName" - cFlags "-Wall", "-Werror", "-fexceptions", "-frtti", "-DWITH_INSPECTOR=1" - cppFlags "-std=c++17" - targets "${codegenViewModuleName}_registration" - } - } - } + } - if (isNewArchitectureEnabled() && registrationCompat) { - // We configure the NDK build only if you decide to opt-in for the New Architecture. - externalNativeBuild { - ndkBuild { - path "Android.mk" - } - } + + buildFeatures { + buildConfig true } + buildTypes { release { minifyEnabled false @@ -121,19 +101,20 @@ repositories { google() } +def kotlin_version = getExtOrDefault("kotlinVersion") dependencies { // For < 0.71, this will be from the local maven repo // For > 0.71, this will be replaced by `com.facebook.react:react-android:$version` by react gradle plugin //noinspection GradleDynamicVersion implementation "com.facebook.react:react-native:+" + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" } if (isNewArchitectureEnabled()) { react { jsRootDir = file("../src/") - - libraryName = codegenViewLibraryName - codegenJavaPackageName = "com.dropview" + libraryName = "DropViewView" + codegenJavaPackageName = "io.keybase.dropview" } } diff --git a/rnmodules/react-native-drop-view/android/src/main/java/com/reactnativedropview/DropViewView.java b/rnmodules/react-native-drop-view/android/src/main/java/com/reactnativedropview/DropViewView.java deleted file mode 100644 index 97cb7554038c..000000000000 --- a/rnmodules/react-native-drop-view/android/src/main/java/com/reactnativedropview/DropViewView.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.reactnativedropview; - -import androidx.annotation.Nullable; -import android.widget.FrameLayout; -import androidx.annotation.NonNull; -import android.content.Context; -import android.util.AttributeSet; -import com.facebook.react.uimanager.ViewGroupManager; -import com.facebook.react.uimanager.ThemedReactContext; -import android.view.View; - -public class DropViewView extends FrameLayout { - public DropViewView(Context context) { - super(context); - } - - public DropViewView(Context context, @Nullable AttributeSet attrs) { - super(context, attrs); - } - - public DropViewView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - -} diff --git a/rnmodules/react-native-drop-view/android/src/main/java/com/reactnativedropview/DropViewView.kt b/rnmodules/react-native-drop-view/android/src/main/java/com/reactnativedropview/DropViewView.kt new file mode 100644 index 000000000000..43f3dc5c1eea --- /dev/null +++ b/rnmodules/react-native-drop-view/android/src/main/java/com/reactnativedropview/DropViewView.kt @@ -0,0 +1,12 @@ +package com.reactnativedropview + +import android.content.Context +import android.util.AttributeSet +import android.widget.FrameLayout +import androidx.annotation.Nullable + +class DropViewView @JvmOverloads constructor( + context: Context, + @Nullable attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : FrameLayout(context, attrs, defStyleAttr) diff --git a/rnmodules/react-native-drop-view/android/src/main/java/com/reactnativedropview/DropViewViewManager.java b/rnmodules/react-native-drop-view/android/src/main/java/com/reactnativedropview/DropViewViewManager.java deleted file mode 100644 index d9774e5c1710..000000000000 --- a/rnmodules/react-native-drop-view/android/src/main/java/com/reactnativedropview/DropViewViewManager.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.reactnativedropview; - -import android.graphics.Color; - -import androidx.annotation.Nullable; - -import com.facebook.react.module.annotations.ReactModule; -import com.facebook.react.uimanager.ThemedReactContext; -import com.facebook.react.uimanager.annotations.ReactProp; - -@ReactModule(name = DropViewViewManager.NAME) -public class DropViewViewManager extends DropViewViewManagerSpec { - - public static final String NAME = "DropViewView"; - - @Override - public String getName() { - return NAME; - } - - @Override - public DropViewView createViewInstance(ThemedReactContext context) { - return new DropViewView(context); - } -} diff --git a/rnmodules/react-native-drop-view/android/src/main/java/com/reactnativedropview/DropViewViewManager.kt b/rnmodules/react-native-drop-view/android/src/main/java/com/reactnativedropview/DropViewViewManager.kt new file mode 100644 index 000000000000..e5d3c7375281 --- /dev/null +++ b/rnmodules/react-native-drop-view/android/src/main/java/com/reactnativedropview/DropViewViewManager.kt @@ -0,0 +1,23 @@ +package com.reactnativedropview + +import com.facebook.react.module.annotations.ReactModule +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.uimanager.ThemedReactContext +import com.facebook.react.uimanager.annotations.ReactProp + +@ReactModule(name = DropViewViewManager.NAME) +class DropViewViewManager : + DropViewViewManagerSpec() { + override fun getName(): String { + return NAME + } + + public override fun createViewInstance(context: ThemedReactContext): DropViewView { + return DropViewView(context) + } + + companion object { + const val NAME = "DropViewView" + } +} + diff --git a/rnmodules/react-native-drop-view/android/src/main/java/com/reactnativedropview/DropViewViewPackage.java b/rnmodules/react-native-drop-view/android/src/main/java/com/reactnativedropview/DropViewViewPackage.java deleted file mode 100644 index addf0cee9f1c..000000000000 --- a/rnmodules/react-native-drop-view/android/src/main/java/com/reactnativedropview/DropViewViewPackage.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.reactnativedropview; - -import com.facebook.react.ReactPackage; -import com.facebook.react.bridge.NativeModule; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.uimanager.ViewManager; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class DropViewViewPackage implements ReactPackage { - @Override - public List createViewManagers(ReactApplicationContext reactContext) { - List viewManagers = new ArrayList<>(); - viewManagers.add(new DropViewViewManager()); - return viewManagers; - } - - @Override - public List createNativeModules(ReactApplicationContext reactContext) { - return Collections.emptyList(); - } -} diff --git a/rnmodules/react-native-drop-view/android/src/main/java/com/reactnativedropview/DropViewViewPackage.kt b/rnmodules/react-native-drop-view/android/src/main/java/com/reactnativedropview/DropViewViewPackage.kt new file mode 100644 index 000000000000..a16bff84a680 --- /dev/null +++ b/rnmodules/react-native-drop-view/android/src/main/java/com/reactnativedropview/DropViewViewPackage.kt @@ -0,0 +1,20 @@ +package com.reactnativedropview + +import com.facebook.react.ReactPackage +import com.facebook.react.bridge.NativeModule +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.uimanager.ViewManager +import java.util.ArrayList + +class DropViewViewPackage : ReactPackage { + override fun createViewManagers(reactContext: ReactApplicationContext): List> { + val viewManagers: MutableList> = ArrayList() + viewManagers.add(DropViewViewManager()) + return viewManagers + } + + override fun createNativeModules(reactContext: ReactApplicationContext): List { + return emptyList() + } +} + diff --git a/rnmodules/react-native-drop-view/android/src/newarch/DropViewViewManagerSpec.java b/rnmodules/react-native-drop-view/android/src/newarch/DropViewViewManagerSpec.java deleted file mode 100644 index 268be73c66a6..000000000000 --- a/rnmodules/react-native-drop-view/android/src/newarch/DropViewViewManagerSpec.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.reactnativedropview; - -import android.view.View; - -import androidx.annotation.Nullable; -import android.widget.FrameLayout; -import com.facebook.react.uimanager.ViewManagerDelegate; -import com.facebook.react.viewmanagers.DropViewViewManagerDelegate; -import com.facebook.react.viewmanagers.DropViewViewManagerInterface; -import com.facebook.react.uimanager.ViewGroupManager; -import com.facebook.soloader.SoLoader; - -public abstract class DropViewViewManagerSpec extends ViewGroupManager implements DropViewViewManagerInterface { - static { - if (BuildConfig.CODEGEN_MODULE_REGISTRATION != null) { - SoLoader.loadLibrary(BuildConfig.CODEGEN_MODULE_REGISTRATION); - } - } - - private final ViewManagerDelegate mDelegate; - - public DropViewViewManagerSpec() { - mDelegate = new DropViewViewManagerDelegate(this); - } - - @Nullable - @Override - protected ViewManagerDelegate getDelegate() { - return mDelegate; - } -} diff --git a/rnmodules/react-native-drop-view/android/src/newarch/DropViewViewManagerSpec.kt b/rnmodules/react-native-drop-view/android/src/newarch/DropViewViewManagerSpec.kt new file mode 100644 index 000000000000..5039d99cba81 --- /dev/null +++ b/rnmodules/react-native-drop-view/android/src/newarch/DropViewViewManagerSpec.kt @@ -0,0 +1,22 @@ +package com.reactnativedropview + +import android.view.View +import android.widget.FrameLayout +import com.facebook.react.uimanager.ViewManagerDelegate +import com.facebook.react.viewmanagers.DropViewViewManagerDelegate +import com.facebook.react.viewmanagers.DropViewViewManagerInterface +import com.facebook.react.uimanager.ViewGroupManager +import com.facebook.soloader.SoLoader + +abstract class DropViewViewManagerSpec : ViewGroupManager(), DropViewViewManagerInterface { + private val mDelegate: ViewManagerDelegate + + init { + mDelegate = DropViewViewManagerDelegate(this) + } + + override fun getDelegate(): ViewManagerDelegate? { + return mDelegate + } + +} diff --git a/rnmodules/react-native-drop-view/android/src/oldarch/DropViewViewManagerSpec.java b/rnmodules/react-native-drop-view/android/src/oldarch/DropViewViewManagerSpec.java deleted file mode 100644 index 3cfcca1077a2..000000000000 --- a/rnmodules/react-native-drop-view/android/src/oldarch/DropViewViewManagerSpec.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.reactnativedropview; - -import android.view.View; -import com.facebook.react.uimanager.ViewGroupManager; -import android.widget.FrameLayout; - -public abstract class DropViewViewManagerSpec extends ViewGroupManager { -} - diff --git a/rnmodules/react-native-drop-view/android/src/oldarch/DropViewViewManagerSpec.kt b/rnmodules/react-native-drop-view/android/src/oldarch/DropViewViewManagerSpec.kt new file mode 100644 index 000000000000..e73d12078dd0 --- /dev/null +++ b/rnmodules/react-native-drop-view/android/src/oldarch/DropViewViewManagerSpec.kt @@ -0,0 +1,7 @@ +package com.reactnativedropview + +import android.view.View +import com.facebook.react.uimanager.ViewGroupManager +import android.widget.FrameLayout + +abstract class DropViewViewManagerSpec : ViewGroupManager() diff --git a/rnmodules/react-native-drop-view/ios/DropViewView.mm b/rnmodules/react-native-drop-view/ios/DropViewView.mm index f9c346ce4c11..952030b3a127 100644 --- a/rnmodules/react-native-drop-view/ios/DropViewView.mm +++ b/rnmodules/react-native-drop-view/ios/DropViewView.mm @@ -23,18 +23,14 @@ + (ComponentDescriptorProvider)componentDescriptorProvider return concreteComponentDescriptorProvider(); } -- (instancetype)initWithFrame:(CGRect)frame +- (instancetype)init { - if (self = [super initWithFrame:frame]) { + if (self = [super init]) { +#ifdef RCT_NEW_ARCH_ENABLED static const auto defaultProps = std::make_shared(); _props = defaultProps; - - DropView *dv = [[DropView alloc] init]; - _view = dv; - - self.contentView = _view; +#endif } - return self; } @@ -48,5 +44,20 @@ - (void)updateProps:(Props::Shared const &)props oldProps:(Props::Shared const & return DropViewView.class; } +- (void)layoutSubviews +{ + [super layoutSubviews]; +} + +- (void)mountChildComponentView:(UIView *)childComponentView index:(NSInteger)index +{ + [super mountChildComponentView:childComponentView index:index]; +} + +- (UIView *)view +{ + return [[DropView alloc] init]; +} + @end #endif diff --git a/rnmodules/react-native-drop-view/yarn.lock b/rnmodules/react-native-drop-view/yarn.lock index 97bf2c2f7f1d..1709729a8258 100644 --- a/rnmodules/react-native-drop-view/yarn.lock +++ b/rnmodules/react-native-drop-view/yarn.lock @@ -18,12 +18,55 @@ "@babel/highlight" "^7.22.10" chalk "^2.4.2" -"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": +"@babel/code-frame@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" + integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== + dependencies: + "@babel/highlight" "^7.24.7" + picocolors "^1.0.0" + +"@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== + dependencies: + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/compat-data@^7.22.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": version "7.22.9" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730" integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== -"@babel/core@^7.13.16", "@babel/core@^7.18.5", "@babel/core@^7.20.0": +"@babel/compat-data@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.3.tgz#99488264a56b2aded63983abd6a417f03b92ed02" + integrity sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.25.2": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40" + integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.26.0" + "@babel/generator" "^7.26.0" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helpers" "^7.26.0" + "@babel/parser" "^7.26.0" + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.26.0" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/core@^7.13.16", "@babel/core@^7.18.5": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.10.tgz#aad442c7bcd1582252cb4576747ace35bc122f35" integrity sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw== @@ -44,7 +87,7 @@ json5 "^2.2.2" semver "^6.3.1" -"@babel/generator@^7.20.0", "@babel/generator@^7.22.10": +"@babel/generator@^7.22.10": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.10.tgz#c92254361f398e160645ac58831069707382b722" integrity sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A== @@ -54,6 +97,17 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" +"@babel/generator@^7.25.0", "@babel/generator@^7.26.0", "@babel/generator@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.3.tgz#ab8d4360544a425c90c248df7059881f4b2ce019" + integrity sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ== + dependencies: + "@babel/parser" "^7.26.3" + "@babel/types" "^7.26.3" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + "@babel/helper-annotate-as-pure@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" @@ -61,6 +115,13 @@ dependencies: "@babel/types" "^7.22.5" +"@babel/helper-annotate-as-pure@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4" + integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g== + dependencies: + "@babel/types" "^7.25.9" + "@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz#573e735937e99ea75ea30788b57eb52fab7468c9" @@ -68,7 +129,7 @@ dependencies: "@babel/types" "^7.22.10" -"@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.10", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": +"@babel/helper-compilation-targets@^7.22.10", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz#01d648bbc25dd88f513d862ee0df27b7d4e67024" integrity sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q== @@ -79,6 +140,17 @@ lru-cache "^5.1.1" semver "^6.3.1" +"@babel/helper-compilation-targets@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz#55af025ce365be3cdc0c1c1e56c6af617ce88875" + integrity sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ== + dependencies: + "@babel/compat-data" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + "@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.10", "@babel/helper-create-class-features-plugin@^7.22.5": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.10.tgz#dd2612d59eac45588021ac3d6fa976d08f4e95a3" @@ -94,6 +166,19 @@ "@babel/helper-split-export-declaration" "^7.22.6" semver "^6.3.1" +"@babel/helper-create-class-features-plugin@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz#7644147706bb90ff613297d49ed5266bde729f83" + integrity sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/traverse" "^7.25.9" + semver "^6.3.1" + "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": version "7.22.9" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz#9d8e61a8d9366fe66198f57c40565663de0825f6" @@ -103,6 +188,15 @@ regexpu-core "^5.3.1" semver "^6.3.1" +"@babel/helper-create-regexp-features-plugin@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz#5169756ecbe1d95f7866b90bb555b022595302a0" + integrity sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + regexpu-core "^6.2.0" + semver "^6.3.1" + "@babel/helper-define-polyfill-provider@^0.4.2": version "0.4.2" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" @@ -114,7 +208,18 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.22.5": +"@babel/helper-define-polyfill-provider@^0.6.2", "@babel/helper-define-polyfill-provider@^0.6.3": + version "0.6.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz#f4f2792fae2ef382074bc2d713522cf24e6ddb21" + integrity sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg== + dependencies: + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + +"@babel/helper-environment-visitor@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== @@ -141,6 +246,14 @@ dependencies: "@babel/types" "^7.22.5" +"@babel/helper-member-expression-to-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3" + integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + "@babel/helper-module-imports@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" @@ -148,6 +261,14 @@ dependencies: "@babel/types" "^7.22.5" +"@babel/helper-module-imports@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" + integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + "@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9": version "7.22.9" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz#92dfcb1fbbb2bc62529024f72d942a8c97142129" @@ -159,6 +280,15 @@ "@babel/helper-split-export-declaration" "^7.22.6" "@babel/helper-validator-identifier" "^7.22.5" +"@babel/helper-module-transforms@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" + integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/helper-optimise-call-expression@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" @@ -166,12 +296,29 @@ dependencies: "@babel/types" "^7.22.5" +"@babel/helper-optimise-call-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e" + integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ== + dependencies: + "@babel/types" "^7.25.9" + "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== -"@babel/helper-remap-async-to-generator@^7.18.9", "@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": +"@babel/helper-plugin-utils@^7.24.7": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz#94ee67e8ec0e5d44ea7baeb51e571bd26af07878" + integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg== + +"@babel/helper-plugin-utils@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz#9cbdd63a9443a2c92a725cca7ebca12cc8dd9f46" + integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw== + +"@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": version "7.22.9" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz#53a25b7484e722d7efb9c350c75c032d4628de82" integrity sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ== @@ -180,6 +327,15 @@ "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-wrap-function" "^7.22.9" +"@babel/helper-remap-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz#e53956ab3d5b9fb88be04b3e2f31b523afd34b92" + integrity sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-wrap-function" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": version "7.22.9" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz#cbdc27d6d8d18cd22c81ae4293765a5d9afd0779" @@ -189,6 +345,15 @@ "@babel/helper-member-expression-to-functions" "^7.22.5" "@babel/helper-optimise-call-expression" "^7.22.5" +"@babel/helper-replace-supers@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz#ba447224798c3da3f8713fc272b145e33da6a5c5" + integrity sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/helper-simple-access@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" @@ -203,6 +368,14 @@ dependencies: "@babel/types" "^7.22.5" +"@babel/helper-skip-transparent-expression-wrappers@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9" + integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + "@babel/helper-split-export-declaration@^7.22.6": version "7.22.6" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" @@ -215,16 +388,41 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-string-parser@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" + integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== + +"@babel/helper-string-parser@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" + integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== + "@babel/helper-validator-identifier@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== +"@babel/helper-validator-identifier@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" + integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== + +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== + "@babel/helper-validator-option@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac" integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== +"@babel/helper-validator-option@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" + integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== + "@babel/helper-wrap-function@^7.22.9": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz#d845e043880ed0b8c18bd194a12005cb16d2f614" @@ -234,6 +432,15 @@ "@babel/template" "^7.22.5" "@babel/types" "^7.22.10" +"@babel/helper-wrap-function@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz#d99dfd595312e6c894bd7d237470025c85eea9d0" + integrity sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g== + dependencies: + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + "@babel/helpers@^7.22.10": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.10.tgz#ae6005c539dfbcb5cd71fb51bfc8a52ba63bc37a" @@ -243,6 +450,14 @@ "@babel/traverse" "^7.22.10" "@babel/types" "^7.22.10" +"@babel/helpers@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4" + integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== + dependencies: + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.0" + "@babel/highlight@^7.22.10": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.10.tgz#02a3f6d8c1cb4521b2fd0ab0da8f4739936137d7" @@ -252,11 +467,35 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.13.16", "@babel/parser@^7.20.0", "@babel/parser@^7.22.10", "@babel/parser@^7.22.5": +"@babel/highlight@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" + integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== + dependencies: + "@babel/helper-validator-identifier" "^7.24.7" + chalk "^2.4.2" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.25.3", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.3.tgz#8c51c5db6ddf08134af1ddbacf16aaab48bac234" + integrity sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA== + dependencies: + "@babel/types" "^7.26.3" + +"@babel/parser@^7.13.16", "@babel/parser@^7.22.10", "@babel/parser@^7.22.5": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.10.tgz#e37634f9a12a1716136c44624ef54283cabd3f55" integrity sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ== +"@babel/parser@^7.25.0": + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.4.tgz#af4f2df7d02440286b7de57b1c21acfb2a6f257a" + integrity sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA== + dependencies: + "@babel/types" "^7.25.4" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz#87245a21cd69a73b0b81bcda98d443d6df08f05e" @@ -273,17 +512,7 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-transform-optional-chaining" "^7.22.5" -"@babel/plugin-proposal-async-generator-functions@^7.0.0": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" - integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-remap-async-to-generator" "^7.18.9" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.17.12", "@babel/plugin-proposal-class-properties@^7.18.0": +"@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.17.12": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== @@ -291,15 +520,14 @@ "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-export-default-from@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.22.5.tgz#825924eda1fad382c3de4db6fe1711b6fa03362f" - integrity sha512-UCe1X/hplyv6A5g2WnQ90tnHRvYL29dabCWww92lO7VdfMVTVReBTRrhiMrKQejHD9oVkdnRdwYuzUZkBVQisg== +"@babel/plugin-proposal-export-default-from@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.25.9.tgz#52702be6ef8367fc8f18b8438278332beeb8f87c" + integrity sha512-ykqgwNfSnNOB+C8fV5X4mG3AVmvu+WVxcaU9xHHtBb7PCrPeweMmPjGsn8eMaeJg6SJuoUuZENeeSWaarWqonQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-export-default-from" "^7.22.5" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8", "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.0": +"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== @@ -307,34 +535,7 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.0.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" - integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.20.0": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" - integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== - dependencies: - "@babel/compat-data" "^7.20.5" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.20.7" - -"@babel/plugin-proposal-optional-catch-binding@^7.0.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" - integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-proposal-optional-chaining@^7.13.12", "@babel/plugin-proposal-optional-chaining@^7.20.0": +"@babel/plugin-proposal-optional-chaining@^7.13.12": version "7.21.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== @@ -355,7 +556,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.0.0", "@babel/plugin-syntax-class-properties@^7.12.13": +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== @@ -369,19 +577,19 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": +"@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.22.5.tgz#ac3a24b362a04415a017ab96b9b4483d0e2a6e44" - integrity sha512-ODAqWWXB/yReh/jVQDag/3/tl6lgBueQkk/TcfW/59Oykm4c8a55XloX0CTk2k2VJiFWMgHby9xNX29IbCv9dQ== +"@babel/plugin-syntax-export-default-from@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.25.9.tgz#86614767a9ff140366f0c3766ef218beb32a730a" + integrity sha512-9MhJ/SMTsVqsd69GyQg89lYR4o9T+oDGv5F6IsigxxqFVOyR/IflDLYP8WDI1l8fkhNGGktqkvL5qwNCtGEpgQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-syntax-export-namespace-from@^7.8.3": version "7.8.3" @@ -390,13 +598,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.12.1", "@babel/plugin-syntax-flow@^7.18.0", "@babel/plugin-syntax-flow@^7.22.5": +"@babel/plugin-syntax-flow@^7.12.1", "@babel/plugin-syntax-flow@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz#163b820b9e7696ce134df3ee716d9c0c98035859" integrity sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-syntax-flow@^7.25.9": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.26.0.tgz#96507595c21b45fccfc2bc758d5c45452e6164fa" + integrity sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-syntax-import-assertions@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" @@ -411,6 +626,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-syntax-import-attributes@^7.24.7": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" + integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-syntax-import-meta@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" @@ -425,13 +647,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.22.5": +"@babel/plugin-syntax-jsx@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-syntax-jsx@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290" + integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -439,7 +668,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-nullish-coalescing-operator@^7.0.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== @@ -453,7 +682,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": +"@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== @@ -467,7 +696,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-chaining@^7.0.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": +"@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== @@ -495,6 +724,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-syntax-typescript@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399" + integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" @@ -503,13 +739,20 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.22.5": +"@babel/plugin-transform-arrow-functions@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-transform-arrow-functions@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz#7821d4410bee5daaadbb4cdd9a6649704e176845" + integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-async-generator-functions@^7.22.10": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.10.tgz#45946cd17f915b10e65c29b8ed18a0a50fc648c8" @@ -520,7 +763,16 @@ "@babel/helper-remap-async-to-generator" "^7.22.9" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-transform-async-to-generator@^7.20.0", "@babel/plugin-transform-async-to-generator@^7.22.5": +"@babel/plugin-transform-async-generator-functions@^7.25.4": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz#1b18530b077d18a407c494eb3d1d72da505283a2" + integrity sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-transform-async-to-generator@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== @@ -529,20 +781,36 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-remap-async-to-generator" "^7.22.5" -"@babel/plugin-transform-block-scoped-functions@^7.0.0", "@babel/plugin-transform-block-scoped-functions@^7.22.5": +"@babel/plugin-transform-async-to-generator@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz#c80008dacae51482793e5a9c08b39a5be7e12d71" + integrity sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" + +"@babel/plugin-transform-block-scoped-functions@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.22.10": +"@babel/plugin-transform-block-scoping@^7.22.10": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz#88a1dccc3383899eb5e660534a76a22ecee64faa" integrity sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-transform-block-scoping@^7.25.0": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz#c33665e46b06759c93687ca0f84395b80c0473a1" + integrity sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-class-properties@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" @@ -551,6 +819,14 @@ "@babel/helper-create-class-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-transform-class-properties@^7.25.4": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz#a8ce84fedb9ad512549984101fa84080a9f5f51f" + integrity sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-class-static-block@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz#3e40c46f048403472d6f4183116d5e46b1bff5ba" @@ -560,7 +836,7 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.22.6": +"@babel/plugin-transform-classes@^7.22.6": version "7.22.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz#e04d7d804ed5b8501311293d1a0e6d43e94c3363" integrity sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ== @@ -575,7 +851,19 @@ "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.22.5": +"@babel/plugin-transform-classes@^7.25.4": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz#7152457f7880b593a63ade8a861e6e26a4469f52" + integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/traverse" "^7.25.9" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== @@ -583,13 +871,28 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/template" "^7.22.5" -"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.20.0", "@babel/plugin-transform-destructuring@^7.22.10": +"@babel/plugin-transform-computed-properties@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz#db36492c78460e534b8852b1d5befe3c923ef10b" + integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/template" "^7.25.9" + +"@babel/plugin-transform-destructuring@^7.22.10": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz#38e2273814a58c810b6c34ea293be4973c4eb5e2" integrity sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-transform-destructuring@^7.24.8": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz#966ea2595c498224340883602d3cfd7a0c79cea1" + integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-dotall-regex@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" @@ -629,7 +932,7 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-flow-strip-types@^7.0.0", "@babel/plugin-transform-flow-strip-types@^7.20.0", "@babel/plugin-transform-flow-strip-types@^7.22.5": +"@babel/plugin-transform-flow-strip-types@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz#0bb17110c7bf5b35a60754b2f00c58302381dee2" integrity sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA== @@ -637,14 +940,30 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-flow" "^7.22.5" -"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.22.5": +"@babel/plugin-transform-flow-strip-types@^7.25.2": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.9.tgz#85879b42a8f5948fd6317069978e98f23ef8aec1" + integrity sha512-/VVukELzPDdci7UUsWQaSkhgnjIWXnIyRpM02ldxaVoFK96c41So8JcKT3m0gYjyv7j5FNPGS5vfELrWalkbDA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-syntax-flow" "^7.25.9" + +"@babel/plugin-transform-for-of@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz#ab1b8a200a8f990137aff9a084f8de4099ab173f" integrity sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.22.5": +"@babel/plugin-transform-for-of@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz#4bdc7d42a213397905d89f02350c5267866d5755" + integrity sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + +"@babel/plugin-transform-function-name@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== @@ -653,6 +972,15 @@ "@babel/helper-function-name" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-transform-function-name@^7.25.1": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz#939d956e68a606661005bfd550c4fc2ef95f7b97" + integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA== + dependencies: + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/plugin-transform-json-strings@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz#14b64352fdf7e1f737eed68de1a1468bd2a77ec0" @@ -661,13 +989,20 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.22.5": +"@babel/plugin-transform-literals@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== dependencies: "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-transform-literals@^7.25.2": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz#1a1c6b4d4aa59bc4cad5b6b3a223a0abd685c9de" + integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-logical-assignment-operators@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz#66ae5f068fd5a9a5dc570df16f56c2a8462a9d6c" @@ -676,7 +1011,14 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.0.0", "@babel/plugin-transform-member-expression-literals@^7.22.5": +"@babel/plugin-transform-logical-assignment-operators@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz#b19441a8c39a2fda0902900b306ea05ae1055db7" + integrity sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-member-expression-literals@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== @@ -691,7 +1033,7 @@ "@babel/helper-module-transforms" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.22.5": +"@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz#7d9875908d19b8c0536085af7b053fd5bd651bfa" integrity sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA== @@ -700,6 +1042,14 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-simple-access" "^7.22.5" +"@babel/plugin-transform-modules-commonjs@^7.24.8": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz#8f011d44b20d02c3de44d8850d971d8497f981fb" + integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ== + dependencies: + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-modules-systemjs@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz#18c31410b5e579a0092638f95c896c2a98a5d496" @@ -718,7 +1068,7 @@ "@babel/helper-module-transforms" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-named-capturing-groups-regex@^7.0.0", "@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": +"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== @@ -726,6 +1076,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-transform-named-capturing-groups-regex@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz#454990ae6cc22fd2a0fa60b3a2c6f63a38064e6a" + integrity sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-new-target@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" @@ -741,6 +1099,13 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" +"@babel/plugin-transform-nullish-coalescing-operator@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz#bcb1b0d9e948168102d5f7104375ca21c3266949" + integrity sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-numeric-separator@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz#57226a2ed9e512b9b446517ab6fa2d17abb83f58" @@ -749,6 +1114,13 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" +"@babel/plugin-transform-numeric-separator@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz#bfed75866261a8b643468b0ccfd275f2033214a1" + integrity sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-object-rest-spread@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz#9686dc3447df4753b0b2a2fae7e8bc33cdc1f2e1" @@ -760,7 +1132,16 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.22.5" -"@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.22.5": +"@babel/plugin-transform-object-rest-spread@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz#0203725025074164808bcf1a2cfa90c652c99f18" + integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg== + dependencies: + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" + +"@babel/plugin-transform-object-super@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== @@ -776,6 +1157,13 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" +"@babel/plugin-transform-optional-catch-binding@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz#10e70d96d52bb1f10c5caaac59ac545ea2ba7ff3" + integrity sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-optional-chaining@^7.22.10", "@babel/plugin-transform-optional-chaining@^7.22.5": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.10.tgz#076d28a7e074392e840d4ae587d83445bac0372a" @@ -785,13 +1173,35 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.22.5": +"@babel/plugin-transform-optional-chaining@^7.24.8": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz#e142eb899d26ef715435f201ab6e139541eee7dd" + integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + +"@babel/plugin-transform-parameters@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz#c3542dd3c39b42c8069936e48717a8d179d63a18" integrity sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-transform-parameters@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz#5881f0ae21018400e320fc7eb817e529d1254b68" + integrity sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-parameters@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz#b856842205b3e77e18b7a7a1b94958069c7ba257" + integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-private-methods@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" @@ -800,6 +1210,14 @@ "@babel/helper-create-class-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-transform-private-methods@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57" + integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-private-property-in-object@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz#07a77f28cbb251546a43d175a1dda4cf3ef83e32" @@ -810,20 +1228,36 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.22.5": +"@babel/plugin-transform-private-property-in-object@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz#9c8b73e64e6cc3cbb2743633885a7dd2c385fe33" + integrity sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-property-literals@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.22.5": +"@babel/plugin-transform-react-display-name@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz#3c4326f9fce31c7968d6cb9debcaf32d9e279a2b" integrity sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-transform-react-display-name@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz#4b79746b59efa1f38c8695065a92a9f5afb24f7d" + integrity sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-react-jsx-development@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" @@ -831,21 +1265,21 @@ dependencies: "@babel/plugin-transform-react-jsx" "^7.22.5" -"@babel/plugin-transform-react-jsx-self@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz#ca2fdc11bc20d4d46de01137318b13d04e481d8e" - integrity sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g== +"@babel/plugin-transform-react-jsx-self@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz#c0b6cae9c1b73967f7f9eb2fca9536ba2fad2858" + integrity sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-react-jsx-source@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz#49af1615bfdf6ed9d3e9e43e425e0b2b65d15b6c" - integrity sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w== +"@babel/plugin-transform-react-jsx-source@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz#4c6b8daa520b5f155b5fb55547d7c9fa91417503" + integrity sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.22.5": +"@babel/plugin-transform-react-jsx@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz#932c291eb6dd1153359e2a90cb5e557dcf068416" integrity sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA== @@ -856,6 +1290,17 @@ "@babel/plugin-syntax-jsx" "^7.22.5" "@babel/types" "^7.22.5" +"@babel/plugin-transform-react-jsx@^7.25.2": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz#06367940d8325b36edff5e2b9cbe782947ca4166" + integrity sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-syntax-jsx" "^7.25.9" + "@babel/types" "^7.25.9" + "@babel/plugin-transform-react-pure-annotations@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz#1f58363eef6626d6fa517b95ac66fe94685e32c0" @@ -872,6 +1317,14 @@ "@babel/helper-plugin-utils" "^7.22.5" regenerator-transform "^0.15.2" +"@babel/plugin-transform-regenerator@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz#03a8a4670d6cebae95305ac6defac81ece77740b" + integrity sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + regenerator-transform "^0.15.2" + "@babel/plugin-transform-reserved-words@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" @@ -879,26 +1332,33 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-runtime@^7.0.0": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.10.tgz#89eda6daf1d3af6f36fb368766553054c8d7cd46" - integrity sha512-RchI7HePu1eu0CYNKHHHQdfenZcM4nz8rew5B1VWqeRKdcwW5aQ5HeG9eTUbWiAS1UrmHVLmoxTWHt3iLD/NhA== +"@babel/plugin-transform-runtime@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz#62723ea3f5b31ffbe676da9d6dae17138ae580ea" + integrity sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ== dependencies: - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.5" - babel-plugin-polyfill-corejs3 "^0.8.3" - babel-plugin-polyfill-regenerator "^0.5.2" + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.6" + babel-plugin-polyfill-regenerator "^0.6.1" semver "^6.3.1" -"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.22.5": +"@babel/plugin-transform-shorthand-properties@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.22.5": +"@babel/plugin-transform-shorthand-properties@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz#bb785e6091f99f826a95f9894fc16fde61c163f2" + integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-spread@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== @@ -906,14 +1366,29 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-sticky-regex@^7.0.0", "@babel/plugin-transform-sticky-regex@^7.22.5": +"@babel/plugin-transform-spread@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz#24a35153931b4ba3d13cec4a7748c21ab5514ef9" + integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + +"@babel/plugin-transform-sticky-regex@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.22.5": +"@babel/plugin-transform-sticky-regex@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz#c7f02b944e986a417817b20ba2c504dfc1453d32" + integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-template-literals@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== @@ -927,7 +1402,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typescript@^7.22.5", "@babel/plugin-transform-typescript@^7.5.0": +"@babel/plugin-transform-typescript@^7.22.5": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.10.tgz#aadd98fab871f0bb5717bcc24c31aaaa455af923" integrity sha512-7++c8I/ymsDo4QQBAgbraXLzIM6jmfao11KgIBEYZRReWzNWH9NtNgJcyrZiXsOPh523FQm6LfpLyy/U5fn46A== @@ -937,6 +1412,17 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-typescript" "^7.22.5" +"@babel/plugin-transform-typescript@^7.25.2": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.3.tgz#3d6add9c78735623317387ee26d5ada540eee3fd" + integrity sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-syntax-typescript" "^7.25.9" + "@babel/plugin-transform-unicode-escapes@^7.22.10": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9" @@ -952,7 +1438,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-regex@^7.0.0", "@babel/plugin-transform-unicode-regex@^7.22.5": +"@babel/plugin-transform-unicode-regex@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== @@ -960,6 +1446,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-transform-unicode-regex@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz#5eae747fe39eacf13a8bd006a4fb0b5d1fa5e9b1" + integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-unicode-sets-regex@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" @@ -1111,14 +1605,21 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.0.0", "@babel/runtime@^7.8.4": +"@babel/runtime@^7.25.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" + integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/runtime@^7.8.4": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.10.tgz#ae3e9631fd947cb7e3610d3e9d8fef5f76696682" integrity sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.0.0", "@babel/template@^7.22.5": +"@babel/template@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== @@ -1127,7 +1628,38 @@ "@babel/parser" "^7.22.5" "@babel/types" "^7.22.5" -"@babel/traverse@^7.20.0", "@babel/traverse@^7.22.10": +"@babel/template@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" + integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/parser" "^7.25.0" + "@babel/types" "^7.25.0" + +"@babel/template@^7.25.9", "@babel/template@^7.3.3": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" + integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== + dependencies: + "@babel/code-frame" "^7.25.9" + "@babel/parser" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3": + version "7.26.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.4.tgz#ac3a2a84b908dde6d463c3bfa2c5fdc1653574bd" + integrity sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.3" + "@babel/parser" "^7.26.3" + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.3" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/traverse@^7.22.10": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.10.tgz#20252acb240e746d27c2e82b4484f199cf8141aa" integrity sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig== @@ -1143,7 +1675,28 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.20.0", "@babel/types@^7.22.10", "@babel/types@^7.22.5", "@babel/types@^7.4.4": +"@babel/traverse@^7.25.3", "@babel/traverse@^7.25.9": + version "7.26.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.4.tgz#ac3a2a84b908dde6d463c3bfa2c5fdc1653574bd" + integrity sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.3" + "@babel/parser" "^7.26.3" + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.3" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.25.2", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.26.3", "@babel/types@^7.3.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.3.tgz#37e79830f04c2b5687acc77db97fbc75fb81f3c0" + integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA== + dependencies: + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + +"@babel/types@^7.22.10", "@babel/types@^7.22.5", "@babel/types@^7.4.4": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.10.tgz#4a9e76446048f2c66982d1a989dd12b8a2d2dc03" integrity sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg== @@ -1152,82 +1705,99 @@ "@babel/helper-validator-identifier" "^7.22.5" to-fast-properties "^2.0.0" -"@hapi/hoek@^9.0.0": - version "9.3.0" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" - integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== +"@babel/types@^7.25.0", "@babel/types@^7.25.4": + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.4.tgz#6bcb46c72fdf1012a209d016c07f769e10adcb5f" + integrity sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ== + dependencies: + "@babel/helper-string-parser" "^7.24.8" + "@babel/helper-validator-identifier" "^7.24.7" + to-fast-properties "^2.0.0" -"@hapi/topo@^5.0.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" - integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== +"@isaacs/ttlcache@^1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz#21fb23db34e9b6220c6ba023a0118a2dd3461ea2" + integrity sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA== + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== dependencies: - "@hapi/hoek" "^9.0.0" + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/create-cache-key-function@^29.2.1": - version "29.6.2" - resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-29.6.2.tgz#b6b74fb741a7b7d9aa399c179694db8272283527" - integrity sha512-oGVRMr8na9h1vUiem1E/Uoxb/NR9BdfKb7IBZ+pNWxJQmTYSbDF0dsVBAGqNU7MBQwYJDyRx0H7H/0itiqAgQg== +"@jest/create-cache-key-function@^29.6.3": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz#793be38148fab78e65f40ae30c36785f4ad859f0" + integrity sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA== dependencies: - "@jest/types" "^29.6.1" + "@jest/types" "^29.6.3" -"@jest/environment@^29.6.2": - version "29.6.2" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.6.2.tgz#794c0f769d85e7553439d107d3f43186dc6874a9" - integrity sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q== +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== dependencies: - "@jest/fake-timers" "^29.6.2" - "@jest/types" "^29.6.1" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^29.6.2" + jest-mock "^29.7.0" -"@jest/fake-timers@^29.6.2": - version "29.6.2" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.6.2.tgz#fe9d43c5e4b1b901168fe6f46f861b3e652a2df4" - integrity sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA== +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== dependencies: - "@jest/types" "^29.6.1" + "@jest/types" "^29.6.3" "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^29.6.2" - jest-mock "^29.6.2" - jest-util "^29.6.2" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" -"@jest/schemas@^29.6.0": - version "29.6.0" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.0.tgz#0f4cb2c8e3dca80c135507ba5635a4fd755b0040" - integrity sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ== +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== dependencies: "@sinclair/typebox" "^0.27.8" -"@jest/types@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" - integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - -"@jest/types@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" - integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^16.0.0" + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" -"@jest/types@^29.6.1": - version "29.6.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.1.tgz#ae79080278acff0a6af5eb49d063385aaa897bf2" - integrity sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw== +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== dependencies: - "@jest/schemas" "^29.6.0" + "@jest/schemas" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" @@ -1243,6 +1813,15 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + "@jridgewell/resolve-uri@^3.1.0": version "3.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" @@ -1253,6 +1832,11 @@ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + "@jridgewell/source-map@^0.3.3": version "0.3.5" resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" @@ -1274,6 +1858,14 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1295,225 +1887,155 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@react-native-community/cli-clean@11.3.10": - version "11.3.10" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-clean/-/cli-clean-11.3.10.tgz#70d14dd998ce8ad532266b36a0e5cafe22d300ac" - integrity sha512-g6QjW+DSqoWRHzmIQW3AH22k1AnynWuOdy2YPwYEGgPddTeXZtJphIpEVwDOiC0L4mZv2VmiX33/cGNUwO0cIA== - dependencies: - "@react-native-community/cli-tools" "11.3.10" - chalk "^4.1.2" - execa "^5.0.0" - prompts "^2.4.0" - -"@react-native-community/cli-config@11.3.10": - version "11.3.10" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-config/-/cli-config-11.3.10.tgz#753510a80a98b136fec852e1ea5fa655c13dbd17" - integrity sha512-YYu14nm1JYLS6mDRBz78+zDdSFudLBFpPkhkOoj4LuBhNForQBIqFFHzQbd9/gcguJxfW3vlYSnudfaUI7oGLg== - dependencies: - "@react-native-community/cli-tools" "11.3.10" - chalk "^4.1.2" - cosmiconfig "^5.1.0" - deepmerge "^4.3.0" - glob "^7.1.3" - joi "^17.2.1" - -"@react-native-community/cli-debugger-ui@11.3.10": - version "11.3.10" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-11.3.10.tgz#b16ebf770ba3cc76bf46580f101d00dacf919824" - integrity sha512-kyitGV3RsjlXIioq9lsuawha2GUBPCTAyXV6EBlm3qlyF3dMniB3twEvz+fIOid/e1ZeucH3Tzy5G3qcP8yWoA== - dependencies: - serve-static "^1.13.1" +"@react-native/assets-registry@0.76.5": + version "0.76.5" + resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.76.5.tgz#3343338813aa6354df9fec52af50d0b5f7f3d013" + integrity sha512-MN5dasWo37MirVcKWuysRkRr4BjNc81SXwUtJYstwbn8oEkfnwR9DaqdDTo/hHOnTdhafffLIa2xOOHcjDIGEw== -"@react-native-community/cli-doctor@11.3.10": - version "11.3.10" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-11.3.10.tgz#161b8fd1b485cd52f7a19b2025696070b9d2b6a1" - integrity sha512-DpMsfCWKZ15L9nFK/SyDvpl5v6MjV+arMHMC1i8kR+DOmf2xWmp/pgMywKk0/u50yGB9GwxBHt3i/S/IMK5Ylg== +"@react-native/babel-plugin-codegen@0.76.5": + version "0.76.5" + resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.76.5.tgz#a7c32274351e51db9c0a7849ce8059940448c087" + integrity sha512-xe7HSQGop4bnOLMaXt0aU+rIatMNEQbz242SDl8V9vx5oOTI0VbZV9yLy6yBc6poUlYbcboF20YVjoRsxX4yww== dependencies: - "@react-native-community/cli-config" "11.3.10" - "@react-native-community/cli-platform-android" "11.3.10" - "@react-native-community/cli-platform-ios" "11.3.10" - "@react-native-community/cli-tools" "11.3.10" - chalk "^4.1.2" - command-exists "^1.2.8" - envinfo "^7.7.2" - execa "^5.0.0" - hermes-profile-transformer "^0.0.6" - ip "^1.1.5" - node-stream-zip "^1.9.1" - ora "^5.4.1" - prompts "^2.4.0" - semver "^7.5.2" - strip-ansi "^5.2.0" - sudo-prompt "^9.0.0" - wcwidth "^1.0.1" - yaml "^2.2.1" - -"@react-native-community/cli-hermes@11.3.10": - version "11.3.10" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-11.3.10.tgz#f3d4f069ca472b1d8b4e8132cf9c44097a58ca19" - integrity sha512-vqINuzAlcHS9ImNwJtT43N7kfBQ7ro9A8O1Gpc5TQ0A8V36yGG8eoCHeauayklVVgMZpZL6f6mcoLLr9IOgBZQ== - dependencies: - "@react-native-community/cli-platform-android" "11.3.10" - "@react-native-community/cli-tools" "11.3.10" - chalk "^4.1.2" - hermes-profile-transformer "^0.0.6" - ip "^1.1.5" + "@react-native/codegen" "0.76.5" -"@react-native-community/cli-platform-android@11.3.10": - version "11.3.10" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-11.3.10.tgz#756dd73ad78bf2f20c678683dfc48cb764b1b590" - integrity sha512-RGu9KuDIXnrcNkacSHj5ETTQtp/D/835L6veE2jMigO21p//gnKAjw3AVLCysGr8YXYfThF8OSOALrwNc94puQ== +"@react-native/babel-preset@0.76.5": + version "0.76.5" + resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.76.5.tgz#794ca17e1107e46712153f296a4930de2048e20e" + integrity sha512-1Nu5Um4EogOdppBLI4pfupkteTjWfmI0hqW8ezWTg7Bezw0FtBj8yS8UYVd3wTnDFT9A5mA2VNoNUqomJnvj2A== dependencies: - "@react-native-community/cli-tools" "11.3.10" - chalk "^4.1.2" - execa "^5.0.0" - glob "^7.1.3" - logkitty "^0.7.1" + "@babel/core" "^7.25.2" + "@babel/plugin-proposal-export-default-from" "^7.24.7" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-default-from" "^7.24.7" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-transform-arrow-functions" "^7.24.7" + "@babel/plugin-transform-async-generator-functions" "^7.25.4" + "@babel/plugin-transform-async-to-generator" "^7.24.7" + "@babel/plugin-transform-block-scoping" "^7.25.0" + "@babel/plugin-transform-class-properties" "^7.25.4" + "@babel/plugin-transform-classes" "^7.25.4" + "@babel/plugin-transform-computed-properties" "^7.24.7" + "@babel/plugin-transform-destructuring" "^7.24.8" + "@babel/plugin-transform-flow-strip-types" "^7.25.2" + "@babel/plugin-transform-for-of" "^7.24.7" + "@babel/plugin-transform-function-name" "^7.25.1" + "@babel/plugin-transform-literals" "^7.25.2" + "@babel/plugin-transform-logical-assignment-operators" "^7.24.7" + "@babel/plugin-transform-modules-commonjs" "^7.24.8" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.7" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.7" + "@babel/plugin-transform-numeric-separator" "^7.24.7" + "@babel/plugin-transform-object-rest-spread" "^7.24.7" + "@babel/plugin-transform-optional-catch-binding" "^7.24.7" + "@babel/plugin-transform-optional-chaining" "^7.24.8" + "@babel/plugin-transform-parameters" "^7.24.7" + "@babel/plugin-transform-private-methods" "^7.24.7" + "@babel/plugin-transform-private-property-in-object" "^7.24.7" + "@babel/plugin-transform-react-display-name" "^7.24.7" + "@babel/plugin-transform-react-jsx" "^7.25.2" + "@babel/plugin-transform-react-jsx-self" "^7.24.7" + "@babel/plugin-transform-react-jsx-source" "^7.24.7" + "@babel/plugin-transform-regenerator" "^7.24.7" + "@babel/plugin-transform-runtime" "^7.24.7" + "@babel/plugin-transform-shorthand-properties" "^7.24.7" + "@babel/plugin-transform-spread" "^7.24.7" + "@babel/plugin-transform-sticky-regex" "^7.24.7" + "@babel/plugin-transform-typescript" "^7.25.2" + "@babel/plugin-transform-unicode-regex" "^7.24.7" + "@babel/template" "^7.25.0" + "@react-native/babel-plugin-codegen" "0.76.5" + babel-plugin-syntax-hermes-parser "^0.25.1" + babel-plugin-transform-flow-enums "^0.0.2" + react-refresh "^0.14.0" -"@react-native-community/cli-platform-ios@11.3.10": - version "11.3.10" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-11.3.10.tgz#f8a9bca1181802f12ed15714d5a496e60096cbed" - integrity sha512-JjduMrBM567/j4Hvjsff77dGSLMA0+p9rr0nShlgnKPcc+0J4TDy0hgWpUceM7OG00AdDjpetAPupz0kkAh4cQ== +"@react-native/codegen@0.76.5": + version "0.76.5" + resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.76.5.tgz#4d89ec14a023d6946dbc44537c39b03bd006db7b" + integrity sha512-FoZ9VRQ5MpgtDAnVo1rT9nNRfjnWpE40o1GeJSDlpUMttd36bVXvsDm8W/NhX8BKTWXSX+CPQJsRcvN1UPYGKg== dependencies: - "@react-native-community/cli-tools" "11.3.10" - chalk "^4.1.2" - execa "^5.0.0" - fast-xml-parser "^4.0.12" - glob "^7.1.3" - ora "^5.4.1" + "@babel/parser" "^7.25.3" + glob "^7.1.1" + hermes-parser "0.23.1" + invariant "^2.2.4" + jscodeshift "^0.14.0" + mkdirp "^0.5.1" + nullthrows "^1.1.1" + yargs "^17.6.2" -"@react-native-community/cli-plugin-metro@11.3.10": - version "11.3.10" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-11.3.10.tgz#6ed67dda2518d3dabae20f3b38f66a0a9bd8e962" - integrity sha512-ZYAc5Hc+QVqJgj1XFbpKnIPbSJ9xKcBnfQrRhR+jFyt2DWx85u4bbzY1GSVc/USs0UbSUXv4dqPbnmOJz52EYQ== +"@react-native/community-cli-plugin@0.76.5": + version "0.76.5" + resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.76.5.tgz#e701a9f99565504a2510d1b54713b1c5dd0f1bb4" + integrity sha512-3MKMnlU0cZOWlMhz5UG6WqACJiWUrE3XwBEumzbMmZw3Iw3h+fIsn+7kLLE5EhzqLt0hg5Y4cgYFi4kOaNgq+g== dependencies: - "@react-native-community/cli-server-api" "11.3.10" - "@react-native-community/cli-tools" "11.3.10" - chalk "^4.1.2" - execa "^5.0.0" - metro "0.76.8" - metro-config "0.76.8" - metro-core "0.76.8" - metro-react-native-babel-transformer "0.76.8" - metro-resolver "0.76.8" - metro-runtime "0.76.8" + "@react-native/dev-middleware" "0.76.5" + "@react-native/metro-babel-transformer" "0.76.5" + chalk "^4.0.0" + execa "^5.1.1" + invariant "^2.2.4" + metro "^0.81.0" + metro-config "^0.81.0" + metro-core "^0.81.0" + node-fetch "^2.2.0" readline "^1.3.0" - -"@react-native-community/cli-server-api@11.3.10": - version "11.3.10" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-11.3.10.tgz#2c4940d921711f2c78f0b61f126e8dbbbef6277c" - integrity sha512-WEwHWIpqx3gA6Da+lrmq8+z78E1XbxxjBlvHAXevhjJj42N4SO417eZiiUVrFzEFVVJSUee9n9aRa0kUR+0/2w== - dependencies: - "@react-native-community/cli-debugger-ui" "11.3.10" - "@react-native-community/cli-tools" "11.3.10" - compression "^1.7.1" + semver "^7.1.3" + +"@react-native/debugger-frontend@0.76.5": + version "0.76.5" + resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.76.5.tgz#0e89940543fb5029506690b83f12547d0bf42cc4" + integrity sha512-5gtsLfBaSoa9WP8ToDb/8NnDBLZjv4sybQQj7rDKytKOdsXm3Pr2y4D7x7GQQtP1ZQRqzU0X0OZrhRz9xNnOqA== + +"@react-native/dev-middleware@0.76.5": + version "0.76.5" + resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.76.5.tgz#10d02fcc6c3c9d24f6dc147c2ef95d6fa6bd3787" + integrity sha512-f8eimsxpkvMgJia7POKoUu9uqjGF6KgkxX4zqr/a6eoR1qdEAWUd6PonSAqtag3PAqvEaJpB99gLH2ZJI1nDGg== + dependencies: + "@isaacs/ttlcache" "^1.4.1" + "@react-native/debugger-frontend" "0.76.5" + chrome-launcher "^0.15.2" + chromium-edge-launcher "^0.2.0" connect "^3.6.5" - errorhandler "^1.5.1" - nocache "^3.0.1" - pretty-format "^26.6.2" + debug "^2.2.0" + nullthrows "^1.1.1" + open "^7.0.3" + selfsigned "^2.4.1" serve-static "^1.13.1" - ws "^7.5.1" - -"@react-native-community/cli-tools@11.3.10": - version "11.3.10" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-11.3.10.tgz#d7bbe3fd8b338004f996f03f53a5373d9caab91c" - integrity sha512-4kCuCwVcGagSrNg9vxMNVhynwpByuC/J5UnKGEet3HuqmoDhQW15m18fJXiehA8J+u9WBvHduefy9nZxO0C06Q== - dependencies: - appdirsjs "^1.2.4" - chalk "^4.1.2" - find-up "^5.0.0" - mime "^2.4.1" - node-fetch "^2.6.0" - open "^6.2.0" - ora "^5.4.1" - semver "^7.5.2" - shell-quote "^1.7.3" - -"@react-native-community/cli-types@11.3.10": - version "11.3.10" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-11.3.10.tgz#cb02186cd247108bcea5ff93c4c97bb3c8dd8f22" - integrity sha512-0FHK/JE7bTn0x1y8Lk5m3RISDHIBQqWLltO2Mf7YQ6cAeKs8iNOJOeKaHJEY+ohjsOyCziw+XSC4cY57dQrwNA== - dependencies: - joi "^17.2.1" - -"@react-native-community/cli@11.3.10": - version "11.3.10" - resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-11.3.10.tgz#ea88d20982cfc9ed7a5170d04aeedd2abf092348" - integrity sha512-bIx0t5s9ewH1PlcEcuQUD+UnVrCjPGAfjhVR5Gew565X60nE+GTIHRn70nMv9G4he/amBF+Z+vf5t8SNZEWMwg== - dependencies: - "@react-native-community/cli-clean" "11.3.10" - "@react-native-community/cli-config" "11.3.10" - "@react-native-community/cli-debugger-ui" "11.3.10" - "@react-native-community/cli-doctor" "11.3.10" - "@react-native-community/cli-hermes" "11.3.10" - "@react-native-community/cli-plugin-metro" "11.3.10" - "@react-native-community/cli-server-api" "11.3.10" - "@react-native-community/cli-tools" "11.3.10" - "@react-native-community/cli-types" "11.3.10" - chalk "^4.1.2" - commander "^9.4.1" - execa "^5.0.0" - find-up "^4.1.0" - fs-extra "^8.1.0" - graceful-fs "^4.1.3" - prompts "^2.4.0" - semver "^7.5.2" - -"@react-native/assets-registry@^0.72.0": - version "0.72.0" - resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.72.0.tgz#c82a76a1d86ec0c3907be76f7faf97a32bbed05d" - integrity sha512-Im93xRJuHHxb1wniGhBMsxLwcfzdYreSZVQGDoMJgkd6+Iky61LInGEHnQCTN0fKNYF1Dvcofb4uMmE1RQHXHQ== - -"@react-native/codegen@^0.72.7": - version "0.72.7" - resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.72.7.tgz#b6832ce631ac63143024ea094a6b5480a780e589" - integrity sha512-O7xNcGeXGbY+VoqBGNlZ3O05gxfATlwE1Q1qQf5E38dK+tXn5BY4u0jaQ9DPjfE8pBba8g/BYI1N44lynidMtg== - dependencies: - "@babel/parser" "^7.20.0" - flow-parser "^0.206.0" - jscodeshift "^0.14.0" + ws "^6.2.3" + +"@react-native/gradle-plugin@0.76.5": + version "0.76.5" + resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.76.5.tgz#90d55ec3a99c609358db97b2d7444b28fdc35bc0" + integrity sha512-7KSyD0g0KhbngITduC8OABn0MAlJfwjIdze7nA4Oe1q3R7qmAv+wQzW+UEXvPah8m1WqFjYTkQwz/4mK3XrQGw== + +"@react-native/js-polyfills@0.76.5": + version "0.76.5" + resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.76.5.tgz#8f35696d96f804de589cd38382c4f0ffbbc248d5" + integrity sha512-ggM8tcKTcaqyKQcXMIvcB0vVfqr9ZRhWVxWIdiFO1mPvJyS6n+a+lLGkgQAyO8pfH0R1qw6K9D0nqbbDo865WQ== + +"@react-native/metro-babel-transformer@0.76.5": + version "0.76.5" + resolved "https://registry.yarnpkg.com/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.76.5.tgz#ed5a05fff34c47af43eba4069e50be7c486f77bd" + integrity sha512-Cm9G5Sg5BDty3/MKa3vbCAJtT3YHhlEaPlQALLykju7qBS+pHZV9bE9hocfyyvc5N/osTIGWxG5YOfqTeMu1oQ== + dependencies: + "@babel/core" "^7.25.2" + "@react-native/babel-preset" "0.76.5" + hermes-parser "0.23.1" nullthrows "^1.1.1" -"@react-native/gradle-plugin@^0.72.11": - version "0.72.11" - resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.72.11.tgz#c063ef12778706611de7a1e42b74b14d9405fb9f" - integrity sha512-P9iRnxiR2w7EHcZ0mJ+fmbPzMby77ZzV6y9sJI3lVLJzF7TLSdbwcQyD3lwMsiL+q5lKUHoZJS4sYmih+P2HXw== - -"@react-native/js-polyfills@^0.72.1": - version "0.72.1" - resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.72.1.tgz#905343ef0c51256f128256330fccbdb35b922291" - integrity sha512-cRPZh2rBswFnGt5X5EUEPs0r+pAsXxYsifv/fgy9ZLQokuT52bPH+9xjDR+7TafRua5CttGW83wP4TntRcWNDA== - -"@react-native/normalize-colors@<0.73.0", "@react-native/normalize-colors@^0.72.0": - version "0.72.0" - resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.72.0.tgz#14294b7ed3c1d92176d2a00df48456e8d7d62212" - integrity sha512-285lfdqSXaqKuBbbtP9qL2tDrfxdOFtIMvkKadtleRQkdOxx+uzGvFr82KHmc/sSiMtfXGp7JnFYWVh4sFl7Yw== +"@react-native/normalize-colors@0.76.5": + version "0.76.5" + resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.76.5.tgz#a33560736311aefcf1d3cb594597befe81a9a53c" + integrity sha512-6QRLEok1r55gLqj+94mEWUENuU5A6wsr2OoXpyq/CgQ7THWowbHtru/kRGRr6o3AQXrVnZheR60JNgFcpNYIug== -"@react-native/virtualized-lists@^0.72.8": - version "0.72.8" - resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.72.8.tgz#a2c6a91ea0f1d40eb5a122fb063daedb92ed1dc3" - integrity sha512-J3Q4Bkuo99k7mu+jPS9gSUSgq+lLRSI/+ahXNwV92XgJ/8UgOTxu2LPwhJnBk/sQKxq7E8WkZBnBiozukQMqrw== +"@react-native/virtualized-lists@0.76.5": + version "0.76.5" + resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.76.5.tgz#394c2d48687db30c79278d183fda8a129a2d24d3" + integrity sha512-M/fW1fTwxrHbcx0OiVOIxzG6rKC0j9cR9Csf80o77y1Xry0yrNPpAlf8D1ev3LvHsiAUiRNFlauoPtodrs2J1A== dependencies: invariant "^2.2.4" nullthrows "^1.1.1" -"@sideway/address@^4.1.3": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" - integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== - dependencies: - "@hapi/hoek" "^9.0.0" - -"@sideway/formula@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" - integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== - -"@sideway/pinpoint@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" - integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== - "@sinclair/typebox@^0.27.8": version "0.27.8" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" @@ -1533,6 +2055,46 @@ dependencies: "@sinonjs/commons" "^3.0.0" +"@types/babel__core@^7.1.14": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.8" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.6" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" + integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== + dependencies: + "@babel/types" "^7.20.7" + +"@types/graceful-fs@^4.1.3": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== + dependencies: + "@types/node" "*" + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": version "2.0.4" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" @@ -1552,6 +2114,13 @@ dependencies: "@types/istanbul-lib-report" "*" +"@types/node-forge@^1.3.0": + version "1.3.11" + resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.11.tgz#0972ea538ddb0f4d9c2fa0ec5db5724773a604da" + integrity sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ== + dependencies: + "@types/node" "*" + "@types/node@*": version "20.5.1" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.1.tgz#178d58ee7e4834152b0e8b4d30cbfab578b9bb30" @@ -1577,10 +2146,9 @@ csstype "^3.0.2" "@types/react@file:../../shared/node_modules/@types/react": - version "18.2.39" + version "18.3.17" dependencies: "@types/prop-types" "*" - "@types/scheduler" "*" csstype "^3.0.2" "@types/scheduler@*": @@ -1598,20 +2166,6 @@ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== -"@types/yargs@^15.0.0": - version "15.0.15" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.15.tgz#e609a2b1ef9e05d90489c2f5f45bbfb2be092158" - integrity sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg== - dependencies: - "@types/yargs-parser" "*" - -"@types/yargs@^16.0.0": - version "16.0.5" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.5.tgz#12cc86393985735a283e387936398c2f9e5f88e3" - integrity sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ== - dependencies: - "@types/yargs-parser" "*" - "@types/yargs@^17.0.8": version "17.0.24" resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" @@ -1631,7 +2185,7 @@ abort-controller@^3.0.0: dependencies: event-target-shim "^5.0.0" -accepts@^1.3.7, accepts@~1.3.5, accepts@~1.3.7: +accepts@^1.3.7: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== @@ -1657,26 +2211,12 @@ anser@^1.4.9: resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.10.tgz#befa3eddf282684bd03b63dcda3927aef8c2e35b" integrity sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww== -ansi-fragments@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/ansi-fragments/-/ansi-fragments-0.2.1.tgz#24409c56c4cc37817c3d7caa99d8969e2de5a05e" - integrity sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w== - dependencies: - colorette "^1.0.7" - slice-ansi "^2.0.0" - strip-ansi "^5.0.0" - -ansi-regex@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== - ansi-regex@^5.0.0, ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -1703,11 +2243,6 @@ anymatch@^3.0.3: normalize-path "^3.0.0" picomatch "^2.0.4" -appdirsjs@^1.2.4: - version "1.2.7" - resolved "https://registry.yarnpkg.com/appdirsjs/-/appdirsjs-1.2.7.tgz#50b4b7948a26ba6090d4aede2ae2dc2b051be3b3" - integrity sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw== - argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -1732,21 +2267,11 @@ ast-types@0.15.2: dependencies: tslib "^2.0.1" -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - async-limiter@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async@^3.2.2: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== - at-least-node@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" @@ -1757,6 +2282,49 @@ babel-core@^7.0.0-bridge.0: resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== + dependencies: + "@jest/transform" "^29.7.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.6.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-polyfill-corejs2@^0.4.10: + version "0.4.12" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz#ca55bbec8ab0edeeef3d7b8ffd75322e210879a9" + integrity sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og== + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.6.3" + semver "^6.3.1" + babel-plugin-polyfill-corejs2@^0.4.5: version "0.4.5" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" @@ -1766,6 +2334,14 @@ babel-plugin-polyfill-corejs2@^0.4.5: "@babel/helper-define-polyfill-provider" "^0.4.2" semver "^6.3.1" +babel-plugin-polyfill-corejs3@^0.10.6: + version "0.10.6" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz#2deda57caef50f59c525aeb4964d3b2f867710c7" + integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.2" + core-js-compat "^3.38.0" + babel-plugin-polyfill-corejs3@^0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz#b4f719d0ad9bb8e0c23e3e630c0c8ec6dd7a1c52" @@ -1781,10 +2357,26 @@ babel-plugin-polyfill-regenerator@^0.5.2: dependencies: "@babel/helper-define-polyfill-provider" "^0.4.2" -babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: - version "7.0.0-beta.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf" - integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ== +babel-plugin-polyfill-regenerator@^0.6.1: + version "0.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz#abeb1f3f1c762eace37587f42548b08b57789bc8" + integrity sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.3" + +babel-plugin-syntax-hermes-parser@^0.23.1: + version "0.23.1" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.23.1.tgz#470e9d1d30ad670d4c8a37138e22ae39c843d1ff" + integrity sha512-uNLD0tk2tLUjGFdmCk+u/3FEw2o+BAwW4g+z2QVlxJrzZYOOPADroEcNtTPt5lNiScctaUmnsTkVEnOwZUOLhA== + dependencies: + hermes-parser "0.23.1" + +babel-plugin-syntax-hermes-parser@^0.25.1: + version "0.25.1" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.25.1.tgz#58b539df973427fcfbb5176a3aec7e5dee793cb0" + integrity sha512-IVNpGzboFLfXZUAwkLFcI/bnqVbwky0jP3eBno4HKtqvQJAHBLdgxiG6lQ4to0+Q/YCN3PO0od5NZwIKyY4REQ== + dependencies: + hermes-parser "0.25.1" babel-plugin-transform-flow-enums@^0.0.2: version "0.0.2" @@ -1793,58 +2385,45 @@ babel-plugin-transform-flow-enums@^0.0.2: dependencies: "@babel/plugin-syntax-flow" "^7.12.1" -babel-preset-fbjs@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz#38a14e5a7a3b285a3f3a86552d650dca5cf6111c" - integrity sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow== - dependencies: - "@babel/plugin-proposal-class-properties" "^7.0.0" - "@babel/plugin-proposal-object-rest-spread" "^7.0.0" - "@babel/plugin-syntax-class-properties" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - "@babel/plugin-transform-arrow-functions" "^7.0.0" - "@babel/plugin-transform-block-scoped-functions" "^7.0.0" - "@babel/plugin-transform-block-scoping" "^7.0.0" - "@babel/plugin-transform-classes" "^7.0.0" - "@babel/plugin-transform-computed-properties" "^7.0.0" - "@babel/plugin-transform-destructuring" "^7.0.0" - "@babel/plugin-transform-flow-strip-types" "^7.0.0" - "@babel/plugin-transform-for-of" "^7.0.0" - "@babel/plugin-transform-function-name" "^7.0.0" - "@babel/plugin-transform-literals" "^7.0.0" - "@babel/plugin-transform-member-expression-literals" "^7.0.0" - "@babel/plugin-transform-modules-commonjs" "^7.0.0" - "@babel/plugin-transform-object-super" "^7.0.0" - "@babel/plugin-transform-parameters" "^7.0.0" - "@babel/plugin-transform-property-literals" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.0.0" - "@babel/plugin-transform-spread" "^7.0.0" - "@babel/plugin-transform-template-literals" "^7.0.0" - babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0" +babel-preset-current-node-syntax@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz#9a929eafece419612ef4ae4f60b1862ebad8ef30" + integrity sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-import-attributes" "^7.24.7" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== + dependencies: + babel-plugin-jest-hoist "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.1.2, base64-js@^1.3.1: +base64-js@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -bl@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1877,6 +2456,16 @@ browserslist@^4.20.4, browserslist@^4.21.10, browserslist@^4.21.9: node-releases "^2.0.13" update-browserslist-db "^1.0.11" +browserslist@^4.24.0, browserslist@^4.24.2: + version "4.24.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.3.tgz#5fc2725ca8fb3c1432e13dac278c7cc103e026d2" + integrity sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA== + dependencies: + caniuse-lite "^1.0.30001688" + electron-to-chromium "^1.5.73" + node-releases "^2.0.19" + update-browserslist-db "^1.1.1" + bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -1889,19 +2478,6 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== - caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" @@ -1926,7 +2502,7 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase@^5.0.0: +camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== @@ -1941,6 +2517,11 @@ caniuse-lite@^1.0.30001517: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001522.tgz#44b87a406c901269adcdb834713e23582dd71856" integrity sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg== +caniuse-lite@^1.0.30001688: + version "1.0.30001689" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001689.tgz#67ca960dd5f443903e19949aeacc9d28f6e10910" + integrity sha512-CmeR2VBycfa+5/jOfnp/NpWPGd06nf1XYiefUvhXFfZE4GkRc9jv+eGPS4nT558WS/8lYCzV8SlANCIPvbWP1g== + chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -1950,7 +2531,7 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -1958,6 +2539,28 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" +chrome-launcher@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/chrome-launcher/-/chrome-launcher-0.15.2.tgz#4e6404e32200095fdce7f6a1e1004f9bd36fa5da" + integrity sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ== + dependencies: + "@types/node" "*" + escape-string-regexp "^4.0.0" + is-wsl "^2.2.0" + lighthouse-logger "^1.0.0" + +chromium-edge-launcher@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/chromium-edge-launcher/-/chromium-edge-launcher-0.2.0.tgz#0c378f28c99aefc360705fa155de0113997f62fc" + integrity sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg== + dependencies: + "@types/node" "*" + escape-string-regexp "^4.0.0" + is-wsl "^2.2.0" + lighthouse-logger "^1.0.0" + mkdirp "^1.0.4" + rimraf "^3.0.2" + ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -1973,27 +2576,6 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.5.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db" - integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g== - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - cliui@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" @@ -2012,11 +2594,6 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -2041,56 +2618,21 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^1.0.7: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" - integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== - -command-exists@^1.2.8: - version "1.2.9" - resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" - integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== +commander@^12.0.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" + integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^9.4.1: - version "9.5.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" - integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== - -commander@~2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" - integrity sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA== - commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.7.1: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -2111,6 +2653,11 @@ convert-source-map@^1.7.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + core-js-compat@^3.31.0: version "3.32.1" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.1.tgz#55f9a7d297c0761a8eb1d31b593e0f5b6ffae964" @@ -2118,12 +2665,19 @@ core-js-compat@^3.31.0: dependencies: browserslist "^4.21.10" +core-js-compat@^3.38.0: + version "3.39.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.39.0.tgz#b12dccb495f2601dc860bdbe7b4e3ffa8ba63f61" + integrity sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw== + dependencies: + browserslist "^4.24.2" + core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cosmiconfig@^5.0.5, cosmiconfig@^5.1.0: +cosmiconfig@^5.0.5: version "5.2.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== @@ -2158,12 +2712,7 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== -dayjs@^1.8.15: - version "1.11.9" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.9.tgz#9ca491933fadd0a60a2c19f6c237c03517d71d1a" - integrity sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA== - -debug@2.6.9, debug@^2.2.0: +debug@2.6.9, debug@^2.2.0, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -2177,28 +2726,18 @@ debug@^4.1.0, debug@^4.1.1: dependencies: ms "2.1.2" -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== +debug@^4.3.1: + version "4.3.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" + integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== + dependencies: + ms "2.1.2" dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== -deepmerge@^4.3.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== - dependencies: - clone "^1.0.2" - del@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" @@ -2223,15 +2762,6 @@ depd@2.0.0: resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -deprecated-react-native-prop-types@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-4.2.3.tgz#0ef845c1a80ef1636bd09060e4cdf70f9727e5ad" - integrity sha512-2rLTiMKidIFFYpIVM69UnQKngLqQfL6I11Ch8wGSBftS18FUXda+o2we2950X+1dmbgps28niI3qwyH4eX3Z1g== - dependencies: - "@react-native/normalize-colors" "<0.73.0" - invariant "^2.2.4" - prop-types "^15.8.1" - destroy@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" @@ -2254,6 +2784,11 @@ electron-to-chromium@^1.4.477: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.496.tgz#a57534b70d2bdee7e1ad7dbd4c91e560cbd08db1" integrity sha512-qeXC3Zbykq44RCrBa4kr8v/dWzYJA8rAwpyh9Qd+NKWoJfjG5vvJqy9XOJ9H4P/lqulZBCgUWAYi+FeK5AuJ8g== +electron-to-chromium@^1.5.73: + version "1.5.74" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.74.tgz#cb886b504a6467e4c00bea3317edb38393c53413" + integrity sha512-ck3//9RC+6oss/1Bh9tiAVFy5vfSKbRHAFh7Z3/eTRkEqJeWgymloShB17Vg3Z4nmDNp35vAd1BZ6CMW4Wt6Iw== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -2271,11 +2806,6 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" -envinfo@^7.7.2: - version "7.10.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.10.0.tgz#55146e3909cc5fe63c22da63fb15b05aeac35b13" - integrity sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw== - error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -2290,19 +2820,16 @@ error-stack-parser@^2.0.6: dependencies: stackframe "^1.3.4" -errorhandler@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/errorhandler/-/errorhandler-1.5.1.tgz#b9ba5d17cf90744cd1e851357a6e75bf806a9a91" - integrity sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A== - dependencies: - accepts "~1.3.7" - escape-html "~1.0.3" - escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -2318,6 +2845,11 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + esprima@^4.0.0, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -2353,7 +2885,7 @@ execa@^4.0.3: signal-exit "^3.0.2" strip-final-newline "^2.0.0" -execa@^5.0.0: +execa@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== @@ -2368,6 +2900,11 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +exponential-backoff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" + integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== + fast-glob@^3.2.9: version "3.3.1" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" @@ -2379,12 +2916,10 @@ fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" -fast-xml-parser@^4.0.12: - version "4.2.7" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.2.7.tgz#871f2ca299dc4334b29f8da3658c164e68395167" - integrity sha512-J8r6BriSLO1uj2miOk1NW0YVm8AGOOu3Si2HQp/cSmo6EA4m3fcwu2WKjJ4RK9wMLBtg69y1kS8baDiQBR41Ig== - dependencies: - strnum "^1.0.5" +fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fastq@^1.6.0: version "1.15.0" @@ -2444,14 +2979,6 @@ find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - find-yarn-workspace-root@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz#f47fb8d239c900eb78179aa81b66673eac88f7bd" @@ -2459,21 +2986,16 @@ find-yarn-workspace-root@^2.0.0: dependencies: micromatch "^4.0.2" -flow-enums-runtime@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/flow-enums-runtime/-/flow-enums-runtime-0.0.5.tgz#95884bfcc82edaf27eef7e1dd09732331cfbafbc" - integrity sha512-PSZF9ZuaZD03sT9YaIs0FrGJ7lSUw7rHZIex+73UYVXg46eL/wxN5PaVcPJFudE2cJu5f0fezitV5aBkLHPUOQ== +flow-enums-runtime@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz#5bb0cd1b0a3e471330f4d109039b7eba5cb3e787" + integrity sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw== flow-parser@0.*: version "0.214.0" resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.214.0.tgz#455efc841ec015c62f6dec022cf6c61480f231a2" integrity sha512-RW1Dh6BuT14DA7+gtNRKzgzvG3GTPdrceHCi4ddZ9VFGQ9HtO5L8wzxMGsor7XtInIrbWZZCSak0oxnBF7tApw== -flow-parser@^0.206.0: - version "0.206.0" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.206.0.tgz#f4f794f8026535278393308e01ea72f31000bfef" - integrity sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w== - fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -2488,15 +3010,6 @@ fs-extra@^10.1.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs-extra@^9.0.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" @@ -2527,11 +3040,16 @@ gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^2.0.1, get-caller-file@^2.0.5: +get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + get-stream@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" @@ -2551,7 +3069,7 @@ glob-parent@^5.1.2: dependencies: is-glob "^4.0.1" -glob@^7.1.3: +glob@^7.1.1, glob@^7.1.3, glob@^7.1.4: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -2591,7 +3109,7 @@ globby@^11.0.1: merge2 "^1.4.1" slash "^3.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: +graceful-fs@^4.1.11, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -2613,24 +3131,41 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hermes-estree@0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.12.0.tgz#8a289f9aee854854422345e6995a48613bac2ca8" - integrity sha512-+e8xR6SCen0wyAKrMT3UD0ZCCLymKhRgjEB5sS28rKiFir/fXgLoeRilRUssFCILmGHb+OvHDUlhxs0+IEyvQw== +hermes-estree@0.23.1: + version "0.23.1" + resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.23.1.tgz#d0bac369a030188120ee7024926aabe5a9f84fdb" + integrity sha512-eT5MU3f5aVhTqsfIReZ6n41X5sYn4IdQL0nvz6yO+MMlPxw49aSARHLg/MSehQftyjnrE8X6bYregzSumqc6cg== -hermes-parser@0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.12.0.tgz#114dc26697cfb41a6302c215b859b74224383773" - integrity sha512-d4PHnwq6SnDLhYl3LHNHvOg7nQ6rcI7QVil418REYksv0Mh3cEkHDcuhGxNQ3vgnLSLl4QSvDrFCwQNYdpWlzw== +hermes-estree@0.24.0: + version "0.24.0" + resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.24.0.tgz#487dc1ddc0bae698c2d79f34153ac9bf62d7b3c0" + integrity sha512-LyoXLB7IFzeZW0EvAbGZacbxBN7t6KKSDqFJPo3Ydow7wDlrDjXwsdiAHV6XOdvEN9MEuWXsSIFN4tzpyrXIHw== + +hermes-estree@0.25.1: + version "0.25.1" + resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.25.1.tgz#6aeec17d1983b4eabf69721f3aa3eb705b17f480" + integrity sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw== + +hermes-parser@0.23.1: + version "0.23.1" + resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.23.1.tgz#e5de648e664f3b3d84d01b48fc7ab164f4b68205" + integrity sha512-oxl5h2DkFW83hT4DAUJorpah8ou4yvmweUzLJmmr6YV2cezduCdlil1AvU/a/xSsAFo4WUcNA4GoV5Bvq6JffA== dependencies: - hermes-estree "0.12.0" + hermes-estree "0.23.1" -hermes-profile-transformer@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz#bd0f5ecceda80dd0ddaae443469ab26fb38fc27b" - integrity sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ== +hermes-parser@0.24.0: + version "0.24.0" + resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.24.0.tgz#2ed19d079efc0848eb1f800f0c393a074c4696fb" + integrity sha512-IJooSvvu2qNRe7oo9Rb04sUT4omtZqZqf9uq9WM25Tb6v3usmvA93UqfnnoWs5V0uYjEl9Al6MNU10MCGKLwpg== + dependencies: + hermes-estree "0.24.0" + +hermes-parser@0.25.1: + version "0.25.1" + resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.25.1.tgz#5be0e487b2090886c62bd8a11724cd766d5f54d1" + integrity sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA== dependencies: - source-map "^0.7.3" + hermes-estree "0.25.1" http-errors@2.0.0: version "2.0.0" @@ -2653,11 +3188,6 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - ignore@^5.2.0: version "5.2.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" @@ -2704,7 +3234,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -2716,11 +3246,6 @@ invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -ip@^1.1.5: - version "1.1.8" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" - integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== - is-absolute@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" @@ -2756,11 +3281,6 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -2789,11 +3309,6 @@ is-glob@^4.0.1: dependencies: is-extglob "^2.1.1" -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -2835,22 +3350,12 @@ is-unc-path@^1.0.0: dependencies: unc-path-regex "^0.1.2" -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - is-windows@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw== - -is-wsl@^2.1.1: +is-wsl@^2.1.1, is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== @@ -2872,94 +3377,118 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -jest-environment-node@^29.2.1: - version "29.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.6.2.tgz#a9ea2cabff39b08eca14ccb32c8ceb924c8bb1ad" - integrity sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ== - dependencies: - "@jest/environment" "^29.6.2" - "@jest/fake-timers" "^29.6.2" - "@jest/types" "^29.6.1" +istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-instrument@^5.0.4: + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +jest-environment-node@^29.6.3: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^29.6.2" - jest-util "^29.6.2" + jest-mock "^29.7.0" + jest-util "^29.7.0" -jest-get-type@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" - integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== + +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== + dependencies: + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" -jest-message-util@^29.6.2: - version "29.6.2" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.6.2.tgz#af7adc2209c552f3f5ae31e77cf0a261f23dc2bb" - integrity sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ== +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.6.1" + "@jest/types" "^29.6.3" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^29.6.2" + pretty-format "^29.7.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^29.6.2: - version "29.6.2" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.6.2.tgz#ef9c9b4d38c34a2ad61010a021866dad41ce5e00" - integrity sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg== +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== dependencies: - "@jest/types" "^29.6.1" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-util "^29.6.2" - -jest-regex-util@^27.0.6: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" - integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== + jest-util "^29.7.0" -jest-util@^27.2.0: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" - integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== - dependencies: - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== -jest-util@^29.6.2: - version "29.6.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.6.2.tgz#8a052df8fff2eebe446769fd88814521a517664d" - integrity sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w== +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== dependencies: - "@jest/types" "^29.6.1" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^29.2.1: - version "29.6.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.6.2.tgz#25d972af35b2415b83b1373baf1a47bb266c1082" - integrity sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg== +jest-validate@^29.6.3: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== dependencies: - "@jest/types" "^29.6.1" + "@jest/types" "^29.6.3" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^29.4.3" + jest-get-type "^29.6.3" leven "^3.1.0" - pretty-format "^29.6.2" + pretty-format "^29.7.0" -jest-worker@^27.2.0: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== +jest-worker@^29.6.3, jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== dependencies: "@types/node" "*" + jest-util "^29.7.0" merge-stream "^2.0.0" supports-color "^8.0.0" @@ -2968,17 +3497,6 @@ jetifier@^2.0.0: resolved "https://registry.yarnpkg.com/jetifier/-/jetifier-2.0.0.tgz#699391367ca1fe7bc4da5f8bf691eb117758e4cb" integrity sha512-J4Au9KuT74te+PCCCHKgAjyLlEa+2VyIAEPNCdE5aNkAJ6FAJcAqcdzEkSnzNksIa9NkGmC4tPiClk2e7tCJuQ== -joi@^17.2.1: - version "17.9.2" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.9.2.tgz#8b2e4724188369f55451aebd1d0b1d9482470690" - integrity sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw== - dependencies: - "@hapi/hoek" "^9.0.0" - "@hapi/topo" "^5.0.0" - "@sideway/address" "^4.1.3" - "@sideway/formula" "^3.0.1" - "@sideway/pinpoint" "^2.0.0" - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -3032,11 +3550,21 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== +jsesc@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" + integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== + json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -3054,18 +3582,11 @@ json-stable-stringify@^1.0.2: dependencies: jsonify "^0.0.1" -json5@^2.2.1, json5@^2.2.2: +json5@^2.2.1, json5@^2.2.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" @@ -3107,6 +3628,14 @@ leven@^3.1.0: resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== +lighthouse-logger@^1.0.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz#aef90f9e97cd81db367c7634292ee22079280aaa" + integrity sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g== + dependencies: + debug "^2.6.9" + marky "^1.2.2" + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" @@ -3127,13 +3656,6 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" @@ -3144,24 +3666,7 @@ lodash.throttle@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ== -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -logkitty@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/logkitty/-/logkitty-0.7.1.tgz#8e8d62f4085a826e8d38987722570234e33c6aa7" - integrity sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ== - dependencies: - ansi-fragments "^0.2.1" - dayjs "^1.8.15" - yargs "^15.1.0" - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: +loose-envify@^1.0.0, loose-envify@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -3197,6 +3702,11 @@ makeerror@1.0.12: dependencies: tmpl "1.0.5" +marky@^1.2.2: + version "1.2.5" + resolved "https://registry.yarnpkg.com/marky/-/marky-1.2.5.tgz#55796b688cbd72390d2d399eaaf1832c9413e3c0" + integrity sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q== + memoize-one@^5.0.0: version "5.2.1" resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" @@ -3212,62 +3722,67 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -metro-babel-transformer@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.76.8.tgz#5efd1027353b36b73706164ef09c290dceac096a" - integrity sha512-Hh6PW34Ug/nShlBGxkwQJSgPGAzSJ9FwQXhUImkzdsDgVu6zj5bx258J8cJVSandjNoQ8nbaHK6CaHlnbZKbyA== +metro-babel-transformer@0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.81.0.tgz#cf468eafea52e4d8a77844eb7257f8a76e9d9d94" + integrity sha512-Dc0QWK4wZIeHnyZ3sevWGTnnSkIDDn/SWyfrn99zbKbDOCoCYy71PAn9uCRrP/hduKLJQOy+tebd63Rr9D8tXg== dependencies: - "@babel/core" "^7.20.0" - hermes-parser "0.12.0" + "@babel/core" "^7.25.2" + flow-enums-runtime "^0.0.6" + hermes-parser "0.24.0" nullthrows "^1.1.1" -metro-cache-key@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.76.8.tgz#8a0a5e991c06f56fcc584acadacb313c312bdc16" - integrity sha512-buKQ5xentPig9G6T37Ww/R/bC+/V1MA5xU/D8zjnhlelsrPG6w6LtHUS61ID3zZcMZqYaELWk5UIadIdDsaaLw== +metro-cache-key@0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.81.0.tgz#5db34fa1a323a2310205bda7abd0df9614e36f45" + integrity sha512-qX/IwtknP9bQZL78OK9xeSvLM/xlGfrs6SlUGgHvrxtmGTRSsxcyqxR+c+7ch1xr05n62Gin/O44QKg5V70rNQ== + dependencies: + flow-enums-runtime "^0.0.6" -metro-cache@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.76.8.tgz#296c1c189db2053b89735a8f33dbe82575f53661" - integrity sha512-QBJSJIVNH7Hc/Yo6br/U/qQDUpiUdRgZ2ZBJmvAbmAKp2XDzsapnMwK/3BGj8JNWJF7OLrqrYHsRsukSbUBpvQ== +metro-cache@0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.81.0.tgz#90470d10d190ad708f04c6e337eec2c7cddb3db0" + integrity sha512-DyuqySicHXkHUDZFVJmh0ygxBSx6pCKUrTcSgb884oiscV/ROt1Vhye+x+OIHcsodyA10gzZtrVtxIFV4l9I4g== dependencies: - metro-core "0.76.8" - rimraf "^3.0.2" + exponential-backoff "^3.1.1" + flow-enums-runtime "^0.0.6" + metro-core "0.81.0" -metro-config@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.76.8.tgz#20bd5397fcc6096f98d2a813a7cecb38b8af062d" - integrity sha512-SL1lfKB0qGHALcAk2zBqVgQZpazDYvYFGwCK1ikz0S6Y/CM2i2/HwuZN31kpX6z3mqjv/6KvlzaKoTb1otuSAA== +metro-config@0.81.0, metro-config@^0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.81.0.tgz#8f8074033cb7e9ddb5b0459642adf6880bc9fbc1" + integrity sha512-6CinEaBe3WLpRlKlYXXu8r1UblJhbwD6Gtnoib5U8j6Pjp7XxMG9h/DGMeNp9aGLDu1OieUqiXpFo7O0/rR5Kg== dependencies: connect "^3.6.5" cosmiconfig "^5.0.5" - jest-validate "^29.2.1" - metro "0.76.8" - metro-cache "0.76.8" - metro-core "0.76.8" - metro-runtime "0.76.8" - -metro-core@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.76.8.tgz#917c8157c63406cb223522835abb8e7c6291dcad" - integrity sha512-sl2QLFI3d1b1XUUGxwzw/KbaXXU/bvFYrSKz6Sg19AdYGWFyzsgZ1VISRIDf+HWm4R/TJXluhWMEkEtZuqi3qA== - dependencies: + flow-enums-runtime "^0.0.6" + jest-validate "^29.6.3" + metro "0.81.0" + metro-cache "0.81.0" + metro-core "0.81.0" + metro-runtime "0.81.0" + +metro-core@0.81.0, metro-core@^0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.81.0.tgz#d0b634f9cf97849b7730c59457ab7a439811d4c8" + integrity sha512-CVkM5YCOAFkNMvJai6KzA0RpztzfEKRX62/PFMOJ9J7K0uq/UkOFLxcgpcncMIrfy0PbfEj811b69tjULUQe1Q== + dependencies: + flow-enums-runtime "^0.0.6" lodash.throttle "^4.1.1" - metro-resolver "0.76.8" + metro-resolver "0.81.0" -metro-file-map@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.76.8.tgz#a1db1185b6c316904ba6b53d628e5d1323991d79" - integrity sha512-A/xP1YNEVwO1SUV9/YYo6/Y1MmzhL4ZnVgcJC3VmHp/BYVOXVStzgVbWv2wILe56IIMkfXU+jpXrGKKYhFyHVw== +metro-file-map@0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.81.0.tgz#af0ccf4f8db4fd8429f78f231faa49dde2c402c3" + integrity sha512-zMDI5uYhQCyxbye/AuFx/pAbsz9K+vKL7h1ShUXdN2fz4VUPiyQYRsRqOoVG1DsiCgzd5B6LW0YW77NFpjDQeg== dependencies: anymatch "^3.0.3" debug "^2.2.0" fb-watchman "^2.0.0" + flow-enums-runtime "^0.0.6" graceful-fs "^4.2.4" invariant "^2.2.4" - jest-regex-util "^27.0.6" - jest-util "^27.2.0" - jest-worker "^27.2.0" + jest-worker "^29.6.3" micromatch "^4.0.4" node-abort-controller "^3.1.1" nullthrows "^1.1.1" @@ -3275,207 +3790,135 @@ metro-file-map@0.76.8: optionalDependencies: fsevents "^2.3.2" -metro-inspector-proxy@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.76.8.tgz#6b8678a7461b0b42f913a7881cc9319b4d3cddff" - integrity sha512-Us5o5UEd4Smgn1+TfHX4LvVPoWVo9VsVMn4Ldbk0g5CQx3Gu0ygc/ei2AKPGTwsOZmKxJeACj7yMH2kgxQP/iw== - dependencies: - connect "^3.6.5" - debug "^2.2.0" - node-fetch "^2.2.0" - ws "^7.5.1" - yargs "^17.6.2" - -metro-minify-terser@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.76.8.tgz#915ab4d1419257fc6a0b9fa15827b83fe69814bf" - integrity sha512-Orbvg18qXHCrSj1KbaeSDVYRy/gkro2PC7Fy2tDSH1c9RB4aH8tuMOIXnKJE+1SXxBtjWmQ5Yirwkth2DyyEZA== +metro-minify-terser@0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.81.0.tgz#8b0abe977d63a99b99fa94d53678ef3170d5b659" + integrity sha512-U2ramh3W822ZR1nfXgIk+emxsf5eZSg10GbQrT0ZizImK8IZ5BmJY+BHRIkQgHzWFpExOVxC7kWbGL1bZALswA== dependencies: + flow-enums-runtime "^0.0.6" terser "^5.15.0" -metro-minify-uglify@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.76.8.tgz#74745045ea2dd29f8783db483b2fce58385ba695" - integrity sha512-6l8/bEvtVaTSuhG1FqS0+Mc8lZ3Bl4RI8SeRIifVLC21eeSDp4CEBUWSGjpFyUDfi6R5dXzYaFnSgMNyfxADiQ== - dependencies: - uglify-es "^3.1.9" - -metro-react-native-babel-preset@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.76.8.tgz#7476efae14363cbdfeeec403b4f01d7348e6c048" - integrity sha512-Ptza08GgqzxEdK8apYsjTx2S8WDUlS2ilBlu9DR1CUcHmg4g3kOkFylZroogVAUKtpYQNYwAvdsjmrSdDNtiAg== - dependencies: - "@babel/core" "^7.20.0" - "@babel/plugin-proposal-async-generator-functions" "^7.0.0" - "@babel/plugin-proposal-class-properties" "^7.18.0" - "@babel/plugin-proposal-export-default-from" "^7.0.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.0" - "@babel/plugin-proposal-numeric-separator" "^7.0.0" - "@babel/plugin-proposal-object-rest-spread" "^7.20.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" - "@babel/plugin-proposal-optional-chaining" "^7.20.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - "@babel/plugin-syntax-export-default-from" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.18.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" - "@babel/plugin-syntax-optional-chaining" "^7.0.0" - "@babel/plugin-transform-arrow-functions" "^7.0.0" - "@babel/plugin-transform-async-to-generator" "^7.20.0" - "@babel/plugin-transform-block-scoping" "^7.0.0" - "@babel/plugin-transform-classes" "^7.0.0" - "@babel/plugin-transform-computed-properties" "^7.0.0" - "@babel/plugin-transform-destructuring" "^7.20.0" - "@babel/plugin-transform-flow-strip-types" "^7.20.0" - "@babel/plugin-transform-function-name" "^7.0.0" - "@babel/plugin-transform-literals" "^7.0.0" - "@babel/plugin-transform-modules-commonjs" "^7.0.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.0.0" - "@babel/plugin-transform-parameters" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-react-jsx-self" "^7.0.0" - "@babel/plugin-transform-react-jsx-source" "^7.0.0" - "@babel/plugin-transform-runtime" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.0.0" - "@babel/plugin-transform-spread" "^7.0.0" - "@babel/plugin-transform-sticky-regex" "^7.0.0" - "@babel/plugin-transform-typescript" "^7.5.0" - "@babel/plugin-transform-unicode-regex" "^7.0.0" - "@babel/template" "^7.0.0" - babel-plugin-transform-flow-enums "^0.0.2" - react-refresh "^0.4.0" - -metro-react-native-babel-transformer@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.76.8.tgz#c3a98e1f4cd5faf1e21eba8e004b94a90c4db69b" - integrity sha512-3h+LfS1WG1PAzhq8QF0kfXjxuXetbY/lgz8vYMQhgrMMp17WM1DNJD0gjx8tOGYbpbBC1qesJ45KMS4o5TA73A== +metro-resolver@0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.81.0.tgz#141f4837e1e0c5a1810ea02f2d9be3c9f6cf3766" + integrity sha512-Uu2Q+buHhm571cEwpPek8egMbdSTqmwT/5U7ZVNpK6Z2ElQBBCxd7HmFAslKXa7wgpTO2FAn6MqGeERbAtVDUA== dependencies: - "@babel/core" "^7.20.0" - babel-preset-fbjs "^3.4.0" - hermes-parser "0.12.0" - metro-react-native-babel-preset "0.76.8" - nullthrows "^1.1.1" + flow-enums-runtime "^0.0.6" -metro-resolver@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.76.8.tgz#0862755b9b84e26853978322464fb37c6fdad76d" - integrity sha512-KccOqc10vrzS7ZhG2NSnL2dh3uVydarB7nOhjreQ7C4zyWuiW9XpLC4h47KtGQv3Rnv/NDLJYeDqaJ4/+140HQ== - -metro-runtime@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.76.8.tgz#74b2d301a2be5f3bbde91b8f1312106f8ffe50c3" - integrity sha512-XKahvB+iuYJSCr3QqCpROli4B4zASAYpkK+j3a0CJmokxCDNbgyI4Fp88uIL6rNaZfN0Mv35S0b99SdFXIfHjg== +metro-runtime@0.81.0, metro-runtime@^0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.81.0.tgz#63af9b3fec15d1f307d89ef4881f5ba2c592291e" + integrity sha512-6oYB5HOt37RuGz2eV4A6yhcl+PUTwJYLDlY9vhT+aVjbUWI6MdBCf69vc4f5K5Vpt+yOkjy+2LDwLS0ykWFwYw== dependencies: - "@babel/runtime" "^7.0.0" - react-refresh "^0.4.0" + "@babel/runtime" "^7.25.0" + flow-enums-runtime "^0.0.6" -metro-source-map@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.76.8.tgz#f085800152a6ba0b41ca26833874d31ec36c5a53" - integrity sha512-Hh0ncPsHPVf6wXQSqJqB3K9Zbudht4aUtNpNXYXSxH+pteWqGAXnjtPsRAnCsCWl38wL0jYF0rJDdMajUI3BDw== +metro-source-map@0.81.0, metro-source-map@^0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.81.0.tgz#ca83964124bb227d5f0bdb1ee304dbfe635f869e" + integrity sha512-TzsVxhH83dyxg4A4+L1nzNO12I7ps5IHLjKGZH3Hrf549eiZivkdjYiq/S5lOB+p2HiQ+Ykcwtmcja95LIC62g== dependencies: - "@babel/traverse" "^7.20.0" - "@babel/types" "^7.20.0" + "@babel/traverse" "^7.25.3" + "@babel/traverse--for-generate-function-map" "npm:@babel/traverse@^7.25.3" + "@babel/types" "^7.25.2" + flow-enums-runtime "^0.0.6" invariant "^2.2.4" - metro-symbolicate "0.76.8" + metro-symbolicate "0.81.0" nullthrows "^1.1.1" - ob1 "0.76.8" + ob1 "0.81.0" source-map "^0.5.6" vlq "^1.0.0" -metro-symbolicate@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.76.8.tgz#f102ac1a306d51597ecc8fdf961c0a88bddbca03" - integrity sha512-LrRL3uy2VkzrIXVlxoPtqb40J6Bf1mlPNmUQewipc3qfKKFgtPHBackqDy1YL0njDsWopCKcfGtFYLn0PTUn3w== +metro-symbolicate@0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.81.0.tgz#b7b1eae8bfd6ad2a922fa2bcb9f2144e464adafb" + integrity sha512-C/1rWbNTPYp6yzID8IPuQPpVGzJ2rbWYBATxlvQ9dfK5lVNoxcwz77hjcY8ISLsRRR15hyd/zbjCNKPKeNgE1Q== dependencies: + flow-enums-runtime "^0.0.6" invariant "^2.2.4" - metro-source-map "0.76.8" + metro-source-map "0.81.0" nullthrows "^1.1.1" source-map "^0.5.6" through2 "^2.0.1" vlq "^1.0.0" -metro-transform-plugins@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.76.8.tgz#d77c28a6547a8e3b72250f740fcfbd7f5408f8ba" - integrity sha512-PlkGTQNqS51Bx4vuufSQCdSn2R2rt7korzngo+b5GCkeX5pjinPjnO2kNhQ8l+5bO0iUD/WZ9nsM2PGGKIkWFA== +metro-transform-plugins@0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.81.0.tgz#614c0e50593df545487b3f3383fed810c608fb32" + integrity sha512-uErLAPBvttGCrmGSCa0dNHlOTk3uJFVEVWa5WDg6tQ79PRmuYRwzUgLhVzn/9/kyr75eUX3QWXN79Jvu4txt6Q== dependencies: - "@babel/core" "^7.20.0" - "@babel/generator" "^7.20.0" - "@babel/template" "^7.0.0" - "@babel/traverse" "^7.20.0" + "@babel/core" "^7.25.2" + "@babel/generator" "^7.25.0" + "@babel/template" "^7.25.0" + "@babel/traverse" "^7.25.3" + flow-enums-runtime "^0.0.6" nullthrows "^1.1.1" -metro-transform-worker@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.76.8.tgz#b9012a196cee205170d0c899b8b175b9305acdea" - integrity sha512-mE1fxVAnJKmwwJyDtThildxxos9+DGs9+vTrx2ktSFMEVTtXS/bIv2W6hux1pqivqAfyJpTeACXHk5u2DgGvIQ== - dependencies: - "@babel/core" "^7.20.0" - "@babel/generator" "^7.20.0" - "@babel/parser" "^7.20.0" - "@babel/types" "^7.20.0" - babel-preset-fbjs "^3.4.0" - metro "0.76.8" - metro-babel-transformer "0.76.8" - metro-cache "0.76.8" - metro-cache-key "0.76.8" - metro-source-map "0.76.8" - metro-transform-plugins "0.76.8" +metro-transform-worker@0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.81.0.tgz#43e63c95014f36786f0e1a132c778c6392950de7" + integrity sha512-HrQ0twiruhKy0yA+9nK5bIe3WQXZcC66PXTvRIos61/EASLAP2DzEmW7IxN/MGsfZegN2UzqL2CG38+mOB45vg== + dependencies: + "@babel/core" "^7.25.2" + "@babel/generator" "^7.25.0" + "@babel/parser" "^7.25.3" + "@babel/types" "^7.25.2" + flow-enums-runtime "^0.0.6" + metro "0.81.0" + metro-babel-transformer "0.81.0" + metro-cache "0.81.0" + metro-cache-key "0.81.0" + metro-minify-terser "0.81.0" + metro-source-map "0.81.0" + metro-transform-plugins "0.81.0" nullthrows "^1.1.1" -metro@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro/-/metro-0.76.8.tgz#ba526808b99977ca3f9ac5a7432fd02a340d13a6" - integrity sha512-oQA3gLzrrYv3qKtuWArMgHPbHu8odZOD9AoavrqSFllkPgOtmkBvNNDLCELqv5SjBfqjISNffypg+5UGG3y0pg== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/core" "^7.20.0" - "@babel/generator" "^7.20.0" - "@babel/parser" "^7.20.0" - "@babel/template" "^7.0.0" - "@babel/traverse" "^7.20.0" - "@babel/types" "^7.20.0" +metro@0.81.0, metro@^0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro/-/metro-0.81.0.tgz#cffe9b7d597728dee8b57903ca155417b7c13a4f" + integrity sha512-kzdzmpL0gKhEthZ9aOV7sTqvg6NuTxDV8SIm9pf9sO8VVEbKrQk5DNcwupOUjgPPFAuKUc2NkT0suyT62hm2xg== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/core" "^7.25.2" + "@babel/generator" "^7.25.0" + "@babel/parser" "^7.25.3" + "@babel/template" "^7.25.0" + "@babel/traverse" "^7.25.3" + "@babel/types" "^7.25.2" accepts "^1.3.7" - async "^3.2.2" chalk "^4.0.0" ci-info "^2.0.0" connect "^3.6.5" debug "^2.2.0" denodeify "^1.2.1" error-stack-parser "^2.0.6" + flow-enums-runtime "^0.0.6" graceful-fs "^4.2.4" - hermes-parser "0.12.0" + hermes-parser "0.24.0" image-size "^1.0.2" invariant "^2.2.4" - jest-worker "^27.2.0" + jest-worker "^29.6.3" jsc-safe-url "^0.2.2" lodash.throttle "^4.1.1" - metro-babel-transformer "0.76.8" - metro-cache "0.76.8" - metro-cache-key "0.76.8" - metro-config "0.76.8" - metro-core "0.76.8" - metro-file-map "0.76.8" - metro-inspector-proxy "0.76.8" - metro-minify-terser "0.76.8" - metro-minify-uglify "0.76.8" - metro-react-native-babel-preset "0.76.8" - metro-resolver "0.76.8" - metro-runtime "0.76.8" - metro-source-map "0.76.8" - metro-symbolicate "0.76.8" - metro-transform-plugins "0.76.8" - metro-transform-worker "0.76.8" + metro-babel-transformer "0.81.0" + metro-cache "0.81.0" + metro-cache-key "0.81.0" + metro-config "0.81.0" + metro-core "0.81.0" + metro-file-map "0.81.0" + metro-resolver "0.81.0" + metro-runtime "0.81.0" + metro-source-map "0.81.0" + metro-symbolicate "0.81.0" + metro-transform-plugins "0.81.0" + metro-transform-worker "0.81.0" mime-types "^2.1.27" - node-fetch "^2.2.0" nullthrows "^1.1.1" - rimraf "^3.0.2" serialize-error "^2.1.0" source-map "^0.5.6" strip-ansi "^6.0.0" throat "^5.0.0" - ws "^7.5.1" + ws "^7.5.10" yargs "^17.6.2" micromatch@^4.0.2, micromatch@^4.0.4: @@ -3486,7 +3929,7 @@ micromatch@^4.0.2, micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": +mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== @@ -3503,17 +3946,12 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.4.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" - integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -minimatch@^3.0.2, minimatch@^3.1.1: +minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -3539,6 +3977,11 @@ mkdirp@^0.5.1: dependencies: minimist "^1.2.6" +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -3564,11 +4007,6 @@ neo-async@^2.5.0: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -nocache@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/nocache/-/nocache-3.0.4.tgz#5b37a56ec6e09fc7d401dceaed2eab40c8bfdf79" - integrity sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw== - node-abort-controller@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" @@ -3581,13 +4019,18 @@ node-dir@^0.1.17: dependencies: minimatch "^3.0.2" -node-fetch@^2.2.0, node-fetch@^2.6.0: +node-fetch@^2.2.0: version "2.6.13" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.13.tgz#a20acbbec73c2e09f9007de5cda17104122e0010" integrity sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA== dependencies: whatwg-url "^5.0.0" +node-forge@^1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -3598,10 +4041,10 @@ node-releases@^2.0.13: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== -node-stream-zip@^1.9.1: - version "1.15.0" - resolved "https://registry.yarnpkg.com/node-stream-zip/-/node-stream-zip-1.15.0.tgz#158adb88ed8004c6c49a396b50a6a5de3bca33ea" - integrity sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw== +node-releases@^2.0.19: + version "2.0.19" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" + integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== normalize-path@^3.0.0: version "3.0.0" @@ -3620,15 +4063,12 @@ nullthrows@^1.1.1: resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== -ob1@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.76.8.tgz#ac4c459465b1c0e2c29aaa527e09fc463d3ffec8" - integrity sha512-dlBkJJV5M/msj9KYA9upc+nUWVwuOFFTbu28X6kZeGwcuW+JxaHSBZ70SYQnk5M+j5JbNLR6yKHmgW4M5E7X5g== - -object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== +ob1@0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.81.0.tgz#dc3154cca7aa9c2eb58f5ac63e9ee23ff4c6f520" + integrity sha512-6Cvrkxt1tqaRdWqTAMcVYEiO5i1xcF9y7t06nFdjFqkfPsEloCf8WwhXdwBpNUkVYSQlSGS7cDgVQR86miBfBQ== + dependencies: + flow-enums-runtime "^0.0.6" on-finished@2.4.1: version "2.4.1" @@ -3644,11 +4084,6 @@ on-finished@~2.3.0: dependencies: ee-first "1.1.1" -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -3663,14 +4098,7 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -open@^6.2.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" - integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== - dependencies: - is-wsl "^1.1.0" - -open@^7.4.2: +open@^7.0.3, open@^7.4.2: version "7.4.2" resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== @@ -3678,21 +4106,6 @@ open@^7.4.2: is-docker "^2.0.0" is-wsl "^2.1.1" -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -3705,13 +4118,6 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -3726,13 +4132,6 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - p-map@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" @@ -3829,6 +4228,11 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" @@ -3839,7 +4243,7 @@ pify@^4.0.1: resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -pirates@^4.0.5: +pirates@^4.0.4, pirates@^4.0.5: version "4.0.6" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== @@ -3851,22 +4255,12 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -pretty-format@^26.5.2, pretty-format@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" - integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== - dependencies: - "@jest/types" "^26.6.2" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^17.0.1" - -pretty-format@^29.6.2: - version "29.6.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.6.2.tgz#3d5829261a8a4d89d8b9769064b29c50ed486a47" - integrity sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg== +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== dependencies: - "@jest/schemas" "^29.6.0" + "@jest/schemas" "^29.6.3" ansi-styles "^5.0.0" react-is "^18.0.0" @@ -3882,7 +4276,7 @@ promise@^8.3.0: dependencies: asap "~2.0.6" -prompts@^2.4.0, prompts@^2.4.2: +prompts@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== @@ -3890,15 +4284,6 @@ prompts@^2.4.0, prompts@^2.4.2: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.8.1: - version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -3924,29 +4309,19 @@ range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -react-devtools-core@^4.27.2: - version "4.28.0" - resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.28.0.tgz#3fa18709b24414adddadac33b6b9cea96db60f2f" - integrity sha512-E3C3X1skWBdBzwpOUbmXG8SgH6BtsluSMe+s6rRcujNKG1DGi8uIfhdhszkgDpAsMoE55hwqRUzeXCmETDBpTg== +react-devtools-core@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-5.3.1.tgz#d57f5b8f74f16e622bd6a7bc270161e4ba162666" + integrity sha512-7FSb9meX0btdBQLwdFOwt6bGqvRPabmVMMslv8fgoSPqXyuGpgQe36kx8gR86XPw7aV1yVouTp6fyZ0EH+NfUw== dependencies: shell-quote "^1.6.1" ws "^7" -"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0: +react-is@^18.0.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -react-is@^16.13.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== - react-native-builder-bob@^0.20.4: version "0.20.4" resolved "https://registry.yarnpkg.com/react-native-builder-bob/-/react-native-builder-bob-0.20.4.tgz#02df01b8dc02f1bb2d566f820e33c5d42bfb9c99" @@ -3975,72 +4350,57 @@ react-native-builder-bob@^0.20.4: jetifier "^2.0.0" "react-native@file:../../shared/node_modules/react-native": - version "0.72.7" - dependencies: - "@jest/create-cache-key-function" "^29.2.1" - "@react-native-community/cli" "11.3.10" - "@react-native-community/cli-platform-android" "11.3.10" - "@react-native-community/cli-platform-ios" "11.3.10" - "@react-native/assets-registry" "^0.72.0" - "@react-native/codegen" "^0.72.7" - "@react-native/gradle-plugin" "^0.72.11" - "@react-native/js-polyfills" "^0.72.1" - "@react-native/normalize-colors" "^0.72.0" - "@react-native/virtualized-lists" "^0.72.8" + version "0.76.5" + dependencies: + "@jest/create-cache-key-function" "^29.6.3" + "@react-native/assets-registry" "0.76.5" + "@react-native/codegen" "0.76.5" + "@react-native/community-cli-plugin" "0.76.5" + "@react-native/gradle-plugin" "0.76.5" + "@react-native/js-polyfills" "0.76.5" + "@react-native/normalize-colors" "0.76.5" + "@react-native/virtualized-lists" "0.76.5" abort-controller "^3.0.0" anser "^1.4.9" - base64-js "^1.1.2" - deprecated-react-native-prop-types "^4.2.3" + ansi-regex "^5.0.0" + babel-jest "^29.7.0" + babel-plugin-syntax-hermes-parser "^0.23.1" + base64-js "^1.5.1" + chalk "^4.0.0" + commander "^12.0.0" event-target-shim "^5.0.1" - flow-enums-runtime "^0.0.5" + flow-enums-runtime "^0.0.6" + glob "^7.1.1" invariant "^2.2.4" - jest-environment-node "^29.2.1" + jest-environment-node "^29.6.3" jsc-android "^250231.0.0" memoize-one "^5.0.0" - metro-runtime "0.76.8" - metro-source-map "0.76.8" + metro-runtime "^0.81.0" + metro-source-map "^0.81.0" mkdirp "^0.5.1" nullthrows "^1.1.1" - pretty-format "^26.5.2" + pretty-format "^29.7.0" promise "^8.3.0" - react-devtools-core "^4.27.2" - react-refresh "^0.4.0" - react-shallow-renderer "^16.15.0" + react-devtools-core "^5.3.1" + react-refresh "^0.14.0" regenerator-runtime "^0.13.2" scheduler "0.24.0-canary-efb381bbf-20230505" + semver "^7.1.3" stacktrace-parser "^0.1.10" - use-sync-external-store "^1.0.0" whatwg-fetch "^3.0.0" - ws "^6.2.2" + ws "^6.2.3" yargs "^17.6.2" -react-refresh@^0.4.0: - version "0.4.3" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.3.tgz#966f1750c191672e76e16c2efa569150cc73ab53" - integrity sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA== - -react-shallow-renderer@^16.15.0: - version "16.15.0" - resolved "https://registry.yarnpkg.com/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz#48fb2cf9b23d23cde96708fe5273a7d3446f4457" - integrity sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA== - dependencies: - object-assign "^4.1.1" - react-is "^16.12.0 || ^17.0.0 || ^18.0.0" +react-refresh@^0.14.0: + version "0.14.2" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9" + integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA== "react@file:../../shared/node_modules/react": - version "18.2.0" + version "18.3.1" dependencies: loose-envify "^1.1.0" -readable-stream@^3.4.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" @@ -4076,6 +4436,13 @@ regenerate-unicode-properties@^10.1.0: dependencies: regenerate "^1.4.2" +regenerate-unicode-properties@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0" + integrity sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA== + dependencies: + regenerate "^1.4.2" + regenerate@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" @@ -4110,6 +4477,30 @@ regexpu-core@^5.3.1: unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.1.0" +regexpu-core@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.2.0.tgz#0e5190d79e542bf294955dccabae04d3c7d53826" + integrity sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.2.0" + regjsgen "^0.8.0" + regjsparser "^0.12.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +regjsgen@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" + integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== + +regjsparser@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.12.0.tgz#0e846df6c6530586429377de56e0475583b088dc" + integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ== + dependencies: + jsesc "~3.0.2" + regjsparser@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" @@ -4122,11 +4513,6 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" @@ -4137,6 +4523,11 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + resolve@^1.14.2: version "1.22.4" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" @@ -4146,14 +4537,6 @@ resolve@^1.14.2: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -4187,16 +4570,11 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - scheduler@0.24.0-canary-efb381bbf-20230505: version "0.24.0-canary-efb381bbf-20230505" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.24.0-canary-efb381bbf-20230505.tgz#5dddc60e29f91cd7f8b983d7ce4a99c2202d178f" @@ -4204,17 +4582,30 @@ scheduler@0.24.0-canary-efb381bbf-20230505: dependencies: loose-envify "^1.1.0" +selfsigned@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0" + integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== + dependencies: + "@types/node-forge" "^1.3.0" + node-forge "^1" + semver@^5.6.0: version "5.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@^6.3.1: +semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.5.2, semver@^7.5.3: +semver@^7.1.3: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +semver@^7.5.3: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -4255,11 +4646,6 @@ serve-static@^1.13.1: parseurl "~1.3.3" send "0.18.0" -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - setprototypeof@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" @@ -4284,12 +4670,12 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shell-quote@^1.6.1, shell-quote@^1.7.3: +shell-quote@^1.6.1: version "1.8.1" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== -signal-exit@^3.0.2, signal-exit@^3.0.3: +signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -4309,15 +4695,6 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - source-map-support@^0.5.16, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" @@ -4336,11 +4713,6 @@ source-map@^0.6.0, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -4384,13 +4756,6 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -4398,13 +4763,6 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^5.0.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -4417,16 +4775,6 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strnum@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" - integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== - -sudo-prompt@^9.0.0: - version "9.2.1" - resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.2.1.tgz#77efb84309c9ca489527a4e749f287e6bdd52afd" - integrity sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw== - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -4470,6 +4818,15 @@ terser@^5.15.0: commander "^2.20.0" source-map-support "~0.5.20" +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + throat@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" @@ -4533,15 +4890,7 @@ type-fest@^0.7.1: integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== "typescript@file:../../shared/node_modules/typescript": - version "5.3.2" - -uglify-es@^3.1.9: - version "3.3.9" - resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" - integrity sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ== - dependencies: - commander "~2.13.0" - source-map "~0.6.1" + version "5.7.2" unc-path-regex@^0.1.2: version "0.1.2" @@ -4571,11 +4920,6 @@ unicode-property-aliases-ecmascript@^2.0.0: resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - universalify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" @@ -4594,12 +4938,15 @@ update-browserslist-db@^1.0.11: escalade "^3.1.1" picocolors "^1.0.0" -use-sync-external-store@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" - integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== +update-browserslist-db@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5" + integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.0" -util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== @@ -4609,30 +4956,18 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - vlq@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468" integrity sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w== -walker@^1.0.7: +walker@^1.0.7, walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== dependencies: makeerror "1.0.12" -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" - webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -4651,11 +4986,6 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -which-module@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" - integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== - which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -4663,15 +4993,6 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -4695,28 +5016,36 @@ write-file-atomic@^2.3.0: imurmurhash "^0.1.4" signal-exit "^3.0.2" -ws@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" - integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +ws@^6.2.3: + version "6.2.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.3.tgz#ccc96e4add5fd6fedbc491903075c85c5a11d9ee" + integrity sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA== dependencies: async-limiter "~1.0.0" -ws@^7, ws@^7.5.1: +ws@^7: version "7.5.9" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== +ws@^7.5.10: + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== + xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - y18n@^5.0.5: version "5.0.8" resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" @@ -4737,41 +5066,16 @@ yaml@^1.10.0: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yaml@^2.2.1, yaml@^2.2.2: +yaml@^2.2.2: version "2.3.1" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^15.1.0: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - yargs@^17.5.1, yargs@^17.6.2: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" @@ -4784,8 +5088,3 @@ yargs@^17.5.1, yargs@^17.6.2: string-width "^4.2.3" y18n "^5.0.5" yargs-parser "^21.1.1" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/rnmodules/react-native-kb/android/CMakeLists.txt b/rnmodules/react-native-kb/android/CMakeLists.txt index e06b41c5d739..1987edd9439d 100644 --- a/rnmodules/react-native-kb/android/CMakeLists.txt +++ b/rnmodules/react-native-kb/android/CMakeLists.txt @@ -43,7 +43,8 @@ target_link_libraries( ${LOG_LIB} fbjni::fbjni ReactAndroid::jsi - ReactAndroid::turbomodulejsijni - ReactAndroid::react_nativemodule_core + # ReactAndroid::turbomodulejsijni + # ReactAndroid::react_nativemodule_core + ReactAndroid::reactnative android ) diff --git a/rnmodules/react-native-kb/android/build.gradle b/rnmodules/react-native-kb/android/build.gradle index a08caf35df2a..f63b1586b7f3 100644 --- a/rnmodules/react-native-kb/android/build.gradle +++ b/rnmodules/react-native-kb/android/build.gradle @@ -1,4 +1,7 @@ buildscript { + // Buildscript is evaluated before everything else so we can't use getExtOrDefault + def kotlin_version = rootProject.ext.has("kotlinVersion") ? rootProject.ext.get("kotlinVersion") : project.properties["DropView_kotlinVersion"] + repositories { google() mavenCentral() @@ -6,6 +9,8 @@ buildscript { dependencies { classpath "com.android.tools.build:gradle:7.2.1" + // noinspection DifferentKotlinGradleVersion + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } @@ -21,7 +26,7 @@ def isNewArchitectureEnabled() { } apply plugin: "com.android.library" - +apply plugin: "kotlin-android" def appProject = rootProject.allprojects.find { it.plugins.hasPlugin('com.android.application') } @@ -78,6 +83,7 @@ android { "**/libhermes-executor-debug.so", "**/libhermes_executor.so", "**/libreactnativejni.so", + "**/libreactnative.so", "**/libturbomodulejsijni.so", "**/libreact_nativemodule_core.so", "**/libjscexecutor.so", @@ -126,13 +132,15 @@ repositories { google() } +def kotlin_version = getExtOrDefault("kotlinVersion") dependencies { // For < 0.71, this will be from the local maven repo // For > 0.71, this will be replaced by `com.facebook.react:react-android:$version` by react gradle plugin //noinspection GradleDynamicVersion implementation "com.facebook.react:react-native:+" - implementation "com.google.firebase:firebase-messaging:22.0.0" + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + implementation "com.google.firebase:firebase-messaging:24.0.1" implementation "me.leolin:ShortcutBadger:1.1.22@aar" implementation project(':keybaselib') } diff --git a/rnmodules/react-native-kb/android/cpp-adapter.cpp b/rnmodules/react-native-kb/android/cpp-adapter.cpp index b422eb7c9129..f7ed9c8da652 100644 --- a/rnmodules/react-native-kb/android/cpp-adapter.cpp +++ b/rnmodules/react-native-kb/android/cpp-adapter.cpp @@ -42,6 +42,7 @@ void DeferThreadDetach(JNIEnv *env) { } return 0; }(); + static_cast(run_once); // For the callback to actually be executed when a thread exits // we need to associate a non-NULL value with the key on that thread. @@ -109,9 +110,7 @@ void install(facebook::jsi::Runtime &jsiRuntime) { jsiRuntime.global().setProperty(jsiRuntime, "rpcOnGo", std::move(rpcOnGo)); } -extern "C" JNIEXPORT void JNICALL -Java_com_reactnativekb_KbModule_nativeInstallJSI(JNIEnv *env, jobject thiz, - jlong jsi) { +extern "C" JNIEXPORT void JNICALL installJSI(JNIEnv *env, jobject thiz, jlong jsi) { auto runtime = reinterpret_cast(jsi); if (runtime) { install(*runtime); @@ -120,9 +119,7 @@ Java_com_reactnativekb_KbModule_nativeInstallJSI(JNIEnv *env, jobject thiz, java_object = env->NewGlobalRef(thiz); } -extern "C" JNIEXPORT void JNICALL Java_com_reactnativekb_KbModule_nativeEmit( - JNIEnv *env, jclass clazz, jlong jsi, jobject boxedCallInvokerHolder, - jbyteArray data) { +extern "C" JNIEXPORT void JNICALL emit(JNIEnv *env, jclass clazz, jlong jsi, jobject boxedCallInvokerHolder, jbyteArray data) { auto rPtr = reinterpret_cast(jsi); auto &runtime = *rPtr; auto boxedCallInvokerRef = jni::make_local(boxedCallInvokerHolder); @@ -148,3 +145,14 @@ extern "C" JNIEXPORT void JNICALL Java_com_reactnativekb_KbModule_nativeEmit( }); }); } + +static JNINativeMethod methods[] = { + {"installJSI", "(J)V", (void *)&installJSI}, + {"emit", "(JLcom/facebook/react/turbomodule/core/CallInvokerHolderImpl;[B)V", (void *)&emit}, +}; + + +extern "C" JNIEXPORT void JNICALL Java_com_reactnativekb_KbModule_registerNatives(JNIEnv *env, jobject thiz, jlong jsi) { + jclass clazz = env->FindClass("com/reactnativekb/KbModule"); + env->RegisterNatives(clazz, methods, sizeof(methods)/sizeof(methods[0])); +} diff --git a/rnmodules/react-native-kb/android/gradle.properties b/rnmodules/react-native-kb/android/gradle.properties index 1a8feb4a016e..1e3c7fd3193d 100644 --- a/rnmodules/react-native-kb/android/gradle.properties +++ b/rnmodules/react-native-kb/android/gradle.properties @@ -1,5 +1,5 @@ -Kb_kotlinVersion=1.7.0 -Kb_minSdkVersion=21 -Kb_targetSdkVersion=31 -Kb_compileSdkVersion=31 -Kb_ndkversion=21.4.7075529 +Kb_kotlinVersion=1.9.24 +Kb_minSdkVersion=23 +Kb_targetSdkVersion=34 +Kb_compileSdkVersion=34 +Kb_ndkversion=26.1.10909125 diff --git a/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/DarkModePrefHelper.java b/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/DarkModePrefHelper.java deleted file mode 100644 index 975a89a883f4..000000000000 --- a/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/DarkModePrefHelper.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.reactnativekb; - -public class DarkModePrefHelper { - public static DarkModePreference fromString(String prefString) { - switch (prefString) { - case "alwaysDark": - return DarkModePreference.AlwaysDark; - case "alwaysLight": - return DarkModePreference.AlwaysLight; - default: - return DarkModePreference.System; - } - } -} diff --git a/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/DarkModePrefHelper.kt b/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/DarkModePrefHelper.kt new file mode 100644 index 000000000000..192bc517d23a --- /dev/null +++ b/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/DarkModePrefHelper.kt @@ -0,0 +1,13 @@ +package com.reactnativekb + +import kotlin.Throws + +object DarkModePrefHelper { + fun fromString(prefString: String): DarkModePreference { + return when (prefString) { + "alwaysDark" -> DarkModePreference.AlwaysDark + "alwaysLight" -> DarkModePreference.AlwaysLight + else -> DarkModePreference.System + } + } +} diff --git a/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/DarkModePreference.java b/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/DarkModePreference.java deleted file mode 100644 index 439e756b1fb9..000000000000 --- a/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/DarkModePreference.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.reactnativekb; - -public enum DarkModePreference { - System, AlwaysDark, AlwaysLight; -} - diff --git a/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/DarkModePreference.kt b/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/DarkModePreference.kt new file mode 100644 index 000000000000..b62b89766471 --- /dev/null +++ b/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/DarkModePreference.kt @@ -0,0 +1,9 @@ +package com.reactnativekb + +import kotlin.Throws + +enum class DarkModePreference { + System, + AlwaysDark, + AlwaysLight +} diff --git a/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/GuiConfig.java b/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/GuiConfig.java deleted file mode 100644 index ef326e0261d1..000000000000 --- a/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/GuiConfig.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.reactnativekb; - -import androidx.annotation.Nullable; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.File; - -public class GuiConfig { - private static GuiConfig singletonInstance = null; - - private File filesDir; - - private GuiConfig(File filesDir) { - this.filesDir = filesDir; - } - - public static GuiConfig getInstance(File filesDir) { - if (singletonInstance == null) { - singletonInstance = new GuiConfig(filesDir); - } - return singletonInstance; - } - - - public String asString() { - File filePath = new File(this.filesDir, "/.config/keybase/gui_config.json"); - return ReadFileAsString.read(filePath.getAbsolutePath()); - } - - public DarkModePreference getDarkMode() { - try { - JSONObject jsonObject = new JSONObject(this.asString()); - JSONObject jsonObjectUI = jsonObject.getJSONObject("ui"); - - String darkModeString = jsonObjectUI.getString("darkMode"); - return DarkModePrefHelper.fromString(darkModeString); - } catch (JSONException e) { - return DarkModePreference.System; - } - } -} - diff --git a/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/GuiConfig.kt b/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/GuiConfig.kt new file mode 100644 index 000000000000..c78a5fd2ebcb --- /dev/null +++ b/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/GuiConfig.kt @@ -0,0 +1,42 @@ +package com.reactnativekb + +import androidx.annotation.Nullable + +import org.json.JSONException +import org.json.JSONObject + +import java.io.File + +class GuiConfig private constructor(filesDir: File?) { + private val filesDir: File? + + init { + this.filesDir = filesDir + } + + fun asString(): String? { + val filePath = File(filesDir, "/.config/keybase/gui_config.json") + return ReadFileAsString.read(filePath.getAbsolutePath()) + } + + fun getDarkMode(): DarkModePreference { + return try { + val jsonObject = JSONObject(asString()) + val jsonObjectUI: JSONObject = jsonObject.getJSONObject("ui") + val darkModeString: String = jsonObjectUI.getString("darkMode") + DarkModePrefHelper.fromString(darkModeString) + } catch (e: JSONException) { + DarkModePreference.System + } + } + + companion object { + private var singletonInstance: GuiConfig? = null + fun getInstance(filesDir: File?): GuiConfig? { + if (singletonInstance == null) { + singletonInstance = GuiConfig(filesDir) + } + return singletonInstance + } + } +} diff --git a/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/KbModule.java b/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/KbModule.java deleted file mode 100644 index b2ca5c8aa64f..000000000000 --- a/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/KbModule.java +++ /dev/null @@ -1,719 +0,0 @@ -package com.reactnativekb; - -import android.app.Activity; -import android.app.DownloadManager; -import android.app.KeyguardManager; -import android.content.Context; -import android.content.Intent; -import android.content.SharedPreferences; -import android.content.res.AssetFileDescriptor; -import android.net.Uri; -import android.os.Build; -import android.os.Bundle; -import android.os.Environment; -import android.provider.Settings; -import android.telephony.TelephonyManager; -import android.text.format.DateFormat; -import android.util.Log; -import android.view.Window; -import android.view.WindowManager; -import androidx.annotation.NonNull; -import androidx.core.app.NotificationManagerCompat; -import androidx.core.content.FileProvider; -import com.facebook.react.bridge.Arguments; -import com.facebook.react.bridge.LifecycleEventListener; -import com.facebook.react.bridge.Promise; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.bridge.WritableArray; -import com.facebook.react.bridge.WritableMap; -import com.facebook.react.module.annotations.ReactModule; -import com.facebook.react.modules.core.DeviceEventManagerModule; -import com.facebook.react.turbomodule.core.CallInvokerHolderImpl; -import com.google.android.gms.tasks.OnCompleteListener; -import com.google.android.gms.tasks.Task; -import com.google.firebase.messaging.FirebaseMessagingService; -import com.google.firebase.messaging.FirebaseMessaging; -import com.google.firebase.FirebaseApp; -import com.google.firebase.FirebaseOptions; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import keybase.Keybase; -import me.leolin.shortcutbadger.ShortcutBadger; -import static keybase.Keybase.readArr; -import static keybase.Keybase.version; -import static keybase.Keybase.writeArr; - -public class KbModule extends KbSpec { - public static final String NAME = "Kb"; - private static final String RN_NAME = "ReactNativeJS"; - private static final String RPC_META_EVENT_NAME = "kb-meta-engine-event"; - private static final String RPC_META_EVENT_ENGINE_RESET = "kb-engine-reset"; - private static final int MAX_TEXT_FILE_SIZE = 100 * 1024; // 100 kiB - private static final String LINE_SEPARATOR = System.getProperty("line.separator"); - private Boolean started = false; - private boolean misTestDevice; - private HashMap initialIntent; - private final ReactApplicationContext reactContext; - - private native void nativeInstallJSI(long jsiPtr); - private native void nativeEmit(long jsiPtr, CallInvokerHolderImpl jsInvoker, byte[] data); - private ExecutorService executor; - private Boolean jsiInstalled = false; - - KbModule(ReactApplicationContext reactContext) { - super(reactContext); - this.reactContext = reactContext; - this.misTestDevice = isTestDevice(reactContext); - this.setSecureFlag(); - - reactContext.addLifecycleEventListener(new LifecycleEventListener() { - @Override - public void onHostResume() { - setSecureFlag(); - } - - @Override - public void onHostPause() { } - - @Override - public void onHostDestroy() { } - }); - } - - @Override - @NonNull - public String getName() { - return NAME; - } - - @ReactMethod - public void addListener(String eventName) { } - - @ReactMethod - public void removeListeners(Integer count) { - } - - // Is this a robot controlled test device? (i.e. pre-launch report?) - private static boolean isTestDevice(ReactApplicationContext context) { - String testLabSetting = Settings.System.getString(context.getContentResolver(), "firebase.test.lab"); - return "true".equals(testLabSetting); - } - - /** - * Gets a field from the project's BuildConfig. This is useful when, for example, flavors - * are used at the project level to set custom fields. - * @param context Used to find the correct file - * @param fieldName The name of the field-to-access - * @return The value of the field, or {@code null} if the field is not found. - */ - private Object getBuildConfigValue(String fieldName) { - try { - Class clazz = Class.forName(this.reactContext.getPackageName() + ".BuildConfig"); - Field field = clazz.getField(fieldName); - return field.get(null); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } catch (NoSuchFieldException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - return null; - } - - - private String readGuiConfig() { - return GuiConfig.getInstance(this.reactContext.getFilesDir()).asString(); - } - - // newarch @Override - protected Map getTypedExportedConstants() { - String versionCode = String.valueOf(getBuildConfigValue("VERSION_CODE")); - String versionName = String.valueOf(getBuildConfigValue("VERSION_NAME")); - boolean isDeviceSecure = false; - - try { - final KeyguardManager keyguardManager = (KeyguardManager) this.reactContext.getSystemService(Context.KEYGUARD_SERVICE); - isDeviceSecure = keyguardManager.isKeyguardSecure(); - } catch (Exception e) { - NativeLogger.warn(": Error reading keyguard secure state", e); - } - - String serverConfig = ""; - try { - serverConfig = ReadFileAsString.read(this.reactContext.getCacheDir().getAbsolutePath() + "/Keybase/keybase.app.serverConfig"); - } catch (Exception e) { - NativeLogger.warn(": Error reading server config", e); - } - - String cacheDir = ""; - { - File dir = this.reactContext.getCacheDir(); - if (dir != null) { - cacheDir = dir.getAbsolutePath(); - } - } - - String downloadDir = ""; - { - File dir = this.reactContext.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS); - if (dir != null) { - downloadDir = dir.getAbsolutePath(); - } - } - - final Map constants = new HashMap<>(); - constants.put("androidIsDeviceSecure", isDeviceSecure); - constants.put("androidIsTestDevice", misTestDevice); - constants.put("appVersionCode", versionCode); - constants.put("appVersionName", versionName); - constants.put("darkModeSupported", false); - constants.put("fsCacheDir", cacheDir); - constants.put("fsDownloadDir", downloadDir); - constants.put("guiConfig", readGuiConfig()); - constants.put("serverConfig", serverConfig); - constants.put("uses24HourClock", DateFormat.is24HourFormat(this.reactContext)); - constants.put("version", version()); - return constants; - } - - // country code - @ReactMethod - public void getDefaultCountryCode(Promise promise) { - try { - TelephonyManager tm = (TelephonyManager) this.reactContext.getSystemService(Context.TELEPHONY_SERVICE); - String countryCode = tm.getNetworkCountryIso(); - promise.resolve(countryCode); - } catch (Exception e) { - promise.reject(e); - } - } - - // Logging - @ReactMethod - public void logSend(String status, String feedback, boolean sendLogs, boolean sendMaxBytes, String traceDir, String cpuProfileDir, Promise promise) { - if (misTestDevice) { - return; - } - try { - final String logID = Keybase.logSend(status, feedback, sendLogs, sendMaxBytes, traceDir, cpuProfileDir); - promise.resolve(logID); - } catch (Exception e) { - promise.reject(e); - } - } - - // Settings - @ReactMethod - public void androidOpenSettings() { - Intent intent = new Intent(); - intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); - Uri uri = Uri.fromParts("package", reactContext.getPackageName(), null); - intent.setData(uri); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - reactContext.startActivity(intent); - } - - // Screen protector - @ReactMethod - public void androidSetSecureFlagSetting(boolean setSecure, Promise promise) { - final SharedPreferences prefs = reactContext.getSharedPreferences("SecureFlag", Context.MODE_PRIVATE); - final boolean success = prefs.edit().putBoolean("setSecure", setSecure).commit(); - promise.resolve(success); - setSecureFlag(); - } - - @ReactMethod - public void androidGetSecureFlagSetting(Promise promise) { - final SharedPreferences prefs = this.reactContext.getSharedPreferences("SecureFlag", Context.MODE_PRIVATE); - final boolean setSecure = prefs.getBoolean("setSecure", !misTestDevice); - promise.resolve(setSecure); - } - - private void setSecureFlag() { - final SharedPreferences prefs = this.reactContext.getSharedPreferences("SecureFlag", Context.MODE_PRIVATE); - final boolean setSecure = prefs.getBoolean("setSecure", !misTestDevice); - final Activity activity = this.reactContext.getCurrentActivity(); - if (activity != null) { - activity.runOnUiThread(new Runnable() { - @Override - public void run() { - final Window window = activity.getWindow(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH && setSecure) { - window.addFlags(WindowManager.LayoutParams.FLAG_SECURE); - } else { - window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE); - } - } - }); - } - } - - // Sharing - @ReactMethod - public void androidShare(String uriPath, String mimeType, Promise promise) { - File file = new File(uriPath); - Intent intent = new Intent(Intent.ACTION_SEND).setType(mimeType); - if (mimeType.startsWith("text/")) { - handleTextFileSharing(file, intent, promise); - } else { - handleNonTextFileSharing(file, intent, promise); - } - } - private void handleTextFileSharing(File file, Intent intent, Promise promise) { - try (BufferedReader br = new BufferedReader(new FileReader(file))) { - StringBuilder textBuilder = new StringBuilder(); - String text; - boolean isFirst = true; - - while (textBuilder.length() < MAX_TEXT_FILE_SIZE && (text = br.readLine()) != null) { - if (!isFirst) { - textBuilder.append(LINE_SEPARATOR); - } - textBuilder.append(text); - isFirst = false; - } - intent.putExtra(Intent.EXTRA_TEXT, textBuilder.toString()); - } catch (FileNotFoundException ex) { - promise.reject(new Exception("File not found")); - return; - } catch (IOException ex) { - promise.reject(new Exception("Error reading the file")); - return; - } - startSharing(intent, promise); - } - - private void handleNonTextFileSharing(File file, Intent intent, Promise promise) { - Uri fileUri = FileProvider.getUriForFile(reactContext, reactContext.getPackageName() + ".fileprovider", file); - intent.putExtra(Intent.EXTRA_STREAM, fileUri); - startSharing(intent, promise); - } - - private void startSharing(Intent intent, Promise promise) { - if (intent.resolveActivity(reactContext.getPackageManager()) != null) { - Intent chooser = Intent.createChooser(intent, "Send to"); - // Android 5.1.1 fails `startActivity` below without this flag in the Intent. - chooser.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - reactContext.startActivity(chooser); - promise.resolve(true); - } else { - promise.reject(new Exception("Invalid chooser")); - } - } - - @ReactMethod - public void androidShareText(String text, String mimeType, Promise promise) { - Intent intent = new Intent(Intent.ACTION_SEND).setType(mimeType); - intent.putExtra(Intent.EXTRA_TEXT, text); - - if (intent.resolveActivity(reactContext.getPackageManager()) != null) { - Intent chooser = Intent.createChooser(intent, "Send to"); - // Android 5.1.1 fails `startActivity` below without this flag in the Intent. - chooser.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - reactContext.startActivity(chooser); - promise.resolve(true); - } else { - promise.reject(new Exception("Invalid chooser")); - } - } - - // Push - - @ReactMethod - public void androidCheckPushPermissions(Promise promise) { - NotificationManagerCompat managerCompat = NotificationManagerCompat.from(this.reactContext); - promise.resolve(managerCompat.areNotificationsEnabled()); - } - - @ReactMethod - public void androidRequestPushPermissions(Promise promise) { - this.ensureFirebase(); - androidCheckPushPermissions(promise); - } - - private void ensureFirebase() { - boolean firebaseInitialized = FirebaseApp.getApps(this.reactContext).size() == 1; - if (!firebaseInitialized) { - FirebaseApp.initializeApp(this.reactContext, - new FirebaseOptions.Builder() - .setApplicationId(String.valueOf(getBuildConfigValue("APPLICATION_ID"))) - .setProjectId("keybase-c30fb") - .setGcmSenderId("9603251415") - .build() - ); - } - } - - @ReactMethod - public void androidGetRegistrationToken(Promise promise) { - this.ensureFirebase(); - FirebaseMessaging.getInstance().getToken() - .addOnCompleteListener(new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - if (!task.isSuccessful()) { - NativeLogger.info("Fetching FCM registration token failed " + task.getException()); - promise.reject(task.getException()); - return; - } - - // Get new FCM registration token - String token = task.getResult(); - NativeLogger.info("Got token: " + token); - promise.resolve(token); - } - }); - } - - // Unlink - - private void deleteRecursive(File fileOrDirectory) throws IOException { - if (fileOrDirectory.isDirectory()) { - File[] files = fileOrDirectory.listFiles(); - if (files == null) { - throw new NullPointerException("Received null trying to list files of directory '" + fileOrDirectory + "'"); - } else { - for (File child : files) { - deleteRecursive(child); - } - } - } - boolean result = fileOrDirectory.delete(); - if (!result) { - throw new IOException("Failed to delete '" + fileOrDirectory + "'"); - } - } - - private static final String FILE_PREFIX_BUNDLE_ASSET = "bundle-assets://"; - - private boolean isAsset(String path) { - return path != null && path.startsWith(FILE_PREFIX_BUNDLE_ASSET); - } - - private String normalizePath(String path) { - if (path == null) - return null; - if (!path.matches("\\w+\\:.*")) - return path; - if (path.startsWith("file://")) { - return path.replace("file://", ""); - } - - Uri uri = Uri.parse(path); - if (path.startsWith(FILE_PREFIX_BUNDLE_ASSET)) { - return path; - } else - return PathResolver.getRealPathFromURI(this.reactContext, uri); - } - - @ReactMethod - public void androidUnlink(String path, Promise promise) { - try { - String normalizedPath = this.normalizePath(path); - this.deleteRecursive(new File(normalizedPath)); - promise.resolve(true); - } catch (Exception err) { - promise.reject("EUNSPECIFIED", err.getLocalizedMessage()); - } - } - - // download - - private WritableMap statFile(String path) { - try { - path = this.normalizePath(path); - WritableMap stat = Arguments.createMap(); - if (this.isAsset(path)) { - String name = path.replace(FILE_PREFIX_BUNDLE_ASSET, ""); - AssetFileDescriptor fd = this.reactContext.getAssets().openFd(name); - stat.putString("filename", name); - stat.putString("path", path); - stat.putString("type", "asset"); - stat.putString("size", String.valueOf(fd.getLength())); - stat.putInt("lastModified", 0); - } else { - File target = new File(path); - if (!target.exists()) { - return null; - } - stat.putString("filename", target.getName()); - stat.putString("path", target.getPath()); - stat.putString("type", target.isDirectory() ? "directory" : "file"); - stat.putString("size", String.valueOf(target.length())); - String lastModified = String.valueOf(target.lastModified()); - stat.putString("lastModified", lastModified); - - } - return stat; - } catch (Exception err) { - return null; - } - } - - @ReactMethod - public void androidAddCompleteDownload(ReadableMap config, Promise promise) { - DownloadManager dm = (DownloadManager) this.reactContext.getSystemService(this.reactContext.DOWNLOAD_SERVICE); - if (config == null || !config.hasKey("path")) { - promise.reject("EINVAL", "addCompleteDownload config or path missing."); - return; - } - String path = this.normalizePath(config.getString("path")); - if (path == null) { - promise.reject("EINVAL", "addCompleteDownload can not resolve URI:" + config.getString("path")); - return; - } - try { - WritableMap stat = statFile(path); - dm.addCompletedDownload( - config.hasKey("title") ? config.getString("title") : "", - config.hasKey("description") ? config.getString("description") : "", - true, - config.hasKey("mime") ? config.getString("mime") : null, - path, - Long.valueOf(stat.getString("size")), - config.hasKey("showNotification") && config.getBoolean("showNotification") - ); - promise.resolve(null); - } catch (Exception ex) { - promise.reject("EUNSPECIFIED", ex.getLocalizedMessage()); - } - } - - // Dark mode - // Same type as DarkModePreference: 'system' | 'alwaysDark' | 'alwaysLight' - @ReactMethod - public void androidAppColorSchemeChanged(String prefString) { - try { - final Activity activity = this.reactContext.getCurrentActivity(); - if (activity != null) { - Method m = activity.getClass().getMethod("setBackgroundColor", DarkModePreference.class); - final DarkModePreference pref = DarkModePrefHelper.fromString(prefString); - m.invoke(activity, pref); - } - } catch (Exception ex) { - } - } - - // Badging - - @ReactMethod - public void androidSetApplicationIconBadgeNumber(double badge) { - ShortcutBadger.applyCount(this.reactContext, (int)badge); - } - - - // init bundles - // This isn't related to the Go Engine, but it's a small thing that wouldn't be worth putting in - // its own react module. That's because starting up a react module is a bit expensive and we - // wouldn't be able to lazy load this because we need it on startup. - @ReactMethod - public void androidGetInitialBundleFromNotification(Promise promise) { - try { - final Activity activity = this.reactContext.getCurrentActivity(); - if (activity != null) { - Method m = activity.getClass().getMethod("getInitialBundleFromNotification"); - Bundle initialBundleFromNotification = (Bundle)(m.invoke(activity)); - if (initialBundleFromNotification != null) { - WritableMap map = Arguments.fromBundle(initialBundleFromNotification); - promise.resolve(map); - return; - } - } - } catch (Exception ex){ } - - promise.resolve(null); - } - - @ReactMethod - public void androidGetInitialShareFileUrls(Promise promise) { - try { - final Activity activity = this.reactContext.getCurrentActivity(); - if (activity != null) { - Method m = activity.getClass().getMethod("getInitialShareFileUrls"); - Object o = m.invoke(activity); - if (o != null && o instanceof String[]) { - String[] us = (String[]) o; - WritableArray writableArray = Arguments.createArray(); - for (String str : us) { - writableArray.pushString(str); - } - promise.resolve(writableArray); - return; - } - } - } catch (Exception ex){ - Log.d("androidGetInitialShareFileUrl exception", ex.toString()); - } - promise.resolve(""); - } - - @ReactMethod - public void androidGetInitialShareText(Promise promise) { - try { - final Activity activity = this.reactContext.getCurrentActivity(); - if (activity != null) { - Method m = activity.getClass().getMethod("getInitialShareText"); - Object shareText = m.invoke(activity); - if (shareText != null) { - promise.resolve(String.valueOf(shareText)); - return; - } - } - } catch (Exception ex){} - promise.resolve(""); - } - - // engine - private static void relayReset(ReactApplicationContext reactContext) { - if (!reactContext.hasActiveCatalystInstance()) { - NativeLogger.info(NAME + ": JS Bridge is dead, Can't send EOF message"); - } else { - reactContext - .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) - .emit(RPC_META_EVENT_NAME, RPC_META_EVENT_ENGINE_RESET); - } - } - - @ReactMethod(isBlockingSynchronousMethod = true) - public void install() { - try { - System.loadLibrary("cpp"); - jsiInstalled = true; - this.nativeInstallJSI(this.reactContext.getJavaScriptContextHolder().get()); - } catch (Exception exception) { - NativeLogger.error("Exception in installJSI", exception); - } - } - - @ReactMethod - public void engineReset() { - try { - Keybase.reset(); - relayReset(reactContext); - } catch (Exception e) { - NativeLogger.error("Exception in engineReset", e); - } - } - - @ReactMethod - public void engineStart() { - NativeLogger.info("KeybaseEngine started"); - try { - started = true; - if (executor == null) { - executor = Executors.newSingleThreadExecutor(); - executor.execute(new ReadFromKBLib(this.reactContext)); - } - } catch (Exception e) { - NativeLogger.error("Exception in engineStart", e); - } - } - -// JSI - private class ReadFromKBLib implements Runnable { - private final ReactApplicationContext reactContext; - - public ReadFromKBLib(ReactApplicationContext reactContext) { - this.reactContext = reactContext; - - reactContext.addLifecycleEventListener(new LifecycleEventListener() { - @Override - public void onHostResume() { - if (executor == null) { - executor = Executors.newSingleThreadExecutor(); - executor.execute(new ReadFromKBLib(reactContext)); - } - } - - @Override - public void onHostPause() { - } - - @Override - public void onHostDestroy() { - destroy(); - } - }); - } - - @Override - public void run() { - do { - try { - - Thread.currentThread().setName("ReadFromKBLib"); - final byte[] data = readArr(); - - if (!reactContext.hasActiveCatalystInstance()) { - NativeLogger.info(NAME + ": JS Bridge is dead, dropping engine message: " + data); - } - - CallInvokerHolderImpl callInvoker = (CallInvokerHolderImpl) reactContext.getCatalystInstance().getJSCallInvokerHolder(); - nativeEmit(reactContext.getJavaScriptContextHolder().get(), callInvoker, data); - } catch (Exception e) { - if (e.getMessage() != null && e.getMessage().equals("Read error: EOF")) { - NativeLogger.info("Got EOF from read. Likely because of reset."); - } else { - NativeLogger.error("Exception in ReadFromKBLib.run", e); - } - } - } while (!Thread.currentThread().isInterrupted() && reactContext.hasActiveCatalystInstance()); - } - } - - public void destroy() { - try { - Keybase.reset(); - relayReset(reactContext); - } catch (Exception e) { - NativeLogger.error("Exception in KeybaseEngine.destroy", e); - } - - try { - if (executor != null) { - executor.shutdownNow(); - } - - // We often hit this timeout during app resume, e.g. hit the back - // button to go to home screen and then tap Keybase app icon again. - if (executor != null && !executor.awaitTermination(3, TimeUnit.SECONDS)) { - NativeLogger.warn(NAME + ": Executor pool didn't shut down cleanly"); - } - executor = null; - } catch (Exception e) { - NativeLogger.error("Exception in JSI.destroy", e); - } - } - - @ReactMethod - public void rpcOnGo(byte[] arr) { - try { - writeArr(arr); - } catch (Exception e) { - NativeLogger.error("Exception in GoJSIBridge.rpcOnGo", e); - } - } - - - @ReactMethod - public void iosGetHasShownPushPrompt(Promise promise) { - promise.reject(new Exception("wrong platform")); - } -} diff --git a/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/KbModule.kt b/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/KbModule.kt new file mode 100644 index 000000000000..0b33e9998688 --- /dev/null +++ b/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/KbModule.kt @@ -0,0 +1,687 @@ +package com.reactnativekb + +import android.app.Activity +import android.app.DownloadManager +import android.app.KeyguardManager +import android.content.Context +import android.content.Intent +import android.content.SharedPreferences +import android.content.res.AssetFileDescriptor +import android.net.Uri +import android.os.Build +import android.os.Bundle +import android.os.Environment +import android.provider.Settings +import android.telephony.TelephonyManager +import android.text.format.DateFormat +import android.util.Log +import android.view.Window +import android.view.WindowManager +import androidx.core.app.NotificationManagerCompat +import androidx.core.content.FileProvider +import com.facebook.react.bridge.Arguments +import com.facebook.react.bridge.LifecycleEventListener +import com.facebook.react.bridge.Promise +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReactContextBaseJavaModule +import com.facebook.react.bridge.ReactContext +import com.facebook.react.bridge.ReactMethod +import com.facebook.react.bridge.ReadableMap +import com.facebook.react.bridge.WritableArray +import com.facebook.react.bridge.WritableMap +import com.facebook.react.module.annotations.ReactModule +import com.facebook.react.modules.core.DeviceEventManagerModule +import com.facebook.react.turbomodule.core.CallInvokerHolderImpl +import com.google.android.gms.tasks.OnCompleteListener +import com.google.android.gms.tasks.Task +import com.google.firebase.messaging.FirebaseMessagingService +import com.google.firebase.messaging.FirebaseMessaging +import com.google.firebase.FirebaseApp +import com.google.firebase.FirebaseOptions +import java.io.BufferedReader +import java.io.File +import java.io.FileNotFoundException +import java.io.FileReader +import java.io.IOException +import java.io.InputStreamReader +import java.lang.reflect.Field +import java.lang.reflect.Method +import java.util.HashMap +import java.util.concurrent.ExecutorService +import java.util.concurrent.Executors +import java.util.concurrent.TimeUnit +import java.util.regex.Matcher +import java.util.regex.Pattern +import keybase.Keybase +import me.leolin.shortcutbadger.ShortcutBadger +import keybase.Keybase.readArr +import keybase.Keybase.version +import keybase.Keybase.writeArr +import com.facebook.react.common.annotations.FrameworkAPI + +@OptIn(FrameworkAPI::class) +internal class KbModule(reactContext: ReactApplicationContext?) : KbSpec(reactContext) { + private var started: Boolean? = false + private val misTestDevice: Boolean + private val initialIntent: HashMap? = null + private val reactContext: ReactApplicationContext + private external fun registerNatives(jsiPtr: Long) + private external fun installJSI(jsiPtr: Long) + private external fun emit(jsiPtr: Long, jsInvoker: CallInvokerHolderImpl?, data: ByteArray?) + private var executor: ExecutorService? = null + private var jsiInstalled: Boolean? = false + + override fun getName(): String { + return NAME + } + + @ReactMethod + override fun addListener(eventName: String) { + } + + @ReactMethod + override fun removeListeners(count: Double) { + } + + /** + * Gets a field from the project's BuildConfig. This is useful when, for example, flavors + * are used at the project level to set custom fields. + * @param context Used to find the correct file + * @param fieldName The name of the field-to-access + * @return The value of the field, or `null` if the field is not found. + */ + private fun getBuildConfigValue(fieldName: String): Any? { + try { + val clazz: Class<*> = Class.forName(reactContext.getPackageName() + ".BuildConfig") + val field = clazz.getField(fieldName) + return field.get(null) + } catch (e: ClassNotFoundException) { + e.printStackTrace() + } catch (e: NoSuchFieldException) { + e.printStackTrace() + } catch (e: IllegalAccessException) { + e.printStackTrace() + } + return null + } + + private fun readGuiConfig(): String? { + return GuiConfig.getInstance(reactContext.getFilesDir())?.asString() + } + + @ReactMethod(isBlockingSynchronousMethod = true) + override fun getTypedConstants(): WritableMap { + val versionCode: String = getBuildConfigValue("VERSION_CODE").toString() + val versionName: String = getBuildConfigValue("VERSION_NAME").toString() + var isDeviceSecure = false + try { + val keyguardManager: KeyguardManager = reactContext.getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager + isDeviceSecure = keyguardManager.isKeyguardSecure() + } catch (e: Exception) { + NativeLogger.warn(": Error reading keyguard secure state", e) + } + var serverConfig = "" + try { + serverConfig = ReadFileAsString.read(reactContext.getCacheDir().getAbsolutePath() + "/Keybase/keybase.app.serverConfig") + } catch (e: Exception) { + NativeLogger.warn(": Error reading server config", e) + } + var cacheDir = "" + run { + val dir: File? = reactContext.getCacheDir() + if (dir != null) { + cacheDir = dir.getAbsolutePath() + } + } + var downloadDir = "" + run { + val dir: File? = reactContext.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) + if (dir != null) { + downloadDir = dir.getAbsolutePath() + } + } + + val constants: WritableMap = Arguments.createMap() + constants.putBoolean("androidIsDeviceSecure", isDeviceSecure) + constants.putBoolean("androidIsTestDevice", misTestDevice) + constants.putString("appVersionCode", versionCode) + constants.putString("appVersionName", versionName) + constants.putBoolean("darkModeSupported", false) + constants.putString("fsCacheDir", cacheDir) + constants.putString("fsDownloadDir", downloadDir) + constants.putString("guiConfig", readGuiConfig()) + constants.putString("serverConfig", serverConfig) + constants.putBoolean("uses24HourClock", DateFormat.is24HourFormat(reactContext)) + constants.putString("version", version()) + return constants + } + + // country code + @ReactMethod + override fun getDefaultCountryCode(promise: Promise) { + try { + val tm: TelephonyManager = reactContext.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager + val countryCode: String = tm.getNetworkCountryIso() + promise.resolve(countryCode) + } catch (e: Exception) { + promise.reject(e) + } + } + + // Logging + @ReactMethod + override fun logSend(status: String, feedback: String, sendLogs: Boolean, sendMaxBytes: Boolean, traceDir: String, cpuProfileDir: String, promise: Promise) { + if (misTestDevice) { + return + } + try { + val logID: String = Keybase.logSend(status, feedback, sendLogs, sendMaxBytes, traceDir, cpuProfileDir) + promise.resolve(logID) + } catch (e: Exception) { + promise.reject(e) + } + } + + // Settings + @ReactMethod + override fun androidOpenSettings() { + val intent = Intent() + intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) + val uri: Uri = Uri.fromParts("package", reactContext.getPackageName(), null) + intent.setData(uri) + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + reactContext.startActivity(intent) + } + + // Screen protector + @ReactMethod + override fun androidSetSecureFlagSetting(setSecure: Boolean, promise: Promise) { + val prefs: SharedPreferences = reactContext.getSharedPreferences("SecureFlag", Context.MODE_PRIVATE) + val success: Boolean = prefs.edit().putBoolean("setSecure", setSecure).commit() + promise.resolve(success) + setSecureFlag() + } + + @ReactMethod + override fun androidGetSecureFlagSetting(promise: Promise) { + val prefs: SharedPreferences = reactContext.getSharedPreferences("SecureFlag", Context.MODE_PRIVATE) + val setSecure: Boolean = prefs.getBoolean("setSecure", !misTestDevice) + promise.resolve(setSecure) + } + + private fun setSecureFlag() { + val prefs: SharedPreferences = reactContext.getSharedPreferences("SecureFlag", Context.MODE_PRIVATE) + val setSecure: Boolean = prefs.getBoolean("setSecure", !misTestDevice) + val activity: Activity? = reactContext.getCurrentActivity() + if (activity != null) { + activity.runOnUiThread(object : Runnable { + @Override + override fun run() { + val window: Window = activity.getWindow() + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH && setSecure) { + window.addFlags(WindowManager.LayoutParams.FLAG_SECURE) + } else { + window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE) + } + } + }) + } + } + + + @ReactMethod + override fun shareListenersRegistered() { + try { + val activity: Activity? = reactContext.getCurrentActivity() + if (activity != null) { + val m: Method = activity.javaClass.getMethod("shareListenersRegistered") + m.invoke(activity) + } + } catch (ex: Exception) { + } + } + + // Sharing + @ReactMethod + override fun androidShare(uriPath: String, mimeType: String, promise: Promise) { + val file = File(uriPath) + val intent: Intent = Intent(Intent.ACTION_SEND).setType(mimeType) + if (mimeType.startsWith("text/")) { + handleTextFileSharing(file, intent, promise) + } else { + handleNonTextFileSharing(file, intent, promise) + } + } + + private fun handleTextFileSharing(file: File, intent: Intent, promise: Promise) { + try { + BufferedReader(FileReader(file)).use { br -> + val textBuilder = StringBuilder() + var text: String? = null + var isFirst = true + while (textBuilder.length < MAX_TEXT_FILE_SIZE && br.readLine().also { text = it } != null) { + if (!isFirst) { + textBuilder.append(LINE_SEPARATOR) + } + textBuilder.append(text) + isFirst = false + } + intent.putExtra(Intent.EXTRA_TEXT, textBuilder.toString()) + } + } catch (ex: FileNotFoundException) { + promise.reject(Exception("File not found")) + return + } catch (ex: IOException) { + promise.reject(Exception("Error reading the file")) + return + } + startSharing(intent, promise) + } + + private fun handleNonTextFileSharing(file: File, intent: Intent, promise: Promise) { + try { + // note in JS initPlatformSpecific changes the cache dir so this works + val fileUri: Uri = FileProvider.getUriForFile(reactContext, reactContext.getPackageName() + ".fileprovider", file) + intent.putExtra(Intent.EXTRA_STREAM, fileUri) + startSharing(intent, promise) + } catch (ex: Exception) { + promise.reject(Exception("Error sharing file")) + } + } + + private fun startSharing(intent: Intent, promise: Promise) { + if (intent.resolveActivity(reactContext.getPackageManager()) != null) { + val chooser: Intent = Intent.createChooser(intent, "Send to") + // Android 5.1.1 fails `startActivity` below without this flag in the Intent. + chooser.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + reactContext.startActivity(chooser) + promise.resolve(true) + } else { + promise.reject(Exception("Invalid chooser")) + } + } + + @ReactMethod + override fun androidShareText(text: String, mimeType: String, promise: Promise) { + val intent: Intent = Intent(Intent.ACTION_SEND).setType(mimeType) + intent.putExtra(Intent.EXTRA_TEXT, text) + if (intent.resolveActivity(reactContext.getPackageManager()) != null) { + val chooser: Intent = Intent.createChooser(intent, "Send to") + // Android 5.1.1 fails `startActivity` below without this flag in the Intent. + chooser.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + reactContext.startActivity(chooser) + promise.resolve(true) + } else { + promise.reject(Exception("Invalid chooser")) + } + } + + // Push + @ReactMethod + override fun androidCheckPushPermissions(promise: Promise) { + val managerCompat: NotificationManagerCompat = NotificationManagerCompat.from(reactContext) + promise.resolve(managerCompat.areNotificationsEnabled()) + } + + @ReactMethod + override fun androidRequestPushPermissions(promise: Promise) { + ensureFirebase() + androidCheckPushPermissions(promise) + } + + private fun ensureFirebase() { + val firebaseInitialized = FirebaseApp.getApps(reactContext).size == 1 + if (!firebaseInitialized) { + FirebaseApp.initializeApp(reactContext, + FirebaseOptions.Builder() + .setApplicationId(getBuildConfigValue("APPLICATION_ID").toString()) + .setProjectId("keybase-c30fb") + .setGcmSenderId("9603251415") + .build() + ) + } + } + + @ReactMethod + override fun androidGetRegistrationToken(promise: Promise) { + ensureFirebase() + FirebaseMessaging.getInstance().getToken() + .addOnCompleteListener(OnCompleteListener { task -> + if (!task.isSuccessful()) { + NativeLogger.info("Fetching FCM registration token failed " + task.getException()) + promise.reject("Fetching FCM registration token failed") + return@OnCompleteListener + } + + // Get new FCM registration token + val token: String? = task.result + if (token == null) { + promise.reject("null token") + return@OnCompleteListener + } + NativeLogger.info("Got token: $token") + promise.resolve(token) + }) + } + + // Unlink + @Throws(IOException::class) + private fun deleteRecursive(fileOrDirectory: File) { + if (fileOrDirectory.isDirectory()) { + val files = fileOrDirectory.listFiles() + if (files == null) { + throw NullPointerException("Received null trying to list files of directory '$fileOrDirectory'") + } else { + for (child in files) { + deleteRecursive(child) + } + } + } + val result: Boolean = fileOrDirectory.delete() + if (!result) { + throw IOException("Failed to delete '$fileOrDirectory'") + } + } + + init { + this.reactContext = reactContext!! + misTestDevice = isTestDevice(reactContext) + setSecureFlag() + reactContext.addLifecycleEventListener(object : LifecycleEventListener { + @Override + override fun onHostResume() { + setSecureFlag() + } + + @Override + override fun onHostPause() { + } + + @Override + override fun onHostDestroy() { + } + }) + } + + private fun isAsset(path: String): Boolean { + return path.startsWith(FILE_PREFIX_BUNDLE_ASSET) + } + + private fun normalizePath(path: String): String { + if (!Regex("""\w+\:.*""").matches(path)) { + return path + } + if (path.startsWith("file://")) { + return path.replace("file://", "") + } + val uri: Uri = Uri.parse(path) + if (path.startsWith(FILE_PREFIX_BUNDLE_ASSET)) { + return path + } else { + return PathResolver.getRealPathFromURI(reactContext, uri) ?: "" + } + } + + @ReactMethod + override fun androidUnlink(path: String, promise: Promise) { + try { + val normalizedPath = normalizePath(path) + deleteRecursive(File(normalizedPath)) + promise.resolve(true) + } catch (err: Exception) { + promise.reject("EUNSPECIFIED", err.getLocalizedMessage()) + } + } + + // download + private fun statFile(_path: String): WritableMap? { + var path = _path + return try { + path = normalizePath(path) + val stat: WritableMap = Arguments.createMap() + if (isAsset(path)) { + val name: String = path.replace(FILE_PREFIX_BUNDLE_ASSET, "") + val fd: AssetFileDescriptor = reactContext.getAssets().openFd(name) + stat.putString("filename", name) + stat.putString("path", path) + stat.putString("type", "asset") + stat.putString("size", fd.getLength().toString()) + stat.putInt("lastModified", 0) + } else { + val target = File(path) + if (!target.exists()) { + return null + } + stat.putString("filename", target.getName()) + stat.putString("path", target.getPath()) + stat.putString("type", if (target.isDirectory()) "directory" else "file") + stat.putString("size", target.length().toString()) + val lastModified: String = target.lastModified().toString() + stat.putString("lastModified", lastModified) + } + stat + } catch (err: Exception) { + null + } + } + + @ReactMethod + override fun androidAddCompleteDownload(config: ReadableMap, promise: Promise) { + val dm: DownloadManager = reactContext.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager + if (!config.hasKey("path")) { + promise.reject("EINVAL", "addCompleteDownload config or path missing.") + return + } + val path = normalizePath(config.getString("path") ?: "") + + if (path == "") { + promise.reject("EINVAL", "addCompleteDownload can not resolve URI:" + config.getString("path")) + return + } + try { + val stat: WritableMap? = statFile(path) + var size = 0L + if (stat != null) { + val sizeStr = stat.getString("size") + if (sizeStr != null) { + size = sizeStr.toLong() + } + } + dm.addCompletedDownload( + if (config.hasKey("title")) config.getString("title") else "", + if (config.hasKey("description")) config.getString("description") else "", + true, + if (config.hasKey("mime")) config.getString("mime") else null, + path, + size, + config.hasKey("showNotification") && config.getBoolean("showNotification") + ) + promise.resolve(null) + } catch (ex: Exception) { + promise.reject("EUNSPECIFIED", ex.getLocalizedMessage()) + } + } + + // Dark mode + // Same type as DarkModePreference: 'system' | 'alwaysDark' | 'alwaysLight' + @ReactMethod + override fun androidAppColorSchemeChanged(prefString: String) { + try { + val activity: Activity? = reactContext.getCurrentActivity() + if (activity != null) { + val m: Method = activity.javaClass.getMethod("setBackgroundColor", DarkModePreference::class.java) + val pref: DarkModePreference = DarkModePrefHelper.fromString(prefString) + m.invoke(activity, pref) + } + } catch (ex: Exception) { + } + } + + // Badging + @ReactMethod + override fun androidSetApplicationIconBadgeNumber(badge: Double) { + ShortcutBadger.applyCount(reactContext, badge.toInt()) + } + + @ReactMethod(isBlockingSynchronousMethod = true) + override fun install(): Boolean { + try { + System.loadLibrary("cpp") + jsiInstalled = true + val jsi = reactContext.javaScriptContextHolder?.get() + if (jsi != null) { + registerNatives(jsi) + installJSI(jsi) + } else { + throw Exception("No context holder") + } + } catch (exception: Exception) { + NativeLogger.error("Exception in installJSI", exception) + } + return true; + } + + @ReactMethod + override fun engineReset() { + try { + Keybase.reset() + relayReset(reactContext) + } catch (e: Exception) { + NativeLogger.error("Exception in engineReset", e) + } + } + + @ReactMethod + override fun engineStart() { + NativeLogger.info("KeybaseEngine started") + try { + started = true + if (executor == null) { + val ex = Executors.newSingleThreadExecutor() + executor = ex + ex.execute(ReadFromKBLib(reactContext)) + } + } catch (e: Exception) { + NativeLogger.error("Exception in engineStart", e) + } + } + + // JSI + private inner class ReadFromKBLib(reactContext: ReactApplicationContext) : Runnable { + private val reactContext: ReactApplicationContext + + init { + this.reactContext = reactContext + reactContext.addLifecycleEventListener(object : LifecycleEventListener { + @Override + override fun onHostResume() { + if (executor == null) { + val ex = Executors.newSingleThreadExecutor() + executor = ex + ex.execute(ReadFromKBLib(reactContext)) + } + } + + @Override + override fun onHostPause() { + } + + @Override + override fun onHostDestroy() { + destroy() + } + }) + } + + @Override + override fun run() { + do { + try { + Thread.currentThread().setName("ReadFromKBLib") + val data: ByteArray = readArr() + if (!reactContext.hasActiveCatalystInstance()) { + NativeLogger.info(NAME.toString() + ": JS Bridge is dead, dropping engine message: " + data) + + } + + val callInvoker: CallInvokerHolderImpl = reactContext.getJSCallInvokerHolder() as CallInvokerHolderImpl + val jsi = reactContext.javaScriptContextHolder?.get() + if (jsi != null) { + emit(jsi, callInvoker, data) + } else { + throw Exception("No context holder") + } + } catch (e: Exception) { + if (e.message != null && e.message.equals("Read error: EOF")) { + NativeLogger.info("Got EOF from read. Likely because of reset.") + } else { + NativeLogger.error("Exception in ReadFromKBLib.run", e) + } + } + } while (!Thread.currentThread().isInterrupted() && reactContext.hasActiveCatalystInstance()) + } + } + + fun destroy() { + try { + Keybase.reset() + relayReset(reactContext) + } catch (e: Exception) { + NativeLogger.error("Exception in KeybaseEngine.destroy", e) + } + try { + executor?.shutdownNow() + + // We often hit this timeout during app resume, e.g. hit the back + // button to go to home screen and then tap Keybase app icon again. + if (executor?.awaitTermination(3, TimeUnit.SECONDS)== false) { + NativeLogger.warn(NAME.toString() + ": Executor pool didn't shut down cleanly") + } + executor = null + } catch (e: Exception) { + NativeLogger.error("Exception in JSI.destroy", e) + } + } + + @ReactMethod + fun rpcOnGo(arr: ByteArray) { + try { + writeArr(arr) + } catch (e: Exception) { + NativeLogger.error("Exception in GoJSIBridge.rpcOnGo", e) + } + } + + @ReactMethod + override fun iosGetHasShownPushPrompt(promise: Promise) { + promise.reject(Exception("wrong platform")) + } + + companion object { + val NAME: String = "Kb" + private val RN_NAME: String = "ReactNativeJS" + private val RPC_META_EVENT_NAME: String = "kb-meta-engine-event" + private val RPC_META_EVENT_ENGINE_RESET: String = "kb-engine-reset" + private const val MAX_TEXT_FILE_SIZE = 100 * 1024 // 100 kiB + private val LINE_SEPARATOR: String? = System.getProperty("line.separator") + + // Is this a robot controlled test device? (i.e. pre-launch report?) + private fun isTestDevice(context: ReactApplicationContext): Boolean { + val testLabSetting: String? = Settings.System.getString(context.contentResolver, "firebase.test.lab") + return "true".equals(testLabSetting) + } + + private val FILE_PREFIX_BUNDLE_ASSET: String = "bundle-assets://" + + // engine + private fun relayReset(reactContext: ReactApplicationContext) { + if (!reactContext.hasActiveCatalystInstance()) { + NativeLogger.info(NAME.toString() + ": JS Bridge is dead, Can't send EOF message") + } else { + reactContext + .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java) + .emit(RPC_META_EVENT_NAME, RPC_META_EVENT_ENGINE_RESET) + } + } + } +} diff --git a/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/KbPackage.java b/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/KbPackage.java deleted file mode 100644 index d241efe8bd55..000000000000 --- a/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/KbPackage.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.reactnativekb; - -import androidx.annotation.Nullable; - -import com.facebook.react.bridge.NativeModule; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.module.model.ReactModuleInfo; -import com.facebook.react.module.model.ReactModuleInfoProvider; -import com.facebook.react.TurboReactPackage; - -import java.util.HashMap; -import java.util.Map; - -public class KbPackage extends TurboReactPackage { - - @Nullable - @Override - public NativeModule getModule(String name, ReactApplicationContext reactContext) { - if (name.equals(KbModule.NAME)) { - return new KbModule(reactContext); - } else { - return null; - } - } - - @Override - public ReactModuleInfoProvider getReactModuleInfoProvider() { - return () -> { - final Map moduleInfos = new HashMap<>(); - boolean isTurboModule = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED; - moduleInfos.put( - KbModule.NAME, - new ReactModuleInfo( - KbModule.NAME, - KbModule.NAME, - false, // canOverrideExistingModule - false, // needsEagerInit - true, // hasConstants - false, // isCxxModule - isTurboModule // isTurboModule - )); - return moduleInfos; - }; - } -} diff --git a/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/KbPackage.kt b/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/KbPackage.kt new file mode 100644 index 000000000000..b2bedca9a217 --- /dev/null +++ b/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/KbPackage.kt @@ -0,0 +1,40 @@ +package com.reactnativekb + +import androidx.annotation.Nullable + +import com.facebook.react.bridge.NativeModule +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.module.model.ReactModuleInfo +import com.facebook.react.module.model.ReactModuleInfoProvider +import com.facebook.react.TurboReactPackage + +import java.util.HashMap +import java.util.Map + +class KbPackage : TurboReactPackage() { + @Nullable + override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? { + return if (name == KbModule.NAME) { + KbModule(reactContext) + } else { + null + } + } + + override fun getReactModuleInfoProvider(): ReactModuleInfoProvider { + return ReactModuleInfoProvider { + val moduleInfos: MutableMap = HashMap() + val isTurboModule = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED + moduleInfos[KbModule.NAME] = ReactModuleInfo( + KbModule.NAME, + KbModule.NAME, + false, // canOverrideExistingModule + false, // needsEagerInit + true, // hasConstants + false, // isCxxModule + isTurboModule // isTurboModule + ) + moduleInfos + } + } +} diff --git a/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/NativeLogger.java b/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/NativeLogger.java deleted file mode 100644 index 524aa9df7403..000000000000 --- a/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/NativeLogger.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.reactnativekb; - -import android.util.Log; -import keybase.Keybase; - -import com.facebook.react.bridge.Arguments; -import com.facebook.react.bridge.Promise; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.bridge.ReadableArray; -import com.facebook.react.bridge.WritableArray; - -public class NativeLogger extends ReactContextBaseJavaModule { - private static final String NAME = "NativeLogger"; - private static final String RN_NAME = "ReactNativeJS"; - - public static void rawLog(String tag, String jsonLog) { - Log.i(tag + NAME, jsonLog); - } - - private static String formatLine(String tagPrefix, String toLog) { - // Copies the Style JS outputs in native/logger.native.tsx - return tagPrefix + NAME + ": [" + System.currentTimeMillis() + ",\"" + toLog + "\"]"; - } - - public static void error(String log) { - Keybase.logToService(formatLine("e", log)); - } - - public static void error(String log, Throwable tr) { - Keybase.logToService(formatLine("e", log + Log.getStackTraceString(tr))); - } - - public static void info(String log) { - Keybase.logToService(formatLine("i", log)); - } - - public static void info(String log, Throwable tr) { - Keybase.logToService(formatLine("i", log + Log.getStackTraceString(tr))); - } - - public static void warn(String log) { - Keybase.logToService(formatLine("w", log)); - } - - public static void warn(String log, Throwable tr) { - Keybase.logToService(formatLine("w", log + Log.getStackTraceString(tr))); - } - - public NativeLogger(final ReactApplicationContext reactContext) { - super(reactContext); - } - - @Override - public String getName() { - return NAME; - } -} diff --git a/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/NativeLogger.kt b/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/NativeLogger.kt new file mode 100644 index 000000000000..17852364de2d --- /dev/null +++ b/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/NativeLogger.kt @@ -0,0 +1,56 @@ +package com.reactnativekb + +import android.util.Log +import keybase.Keybase + +import com.facebook.react.bridge.Arguments +import com.facebook.react.bridge.Promise +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReactContextBaseJavaModule +import com.facebook.react.bridge.ReactMethod +import com.facebook.react.bridge.ReadableArray +import com.facebook.react.bridge.WritableArray + +class NativeLogger(reactContext: ReactApplicationContext?) : ReactContextBaseJavaModule(reactContext) { + @Override + override fun getName(): String { + return NAME + } + + companion object { + private val NAME: String = "NativeLogger" + private val RN_NAME: String = "ReactNativeJS" + fun rawLog(tag: String, jsonLog: String) { + Log.i(tag + NAME, jsonLog) + } + + private fun formatLine(tagPrefix: String, toLog: String): String { + // Copies the Style JS outputs in native/logger.native.tsx + return tagPrefix + NAME + ": [" + System.currentTimeMillis() + ",\"" + toLog + "\"]" + } + + fun error(log: String) { + Keybase.logToService(formatLine("e", log)) + } + + fun error(log: String, tr: Throwable?) { + Keybase.logToService(formatLine("e", log + Log.getStackTraceString(tr))) + } + + fun info(log: String) { + Keybase.logToService(formatLine("i", log)) + } + + fun info(log: String, tr: Throwable?) { + Keybase.logToService(formatLine("i", log + Log.getStackTraceString(tr))) + } + + fun warn(log: String) { + Keybase.logToService(formatLine("w", log)) + } + + fun warn(log: String, tr: Throwable) { + Keybase.logToService(formatLine("w", log + Log.getStackTraceString(tr))) + } + } +} diff --git a/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/PathResolver.java b/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/PathResolver.java deleted file mode 100644 index 09921a7658d0..000000000000 --- a/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/PathResolver.java +++ /dev/null @@ -1,224 +0,0 @@ -package com.reactnativekb; - -// part of https://raw.githubusercontent.com/RonRadtke/react-native-blob-util/master/android/src/main/java/com/ReactNativeBlobUtil/Utils/PathResolver.java - -import android.annotation.TargetApi; -import android.content.Context; -import android.database.Cursor; -import android.net.Uri; -import android.os.Build; -import android.provider.DocumentsContract; -import android.provider.MediaStore; -import android.content.ContentUris; -import android.content.ContentResolver; - -import java.io.File; -import java.io.InputStream; -import java.io.FileOutputStream; - -public class PathResolver { - @TargetApi(19) - public static String getRealPathFromURI(final Context context, final Uri uri) { - - final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; - - // DocumentProvider - if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) { - // ExternalStorageProvider - if (isExternalStorageDocument(uri)) { - final String docId = DocumentsContract.getDocumentId(uri); - final String[] split = docId.split(":"); - final String type = split[0]; - - if ("primary".equalsIgnoreCase(type)) { - File dir = context.getExternalFilesDir(null); - if (dir != null) return dir + "/" + split[1]; - return ""; - } - - // TODO handle non-primary volumes - } - // DownloadsProvider - else if (isDownloadsDocument(uri)) { - try { - final String id = DocumentsContract.getDocumentId(uri); - //Starting with Android O, this "id" is not necessarily a long (row number), - //but might also be a "raw:/some/file/path" URL - if (id != null && id.startsWith("raw:/")) { - Uri rawuri = Uri.parse(id); - String path = rawuri.getPath(); - return path; - } - - Long docId = null; - //Since Android 10, uri can start with msf scheme like "msf:12345" - if (id != null && id.startsWith("msf:")) { - final String[] split = id.split(":"); - docId = Long.valueOf(split[1]); - } else { - docId = Long.valueOf(id); - } - - final Uri contentUri = ContentUris.withAppendedId( - Uri.parse("content://downloads/public_downloads"), docId); - return getDataColumn(context, contentUri, null, null); - } catch (Exception ex) { - //something went wrong, but android should still be able to handle the original uri by returning null here (see readFile(...)) - return null; - } - - } - // MediaProvider - else if (isMediaDocument(uri)) { - final String docId = DocumentsContract.getDocumentId(uri); - final String[] split = docId.split(":"); - final String type = split[0]; - - Uri contentUri = null; - if ("image".equals(type)) { - contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; - } else if ("video".equals(type)) { - contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; - } else if ("audio".equals(type)) { - contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; - } - - final String selection = "_id=?"; - final String[] selectionArgs = new String[]{ - split[1] - }; - - return getDataColumn(context, contentUri, selection, selectionArgs); - } else if ("content".equalsIgnoreCase(uri.getScheme())) { - - // Return the remote address - if (isGooglePhotosUri(uri)) - return uri.getLastPathSegment(); - - return getDataColumn(context, uri, null, null); - } - // Other Providers - else { - try { - InputStream attachment = context.getContentResolver().openInputStream(uri); - if (attachment != null) { - String filename = getContentName(context.getContentResolver(), uri); - if (filename != null) { - File file = new File(context.getCacheDir(), filename); - FileOutputStream tmp = new FileOutputStream(file); - byte[] buffer = new byte[1024]; - while (attachment.read(buffer) > 0) { - tmp.write(buffer); - } - tmp.close(); - attachment.close(); - return file.getAbsolutePath(); - } - } - } catch (Exception e) { - // ReactNativeBlobUtilUtils.emitWarningEvent(e.toString()); - return null; - } - } - } - // MediaStore (and general) - else if ("content".equalsIgnoreCase(uri.getScheme())) { - - // Return the remote address - if (isGooglePhotosUri(uri)) - return uri.getLastPathSegment(); - - return getDataColumn(context, uri, null, null); - } - // File - else if ("file".equalsIgnoreCase(uri.getScheme())) { - return uri.getPath(); - } - - return null; - } - - private static String getContentName(ContentResolver resolver, Uri uri) { - Cursor cursor = resolver.query(uri, null, null, null, null); - if (cursor == null) return null; - cursor.moveToFirst(); - int nameIndex = cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME); - if (nameIndex >= 0) { - String name = cursor.getString(nameIndex); - cursor.close(); - return name; - } - return null; - } - - /** - * Get the value of the data column for this Uri. This is useful for - * MediaStore Uris, and other file-based ContentProviders. - * - * @param context The context. - * @param uri The Uri to query. - * @param selection (Optional) Filter used in the query. - * @param selectionArgs (Optional) Selection arguments used in the query. - * @return The value of the _data column, which is typically a file path. - */ - public static String getDataColumn(Context context, Uri uri, String selection, - String[] selectionArgs) { - - Cursor cursor = null; - String result = null; - final String column = "_data"; - final String[] projection = { - column - }; - - try { - cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, - null); - if (cursor != null && cursor.moveToFirst()) { - final int index = cursor.getColumnIndexOrThrow(column); - result = cursor.getString(index); - } - } catch (Exception ex) { - ex.printStackTrace(); - return null; - } finally { - if (cursor != null) - cursor.close(); - } - return result; - } - - - /** - * @param uri The Uri to check. - * @return Whether the Uri authority is ExternalStorageProvider. - */ - public static boolean isExternalStorageDocument(Uri uri) { - return "com.android.externalstorage.documents".equals(uri.getAuthority()); - } - - /** - * @param uri The Uri to check. - * @return Whether the Uri authority is DownloadsProvider. - */ - public static boolean isDownloadsDocument(Uri uri) { - return "com.android.providers.downloads.documents".equals(uri.getAuthority()); - } - - /** - * @param uri The Uri to check. - * @return Whether the Uri authority is MediaProvider. - */ - public static boolean isMediaDocument(Uri uri) { - return "com.android.providers.media.documents".equals(uri.getAuthority()); - } - - /** - * @param uri The Uri to check. - * @return Whether the Uri authority is Google Photos. - */ - public static boolean isGooglePhotosUri(Uri uri) { - return "com.google.android.apps.photos.content".equals(uri.getAuthority()); - } - -} diff --git a/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/PathResolver.kt b/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/PathResolver.kt new file mode 100644 index 000000000000..1c907d246b15 --- /dev/null +++ b/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/PathResolver.kt @@ -0,0 +1,208 @@ +package com.reactnativekb +// part of https://raw.githubusercontent.com/RonRadtke/react-native-blob-util/master/android/src/main/java/com/ReactNativeBlobUtil/Utils/PathResolver.java +import android.annotation.TargetApi +import android.content.Context +import android.database.Cursor +import android.net.Uri +import android.os.Build +import android.provider.DocumentsContract +import android.provider.MediaStore +import android.content.ContentUris +import android.content.ContentResolver + +import java.io.File; +import java.io.InputStream; +import java.io.FileOutputStream; +object PathResolver { + @TargetApi(19) + fun getRealPathFromURI(context: Context?, uri: Uri?): String? { + if (context == null || uri == null) { + return null + } + val isKitKat: Boolean = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT + + // DocumentProvider + if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) { + // ExternalStorageProvider + if (isExternalStorageDocument(uri)) { + val docId: String = DocumentsContract.getDocumentId(uri) + val split: List = docId.split(":") + val type = split[0] + if ("primary".equals(type, ignoreCase = true) && context != null) { + val dir: File? = context.getExternalFilesDir(null) + return if (dir != null) dir.toString() + "/" + split[1] else "" + } + + // TODO handle non-primary volumes + } else if (isDownloadsDocument(uri)) { + return try { + val id: String = DocumentsContract.getDocumentId(uri) + //Starting with Android O, this "id" is not necessarily a long (row number), + //but might also be a "raw:/some/file/path" URL + if (id != null && id.startsWith("raw:/")) { + val rawuri: Uri = Uri.parse(id) + return rawuri.getPath() + } + var docId: Long? = null + //Since Android 10, uri can start with msf scheme like "msf:12345" + if (id != null && id.startsWith("msf:")) { + val split: List = id.split(":") + val v = split[1] + if (v != null) { + docId = v.toLong() + } + } else { + docId = id.toLong() + } + if (docId == null) { + return null + } + val contentUri: Uri = ContentUris.withAppendedId( + Uri.parse("content://downloads/public_downloads"), docId) + getDataColumn(context, contentUri, null, null) + } catch (ex: Exception) { + //something went wrong, but android should still be able to handle the original uri by returning null here (see readFile(...)) + null + } + } else if (isMediaDocument(uri)) { + val docId: String = DocumentsContract.getDocumentId(uri) + val split: List = docId.split(":") + val type = split[0] + var contentUri: Uri? = null + if ("image".equals(type)) { + contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI + } else if ("video".equals(type)) { + contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI + } else if ("audio".equals(type)) { + contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI + } + val selection = "_id=?" + val selectionArgs = arrayOf( + split[1] + ) + return getDataColumn(context, contentUri, selection, selectionArgs) + } else if ("content".equals(uri.getScheme(), ignoreCase = true)) { + // Return the remote address + return if (isGooglePhotosUri(uri)) uri.getLastPathSegment() else getDataColumn(context, uri, null, null) + } else { + try { + val cr = context.getContentResolver() + if (cr != null) { + val attachment: InputStream? = cr.openInputStream(uri) + if (attachment != null) { + val filename = getContentName(context.getContentResolver(), uri) + if (filename != null) { + val file = File(context.getCacheDir(), filename) + val tmp = FileOutputStream(file) + val buffer = ByteArray(1024) + while (attachment.read(buffer) > 0) { + tmp.write(buffer) + } + tmp.close() + attachment.close() + return file.getAbsolutePath() + } + } + } + } catch (e: Exception) { + // ReactNativeBlobUtilUtils.emitWarningEvent(e.toString()); + return null + } + } + } else if ("content".equals(uri.getScheme(), ignoreCase = true)) { + + // Return the remote address + return if (isGooglePhotosUri(uri)) uri.getLastPathSegment() else getDataColumn(context, uri, null, null) + } else if ("file".equals(uri.getScheme(), ignoreCase = true)) { + return uri.getPath() + } + return null + } + + private fun getContentName(resolver: ContentResolver?, uri: Uri?): String? { + if (resolver == null || uri == null) { + return null + } + val cursor: Cursor? = resolver.query(uri, null, null, null, null) + if (cursor == null) { + return null + } + cursor.moveToFirst() + val nameIndex: Int = cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME) + if (nameIndex >= 0) { + val name: String = cursor.getString(nameIndex) + cursor.close() + return name + } + return null + } + + /** + * Get the value of the data column for this Uri. This is useful for + * MediaStore Uris, and other file-based ContentProviders. + * + * @param context The context. + * @param uri The Uri to query. + * @param selection (Optional) Filter used in the query. + * @param selectionArgs (Optional) Selection arguments used in the query. + * @return The value of the _data column, which is typically a file path. + */ + fun getDataColumn(context: Context?, uri: Uri?, selection: String?, + selectionArgs: Array?): String? { + if (context == null || uri == null) { + return null + } + var cursor: Cursor? = null + var result: String? = null + val column = "_data" + val projection = arrayOf( + column + ) + try { + cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, + null) + if (cursor != null && cursor.moveToFirst()) { + val index: Int = cursor.getColumnIndexOrThrow(column) + result = cursor.getString(index) + } + } catch (ex: Exception) { + ex.printStackTrace() + return null + } finally { + if (cursor != null) cursor.close() + } + return result + } + + /** + * @param uri The Uri to check. + * @return Whether the Uri authority is ExternalStorageProvider. + */ + fun isExternalStorageDocument(uri: Uri): Boolean { + return "com.android.externalstorage.documents".equals(uri.getAuthority()) + } + + /** + * @param uri The Uri to check. + * @return Whether the Uri authority is DownloadsProvider. + */ + fun isDownloadsDocument(uri: Uri): Boolean { + return "com.android.providers.downloads.documents".equals(uri.getAuthority()) + } + + /** + * @param uri The Uri to check. + * @return Whether the Uri authority is MediaProvider. + */ + fun isMediaDocument(uri: Uri): Boolean { + return "com.android.providers.media.documents".equals(uri.getAuthority()) + } + + /** + * @param uri The Uri to check. + * @return Whether the Uri authority is Google Photos. + */ + fun isGooglePhotosUri(uri: Uri): Boolean { + return "com.google.android.apps.photos.content".equals(uri.getAuthority()) + } +} diff --git a/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/ReadFileAsString.java b/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/ReadFileAsString.java deleted file mode 100644 index de6e012ae1a7..000000000000 --- a/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/ReadFileAsString.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.reactnativekb; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStreamReader; - -public class ReadFileAsString { - public static String read(String path) { - String ret = ""; - - try { - FileInputStream inputStream = new FileInputStream(new File(path)); - - if (inputStream != null) { - InputStreamReader inputStreamReader = new InputStreamReader(inputStream); - BufferedReader bufferedReader = new BufferedReader(inputStreamReader); - String receiveString = ""; - StringBuilder stringBuilder = new StringBuilder(); - - while ((receiveString = bufferedReader.readLine()) != null) { - stringBuilder.append(receiveString); - } - - inputStream.close(); - ret = stringBuilder.toString(); - } - } catch (FileNotFoundException e) { - // ignore - } catch (IOException e) { - // ignore - } - - return ret; - } -} - diff --git a/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/ReadFileAsString.kt b/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/ReadFileAsString.kt new file mode 100644 index 000000000000..cecd14f8c4fd --- /dev/null +++ b/rnmodules/react-native-kb/android/src/main/java/com/reactnativekb/ReadFileAsString.kt @@ -0,0 +1,38 @@ +package com.reactnativekb + +import java.io.BufferedReader +import java.io.File +import java.io.FileInputStream +import java.io.FileNotFoundException +import java.io.IOException +import java.io.InputStreamReader + +object ReadFileAsString { + fun read(path: String): String { + var ret = "" + + try { + val inputStream = FileInputStream(File(path)) + + inputStream.use { + val inputStreamReader = InputStreamReader(it) + val bufferedReader = BufferedReader(inputStreamReader) + val stringBuilder = StringBuilder() + + var receiveString: String? + + while (bufferedReader.readLine().also { receiveString = it } != null) { + stringBuilder.append(receiveString) + } + + ret = stringBuilder.toString() + } + } catch (e: FileNotFoundException) { + // ignore + } catch (e: IOException) { + // ignore + } + + return ret + } +} diff --git a/rnmodules/react-native-kb/android/src/newarch/KbSpec.java b/rnmodules/react-native-kb/android/src/newarch/KbSpec.java deleted file mode 100644 index 528317341944..000000000000 --- a/rnmodules/react-native-kb/android/src/newarch/KbSpec.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.reactnativekb; - -import com.facebook.react.bridge.ReactApplicationContext; - -abstract class KbSpec extends NativeKbSpec { - KbSpec(ReactApplicationContext context) { - super(context); - } -} - diff --git a/rnmodules/react-native-kb/android/src/newarch/KbSpec.kt b/rnmodules/react-native-kb/android/src/newarch/KbSpec.kt new file mode 100644 index 000000000000..29f32004bcf1 --- /dev/null +++ b/rnmodules/react-native-kb/android/src/newarch/KbSpec.kt @@ -0,0 +1,5 @@ +package com.reactnativekb + +import com.facebook.react.bridge.ReactApplicationContext + +internal abstract class KbSpec(context: ReactApplicationContext?) : NativeKbSpec(context) diff --git a/rnmodules/react-native-kb/android/src/oldarch/KbSpec.java b/rnmodules/react-native-kb/android/src/oldarch/KbSpec.java deleted file mode 100644 index 6f5a6bb8cb67..000000000000 --- a/rnmodules/react-native-kb/android/src/oldarch/KbSpec.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.reactnativekb; - -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.Promise; -import com.facebook.react.bridge.ReadableMap; -import java.util.Map; - -abstract class KbSpec extends ReactContextBaseJavaModule { - KbSpec(ReactApplicationContext context) { - super(context); - } - protected abstract Map getTypedExportedConstants(); - - public Map getConstants() { - return this.getTypedExportedConstants(); - } - - public abstract void install(); - public abstract void getDefaultCountryCode(Promise promise); - public abstract void logSend(String status, String feedback, boolean sendLogs, boolean sendMaxBytes, String traceDir, String cpuProfileDir, Promise promise); - public abstract void androidOpenSettings(); - public abstract void androidSetSecureFlagSetting(boolean setSecure, Promise promise); - public abstract void androidGetSecureFlagSetting(Promise promise); - public abstract void androidShare(String uriPath, String mimeType, Promise promise); - public abstract void androidShareText(String text, String mimeType, Promise promise); - public abstract void androidCheckPushPermissions(Promise promise); - public abstract void androidRequestPushPermissions(Promise promise); - public abstract void androidGetRegistrationToken(Promise promise); - public abstract void androidUnlink(String path, Promise promise); - public abstract void androidAddCompleteDownload(ReadableMap config, Promise promise); - public abstract void androidAppColorSchemeChanged(String prefString); - public abstract void androidSetApplicationIconBadgeNumber(double badge); - public abstract void androidGetInitialBundleFromNotification(Promise promise); - public abstract void androidGetInitialShareFileUrls(Promise promise); - public abstract void androidGetInitialShareText(Promise promise); - public abstract void engineReset(); - public abstract void engineStart(); - public abstract void rpcOnGo(byte[] arr); -} diff --git a/rnmodules/react-native-kb/android/src/oldarch/KbSpec.kt b/rnmodules/react-native-kb/android/src/oldarch/KbSpec.kt new file mode 100644 index 000000000000..bb90f05acb7a --- /dev/null +++ b/rnmodules/react-native-kb/android/src/oldarch/KbSpec.kt @@ -0,0 +1,34 @@ +package com.reactnativekb + +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReactContextBaseJavaModule +import com.facebook.react.bridge.Promise +import com.facebook.react.bridge.ReadableMap +import com.facebook.react.bridge.WritableMap + +abstract class KbSpec(context: ReactApplicationContext?) : ReactContextBaseJavaModule(context) { + + abstract fun getTypedConstants(): WritableMap + abstract fun install(): Boolean + abstract fun getDefaultCountryCode(promise: Promise) + abstract fun logSend(status: String, feedback: String, sendLogs: Boolean, sendMaxBytes: Boolean, traceDir: String, cpuProfileDir: String, promise: Promise) + abstract fun androidOpenSettings() + abstract fun androidSetSecureFlagSetting(setSecure: Boolean, promise: Promise) + abstract fun androidGetSecureFlagSetting(promise: Promise) + abstract fun androidShare(uriPath: String, mimeType: String, promise: Promise) + abstract fun androidShareText(text: String, mimeType: String, promise: Promise) + abstract fun androidCheckPushPermissions(promise: Promise) + abstract fun androidRequestPushPermissions(promise: Promise) + abstract fun androidGetRegistrationToken(promise: Promise) + abstract fun androidUnlink(path: String, promise: Promise) + abstract fun androidAddCompleteDownload(config: ReadableMap, promise: Promise) + abstract fun androidAppColorSchemeChanged(prefString: String) + abstract fun androidSetApplicationIconBadgeNumber(badge: Double) + abstract fun engineReset() + abstract fun engineStart() + abstract fun shareListenersRegistered() + abstract fun addListener(eventType: String) + abstract fun removeListeners(count: Double) + abstract fun iosGetHasShownPushPrompt(promise: Promise) + +} diff --git a/rnmodules/react-native-kb/ios/KBJSScheduler.cpp b/rnmodules/react-native-kb/ios/KBJSScheduler.cpp new file mode 100644 index 000000000000..104cbfbc2a10 --- /dev/null +++ b/rnmodules/react-native-kb/ios/KBJSScheduler.cpp @@ -0,0 +1,34 @@ +// https://github.com/software-mansion/react-native-reanimated/blob/main/Common/cpp/Tools/ +#include "./KBJSScheduler.h" +using namespace facebook; +using namespace react; + +KBJSScheduler::KBJSScheduler( + jsi::Runtime &rnRuntime, + const std::shared_ptr &jsCallInvoker) + : scheduleOnJS([&](KBJob job) { + jsCallInvoker_->invokeAsync( + [job = std::move(job), &rt = rnRuntime_] { job(rt); }); + }), + rnRuntime_(rnRuntime), + jsCallInvoker_(jsCallInvoker) {} + +#if defined(RCT_NEW_ARCH_ENABLED) +// With `runtimeExecutor`. +KBJSScheduler::KBJSScheduler( + jsi::Runtime &rnRuntime, + RuntimeExecutor runtimeExecutor) + : scheduleOnJS([&](KBJob job) { + runtimeExecutor_( + [job = std::move(job)](jsi::Runtime &runtime) { job(runtime); }); + }), + rnRuntime_(rnRuntime), + runtimeExecutor_(runtimeExecutor) {} +#endif // REACT_NATIVE_MINOR_VERSION >= 74 && defined(RCT_NEW_ARCH_ENABLED + +const std::shared_ptr KBJSScheduler::getJSCallInvoker() const { + assert( + jsCallInvoker_ != nullptr && + "[Reanimated] Expected jsCallInvoker, got nullptr instead."); + return jsCallInvoker_; +} diff --git a/rnmodules/react-native-kb/ios/KBJSScheduler.h b/rnmodules/react-native-kb/ios/KBJSScheduler.h new file mode 100644 index 000000000000..56da10d3a237 --- /dev/null +++ b/rnmodules/react-native-kb/ios/KBJSScheduler.h @@ -0,0 +1,39 @@ +// https://github.com/software-mansion/react-native-reanimated/blob/main/Common/cpp/Tools/ +#pragma once + +#include +#include +#include + +#include +#include + +using namespace facebook; +using namespace react; + +using KBJob = std::function; + +class KBJSScheduler { + public: + // With `jsCallInvoker`. + explicit KBJSScheduler( + jsi::Runtime &rnRuntime, + const std::shared_ptr &jsCallInvoker); + +#if defined(RCT_NEW_ARCH_ENABLED) + // With `runtimeExecutor`. + explicit KBJSScheduler( + jsi::Runtime &rnRuntime, + RuntimeExecutor runtimeExecutor); +#endif // REACT_NATIVE_MINOR_VERSION >= 74 && defined(RCT_NEW_ARCH_ENABLED + + const std::function scheduleOnJS = nullptr; + const std::shared_ptr getJSCallInvoker() const; + + protected: + jsi::Runtime &rnRuntime_; +#if defined(RCT_NEW_ARCH_ENABLED) + RuntimeExecutor runtimeExecutor_ = nullptr; +#endif // REACT_NATIVE_MINOR_VERSION >= 74 && defined(RCT_NEW_ARCH_ENABLED + const std::shared_ptr jsCallInvoker_ = nullptr; +}; diff --git a/rnmodules/react-native-kb/ios/Kb.h b/rnmodules/react-native-kb/ios/Kb.h index 9b382bb6b941..4ff3eb48f245 100644 --- a/rnmodules/react-native-kb/ios/Kb.h +++ b/rnmodules/react-native-kb/ios/Kb.h @@ -6,8 +6,10 @@ #import #import #import +#import +#import -@interface Kb : RCTEventEmitter +@interface Kb : RCTEventEmitter #else #import #import diff --git a/rnmodules/react-native-kb/ios/Kb.mm b/rnmodules/react-native-kb/ios/Kb.mm index 50f2fb1c23f6..aad7402ff8f0 100644 --- a/rnmodules/react-native-kb/ios/Kb.mm +++ b/rnmodules/react-native-kb/ios/Kb.mm @@ -12,6 +12,7 @@ #import #import #import +#import "./KBJSScheduler.h" #ifdef RCT_NEW_ARCH_ENABLED #import "RNKbSpec.h" @@ -69,13 +70,19 @@ - (void)dealloc { static NSString *const metaEventName = @"kb-meta-engine-event"; static NSString *const metaEventEngineReset = @"kb-engine-reset"; -@interface RCTBridge () +@interface RCTBridge (JSIRuntime) +- (void *)runtime; +@end + +@interface RCTBridge (RCTTurboModule) +- (std::shared_ptr)jsCallInvoker; +- (void)_tryAndHandleError:(dispatch_block_t)block; +@end +@interface RCTBridge () - (JSGlobalContextRef)jsContextRef; - (void *)runtime; - (void)dispatchBlock:(dispatch_block_t)block queue:(dispatch_queue_t)queue; -- (std::shared_ptr)jsCallInvoker; - @end @interface Kb () @@ -84,13 +91,16 @@ @interface Kb () @implementation Kb +jsi::Runtime *_jsRuntime; +std::shared_ptr jsScheduler; + // sanity check the runtime isn't out of sync due to reload etc void *currentRuntime = nil; RCT_EXPORT_MODULE() + (BOOL)requiresMainQueueSetup { - return NO; + return YES; } - (instancetype)init { @@ -102,6 +112,7 @@ - (instancetype)init { - (void)invalidate { currentRuntime = nil; + _jsRuntime = nil; [super invalidate]; Teardown(); self.bridge = nil; @@ -124,14 +135,8 @@ - (void)invalidate { - (void)sendToJS:(NSData *)data { __weak __typeof__(self) weakSelf = self; - auto invoker = self.bridge.jsCallInvoker; - if (!invoker) { - NSLog(@"Failed to find invoker in sendToJS!!!"); - return; - } - - invoker->invokeAsync([data, weakSelf]() { + jsScheduler->scheduleOnJS([data, weakSelf](jsi::Runtime &jsiRuntime) { __typeof__(self) strongSelf = weakSelf; if (!strongSelf) { NSLog(@"Failed to find self in sendToJS invokeAsync!!!"); @@ -144,7 +149,6 @@ - (void)sendToJS:(NSData *)data { } int size = (int)[data length]; - auto &jsiRuntime = *jsRuntimePtr; auto values = PrepRpcOnJS(jsiRuntime, (uint8_t *)[data bytes], size); RpcOnJS(jsiRuntime, values, [](const std::string &err) { @@ -157,59 +161,7 @@ - (void)sendToJS:(NSData *)data { } - (jsi::Runtime *)javaScriptRuntimePointer { - if ([self.bridge respondsToSelector:@selector(runtime)]) { - auto runtime = reinterpret_cast(self.bridge.runtime); - if (runtime == currentRuntime) { - return runtime; - } - return nil; - } else { - return nil; - } -} - -- (void)installJsiBindings { - // stash the current runtime to keep in sync - currentRuntime = self.bridge.runtime; - auto rpcOnGoWrap = [](Runtime &runtime, const Value &thisValue, - const Value *arguments, size_t count) -> Value { - return RpcOnGo(runtime, thisValue, arguments, count, - [](void *ptr, size_t size) { - NSData *result = [NSData dataWithBytesNoCopy:ptr - length:size - freeWhenDone:NO]; - NSError *error = nil; - KeybaseWriteArr(result, &error); - if (error) { - NSLog(@"Error writing data: %@", error); - } - }); - }; - - auto jsRuntimePtr = [self javaScriptRuntimePointer]; - if (!jsRuntimePtr) { - NSLog(@"Failed to install jsi!!!"); - return; - } - - KeybaseLogToService( - [NSString stringWithFormat:@"dNativeLogger: [%f,\"jsi install success\"]", - [[NSDate date] timeIntervalSince1970] * 1000]); - - auto &jsiRuntime = *jsRuntimePtr; - // register the global JS uses to call go - jsiRuntime.global().setProperty( - jsiRuntime, "rpcOnGo", - Function::createFromHostFunction( - jsiRuntime, PropNameID::forAscii(jsiRuntime, "rpcOnGo"), 1, - std::move(rpcOnGoWrap))); - - // register a global so we get notified when the runtime is killed so we can - // cleanup - jsiRuntime.global().setProperty( - jsiRuntime, "kbTeardown", - jsi::Object::createFromHostObject(jsiRuntime, - std::make_shared())); + return _jsRuntime; } // from react-native-localize @@ -304,6 +256,9 @@ - (NSDictionary *)constantsToExport { }; } +RCT_EXPORT_METHOD(shareListenersRegistered) { +} + RCT_EXPORT_METHOD(engineReset) { NSError *error = nil; KeybaseReset(&error); @@ -350,8 +305,70 @@ - (NSDictionary *)constantsToExport { }); } -RCT_EXPORT_METHOD(install) { - [self installJsiBindings]; +BOOL isBridgeless = true; // SYNC with AppDelegate.mm + +#if defined(RCT_NEW_ARCH_ENABLED) +@synthesize runtimeExecutor = _runtimeExecutor; +#endif + +RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install) { + if (isBridgeless) { +#if defined(RCT_NEW_ARCH_ENABLED) + RCTCxxBridge *cxxBridge = (RCTCxxBridge *)self.bridge; + _jsRuntime = (jsi::Runtime *)cxxBridge.runtime; + auto &rnRuntime = *(jsi::Runtime *)cxxBridge.runtime; + auto executorFunction = ([executor = _runtimeExecutor](std::function &&callback) { + // Convert to Objective-C block so it can be captured properly. + __block auto callbackBlock = callback; + + [executor execute:^(jsi::Runtime &runtime) { + callbackBlock(runtime); + }]; + }); + jsScheduler = std::make_shared(rnRuntime, executorFunction); +#else // (RCT_NEW_ARCH_ENABLED) + [NSException raise:@"Missing bridge" format:@"Failed to obtain the bridge."]; +#endif + } else { + _jsRuntime = [self.bridge respondsToSelector:@selector(runtime)] + ? reinterpret_cast(self.bridge.runtime) + : nullptr; + jsScheduler = std::make_shared(*_jsRuntime, self.bridge.jsCallInvoker); + } + + // stash the current runtime to keep in sync + auto rpcOnGoWrap = [](Runtime &runtime, const Value &thisValue, + const Value *arguments, size_t count) -> Value { + return RpcOnGo(runtime, thisValue, arguments, count, + [](void *ptr, size_t size) { + NSData *result = [NSData dataWithBytesNoCopy:ptr + length:size + freeWhenDone:NO]; + NSError *error = nil; + KeybaseWriteArr(result, &error); + if (error) { + NSLog(@"Error writing data: %@", error); + } + }); + }; + + KeybaseLogToService( + [NSString stringWithFormat:@"dNativeLogger: [%f,\"jsi install success\"]", + [[NSDate date] timeIntervalSince1970] * 1000]); + + _jsRuntime->global().setProperty( + *_jsRuntime, "rpcOnGo", + Function::createFromHostFunction( + *_jsRuntime, PropNameID::forAscii(*_jsRuntime, "rpcOnGo"), 1, + std::move(rpcOnGoWrap))); + + // register a global so we get notified when the runtime is killed so we can + // cleanup + _jsRuntime->global().setProperty( + *_jsRuntime, "kbTeardown", + jsi::Object::createFromHostObject(*_jsRuntime, + std::make_shared())); + return @YES; } RCT_EXPORT_METHOD(getDefaultCountryCode @@ -390,32 +407,25 @@ - (NSDictionary *)constantsToExport { }]; } -- (void)androidAddCompleteDownload:(/*JS::NativeKb::SpecAndroidAddCompleteDownloadO &*/ id)o {} -- (void)androidAppColorSchemeChanged:(NSString *)mode {} - (NSNumber *)androidCheckPushPermissions {return @-1;} -- (NSString *)androidGetInitialBundleFromNotification {return @"";} -- (NSString *)androidGetInitialShareFileUrl {return @"";} -- (NSString *)androidGetInitialShareText {return @"";} -- (NSString *)androidGetRegistrationToken {return @"";} - (NSNumber *)androidGetSecureFlagSetting {return @-1;} -- (void)androidOpenSettings {} - (NSNumber *)androidRequestPushPermissions {return @-1;} -- (void)androidSetApplicationIconBadgeNumber:(double)n {} +- (NSNumber *)androidSetSecureFlagSetting:(BOOL)s {return @-1;} +- (NSNumber *)androidShare:(NSString *)text mimeType:(NSString *)mimeType {return @-1;} +- (NSNumber *)androidShareText:(NSString *)text mimeType:(NSString *)mimeType {return @-1;} +- (NSString *)androidGetRegistrationToken {return @"";} - (void)androidAddCompleteDownload:(/*JS::NativeKb::SpecAndroidAddCompleteDownloadO &*/id)o resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {} +- (void)androidAppColorSchemeChanged:(NSString *)mode {} - (void)androidCheckPushPermissions:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {} -- (void)androidGetInitialBundleFromNotification:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {} -- (void)androidGetInitialShareFileUrls:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {} -- (void)androidGetInitialShareText:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {} - (void)androidGetRegistrationToken:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {} - (void)androidGetSecureFlagSetting:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {} +- (void)androidOpenSettings {} - (void)androidRequestPushPermissions:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject{} +- (void)androidSetApplicationIconBadgeNumber:(double)n {} - (void)androidSetSecureFlagSetting:(BOOL)s resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {} - (void)androidShare:(NSString *)text mimeType:(NSString *)mimeType resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {} - (void)androidShareText:(NSString *)text mimeType:(NSString *)mimeType resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {} - (void)androidUnlink:(NSString *)path resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {} -- (NSNumber *)androidSetSecureFlagSetting:(BOOL)s {return @-1;} -- (NSNumber *)androidShare:(NSString *)text mimeType:(NSString *)mimeType {return @-1;} -- (NSNumber *)androidShareText:(NSString *)text mimeType:(NSString *)mimeType {return @-1;} - (void)androidUnlink:(NSString *)path {} @end diff --git a/rnmodules/react-native-kb/lib/module/NativeKb.js.map b/rnmodules/react-native-kb/lib/module/NativeKb.js.map index 642e96c19f4c..824cb8a13139 100644 --- a/rnmodules/react-native-kb/lib/module/NativeKb.js.map +++ b/rnmodules/react-native-kb/lib/module/NativeKb.js.map @@ -1 +1 @@ -{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeKb.ts"],"mappings":"AACA,SAAQA,mBAAmB,QAAO,cAAc;AAsDhD,eAAeA,mBAAmB,CAACC,YAAY,CAAO,IAAI,CAAC"} \ No newline at end of file +{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeKb.ts"],"mappings":"AAAA,SAAQA,mBAAmB,QAAyB,cAAc;AAoDlE,eAAeA,mBAAmB,CAACC,YAAY,CAAO,IAAI,CAAC"} \ No newline at end of file diff --git a/rnmodules/react-native-kb/lib/module/index.js b/rnmodules/react-native-kb/lib/module/index.js index d607356ba017..c92fcfd3f0fc 100644 --- a/rnmodules/react-native-kb/lib/module/index.js +++ b/rnmodules/react-native-kb/lib/module/index.js @@ -96,30 +96,15 @@ export const androidSetApplicationIconBadgeNumber = n => { Kb.androidSetApplicationIconBadgeNumber(n); } }; -export const androidGetInitialBundleFromNotification = () => { - if (Platform.OS === 'android') { - return Kb.androidGetInitialBundleFromNotification(); - } - return Promise.reject(); -}; -export const androidGetInitialShareFileUrls = () => { - if (Platform.OS === 'android') { - return Kb.androidGetInitialShareFileUrls(); - } - return Promise.reject(); -}; -export const androidGetInitialShareText = () => { - if (Platform.OS === 'android') { - return Kb.androidGetInitialShareText(); - } - return Promise.reject(); -}; export const engineReset = () => { return Kb.engineReset(); }; export const engineStart = () => { return Kb.engineStart(); }; +export const shareListenersRegistered = () => { + return Kb.shareListenersRegistered(); +}; export const getNativeEmitter = () => { return new NativeEventEmitter(Kb); }; diff --git a/rnmodules/react-native-kb/lib/module/index.js.map b/rnmodules/react-native-kb/lib/module/index.js.map index 699f60c3d1bc..2eae0c6571a7 100644 --- a/rnmodules/react-native-kb/lib/module/index.js.map +++ b/rnmodules/react-native-kb/lib/module/index.js.map @@ -1 +1 @@ -{"version":3,"names":["NativeModules","Platform","NativeEventEmitter","LINKING_ERROR","select","ios","default","isTurboModuleEnabled","global","__turboModuleProxy","KbModule","require","Kb","Proxy","get","Error","getDefaultCountryCode","logSend","status","feedback","sendLogs","sendMaxBytes","traceDir","cpuProfileDir","install","iosGetHasShownPushPrompt","OS","Promise","resolve","androidOpenSettings","androidSetSecureFlagSetting","s","androidGetSecureFlagSetting","androidShareText","text","mimeType","androidShare","androidCheckPushPermissions","androidRequestPushPermissions","androidGetRegistrationToken","androidUnlink","path","reject","androidAddCompleteDownload","o","androidAppColorSchemeChanged","mode","androidSetApplicationIconBadgeNumber","n","androidGetInitialBundleFromNotification","androidGetInitialShareFileUrls","androidGetInitialShareText","engineReset","engineStart","getNativeEmitter","androidIsDeviceSecure","getConstants","androidIsTestDevice","appVersionCode","appVersionName","darkModeSupported","fsCacheDir","fsDownloadDir","guiConfig","serverConfig","uses24HourClock","version"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"AAAA,SAAQA,aAAa,EAAEC,QAAQ,EAAEC,kBAAkB,QAAO,cAAc;AAExE,MAAMC,aAAa,GAChB,0EAAyE,GAC1EF,QAAQ,CAACG,MAAM,CAAC;EAACC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAE,CAAC,CAAC,GACrE,sDAAsD,GACtD,+BAA+B;;AAEjC;AACA,MAAMC,oBAAoB,GAAGC,MAAM,CAACC,kBAAkB,IAAI,IAAI;AAE9D,MAAMC,QAAQ,GAAGH,oBAAoB,GAAGI,OAAO,CAAC,YAAY,CAAC,CAACL,OAAO,GAAGN,aAAa,CAACY,EAAE;AAExF,MAAMA,EAAE,GAAGF,QAAQ,GACfA,QAAQ,GACR,IAAIG,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACZ,aAAa,CAAC;EAChC;AACF,CACF,CAAC;AAEL,OAAO,MAAMa,qBAAqB,GAAGA,CAAA,KAAuB;EAC1D,OAAOJ,EAAE,CAACI,qBAAqB,CAAC,CAAC;AACnC,CAAC;AAED,OAAO,MAAMC,OAAO,GAAGA,CACrBC,MAAc,EACdC,QAAgB,EAChBC,QAAiB,EACjBC,YAAqB,EACrBC,QAAgB,EAChBC,aAAqB,KACD;EACpB,OAAOX,EAAE,CAACK,OAAO,CAACC,MAAM,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,YAAY,EAAEC,QAAQ,EAAEC,aAAa,CAAC;AACtF,CAAC;AAED,OAAO,MAAMC,OAAO,GAAGA,CAAA,KAAM;EAC3BZ,EAAE,CAACY,OAAO,CAAC,CAAC;AACd,CAAC;AACD,OAAO,MAAMC,wBAAwB,GAAGA,CAAA,KAAwB;EAC9D,IAAIxB,QAAQ,CAACyB,EAAE,KAAK,KAAK,EAAE;IACzB,OAAOd,EAAE,CAACa,wBAAwB,CAAC,CAAC;EACtC;EACA,OAAOE,OAAO,CAACC,OAAO,CAAC,KAAK,CAAC;AAC/B,CAAC;AAED,OAAO,MAAMC,mBAAmB,GAAGA,CAAA,KAAM;EACvC,IAAI5B,QAAQ,CAACyB,EAAE,KAAK,SAAS,EAAE;IAC7Bd,EAAE,CAACiB,mBAAmB,CAAC,CAAC;EAC1B;AACF,CAAC;AAED,OAAO,MAAMC,2BAA2B,GAAIC,CAAU,IAAuB;EAC3E,IAAI9B,QAAQ,CAACyB,EAAE,KAAK,SAAS,EAAE;IAC7B,OAAOd,EAAE,CAACkB,2BAA2B,CAACC,CAAC,CAAC;EAC1C;EACA,OAAOJ,OAAO,CAACC,OAAO,CAAC,KAAK,CAAC;AAC/B,CAAC;AAED,OAAO,MAAMI,2BAA2B,GAAGA,CAAA,KAAwB;EACjE,IAAI/B,QAAQ,CAACyB,EAAE,KAAK,SAAS,EAAE;IAC7B,OAAOd,EAAE,CAACoB,2BAA2B,CAAC,CAAC;EACzC;EACA,OAAOL,OAAO,CAACC,OAAO,CAAC,KAAK,CAAC;AAC/B,CAAC;AAED,OAAO,MAAMK,gBAAgB,GAAGA,CAACC,IAAY,EAAEC,QAAgB,KAAuB;EACpF,IAAIlC,QAAQ,CAACyB,EAAE,KAAK,SAAS,EAAE;IAC7B,OAAOd,EAAE,CAACqB,gBAAgB,CAACC,IAAI,EAAEC,QAAQ,CAAC;EAC5C;EACA,OAAOR,OAAO,CAACC,OAAO,CAAC,KAAK,CAAC;AAC/B,CAAC;AAED,OAAO,MAAMQ,YAAY,GAAGA,CAACF,IAAY,EAAEC,QAAgB,KAAuB;EAChF,IAAIlC,QAAQ,CAACyB,EAAE,KAAK,SAAS,EAAE;IAC7B,OAAOd,EAAE,CAACwB,YAAY,CAACF,IAAI,EAAEC,QAAQ,CAAC;EACxC;EACA,OAAOR,OAAO,CAACC,OAAO,CAAC,KAAK,CAAC;AAC/B,CAAC;AAED,OAAO,MAAMS,2BAA2B,GAAGA,CAAA,KAAwB;EACjE,IAAIpC,QAAQ,CAACyB,EAAE,KAAK,SAAS,EAAE;IAC7B,OAAOd,EAAE,CAACyB,2BAA2B,CAAC,CAAC;EACzC;EACA,OAAOV,OAAO,CAACC,OAAO,CAAC,KAAK,CAAC;AAC/B,CAAC;AACD,OAAO,MAAMU,6BAA6B,GAAGA,CAAA,KAAwB;EACnE,IAAIrC,QAAQ,CAACyB,EAAE,KAAK,SAAS,EAAE;IAC7B,OAAOd,EAAE,CAAC0B,6BAA6B,CAAC,CAAC;EAC3C;EACA,OAAOX,OAAO,CAACC,OAAO,CAAC,KAAK,CAAC;AAC/B,CAAC;AACD,OAAO,MAAMW,2BAA2B,GAAGA,CAAA,KAAuB;EAChE,IAAItC,QAAQ,CAACyB,EAAE,KAAK,SAAS,EAAE;IAC7B,OAAOd,EAAE,CAAC2B,2BAA2B,CAAC,CAAC;EACzC;EACA,OAAOZ,OAAO,CAACC,OAAO,CAAC,EAAE,CAAC;AAC5B,CAAC;AAED,OAAO,MAAMY,aAAa,GAAIC,IAAY,IAAoB;EAC5D,IAAIxC,QAAQ,CAACyB,EAAE,KAAK,SAAS,EAAE;IAC7B,OAAOd,EAAE,CAAC4B,aAAa,CAACC,IAAI,CAAC;EAC/B;EACA,OAAOd,OAAO,CAACe,MAAM,CAAC,CAAC;AACzB,CAAC;AAED,OAAO,MAAMC,0BAA0B,GAAIC,CAM1C,IAAoB;EACnB,IAAI3C,QAAQ,CAACyB,EAAE,KAAK,SAAS,EAAE;IAC7B,OAAOd,EAAE,CAAC+B,0BAA0B,CAACC,CAAC,CAAC;EACzC;EACA,OAAOjB,OAAO,CAACe,MAAM,CAAC,CAAC;AACzB,CAAC;AAED,OAAO,MAAMG,4BAA4B,GAAIC,IAAkD,IAAW;EACxG,IAAI7C,QAAQ,CAACyB,EAAE,KAAK,SAAS,EAAE;IAC7Bd,EAAE,CAACiC,4BAA4B,CAACC,IAAI,CAAC;EACvC;AACF,CAAC;AAED,OAAO,MAAMC,oCAAoC,GAAIC,CAAS,IAAW;EACvE,IAAI/C,QAAQ,CAACyB,EAAE,KAAK,SAAS,EAAE;IAC7Bd,EAAE,CAACmC,oCAAoC,CAACC,CAAC,CAAC;EAC5C;AACF,CAAC;AAED,OAAO,MAAMC,uCAAuC,GAAGA,CAAA,KAAoB;EACzE,IAAIhD,QAAQ,CAACyB,EAAE,KAAK,SAAS,EAAE;IAC7B,OAAOd,EAAE,CAACqC,uCAAuC,CAAC,CAAC;EACrD;EACA,OAAOtB,OAAO,CAACe,MAAM,CAAC,CAAC;AACzB,CAAC;AACD,OAAO,MAAMQ,8BAA8B,GAAGA,CAAA,KAA8B;EAC1E,IAAIjD,QAAQ,CAACyB,EAAE,KAAK,SAAS,EAAE;IAC7B,OAAOd,EAAE,CAACsC,8BAA8B,CAAC,CAAC;EAC5C;EACA,OAAOvB,OAAO,CAACe,MAAM,CAAC,CAAC;AACzB,CAAC;AACD,OAAO,MAAMS,0BAA0B,GAAGA,CAAA,KAAuB;EAC/D,IAAIlD,QAAQ,CAACyB,EAAE,KAAK,SAAS,EAAE;IAC7B,OAAOd,EAAE,CAACuC,0BAA0B,CAAC,CAAC;EACxC;EACA,OAAOxB,OAAO,CAACe,MAAM,CAAC,CAAC;AACzB,CAAC;AACD,OAAO,MAAMU,WAAW,GAAGA,CAAA,KAAY;EACrC,OAAOxC,EAAE,CAACwC,WAAW,CAAC,CAAC;AACzB,CAAC;AACD,OAAO,MAAMC,WAAW,GAAGA,CAAA,KAAY;EACrC,OAAOzC,EAAE,CAACyC,WAAW,CAAC,CAAC;AACzB,CAAC;AACD,OAAO,MAAMC,gBAAgB,GAAGA,CAAA,KAAM;EACpC,OAAO,IAAIpD,kBAAkB,CAACU,EAAS,CAAC;AAC1C,CAAC;AAED,OAAO,MAAM2C,qBAA8B,GAAG3C,EAAE,CAAC4C,YAAY,CAAC,CAAC,CAACD,qBAAqB;AACrF,OAAO,MAAME,mBAA4B,GAAG7C,EAAE,CAAC4C,YAAY,CAAC,CAAC,CAACC,mBAAmB;AACjF,OAAO,MAAMC,cAAsB,GAAG9C,EAAE,CAAC4C,YAAY,CAAC,CAAC,CAACE,cAAc;AACtE,OAAO,MAAMC,cAAsB,GAAG/C,EAAE,CAAC4C,YAAY,CAAC,CAAC,CAACE,cAAc;AACtE,OAAO,MAAME,iBAA0B,GAAGhD,EAAE,CAAC4C,YAAY,CAAC,CAAC,CAACI,iBAAiB;AAC7E,OAAO,MAAMC,UAAkB,GAAGjD,EAAE,CAAC4C,YAAY,CAAC,CAAC,CAACK,UAAU;AAC9D,OAAO,MAAMC,aAAqB,GAAGlD,EAAE,CAAC4C,YAAY,CAAC,CAAC,CAACM,aAAa;AACpE,OAAO,MAAMC,SAAiB,GAAGnD,EAAE,CAAC4C,YAAY,CAAC,CAAC,CAACO,SAAS;AAC5D,OAAO,MAAMC,YAAoB,GAAGpD,EAAE,CAAC4C,YAAY,CAAC,CAAC,CAACQ,YAAY;AAClE,OAAO,MAAMC,eAAwB,GAAGrD,EAAE,CAAC4C,YAAY,CAAC,CAAC,CAACS,eAAe;AACzE,OAAO,MAAMC,OAAe,GAAGtD,EAAE,CAAC4C,YAAY,CAAC,CAAC,CAACU,OAAO"} \ No newline at end of file +{"version":3,"names":["NativeModules","Platform","NativeEventEmitter","LINKING_ERROR","select","ios","default","isTurboModuleEnabled","global","__turboModuleProxy","KbModule","require","Kb","Proxy","get","Error","getDefaultCountryCode","logSend","status","feedback","sendLogs","sendMaxBytes","traceDir","cpuProfileDir","install","iosGetHasShownPushPrompt","OS","Promise","resolve","androidOpenSettings","androidSetSecureFlagSetting","s","androidGetSecureFlagSetting","androidShareText","text","mimeType","androidShare","androidCheckPushPermissions","androidRequestPushPermissions","androidGetRegistrationToken","androidUnlink","path","reject","androidAddCompleteDownload","o","androidAppColorSchemeChanged","mode","androidSetApplicationIconBadgeNumber","n","engineReset","engineStart","shareListenersRegistered","getNativeEmitter","androidIsDeviceSecure","getConstants","androidIsTestDevice","appVersionCode","appVersionName","darkModeSupported","fsCacheDir","fsDownloadDir","guiConfig","serverConfig","uses24HourClock","version"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"AAAA,SAAQA,aAAa,EAAEC,QAAQ,EAAEC,kBAAkB,QAAO,cAAc;AAExE,MAAMC,aAAa,GAChB,0EAAyE,GAC1EF,QAAQ,CAACG,MAAM,CAAC;EAACC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAE,CAAC,CAAC,GACrE,sDAAsD,GACtD,+BAA+B;;AAEjC;AACA,MAAMC,oBAAoB,GAAGC,MAAM,CAACC,kBAAkB,IAAI,IAAI;AAE9D,MAAMC,QAAQ,GAAGH,oBAAoB,GAAGI,OAAO,CAAC,YAAY,CAAC,CAACL,OAAO,GAAGN,aAAa,CAACY,EAAE;AAExF,MAAMA,EAAE,GAAGF,QAAQ,GACfA,QAAQ,GACR,IAAIG,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACZ,aAAa,CAAC;EAChC;AACF,CACF,CAAC;AAEL,OAAO,MAAMa,qBAAqB,GAAGA,CAAA,KAAuB;EAC1D,OAAOJ,EAAE,CAACI,qBAAqB,CAAC,CAAC;AACnC,CAAC;AAED,OAAO,MAAMC,OAAO,GAAGA,CACrBC,MAAc,EACdC,QAAgB,EAChBC,QAAiB,EACjBC,YAAqB,EACrBC,QAAgB,EAChBC,aAAqB,KACD;EACpB,OAAOX,EAAE,CAACK,OAAO,CAACC,MAAM,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,YAAY,EAAEC,QAAQ,EAAEC,aAAa,CAAC;AACtF,CAAC;AAED,OAAO,MAAMC,OAAO,GAAGA,CAAA,KAAM;EAC3BZ,EAAE,CAACY,OAAO,CAAC,CAAC;AACd,CAAC;AACD,OAAO,MAAMC,wBAAwB,GAAGA,CAAA,KAAwB;EAC9D,IAAIxB,QAAQ,CAACyB,EAAE,KAAK,KAAK,EAAE;IACzB,OAAOd,EAAE,CAACa,wBAAwB,CAAC,CAAC;EACtC;EACA,OAAOE,OAAO,CAACC,OAAO,CAAC,KAAK,CAAC;AAC/B,CAAC;AAED,OAAO,MAAMC,mBAAmB,GAAGA,CAAA,KAAM;EACvC,IAAI5B,QAAQ,CAACyB,EAAE,KAAK,SAAS,EAAE;IAC7Bd,EAAE,CAACiB,mBAAmB,CAAC,CAAC;EAC1B;AACF,CAAC;AAED,OAAO,MAAMC,2BAA2B,GAAIC,CAAU,IAAuB;EAC3E,IAAI9B,QAAQ,CAACyB,EAAE,KAAK,SAAS,EAAE;IAC7B,OAAOd,EAAE,CAACkB,2BAA2B,CAACC,CAAC,CAAC;EAC1C;EACA,OAAOJ,OAAO,CAACC,OAAO,CAAC,KAAK,CAAC;AAC/B,CAAC;AAED,OAAO,MAAMI,2BAA2B,GAAGA,CAAA,KAAwB;EACjE,IAAI/B,QAAQ,CAACyB,EAAE,KAAK,SAAS,EAAE;IAC7B,OAAOd,EAAE,CAACoB,2BAA2B,CAAC,CAAC;EACzC;EACA,OAAOL,OAAO,CAACC,OAAO,CAAC,KAAK,CAAC;AAC/B,CAAC;AAED,OAAO,MAAMK,gBAAgB,GAAGA,CAACC,IAAY,EAAEC,QAAgB,KAAuB;EACpF,IAAIlC,QAAQ,CAACyB,EAAE,KAAK,SAAS,EAAE;IAC7B,OAAOd,EAAE,CAACqB,gBAAgB,CAACC,IAAI,EAAEC,QAAQ,CAAC;EAC5C;EACA,OAAOR,OAAO,CAACC,OAAO,CAAC,KAAK,CAAC;AAC/B,CAAC;AAED,OAAO,MAAMQ,YAAY,GAAGA,CAACF,IAAY,EAAEC,QAAgB,KAAuB;EAChF,IAAIlC,QAAQ,CAACyB,EAAE,KAAK,SAAS,EAAE;IAC7B,OAAOd,EAAE,CAACwB,YAAY,CAACF,IAAI,EAAEC,QAAQ,CAAC;EACxC;EACA,OAAOR,OAAO,CAACC,OAAO,CAAC,KAAK,CAAC;AAC/B,CAAC;AAED,OAAO,MAAMS,2BAA2B,GAAGA,CAAA,KAAwB;EACjE,IAAIpC,QAAQ,CAACyB,EAAE,KAAK,SAAS,EAAE;IAC7B,OAAOd,EAAE,CAACyB,2BAA2B,CAAC,CAAC;EACzC;EACA,OAAOV,OAAO,CAACC,OAAO,CAAC,KAAK,CAAC;AAC/B,CAAC;AACD,OAAO,MAAMU,6BAA6B,GAAGA,CAAA,KAAwB;EACnE,IAAIrC,QAAQ,CAACyB,EAAE,KAAK,SAAS,EAAE;IAC7B,OAAOd,EAAE,CAAC0B,6BAA6B,CAAC,CAAC;EAC3C;EACA,OAAOX,OAAO,CAACC,OAAO,CAAC,KAAK,CAAC;AAC/B,CAAC;AACD,OAAO,MAAMW,2BAA2B,GAAGA,CAAA,KAAuB;EAChE,IAAItC,QAAQ,CAACyB,EAAE,KAAK,SAAS,EAAE;IAC7B,OAAOd,EAAE,CAAC2B,2BAA2B,CAAC,CAAC;EACzC;EACA,OAAOZ,OAAO,CAACC,OAAO,CAAC,EAAE,CAAC;AAC5B,CAAC;AAED,OAAO,MAAMY,aAAa,GAAIC,IAAY,IAAoB;EAC5D,IAAIxC,QAAQ,CAACyB,EAAE,KAAK,SAAS,EAAE;IAC7B,OAAOd,EAAE,CAAC4B,aAAa,CAACC,IAAI,CAAC;EAC/B;EACA,OAAOd,OAAO,CAACe,MAAM,CAAC,CAAC;AACzB,CAAC;AAED,OAAO,MAAMC,0BAA0B,GAAIC,CAM1C,IAAoB;EACnB,IAAI3C,QAAQ,CAACyB,EAAE,KAAK,SAAS,EAAE;IAC7B,OAAOd,EAAE,CAAC+B,0BAA0B,CAACC,CAAC,CAAC;EACzC;EACA,OAAOjB,OAAO,CAACe,MAAM,CAAC,CAAC;AACzB,CAAC;AAED,OAAO,MAAMG,4BAA4B,GAAIC,IAAkD,IAAW;EACxG,IAAI7C,QAAQ,CAACyB,EAAE,KAAK,SAAS,EAAE;IAC7Bd,EAAE,CAACiC,4BAA4B,CAACC,IAAI,CAAC;EACvC;AACF,CAAC;AAED,OAAO,MAAMC,oCAAoC,GAAIC,CAAS,IAAW;EACvE,IAAI/C,QAAQ,CAACyB,EAAE,KAAK,SAAS,EAAE;IAC7Bd,EAAE,CAACmC,oCAAoC,CAACC,CAAC,CAAC;EAC5C;AACF,CAAC;AAED,OAAO,MAAMC,WAAW,GAAGA,CAAA,KAAY;EACrC,OAAOrC,EAAE,CAACqC,WAAW,CAAC,CAAC;AACzB,CAAC;AACD,OAAO,MAAMC,WAAW,GAAGA,CAAA,KAAY;EACrC,OAAOtC,EAAE,CAACsC,WAAW,CAAC,CAAC;AACzB,CAAC;AACD,OAAO,MAAMC,wBAAwB,GAAGA,CAAA,KAAY;EAClD,OAAOvC,EAAE,CAACuC,wBAAwB,CAAC,CAAC;AACtC,CAAC;AACD,OAAO,MAAMC,gBAAgB,GAAGA,CAAA,KAAM;EACpC,OAAO,IAAIlD,kBAAkB,CAACU,EAAS,CAAC;AAC1C,CAAC;AAED,OAAO,MAAMyC,qBAA8B,GAAGzC,EAAE,CAAC0C,YAAY,CAAC,CAAC,CAACD,qBAAqB;AACrF,OAAO,MAAME,mBAA4B,GAAG3C,EAAE,CAAC0C,YAAY,CAAC,CAAC,CAACC,mBAAmB;AACjF,OAAO,MAAMC,cAAsB,GAAG5C,EAAE,CAAC0C,YAAY,CAAC,CAAC,CAACE,cAAc;AACtE,OAAO,MAAMC,cAAsB,GAAG7C,EAAE,CAAC0C,YAAY,CAAC,CAAC,CAACE,cAAc;AACtE,OAAO,MAAME,iBAA0B,GAAG9C,EAAE,CAAC0C,YAAY,CAAC,CAAC,CAACI,iBAAiB;AAC7E,OAAO,MAAMC,UAAkB,GAAG/C,EAAE,CAAC0C,YAAY,CAAC,CAAC,CAACK,UAAU;AAC9D,OAAO,MAAMC,aAAqB,GAAGhD,EAAE,CAAC0C,YAAY,CAAC,CAAC,CAACM,aAAa;AACpE,OAAO,MAAMC,SAAiB,GAAGjD,EAAE,CAAC0C,YAAY,CAAC,CAAC,CAACO,SAAS;AAC5D,OAAO,MAAMC,YAAoB,GAAGlD,EAAE,CAAC0C,YAAY,CAAC,CAAC,CAACQ,YAAY;AAClE,OAAO,MAAMC,eAAwB,GAAGnD,EAAE,CAAC0C,YAAY,CAAC,CAAC,CAACS,eAAe;AACzE,OAAO,MAAMC,OAAe,GAAGpD,EAAE,CAAC0C,YAAY,CAAC,CAAC,CAACU,OAAO"} \ No newline at end of file diff --git a/rnmodules/react-native-kb/lib/typescript/NativeKb.d.ts b/rnmodules/react-native-kb/lib/typescript/NativeKb.d.ts index f2d3d3a3ae0a..c23fafab1c9e 100644 --- a/rnmodules/react-native-kb/lib/typescript/NativeKb.d.ts +++ b/rnmodules/react-native-kb/lib/typescript/NativeKb.d.ts @@ -1,6 +1,6 @@ -import type { TurboModule } from 'react-native'; +import { type TurboModule } from 'react-native'; export interface Spec extends TurboModule { - install: () => void; + install: () => boolean; addListener: (eventType: string) => void; removeListeners: (count: number) => void; getConstants(): { @@ -37,11 +37,9 @@ export interface Spec extends TurboModule { }): Promise; androidAppColorSchemeChanged(mode: string): void; androidSetApplicationIconBadgeNumber(n: number): void; - androidGetInitialBundleFromNotification(): Promise; - androidGetInitialShareFileUrls(): Promise>; - androidGetInitialShareText(): Promise; engineReset(): void; engineStart(): void; + shareListenersRegistered(): void; } declare const _default: Spec; export default _default; diff --git a/rnmodules/react-native-kb/lib/typescript/index.d.ts b/rnmodules/react-native-kb/lib/typescript/index.d.ts index 8935d598a083..7e3f4afe1c92 100644 --- a/rnmodules/react-native-kb/lib/typescript/index.d.ts +++ b/rnmodules/react-native-kb/lib/typescript/index.d.ts @@ -19,13 +19,11 @@ export declare const androidAddCompleteDownload: (o: { showNotification: boolean; title: string; }) => Promise; -export declare const androidAppColorSchemeChanged: (mode: 'system' | 'alwaysDark' | 'alwaysLight' | '') => void; +export declare const androidAppColorSchemeChanged: (mode: "system" | "alwaysDark" | "alwaysLight" | "") => void; export declare const androidSetApplicationIconBadgeNumber: (n: number) => void; -export declare const androidGetInitialBundleFromNotification: () => Promise; -export declare const androidGetInitialShareFileUrls: () => Promise>; -export declare const androidGetInitialShareText: () => Promise; export declare const engineReset: () => void; export declare const engineStart: () => void; +export declare const shareListenersRegistered: () => void; export declare const getNativeEmitter: () => NativeEventEmitter; export declare const androidIsDeviceSecure: boolean; export declare const androidIsTestDevice: boolean; diff --git a/rnmodules/react-native-kb/react-native-kb.podspec b/rnmodules/react-native-kb/react-native-kb.podspec index 5f5cbf3eee0c..73ba60ac2836 100644 --- a/rnmodules/react-native-kb/react-native-kb.podspec +++ b/rnmodules/react-native-kb/react-native-kb.podspec @@ -15,7 +15,7 @@ Pod::Spec.new do |s| s.source = { :git => "https://github.com/keybase/client/react-native-kb.git", :tag => "#{s.version}" } s.source_files = [ - "ios/**/*.{h,m,mm}", + "ios/**/*.{h,m,mm,cpp}", "cpp/**/*.{h,cpp}", "cpp/*.{h,cpp}" ] diff --git a/rnmodules/react-native-kb/src/NativeKb.ts b/rnmodules/react-native-kb/src/NativeKb.ts index 457b6d52d970..6a7e1bdd0354 100644 --- a/rnmodules/react-native-kb/src/NativeKb.ts +++ b/rnmodules/react-native-kb/src/NativeKb.ts @@ -1,22 +1,25 @@ -import type {TurboModule} from 'react-native' -import {TurboModuleRegistry} from 'react-native' +import {TurboModuleRegistry, type TurboModule} from 'react-native' export interface Spec extends TurboModule { - install: () => void + install: () => boolean addListener: (eventType: string) => void removeListeners: (count: number) => void - getConstants(): { - androidIsDeviceSecure: boolean - androidIsTestDevice: boolean - appVersionCode: string - appVersionName: string - darkModeSupported: boolean - fsCacheDir: string - fsDownloadDir: string - guiConfig: string - serverConfig: string - uses24HourClock: boolean - version: string + // not used directly, just used to get constants which are individually pulled out, see ./index.tsx + getTypedConstants: () => { + [key: string]: unknown + /* + androidIsDeviceSecure: boolean + androidIsTestDevice: boolean + appVersionCode: string + appVersionName: string + darkModeSupported: boolean + fsCacheDir: string + fsDownloadDir: string + guiConfig: string + serverConfig: string + uses24HourClock: boolean + version: string + */ } getDefaultCountryCode(): Promise logSend( @@ -46,11 +49,9 @@ export interface Spec extends TurboModule { }): Promise androidAppColorSchemeChanged(mode: string /*'system' | 'alwaysDark' | 'alwaysLight' | ''*/): void androidSetApplicationIconBadgeNumber(n: number): void - androidGetInitialBundleFromNotification(): Promise - androidGetInitialShareFileUrls(): Promise> - androidGetInitialShareText(): Promise engineReset(): void engineStart(): void + shareListenersRegistered(): void } export default TurboModuleRegistry.getEnforcing('Kb') diff --git a/rnmodules/react-native-kb/src/index.tsx b/rnmodules/react-native-kb/src/index.tsx index 1ea69b128b2f..446ed9a1bea4 100644 --- a/rnmodules/react-native-kb/src/index.tsx +++ b/rnmodules/react-native-kb/src/index.tsx @@ -132,42 +132,29 @@ export const androidSetApplicationIconBadgeNumber = (n: number): void => { } } -export const androidGetInitialBundleFromNotification = (): Promise => { - if (Platform.OS === 'android') { - return Kb.androidGetInitialBundleFromNotification() - } - return Promise.reject() -} -export const androidGetInitialShareFileUrls = (): Promise> => { - if (Platform.OS === 'android') { - return Kb.androidGetInitialShareFileUrls() - } - return Promise.reject() -} -export const androidGetInitialShareText = (): Promise => { - if (Platform.OS === 'android') { - return Kb.androidGetInitialShareText() - } - return Promise.reject() -} export const engineReset = (): void => { return Kb.engineReset() } export const engineStart = (): void => { return Kb.engineStart() } +export const shareListenersRegistered = (): void => { + return Kb.shareListenersRegistered() +} export const getNativeEmitter = () => { return new NativeEventEmitter(Kb as any) } -export const androidIsDeviceSecure: boolean = Kb.getConstants().androidIsDeviceSecure -export const androidIsTestDevice: boolean = Kb.getConstants().androidIsTestDevice -export const appVersionCode: string = Kb.getConstants().appVersionCode -export const appVersionName: string = Kb.getConstants().appVersionCode -export const darkModeSupported: boolean = Kb.getConstants().darkModeSupported -export const fsCacheDir: string = Kb.getConstants().fsCacheDir -export const fsDownloadDir: string = Kb.getConstants().fsDownloadDir -export const guiConfig: string = Kb.getConstants().guiConfig -export const serverConfig: string = Kb.getConstants().serverConfig -export const uses24HourClock: boolean = Kb.getConstants().uses24HourClock -export const version: string = Kb.getConstants().version +const pc = Kb.getTypedConstants() + +export const androidIsDeviceSecure: boolean = pc.androidIsDeviceSecure +export const androidIsTestDevice: boolean = pc.androidIsTestDevice +export const appVersionCode: string = pc.appVersionCode +export const appVersionName: string = pc.appVersionCode +export const darkModeSupported: boolean = pc.darkModeSupported +export const fsCacheDir: string = pc.fsCacheDir +export const fsDownloadDir: string = pc.fsDownloadDir +export const guiConfig: string = pc.guiConfig +export const serverConfig: string = pc.serverConfig +export const uses24HourClock: boolean = pc.uses24HourClock +export const version: string = pc.version diff --git a/rnmodules/react-native-kb/yarn.lock b/rnmodules/react-native-kb/yarn.lock index 4b00b43d30cb..de84fbceb2b1 100644 --- a/rnmodules/react-native-kb/yarn.lock +++ b/rnmodules/react-native-kb/yarn.lock @@ -18,12 +18,55 @@ "@babel/highlight" "^7.22.10" chalk "^2.4.2" -"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": +"@babel/code-frame@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" + integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== + dependencies: + "@babel/highlight" "^7.24.7" + picocolors "^1.0.0" + +"@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== + dependencies: + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/compat-data@^7.22.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": version "7.22.9" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730" integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== -"@babel/core@^7.13.16", "@babel/core@^7.18.5", "@babel/core@^7.20.0": +"@babel/compat-data@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.3.tgz#99488264a56b2aded63983abd6a417f03b92ed02" + integrity sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.25.2": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40" + integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.26.0" + "@babel/generator" "^7.26.0" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helpers" "^7.26.0" + "@babel/parser" "^7.26.0" + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.26.0" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/core@^7.13.16", "@babel/core@^7.18.5": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.10.tgz#aad442c7bcd1582252cb4576747ace35bc122f35" integrity sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw== @@ -44,7 +87,7 @@ json5 "^2.2.2" semver "^6.3.1" -"@babel/generator@^7.20.0", "@babel/generator@^7.22.10": +"@babel/generator@^7.22.10": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.10.tgz#c92254361f398e160645ac58831069707382b722" integrity sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A== @@ -54,6 +97,17 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" +"@babel/generator@^7.25.0", "@babel/generator@^7.26.0", "@babel/generator@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.3.tgz#ab8d4360544a425c90c248df7059881f4b2ce019" + integrity sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ== + dependencies: + "@babel/parser" "^7.26.3" + "@babel/types" "^7.26.3" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + "@babel/helper-annotate-as-pure@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" @@ -61,6 +115,13 @@ dependencies: "@babel/types" "^7.22.5" +"@babel/helper-annotate-as-pure@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4" + integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g== + dependencies: + "@babel/types" "^7.25.9" + "@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz#573e735937e99ea75ea30788b57eb52fab7468c9" @@ -68,7 +129,7 @@ dependencies: "@babel/types" "^7.22.10" -"@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.10", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": +"@babel/helper-compilation-targets@^7.22.10", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz#01d648bbc25dd88f513d862ee0df27b7d4e67024" integrity sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q== @@ -79,6 +140,17 @@ lru-cache "^5.1.1" semver "^6.3.1" +"@babel/helper-compilation-targets@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz#55af025ce365be3cdc0c1c1e56c6af617ce88875" + integrity sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ== + dependencies: + "@babel/compat-data" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + "@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.10", "@babel/helper-create-class-features-plugin@^7.22.5": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.10.tgz#dd2612d59eac45588021ac3d6fa976d08f4e95a3" @@ -94,6 +166,19 @@ "@babel/helper-split-export-declaration" "^7.22.6" semver "^6.3.1" +"@babel/helper-create-class-features-plugin@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz#7644147706bb90ff613297d49ed5266bde729f83" + integrity sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/traverse" "^7.25.9" + semver "^6.3.1" + "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": version "7.22.9" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz#9d8e61a8d9366fe66198f57c40565663de0825f6" @@ -103,6 +188,15 @@ regexpu-core "^5.3.1" semver "^6.3.1" +"@babel/helper-create-regexp-features-plugin@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz#5169756ecbe1d95f7866b90bb555b022595302a0" + integrity sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + regexpu-core "^6.2.0" + semver "^6.3.1" + "@babel/helper-define-polyfill-provider@^0.4.2": version "0.4.2" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" @@ -114,7 +208,18 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.22.5": +"@babel/helper-define-polyfill-provider@^0.6.2", "@babel/helper-define-polyfill-provider@^0.6.3": + version "0.6.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz#f4f2792fae2ef382074bc2d713522cf24e6ddb21" + integrity sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg== + dependencies: + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + +"@babel/helper-environment-visitor@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== @@ -141,6 +246,14 @@ dependencies: "@babel/types" "^7.22.5" +"@babel/helper-member-expression-to-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3" + integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + "@babel/helper-module-imports@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" @@ -148,6 +261,14 @@ dependencies: "@babel/types" "^7.22.5" +"@babel/helper-module-imports@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" + integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + "@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9": version "7.22.9" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz#92dfcb1fbbb2bc62529024f72d942a8c97142129" @@ -159,6 +280,15 @@ "@babel/helper-split-export-declaration" "^7.22.6" "@babel/helper-validator-identifier" "^7.22.5" +"@babel/helper-module-transforms@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" + integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/helper-optimise-call-expression@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" @@ -166,12 +296,29 @@ dependencies: "@babel/types" "^7.22.5" +"@babel/helper-optimise-call-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e" + integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ== + dependencies: + "@babel/types" "^7.25.9" + "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== -"@babel/helper-remap-async-to-generator@^7.18.9", "@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": +"@babel/helper-plugin-utils@^7.24.7": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz#94ee67e8ec0e5d44ea7baeb51e571bd26af07878" + integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg== + +"@babel/helper-plugin-utils@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz#9cbdd63a9443a2c92a725cca7ebca12cc8dd9f46" + integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw== + +"@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": version "7.22.9" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz#53a25b7484e722d7efb9c350c75c032d4628de82" integrity sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ== @@ -180,6 +327,15 @@ "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-wrap-function" "^7.22.9" +"@babel/helper-remap-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz#e53956ab3d5b9fb88be04b3e2f31b523afd34b92" + integrity sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-wrap-function" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": version "7.22.9" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz#cbdc27d6d8d18cd22c81ae4293765a5d9afd0779" @@ -189,6 +345,15 @@ "@babel/helper-member-expression-to-functions" "^7.22.5" "@babel/helper-optimise-call-expression" "^7.22.5" +"@babel/helper-replace-supers@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz#ba447224798c3da3f8713fc272b145e33da6a5c5" + integrity sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/helper-simple-access@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" @@ -203,6 +368,14 @@ dependencies: "@babel/types" "^7.22.5" +"@babel/helper-skip-transparent-expression-wrappers@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9" + integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + "@babel/helper-split-export-declaration@^7.22.6": version "7.22.6" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" @@ -215,16 +388,41 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-string-parser@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" + integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== + +"@babel/helper-string-parser@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" + integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== + "@babel/helper-validator-identifier@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== +"@babel/helper-validator-identifier@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" + integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== + +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== + "@babel/helper-validator-option@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac" integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== +"@babel/helper-validator-option@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" + integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== + "@babel/helper-wrap-function@^7.22.9": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz#d845e043880ed0b8c18bd194a12005cb16d2f614" @@ -234,6 +432,15 @@ "@babel/template" "^7.22.5" "@babel/types" "^7.22.10" +"@babel/helper-wrap-function@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz#d99dfd595312e6c894bd7d237470025c85eea9d0" + integrity sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g== + dependencies: + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + "@babel/helpers@^7.22.10": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.10.tgz#ae6005c539dfbcb5cd71fb51bfc8a52ba63bc37a" @@ -243,6 +450,14 @@ "@babel/traverse" "^7.22.10" "@babel/types" "^7.22.10" +"@babel/helpers@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4" + integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== + dependencies: + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.0" + "@babel/highlight@^7.22.10": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.10.tgz#02a3f6d8c1cb4521b2fd0ab0da8f4739936137d7" @@ -252,11 +467,35 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.13.16", "@babel/parser@^7.20.0", "@babel/parser@^7.22.10", "@babel/parser@^7.22.5": +"@babel/highlight@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" + integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== + dependencies: + "@babel/helper-validator-identifier" "^7.24.7" + chalk "^2.4.2" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.25.3", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.3.tgz#8c51c5db6ddf08134af1ddbacf16aaab48bac234" + integrity sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA== + dependencies: + "@babel/types" "^7.26.3" + +"@babel/parser@^7.13.16", "@babel/parser@^7.22.10", "@babel/parser@^7.22.5": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.10.tgz#e37634f9a12a1716136c44624ef54283cabd3f55" integrity sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ== +"@babel/parser@^7.25.0": + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.4.tgz#af4f2df7d02440286b7de57b1c21acfb2a6f257a" + integrity sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA== + dependencies: + "@babel/types" "^7.25.4" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz#87245a21cd69a73b0b81bcda98d443d6df08f05e" @@ -273,17 +512,7 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-transform-optional-chaining" "^7.22.5" -"@babel/plugin-proposal-async-generator-functions@^7.0.0": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" - integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-remap-async-to-generator" "^7.18.9" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.17.12", "@babel/plugin-proposal-class-properties@^7.18.0": +"@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.17.12": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== @@ -291,15 +520,14 @@ "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-export-default-from@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.22.5.tgz#825924eda1fad382c3de4db6fe1711b6fa03362f" - integrity sha512-UCe1X/hplyv6A5g2WnQ90tnHRvYL29dabCWww92lO7VdfMVTVReBTRrhiMrKQejHD9oVkdnRdwYuzUZkBVQisg== +"@babel/plugin-proposal-export-default-from@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.25.9.tgz#52702be6ef8367fc8f18b8438278332beeb8f87c" + integrity sha512-ykqgwNfSnNOB+C8fV5X4mG3AVmvu+WVxcaU9xHHtBb7PCrPeweMmPjGsn8eMaeJg6SJuoUuZENeeSWaarWqonQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-export-default-from" "^7.22.5" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8", "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.0": +"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== @@ -307,34 +535,7 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.0.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" - integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.20.0": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" - integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== - dependencies: - "@babel/compat-data" "^7.20.5" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.20.7" - -"@babel/plugin-proposal-optional-catch-binding@^7.0.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" - integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-proposal-optional-chaining@^7.13.12", "@babel/plugin-proposal-optional-chaining@^7.20.0": +"@babel/plugin-proposal-optional-chaining@^7.13.12": version "7.21.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== @@ -355,7 +556,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.0.0", "@babel/plugin-syntax-class-properties@^7.12.13": +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== @@ -369,19 +577,19 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": +"@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.22.5.tgz#ac3a24b362a04415a017ab96b9b4483d0e2a6e44" - integrity sha512-ODAqWWXB/yReh/jVQDag/3/tl6lgBueQkk/TcfW/59Oykm4c8a55XloX0CTk2k2VJiFWMgHby9xNX29IbCv9dQ== +"@babel/plugin-syntax-export-default-from@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.25.9.tgz#86614767a9ff140366f0c3766ef218beb32a730a" + integrity sha512-9MhJ/SMTsVqsd69GyQg89lYR4o9T+oDGv5F6IsigxxqFVOyR/IflDLYP8WDI1l8fkhNGGktqkvL5qwNCtGEpgQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-syntax-export-namespace-from@^7.8.3": version "7.8.3" @@ -390,13 +598,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.12.1", "@babel/plugin-syntax-flow@^7.18.0", "@babel/plugin-syntax-flow@^7.22.5": +"@babel/plugin-syntax-flow@^7.12.1", "@babel/plugin-syntax-flow@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz#163b820b9e7696ce134df3ee716d9c0c98035859" integrity sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-syntax-flow@^7.25.9": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.26.0.tgz#96507595c21b45fccfc2bc758d5c45452e6164fa" + integrity sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-syntax-import-assertions@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" @@ -411,6 +626,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-syntax-import-attributes@^7.24.7": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" + integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-syntax-import-meta@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" @@ -425,13 +647,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.22.5": +"@babel/plugin-syntax-jsx@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-syntax-jsx@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290" + integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -439,7 +668,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-nullish-coalescing-operator@^7.0.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== @@ -453,7 +682,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": +"@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== @@ -467,7 +696,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-chaining@^7.0.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": +"@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== @@ -495,6 +724,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-syntax-typescript@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399" + integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" @@ -503,13 +739,20 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.22.5": +"@babel/plugin-transform-arrow-functions@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-transform-arrow-functions@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz#7821d4410bee5daaadbb4cdd9a6649704e176845" + integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-async-generator-functions@^7.22.10": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.10.tgz#45946cd17f915b10e65c29b8ed18a0a50fc648c8" @@ -520,7 +763,16 @@ "@babel/helper-remap-async-to-generator" "^7.22.9" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-transform-async-to-generator@^7.20.0", "@babel/plugin-transform-async-to-generator@^7.22.5": +"@babel/plugin-transform-async-generator-functions@^7.25.4": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz#1b18530b077d18a407c494eb3d1d72da505283a2" + integrity sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-transform-async-to-generator@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== @@ -529,20 +781,36 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-remap-async-to-generator" "^7.22.5" -"@babel/plugin-transform-block-scoped-functions@^7.0.0", "@babel/plugin-transform-block-scoped-functions@^7.22.5": +"@babel/plugin-transform-async-to-generator@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz#c80008dacae51482793e5a9c08b39a5be7e12d71" + integrity sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" + +"@babel/plugin-transform-block-scoped-functions@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.22.10": +"@babel/plugin-transform-block-scoping@^7.22.10": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz#88a1dccc3383899eb5e660534a76a22ecee64faa" integrity sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-transform-block-scoping@^7.25.0": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz#c33665e46b06759c93687ca0f84395b80c0473a1" + integrity sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-class-properties@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" @@ -551,6 +819,14 @@ "@babel/helper-create-class-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-transform-class-properties@^7.25.4": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz#a8ce84fedb9ad512549984101fa84080a9f5f51f" + integrity sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-class-static-block@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz#3e40c46f048403472d6f4183116d5e46b1bff5ba" @@ -560,7 +836,7 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.22.6": +"@babel/plugin-transform-classes@^7.22.6": version "7.22.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz#e04d7d804ed5b8501311293d1a0e6d43e94c3363" integrity sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ== @@ -575,7 +851,19 @@ "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.22.5": +"@babel/plugin-transform-classes@^7.25.4": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz#7152457f7880b593a63ade8a861e6e26a4469f52" + integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/traverse" "^7.25.9" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== @@ -583,13 +871,28 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/template" "^7.22.5" -"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.20.0", "@babel/plugin-transform-destructuring@^7.22.10": +"@babel/plugin-transform-computed-properties@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz#db36492c78460e534b8852b1d5befe3c923ef10b" + integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/template" "^7.25.9" + +"@babel/plugin-transform-destructuring@^7.22.10": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz#38e2273814a58c810b6c34ea293be4973c4eb5e2" integrity sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-transform-destructuring@^7.24.8": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz#966ea2595c498224340883602d3cfd7a0c79cea1" + integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-dotall-regex@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" @@ -629,7 +932,7 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-flow-strip-types@^7.0.0", "@babel/plugin-transform-flow-strip-types@^7.20.0", "@babel/plugin-transform-flow-strip-types@^7.22.5": +"@babel/plugin-transform-flow-strip-types@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz#0bb17110c7bf5b35a60754b2f00c58302381dee2" integrity sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA== @@ -637,14 +940,30 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-flow" "^7.22.5" -"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.22.5": +"@babel/plugin-transform-flow-strip-types@^7.25.2": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.9.tgz#85879b42a8f5948fd6317069978e98f23ef8aec1" + integrity sha512-/VVukELzPDdci7UUsWQaSkhgnjIWXnIyRpM02ldxaVoFK96c41So8JcKT3m0gYjyv7j5FNPGS5vfELrWalkbDA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-syntax-flow" "^7.25.9" + +"@babel/plugin-transform-for-of@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz#ab1b8a200a8f990137aff9a084f8de4099ab173f" integrity sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.22.5": +"@babel/plugin-transform-for-of@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz#4bdc7d42a213397905d89f02350c5267866d5755" + integrity sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + +"@babel/plugin-transform-function-name@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== @@ -653,6 +972,15 @@ "@babel/helper-function-name" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-transform-function-name@^7.25.1": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz#939d956e68a606661005bfd550c4fc2ef95f7b97" + integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA== + dependencies: + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/plugin-transform-json-strings@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz#14b64352fdf7e1f737eed68de1a1468bd2a77ec0" @@ -661,13 +989,20 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.22.5": +"@babel/plugin-transform-literals@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== dependencies: "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-transform-literals@^7.25.2": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz#1a1c6b4d4aa59bc4cad5b6b3a223a0abd685c9de" + integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-logical-assignment-operators@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz#66ae5f068fd5a9a5dc570df16f56c2a8462a9d6c" @@ -676,7 +1011,14 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.0.0", "@babel/plugin-transform-member-expression-literals@^7.22.5": +"@babel/plugin-transform-logical-assignment-operators@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz#b19441a8c39a2fda0902900b306ea05ae1055db7" + integrity sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-member-expression-literals@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== @@ -691,7 +1033,7 @@ "@babel/helper-module-transforms" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.22.5": +"@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz#7d9875908d19b8c0536085af7b053fd5bd651bfa" integrity sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA== @@ -700,6 +1042,14 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-simple-access" "^7.22.5" +"@babel/plugin-transform-modules-commonjs@^7.24.8": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz#8f011d44b20d02c3de44d8850d971d8497f981fb" + integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ== + dependencies: + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-modules-systemjs@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz#18c31410b5e579a0092638f95c896c2a98a5d496" @@ -718,7 +1068,7 @@ "@babel/helper-module-transforms" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-named-capturing-groups-regex@^7.0.0", "@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": +"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== @@ -726,6 +1076,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-transform-named-capturing-groups-regex@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz#454990ae6cc22fd2a0fa60b3a2c6f63a38064e6a" + integrity sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-new-target@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" @@ -741,6 +1099,13 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" +"@babel/plugin-transform-nullish-coalescing-operator@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz#bcb1b0d9e948168102d5f7104375ca21c3266949" + integrity sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-numeric-separator@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz#57226a2ed9e512b9b446517ab6fa2d17abb83f58" @@ -749,6 +1114,13 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" +"@babel/plugin-transform-numeric-separator@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz#bfed75866261a8b643468b0ccfd275f2033214a1" + integrity sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-object-rest-spread@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz#9686dc3447df4753b0b2a2fae7e8bc33cdc1f2e1" @@ -760,7 +1132,16 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.22.5" -"@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.22.5": +"@babel/plugin-transform-object-rest-spread@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz#0203725025074164808bcf1a2cfa90c652c99f18" + integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg== + dependencies: + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" + +"@babel/plugin-transform-object-super@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== @@ -776,6 +1157,13 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" +"@babel/plugin-transform-optional-catch-binding@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz#10e70d96d52bb1f10c5caaac59ac545ea2ba7ff3" + integrity sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-optional-chaining@^7.22.10", "@babel/plugin-transform-optional-chaining@^7.22.5": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.10.tgz#076d28a7e074392e840d4ae587d83445bac0372a" @@ -785,13 +1173,35 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.22.5": +"@babel/plugin-transform-optional-chaining@^7.24.8": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz#e142eb899d26ef715435f201ab6e139541eee7dd" + integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + +"@babel/plugin-transform-parameters@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz#c3542dd3c39b42c8069936e48717a8d179d63a18" integrity sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-transform-parameters@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz#5881f0ae21018400e320fc7eb817e529d1254b68" + integrity sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-parameters@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz#b856842205b3e77e18b7a7a1b94958069c7ba257" + integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-private-methods@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" @@ -800,6 +1210,14 @@ "@babel/helper-create-class-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-transform-private-methods@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57" + integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-private-property-in-object@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz#07a77f28cbb251546a43d175a1dda4cf3ef83e32" @@ -810,20 +1228,36 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.22.5": +"@babel/plugin-transform-private-property-in-object@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz#9c8b73e64e6cc3cbb2743633885a7dd2c385fe33" + integrity sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-property-literals@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.22.5": +"@babel/plugin-transform-react-display-name@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz#3c4326f9fce31c7968d6cb9debcaf32d9e279a2b" integrity sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-transform-react-display-name@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz#4b79746b59efa1f38c8695065a92a9f5afb24f7d" + integrity sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-react-jsx-development@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" @@ -831,21 +1265,21 @@ dependencies: "@babel/plugin-transform-react-jsx" "^7.22.5" -"@babel/plugin-transform-react-jsx-self@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz#ca2fdc11bc20d4d46de01137318b13d04e481d8e" - integrity sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g== +"@babel/plugin-transform-react-jsx-self@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz#c0b6cae9c1b73967f7f9eb2fca9536ba2fad2858" + integrity sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-react-jsx-source@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz#49af1615bfdf6ed9d3e9e43e425e0b2b65d15b6c" - integrity sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w== +"@babel/plugin-transform-react-jsx-source@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz#4c6b8daa520b5f155b5fb55547d7c9fa91417503" + integrity sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.22.5": +"@babel/plugin-transform-react-jsx@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz#932c291eb6dd1153359e2a90cb5e557dcf068416" integrity sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA== @@ -856,6 +1290,17 @@ "@babel/plugin-syntax-jsx" "^7.22.5" "@babel/types" "^7.22.5" +"@babel/plugin-transform-react-jsx@^7.25.2": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz#06367940d8325b36edff5e2b9cbe782947ca4166" + integrity sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-syntax-jsx" "^7.25.9" + "@babel/types" "^7.25.9" + "@babel/plugin-transform-react-pure-annotations@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz#1f58363eef6626d6fa517b95ac66fe94685e32c0" @@ -872,6 +1317,14 @@ "@babel/helper-plugin-utils" "^7.22.5" regenerator-transform "^0.15.2" +"@babel/plugin-transform-regenerator@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz#03a8a4670d6cebae95305ac6defac81ece77740b" + integrity sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + regenerator-transform "^0.15.2" + "@babel/plugin-transform-reserved-words@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" @@ -879,26 +1332,33 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-runtime@^7.0.0": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.10.tgz#89eda6daf1d3af6f36fb368766553054c8d7cd46" - integrity sha512-RchI7HePu1eu0CYNKHHHQdfenZcM4nz8rew5B1VWqeRKdcwW5aQ5HeG9eTUbWiAS1UrmHVLmoxTWHt3iLD/NhA== +"@babel/plugin-transform-runtime@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz#62723ea3f5b31ffbe676da9d6dae17138ae580ea" + integrity sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ== dependencies: - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.5" - babel-plugin-polyfill-corejs3 "^0.8.3" - babel-plugin-polyfill-regenerator "^0.5.2" + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.6" + babel-plugin-polyfill-regenerator "^0.6.1" semver "^6.3.1" -"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.22.5": +"@babel/plugin-transform-shorthand-properties@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.22.5": +"@babel/plugin-transform-shorthand-properties@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz#bb785e6091f99f826a95f9894fc16fde61c163f2" + integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-spread@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== @@ -906,14 +1366,29 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-sticky-regex@^7.0.0", "@babel/plugin-transform-sticky-regex@^7.22.5": +"@babel/plugin-transform-spread@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz#24a35153931b4ba3d13cec4a7748c21ab5514ef9" + integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + +"@babel/plugin-transform-sticky-regex@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.22.5": +"@babel/plugin-transform-sticky-regex@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz#c7f02b944e986a417817b20ba2c504dfc1453d32" + integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-template-literals@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== @@ -927,7 +1402,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typescript@^7.22.5", "@babel/plugin-transform-typescript@^7.5.0": +"@babel/plugin-transform-typescript@^7.22.5": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.10.tgz#aadd98fab871f0bb5717bcc24c31aaaa455af923" integrity sha512-7++c8I/ymsDo4QQBAgbraXLzIM6jmfao11KgIBEYZRReWzNWH9NtNgJcyrZiXsOPh523FQm6LfpLyy/U5fn46A== @@ -937,6 +1412,17 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-typescript" "^7.22.5" +"@babel/plugin-transform-typescript@^7.25.2": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.3.tgz#3d6add9c78735623317387ee26d5ada540eee3fd" + integrity sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-syntax-typescript" "^7.25.9" + "@babel/plugin-transform-unicode-escapes@^7.22.10": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9" @@ -952,7 +1438,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-regex@^7.0.0", "@babel/plugin-transform-unicode-regex@^7.22.5": +"@babel/plugin-transform-unicode-regex@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== @@ -960,6 +1446,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-transform-unicode-regex@^7.24.7": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz#5eae747fe39eacf13a8bd006a4fb0b5d1fa5e9b1" + integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-unicode-sets-regex@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" @@ -1111,14 +1605,21 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.0.0", "@babel/runtime@^7.8.4": +"@babel/runtime@^7.25.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" + integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/runtime@^7.8.4": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.10.tgz#ae3e9631fd947cb7e3610d3e9d8fef5f76696682" integrity sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.0.0", "@babel/template@^7.22.5": +"@babel/template@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== @@ -1127,7 +1628,38 @@ "@babel/parser" "^7.22.5" "@babel/types" "^7.22.5" -"@babel/traverse@^7.20.0", "@babel/traverse@^7.22.10": +"@babel/template@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" + integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/parser" "^7.25.0" + "@babel/types" "^7.25.0" + +"@babel/template@^7.25.9", "@babel/template@^7.3.3": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" + integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== + dependencies: + "@babel/code-frame" "^7.25.9" + "@babel/parser" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3": + version "7.26.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.4.tgz#ac3a2a84b908dde6d463c3bfa2c5fdc1653574bd" + integrity sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.3" + "@babel/parser" "^7.26.3" + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.3" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/traverse@^7.22.10": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.10.tgz#20252acb240e746d27c2e82b4484f199cf8141aa" integrity sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig== @@ -1143,7 +1675,28 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.20.0", "@babel/types@^7.22.10", "@babel/types@^7.22.5", "@babel/types@^7.4.4": +"@babel/traverse@^7.25.3", "@babel/traverse@^7.25.9": + version "7.26.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.4.tgz#ac3a2a84b908dde6d463c3bfa2c5fdc1653574bd" + integrity sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.3" + "@babel/parser" "^7.26.3" + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.3" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.25.2", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.26.3", "@babel/types@^7.3.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.3.tgz#37e79830f04c2b5687acc77db97fbc75fb81f3c0" + integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA== + dependencies: + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + +"@babel/types@^7.22.10", "@babel/types@^7.22.5", "@babel/types@^7.4.4": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.10.tgz#4a9e76446048f2c66982d1a989dd12b8a2d2dc03" integrity sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg== @@ -1152,82 +1705,99 @@ "@babel/helper-validator-identifier" "^7.22.5" to-fast-properties "^2.0.0" -"@hapi/hoek@^9.0.0": - version "9.3.0" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" - integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== +"@babel/types@^7.25.0", "@babel/types@^7.25.4": + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.4.tgz#6bcb46c72fdf1012a209d016c07f769e10adcb5f" + integrity sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ== + dependencies: + "@babel/helper-string-parser" "^7.24.8" + "@babel/helper-validator-identifier" "^7.24.7" + to-fast-properties "^2.0.0" + +"@isaacs/ttlcache@^1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz#21fb23db34e9b6220c6ba023a0118a2dd3461ea2" + integrity sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA== -"@hapi/topo@^5.0.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" - integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== dependencies: - "@hapi/hoek" "^9.0.0" + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/create-cache-key-function@^29.2.1": - version "29.6.2" - resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-29.6.2.tgz#b6b74fb741a7b7d9aa399c179694db8272283527" - integrity sha512-oGVRMr8na9h1vUiem1E/Uoxb/NR9BdfKb7IBZ+pNWxJQmTYSbDF0dsVBAGqNU7MBQwYJDyRx0H7H/0itiqAgQg== +"@jest/create-cache-key-function@^29.6.3": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz#793be38148fab78e65f40ae30c36785f4ad859f0" + integrity sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA== dependencies: - "@jest/types" "^29.6.1" + "@jest/types" "^29.6.3" -"@jest/environment@^29.6.2": - version "29.6.2" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.6.2.tgz#794c0f769d85e7553439d107d3f43186dc6874a9" - integrity sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q== +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== dependencies: - "@jest/fake-timers" "^29.6.2" - "@jest/types" "^29.6.1" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^29.6.2" + jest-mock "^29.7.0" -"@jest/fake-timers@^29.6.2": - version "29.6.2" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.6.2.tgz#fe9d43c5e4b1b901168fe6f46f861b3e652a2df4" - integrity sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA== +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== dependencies: - "@jest/types" "^29.6.1" + "@jest/types" "^29.6.3" "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^29.6.2" - jest-mock "^29.6.2" - jest-util "^29.6.2" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" -"@jest/schemas@^29.6.0": - version "29.6.0" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.0.tgz#0f4cb2c8e3dca80c135507ba5635a4fd755b0040" - integrity sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ== +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== dependencies: "@sinclair/typebox" "^0.27.8" -"@jest/types@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" - integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - -"@jest/types@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" - integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^16.0.0" + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" -"@jest/types@^29.6.1": - version "29.6.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.1.tgz#ae79080278acff0a6af5eb49d063385aaa897bf2" - integrity sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw== +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== dependencies: - "@jest/schemas" "^29.6.0" + "@jest/schemas" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" @@ -1243,6 +1813,15 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + "@jridgewell/resolve-uri@^3.1.0": version "3.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" @@ -1253,6 +1832,11 @@ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + "@jridgewell/source-map@^0.3.3": version "0.3.5" resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" @@ -1274,6 +1858,14 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1295,225 +1887,155 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@react-native-community/cli-clean@11.3.10": - version "11.3.10" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-clean/-/cli-clean-11.3.10.tgz#70d14dd998ce8ad532266b36a0e5cafe22d300ac" - integrity sha512-g6QjW+DSqoWRHzmIQW3AH22k1AnynWuOdy2YPwYEGgPddTeXZtJphIpEVwDOiC0L4mZv2VmiX33/cGNUwO0cIA== - dependencies: - "@react-native-community/cli-tools" "11.3.10" - chalk "^4.1.2" - execa "^5.0.0" - prompts "^2.4.0" +"@react-native/assets-registry@0.76.5": + version "0.76.5" + resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.76.5.tgz#3343338813aa6354df9fec52af50d0b5f7f3d013" + integrity sha512-MN5dasWo37MirVcKWuysRkRr4BjNc81SXwUtJYstwbn8oEkfnwR9DaqdDTo/hHOnTdhafffLIa2xOOHcjDIGEw== -"@react-native-community/cli-config@11.3.10": - version "11.3.10" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-config/-/cli-config-11.3.10.tgz#753510a80a98b136fec852e1ea5fa655c13dbd17" - integrity sha512-YYu14nm1JYLS6mDRBz78+zDdSFudLBFpPkhkOoj4LuBhNForQBIqFFHzQbd9/gcguJxfW3vlYSnudfaUI7oGLg== +"@react-native/babel-plugin-codegen@0.76.5": + version "0.76.5" + resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.76.5.tgz#a7c32274351e51db9c0a7849ce8059940448c087" + integrity sha512-xe7HSQGop4bnOLMaXt0aU+rIatMNEQbz242SDl8V9vx5oOTI0VbZV9yLy6yBc6poUlYbcboF20YVjoRsxX4yww== dependencies: - "@react-native-community/cli-tools" "11.3.10" - chalk "^4.1.2" - cosmiconfig "^5.1.0" - deepmerge "^4.3.0" - glob "^7.1.3" - joi "^17.2.1" + "@react-native/codegen" "0.76.5" -"@react-native-community/cli-debugger-ui@11.3.10": - version "11.3.10" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-11.3.10.tgz#b16ebf770ba3cc76bf46580f101d00dacf919824" - integrity sha512-kyitGV3RsjlXIioq9lsuawha2GUBPCTAyXV6EBlm3qlyF3dMniB3twEvz+fIOid/e1ZeucH3Tzy5G3qcP8yWoA== +"@react-native/babel-preset@0.76.5": + version "0.76.5" + resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.76.5.tgz#794ca17e1107e46712153f296a4930de2048e20e" + integrity sha512-1Nu5Um4EogOdppBLI4pfupkteTjWfmI0hqW8ezWTg7Bezw0FtBj8yS8UYVd3wTnDFT9A5mA2VNoNUqomJnvj2A== dependencies: - serve-static "^1.13.1" - -"@react-native-community/cli-doctor@11.3.10": - version "11.3.10" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-11.3.10.tgz#161b8fd1b485cd52f7a19b2025696070b9d2b6a1" - integrity sha512-DpMsfCWKZ15L9nFK/SyDvpl5v6MjV+arMHMC1i8kR+DOmf2xWmp/pgMywKk0/u50yGB9GwxBHt3i/S/IMK5Ylg== - dependencies: - "@react-native-community/cli-config" "11.3.10" - "@react-native-community/cli-platform-android" "11.3.10" - "@react-native-community/cli-platform-ios" "11.3.10" - "@react-native-community/cli-tools" "11.3.10" - chalk "^4.1.2" - command-exists "^1.2.8" - envinfo "^7.7.2" - execa "^5.0.0" - hermes-profile-transformer "^0.0.6" - ip "^1.1.5" - node-stream-zip "^1.9.1" - ora "^5.4.1" - prompts "^2.4.0" - semver "^7.5.2" - strip-ansi "^5.2.0" - sudo-prompt "^9.0.0" - wcwidth "^1.0.1" - yaml "^2.2.1" - -"@react-native-community/cli-hermes@11.3.10": - version "11.3.10" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-11.3.10.tgz#f3d4f069ca472b1d8b4e8132cf9c44097a58ca19" - integrity sha512-vqINuzAlcHS9ImNwJtT43N7kfBQ7ro9A8O1Gpc5TQ0A8V36yGG8eoCHeauayklVVgMZpZL6f6mcoLLr9IOgBZQ== - dependencies: - "@react-native-community/cli-platform-android" "11.3.10" - "@react-native-community/cli-tools" "11.3.10" - chalk "^4.1.2" - hermes-profile-transformer "^0.0.6" - ip "^1.1.5" - -"@react-native-community/cli-platform-android@11.3.10": - version "11.3.10" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-11.3.10.tgz#756dd73ad78bf2f20c678683dfc48cb764b1b590" - integrity sha512-RGu9KuDIXnrcNkacSHj5ETTQtp/D/835L6veE2jMigO21p//gnKAjw3AVLCysGr8YXYfThF8OSOALrwNc94puQ== - dependencies: - "@react-native-community/cli-tools" "11.3.10" - chalk "^4.1.2" - execa "^5.0.0" - glob "^7.1.3" - logkitty "^0.7.1" + "@babel/core" "^7.25.2" + "@babel/plugin-proposal-export-default-from" "^7.24.7" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-default-from" "^7.24.7" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-transform-arrow-functions" "^7.24.7" + "@babel/plugin-transform-async-generator-functions" "^7.25.4" + "@babel/plugin-transform-async-to-generator" "^7.24.7" + "@babel/plugin-transform-block-scoping" "^7.25.0" + "@babel/plugin-transform-class-properties" "^7.25.4" + "@babel/plugin-transform-classes" "^7.25.4" + "@babel/plugin-transform-computed-properties" "^7.24.7" + "@babel/plugin-transform-destructuring" "^7.24.8" + "@babel/plugin-transform-flow-strip-types" "^7.25.2" + "@babel/plugin-transform-for-of" "^7.24.7" + "@babel/plugin-transform-function-name" "^7.25.1" + "@babel/plugin-transform-literals" "^7.25.2" + "@babel/plugin-transform-logical-assignment-operators" "^7.24.7" + "@babel/plugin-transform-modules-commonjs" "^7.24.8" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.7" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.7" + "@babel/plugin-transform-numeric-separator" "^7.24.7" + "@babel/plugin-transform-object-rest-spread" "^7.24.7" + "@babel/plugin-transform-optional-catch-binding" "^7.24.7" + "@babel/plugin-transform-optional-chaining" "^7.24.8" + "@babel/plugin-transform-parameters" "^7.24.7" + "@babel/plugin-transform-private-methods" "^7.24.7" + "@babel/plugin-transform-private-property-in-object" "^7.24.7" + "@babel/plugin-transform-react-display-name" "^7.24.7" + "@babel/plugin-transform-react-jsx" "^7.25.2" + "@babel/plugin-transform-react-jsx-self" "^7.24.7" + "@babel/plugin-transform-react-jsx-source" "^7.24.7" + "@babel/plugin-transform-regenerator" "^7.24.7" + "@babel/plugin-transform-runtime" "^7.24.7" + "@babel/plugin-transform-shorthand-properties" "^7.24.7" + "@babel/plugin-transform-spread" "^7.24.7" + "@babel/plugin-transform-sticky-regex" "^7.24.7" + "@babel/plugin-transform-typescript" "^7.25.2" + "@babel/plugin-transform-unicode-regex" "^7.24.7" + "@babel/template" "^7.25.0" + "@react-native/babel-plugin-codegen" "0.76.5" + babel-plugin-syntax-hermes-parser "^0.25.1" + babel-plugin-transform-flow-enums "^0.0.2" + react-refresh "^0.14.0" -"@react-native-community/cli-platform-ios@11.3.10": - version "11.3.10" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-11.3.10.tgz#f8a9bca1181802f12ed15714d5a496e60096cbed" - integrity sha512-JjduMrBM567/j4Hvjsff77dGSLMA0+p9rr0nShlgnKPcc+0J4TDy0hgWpUceM7OG00AdDjpetAPupz0kkAh4cQ== +"@react-native/codegen@0.76.5": + version "0.76.5" + resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.76.5.tgz#4d89ec14a023d6946dbc44537c39b03bd006db7b" + integrity sha512-FoZ9VRQ5MpgtDAnVo1rT9nNRfjnWpE40o1GeJSDlpUMttd36bVXvsDm8W/NhX8BKTWXSX+CPQJsRcvN1UPYGKg== dependencies: - "@react-native-community/cli-tools" "11.3.10" - chalk "^4.1.2" - execa "^5.0.0" - fast-xml-parser "^4.0.12" - glob "^7.1.3" - ora "^5.4.1" + "@babel/parser" "^7.25.3" + glob "^7.1.1" + hermes-parser "0.23.1" + invariant "^2.2.4" + jscodeshift "^0.14.0" + mkdirp "^0.5.1" + nullthrows "^1.1.1" + yargs "^17.6.2" -"@react-native-community/cli-plugin-metro@11.3.10": - version "11.3.10" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-11.3.10.tgz#6ed67dda2518d3dabae20f3b38f66a0a9bd8e962" - integrity sha512-ZYAc5Hc+QVqJgj1XFbpKnIPbSJ9xKcBnfQrRhR+jFyt2DWx85u4bbzY1GSVc/USs0UbSUXv4dqPbnmOJz52EYQ== +"@react-native/community-cli-plugin@0.76.5": + version "0.76.5" + resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.76.5.tgz#e701a9f99565504a2510d1b54713b1c5dd0f1bb4" + integrity sha512-3MKMnlU0cZOWlMhz5UG6WqACJiWUrE3XwBEumzbMmZw3Iw3h+fIsn+7kLLE5EhzqLt0hg5Y4cgYFi4kOaNgq+g== dependencies: - "@react-native-community/cli-server-api" "11.3.10" - "@react-native-community/cli-tools" "11.3.10" - chalk "^4.1.2" - execa "^5.0.0" - metro "0.76.8" - metro-config "0.76.8" - metro-core "0.76.8" - metro-react-native-babel-transformer "0.76.8" - metro-resolver "0.76.8" - metro-runtime "0.76.8" + "@react-native/dev-middleware" "0.76.5" + "@react-native/metro-babel-transformer" "0.76.5" + chalk "^4.0.0" + execa "^5.1.1" + invariant "^2.2.4" + metro "^0.81.0" + metro-config "^0.81.0" + metro-core "^0.81.0" + node-fetch "^2.2.0" readline "^1.3.0" - -"@react-native-community/cli-server-api@11.3.10": - version "11.3.10" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-11.3.10.tgz#2c4940d921711f2c78f0b61f126e8dbbbef6277c" - integrity sha512-WEwHWIpqx3gA6Da+lrmq8+z78E1XbxxjBlvHAXevhjJj42N4SO417eZiiUVrFzEFVVJSUee9n9aRa0kUR+0/2w== - dependencies: - "@react-native-community/cli-debugger-ui" "11.3.10" - "@react-native-community/cli-tools" "11.3.10" - compression "^1.7.1" + semver "^7.1.3" + +"@react-native/debugger-frontend@0.76.5": + version "0.76.5" + resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.76.5.tgz#0e89940543fb5029506690b83f12547d0bf42cc4" + integrity sha512-5gtsLfBaSoa9WP8ToDb/8NnDBLZjv4sybQQj7rDKytKOdsXm3Pr2y4D7x7GQQtP1ZQRqzU0X0OZrhRz9xNnOqA== + +"@react-native/dev-middleware@0.76.5": + version "0.76.5" + resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.76.5.tgz#10d02fcc6c3c9d24f6dc147c2ef95d6fa6bd3787" + integrity sha512-f8eimsxpkvMgJia7POKoUu9uqjGF6KgkxX4zqr/a6eoR1qdEAWUd6PonSAqtag3PAqvEaJpB99gLH2ZJI1nDGg== + dependencies: + "@isaacs/ttlcache" "^1.4.1" + "@react-native/debugger-frontend" "0.76.5" + chrome-launcher "^0.15.2" + chromium-edge-launcher "^0.2.0" connect "^3.6.5" - errorhandler "^1.5.1" - nocache "^3.0.1" - pretty-format "^26.6.2" + debug "^2.2.0" + nullthrows "^1.1.1" + open "^7.0.3" + selfsigned "^2.4.1" serve-static "^1.13.1" - ws "^7.5.1" - -"@react-native-community/cli-tools@11.3.10": - version "11.3.10" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-11.3.10.tgz#d7bbe3fd8b338004f996f03f53a5373d9caab91c" - integrity sha512-4kCuCwVcGagSrNg9vxMNVhynwpByuC/J5UnKGEet3HuqmoDhQW15m18fJXiehA8J+u9WBvHduefy9nZxO0C06Q== - dependencies: - appdirsjs "^1.2.4" - chalk "^4.1.2" - find-up "^5.0.0" - mime "^2.4.1" - node-fetch "^2.6.0" - open "^6.2.0" - ora "^5.4.1" - semver "^7.5.2" - shell-quote "^1.7.3" - -"@react-native-community/cli-types@11.3.10": - version "11.3.10" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-11.3.10.tgz#cb02186cd247108bcea5ff93c4c97bb3c8dd8f22" - integrity sha512-0FHK/JE7bTn0x1y8Lk5m3RISDHIBQqWLltO2Mf7YQ6cAeKs8iNOJOeKaHJEY+ohjsOyCziw+XSC4cY57dQrwNA== - dependencies: - joi "^17.2.1" - -"@react-native-community/cli@11.3.10": - version "11.3.10" - resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-11.3.10.tgz#ea88d20982cfc9ed7a5170d04aeedd2abf092348" - integrity sha512-bIx0t5s9ewH1PlcEcuQUD+UnVrCjPGAfjhVR5Gew565X60nE+GTIHRn70nMv9G4he/amBF+Z+vf5t8SNZEWMwg== - dependencies: - "@react-native-community/cli-clean" "11.3.10" - "@react-native-community/cli-config" "11.3.10" - "@react-native-community/cli-debugger-ui" "11.3.10" - "@react-native-community/cli-doctor" "11.3.10" - "@react-native-community/cli-hermes" "11.3.10" - "@react-native-community/cli-plugin-metro" "11.3.10" - "@react-native-community/cli-server-api" "11.3.10" - "@react-native-community/cli-tools" "11.3.10" - "@react-native-community/cli-types" "11.3.10" - chalk "^4.1.2" - commander "^9.4.1" - execa "^5.0.0" - find-up "^4.1.0" - fs-extra "^8.1.0" - graceful-fs "^4.1.3" - prompts "^2.4.0" - semver "^7.5.2" - -"@react-native/assets-registry@^0.72.0": - version "0.72.0" - resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.72.0.tgz#c82a76a1d86ec0c3907be76f7faf97a32bbed05d" - integrity sha512-Im93xRJuHHxb1wniGhBMsxLwcfzdYreSZVQGDoMJgkd6+Iky61LInGEHnQCTN0fKNYF1Dvcofb4uMmE1RQHXHQ== - -"@react-native/codegen@^0.72.7": - version "0.72.7" - resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.72.7.tgz#b6832ce631ac63143024ea094a6b5480a780e589" - integrity sha512-O7xNcGeXGbY+VoqBGNlZ3O05gxfATlwE1Q1qQf5E38dK+tXn5BY4u0jaQ9DPjfE8pBba8g/BYI1N44lynidMtg== - dependencies: - "@babel/parser" "^7.20.0" - flow-parser "^0.206.0" - jscodeshift "^0.14.0" + ws "^6.2.3" + +"@react-native/gradle-plugin@0.76.5": + version "0.76.5" + resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.76.5.tgz#90d55ec3a99c609358db97b2d7444b28fdc35bc0" + integrity sha512-7KSyD0g0KhbngITduC8OABn0MAlJfwjIdze7nA4Oe1q3R7qmAv+wQzW+UEXvPah8m1WqFjYTkQwz/4mK3XrQGw== + +"@react-native/js-polyfills@0.76.5": + version "0.76.5" + resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.76.5.tgz#8f35696d96f804de589cd38382c4f0ffbbc248d5" + integrity sha512-ggM8tcKTcaqyKQcXMIvcB0vVfqr9ZRhWVxWIdiFO1mPvJyS6n+a+lLGkgQAyO8pfH0R1qw6K9D0nqbbDo865WQ== + +"@react-native/metro-babel-transformer@0.76.5": + version "0.76.5" + resolved "https://registry.yarnpkg.com/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.76.5.tgz#ed5a05fff34c47af43eba4069e50be7c486f77bd" + integrity sha512-Cm9G5Sg5BDty3/MKa3vbCAJtT3YHhlEaPlQALLykju7qBS+pHZV9bE9hocfyyvc5N/osTIGWxG5YOfqTeMu1oQ== + dependencies: + "@babel/core" "^7.25.2" + "@react-native/babel-preset" "0.76.5" + hermes-parser "0.23.1" nullthrows "^1.1.1" -"@react-native/gradle-plugin@^0.72.11": - version "0.72.11" - resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.72.11.tgz#c063ef12778706611de7a1e42b74b14d9405fb9f" - integrity sha512-P9iRnxiR2w7EHcZ0mJ+fmbPzMby77ZzV6y9sJI3lVLJzF7TLSdbwcQyD3lwMsiL+q5lKUHoZJS4sYmih+P2HXw== - -"@react-native/js-polyfills@^0.72.1": - version "0.72.1" - resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.72.1.tgz#905343ef0c51256f128256330fccbdb35b922291" - integrity sha512-cRPZh2rBswFnGt5X5EUEPs0r+pAsXxYsifv/fgy9ZLQokuT52bPH+9xjDR+7TafRua5CttGW83wP4TntRcWNDA== - -"@react-native/normalize-colors@<0.73.0", "@react-native/normalize-colors@^0.72.0": - version "0.72.0" - resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.72.0.tgz#14294b7ed3c1d92176d2a00df48456e8d7d62212" - integrity sha512-285lfdqSXaqKuBbbtP9qL2tDrfxdOFtIMvkKadtleRQkdOxx+uzGvFr82KHmc/sSiMtfXGp7JnFYWVh4sFl7Yw== +"@react-native/normalize-colors@0.76.5": + version "0.76.5" + resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.76.5.tgz#a33560736311aefcf1d3cb594597befe81a9a53c" + integrity sha512-6QRLEok1r55gLqj+94mEWUENuU5A6wsr2OoXpyq/CgQ7THWowbHtru/kRGRr6o3AQXrVnZheR60JNgFcpNYIug== -"@react-native/virtualized-lists@^0.72.8": - version "0.72.8" - resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.72.8.tgz#a2c6a91ea0f1d40eb5a122fb063daedb92ed1dc3" - integrity sha512-J3Q4Bkuo99k7mu+jPS9gSUSgq+lLRSI/+ahXNwV92XgJ/8UgOTxu2LPwhJnBk/sQKxq7E8WkZBnBiozukQMqrw== +"@react-native/virtualized-lists@0.76.5": + version "0.76.5" + resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.76.5.tgz#394c2d48687db30c79278d183fda8a129a2d24d3" + integrity sha512-M/fW1fTwxrHbcx0OiVOIxzG6rKC0j9cR9Csf80o77y1Xry0yrNPpAlf8D1ev3LvHsiAUiRNFlauoPtodrs2J1A== dependencies: invariant "^2.2.4" nullthrows "^1.1.1" -"@sideway/address@^4.1.3": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" - integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== - dependencies: - "@hapi/hoek" "^9.0.0" - -"@sideway/formula@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" - integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== - -"@sideway/pinpoint@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" - integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== - "@sinclair/typebox@^0.27.8": version "0.27.8" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" @@ -1533,6 +2055,46 @@ dependencies: "@sinonjs/commons" "^3.0.0" +"@types/babel__core@^7.1.14": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.8" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.6" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" + integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== + dependencies: + "@babel/types" "^7.20.7" + +"@types/graceful-fs@^4.1.3": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== + dependencies: + "@types/node" "*" + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": version "2.0.4" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" @@ -1552,6 +2114,13 @@ dependencies: "@types/istanbul-lib-report" "*" +"@types/node-forge@^1.3.0": + version "1.3.11" + resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.11.tgz#0972ea538ddb0f4d9c2fa0ec5db5724773a604da" + integrity sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ== + dependencies: + "@types/node" "*" + "@types/node@*": version "20.5.1" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.1.tgz#178d58ee7e4834152b0e8b4d30cbfab578b9bb30" @@ -1568,17 +2137,11 @@ integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== "@types/react@file:../../shared/node_modules/@types/react": - version "18.2.39" + version "18.3.17" dependencies: "@types/prop-types" "*" - "@types/scheduler" "*" csstype "^3.0.2" -"@types/scheduler@*": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" - integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== - "@types/stack-utils@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" @@ -1589,20 +2152,6 @@ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== -"@types/yargs@^15.0.0": - version "15.0.15" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.15.tgz#e609a2b1ef9e05d90489c2f5f45bbfb2be092158" - integrity sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg== - dependencies: - "@types/yargs-parser" "*" - -"@types/yargs@^16.0.0": - version "16.0.5" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.5.tgz#12cc86393985735a283e387936398c2f9e5f88e3" - integrity sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ== - dependencies: - "@types/yargs-parser" "*" - "@types/yargs@^17.0.8": version "17.0.24" resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" @@ -1617,7 +2166,7 @@ abort-controller@^3.0.0: dependencies: event-target-shim "^5.0.0" -accepts@^1.3.7, accepts@~1.3.5, accepts@~1.3.7: +accepts@^1.3.7: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== @@ -1643,26 +2192,12 @@ anser@^1.4.9: resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.10.tgz#befa3eddf282684bd03b63dcda3927aef8c2e35b" integrity sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww== -ansi-fragments@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/ansi-fragments/-/ansi-fragments-0.2.1.tgz#24409c56c4cc37817c3d7caa99d8969e2de5a05e" - integrity sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w== - dependencies: - colorette "^1.0.7" - slice-ansi "^2.0.0" - strip-ansi "^5.0.0" - -ansi-regex@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== - ansi-regex@^5.0.0, ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -1689,11 +2224,6 @@ anymatch@^3.0.3: normalize-path "^3.0.0" picomatch "^2.0.4" -appdirsjs@^1.2.4: - version "1.2.7" - resolved "https://registry.yarnpkg.com/appdirsjs/-/appdirsjs-1.2.7.tgz#50b4b7948a26ba6090d4aede2ae2dc2b051be3b3" - integrity sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw== - argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -1718,26 +2248,59 @@ ast-types@0.15.2: dependencies: tslib "^2.0.1" -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - async-limiter@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async@^3.2.2: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== - babel-core@^7.0.0-bridge.0: version "7.0.0-bridge.0" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== + dependencies: + "@jest/transform" "^29.7.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.6.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-polyfill-corejs2@^0.4.10: + version "0.4.12" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz#ca55bbec8ab0edeeef3d7b8ffd75322e210879a9" + integrity sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og== + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.6.3" + semver "^6.3.1" + babel-plugin-polyfill-corejs2@^0.4.5: version "0.4.5" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" @@ -1747,6 +2310,14 @@ babel-plugin-polyfill-corejs2@^0.4.5: "@babel/helper-define-polyfill-provider" "^0.4.2" semver "^6.3.1" +babel-plugin-polyfill-corejs3@^0.10.6: + version "0.10.6" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz#2deda57caef50f59c525aeb4964d3b2f867710c7" + integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.2" + core-js-compat "^3.38.0" + babel-plugin-polyfill-corejs3@^0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz#b4f719d0ad9bb8e0c23e3e630c0c8ec6dd7a1c52" @@ -1762,10 +2333,26 @@ babel-plugin-polyfill-regenerator@^0.5.2: dependencies: "@babel/helper-define-polyfill-provider" "^0.4.2" -babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: - version "7.0.0-beta.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf" - integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ== +babel-plugin-polyfill-regenerator@^0.6.1: + version "0.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz#abeb1f3f1c762eace37587f42548b08b57789bc8" + integrity sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.3" + +babel-plugin-syntax-hermes-parser@^0.23.1: + version "0.23.1" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.23.1.tgz#470e9d1d30ad670d4c8a37138e22ae39c843d1ff" + integrity sha512-uNLD0tk2tLUjGFdmCk+u/3FEw2o+BAwW4g+z2QVlxJrzZYOOPADroEcNtTPt5lNiScctaUmnsTkVEnOwZUOLhA== + dependencies: + hermes-parser "0.23.1" + +babel-plugin-syntax-hermes-parser@^0.25.1: + version "0.25.1" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.25.1.tgz#58b539df973427fcfbb5176a3aec7e5dee793cb0" + integrity sha512-IVNpGzboFLfXZUAwkLFcI/bnqVbwky0jP3eBno4HKtqvQJAHBLdgxiG6lQ4to0+Q/YCN3PO0od5NZwIKyY4REQ== + dependencies: + hermes-parser "0.25.1" babel-plugin-transform-flow-enums@^0.0.2: version "0.0.2" @@ -1774,58 +2361,45 @@ babel-plugin-transform-flow-enums@^0.0.2: dependencies: "@babel/plugin-syntax-flow" "^7.12.1" -babel-preset-fbjs@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz#38a14e5a7a3b285a3f3a86552d650dca5cf6111c" - integrity sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow== - dependencies: - "@babel/plugin-proposal-class-properties" "^7.0.0" - "@babel/plugin-proposal-object-rest-spread" "^7.0.0" - "@babel/plugin-syntax-class-properties" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - "@babel/plugin-transform-arrow-functions" "^7.0.0" - "@babel/plugin-transform-block-scoped-functions" "^7.0.0" - "@babel/plugin-transform-block-scoping" "^7.0.0" - "@babel/plugin-transform-classes" "^7.0.0" - "@babel/plugin-transform-computed-properties" "^7.0.0" - "@babel/plugin-transform-destructuring" "^7.0.0" - "@babel/plugin-transform-flow-strip-types" "^7.0.0" - "@babel/plugin-transform-for-of" "^7.0.0" - "@babel/plugin-transform-function-name" "^7.0.0" - "@babel/plugin-transform-literals" "^7.0.0" - "@babel/plugin-transform-member-expression-literals" "^7.0.0" - "@babel/plugin-transform-modules-commonjs" "^7.0.0" - "@babel/plugin-transform-object-super" "^7.0.0" - "@babel/plugin-transform-parameters" "^7.0.0" - "@babel/plugin-transform-property-literals" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.0.0" - "@babel/plugin-transform-spread" "^7.0.0" - "@babel/plugin-transform-template-literals" "^7.0.0" - babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0" +babel-preset-current-node-syntax@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz#9a929eafece419612ef4ae4f60b1862ebad8ef30" + integrity sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-import-attributes" "^7.24.7" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== + dependencies: + babel-plugin-jest-hoist "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.1.2, base64-js@^1.3.1: +base64-js@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -bl@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1858,6 +2432,16 @@ browserslist@^4.20.4, browserslist@^4.21.10, browserslist@^4.21.9: node-releases "^2.0.13" update-browserslist-db "^1.0.11" +browserslist@^4.24.0, browserslist@^4.24.2: + version "4.24.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.3.tgz#5fc2725ca8fb3c1432e13dac278c7cc103e026d2" + integrity sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA== + dependencies: + caniuse-lite "^1.0.30001688" + electron-to-chromium "^1.5.73" + node-releases "^2.0.19" + update-browserslist-db "^1.1.1" + bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -1870,19 +2454,6 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== - caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" @@ -1907,7 +2478,7 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase@^5.0.0: +camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== @@ -1922,6 +2493,11 @@ caniuse-lite@^1.0.30001517: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001522.tgz#44b87a406c901269adcdb834713e23582dd71856" integrity sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg== +caniuse-lite@^1.0.30001688: + version "1.0.30001689" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001689.tgz#67ca960dd5f443903e19949aeacc9d28f6e10910" + integrity sha512-CmeR2VBycfa+5/jOfnp/NpWPGd06nf1XYiefUvhXFfZE4GkRc9jv+eGPS4nT558WS/8lYCzV8SlANCIPvbWP1g== + chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -1931,7 +2507,7 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -1939,6 +2515,28 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" +chrome-launcher@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/chrome-launcher/-/chrome-launcher-0.15.2.tgz#4e6404e32200095fdce7f6a1e1004f9bd36fa5da" + integrity sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ== + dependencies: + "@types/node" "*" + escape-string-regexp "^4.0.0" + is-wsl "^2.2.0" + lighthouse-logger "^1.0.0" + +chromium-edge-launcher@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/chromium-edge-launcher/-/chromium-edge-launcher-0.2.0.tgz#0c378f28c99aefc360705fa155de0113997f62fc" + integrity sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg== + dependencies: + "@types/node" "*" + escape-string-regexp "^4.0.0" + is-wsl "^2.2.0" + lighthouse-logger "^1.0.0" + mkdirp "^1.0.4" + rimraf "^3.0.2" + ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -1954,27 +2552,6 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.5.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db" - integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g== - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - cliui@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" @@ -1993,11 +2570,6 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -2022,55 +2594,20 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^1.0.7: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" - integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== - -command-exists@^1.2.8: - version "1.2.9" - resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" - integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== +commander@^12.0.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" + integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^9.4.1: - version "9.5.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" - integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== - -commander@~2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" - integrity sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.7.1: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== concat-map@0.0.1: version "0.0.1" @@ -2092,6 +2629,11 @@ convert-source-map@^1.7.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + core-js-compat@^3.31.0: version "3.32.1" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.1.tgz#55f9a7d297c0761a8eb1d31b593e0f5b6ffae964" @@ -2099,12 +2641,19 @@ core-js-compat@^3.31.0: dependencies: browserslist "^4.21.10" +core-js-compat@^3.38.0: + version "3.39.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.39.0.tgz#b12dccb495f2601dc860bdbe7b4e3ffa8ba63f61" + integrity sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw== + dependencies: + browserslist "^4.24.2" + core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cosmiconfig@^5.0.5, cosmiconfig@^5.1.0: +cosmiconfig@^5.0.5: version "5.2.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== @@ -2139,12 +2688,7 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== -dayjs@^1.8.15: - version "1.11.9" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.9.tgz#9ca491933fadd0a60a2c19f6c237c03517d71d1a" - integrity sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA== - -debug@2.6.9, debug@^2.2.0: +debug@2.6.9, debug@^2.2.0, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -2158,28 +2702,18 @@ debug@^4.1.0, debug@^4.1.1: dependencies: ms "2.1.2" -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== +debug@^4.3.1: + version "4.3.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" + integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== + dependencies: + ms "2.1.2" dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== -deepmerge@^4.3.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== - dependencies: - clone "^1.0.2" - del@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" @@ -2204,15 +2738,6 @@ depd@2.0.0: resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -deprecated-react-native-prop-types@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-4.2.3.tgz#0ef845c1a80ef1636bd09060e4cdf70f9727e5ad" - integrity sha512-2rLTiMKidIFFYpIVM69UnQKngLqQfL6I11Ch8wGSBftS18FUXda+o2we2950X+1dmbgps28niI3qwyH4eX3Z1g== - dependencies: - "@react-native/normalize-colors" "<0.73.0" - invariant "^2.2.4" - prop-types "^15.8.1" - destroy@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" @@ -2235,6 +2760,11 @@ electron-to-chromium@^1.4.477: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.496.tgz#a57534b70d2bdee7e1ad7dbd4c91e560cbd08db1" integrity sha512-qeXC3Zbykq44RCrBa4kr8v/dWzYJA8rAwpyh9Qd+NKWoJfjG5vvJqy9XOJ9H4P/lqulZBCgUWAYi+FeK5AuJ8g== +electron-to-chromium@^1.5.73: + version "1.5.74" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.74.tgz#cb886b504a6467e4c00bea3317edb38393c53413" + integrity sha512-ck3//9RC+6oss/1Bh9tiAVFy5vfSKbRHAFh7Z3/eTRkEqJeWgymloShB17Vg3Z4nmDNp35vAd1BZ6CMW4Wt6Iw== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -2252,11 +2782,6 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" -envinfo@^7.7.2: - version "7.10.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.10.0.tgz#55146e3909cc5fe63c22da63fb15b05aeac35b13" - integrity sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw== - error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -2271,19 +2796,16 @@ error-stack-parser@^2.0.6: dependencies: stackframe "^1.3.4" -errorhandler@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/errorhandler/-/errorhandler-1.5.1.tgz#b9ba5d17cf90744cd1e851357a6e75bf806a9a91" - integrity sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A== - dependencies: - accepts "~1.3.7" - escape-html "~1.0.3" - escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -2299,6 +2821,11 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + esprima@^4.0.0, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -2334,7 +2861,7 @@ execa@^4.0.3: signal-exit "^3.0.2" strip-final-newline "^2.0.0" -execa@^5.0.0: +execa@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== @@ -2349,6 +2876,11 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +exponential-backoff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" + integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== + fast-glob@^3.2.9: version "3.3.1" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" @@ -2360,12 +2892,10 @@ fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" -fast-xml-parser@^4.0.12: - version "4.2.7" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.2.7.tgz#871f2ca299dc4334b29f8da3658c164e68395167" - integrity sha512-J8r6BriSLO1uj2miOk1NW0YVm8AGOOu3Si2HQp/cSmo6EA4m3fcwu2WKjJ4RK9wMLBtg69y1kS8baDiQBR41Ig== - dependencies: - strnum "^1.0.5" +fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fastq@^1.6.0: version "1.15.0" @@ -2425,29 +2955,16 @@ find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flow-enums-runtime@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/flow-enums-runtime/-/flow-enums-runtime-0.0.5.tgz#95884bfcc82edaf27eef7e1dd09732331cfbafbc" - integrity sha512-PSZF9ZuaZD03sT9YaIs0FrGJ7lSUw7rHZIex+73UYVXg46eL/wxN5PaVcPJFudE2cJu5f0fezitV5aBkLHPUOQ== +flow-enums-runtime@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz#5bb0cd1b0a3e471330f4d109039b7eba5cb3e787" + integrity sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw== flow-parser@0.*: version "0.214.0" resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.214.0.tgz#455efc841ec015c62f6dec022cf6c61480f231a2" integrity sha512-RW1Dh6BuT14DA7+gtNRKzgzvG3GTPdrceHCi4ddZ9VFGQ9HtO5L8wzxMGsor7XtInIrbWZZCSak0oxnBF7tApw== -flow-parser@^0.206.0: - version "0.206.0" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.206.0.tgz#f4f794f8026535278393308e01ea72f31000bfef" - integrity sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w== - fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -2462,15 +2979,6 @@ fs-extra@^10.1.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -2491,11 +2999,16 @@ gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^2.0.1, get-caller-file@^2.0.5: +get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + get-stream@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" @@ -2515,7 +3028,7 @@ glob-parent@^5.1.2: dependencies: is-glob "^4.0.1" -glob@^7.1.3: +glob@^7.1.1, glob@^7.1.3, glob@^7.1.4: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -2555,7 +3068,7 @@ globby@^11.0.1: merge2 "^1.4.1" slash "^3.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: +graceful-fs@^4.1.11, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -2577,24 +3090,41 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hermes-estree@0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.12.0.tgz#8a289f9aee854854422345e6995a48613bac2ca8" - integrity sha512-+e8xR6SCen0wyAKrMT3UD0ZCCLymKhRgjEB5sS28rKiFir/fXgLoeRilRUssFCILmGHb+OvHDUlhxs0+IEyvQw== +hermes-estree@0.23.1: + version "0.23.1" + resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.23.1.tgz#d0bac369a030188120ee7024926aabe5a9f84fdb" + integrity sha512-eT5MU3f5aVhTqsfIReZ6n41X5sYn4IdQL0nvz6yO+MMlPxw49aSARHLg/MSehQftyjnrE8X6bYregzSumqc6cg== -hermes-parser@0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.12.0.tgz#114dc26697cfb41a6302c215b859b74224383773" - integrity sha512-d4PHnwq6SnDLhYl3LHNHvOg7nQ6rcI7QVil418REYksv0Mh3cEkHDcuhGxNQ3vgnLSLl4QSvDrFCwQNYdpWlzw== +hermes-estree@0.24.0: + version "0.24.0" + resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.24.0.tgz#487dc1ddc0bae698c2d79f34153ac9bf62d7b3c0" + integrity sha512-LyoXLB7IFzeZW0EvAbGZacbxBN7t6KKSDqFJPo3Ydow7wDlrDjXwsdiAHV6XOdvEN9MEuWXsSIFN4tzpyrXIHw== + +hermes-estree@0.25.1: + version "0.25.1" + resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.25.1.tgz#6aeec17d1983b4eabf69721f3aa3eb705b17f480" + integrity sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw== + +hermes-parser@0.23.1: + version "0.23.1" + resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.23.1.tgz#e5de648e664f3b3d84d01b48fc7ab164f4b68205" + integrity sha512-oxl5h2DkFW83hT4DAUJorpah8ou4yvmweUzLJmmr6YV2cezduCdlil1AvU/a/xSsAFo4WUcNA4GoV5Bvq6JffA== dependencies: - hermes-estree "0.12.0" + hermes-estree "0.23.1" -hermes-profile-transformer@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz#bd0f5ecceda80dd0ddaae443469ab26fb38fc27b" - integrity sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ== +hermes-parser@0.24.0: + version "0.24.0" + resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.24.0.tgz#2ed19d079efc0848eb1f800f0c393a074c4696fb" + integrity sha512-IJooSvvu2qNRe7oo9Rb04sUT4omtZqZqf9uq9WM25Tb6v3usmvA93UqfnnoWs5V0uYjEl9Al6MNU10MCGKLwpg== + dependencies: + hermes-estree "0.24.0" + +hermes-parser@0.25.1: + version "0.25.1" + resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.25.1.tgz#5be0e487b2090886c62bd8a11724cd766d5f54d1" + integrity sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA== dependencies: - source-map "^0.7.3" + hermes-estree "0.25.1" http-errors@2.0.0: version "2.0.0" @@ -2617,11 +3147,6 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - ignore@^5.2.0: version "5.2.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" @@ -2668,7 +3193,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -2680,11 +3205,6 @@ invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -ip@^1.1.5: - version "1.1.8" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" - integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== - is-absolute@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" @@ -2710,16 +3230,16 @@ is-directory@^0.3.1: resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw== +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -2748,11 +3268,6 @@ is-glob@^4.0.1: dependencies: is-extglob "^2.1.1" -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -2794,20 +3309,17 @@ is-unc-path@^1.0.0: dependencies: unc-path-regex "^0.1.2" -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - is-windows@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw== +is-wsl@^2.1.1, is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" isarray@~1.0.0: version "1.0.0" @@ -2824,94 +3336,118 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -jest-environment-node@^29.2.1: - version "29.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.6.2.tgz#a9ea2cabff39b08eca14ccb32c8ceb924c8bb1ad" - integrity sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ== - dependencies: - "@jest/environment" "^29.6.2" - "@jest/fake-timers" "^29.6.2" - "@jest/types" "^29.6.1" +istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-instrument@^5.0.4: + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +jest-environment-node@^29.6.3: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^29.6.2" - jest-util "^29.6.2" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== -jest-get-type@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" - integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== + dependencies: + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" -jest-message-util@^29.6.2: - version "29.6.2" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.6.2.tgz#af7adc2209c552f3f5ae31e77cf0a261f23dc2bb" - integrity sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ== +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.6.1" + "@jest/types" "^29.6.3" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^29.6.2" + pretty-format "^29.7.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^29.6.2: - version "29.6.2" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.6.2.tgz#ef9c9b4d38c34a2ad61010a021866dad41ce5e00" - integrity sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg== +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== dependencies: - "@jest/types" "^29.6.1" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-util "^29.6.2" + jest-util "^29.7.0" -jest-regex-util@^27.0.6: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" - integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== - -jest-util@^27.2.0: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" - integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== - dependencies: - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== -jest-util@^29.6.2: - version "29.6.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.6.2.tgz#8a052df8fff2eebe446769fd88814521a517664d" - integrity sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w== +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== dependencies: - "@jest/types" "^29.6.1" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^29.2.1: - version "29.6.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.6.2.tgz#25d972af35b2415b83b1373baf1a47bb266c1082" - integrity sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg== +jest-validate@^29.6.3: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== dependencies: - "@jest/types" "^29.6.1" + "@jest/types" "^29.6.3" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^29.4.3" + jest-get-type "^29.6.3" leven "^3.1.0" - pretty-format "^29.6.2" + pretty-format "^29.7.0" -jest-worker@^27.2.0: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== +jest-worker@^29.6.3, jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== dependencies: "@types/node" "*" + jest-util "^29.7.0" merge-stream "^2.0.0" supports-color "^8.0.0" @@ -2920,17 +3456,6 @@ jetifier@^2.0.0: resolved "https://registry.yarnpkg.com/jetifier/-/jetifier-2.0.0.tgz#699391367ca1fe7bc4da5f8bf691eb117758e4cb" integrity sha512-J4Au9KuT74te+PCCCHKgAjyLlEa+2VyIAEPNCdE5aNkAJ6FAJcAqcdzEkSnzNksIa9NkGmC4tPiClk2e7tCJuQ== -joi@^17.2.1: - version "17.9.2" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.9.2.tgz#8b2e4724188369f55451aebd1d0b1d9482470690" - integrity sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw== - dependencies: - "@hapi/hoek" "^9.0.0" - "@hapi/topo" "^5.0.0" - "@sideway/address" "^4.1.3" - "@sideway/formula" "^3.0.1" - "@sideway/pinpoint" "^2.0.0" - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -2984,11 +3509,21 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== +jsesc@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" + integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== + json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -2999,18 +3534,11 @@ json-parse-even-better-errors@^2.3.0: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== -json5@^2.2.1, json5@^2.2.2: +json5@^2.2.1, json5@^2.2.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" @@ -3040,6 +3568,14 @@ leven@^3.1.0: resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== +lighthouse-logger@^1.0.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz#aef90f9e97cd81db367c7634292ee22079280aaa" + integrity sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g== + dependencies: + debug "^2.6.9" + marky "^1.2.2" + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" @@ -3060,13 +3596,6 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" @@ -3077,24 +3606,7 @@ lodash.throttle@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ== -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -logkitty@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/logkitty/-/logkitty-0.7.1.tgz#8e8d62f4085a826e8d38987722570234e33c6aa7" - integrity sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ== - dependencies: - ansi-fragments "^0.2.1" - dayjs "^1.8.15" - yargs "^15.1.0" - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: +loose-envify@^1.0.0, loose-envify@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -3108,13 +3620,6 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -3130,6 +3635,11 @@ makeerror@1.0.12: dependencies: tmpl "1.0.5" +marky@^1.2.2: + version "1.2.5" + resolved "https://registry.yarnpkg.com/marky/-/marky-1.2.5.tgz#55796b688cbd72390d2d399eaaf1832c9413e3c0" + integrity sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q== + memoize-one@^5.0.0: version "5.2.1" resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" @@ -3145,62 +3655,67 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -metro-babel-transformer@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.76.8.tgz#5efd1027353b36b73706164ef09c290dceac096a" - integrity sha512-Hh6PW34Ug/nShlBGxkwQJSgPGAzSJ9FwQXhUImkzdsDgVu6zj5bx258J8cJVSandjNoQ8nbaHK6CaHlnbZKbyA== +metro-babel-transformer@0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.81.0.tgz#cf468eafea52e4d8a77844eb7257f8a76e9d9d94" + integrity sha512-Dc0QWK4wZIeHnyZ3sevWGTnnSkIDDn/SWyfrn99zbKbDOCoCYy71PAn9uCRrP/hduKLJQOy+tebd63Rr9D8tXg== dependencies: - "@babel/core" "^7.20.0" - hermes-parser "0.12.0" + "@babel/core" "^7.25.2" + flow-enums-runtime "^0.0.6" + hermes-parser "0.24.0" nullthrows "^1.1.1" -metro-cache-key@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.76.8.tgz#8a0a5e991c06f56fcc584acadacb313c312bdc16" - integrity sha512-buKQ5xentPig9G6T37Ww/R/bC+/V1MA5xU/D8zjnhlelsrPG6w6LtHUS61ID3zZcMZqYaELWk5UIadIdDsaaLw== +metro-cache-key@0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.81.0.tgz#5db34fa1a323a2310205bda7abd0df9614e36f45" + integrity sha512-qX/IwtknP9bQZL78OK9xeSvLM/xlGfrs6SlUGgHvrxtmGTRSsxcyqxR+c+7ch1xr05n62Gin/O44QKg5V70rNQ== + dependencies: + flow-enums-runtime "^0.0.6" -metro-cache@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.76.8.tgz#296c1c189db2053b89735a8f33dbe82575f53661" - integrity sha512-QBJSJIVNH7Hc/Yo6br/U/qQDUpiUdRgZ2ZBJmvAbmAKp2XDzsapnMwK/3BGj8JNWJF7OLrqrYHsRsukSbUBpvQ== +metro-cache@0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.81.0.tgz#90470d10d190ad708f04c6e337eec2c7cddb3db0" + integrity sha512-DyuqySicHXkHUDZFVJmh0ygxBSx6pCKUrTcSgb884oiscV/ROt1Vhye+x+OIHcsodyA10gzZtrVtxIFV4l9I4g== dependencies: - metro-core "0.76.8" - rimraf "^3.0.2" + exponential-backoff "^3.1.1" + flow-enums-runtime "^0.0.6" + metro-core "0.81.0" -metro-config@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.76.8.tgz#20bd5397fcc6096f98d2a813a7cecb38b8af062d" - integrity sha512-SL1lfKB0qGHALcAk2zBqVgQZpazDYvYFGwCK1ikz0S6Y/CM2i2/HwuZN31kpX6z3mqjv/6KvlzaKoTb1otuSAA== +metro-config@0.81.0, metro-config@^0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.81.0.tgz#8f8074033cb7e9ddb5b0459642adf6880bc9fbc1" + integrity sha512-6CinEaBe3WLpRlKlYXXu8r1UblJhbwD6Gtnoib5U8j6Pjp7XxMG9h/DGMeNp9aGLDu1OieUqiXpFo7O0/rR5Kg== dependencies: connect "^3.6.5" cosmiconfig "^5.0.5" - jest-validate "^29.2.1" - metro "0.76.8" - metro-cache "0.76.8" - metro-core "0.76.8" - metro-runtime "0.76.8" - -metro-core@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.76.8.tgz#917c8157c63406cb223522835abb8e7c6291dcad" - integrity sha512-sl2QLFI3d1b1XUUGxwzw/KbaXXU/bvFYrSKz6Sg19AdYGWFyzsgZ1VISRIDf+HWm4R/TJXluhWMEkEtZuqi3qA== - dependencies: + flow-enums-runtime "^0.0.6" + jest-validate "^29.6.3" + metro "0.81.0" + metro-cache "0.81.0" + metro-core "0.81.0" + metro-runtime "0.81.0" + +metro-core@0.81.0, metro-core@^0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.81.0.tgz#d0b634f9cf97849b7730c59457ab7a439811d4c8" + integrity sha512-CVkM5YCOAFkNMvJai6KzA0RpztzfEKRX62/PFMOJ9J7K0uq/UkOFLxcgpcncMIrfy0PbfEj811b69tjULUQe1Q== + dependencies: + flow-enums-runtime "^0.0.6" lodash.throttle "^4.1.1" - metro-resolver "0.76.8" + metro-resolver "0.81.0" -metro-file-map@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.76.8.tgz#a1db1185b6c316904ba6b53d628e5d1323991d79" - integrity sha512-A/xP1YNEVwO1SUV9/YYo6/Y1MmzhL4ZnVgcJC3VmHp/BYVOXVStzgVbWv2wILe56IIMkfXU+jpXrGKKYhFyHVw== +metro-file-map@0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.81.0.tgz#af0ccf4f8db4fd8429f78f231faa49dde2c402c3" + integrity sha512-zMDI5uYhQCyxbye/AuFx/pAbsz9K+vKL7h1ShUXdN2fz4VUPiyQYRsRqOoVG1DsiCgzd5B6LW0YW77NFpjDQeg== dependencies: anymatch "^3.0.3" debug "^2.2.0" fb-watchman "^2.0.0" + flow-enums-runtime "^0.0.6" graceful-fs "^4.2.4" invariant "^2.2.4" - jest-regex-util "^27.0.6" - jest-util "^27.2.0" - jest-worker "^27.2.0" + jest-worker "^29.6.3" micromatch "^4.0.4" node-abort-controller "^3.1.1" nullthrows "^1.1.1" @@ -3208,207 +3723,135 @@ metro-file-map@0.76.8: optionalDependencies: fsevents "^2.3.2" -metro-inspector-proxy@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.76.8.tgz#6b8678a7461b0b42f913a7881cc9319b4d3cddff" - integrity sha512-Us5o5UEd4Smgn1+TfHX4LvVPoWVo9VsVMn4Ldbk0g5CQx3Gu0ygc/ei2AKPGTwsOZmKxJeACj7yMH2kgxQP/iw== - dependencies: - connect "^3.6.5" - debug "^2.2.0" - node-fetch "^2.2.0" - ws "^7.5.1" - yargs "^17.6.2" - -metro-minify-terser@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.76.8.tgz#915ab4d1419257fc6a0b9fa15827b83fe69814bf" - integrity sha512-Orbvg18qXHCrSj1KbaeSDVYRy/gkro2PC7Fy2tDSH1c9RB4aH8tuMOIXnKJE+1SXxBtjWmQ5Yirwkth2DyyEZA== +metro-minify-terser@0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.81.0.tgz#8b0abe977d63a99b99fa94d53678ef3170d5b659" + integrity sha512-U2ramh3W822ZR1nfXgIk+emxsf5eZSg10GbQrT0ZizImK8IZ5BmJY+BHRIkQgHzWFpExOVxC7kWbGL1bZALswA== dependencies: + flow-enums-runtime "^0.0.6" terser "^5.15.0" -metro-minify-uglify@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.76.8.tgz#74745045ea2dd29f8783db483b2fce58385ba695" - integrity sha512-6l8/bEvtVaTSuhG1FqS0+Mc8lZ3Bl4RI8SeRIifVLC21eeSDp4CEBUWSGjpFyUDfi6R5dXzYaFnSgMNyfxADiQ== - dependencies: - uglify-es "^3.1.9" - -metro-react-native-babel-preset@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.76.8.tgz#7476efae14363cbdfeeec403b4f01d7348e6c048" - integrity sha512-Ptza08GgqzxEdK8apYsjTx2S8WDUlS2ilBlu9DR1CUcHmg4g3kOkFylZroogVAUKtpYQNYwAvdsjmrSdDNtiAg== - dependencies: - "@babel/core" "^7.20.0" - "@babel/plugin-proposal-async-generator-functions" "^7.0.0" - "@babel/plugin-proposal-class-properties" "^7.18.0" - "@babel/plugin-proposal-export-default-from" "^7.0.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.0" - "@babel/plugin-proposal-numeric-separator" "^7.0.0" - "@babel/plugin-proposal-object-rest-spread" "^7.20.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" - "@babel/plugin-proposal-optional-chaining" "^7.20.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - "@babel/plugin-syntax-export-default-from" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.18.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" - "@babel/plugin-syntax-optional-chaining" "^7.0.0" - "@babel/plugin-transform-arrow-functions" "^7.0.0" - "@babel/plugin-transform-async-to-generator" "^7.20.0" - "@babel/plugin-transform-block-scoping" "^7.0.0" - "@babel/plugin-transform-classes" "^7.0.0" - "@babel/plugin-transform-computed-properties" "^7.0.0" - "@babel/plugin-transform-destructuring" "^7.20.0" - "@babel/plugin-transform-flow-strip-types" "^7.20.0" - "@babel/plugin-transform-function-name" "^7.0.0" - "@babel/plugin-transform-literals" "^7.0.0" - "@babel/plugin-transform-modules-commonjs" "^7.0.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.0.0" - "@babel/plugin-transform-parameters" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-react-jsx-self" "^7.0.0" - "@babel/plugin-transform-react-jsx-source" "^7.0.0" - "@babel/plugin-transform-runtime" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.0.0" - "@babel/plugin-transform-spread" "^7.0.0" - "@babel/plugin-transform-sticky-regex" "^7.0.0" - "@babel/plugin-transform-typescript" "^7.5.0" - "@babel/plugin-transform-unicode-regex" "^7.0.0" - "@babel/template" "^7.0.0" - babel-plugin-transform-flow-enums "^0.0.2" - react-refresh "^0.4.0" - -metro-react-native-babel-transformer@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.76.8.tgz#c3a98e1f4cd5faf1e21eba8e004b94a90c4db69b" - integrity sha512-3h+LfS1WG1PAzhq8QF0kfXjxuXetbY/lgz8vYMQhgrMMp17WM1DNJD0gjx8tOGYbpbBC1qesJ45KMS4o5TA73A== +metro-resolver@0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.81.0.tgz#141f4837e1e0c5a1810ea02f2d9be3c9f6cf3766" + integrity sha512-Uu2Q+buHhm571cEwpPek8egMbdSTqmwT/5U7ZVNpK6Z2ElQBBCxd7HmFAslKXa7wgpTO2FAn6MqGeERbAtVDUA== dependencies: - "@babel/core" "^7.20.0" - babel-preset-fbjs "^3.4.0" - hermes-parser "0.12.0" - metro-react-native-babel-preset "0.76.8" - nullthrows "^1.1.1" + flow-enums-runtime "^0.0.6" -metro-resolver@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.76.8.tgz#0862755b9b84e26853978322464fb37c6fdad76d" - integrity sha512-KccOqc10vrzS7ZhG2NSnL2dh3uVydarB7nOhjreQ7C4zyWuiW9XpLC4h47KtGQv3Rnv/NDLJYeDqaJ4/+140HQ== - -metro-runtime@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.76.8.tgz#74b2d301a2be5f3bbde91b8f1312106f8ffe50c3" - integrity sha512-XKahvB+iuYJSCr3QqCpROli4B4zASAYpkK+j3a0CJmokxCDNbgyI4Fp88uIL6rNaZfN0Mv35S0b99SdFXIfHjg== +metro-runtime@0.81.0, metro-runtime@^0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.81.0.tgz#63af9b3fec15d1f307d89ef4881f5ba2c592291e" + integrity sha512-6oYB5HOt37RuGz2eV4A6yhcl+PUTwJYLDlY9vhT+aVjbUWI6MdBCf69vc4f5K5Vpt+yOkjy+2LDwLS0ykWFwYw== dependencies: - "@babel/runtime" "^7.0.0" - react-refresh "^0.4.0" + "@babel/runtime" "^7.25.0" + flow-enums-runtime "^0.0.6" -metro-source-map@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.76.8.tgz#f085800152a6ba0b41ca26833874d31ec36c5a53" - integrity sha512-Hh0ncPsHPVf6wXQSqJqB3K9Zbudht4aUtNpNXYXSxH+pteWqGAXnjtPsRAnCsCWl38wL0jYF0rJDdMajUI3BDw== +metro-source-map@0.81.0, metro-source-map@^0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.81.0.tgz#ca83964124bb227d5f0bdb1ee304dbfe635f869e" + integrity sha512-TzsVxhH83dyxg4A4+L1nzNO12I7ps5IHLjKGZH3Hrf549eiZivkdjYiq/S5lOB+p2HiQ+Ykcwtmcja95LIC62g== dependencies: - "@babel/traverse" "^7.20.0" - "@babel/types" "^7.20.0" + "@babel/traverse" "^7.25.3" + "@babel/traverse--for-generate-function-map" "npm:@babel/traverse@^7.25.3" + "@babel/types" "^7.25.2" + flow-enums-runtime "^0.0.6" invariant "^2.2.4" - metro-symbolicate "0.76.8" + metro-symbolicate "0.81.0" nullthrows "^1.1.1" - ob1 "0.76.8" + ob1 "0.81.0" source-map "^0.5.6" vlq "^1.0.0" -metro-symbolicate@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.76.8.tgz#f102ac1a306d51597ecc8fdf961c0a88bddbca03" - integrity sha512-LrRL3uy2VkzrIXVlxoPtqb40J6Bf1mlPNmUQewipc3qfKKFgtPHBackqDy1YL0njDsWopCKcfGtFYLn0PTUn3w== +metro-symbolicate@0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.81.0.tgz#b7b1eae8bfd6ad2a922fa2bcb9f2144e464adafb" + integrity sha512-C/1rWbNTPYp6yzID8IPuQPpVGzJ2rbWYBATxlvQ9dfK5lVNoxcwz77hjcY8ISLsRRR15hyd/zbjCNKPKeNgE1Q== dependencies: + flow-enums-runtime "^0.0.6" invariant "^2.2.4" - metro-source-map "0.76.8" + metro-source-map "0.81.0" nullthrows "^1.1.1" source-map "^0.5.6" through2 "^2.0.1" vlq "^1.0.0" -metro-transform-plugins@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.76.8.tgz#d77c28a6547a8e3b72250f740fcfbd7f5408f8ba" - integrity sha512-PlkGTQNqS51Bx4vuufSQCdSn2R2rt7korzngo+b5GCkeX5pjinPjnO2kNhQ8l+5bO0iUD/WZ9nsM2PGGKIkWFA== +metro-transform-plugins@0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.81.0.tgz#614c0e50593df545487b3f3383fed810c608fb32" + integrity sha512-uErLAPBvttGCrmGSCa0dNHlOTk3uJFVEVWa5WDg6tQ79PRmuYRwzUgLhVzn/9/kyr75eUX3QWXN79Jvu4txt6Q== dependencies: - "@babel/core" "^7.20.0" - "@babel/generator" "^7.20.0" - "@babel/template" "^7.0.0" - "@babel/traverse" "^7.20.0" + "@babel/core" "^7.25.2" + "@babel/generator" "^7.25.0" + "@babel/template" "^7.25.0" + "@babel/traverse" "^7.25.3" + flow-enums-runtime "^0.0.6" nullthrows "^1.1.1" -metro-transform-worker@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.76.8.tgz#b9012a196cee205170d0c899b8b175b9305acdea" - integrity sha512-mE1fxVAnJKmwwJyDtThildxxos9+DGs9+vTrx2ktSFMEVTtXS/bIv2W6hux1pqivqAfyJpTeACXHk5u2DgGvIQ== - dependencies: - "@babel/core" "^7.20.0" - "@babel/generator" "^7.20.0" - "@babel/parser" "^7.20.0" - "@babel/types" "^7.20.0" - babel-preset-fbjs "^3.4.0" - metro "0.76.8" - metro-babel-transformer "0.76.8" - metro-cache "0.76.8" - metro-cache-key "0.76.8" - metro-source-map "0.76.8" - metro-transform-plugins "0.76.8" +metro-transform-worker@0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.81.0.tgz#43e63c95014f36786f0e1a132c778c6392950de7" + integrity sha512-HrQ0twiruhKy0yA+9nK5bIe3WQXZcC66PXTvRIos61/EASLAP2DzEmW7IxN/MGsfZegN2UzqL2CG38+mOB45vg== + dependencies: + "@babel/core" "^7.25.2" + "@babel/generator" "^7.25.0" + "@babel/parser" "^7.25.3" + "@babel/types" "^7.25.2" + flow-enums-runtime "^0.0.6" + metro "0.81.0" + metro-babel-transformer "0.81.0" + metro-cache "0.81.0" + metro-cache-key "0.81.0" + metro-minify-terser "0.81.0" + metro-source-map "0.81.0" + metro-transform-plugins "0.81.0" nullthrows "^1.1.1" -metro@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/metro/-/metro-0.76.8.tgz#ba526808b99977ca3f9ac5a7432fd02a340d13a6" - integrity sha512-oQA3gLzrrYv3qKtuWArMgHPbHu8odZOD9AoavrqSFllkPgOtmkBvNNDLCELqv5SjBfqjISNffypg+5UGG3y0pg== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/core" "^7.20.0" - "@babel/generator" "^7.20.0" - "@babel/parser" "^7.20.0" - "@babel/template" "^7.0.0" - "@babel/traverse" "^7.20.0" - "@babel/types" "^7.20.0" +metro@0.81.0, metro@^0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/metro/-/metro-0.81.0.tgz#cffe9b7d597728dee8b57903ca155417b7c13a4f" + integrity sha512-kzdzmpL0gKhEthZ9aOV7sTqvg6NuTxDV8SIm9pf9sO8VVEbKrQk5DNcwupOUjgPPFAuKUc2NkT0suyT62hm2xg== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/core" "^7.25.2" + "@babel/generator" "^7.25.0" + "@babel/parser" "^7.25.3" + "@babel/template" "^7.25.0" + "@babel/traverse" "^7.25.3" + "@babel/types" "^7.25.2" accepts "^1.3.7" - async "^3.2.2" chalk "^4.0.0" ci-info "^2.0.0" connect "^3.6.5" debug "^2.2.0" denodeify "^1.2.1" error-stack-parser "^2.0.6" + flow-enums-runtime "^0.0.6" graceful-fs "^4.2.4" - hermes-parser "0.12.0" + hermes-parser "0.24.0" image-size "^1.0.2" invariant "^2.2.4" - jest-worker "^27.2.0" + jest-worker "^29.6.3" jsc-safe-url "^0.2.2" lodash.throttle "^4.1.1" - metro-babel-transformer "0.76.8" - metro-cache "0.76.8" - metro-cache-key "0.76.8" - metro-config "0.76.8" - metro-core "0.76.8" - metro-file-map "0.76.8" - metro-inspector-proxy "0.76.8" - metro-minify-terser "0.76.8" - metro-minify-uglify "0.76.8" - metro-react-native-babel-preset "0.76.8" - metro-resolver "0.76.8" - metro-runtime "0.76.8" - metro-source-map "0.76.8" - metro-symbolicate "0.76.8" - metro-transform-plugins "0.76.8" - metro-transform-worker "0.76.8" + metro-babel-transformer "0.81.0" + metro-cache "0.81.0" + metro-cache-key "0.81.0" + metro-config "0.81.0" + metro-core "0.81.0" + metro-file-map "0.81.0" + metro-resolver "0.81.0" + metro-runtime "0.81.0" + metro-source-map "0.81.0" + metro-symbolicate "0.81.0" + metro-transform-plugins "0.81.0" + metro-transform-worker "0.81.0" mime-types "^2.1.27" - node-fetch "^2.2.0" nullthrows "^1.1.1" - rimraf "^3.0.2" serialize-error "^2.1.0" source-map "^0.5.6" strip-ansi "^6.0.0" throat "^5.0.0" - ws "^7.5.1" + ws "^7.5.10" yargs "^17.6.2" micromatch@^4.0.4: @@ -3419,7 +3862,7 @@ micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": +mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== @@ -3436,17 +3879,12 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.4.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" - integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -minimatch@^3.0.2, minimatch@^3.1.1: +minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -3472,6 +3910,11 @@ mkdirp@^0.5.1: dependencies: minimist "^1.2.6" +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -3497,11 +3940,6 @@ neo-async@^2.5.0: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -nocache@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/nocache/-/nocache-3.0.4.tgz#5b37a56ec6e09fc7d401dceaed2eab40c8bfdf79" - integrity sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw== - node-abort-controller@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" @@ -3514,13 +3952,18 @@ node-dir@^0.1.17: dependencies: minimatch "^3.0.2" -node-fetch@^2.2.0, node-fetch@^2.6.0: +node-fetch@^2.2.0: version "2.6.13" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.13.tgz#a20acbbec73c2e09f9007de5cda17104122e0010" integrity sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA== dependencies: whatwg-url "^5.0.0" +node-forge@^1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -3531,10 +3974,10 @@ node-releases@^2.0.13: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== -node-stream-zip@^1.9.1: - version "1.15.0" - resolved "https://registry.yarnpkg.com/node-stream-zip/-/node-stream-zip-1.15.0.tgz#158adb88ed8004c6c49a396b50a6a5de3bca33ea" - integrity sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw== +node-releases@^2.0.19: + version "2.0.19" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" + integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== normalize-path@^3.0.0: version "3.0.0" @@ -3553,15 +3996,12 @@ nullthrows@^1.1.1: resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== -ob1@0.76.8: - version "0.76.8" - resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.76.8.tgz#ac4c459465b1c0e2c29aaa527e09fc463d3ffec8" - integrity sha512-dlBkJJV5M/msj9KYA9upc+nUWVwuOFFTbu28X6kZeGwcuW+JxaHSBZ70SYQnk5M+j5JbNLR6yKHmgW4M5E7X5g== - -object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== +ob1@0.81.0: + version "0.81.0" + resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.81.0.tgz#dc3154cca7aa9c2eb58f5ac63e9ee23ff4c6f520" + integrity sha512-6Cvrkxt1tqaRdWqTAMcVYEiO5i1xcF9y7t06nFdjFqkfPsEloCf8WwhXdwBpNUkVYSQlSGS7cDgVQR86miBfBQ== + dependencies: + flow-enums-runtime "^0.0.6" on-finished@2.4.1: version "2.4.1" @@ -3577,11 +4017,6 @@ on-finished@~2.3.0: dependencies: ee-first "1.1.1" -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -3596,27 +4031,13 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -open@^6.2.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" - integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== - dependencies: - is-wsl "^1.1.0" - -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" +open@^7.0.3: + version "7.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" @@ -3625,13 +4046,6 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -3646,13 +4060,6 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - p-map@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" @@ -3730,6 +4137,11 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" @@ -3740,7 +4152,7 @@ pify@^4.0.1: resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -pirates@^4.0.5: +pirates@^4.0.4, pirates@^4.0.5: version "4.0.6" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== @@ -3752,22 +4164,12 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -pretty-format@^26.5.2, pretty-format@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" - integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== - dependencies: - "@jest/types" "^26.6.2" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^17.0.1" - -pretty-format@^29.6.2: - version "29.6.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.6.2.tgz#3d5829261a8a4d89d8b9769064b29c50ed486a47" - integrity sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg== +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== dependencies: - "@jest/schemas" "^29.6.0" + "@jest/schemas" "^29.6.3" ansi-styles "^5.0.0" react-is "^18.0.0" @@ -3783,7 +4185,7 @@ promise@^8.3.0: dependencies: asap "~2.0.6" -prompts@^2.4.0, prompts@^2.4.2: +prompts@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== @@ -3791,15 +4193,6 @@ prompts@^2.4.0, prompts@^2.4.2: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.8.1: - version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -3825,29 +4218,19 @@ range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -react-devtools-core@^4.27.2: - version "4.28.0" - resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.28.0.tgz#3fa18709b24414adddadac33b6b9cea96db60f2f" - integrity sha512-E3C3X1skWBdBzwpOUbmXG8SgH6BtsluSMe+s6rRcujNKG1DGi8uIfhdhszkgDpAsMoE55hwqRUzeXCmETDBpTg== +react-devtools-core@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-5.3.1.tgz#d57f5b8f74f16e622bd6a7bc270161e4ba162666" + integrity sha512-7FSb9meX0btdBQLwdFOwt6bGqvRPabmVMMslv8fgoSPqXyuGpgQe36kx8gR86XPw7aV1yVouTp6fyZ0EH+NfUw== dependencies: shell-quote "^1.6.1" ws "^7" -"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0: +react-is@^18.0.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -react-is@^16.13.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== - react-native-builder-bob@^0.20.4: version "0.20.4" resolved "https://registry.yarnpkg.com/react-native-builder-bob/-/react-native-builder-bob-0.20.4.tgz#02df01b8dc02f1bb2d566f820e33c5d42bfb9c99" @@ -3876,72 +4259,57 @@ react-native-builder-bob@^0.20.4: jetifier "^2.0.0" "react-native@file:../../shared/node_modules/react-native": - version "0.72.7" - dependencies: - "@jest/create-cache-key-function" "^29.2.1" - "@react-native-community/cli" "11.3.10" - "@react-native-community/cli-platform-android" "11.3.10" - "@react-native-community/cli-platform-ios" "11.3.10" - "@react-native/assets-registry" "^0.72.0" - "@react-native/codegen" "^0.72.7" - "@react-native/gradle-plugin" "^0.72.11" - "@react-native/js-polyfills" "^0.72.1" - "@react-native/normalize-colors" "^0.72.0" - "@react-native/virtualized-lists" "^0.72.8" + version "0.76.5" + dependencies: + "@jest/create-cache-key-function" "^29.6.3" + "@react-native/assets-registry" "0.76.5" + "@react-native/codegen" "0.76.5" + "@react-native/community-cli-plugin" "0.76.5" + "@react-native/gradle-plugin" "0.76.5" + "@react-native/js-polyfills" "0.76.5" + "@react-native/normalize-colors" "0.76.5" + "@react-native/virtualized-lists" "0.76.5" abort-controller "^3.0.0" anser "^1.4.9" - base64-js "^1.1.2" - deprecated-react-native-prop-types "^4.2.3" + ansi-regex "^5.0.0" + babel-jest "^29.7.0" + babel-plugin-syntax-hermes-parser "^0.23.1" + base64-js "^1.5.1" + chalk "^4.0.0" + commander "^12.0.0" event-target-shim "^5.0.1" - flow-enums-runtime "^0.0.5" + flow-enums-runtime "^0.0.6" + glob "^7.1.1" invariant "^2.2.4" - jest-environment-node "^29.2.1" + jest-environment-node "^29.6.3" jsc-android "^250231.0.0" memoize-one "^5.0.0" - metro-runtime "0.76.8" - metro-source-map "0.76.8" + metro-runtime "^0.81.0" + metro-source-map "^0.81.0" mkdirp "^0.5.1" nullthrows "^1.1.1" - pretty-format "^26.5.2" + pretty-format "^29.7.0" promise "^8.3.0" - react-devtools-core "^4.27.2" - react-refresh "^0.4.0" - react-shallow-renderer "^16.15.0" + react-devtools-core "^5.3.1" + react-refresh "^0.14.0" regenerator-runtime "^0.13.2" scheduler "0.24.0-canary-efb381bbf-20230505" + semver "^7.1.3" stacktrace-parser "^0.1.10" - use-sync-external-store "^1.0.0" whatwg-fetch "^3.0.0" - ws "^6.2.2" + ws "^6.2.3" yargs "^17.6.2" -react-refresh@^0.4.0: - version "0.4.3" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.3.tgz#966f1750c191672e76e16c2efa569150cc73ab53" - integrity sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA== - -react-shallow-renderer@^16.15.0: - version "16.15.0" - resolved "https://registry.yarnpkg.com/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz#48fb2cf9b23d23cde96708fe5273a7d3446f4457" - integrity sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA== - dependencies: - object-assign "^4.1.1" - react-is "^16.12.0 || ^17.0.0 || ^18.0.0" +react-refresh@^0.14.0: + version "0.14.2" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9" + integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA== "react@file:../../shared/node_modules/react": - version "18.2.0" + version "18.3.1" dependencies: loose-envify "^1.1.0" -readable-stream@^3.4.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" @@ -3977,6 +4345,13 @@ regenerate-unicode-properties@^10.1.0: dependencies: regenerate "^1.4.2" +regenerate-unicode-properties@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0" + integrity sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA== + dependencies: + regenerate "^1.4.2" + regenerate@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" @@ -4011,6 +4386,30 @@ regexpu-core@^5.3.1: unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.1.0" +regexpu-core@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.2.0.tgz#0e5190d79e542bf294955dccabae04d3c7d53826" + integrity sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.2.0" + regjsgen "^0.8.0" + regjsparser "^0.12.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +regjsgen@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" + integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== + +regjsparser@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.12.0.tgz#0e846df6c6530586429377de56e0475583b088dc" + integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ== + dependencies: + jsesc "~3.0.2" + regjsparser@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" @@ -4023,11 +4422,6 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" @@ -4038,6 +4432,11 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + resolve@^1.14.2: version "1.22.4" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" @@ -4047,14 +4446,6 @@ resolve@^1.14.2: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -4081,16 +4472,11 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - scheduler@0.24.0-canary-efb381bbf-20230505: version "0.24.0-canary-efb381bbf-20230505" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.24.0-canary-efb381bbf-20230505.tgz#5dddc60e29f91cd7f8b983d7ce4a99c2202d178f" @@ -4098,22 +4484,28 @@ scheduler@0.24.0-canary-efb381bbf-20230505: dependencies: loose-envify "^1.1.0" +selfsigned@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0" + integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== + dependencies: + "@types/node-forge" "^1.3.0" + node-forge "^1" + semver@^5.6.0: version "5.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@^6.3.1: +semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.5.2: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" +semver@^7.1.3: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== send@0.18.0: version "0.18.0" @@ -4149,11 +4541,6 @@ serve-static@^1.13.1: parseurl "~1.3.3" send "0.18.0" -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - setprototypeof@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" @@ -4178,12 +4565,12 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shell-quote@^1.6.1, shell-quote@^1.7.3: +shell-quote@^1.6.1: version "1.8.1" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== -signal-exit@^3.0.2, signal-exit@^3.0.3: +signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -4198,15 +4585,6 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - source-map-support@^0.5.16, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" @@ -4225,11 +4603,6 @@ source-map@^0.6.0, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -4273,13 +4646,6 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -4287,13 +4653,6 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^5.0.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -4306,16 +4665,6 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strnum@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" - integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== - -sudo-prompt@^9.0.0: - version "9.2.1" - resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.2.1.tgz#77efb84309c9ca489527a4e749f287e6bdd52afd" - integrity sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw== - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -4359,6 +4708,15 @@ terser@^5.15.0: commander "^2.20.0" source-map-support "~0.5.20" +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + throat@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" @@ -4415,15 +4773,7 @@ type-fest@^0.7.1: integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== "typescript@file:../../shared/node_modules/typescript": - version "5.3.2" - -uglify-es@^3.1.9: - version "3.3.9" - resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" - integrity sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ== - dependencies: - commander "~2.13.0" - source-map "~0.6.1" + version "5.7.2" unc-path-regex@^0.1.2: version "0.1.2" @@ -4453,11 +4803,6 @@ unicode-property-aliases-ecmascript@^2.0.0: resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - universalify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" @@ -4476,12 +4821,15 @@ update-browserslist-db@^1.0.11: escalade "^3.1.1" picocolors "^1.0.0" -use-sync-external-store@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" - integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== +update-browserslist-db@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5" + integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.0" -util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== @@ -4491,30 +4839,18 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - vlq@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468" integrity sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w== -walker@^1.0.7: +walker@^1.0.7, walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== dependencies: makeerror "1.0.12" -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" - webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -4533,11 +4869,6 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -which-module@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" - integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== - which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -4545,15 +4876,6 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -4577,28 +4899,36 @@ write-file-atomic@^2.3.0: imurmurhash "^0.1.4" signal-exit "^3.0.2" -ws@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" - integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +ws@^6.2.3: + version "6.2.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.3.tgz#ccc96e4add5fd6fedbc491903075c85c5a11d9ee" + integrity sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA== dependencies: async-limiter "~1.0.0" -ws@^7, ws@^7.5.1: +ws@^7: version "7.5.9" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== +ws@^7.5.10: + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== + xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - y18n@^5.0.5: version "5.0.8" resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" @@ -4609,51 +4939,16 @@ yallist@^3.0.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - yaml@^1.10.0: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yaml@^2.2.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" - integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== - -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^15.1.0: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - yargs@^17.5.1, yargs@^17.6.2: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" @@ -4666,8 +4961,3 @@ yargs@^17.5.1, yargs@^17.6.2: string-width "^4.2.3" y18n "^5.0.5" yargs-parser "^21.1.1" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/shared/.eslintignore b/shared/.eslintignore deleted file mode 100644 index ffcf69ad4572..000000000000 --- a/shared/.eslintignore +++ /dev/null @@ -1,18 +0,0 @@ -override-d.ts/** -babel.config.js -coverage -desktop/build/** -desktop/dist/** -desktop/release/** -desktop/renderer/renderer-load.desktop.js -desktop/webpack.config.babel.js -markdown/parser.js -metro.config.js -node_modules -react-native/react-native-contacts -react-native/wipe-cache.js -rn-cli.config.js -rn-transformer.js -common-adapters/icon.constants-gen.desktop.tsx -common-adapters/icon.constants-gen.native.tsx -common-adapters/icon.constants-gen.shared.tsx diff --git a/shared/.eslintrc.js b/shared/.eslintrc.js deleted file mode 100644 index 1945dc8e9ac4..000000000000 --- a/shared/.eslintrc.js +++ /dev/null @@ -1,318 +0,0 @@ -const isFixMode = process.argv.includes('--fix') -module.exports = { - env: {es6: true}, - extends: ['eslint:all', 'plugin:@typescript-eslint/recommended-type-checked', 'plugin:import/recommended'], - globals: { - __DEV__: false, - __HOT__: false, - __FILE_SUFFIX__: false, - cancelAnimationFrame: 'readonly', - requestAnimationFrame: 'readonly', - require: 'readonly', - }, - overrides: [ - { - files: ['*.tsx', '*.ts', '*.d.ts'], - rules: { - 'no-undef': 'off', // ts itself will catch this - 'no-unused-vars': 'off', // ts itself will catch this - }, - }, - ], - parser: '@typescript-eslint/parser', - parserOptions: { - tsconfigRootDir: __dirname, - project: ['./tsconfig.json'], - }, - plugins: ['promise', 'react', 'react-hooks', '@typescript-eslint', 'deprecation', 'import'], - reportUnusedDisableDirectives: true, - rules: { - '@typescript-eslint/adjacent-overload-signatures': 'off', - '@typescript-eslint/array-type': 'off', - '@typescript-eslint/await-thenable': 'error', - '@typescript-eslint/ban-ts-comment': 'off', - '@typescript-eslint/ban-tslint-comment': 'off', - '@typescript-eslint/ban-types': 'off', - '@typescript-eslint/brace-style': 'off', - '@typescript-eslint/class-literal-property-style': 'error', - '@typescript-eslint/comma-dangle': 'off', - '@typescript-eslint/comma-spacing': 'off', - '@typescript-eslint/consistent-indexed-object-style': 'off', - '@typescript-eslint/consistent-type-assertions': 'error', - '@typescript-eslint/consistent-type-definitions': 'off', - '@typescript-eslint/consistent-type-exports': 'error', - '@typescript-eslint/consistent-type-imports': 'error', - '@typescript-eslint/default-param-last': 'error', - '@typescript-eslint/dot-notation': 'off', - '@typescript-eslint/explicit-function-return-type': 'off', - '@typescript-eslint/explicit-member-accessibility': 'off', - '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/func-call-spacing': 'off', - '@typescript-eslint/indent': 'off', - '@typescript-eslint/init-declarations': 'off', - '@typescript-eslint/keyword-spacing': 'off', - '@typescript-eslint/lines-between-class-members': 'off', - '@typescript-eslint/member-delimiter-style': 'off', - '@typescript-eslint/member-ordering': 'off', - '@typescript-eslint/method-signature-style': 'error', - '@typescript-eslint/naming-convention': 'off', - '@typescript-eslint/no-array-constructor': 'error', - '@typescript-eslint/no-base-to-string': 'error', - '@typescript-eslint/no-confusing-non-null-assertion': 'off', - '@typescript-eslint/no-confusing-void-expression': 'off', - '@typescript-eslint/no-dupe-class-members': 'error', - '@typescript-eslint/no-dynamic-delete': 'error', - '@typescript-eslint/no-empty-function': 'off', - '@typescript-eslint/no-empty-interface': 'error', - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-extra-non-null-assertion': 'error', - '@typescript-eslint/no-extra-parens': 'off', - '@typescript-eslint/no-extra-semi': 'off', - '@typescript-eslint/no-extraneous-class': 'error', - '@typescript-eslint/no-floating-promises': 'error', - '@typescript-eslint/no-for-in-array': 'error', - '@typescript-eslint/no-implied-eval': 'error', - '@typescript-eslint/no-inferrable-types': 'off', - '@typescript-eslint/no-invalid-this': 'off', - '@typescript-eslint/no-invalid-void-type': 'error', - '@typescript-eslint/no-loop-func': 'error', - '@typescript-eslint/no-loss-of-precision': 'error', - '@typescript-eslint/no-magic-numbers': 'off', - '@typescript-eslint/no-meaningless-void-operator': 'error', - '@typescript-eslint/no-misused-new': 'error', - '@typescript-eslint/no-misused-promises': 'error', - '@typescript-eslint/no-namespace': 'error', - '@typescript-eslint/no-non-null-asserted-nullish-coalescing': 'error', - '@typescript-eslint/no-non-null-asserted-optional-chain': 'error', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/no-redeclare': 'error', - '@typescript-eslint/no-require-imports': 'off', - '@typescript-eslint/no-restricted-imports': 'error', - '@typescript-eslint/no-shadow': 'off', - '@typescript-eslint/no-this-alias': 'error', - '@typescript-eslint/no-throw-literal': 'off', - '@typescript-eslint/no-type-alias': 'off', - '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'error', - '@typescript-eslint/no-unnecessary-condition': isFixMode - ? 'off' - : ['error', {allowConstantLoopConditions: true}], - '@typescript-eslint/no-unnecessary-qualifier': 'error', - '@typescript-eslint/no-unnecessary-type-arguments': 'error', - '@typescript-eslint/no-unnecessary-type-assertion': 'warn', - '@typescript-eslint/no-unnecessary-type-constraint': 'error', - '@typescript-eslint/no-unsafe-argument': 'warn', - '@typescript-eslint/no-unsafe-assignment': 'warn', - '@typescript-eslint/no-unsafe-call': 'warn', - '@typescript-eslint/no-unsafe-enum-comparison': 'warn', - '@typescript-eslint/no-unsafe-member-access': 'warn', - '@typescript-eslint/no-unsafe-return': 'warn', - '@typescript-eslint/no-unused-expressions': 'off', - '@typescript-eslint/no-unused-vars': ['error', {argsIgnorePattern: '^_', ignoreRestSiblings: true}], - '@typescript-eslint/no-use-before-define': 'off', - '@typescript-eslint/no-useless-constructor': 'error', - '@typescript-eslint/no-var-requires': 'off', - '@typescript-eslint/non-nullable-type-assertion-style': 'off', - '@typescript-eslint/object-curly-spacing': 'error', - '@typescript-eslint/padding-line-between-statements': 'error', - '@typescript-eslint/prefer-as-const': 'error', - '@typescript-eslint/prefer-enum-initializers': 'off', - '@typescript-eslint/prefer-for-of': 'error', - '@typescript-eslint/prefer-function-type': 'error', - '@typescript-eslint/prefer-includes': 'error', - '@typescript-eslint/prefer-literal-enum-member': 'error', - '@typescript-eslint/prefer-namespace-keyword': 'error', - '@typescript-eslint/prefer-nullish-coalescing': 'off', - '@typescript-eslint/prefer-optional-chain': 'error', - '@typescript-eslint/prefer-readonly': 'off', - '@typescript-eslint/prefer-readonly-parameter-types': 'off', - '@typescript-eslint/prefer-reduce-type-parameter': 'warn', - '@typescript-eslint/prefer-regexp-exec': 'off', - '@typescript-eslint/prefer-return-this-type': 'error', - '@typescript-eslint/prefer-string-starts-ends-with': 'error', - '@typescript-eslint/prefer-ts-expect-error': 'off', - '@typescript-eslint/promise-function-async': 'error', - '@typescript-eslint/quotes': 'off', - '@typescript-eslint/require-array-sort-compare': 'off', - '@typescript-eslint/require-await': 'error', - '@typescript-eslint/restrict-plus-operands': 'off', - '@typescript-eslint/restrict-template-expressions': 'error', - '@typescript-eslint/return-await': 'off', - '@typescript-eslint/semi': 'off', - '@typescript-eslint/sort-type-union-intersection-members': 'off', - '@typescript-eslint/space-before-function-paren': 'off', - '@typescript-eslint/space-infix-ops': 'off', - '@typescript-eslint/strict-boolean-expressions': 'off', - '@typescript-eslint/switch-exhaustiveness-check': 'error', - '@typescript-eslint/triple-slash-reference': 'error', - '@typescript-eslint/type-annotation-spacing': 'error', - '@typescript-eslint/typedef': 'error', - '@typescript-eslint/unbound-method': 'error', - '@typescript-eslint/unified-signatures': 'error', - 'array-callback-return': 'error', - 'arrow-body-style': 'off', - 'capitalized-comments': 'off', - 'class-methods-use-this': 'off', - 'consistent-return': 'off', - 'default-case': 'off', - 'default-param-last': 'off', - 'deprecation/deprecation': 'error', - 'dot-notation': 'off', - 'func-names': 'off', - 'func-style': 'off', - 'guard-for-in': 'off', - 'id-length': 'off', - 'import/named': 'off', - 'import/namespace': 'off', - 'import/no-anonymous-default-export': 'error', - 'import/no-unresolved': 'off', - 'init-declarations': 'off', - 'line-comment-position': 'off', - 'logical-assignment-operators': 'off', - 'max-classes-per-file': 'off', - 'max-depth': 'off', - 'max-lines': 'off', - 'max-lines-per-function': 'off', - 'max-params': 'off', - 'max-statements': 'off', - 'multiline-comment-style': 'off', - 'new-cap': 'off', - 'no-await-in-loop': 'off', - 'no-console': 'off', - 'no-constant-condition': ['warn', {checkLoops: false}], - 'no-continue': 'off', - 'no-duplicate-imports': 'off', - 'no-else-return': 'off', - 'no-empty': 'off', - 'no-empty-function': 'off', - 'no-implicit-coercion': 'off', - 'no-implied-eval': 'error', - 'no-inline-comments': 'off', - 'no-lonely-if': 'off', - 'no-loop-func': 'off', - 'no-magic-numbers': 'off', - 'no-negated-condition': 'off', - 'no-nested-ternary': 'off', - 'no-plusplus': 'off', - 'no-script-url': 'error', - 'no-self-compare': 'error', - 'no-sequences': 'error', - 'no-shadow': 'off', - 'no-ternary': 'off', - 'no-undefined': 'off', - 'no-underscore-dangle': 'off', - 'no-unused-expressions': 'off', - 'no-use-before-define': 'off', - 'no-useless-return': 'off', - 'no-warning-comments': 'off', - 'object-shorthand': 'off', - 'one-var': 'off', - 'operator-assignment': 'off', - 'prefer-arrow-callback': 'off', - 'prefer-const': 'error', - 'prefer-destructuring': 'off', - 'prefer-named-capture-group': 'off', - 'prefer-template': 'off', - 'react-hooks/exhaustive-deps': 'error', - 'react-hooks/rules-of-hooks': 'error', - 'react/boolean-prop-naming': 'error', - 'react/button-has-type': 'off', - 'react/default-props-match-prop-types': 'off', - 'react/destructuring-assignment': 'off', - 'react/display-name': 'off', - 'react/forbid-component-props': 'off', - 'react/forbid-dom-props': 'off', - 'react/forbid-elements': 'off', - 'react/forbid-foreign-prop-types': 'off', - 'react/forbid-prop-types': 'off', - 'react/jsx-boolean-value': ['error', 'always'], - 'react/jsx-child-element-spacing': 'off', - 'react/jsx-closing-bracket-location': 'off', - 'react/jsx-closing-tag-location': 'off', - 'react/jsx-curly-brace-presence': 'off', - 'react/jsx-curly-newline': 'off', - 'react/jsx-curly-spacing': 'off', - 'react/jsx-equals-spacing': 'off', - 'react/jsx-filename-extension': 'off', - 'react/jsx-first-prop-new-line': 'off', - 'react/jsx-fragments': ['error', 'syntax'], - 'react/jsx-handler-names': 'off', - 'react/jsx-indent': 'off', - 'react/jsx-indent-props': 'off', - 'react/jsx-key': 'error', - 'react/jsx-max-depth': 'off', - 'react/jsx-max-props-per-line': 'off', - 'react/jsx-no-bind': 'off', - 'react/jsx-no-comment-textnodes': 'error', - 'react/jsx-no-duplicate-props': 'error', - 'react/jsx-no-literals': 'off', - 'react/jsx-no-target-blank': 'error', - 'react/jsx-no-undef': 'error', - 'react/jsx-one-expression-per-line': 'off', - 'react/jsx-pascal-case': 'off', - 'react/jsx-props-no-multi-spaces': 'off', - 'react/jsx-props-no-spreading': 'off', - 'react/jsx-sort-default-props': 'off', - 'react/jsx-sort-props': 'off', - 'react/jsx-space-before-closing': 'off', - 'react/jsx-tag-spacing': 'off', - 'react/jsx-uses-react': 'off', - 'react/jsx-uses-vars': 'error', - 'react/jsx-wrap-multilines': 'off', - 'react/no-access-state-in-setstate': 'error', - 'react/no-array-index-key': 'off', - 'react/no-children-prop': 'off', - 'react/no-danger': 'error', - 'react/no-danger-with-children': 'error', - 'react/no-deprecated': 'error', - 'react/no-did-mount-set-state': 'warn', - 'react/no-did-update-set-state': 'warn', - 'react/no-direct-mutation-state': 'error', - 'react/no-find-dom-node': 'warn', - 'react/no-is-mounted': 'error', - 'react/no-multi-comp': 'off', - 'react/no-redundant-should-component-update': 'error', - 'react/no-render-return-value': 'error', - 'react/no-set-state': 'off', - 'react/no-string-refs': 'error', - 'react/no-this-in-sfc': 'error', - 'react/no-typos': 'warn', - 'react/no-unescaped-entities': 'off', - 'react/no-unknown-property': 'error', - 'react/no-unsafe': 'error', - 'react/no-unused-prop-types': 'off', - 'react/no-unused-state': 'error', - 'react/no-will-update-set-state': 'warn', - 'react/prefer-es6-class': 'off', - 'react/prefer-read-only-props': 'off', - 'react/prefer-stateless-function': 'error', - 'react/prop-types': 'off', - 'react/react-in-jsx-scope': 'off', - 'react/require-default-props': 'off', - 'react/require-optimization': 'off', - 'react/require-render-return': 'off', - 'react/self-closing-comp': 'off', - 'react/sort-comp': 'off', - 'react/sort-prop-types': 'off', - 'react/state-in-constructor': 'off', - 'react/static-property-placement': 'off', - 'react/style-prop-object': 'error', - 'react/void-dom-elements-no-children': 'error', - 'require-unicode-regexp': 'off', - 'sort-imports': 'off', - 'sort-keys': ['error', 'asc', {caseSensitive: true, natural: false}], - camelcase: 'off', - complexity: 'off', - curly: 'off', - radix: 'off', - strict: ['error', 'global'], - yoda: 'off', - }, - settings: { - 'import/resolver': { - node: { - extensions: ['.js', '.tsx', '.d.ts', '.native.tsx', '.desktop.tsx', '.native.js', '.desktop.js'], - }, - }, - react: {version: 'detect'}, - }, -} diff --git a/shared/.gitignore b/shared/.gitignore index 32edfe076467..5afbad593de7 100644 --- a/shared/.gitignore +++ b/shared/.gitignore @@ -51,3 +51,4 @@ main.jsbundle .metro-health-check* coverage-ts +temp.log diff --git a/shared/Gemfile b/shared/Gemfile index a543c630f9bb..966338c87cab 100644 --- a/shared/Gemfile +++ b/shared/Gemfile @@ -1,4 +1,7 @@ source 'https://rubygems.org' # You may use http://rbenv.org/ or https://rvm.io/ to install and use this version ruby ">= 2.6.10" -gem 'cocoapods', '~> 1.12' +# Exclude problematic versions of cocoapods and activesupport that causes build failures. +gem 'cocoapods', '>= 1.13', '!= 1.15.0', '!= 1.15.1' +gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0' +gem 'xcodeproj', '< 1.26.0' diff --git a/shared/actions/engine-gen-gen.tsx b/shared/actions/engine-gen-gen.tsx index 3c3ba80aca86..e2e6151d4327 100644 --- a/shared/actions/engine-gen-gen.tsx +++ b/shared/actions/engine-gen-gen.tsx @@ -251,325 +251,325 @@ export const stellar1NotifyRequestStatusNotification = 'engine-gen:stellar1Notif export const stellar1UiPaymentReviewed = 'engine-gen:stellar1UiPaymentReviewed' // Action Creators -const createChat1ChatUiChatBotCommandsUpdateStatus = (payload: { +type createChat1ChatUiChatBotCommandsUpdateStatus = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatBotCommandsUpdateStatus']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatBotCommandsUpdateStatus']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatBotCommandsUpdateStatus}) as const -const createChat1ChatUiChatClearWatch = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatBotCommandsUpdateStatus} +type createChat1ChatUiChatClearWatch = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatClearWatch']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatClearWatch']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatClearWatch}) as const -const createChat1ChatUiChatCoinFlipStatus = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatClearWatch} +type createChat1ChatUiChatCoinFlipStatus = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatCoinFlipStatus']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatCoinFlipStatus']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatCoinFlipStatus}) as const -const createChat1ChatUiChatCommandMarkdown = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatCoinFlipStatus} +type createChat1ChatUiChatCommandMarkdown = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatCommandMarkdown']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatCommandMarkdown']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatCommandMarkdown}) as const -const createChat1ChatUiChatCommandStatus = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatCommandMarkdown} +type createChat1ChatUiChatCommandStatus = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatCommandStatus']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatCommandStatus']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatCommandStatus}) as const -const createChat1ChatUiChatConfirmChannelDelete = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatCommandStatus} +type createChat1ChatUiChatConfirmChannelDelete = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatConfirmChannelDelete']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatConfirmChannelDelete']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatConfirmChannelDelete}) as const -const createChat1ChatUiChatGiphySearchResults = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatConfirmChannelDelete} +type createChat1ChatUiChatGiphySearchResults = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatGiphySearchResults']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatGiphySearchResults']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatGiphySearchResults}) as const -const createChat1ChatUiChatGiphyToggleResultWindow = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatGiphySearchResults} +type createChat1ChatUiChatGiphyToggleResultWindow = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatGiphyToggleResultWindow']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatGiphyToggleResultWindow']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatGiphyToggleResultWindow}) as const -const createChat1ChatUiChatInboxConversation = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatGiphyToggleResultWindow} +type createChat1ChatUiChatInboxConversation = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatInboxConversation']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatInboxConversation']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatInboxConversation}) as const -const createChat1ChatUiChatInboxFailed = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatInboxConversation} +type createChat1ChatUiChatInboxFailed = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatInboxFailed']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatInboxFailed']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatInboxFailed}) as const -const createChat1ChatUiChatInboxLayout = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatInboxFailed} +type createChat1ChatUiChatInboxLayout = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatInboxLayout']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatInboxLayout']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatInboxLayout}) as const -const createChat1ChatUiChatInboxUnverified = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatInboxLayout} +type createChat1ChatUiChatInboxUnverified = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatInboxUnverified']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatInboxUnverified']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatInboxUnverified}) as const -const createChat1ChatUiChatLoadGalleryHit = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatInboxUnverified} +type createChat1ChatUiChatLoadGalleryHit = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatLoadGalleryHit']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatLoadGalleryHit']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatLoadGalleryHit}) as const -const createChat1ChatUiChatMaybeMentionUpdate = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatLoadGalleryHit} +type createChat1ChatUiChatMaybeMentionUpdate = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatMaybeMentionUpdate']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatMaybeMentionUpdate']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatMaybeMentionUpdate}) as const -const createChat1ChatUiChatSearchBotHits = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatMaybeMentionUpdate} +type createChat1ChatUiChatSearchBotHits = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatSearchBotHits']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatSearchBotHits']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatSearchBotHits}) as const -const createChat1ChatUiChatSearchConvHits = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatSearchBotHits} +type createChat1ChatUiChatSearchConvHits = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatSearchConvHits']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatSearchConvHits']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatSearchConvHits}) as const -const createChat1ChatUiChatSearchDone = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatSearchConvHits} +type createChat1ChatUiChatSearchDone = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatSearchDone']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatSearchDone']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatSearchDone}) as const -const createChat1ChatUiChatSearchHit = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatSearchDone} +type createChat1ChatUiChatSearchHit = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatSearchHit']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatSearchHit']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatSearchHit}) as const -const createChat1ChatUiChatSearchInboxDone = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatSearchHit} +type createChat1ChatUiChatSearchInboxDone = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatSearchInboxDone']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatSearchInboxDone']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatSearchInboxDone}) as const -const createChat1ChatUiChatSearchInboxHit = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatSearchInboxDone} +type createChat1ChatUiChatSearchInboxHit = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatSearchInboxHit']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatSearchInboxHit']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatSearchInboxHit}) as const -const createChat1ChatUiChatSearchInboxStart = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatSearchInboxHit} +type createChat1ChatUiChatSearchInboxStart = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatSearchInboxStart']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatSearchInboxStart']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatSearchInboxStart}) as const -const createChat1ChatUiChatSearchIndexStatus = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatSearchInboxStart} +type createChat1ChatUiChatSearchIndexStatus = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatSearchIndexStatus']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatSearchIndexStatus']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatSearchIndexStatus}) as const -const createChat1ChatUiChatSearchTeamHits = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatSearchIndexStatus} +type createChat1ChatUiChatSearchTeamHits = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatSearchTeamHits']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatSearchTeamHits']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatSearchTeamHits}) as const -const createChat1ChatUiChatShowManageChannels = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatSearchTeamHits} +type createChat1ChatUiChatShowManageChannels = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatShowManageChannels']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatShowManageChannels']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatShowManageChannels}) as const -const createChat1ChatUiChatStellarDataConfirm = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatShowManageChannels} +type createChat1ChatUiChatStellarDataConfirm = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatStellarDataConfirm']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatStellarDataConfirm']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatStellarDataConfirm}) as const -const createChat1ChatUiChatStellarDataError = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatStellarDataConfirm} +type createChat1ChatUiChatStellarDataError = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatStellarDataError']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatStellarDataError']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatStellarDataError}) as const -const createChat1ChatUiChatStellarDone = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatStellarDataError} +type createChat1ChatUiChatStellarDone = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatStellarDone']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatStellarDone']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatStellarDone}) as const -const createChat1ChatUiChatStellarShowConfirm = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatStellarDone} +type createChat1ChatUiChatStellarShowConfirm = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatStellarShowConfirm']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatStellarShowConfirm']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatStellarShowConfirm}) as const -const createChat1ChatUiChatThreadCached = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatStellarShowConfirm} +type createChat1ChatUiChatThreadCached = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatThreadCached']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatThreadCached']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatThreadCached}) as const -const createChat1ChatUiChatThreadFull = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatThreadCached} +type createChat1ChatUiChatThreadFull = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatThreadFull']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatThreadFull']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatThreadFull}) as const -const createChat1ChatUiChatThreadStatus = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatThreadFull} +type createChat1ChatUiChatThreadStatus = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatThreadStatus']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatThreadStatus']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatThreadStatus}) as const -const createChat1ChatUiChatWatchPosition = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatThreadStatus} +type createChat1ChatUiChatWatchPosition = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.chatWatchPosition']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.chatWatchPosition']['outParam']) => void } -}) => ({payload, type: chat1ChatUiChatWatchPosition}) as const -const createChat1ChatUiTriggerContactSync = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiChatWatchPosition} +type createChat1ChatUiTriggerContactSync = (payload: { readonly params: chat1Types.MessageTypes['chat.1.chatUi.triggerContactSync']['inParam'] response: { error: chat1Types.IncomingErrorCallback result: (param: chat1Types.MessageTypes['chat.1.chatUi.triggerContactSync']['outParam']) => void } -}) => ({payload, type: chat1ChatUiTriggerContactSync}) as const -const createChat1NotifyChatChatArchiveComplete = (payload: { +}) => {payload: typeof payload; type: typeof chat1ChatUiTriggerContactSync} +type createChat1NotifyChatChatArchiveComplete = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatArchiveComplete']['inParam'] -}) => ({payload, type: chat1NotifyChatChatArchiveComplete}) as const -const createChat1NotifyChatChatArchiveProgress = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatArchiveComplete} +type createChat1NotifyChatChatArchiveProgress = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatArchiveProgress']['inParam'] -}) => ({payload, type: chat1NotifyChatChatArchiveProgress}) as const -const createChat1NotifyChatChatAttachmentDownloadComplete = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatArchiveProgress} +type createChat1NotifyChatChatAttachmentDownloadComplete = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatAttachmentDownloadComplete']['inParam'] -}) => ({payload, type: chat1NotifyChatChatAttachmentDownloadComplete}) as const -const createChat1NotifyChatChatAttachmentDownloadProgress = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatAttachmentDownloadComplete} +type createChat1NotifyChatChatAttachmentDownloadProgress = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatAttachmentDownloadProgress']['inParam'] -}) => ({payload, type: chat1NotifyChatChatAttachmentDownloadProgress}) as const -const createChat1NotifyChatChatAttachmentUploadProgress = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatAttachmentDownloadProgress} +type createChat1NotifyChatChatAttachmentUploadProgress = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatAttachmentUploadProgress']['inParam'] -}) => ({payload, type: chat1NotifyChatChatAttachmentUploadProgress}) as const -const createChat1NotifyChatChatAttachmentUploadStart = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatAttachmentUploadProgress} +type createChat1NotifyChatChatAttachmentUploadStart = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatAttachmentUploadStart']['inParam'] -}) => ({payload, type: chat1NotifyChatChatAttachmentUploadStart}) as const -const createChat1NotifyChatChatConvUpdate = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatAttachmentUploadStart} +type createChat1NotifyChatChatConvUpdate = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatConvUpdate']['inParam'] -}) => ({payload, type: chat1NotifyChatChatConvUpdate}) as const -const createChat1NotifyChatChatIdentifyUpdate = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatConvUpdate} +type createChat1NotifyChatChatIdentifyUpdate = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatIdentifyUpdate']['inParam'] -}) => ({payload, type: chat1NotifyChatChatIdentifyUpdate}) as const -const createChat1NotifyChatChatInboxStale = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatIdentifyUpdate} +type createChat1NotifyChatChatInboxStale = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatInboxStale']['inParam'] -}) => ({payload, type: chat1NotifyChatChatInboxStale}) as const -const createChat1NotifyChatChatInboxSyncStarted = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatInboxStale} +type createChat1NotifyChatChatInboxSyncStarted = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatInboxSyncStarted']['inParam'] -}) => ({payload, type: chat1NotifyChatChatInboxSyncStarted}) as const -const createChat1NotifyChatChatInboxSynced = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatInboxSyncStarted} +type createChat1NotifyChatChatInboxSynced = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatInboxSynced']['inParam'] -}) => ({payload, type: chat1NotifyChatChatInboxSynced}) as const -const createChat1NotifyChatChatJoinedConversation = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatInboxSynced} +type createChat1NotifyChatChatJoinedConversation = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatJoinedConversation']['inParam'] -}) => ({payload, type: chat1NotifyChatChatJoinedConversation}) as const -const createChat1NotifyChatChatKBFSToImpteamUpgrade = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatJoinedConversation} +type createChat1NotifyChatChatKBFSToImpteamUpgrade = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatKBFSToImpteamUpgrade']['inParam'] -}) => ({payload, type: chat1NotifyChatChatKBFSToImpteamUpgrade}) as const -const createChat1NotifyChatChatLeftConversation = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatKBFSToImpteamUpgrade} +type createChat1NotifyChatChatLeftConversation = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatLeftConversation']['inParam'] -}) => ({payload, type: chat1NotifyChatChatLeftConversation}) as const -const createChat1NotifyChatChatParticipantsInfo = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatLeftConversation} +type createChat1NotifyChatChatParticipantsInfo = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatParticipantsInfo']['inParam'] -}) => ({payload, type: chat1NotifyChatChatParticipantsInfo}) as const -const createChat1NotifyChatChatPaymentInfo = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatParticipantsInfo} +type createChat1NotifyChatChatPaymentInfo = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatPaymentInfo']['inParam'] -}) => ({payload, type: chat1NotifyChatChatPaymentInfo}) as const -const createChat1NotifyChatChatPromptUnfurl = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatPaymentInfo} +type createChat1NotifyChatChatPromptUnfurl = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatPromptUnfurl']['inParam'] -}) => ({payload, type: chat1NotifyChatChatPromptUnfurl}) as const -const createChat1NotifyChatChatRequestInfo = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatPromptUnfurl} +type createChat1NotifyChatChatRequestInfo = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatRequestInfo']['inParam'] -}) => ({payload, type: chat1NotifyChatChatRequestInfo}) as const -const createChat1NotifyChatChatResetConversation = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatRequestInfo} +type createChat1NotifyChatChatResetConversation = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatResetConversation']['inParam'] -}) => ({payload, type: chat1NotifyChatChatResetConversation}) as const -const createChat1NotifyChatChatSetConvRetention = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatResetConversation} +type createChat1NotifyChatChatSetConvRetention = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatSetConvRetention']['inParam'] -}) => ({payload, type: chat1NotifyChatChatSetConvRetention}) as const -const createChat1NotifyChatChatSetConvSettings = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatSetConvRetention} +type createChat1NotifyChatChatSetConvSettings = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatSetConvSettings']['inParam'] -}) => ({payload, type: chat1NotifyChatChatSetConvSettings}) as const -const createChat1NotifyChatChatSetTeamRetention = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatSetConvSettings} +type createChat1NotifyChatChatSetTeamRetention = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatSetTeamRetention']['inParam'] -}) => ({payload, type: chat1NotifyChatChatSetTeamRetention}) as const -const createChat1NotifyChatChatSubteamRename = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatSetTeamRetention} +type createChat1NotifyChatChatSubteamRename = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatSubteamRename']['inParam'] -}) => ({payload, type: chat1NotifyChatChatSubteamRename}) as const -const createChat1NotifyChatChatTLFFinalize = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatSubteamRename} +type createChat1NotifyChatChatTLFFinalize = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatTLFFinalize']['inParam'] -}) => ({payload, type: chat1NotifyChatChatTLFFinalize}) as const -const createChat1NotifyChatChatTLFResolve = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatTLFFinalize} +type createChat1NotifyChatChatTLFResolve = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatTLFResolve']['inParam'] -}) => ({payload, type: chat1NotifyChatChatTLFResolve}) as const -const createChat1NotifyChatChatThreadsStale = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatTLFResolve} +type createChat1NotifyChatChatThreadsStale = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatThreadsStale']['inParam'] -}) => ({payload, type: chat1NotifyChatChatThreadsStale}) as const -const createChat1NotifyChatChatTypingUpdate = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatThreadsStale} +type createChat1NotifyChatChatTypingUpdate = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatTypingUpdate']['inParam'] -}) => ({payload, type: chat1NotifyChatChatTypingUpdate}) as const -const createChat1NotifyChatChatWelcomeMessageLoaded = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatTypingUpdate} +type createChat1NotifyChatChatWelcomeMessageLoaded = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.ChatWelcomeMessageLoaded']['inParam'] -}) => ({payload, type: chat1NotifyChatChatWelcomeMessageLoaded}) as const -const createChat1NotifyChatNewChatActivity = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatChatWelcomeMessageLoaded} +type createChat1NotifyChatNewChatActivity = (payload: { readonly params: chat1Types.MessageTypes['chat.1.NotifyChat.NewChatActivity']['inParam'] -}) => ({payload, type: chat1NotifyChatNewChatActivity}) as const -const createKeybase1GpgUiConfirmDuplicateKeyChosen = (payload: { +}) => {payload: typeof payload; type: typeof chat1NotifyChatNewChatActivity} +type createKeybase1GpgUiConfirmDuplicateKeyChosen = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.gpgUi.confirmDuplicateKeyChosen']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -577,8 +577,8 @@ const createKeybase1GpgUiConfirmDuplicateKeyChosen = (payload: { param: keybase1Types.MessageTypes['keybase.1.gpgUi.confirmDuplicateKeyChosen']['outParam'] ) => void } -}) => ({payload, type: keybase1GpgUiConfirmDuplicateKeyChosen}) as const -const createKeybase1GpgUiConfirmImportSecretToExistingKey = (payload: { +}) => {payload: typeof payload; type: typeof keybase1GpgUiConfirmDuplicateKeyChosen} +type createKeybase1GpgUiConfirmImportSecretToExistingKey = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.gpgUi.confirmImportSecretToExistingKey']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -586,43 +586,43 @@ const createKeybase1GpgUiConfirmImportSecretToExistingKey = (payload: { param: keybase1Types.MessageTypes['keybase.1.gpgUi.confirmImportSecretToExistingKey']['outParam'] ) => void } -}) => ({payload, type: keybase1GpgUiConfirmImportSecretToExistingKey}) as const -const createKeybase1GpgUiGetTTY = (payload: { +}) => {payload: typeof payload; type: typeof keybase1GpgUiConfirmImportSecretToExistingKey} +type createKeybase1GpgUiGetTTY = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.gpgUi.getTTY']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.gpgUi.getTTY']['outParam']) => void } -}) => ({payload, type: keybase1GpgUiGetTTY}) as const -const createKeybase1GpgUiSelectKey = (payload: { +}) => {payload: typeof payload; type: typeof keybase1GpgUiGetTTY} +type createKeybase1GpgUiSelectKey = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.gpgUi.selectKey']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.gpgUi.selectKey']['outParam']) => void } -}) => ({payload, type: keybase1GpgUiSelectKey}) as const -const createKeybase1GpgUiSelectKeyAndPushOption = (payload: { +}) => {payload: typeof payload; type: typeof keybase1GpgUiSelectKey} +type createKeybase1GpgUiSelectKeyAndPushOption = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.gpgUi.selectKeyAndPushOption']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.gpgUi.selectKeyAndPushOption']['outParam']) => void } -}) => ({payload, type: keybase1GpgUiSelectKeyAndPushOption}) as const -const createKeybase1GpgUiSign = (payload: { +}) => {payload: typeof payload; type: typeof keybase1GpgUiSelectKeyAndPushOption} +type createKeybase1GpgUiSign = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.gpgUi.sign']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.gpgUi.sign']['outParam']) => void } -}) => ({payload, type: keybase1GpgUiSign}) as const -const createKeybase1GpgUiWantToAddGPGKey = (payload: { +}) => {payload: typeof payload; type: typeof keybase1GpgUiSign} +type createKeybase1GpgUiWantToAddGPGKey = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.gpgUi.wantToAddGPGKey']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.gpgUi.wantToAddGPGKey']['outParam']) => void } -}) => ({payload, type: keybase1GpgUiWantToAddGPGKey}) as const -const createKeybase1GregorUIPushOutOfBandMessages = (payload: { +}) => {payload: typeof payload; type: typeof keybase1GpgUiWantToAddGPGKey} +type createKeybase1GregorUIPushOutOfBandMessages = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.gregorUI.pushOutOfBandMessages']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -630,29 +630,29 @@ const createKeybase1GregorUIPushOutOfBandMessages = (payload: { param: keybase1Types.MessageTypes['keybase.1.gregorUI.pushOutOfBandMessages']['outParam'] ) => void } -}) => ({payload, type: keybase1GregorUIPushOutOfBandMessages}) as const -const createKeybase1GregorUIPushState = (payload: { +}) => {payload: typeof payload; type: typeof keybase1GregorUIPushOutOfBandMessages} +type createKeybase1GregorUIPushState = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.gregorUI.pushState']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.gregorUI.pushState']['outParam']) => void } -}) => ({payload, type: keybase1GregorUIPushState}) as const -const createKeybase1HomeUIHomeUIRefresh = (payload: { +}) => {payload: typeof payload; type: typeof keybase1GregorUIPushState} +type createKeybase1HomeUIHomeUIRefresh = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.homeUI.homeUIRefresh']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.homeUI.homeUIRefresh']['outParam']) => void } -}) => ({payload, type: keybase1HomeUIHomeUIRefresh}) as const -const createKeybase1Identify3UiIdentify3Result = (payload: { +}) => {payload: typeof payload; type: typeof keybase1HomeUIHomeUIRefresh} +type createKeybase1Identify3UiIdentify3Result = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.identify3Ui.identify3Result']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.identify3Ui.identify3Result']['outParam']) => void } -}) => ({payload, type: keybase1Identify3UiIdentify3Result}) as const -const createKeybase1Identify3UiIdentify3ShowTracker = (payload: { +}) => {payload: typeof payload; type: typeof keybase1Identify3UiIdentify3Result} +type createKeybase1Identify3UiIdentify3ShowTracker = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.identify3Ui.identify3ShowTracker']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -660,15 +660,15 @@ const createKeybase1Identify3UiIdentify3ShowTracker = (payload: { param: keybase1Types.MessageTypes['keybase.1.identify3Ui.identify3ShowTracker']['outParam'] ) => void } -}) => ({payload, type: keybase1Identify3UiIdentify3ShowTracker}) as const -const createKeybase1Identify3UiIdentify3Summary = (payload: { +}) => {payload: typeof payload; type: typeof keybase1Identify3UiIdentify3ShowTracker} +type createKeybase1Identify3UiIdentify3Summary = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.identify3Ui.identify3Summary']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.identify3Ui.identify3Summary']['outParam']) => void } -}) => ({payload, type: keybase1Identify3UiIdentify3Summary}) as const -const createKeybase1Identify3UiIdentify3TrackerTimedOut = (payload: { +}) => {payload: typeof payload; type: typeof keybase1Identify3UiIdentify3Summary} +type createKeybase1Identify3UiIdentify3TrackerTimedOut = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.identify3Ui.identify3TrackerTimedOut']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -676,8 +676,8 @@ const createKeybase1Identify3UiIdentify3TrackerTimedOut = (payload: { param: keybase1Types.MessageTypes['keybase.1.identify3Ui.identify3TrackerTimedOut']['outParam'] ) => void } -}) => ({payload, type: keybase1Identify3UiIdentify3TrackerTimedOut}) as const -const createKeybase1Identify3UiIdentify3UpdateRow = (payload: { +}) => {payload: typeof payload; type: typeof keybase1Identify3UiIdentify3TrackerTimedOut} +type createKeybase1Identify3UiIdentify3UpdateRow = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.identify3Ui.identify3UpdateRow']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -685,8 +685,8 @@ const createKeybase1Identify3UiIdentify3UpdateRow = (payload: { param: keybase1Types.MessageTypes['keybase.1.identify3Ui.identify3UpdateRow']['outParam'] ) => void } -}) => ({payload, type: keybase1Identify3UiIdentify3UpdateRow}) as const -const createKeybase1Identify3UiIdentify3UpdateUserCard = (payload: { +}) => {payload: typeof payload; type: typeof keybase1Identify3UiIdentify3UpdateRow} +type createKeybase1Identify3UiIdentify3UpdateUserCard = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.identify3Ui.identify3UpdateUserCard']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -694,8 +694,8 @@ const createKeybase1Identify3UiIdentify3UpdateUserCard = (payload: { param: keybase1Types.MessageTypes['keybase.1.identify3Ui.identify3UpdateUserCard']['outParam'] ) => void } -}) => ({payload, type: keybase1Identify3UiIdentify3UpdateUserCard}) as const -const createKeybase1Identify3UiIdentify3UserReset = (payload: { +}) => {payload: typeof payload; type: typeof keybase1Identify3UiIdentify3UpdateUserCard} +type createKeybase1Identify3UiIdentify3UserReset = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.identify3Ui.identify3UserReset']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -703,36 +703,36 @@ const createKeybase1Identify3UiIdentify3UserReset = (payload: { param: keybase1Types.MessageTypes['keybase.1.identify3Ui.identify3UserReset']['outParam'] ) => void } -}) => ({payload, type: keybase1Identify3UiIdentify3UserReset}) as const -const createKeybase1IdentifyUiCancel = (payload: { +}) => {payload: typeof payload; type: typeof keybase1Identify3UiIdentify3UserReset} +type createKeybase1IdentifyUiCancel = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.identifyUi.cancel']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.identifyUi.cancel']['outParam']) => void } -}) => ({payload, type: keybase1IdentifyUiCancel}) as const -const createKeybase1IdentifyUiConfirm = (payload: { +}) => {payload: typeof payload; type: typeof keybase1IdentifyUiCancel} +type createKeybase1IdentifyUiConfirm = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.identifyUi.confirm']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.identifyUi.confirm']['outParam']) => void } -}) => ({payload, type: keybase1IdentifyUiConfirm}) as const -const createKeybase1IdentifyUiDelegateIdentifyUI = (payload: { +}) => {payload: typeof payload; type: typeof keybase1IdentifyUiConfirm} +type createKeybase1IdentifyUiDelegateIdentifyUI = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.identifyUi.delegateIdentifyUI']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.identifyUi.delegateIdentifyUI']['outParam']) => void } -}) => ({payload, type: keybase1IdentifyUiDelegateIdentifyUI}) as const -const createKeybase1IdentifyUiDismiss = (payload: { +}) => {payload: typeof payload; type: typeof keybase1IdentifyUiDelegateIdentifyUI} +type createKeybase1IdentifyUiDismiss = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.identifyUi.dismiss']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.identifyUi.dismiss']['outParam']) => void } -}) => ({payload, type: keybase1IdentifyUiDismiss}) as const -const createKeybase1IdentifyUiDisplayCryptocurrency = (payload: { +}) => {payload: typeof payload; type: typeof keybase1IdentifyUiDismiss} +type createKeybase1IdentifyUiDisplayCryptocurrency = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.identifyUi.displayCryptocurrency']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -740,15 +740,15 @@ const createKeybase1IdentifyUiDisplayCryptocurrency = (payload: { param: keybase1Types.MessageTypes['keybase.1.identifyUi.displayCryptocurrency']['outParam'] ) => void } -}) => ({payload, type: keybase1IdentifyUiDisplayCryptocurrency}) as const -const createKeybase1IdentifyUiDisplayKey = (payload: { +}) => {payload: typeof payload; type: typeof keybase1IdentifyUiDisplayCryptocurrency} +type createKeybase1IdentifyUiDisplayKey = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.identifyUi.displayKey']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.identifyUi.displayKey']['outParam']) => void } -}) => ({payload, type: keybase1IdentifyUiDisplayKey}) as const -const createKeybase1IdentifyUiDisplayStellarAccount = (payload: { +}) => {payload: typeof payload; type: typeof keybase1IdentifyUiDisplayKey} +type createKeybase1IdentifyUiDisplayStellarAccount = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.identifyUi.displayStellarAccount']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -756,8 +756,8 @@ const createKeybase1IdentifyUiDisplayStellarAccount = (payload: { param: keybase1Types.MessageTypes['keybase.1.identifyUi.displayStellarAccount']['outParam'] ) => void } -}) => ({payload, type: keybase1IdentifyUiDisplayStellarAccount}) as const -const createKeybase1IdentifyUiDisplayTLFCreateWithInvite = (payload: { +}) => {payload: typeof payload; type: typeof keybase1IdentifyUiDisplayStellarAccount} +type createKeybase1IdentifyUiDisplayTLFCreateWithInvite = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.identifyUi.displayTLFCreateWithInvite']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -765,8 +765,8 @@ const createKeybase1IdentifyUiDisplayTLFCreateWithInvite = (payload: { param: keybase1Types.MessageTypes['keybase.1.identifyUi.displayTLFCreateWithInvite']['outParam'] ) => void } -}) => ({payload, type: keybase1IdentifyUiDisplayTLFCreateWithInvite}) as const -const createKeybase1IdentifyUiDisplayTrackStatement = (payload: { +}) => {payload: typeof payload; type: typeof keybase1IdentifyUiDisplayTLFCreateWithInvite} +type createKeybase1IdentifyUiDisplayTrackStatement = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.identifyUi.displayTrackStatement']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -774,22 +774,22 @@ const createKeybase1IdentifyUiDisplayTrackStatement = (payload: { param: keybase1Types.MessageTypes['keybase.1.identifyUi.displayTrackStatement']['outParam'] ) => void } -}) => ({payload, type: keybase1IdentifyUiDisplayTrackStatement}) as const -const createKeybase1IdentifyUiDisplayUserCard = (payload: { +}) => {payload: typeof payload; type: typeof keybase1IdentifyUiDisplayTrackStatement} +type createKeybase1IdentifyUiDisplayUserCard = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.identifyUi.displayUserCard']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.identifyUi.displayUserCard']['outParam']) => void } -}) => ({payload, type: keybase1IdentifyUiDisplayUserCard}) as const -const createKeybase1IdentifyUiFinish = (payload: { +}) => {payload: typeof payload; type: typeof keybase1IdentifyUiDisplayUserCard} +type createKeybase1IdentifyUiFinish = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.identifyUi.finish']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.identifyUi.finish']['outParam']) => void } -}) => ({payload, type: keybase1IdentifyUiFinish}) as const -const createKeybase1IdentifyUiFinishSocialProofCheck = (payload: { +}) => {payload: typeof payload; type: typeof keybase1IdentifyUiFinish} +type createKeybase1IdentifyUiFinishSocialProofCheck = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.identifyUi.finishSocialProofCheck']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -797,8 +797,8 @@ const createKeybase1IdentifyUiFinishSocialProofCheck = (payload: { param: keybase1Types.MessageTypes['keybase.1.identifyUi.finishSocialProofCheck']['outParam'] ) => void } -}) => ({payload, type: keybase1IdentifyUiFinishSocialProofCheck}) as const -const createKeybase1IdentifyUiFinishWebProofCheck = (payload: { +}) => {payload: typeof payload; type: typeof keybase1IdentifyUiFinishSocialProofCheck} +type createKeybase1IdentifyUiFinishWebProofCheck = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.identifyUi.finishWebProofCheck']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -806,8 +806,8 @@ const createKeybase1IdentifyUiFinishWebProofCheck = (payload: { param: keybase1Types.MessageTypes['keybase.1.identifyUi.finishWebProofCheck']['outParam'] ) => void } -}) => ({payload, type: keybase1IdentifyUiFinishWebProofCheck}) as const -const createKeybase1IdentifyUiLaunchNetworkChecks = (payload: { +}) => {payload: typeof payload; type: typeof keybase1IdentifyUiFinishWebProofCheck} +type createKeybase1IdentifyUiLaunchNetworkChecks = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.identifyUi.launchNetworkChecks']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -815,36 +815,36 @@ const createKeybase1IdentifyUiLaunchNetworkChecks = (payload: { param: keybase1Types.MessageTypes['keybase.1.identifyUi.launchNetworkChecks']['outParam'] ) => void } -}) => ({payload, type: keybase1IdentifyUiLaunchNetworkChecks}) as const -const createKeybase1IdentifyUiReportLastTrack = (payload: { +}) => {payload: typeof payload; type: typeof keybase1IdentifyUiLaunchNetworkChecks} +type createKeybase1IdentifyUiReportLastTrack = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.identifyUi.reportLastTrack']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.identifyUi.reportLastTrack']['outParam']) => void } -}) => ({payload, type: keybase1IdentifyUiReportLastTrack}) as const -const createKeybase1IdentifyUiReportTrackToken = (payload: { +}) => {payload: typeof payload; type: typeof keybase1IdentifyUiReportLastTrack} +type createKeybase1IdentifyUiReportTrackToken = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.identifyUi.reportTrackToken']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.identifyUi.reportTrackToken']['outParam']) => void } -}) => ({payload, type: keybase1IdentifyUiReportTrackToken}) as const -const createKeybase1IdentifyUiStart = (payload: { +}) => {payload: typeof payload; type: typeof keybase1IdentifyUiReportTrackToken} +type createKeybase1IdentifyUiStart = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.identifyUi.start']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.identifyUi.start']['outParam']) => void } -}) => ({payload, type: keybase1IdentifyUiStart}) as const -const createKeybase1LogUiLog = (payload: { +}) => {payload: typeof payload; type: typeof keybase1IdentifyUiStart} +type createKeybase1LogUiLog = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.logUi.log']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.logUi.log']['outParam']) => void } -}) => ({payload, type: keybase1LogUiLog}) as const -const createKeybase1LoginUiChooseDeviceToRecoverWith = (payload: { +}) => {payload: typeof payload; type: typeof keybase1LogUiLog} +type createKeybase1LoginUiChooseDeviceToRecoverWith = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.loginUi.chooseDeviceToRecoverWith']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -852,15 +852,15 @@ const createKeybase1LoginUiChooseDeviceToRecoverWith = (payload: { param: keybase1Types.MessageTypes['keybase.1.loginUi.chooseDeviceToRecoverWith']['outParam'] ) => void } -}) => ({payload, type: keybase1LoginUiChooseDeviceToRecoverWith}) as const -const createKeybase1LoginUiDisplayPaperKeyPhrase = (payload: { +}) => {payload: typeof payload; type: typeof keybase1LoginUiChooseDeviceToRecoverWith} +type createKeybase1LoginUiDisplayPaperKeyPhrase = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.loginUi.displayPaperKeyPhrase']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.loginUi.displayPaperKeyPhrase']['outParam']) => void } -}) => ({payload, type: keybase1LoginUiDisplayPaperKeyPhrase}) as const -const createKeybase1LoginUiDisplayPrimaryPaperKey = (payload: { +}) => {payload: typeof payload; type: typeof keybase1LoginUiDisplayPaperKeyPhrase} +type createKeybase1LoginUiDisplayPrimaryPaperKey = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.loginUi.displayPrimaryPaperKey']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -868,36 +868,36 @@ const createKeybase1LoginUiDisplayPrimaryPaperKey = (payload: { param: keybase1Types.MessageTypes['keybase.1.loginUi.displayPrimaryPaperKey']['outParam'] ) => void } -}) => ({payload, type: keybase1LoginUiDisplayPrimaryPaperKey}) as const -const createKeybase1LoginUiDisplayResetMessage = (payload: { +}) => {payload: typeof payload; type: typeof keybase1LoginUiDisplayPrimaryPaperKey} +type createKeybase1LoginUiDisplayResetMessage = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.loginUi.displayResetMessage']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.loginUi.displayResetMessage']['outParam']) => void } -}) => ({payload, type: keybase1LoginUiDisplayResetMessage}) as const -const createKeybase1LoginUiDisplayResetProgress = (payload: { +}) => {payload: typeof payload; type: typeof keybase1LoginUiDisplayResetMessage} +type createKeybase1LoginUiDisplayResetProgress = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.loginUi.displayResetProgress']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.loginUi.displayResetProgress']['outParam']) => void } -}) => ({payload, type: keybase1LoginUiDisplayResetProgress}) as const -const createKeybase1LoginUiExplainDeviceRecovery = (payload: { +}) => {payload: typeof payload; type: typeof keybase1LoginUiDisplayResetProgress} +type createKeybase1LoginUiExplainDeviceRecovery = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.loginUi.explainDeviceRecovery']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.loginUi.explainDeviceRecovery']['outParam']) => void } -}) => ({payload, type: keybase1LoginUiExplainDeviceRecovery}) as const -const createKeybase1LoginUiGetEmailOrUsername = (payload: { +}) => {payload: typeof payload; type: typeof keybase1LoginUiExplainDeviceRecovery} +type createKeybase1LoginUiGetEmailOrUsername = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.loginUi.getEmailOrUsername']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.loginUi.getEmailOrUsername']['outParam']) => void } -}) => ({payload, type: keybase1LoginUiGetEmailOrUsername}) as const -const createKeybase1LoginUiPromptPassphraseRecovery = (payload: { +}) => {payload: typeof payload; type: typeof keybase1LoginUiGetEmailOrUsername} +type createKeybase1LoginUiPromptPassphraseRecovery = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.loginUi.promptPassphraseRecovery']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -905,51 +905,51 @@ const createKeybase1LoginUiPromptPassphraseRecovery = (payload: { param: keybase1Types.MessageTypes['keybase.1.loginUi.promptPassphraseRecovery']['outParam'] ) => void } -}) => ({payload, type: keybase1LoginUiPromptPassphraseRecovery}) as const -const createKeybase1LoginUiPromptResetAccount = (payload: { +}) => {payload: typeof payload; type: typeof keybase1LoginUiPromptPassphraseRecovery} +type createKeybase1LoginUiPromptResetAccount = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.loginUi.promptResetAccount']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.loginUi.promptResetAccount']['outParam']) => void } -}) => ({payload, type: keybase1LoginUiPromptResetAccount}) as const -const createKeybase1LoginUiPromptRevokePaperKeys = (payload: { +}) => {payload: typeof payload; type: typeof keybase1LoginUiPromptResetAccount} +type createKeybase1LoginUiPromptRevokePaperKeys = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.loginUi.promptRevokePaperKeys']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.loginUi.promptRevokePaperKeys']['outParam']) => void } -}) => ({payload, type: keybase1LoginUiPromptRevokePaperKeys}) as const -const createKeybase1LogsendPrepareLogsend = (payload: { +}) => {payload: typeof payload; type: typeof keybase1LoginUiPromptRevokePaperKeys} +type createKeybase1LogsendPrepareLogsend = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.logsend.prepareLogsend']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.logsend.prepareLogsend']['outParam']) => void } -}) => ({payload, type: keybase1LogsendPrepareLogsend}) as const -const createKeybase1NotifyAppExit = (payload: { +}) => {payload: typeof payload; type: typeof keybase1LogsendPrepareLogsend} +type createKeybase1NotifyAppExit = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyApp.exit']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.NotifyApp.exit']['outParam']) => void } -}) => ({payload, type: keybase1NotifyAppExit}) as const -const createKeybase1NotifyAuditBoxAuditError = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyAppExit} +type createKeybase1NotifyAuditBoxAuditError = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyAudit.boxAuditError']['inParam'] -}) => ({payload, type: keybase1NotifyAuditBoxAuditError}) as const -const createKeybase1NotifyAuditRootAuditError = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyAuditBoxAuditError} +type createKeybase1NotifyAuditRootAuditError = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyAudit.rootAuditError']['inParam'] -}) => ({payload, type: keybase1NotifyAuditRootAuditError}) as const -const createKeybase1NotifyBadgesBadgeState = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyAuditRootAuditError} +type createKeybase1NotifyBadgesBadgeState = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyBadges.badgeState']['inParam'] -}) => ({payload, type: keybase1NotifyBadgesBadgeState}) as const -const createKeybase1NotifyCanUserPerformCanUserPerformChanged = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyBadgesBadgeState} +type createKeybase1NotifyCanUserPerformCanUserPerformChanged = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyCanUserPerform.canUserPerformChanged']['inParam'] -}) => ({payload, type: keybase1NotifyCanUserPerformCanUserPerformChanged}) as const -const createKeybase1NotifyDeviceCloneDeviceCloneCountChanged = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyCanUserPerformCanUserPerformChanged} +type createKeybase1NotifyDeviceCloneDeviceCloneCountChanged = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyDeviceClone.deviceCloneCountChanged']['inParam'] -}) => ({payload, type: keybase1NotifyDeviceCloneDeviceCloneCountChanged}) as const -const createKeybase1NotifyEmailAddressEmailAddressVerified = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyDeviceCloneDeviceCloneCountChanged} +type createKeybase1NotifyEmailAddressEmailAddressVerified = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyEmailAddress.emailAddressVerified']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -957,8 +957,8 @@ const createKeybase1NotifyEmailAddressEmailAddressVerified = (payload: { param: keybase1Types.MessageTypes['keybase.1.NotifyEmailAddress.emailAddressVerified']['outParam'] ) => void } -}) => ({payload, type: keybase1NotifyEmailAddressEmailAddressVerified}) as const -const createKeybase1NotifyEmailAddressEmailsChanged = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyEmailAddressEmailAddressVerified} +type createKeybase1NotifyEmailAddressEmailsChanged = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyEmailAddress.emailsChanged']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -966,18 +966,18 @@ const createKeybase1NotifyEmailAddressEmailsChanged = (payload: { param: keybase1Types.MessageTypes['keybase.1.NotifyEmailAddress.emailsChanged']['outParam'] ) => void } -}) => ({payload, type: keybase1NotifyEmailAddressEmailsChanged}) as const -const createKeybase1NotifyEphemeralNewTeamEk = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyEmailAddressEmailsChanged} +type createKeybase1NotifyEphemeralNewTeamEk = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyEphemeral.newTeamEk']['inParam'] -}) => ({payload, type: keybase1NotifyEphemeralNewTeamEk}) as const -const createKeybase1NotifyEphemeralNewTeambotEk = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyEphemeralNewTeamEk} +type createKeybase1NotifyEphemeralNewTeambotEk = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyEphemeral.newTeambotEk']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.NotifyEphemeral.newTeambotEk']['outParam']) => void } -}) => ({payload, type: keybase1NotifyEphemeralNewTeambotEk}) as const -const createKeybase1NotifyEphemeralTeambotEkNeeded = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyEphemeralNewTeambotEk} +type createKeybase1NotifyEphemeralTeambotEkNeeded = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyEphemeral.teambotEkNeeded']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -985,25 +985,25 @@ const createKeybase1NotifyEphemeralTeambotEkNeeded = (payload: { param: keybase1Types.MessageTypes['keybase.1.NotifyEphemeral.teambotEkNeeded']['outParam'] ) => void } -}) => ({payload, type: keybase1NotifyEphemeralTeambotEkNeeded}) as const -const createKeybase1NotifyFSFSActivity = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyEphemeralTeambotEkNeeded} +type createKeybase1NotifyFSFSActivity = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyFS.FSActivity']['inParam'] -}) => ({payload, type: keybase1NotifyFSFSActivity}) as const -const createKeybase1NotifyFSFSEditListResponse = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyFSFSActivity} +type createKeybase1NotifyFSFSEditListResponse = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyFS.FSEditListResponse']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.NotifyFS.FSEditListResponse']['outParam']) => void } -}) => ({payload, type: keybase1NotifyFSFSEditListResponse}) as const -const createKeybase1NotifyFSFSFavoritesChanged = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyFSFSEditListResponse} +type createKeybase1NotifyFSFSFavoritesChanged = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyFS.FSFavoritesChanged']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.NotifyFS.FSFavoritesChanged']['outParam']) => void } -}) => ({payload, type: keybase1NotifyFSFSFavoritesChanged}) as const -const createKeybase1NotifyFSFSOnlineStatusChanged = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyFSFSFavoritesChanged} +type createKeybase1NotifyFSFSOnlineStatusChanged = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyFS.FSOnlineStatusChanged']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1011,8 +1011,8 @@ const createKeybase1NotifyFSFSOnlineStatusChanged = (payload: { param: keybase1Types.MessageTypes['keybase.1.NotifyFS.FSOnlineStatusChanged']['outParam'] ) => void } -}) => ({payload, type: keybase1NotifyFSFSOnlineStatusChanged}) as const -const createKeybase1NotifyFSFSOverallSyncStatusChanged = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyFSFSOnlineStatusChanged} +type createKeybase1NotifyFSFSOverallSyncStatusChanged = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyFS.FSOverallSyncStatusChanged']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1020,18 +1020,18 @@ const createKeybase1NotifyFSFSOverallSyncStatusChanged = (payload: { param: keybase1Types.MessageTypes['keybase.1.NotifyFS.FSOverallSyncStatusChanged']['outParam'] ) => void } -}) => ({payload, type: keybase1NotifyFSFSOverallSyncStatusChanged}) as const -const createKeybase1NotifyFSFSPathUpdated = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyFSFSOverallSyncStatusChanged} +type createKeybase1NotifyFSFSPathUpdated = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyFS.FSPathUpdated']['inParam'] -}) => ({payload, type: keybase1NotifyFSFSPathUpdated}) as const -const createKeybase1NotifyFSFSSubscriptionNotify = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyFSFSPathUpdated} +type createKeybase1NotifyFSFSSubscriptionNotify = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyFS.FSSubscriptionNotify']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.NotifyFS.FSSubscriptionNotify']['outParam']) => void } -}) => ({payload, type: keybase1NotifyFSFSSubscriptionNotify}) as const -const createKeybase1NotifyFSFSSubscriptionNotifyPath = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyFSFSSubscriptionNotify} +type createKeybase1NotifyFSFSSubscriptionNotifyPath = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyFS.FSSubscriptionNotifyPath']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1039,25 +1039,25 @@ const createKeybase1NotifyFSFSSubscriptionNotifyPath = (payload: { param: keybase1Types.MessageTypes['keybase.1.NotifyFS.FSSubscriptionNotifyPath']['outParam'] ) => void } -}) => ({payload, type: keybase1NotifyFSFSSubscriptionNotifyPath}) as const -const createKeybase1NotifyFSFSSyncActivity = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyFSFSSubscriptionNotifyPath} +type createKeybase1NotifyFSFSSyncActivity = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyFS.FSSyncActivity']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.NotifyFS.FSSyncActivity']['outParam']) => void } -}) => ({payload, type: keybase1NotifyFSFSSyncActivity}) as const -const createKeybase1NotifyFSFSSyncStatusResponse = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyFSFSSyncActivity} +type createKeybase1NotifyFSFSSyncStatusResponse = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyFS.FSSyncStatusResponse']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.NotifyFS.FSSyncStatusResponse']['outParam']) => void } -}) => ({payload, type: keybase1NotifyFSFSSyncStatusResponse}) as const -const createKeybase1NotifyFavoritesFavoritesChanged = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyFSFSSyncStatusResponse} +type createKeybase1NotifyFavoritesFavoritesChanged = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyFavorites.favoritesChanged']['inParam'] -}) => ({payload, type: keybase1NotifyFavoritesFavoritesChanged}) as const -const createKeybase1NotifyFeaturedBotsFeaturedBotsUpdate = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyFavoritesFavoritesChanged} +type createKeybase1NotifyFeaturedBotsFeaturedBotsUpdate = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyFeaturedBots.featuredBotsUpdate']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1065,8 +1065,8 @@ const createKeybase1NotifyFeaturedBotsFeaturedBotsUpdate = (payload: { param: keybase1Types.MessageTypes['keybase.1.NotifyFeaturedBots.featuredBotsUpdate']['outParam'] ) => void } -}) => ({payload, type: keybase1NotifyFeaturedBotsFeaturedBotsUpdate}) as const -const createKeybase1NotifyInviteFriendsUpdateInviteCounts = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyFeaturedBotsFeaturedBotsUpdate} +type createKeybase1NotifyInviteFriendsUpdateInviteCounts = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyInviteFriends.updateInviteCounts']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1074,8 +1074,8 @@ const createKeybase1NotifyInviteFriendsUpdateInviteCounts = (payload: { param: keybase1Types.MessageTypes['keybase.1.NotifyInviteFriends.updateInviteCounts']['outParam'] ) => void } -}) => ({payload, type: keybase1NotifyInviteFriendsUpdateInviteCounts}) as const -const createKeybase1NotifyKeyfamilyKeyfamilyChanged = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyInviteFriendsUpdateInviteCounts} +type createKeybase1NotifyKeyfamilyKeyfamilyChanged = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyKeyfamily.keyfamilyChanged']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1083,8 +1083,8 @@ const createKeybase1NotifyKeyfamilyKeyfamilyChanged = (payload: { param: keybase1Types.MessageTypes['keybase.1.NotifyKeyfamily.keyfamilyChanged']['outParam'] ) => void } -}) => ({payload, type: keybase1NotifyKeyfamilyKeyfamilyChanged}) as const -const createKeybase1NotifyPGPPgpKeyInSecretStoreFile = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyKeyfamilyKeyfamilyChanged} +type createKeybase1NotifyPGPPgpKeyInSecretStoreFile = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyPGP.pgpKeyInSecretStoreFile']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1092,15 +1092,15 @@ const createKeybase1NotifyPGPPgpKeyInSecretStoreFile = (payload: { param: keybase1Types.MessageTypes['keybase.1.NotifyPGP.pgpKeyInSecretStoreFile']['outParam'] ) => void } -}) => ({payload, type: keybase1NotifyPGPPgpKeyInSecretStoreFile}) as const -const createKeybase1NotifyPaperKeyPaperKeyCached = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyPGPPgpKeyInSecretStoreFile} +type createKeybase1NotifyPaperKeyPaperKeyCached = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyPaperKey.paperKeyCached']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.NotifyPaperKey.paperKeyCached']['outParam']) => void } -}) => ({payload, type: keybase1NotifyPaperKeyPaperKeyCached}) as const -const createKeybase1NotifyPhoneNumberPhoneNumbersChanged = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyPaperKeyPaperKeyCached} +type createKeybase1NotifyPhoneNumberPhoneNumbersChanged = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyPhoneNumber.phoneNumbersChanged']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1108,8 +1108,8 @@ const createKeybase1NotifyPhoneNumberPhoneNumbersChanged = (payload: { param: keybase1Types.MessageTypes['keybase.1.NotifyPhoneNumber.phoneNumbersChanged']['outParam'] ) => void } -}) => ({payload, type: keybase1NotifyPhoneNumberPhoneNumbersChanged}) as const -const createKeybase1NotifyRuntimeStatsRuntimeStatsUpdate = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyPhoneNumberPhoneNumbersChanged} +type createKeybase1NotifyRuntimeStatsRuntimeStatsUpdate = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyRuntimeStats.runtimeStatsUpdate']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1117,8 +1117,8 @@ const createKeybase1NotifyRuntimeStatsRuntimeStatsUpdate = (payload: { param: keybase1Types.MessageTypes['keybase.1.NotifyRuntimeStats.runtimeStatsUpdate']['outParam'] ) => void } -}) => ({payload, type: keybase1NotifyRuntimeStatsRuntimeStatsUpdate}) as const -const createKeybase1NotifySaltpackSaltpackOperationDone = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyRuntimeStatsRuntimeStatsUpdate} +type createKeybase1NotifySaltpackSaltpackOperationDone = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifySaltpack.saltpackOperationDone']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1126,8 +1126,8 @@ const createKeybase1NotifySaltpackSaltpackOperationDone = (payload: { param: keybase1Types.MessageTypes['keybase.1.NotifySaltpack.saltpackOperationDone']['outParam'] ) => void } -}) => ({payload, type: keybase1NotifySaltpackSaltpackOperationDone}) as const -const createKeybase1NotifySaltpackSaltpackOperationProgress = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifySaltpackSaltpackOperationDone} +type createKeybase1NotifySaltpackSaltpackOperationProgress = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifySaltpack.saltpackOperationProgress']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1135,8 +1135,8 @@ const createKeybase1NotifySaltpackSaltpackOperationProgress = (payload: { param: keybase1Types.MessageTypes['keybase.1.NotifySaltpack.saltpackOperationProgress']['outParam'] ) => void } -}) => ({payload, type: keybase1NotifySaltpackSaltpackOperationProgress}) as const -const createKeybase1NotifySaltpackSaltpackOperationStart = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifySaltpackSaltpackOperationProgress} +type createKeybase1NotifySaltpackSaltpackOperationStart = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifySaltpack.saltpackOperationStart']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1144,8 +1144,8 @@ const createKeybase1NotifySaltpackSaltpackOperationStart = (payload: { param: keybase1Types.MessageTypes['keybase.1.NotifySaltpack.saltpackOperationStart']['outParam'] ) => void } -}) => ({payload, type: keybase1NotifySaltpackSaltpackOperationStart}) as const -const createKeybase1NotifyServiceHTTPSrvInfoUpdate = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifySaltpackSaltpackOperationStart} +type createKeybase1NotifyServiceHTTPSrvInfoUpdate = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyService.HTTPSrvInfoUpdate']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1153,8 +1153,8 @@ const createKeybase1NotifyServiceHTTPSrvInfoUpdate = (payload: { param: keybase1Types.MessageTypes['keybase.1.NotifyService.HTTPSrvInfoUpdate']['outParam'] ) => void } -}) => ({payload, type: keybase1NotifyServiceHTTPSrvInfoUpdate}) as const -const createKeybase1NotifyServiceHandleKeybaseLink = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyServiceHTTPSrvInfoUpdate} +type createKeybase1NotifyServiceHandleKeybaseLink = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyService.handleKeybaseLink']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1162,32 +1162,32 @@ const createKeybase1NotifyServiceHandleKeybaseLink = (payload: { param: keybase1Types.MessageTypes['keybase.1.NotifyService.handleKeybaseLink']['outParam'] ) => void } -}) => ({payload, type: keybase1NotifyServiceHandleKeybaseLink}) as const -const createKeybase1NotifyServiceShutdown = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyServiceHandleKeybaseLink} +type createKeybase1NotifyServiceShutdown = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyService.shutdown']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.NotifyService.shutdown']['outParam']) => void } -}) => ({payload, type: keybase1NotifyServiceShutdown}) as const -const createKeybase1NotifySessionClientOutOfDate = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyServiceShutdown} +type createKeybase1NotifySessionClientOutOfDate = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifySession.clientOutOfDate']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.NotifySession.clientOutOfDate']['outParam']) => void } -}) => ({payload, type: keybase1NotifySessionClientOutOfDate}) as const -const createKeybase1NotifySessionLoggedIn = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifySessionClientOutOfDate} +type createKeybase1NotifySessionLoggedIn = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifySession.loggedIn']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.NotifySession.loggedIn']['outParam']) => void } -}) => ({payload, type: keybase1NotifySessionLoggedIn}) as const -const createKeybase1NotifySessionLoggedOut = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifySessionLoggedIn} +type createKeybase1NotifySessionLoggedOut = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifySession.loggedOut']['inParam'] -}) => ({payload, type: keybase1NotifySessionLoggedOut}) as const -const createKeybase1NotifySimpleFSSimpleFSArchiveStatusChanged = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifySessionLoggedOut} +type createKeybase1NotifySimpleFSSimpleFSArchiveStatusChanged = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifySimpleFS.simpleFSArchiveStatusChanged']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1195,71 +1195,71 @@ const createKeybase1NotifySimpleFSSimpleFSArchiveStatusChanged = (payload: { param: keybase1Types.MessageTypes['keybase.1.NotifySimpleFS.simpleFSArchiveStatusChanged']['outParam'] ) => void } -}) => ({payload, type: keybase1NotifySimpleFSSimpleFSArchiveStatusChanged}) as const -const createKeybase1NotifyTeamAvatarUpdated = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifySimpleFSSimpleFSArchiveStatusChanged} +type createKeybase1NotifyTeamAvatarUpdated = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyTeam.avatarUpdated']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.NotifyTeam.avatarUpdated']['outParam']) => void } -}) => ({payload, type: keybase1NotifyTeamAvatarUpdated}) as const -const createKeybase1NotifyTeamNewlyAddedToTeam = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyTeamAvatarUpdated} +type createKeybase1NotifyTeamNewlyAddedToTeam = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyTeam.newlyAddedToTeam']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.NotifyTeam.newlyAddedToTeam']['outParam']) => void } -}) => ({payload, type: keybase1NotifyTeamNewlyAddedToTeam}) as const -const createKeybase1NotifyTeamTeamAbandoned = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyTeamNewlyAddedToTeam} +type createKeybase1NotifyTeamTeamAbandoned = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyTeam.teamAbandoned']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.NotifyTeam.teamAbandoned']['outParam']) => void } -}) => ({payload, type: keybase1NotifyTeamTeamAbandoned}) as const -const createKeybase1NotifyTeamTeamChangedByID = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyTeamTeamAbandoned} +type createKeybase1NotifyTeamTeamChangedByID = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyTeam.teamChangedByID']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.NotifyTeam.teamChangedByID']['outParam']) => void } -}) => ({payload, type: keybase1NotifyTeamTeamChangedByID}) as const -const createKeybase1NotifyTeamTeamChangedByName = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyTeamTeamChangedByID} +type createKeybase1NotifyTeamTeamChangedByName = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyTeam.teamChangedByName']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.NotifyTeam.teamChangedByName']['outParam']) => void } -}) => ({payload, type: keybase1NotifyTeamTeamChangedByName}) as const -const createKeybase1NotifyTeamTeamDeleted = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyTeamTeamChangedByName} +type createKeybase1NotifyTeamTeamDeleted = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyTeam.teamDeleted']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.NotifyTeam.teamDeleted']['outParam']) => void } -}) => ({payload, type: keybase1NotifyTeamTeamDeleted}) as const -const createKeybase1NotifyTeamTeamExit = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyTeamTeamDeleted} +type createKeybase1NotifyTeamTeamExit = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyTeam.teamExit']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.NotifyTeam.teamExit']['outParam']) => void } -}) => ({payload, type: keybase1NotifyTeamTeamExit}) as const -const createKeybase1NotifyTeamTeamMetadataUpdate = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyTeamTeamExit} +type createKeybase1NotifyTeamTeamMetadataUpdate = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyTeam.teamMetadataUpdate']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.NotifyTeam.teamMetadataUpdate']['outParam']) => void } -}) => ({payload, type: keybase1NotifyTeamTeamMetadataUpdate}) as const -const createKeybase1NotifyTeamTeamRoleMapChanged = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyTeamTeamMetadataUpdate} +type createKeybase1NotifyTeamTeamRoleMapChanged = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyTeam.teamRoleMapChanged']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.NotifyTeam.teamRoleMapChanged']['outParam']) => void } -}) => ({payload, type: keybase1NotifyTeamTeamRoleMapChanged}) as const -const createKeybase1NotifyTeamTeamTreeMembershipsDone = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyTeamTeamRoleMapChanged} +type createKeybase1NotifyTeamTeamTreeMembershipsDone = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyTeam.teamTreeMembershipsDone']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1267,8 +1267,8 @@ const createKeybase1NotifyTeamTeamTreeMembershipsDone = (payload: { param: keybase1Types.MessageTypes['keybase.1.NotifyTeam.teamTreeMembershipsDone']['outParam'] ) => void } -}) => ({payload, type: keybase1NotifyTeamTeamTreeMembershipsDone}) as const -const createKeybase1NotifyTeamTeamTreeMembershipsPartial = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyTeamTeamTreeMembershipsDone} +type createKeybase1NotifyTeamTeamTreeMembershipsPartial = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyTeam.teamTreeMembershipsPartial']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1276,11 +1276,11 @@ const createKeybase1NotifyTeamTeamTreeMembershipsPartial = (payload: { param: keybase1Types.MessageTypes['keybase.1.NotifyTeam.teamTreeMembershipsPartial']['outParam'] ) => void } -}) => ({payload, type: keybase1NotifyTeamTeamTreeMembershipsPartial}) as const -const createKeybase1NotifyTeambotNewTeambotKey = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyTeamTeamTreeMembershipsPartial} +type createKeybase1NotifyTeambotNewTeambotKey = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyTeambot.newTeambotKey']['inParam'] -}) => ({payload, type: keybase1NotifyTeambotNewTeambotKey}) as const -const createKeybase1NotifyTeambotTeambotKeyNeeded = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyTeambotNewTeambotKey} +type createKeybase1NotifyTeambotTeambotKeyNeeded = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyTeambot.teambotKeyNeeded']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1288,8 +1288,8 @@ const createKeybase1NotifyTeambotTeambotKeyNeeded = (payload: { param: keybase1Types.MessageTypes['keybase.1.NotifyTeambot.teambotKeyNeeded']['outParam'] ) => void } -}) => ({payload, type: keybase1NotifyTeambotTeambotKeyNeeded}) as const -const createKeybase1NotifyTrackingNotifyUserBlocked = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyTeambotTeambotKeyNeeded} +type createKeybase1NotifyTrackingNotifyUserBlocked = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyTracking.notifyUserBlocked']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1297,59 +1297,59 @@ const createKeybase1NotifyTrackingNotifyUserBlocked = (payload: { param: keybase1Types.MessageTypes['keybase.1.NotifyTracking.notifyUserBlocked']['outParam'] ) => void } -}) => ({payload, type: keybase1NotifyTrackingNotifyUserBlocked}) as const -const createKeybase1NotifyTrackingTrackingChanged = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyTrackingNotifyUserBlocked} +type createKeybase1NotifyTrackingTrackingChanged = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyTracking.trackingChanged']['inParam'] -}) => ({payload, type: keybase1NotifyTrackingTrackingChanged}) as const -const createKeybase1NotifyTrackingTrackingInfo = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyTrackingTrackingChanged} +type createKeybase1NotifyTrackingTrackingInfo = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyTracking.trackingInfo']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.NotifyTracking.trackingInfo']['outParam']) => void } -}) => ({payload, type: keybase1NotifyTrackingTrackingInfo}) as const -const createKeybase1NotifyUsersIdentifyUpdate = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyTrackingTrackingInfo} +type createKeybase1NotifyUsersIdentifyUpdate = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyUsers.identifyUpdate']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.NotifyUsers.identifyUpdate']['outParam']) => void } -}) => ({payload, type: keybase1NotifyUsersIdentifyUpdate}) as const -const createKeybase1NotifyUsersPasswordChanged = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyUsersIdentifyUpdate} +type createKeybase1NotifyUsersPasswordChanged = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyUsers.passwordChanged']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.NotifyUsers.passwordChanged']['outParam']) => void } -}) => ({payload, type: keybase1NotifyUsersPasswordChanged}) as const -const createKeybase1NotifyUsersUserChanged = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyUsersPasswordChanged} +type createKeybase1NotifyUsersUserChanged = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyUsers.userChanged']['inParam'] -}) => ({payload, type: keybase1NotifyUsersUserChanged}) as const -const createKeybase1NotifyUsersWebOfTrustChanged = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyUsersUserChanged} +type createKeybase1NotifyUsersWebOfTrustChanged = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.NotifyUsers.webOfTrustChanged']['inParam'] -}) => ({payload, type: keybase1NotifyUsersWebOfTrustChanged}) as const -const createKeybase1PgpUiFinished = (payload: { +}) => {payload: typeof payload; type: typeof keybase1NotifyUsersWebOfTrustChanged} +type createKeybase1PgpUiFinished = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.pgpUi.finished']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.pgpUi.finished']['outParam']) => void } -}) => ({payload, type: keybase1PgpUiFinished}) as const -const createKeybase1PgpUiKeyGenerated = (payload: { +}) => {payload: typeof payload; type: typeof keybase1PgpUiFinished} +type createKeybase1PgpUiKeyGenerated = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.pgpUi.keyGenerated']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.pgpUi.keyGenerated']['outParam']) => void } -}) => ({payload, type: keybase1PgpUiKeyGenerated}) as const -const createKeybase1PgpUiOutputPGPWarning = (payload: { +}) => {payload: typeof payload; type: typeof keybase1PgpUiKeyGenerated} +type createKeybase1PgpUiOutputPGPWarning = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.pgpUi.outputPGPWarning']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.pgpUi.outputPGPWarning']['outParam']) => void } -}) => ({payload, type: keybase1PgpUiOutputPGPWarning}) as const -const createKeybase1PgpUiOutputSignatureNonKeybase = (payload: { +}) => {payload: typeof payload; type: typeof keybase1PgpUiOutputPGPWarning} +type createKeybase1PgpUiOutputSignatureNonKeybase = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.pgpUi.outputSignatureNonKeybase']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1357,106 +1357,106 @@ const createKeybase1PgpUiOutputSignatureNonKeybase = (payload: { param: keybase1Types.MessageTypes['keybase.1.pgpUi.outputSignatureNonKeybase']['outParam'] ) => void } -}) => ({payload, type: keybase1PgpUiOutputSignatureNonKeybase}) as const -const createKeybase1PgpUiOutputSignatureSuccess = (payload: { +}) => {payload: typeof payload; type: typeof keybase1PgpUiOutputSignatureNonKeybase} +type createKeybase1PgpUiOutputSignatureSuccess = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.pgpUi.outputSignatureSuccess']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.pgpUi.outputSignatureSuccess']['outParam']) => void } -}) => ({payload, type: keybase1PgpUiOutputSignatureSuccess}) as const -const createKeybase1PgpUiShouldPushPrivate = (payload: { +}) => {payload: typeof payload; type: typeof keybase1PgpUiOutputSignatureSuccess} +type createKeybase1PgpUiShouldPushPrivate = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.pgpUi.shouldPushPrivate']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.pgpUi.shouldPushPrivate']['outParam']) => void } -}) => ({payload, type: keybase1PgpUiShouldPushPrivate}) as const -const createKeybase1ProveUiChecking = (payload: { +}) => {payload: typeof payload; type: typeof keybase1PgpUiShouldPushPrivate} +type createKeybase1ProveUiChecking = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.proveUi.checking']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.proveUi.checking']['outParam']) => void } -}) => ({payload, type: keybase1ProveUiChecking}) as const -const createKeybase1ProveUiContinueChecking = (payload: { +}) => {payload: typeof payload; type: typeof keybase1ProveUiChecking} +type createKeybase1ProveUiContinueChecking = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.proveUi.continueChecking']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.proveUi.continueChecking']['outParam']) => void } -}) => ({payload, type: keybase1ProveUiContinueChecking}) as const -const createKeybase1ProveUiDisplayRecheckWarning = (payload: { +}) => {payload: typeof payload; type: typeof keybase1ProveUiContinueChecking} +type createKeybase1ProveUiDisplayRecheckWarning = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.proveUi.displayRecheckWarning']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.proveUi.displayRecheckWarning']['outParam']) => void } -}) => ({payload, type: keybase1ProveUiDisplayRecheckWarning}) as const -const createKeybase1ProveUiOkToCheck = (payload: { +}) => {payload: typeof payload; type: typeof keybase1ProveUiDisplayRecheckWarning} +type createKeybase1ProveUiOkToCheck = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.proveUi.okToCheck']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.proveUi.okToCheck']['outParam']) => void } -}) => ({payload, type: keybase1ProveUiOkToCheck}) as const -const createKeybase1ProveUiOutputInstructions = (payload: { +}) => {payload: typeof payload; type: typeof keybase1ProveUiOkToCheck} +type createKeybase1ProveUiOutputInstructions = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.proveUi.outputInstructions']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.proveUi.outputInstructions']['outParam']) => void } -}) => ({payload, type: keybase1ProveUiOutputInstructions}) as const -const createKeybase1ProveUiOutputPrechecks = (payload: { +}) => {payload: typeof payload; type: typeof keybase1ProveUiOutputInstructions} +type createKeybase1ProveUiOutputPrechecks = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.proveUi.outputPrechecks']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.proveUi.outputPrechecks']['outParam']) => void } -}) => ({payload, type: keybase1ProveUiOutputPrechecks}) as const -const createKeybase1ProveUiPreProofWarning = (payload: { +}) => {payload: typeof payload; type: typeof keybase1ProveUiOutputPrechecks} +type createKeybase1ProveUiPreProofWarning = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.proveUi.preProofWarning']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.proveUi.preProofWarning']['outParam']) => void } -}) => ({payload, type: keybase1ProveUiPreProofWarning}) as const -const createKeybase1ProveUiPromptOverwrite = (payload: { +}) => {payload: typeof payload; type: typeof keybase1ProveUiPreProofWarning} +type createKeybase1ProveUiPromptOverwrite = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.proveUi.promptOverwrite']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.proveUi.promptOverwrite']['outParam']) => void } -}) => ({payload, type: keybase1ProveUiPromptOverwrite}) as const -const createKeybase1ProveUiPromptUsername = (payload: { +}) => {payload: typeof payload; type: typeof keybase1ProveUiPromptOverwrite} +type createKeybase1ProveUiPromptUsername = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.proveUi.promptUsername']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.proveUi.promptUsername']['outParam']) => void } -}) => ({payload, type: keybase1ProveUiPromptUsername}) as const -const createKeybase1ProvisionUiChooseDevice = (payload: { +}) => {payload: typeof payload; type: typeof keybase1ProveUiPromptUsername} +type createKeybase1ProvisionUiChooseDevice = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.provisionUi.chooseDevice']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.provisionUi.chooseDevice']['outParam']) => void } -}) => ({payload, type: keybase1ProvisionUiChooseDevice}) as const -const createKeybase1ProvisionUiChooseDeviceType = (payload: { +}) => {payload: typeof payload; type: typeof keybase1ProvisionUiChooseDevice} +type createKeybase1ProvisionUiChooseDeviceType = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.provisionUi.chooseDeviceType']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.provisionUi.chooseDeviceType']['outParam']) => void } -}) => ({payload, type: keybase1ProvisionUiChooseDeviceType}) as const -const createKeybase1ProvisionUiChooseGPGMethod = (payload: { +}) => {payload: typeof payload; type: typeof keybase1ProvisionUiChooseDeviceType} +type createKeybase1ProvisionUiChooseGPGMethod = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.provisionUi.chooseGPGMethod']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.provisionUi.chooseGPGMethod']['outParam']) => void } -}) => ({payload, type: keybase1ProvisionUiChooseGPGMethod}) as const -const createKeybase1ProvisionUiChooseProvisioningMethod = (payload: { +}) => {payload: typeof payload; type: typeof keybase1ProvisionUiChooseGPGMethod} +type createKeybase1ProvisionUiChooseProvisioningMethod = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.provisionUi.chooseProvisioningMethod']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1464,8 +1464,8 @@ const createKeybase1ProvisionUiChooseProvisioningMethod = (payload: { param: keybase1Types.MessageTypes['keybase.1.provisionUi.chooseProvisioningMethod']['outParam'] ) => void } -}) => ({payload, type: keybase1ProvisionUiChooseProvisioningMethod}) as const -const createKeybase1ProvisionUiDisplayAndPromptSecret = (payload: { +}) => {payload: typeof payload; type: typeof keybase1ProvisionUiChooseProvisioningMethod} +type createKeybase1ProvisionUiDisplayAndPromptSecret = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.provisionUi.DisplayAndPromptSecret']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1473,8 +1473,8 @@ const createKeybase1ProvisionUiDisplayAndPromptSecret = (payload: { param: keybase1Types.MessageTypes['keybase.1.provisionUi.DisplayAndPromptSecret']['outParam'] ) => void } -}) => ({payload, type: keybase1ProvisionUiDisplayAndPromptSecret}) as const -const createKeybase1ProvisionUiDisplaySecretExchanged = (payload: { +}) => {payload: typeof payload; type: typeof keybase1ProvisionUiDisplayAndPromptSecret} +type createKeybase1ProvisionUiDisplaySecretExchanged = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.provisionUi.DisplaySecretExchanged']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1482,8 +1482,8 @@ const createKeybase1ProvisionUiDisplaySecretExchanged = (payload: { param: keybase1Types.MessageTypes['keybase.1.provisionUi.DisplaySecretExchanged']['outParam'] ) => void } -}) => ({payload, type: keybase1ProvisionUiDisplaySecretExchanged}) as const -const createKeybase1ProvisionUiPromptNewDeviceName = (payload: { +}) => {payload: typeof payload; type: typeof keybase1ProvisionUiDisplaySecretExchanged} +type createKeybase1ProvisionUiPromptNewDeviceName = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.provisionUi.PromptNewDeviceName']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1491,8 +1491,8 @@ const createKeybase1ProvisionUiPromptNewDeviceName = (payload: { param: keybase1Types.MessageTypes['keybase.1.provisionUi.PromptNewDeviceName']['outParam'] ) => void } -}) => ({payload, type: keybase1ProvisionUiPromptNewDeviceName}) as const -const createKeybase1ProvisionUiProvisioneeSuccess = (payload: { +}) => {payload: typeof payload; type: typeof keybase1ProvisionUiPromptNewDeviceName} +type createKeybase1ProvisionUiProvisioneeSuccess = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.provisionUi.ProvisioneeSuccess']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1500,8 +1500,8 @@ const createKeybase1ProvisionUiProvisioneeSuccess = (payload: { param: keybase1Types.MessageTypes['keybase.1.provisionUi.ProvisioneeSuccess']['outParam'] ) => void } -}) => ({payload, type: keybase1ProvisionUiProvisioneeSuccess}) as const -const createKeybase1ProvisionUiProvisionerSuccess = (payload: { +}) => {payload: typeof payload; type: typeof keybase1ProvisionUiProvisioneeSuccess} +type createKeybase1ProvisionUiProvisionerSuccess = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.provisionUi.ProvisionerSuccess']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1509,39 +1509,39 @@ const createKeybase1ProvisionUiProvisionerSuccess = (payload: { param: keybase1Types.MessageTypes['keybase.1.provisionUi.ProvisionerSuccess']['outParam'] ) => void } -}) => ({payload, type: keybase1ProvisionUiProvisionerSuccess}) as const -const createKeybase1ProvisionUiSwitchToGPGSignOK = (payload: { +}) => {payload: typeof payload; type: typeof keybase1ProvisionUiProvisionerSuccess} +type createKeybase1ProvisionUiSwitchToGPGSignOK = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.provisionUi.switchToGPGSignOK']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.provisionUi.switchToGPGSignOK']['outParam']) => void } -}) => ({payload, type: keybase1ProvisionUiSwitchToGPGSignOK}) as const -const createKeybase1ReachabilityReachabilityChanged = (payload: { +}) => {payload: typeof payload; type: typeof keybase1ProvisionUiSwitchToGPGSignOK} +type createKeybase1ReachabilityReachabilityChanged = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.reachability.reachabilityChanged']['inParam'] -}) => ({payload, type: keybase1ReachabilityReachabilityChanged}) as const -const createKeybase1RekeyUIDelegateRekeyUI = (payload: { +}) => {payload: typeof payload; type: typeof keybase1ReachabilityReachabilityChanged} +type createKeybase1RekeyUIDelegateRekeyUI = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.rekeyUI.delegateRekeyUI']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.rekeyUI.delegateRekeyUI']['outParam']) => void } -}) => ({payload, type: keybase1RekeyUIDelegateRekeyUI}) as const -const createKeybase1RekeyUIRefresh = (payload: { +}) => {payload: typeof payload; type: typeof keybase1RekeyUIDelegateRekeyUI} +type createKeybase1RekeyUIRefresh = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.rekeyUI.refresh']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.rekeyUI.refresh']['outParam']) => void } -}) => ({payload, type: keybase1RekeyUIRefresh}) as const -const createKeybase1RekeyUIRekeySendEvent = (payload: { +}) => {payload: typeof payload; type: typeof keybase1RekeyUIRefresh} +type createKeybase1RekeyUIRekeySendEvent = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.rekeyUI.rekeySendEvent']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.rekeyUI.rekeySendEvent']['outParam']) => void } -}) => ({payload, type: keybase1RekeyUIRekeySendEvent}) as const -const createKeybase1SaltpackUiSaltpackPromptForDecrypt = (payload: { +}) => {payload: typeof payload; type: typeof keybase1RekeyUIRekeySendEvent} +type createKeybase1SaltpackUiSaltpackPromptForDecrypt = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.saltpackUi.saltpackPromptForDecrypt']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1549,8 +1549,8 @@ const createKeybase1SaltpackUiSaltpackPromptForDecrypt = (payload: { param: keybase1Types.MessageTypes['keybase.1.saltpackUi.saltpackPromptForDecrypt']['outParam'] ) => void } -}) => ({payload, type: keybase1SaltpackUiSaltpackPromptForDecrypt}) as const -const createKeybase1SaltpackUiSaltpackVerifyBadSender = (payload: { +}) => {payload: typeof payload; type: typeof keybase1SaltpackUiSaltpackPromptForDecrypt} +type createKeybase1SaltpackUiSaltpackVerifyBadSender = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.saltpackUi.saltpackVerifyBadSender']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1558,8 +1558,8 @@ const createKeybase1SaltpackUiSaltpackVerifyBadSender = (payload: { param: keybase1Types.MessageTypes['keybase.1.saltpackUi.saltpackVerifyBadSender']['outParam'] ) => void } -}) => ({payload, type: keybase1SaltpackUiSaltpackVerifyBadSender}) as const -const createKeybase1SaltpackUiSaltpackVerifySuccess = (payload: { +}) => {payload: typeof payload; type: typeof keybase1SaltpackUiSaltpackVerifyBadSender} +type createKeybase1SaltpackUiSaltpackVerifySuccess = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.saltpackUi.saltpackVerifySuccess']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1567,43 +1567,43 @@ const createKeybase1SaltpackUiSaltpackVerifySuccess = (payload: { param: keybase1Types.MessageTypes['keybase.1.saltpackUi.saltpackVerifySuccess']['outParam'] ) => void } -}) => ({payload, type: keybase1SaltpackUiSaltpackVerifySuccess}) as const -const createKeybase1SecretUiGetPassphrase = (payload: { +}) => {payload: typeof payload; type: typeof keybase1SaltpackUiSaltpackVerifySuccess} +type createKeybase1SecretUiGetPassphrase = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.secretUi.getPassphrase']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.secretUi.getPassphrase']['outParam']) => void } -}) => ({payload, type: keybase1SecretUiGetPassphrase}) as const -const createKeybase1StreamUiClose = (payload: { +}) => {payload: typeof payload; type: typeof keybase1SecretUiGetPassphrase} +type createKeybase1StreamUiClose = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.streamUi.close']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.streamUi.close']['outParam']) => void } -}) => ({payload, type: keybase1StreamUiClose}) as const -const createKeybase1StreamUiRead = (payload: { +}) => {payload: typeof payload; type: typeof keybase1StreamUiClose} +type createKeybase1StreamUiRead = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.streamUi.read']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.streamUi.read']['outParam']) => void } -}) => ({payload, type: keybase1StreamUiRead}) as const -const createKeybase1StreamUiReset = (payload: { +}) => {payload: typeof payload; type: typeof keybase1StreamUiRead} +type createKeybase1StreamUiReset = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.streamUi.reset']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.streamUi.reset']['outParam']) => void } -}) => ({payload, type: keybase1StreamUiReset}) as const -const createKeybase1StreamUiWrite = (payload: { +}) => {payload: typeof payload; type: typeof keybase1StreamUiReset} +type createKeybase1StreamUiWrite = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.streamUi.write']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.streamUi.write']['outParam']) => void } -}) => ({payload, type: keybase1StreamUiWrite}) as const -const createKeybase1TeamsUiConfirmInviteLinkAccept = (payload: { +}) => {payload: typeof payload; type: typeof keybase1StreamUiWrite} +type createKeybase1TeamsUiConfirmInviteLinkAccept = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.teamsUi.confirmInviteLinkAccept']['inParam'] response: { error: keybase1Types.IncomingErrorCallback @@ -1611,538 +1611,356 @@ const createKeybase1TeamsUiConfirmInviteLinkAccept = (payload: { param: keybase1Types.MessageTypes['keybase.1.teamsUi.confirmInviteLinkAccept']['outParam'] ) => void } -}) => ({payload, type: keybase1TeamsUiConfirmInviteLinkAccept}) as const -const createKeybase1TeamsUiConfirmRootTeamDelete = (payload: { +}) => {payload: typeof payload; type: typeof keybase1TeamsUiConfirmInviteLinkAccept} +type createKeybase1TeamsUiConfirmRootTeamDelete = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.teamsUi.confirmRootTeamDelete']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.teamsUi.confirmRootTeamDelete']['outParam']) => void } -}) => ({payload, type: keybase1TeamsUiConfirmRootTeamDelete}) as const -const createKeybase1TeamsUiConfirmSubteamDelete = (payload: { +}) => {payload: typeof payload; type: typeof keybase1TeamsUiConfirmRootTeamDelete} +type createKeybase1TeamsUiConfirmSubteamDelete = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.teamsUi.confirmSubteamDelete']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.teamsUi.confirmSubteamDelete']['outParam']) => void } -}) => ({payload, type: keybase1TeamsUiConfirmSubteamDelete}) as const -const createKeybase1UiPromptYesNo = (payload: { +}) => {payload: typeof payload; type: typeof keybase1TeamsUiConfirmSubteamDelete} +type createKeybase1UiPromptYesNo = (payload: { readonly params: keybase1Types.MessageTypes['keybase.1.ui.promptYesNo']['inParam'] response: { error: keybase1Types.IncomingErrorCallback result: (param: keybase1Types.MessageTypes['keybase.1.ui.promptYesNo']['outParam']) => void } -}) => ({payload, type: keybase1UiPromptYesNo}) as const -const createStellar1NotifyAccountDetailsUpdate = (payload: { +}) => {payload: typeof payload; type: typeof keybase1UiPromptYesNo} +type createStellar1NotifyAccountDetailsUpdate = (payload: { readonly params: stellar1Types.MessageTypes['stellar.1.notify.accountDetailsUpdate']['inParam'] -}) => ({payload, type: stellar1NotifyAccountDetailsUpdate}) as const -const createStellar1NotifyAccountsUpdate = (payload: { +}) => {payload: typeof payload; type: typeof stellar1NotifyAccountDetailsUpdate} +type createStellar1NotifyAccountsUpdate = (payload: { readonly params: stellar1Types.MessageTypes['stellar.1.notify.accountsUpdate']['inParam'] -}) => ({payload, type: stellar1NotifyAccountsUpdate}) as const -const createStellar1NotifyPaymentNotification = (payload: { +}) => {payload: typeof payload; type: typeof stellar1NotifyAccountsUpdate} +type createStellar1NotifyPaymentNotification = (payload: { readonly params: stellar1Types.MessageTypes['stellar.1.notify.paymentNotification']['inParam'] -}) => ({payload, type: stellar1NotifyPaymentNotification}) as const -const createStellar1NotifyPaymentStatusNotification = (payload: { +}) => {payload: typeof payload; type: typeof stellar1NotifyPaymentNotification} +type createStellar1NotifyPaymentStatusNotification = (payload: { readonly params: stellar1Types.MessageTypes['stellar.1.notify.paymentStatusNotification']['inParam'] -}) => ({payload, type: stellar1NotifyPaymentStatusNotification}) as const -const createStellar1NotifyPendingPaymentsUpdate = (payload: { +}) => {payload: typeof payload; type: typeof stellar1NotifyPaymentStatusNotification} +type createStellar1NotifyPendingPaymentsUpdate = (payload: { readonly params: stellar1Types.MessageTypes['stellar.1.notify.pendingPaymentsUpdate']['inParam'] -}) => ({payload, type: stellar1NotifyPendingPaymentsUpdate}) as const -const createStellar1NotifyRecentPaymentsUpdate = (payload: { +}) => {payload: typeof payload; type: typeof stellar1NotifyPendingPaymentsUpdate} +type createStellar1NotifyRecentPaymentsUpdate = (payload: { readonly params: stellar1Types.MessageTypes['stellar.1.notify.recentPaymentsUpdate']['inParam'] -}) => ({payload, type: stellar1NotifyRecentPaymentsUpdate}) as const -const createStellar1NotifyRequestStatusNotification = (payload: { +}) => {payload: typeof payload; type: typeof stellar1NotifyRecentPaymentsUpdate} +type createStellar1NotifyRequestStatusNotification = (payload: { readonly params: stellar1Types.MessageTypes['stellar.1.notify.requestStatusNotification']['inParam'] -}) => ({payload, type: stellar1NotifyRequestStatusNotification}) as const -const createStellar1UiPaymentReviewed = (payload: { +}) => {payload: typeof payload; type: typeof stellar1NotifyRequestStatusNotification} +type createStellar1UiPaymentReviewed = (payload: { readonly params: stellar1Types.MessageTypes['stellar.1.ui.paymentReviewed']['inParam'] response: { error: stellar1Types.IncomingErrorCallback result: (param: stellar1Types.MessageTypes['stellar.1.ui.paymentReviewed']['outParam']) => void } -}) => ({payload, type: stellar1UiPaymentReviewed}) as const +}) => {payload: typeof payload; type: typeof stellar1UiPaymentReviewed} // Action Payloads -export type Chat1ChatUiChatBotCommandsUpdateStatusPayload = ReturnType< - typeof createChat1ChatUiChatBotCommandsUpdateStatus -> -export type Chat1ChatUiChatClearWatchPayload = ReturnType -export type Chat1ChatUiChatCoinFlipStatusPayload = ReturnType -export type Chat1ChatUiChatCommandMarkdownPayload = ReturnType -export type Chat1ChatUiChatCommandStatusPayload = ReturnType -export type Chat1ChatUiChatConfirmChannelDeletePayload = ReturnType< - typeof createChat1ChatUiChatConfirmChannelDelete -> -export type Chat1ChatUiChatGiphySearchResultsPayload = ReturnType< - typeof createChat1ChatUiChatGiphySearchResults -> -export type Chat1ChatUiChatGiphyToggleResultWindowPayload = ReturnType< - typeof createChat1ChatUiChatGiphyToggleResultWindow -> -export type Chat1ChatUiChatInboxConversationPayload = ReturnType< - typeof createChat1ChatUiChatInboxConversation -> -export type Chat1ChatUiChatInboxFailedPayload = ReturnType -export type Chat1ChatUiChatInboxLayoutPayload = ReturnType -export type Chat1ChatUiChatInboxUnverifiedPayload = ReturnType -export type Chat1ChatUiChatLoadGalleryHitPayload = ReturnType -export type Chat1ChatUiChatMaybeMentionUpdatePayload = ReturnType< - typeof createChat1ChatUiChatMaybeMentionUpdate -> -export type Chat1ChatUiChatSearchBotHitsPayload = ReturnType -export type Chat1ChatUiChatSearchConvHitsPayload = ReturnType -export type Chat1ChatUiChatSearchDonePayload = ReturnType -export type Chat1ChatUiChatSearchHitPayload = ReturnType -export type Chat1ChatUiChatSearchInboxDonePayload = ReturnType -export type Chat1ChatUiChatSearchInboxHitPayload = ReturnType -export type Chat1ChatUiChatSearchInboxStartPayload = ReturnType -export type Chat1ChatUiChatSearchIndexStatusPayload = ReturnType< - typeof createChat1ChatUiChatSearchIndexStatus -> -export type Chat1ChatUiChatSearchTeamHitsPayload = ReturnType -export type Chat1ChatUiChatShowManageChannelsPayload = ReturnType< - typeof createChat1ChatUiChatShowManageChannels -> -export type Chat1ChatUiChatStellarDataConfirmPayload = ReturnType< - typeof createChat1ChatUiChatStellarDataConfirm -> -export type Chat1ChatUiChatStellarDataErrorPayload = ReturnType -export type Chat1ChatUiChatStellarDonePayload = ReturnType -export type Chat1ChatUiChatStellarShowConfirmPayload = ReturnType< - typeof createChat1ChatUiChatStellarShowConfirm -> -export type Chat1ChatUiChatThreadCachedPayload = ReturnType -export type Chat1ChatUiChatThreadFullPayload = ReturnType -export type Chat1ChatUiChatThreadStatusPayload = ReturnType -export type Chat1ChatUiChatWatchPositionPayload = ReturnType -export type Chat1ChatUiTriggerContactSyncPayload = ReturnType -export type Chat1NotifyChatChatArchiveCompletePayload = ReturnType< - typeof createChat1NotifyChatChatArchiveComplete -> -export type Chat1NotifyChatChatArchiveProgressPayload = ReturnType< - typeof createChat1NotifyChatChatArchiveProgress -> -export type Chat1NotifyChatChatAttachmentDownloadCompletePayload = ReturnType< - typeof createChat1NotifyChatChatAttachmentDownloadComplete -> -export type Chat1NotifyChatChatAttachmentDownloadProgressPayload = ReturnType< - typeof createChat1NotifyChatChatAttachmentDownloadProgress -> -export type Chat1NotifyChatChatAttachmentUploadProgressPayload = ReturnType< - typeof createChat1NotifyChatChatAttachmentUploadProgress -> -export type Chat1NotifyChatChatAttachmentUploadStartPayload = ReturnType< - typeof createChat1NotifyChatChatAttachmentUploadStart -> -export type Chat1NotifyChatChatConvUpdatePayload = ReturnType -export type Chat1NotifyChatChatIdentifyUpdatePayload = ReturnType< - typeof createChat1NotifyChatChatIdentifyUpdate -> -export type Chat1NotifyChatChatInboxStalePayload = ReturnType -export type Chat1NotifyChatChatInboxSyncStartedPayload = ReturnType< - typeof createChat1NotifyChatChatInboxSyncStarted -> -export type Chat1NotifyChatChatInboxSyncedPayload = ReturnType -export type Chat1NotifyChatChatJoinedConversationPayload = ReturnType< - typeof createChat1NotifyChatChatJoinedConversation -> -export type Chat1NotifyChatChatKBFSToImpteamUpgradePayload = ReturnType< - typeof createChat1NotifyChatChatKBFSToImpteamUpgrade -> -export type Chat1NotifyChatChatLeftConversationPayload = ReturnType< - typeof createChat1NotifyChatChatLeftConversation -> -export type Chat1NotifyChatChatParticipantsInfoPayload = ReturnType< - typeof createChat1NotifyChatChatParticipantsInfo -> -export type Chat1NotifyChatChatPaymentInfoPayload = ReturnType -export type Chat1NotifyChatChatPromptUnfurlPayload = ReturnType -export type Chat1NotifyChatChatRequestInfoPayload = ReturnType -export type Chat1NotifyChatChatResetConversationPayload = ReturnType< - typeof createChat1NotifyChatChatResetConversation -> -export type Chat1NotifyChatChatSetConvRetentionPayload = ReturnType< - typeof createChat1NotifyChatChatSetConvRetention -> -export type Chat1NotifyChatChatSetConvSettingsPayload = ReturnType< - typeof createChat1NotifyChatChatSetConvSettings -> -export type Chat1NotifyChatChatSetTeamRetentionPayload = ReturnType< - typeof createChat1NotifyChatChatSetTeamRetention -> -export type Chat1NotifyChatChatSubteamRenamePayload = ReturnType< - typeof createChat1NotifyChatChatSubteamRename -> -export type Chat1NotifyChatChatTLFFinalizePayload = ReturnType -export type Chat1NotifyChatChatTLFResolvePayload = ReturnType -export type Chat1NotifyChatChatThreadsStalePayload = ReturnType -export type Chat1NotifyChatChatTypingUpdatePayload = ReturnType -export type Chat1NotifyChatChatWelcomeMessageLoadedPayload = ReturnType< - typeof createChat1NotifyChatChatWelcomeMessageLoaded -> -export type Chat1NotifyChatNewChatActivityPayload = ReturnType -export type Keybase1GpgUiConfirmDuplicateKeyChosenPayload = ReturnType< - typeof createKeybase1GpgUiConfirmDuplicateKeyChosen -> -export type Keybase1GpgUiConfirmImportSecretToExistingKeyPayload = ReturnType< - typeof createKeybase1GpgUiConfirmImportSecretToExistingKey -> -export type Keybase1GpgUiGetTTYPayload = ReturnType -export type Keybase1GpgUiSelectKeyAndPushOptionPayload = ReturnType< - typeof createKeybase1GpgUiSelectKeyAndPushOption -> -export type Keybase1GpgUiSelectKeyPayload = ReturnType -export type Keybase1GpgUiSignPayload = ReturnType -export type Keybase1GpgUiWantToAddGPGKeyPayload = ReturnType -export type Keybase1GregorUIPushOutOfBandMessagesPayload = ReturnType< - typeof createKeybase1GregorUIPushOutOfBandMessages -> -export type Keybase1GregorUIPushStatePayload = ReturnType -export type Keybase1HomeUIHomeUIRefreshPayload = ReturnType -export type Keybase1Identify3UiIdentify3ResultPayload = ReturnType< - typeof createKeybase1Identify3UiIdentify3Result -> -export type Keybase1Identify3UiIdentify3ShowTrackerPayload = ReturnType< - typeof createKeybase1Identify3UiIdentify3ShowTracker -> -export type Keybase1Identify3UiIdentify3SummaryPayload = ReturnType< - typeof createKeybase1Identify3UiIdentify3Summary -> -export type Keybase1Identify3UiIdentify3TrackerTimedOutPayload = ReturnType< - typeof createKeybase1Identify3UiIdentify3TrackerTimedOut -> -export type Keybase1Identify3UiIdentify3UpdateRowPayload = ReturnType< - typeof createKeybase1Identify3UiIdentify3UpdateRow -> -export type Keybase1Identify3UiIdentify3UpdateUserCardPayload = ReturnType< - typeof createKeybase1Identify3UiIdentify3UpdateUserCard -> -export type Keybase1Identify3UiIdentify3UserResetPayload = ReturnType< - typeof createKeybase1Identify3UiIdentify3UserReset -> -export type Keybase1IdentifyUiCancelPayload = ReturnType -export type Keybase1IdentifyUiConfirmPayload = ReturnType -export type Keybase1IdentifyUiDelegateIdentifyUIPayload = ReturnType< - typeof createKeybase1IdentifyUiDelegateIdentifyUI -> -export type Keybase1IdentifyUiDismissPayload = ReturnType -export type Keybase1IdentifyUiDisplayCryptocurrencyPayload = ReturnType< - typeof createKeybase1IdentifyUiDisplayCryptocurrency -> -export type Keybase1IdentifyUiDisplayKeyPayload = ReturnType -export type Keybase1IdentifyUiDisplayStellarAccountPayload = ReturnType< - typeof createKeybase1IdentifyUiDisplayStellarAccount -> -export type Keybase1IdentifyUiDisplayTLFCreateWithInvitePayload = ReturnType< - typeof createKeybase1IdentifyUiDisplayTLFCreateWithInvite -> -export type Keybase1IdentifyUiDisplayTrackStatementPayload = ReturnType< - typeof createKeybase1IdentifyUiDisplayTrackStatement -> -export type Keybase1IdentifyUiDisplayUserCardPayload = ReturnType< - typeof createKeybase1IdentifyUiDisplayUserCard -> -export type Keybase1IdentifyUiFinishPayload = ReturnType -export type Keybase1IdentifyUiFinishSocialProofCheckPayload = ReturnType< - typeof createKeybase1IdentifyUiFinishSocialProofCheck -> -export type Keybase1IdentifyUiFinishWebProofCheckPayload = ReturnType< - typeof createKeybase1IdentifyUiFinishWebProofCheck -> -export type Keybase1IdentifyUiLaunchNetworkChecksPayload = ReturnType< - typeof createKeybase1IdentifyUiLaunchNetworkChecks -> -export type Keybase1IdentifyUiReportLastTrackPayload = ReturnType< - typeof createKeybase1IdentifyUiReportLastTrack -> -export type Keybase1IdentifyUiReportTrackTokenPayload = ReturnType< - typeof createKeybase1IdentifyUiReportTrackToken -> -export type Keybase1IdentifyUiStartPayload = ReturnType -export type Keybase1LogUiLogPayload = ReturnType -export type Keybase1LoginUiChooseDeviceToRecoverWithPayload = ReturnType< - typeof createKeybase1LoginUiChooseDeviceToRecoverWith -> -export type Keybase1LoginUiDisplayPaperKeyPhrasePayload = ReturnType< - typeof createKeybase1LoginUiDisplayPaperKeyPhrase -> -export type Keybase1LoginUiDisplayPrimaryPaperKeyPayload = ReturnType< - typeof createKeybase1LoginUiDisplayPrimaryPaperKey -> -export type Keybase1LoginUiDisplayResetMessagePayload = ReturnType< - typeof createKeybase1LoginUiDisplayResetMessage -> -export type Keybase1LoginUiDisplayResetProgressPayload = ReturnType< - typeof createKeybase1LoginUiDisplayResetProgress -> -export type Keybase1LoginUiExplainDeviceRecoveryPayload = ReturnType< - typeof createKeybase1LoginUiExplainDeviceRecovery -> -export type Keybase1LoginUiGetEmailOrUsernamePayload = ReturnType< - typeof createKeybase1LoginUiGetEmailOrUsername -> -export type Keybase1LoginUiPromptPassphraseRecoveryPayload = ReturnType< - typeof createKeybase1LoginUiPromptPassphraseRecovery -> -export type Keybase1LoginUiPromptResetAccountPayload = ReturnType< - typeof createKeybase1LoginUiPromptResetAccount -> -export type Keybase1LoginUiPromptRevokePaperKeysPayload = ReturnType< - typeof createKeybase1LoginUiPromptRevokePaperKeys -> -export type Keybase1LogsendPrepareLogsendPayload = ReturnType -export type Keybase1NotifyAppExitPayload = ReturnType -export type Keybase1NotifyAuditBoxAuditErrorPayload = ReturnType< - typeof createKeybase1NotifyAuditBoxAuditError -> -export type Keybase1NotifyAuditRootAuditErrorPayload = ReturnType< - typeof createKeybase1NotifyAuditRootAuditError -> -export type Keybase1NotifyBadgesBadgeStatePayload = ReturnType -export type Keybase1NotifyCanUserPerformCanUserPerformChangedPayload = ReturnType< - typeof createKeybase1NotifyCanUserPerformCanUserPerformChanged -> -export type Keybase1NotifyDeviceCloneDeviceCloneCountChangedPayload = ReturnType< - typeof createKeybase1NotifyDeviceCloneDeviceCloneCountChanged -> -export type Keybase1NotifyEmailAddressEmailAddressVerifiedPayload = ReturnType< - typeof createKeybase1NotifyEmailAddressEmailAddressVerified -> -export type Keybase1NotifyEmailAddressEmailsChangedPayload = ReturnType< - typeof createKeybase1NotifyEmailAddressEmailsChanged -> -export type Keybase1NotifyEphemeralNewTeamEkPayload = ReturnType< - typeof createKeybase1NotifyEphemeralNewTeamEk -> -export type Keybase1NotifyEphemeralNewTeambotEkPayload = ReturnType< - typeof createKeybase1NotifyEphemeralNewTeambotEk -> -export type Keybase1NotifyEphemeralTeambotEkNeededPayload = ReturnType< - typeof createKeybase1NotifyEphemeralTeambotEkNeeded -> -export type Keybase1NotifyFSFSActivityPayload = ReturnType -export type Keybase1NotifyFSFSEditListResponsePayload = ReturnType< - typeof createKeybase1NotifyFSFSEditListResponse -> -export type Keybase1NotifyFSFSFavoritesChangedPayload = ReturnType< - typeof createKeybase1NotifyFSFSFavoritesChanged -> -export type Keybase1NotifyFSFSOnlineStatusChangedPayload = ReturnType< - typeof createKeybase1NotifyFSFSOnlineStatusChanged -> -export type Keybase1NotifyFSFSOverallSyncStatusChangedPayload = ReturnType< - typeof createKeybase1NotifyFSFSOverallSyncStatusChanged -> -export type Keybase1NotifyFSFSPathUpdatedPayload = ReturnType -export type Keybase1NotifyFSFSSubscriptionNotifyPathPayload = ReturnType< - typeof createKeybase1NotifyFSFSSubscriptionNotifyPath -> -export type Keybase1NotifyFSFSSubscriptionNotifyPayload = ReturnType< - typeof createKeybase1NotifyFSFSSubscriptionNotify -> -export type Keybase1NotifyFSFSSyncActivityPayload = ReturnType -export type Keybase1NotifyFSFSSyncStatusResponsePayload = ReturnType< - typeof createKeybase1NotifyFSFSSyncStatusResponse -> -export type Keybase1NotifyFavoritesFavoritesChangedPayload = ReturnType< - typeof createKeybase1NotifyFavoritesFavoritesChanged -> -export type Keybase1NotifyFeaturedBotsFeaturedBotsUpdatePayload = ReturnType< - typeof createKeybase1NotifyFeaturedBotsFeaturedBotsUpdate -> -export type Keybase1NotifyInviteFriendsUpdateInviteCountsPayload = ReturnType< - typeof createKeybase1NotifyInviteFriendsUpdateInviteCounts -> -export type Keybase1NotifyKeyfamilyKeyfamilyChangedPayload = ReturnType< - typeof createKeybase1NotifyKeyfamilyKeyfamilyChanged -> -export type Keybase1NotifyPGPPgpKeyInSecretStoreFilePayload = ReturnType< - typeof createKeybase1NotifyPGPPgpKeyInSecretStoreFile -> -export type Keybase1NotifyPaperKeyPaperKeyCachedPayload = ReturnType< - typeof createKeybase1NotifyPaperKeyPaperKeyCached -> -export type Keybase1NotifyPhoneNumberPhoneNumbersChangedPayload = ReturnType< - typeof createKeybase1NotifyPhoneNumberPhoneNumbersChanged -> -export type Keybase1NotifyRuntimeStatsRuntimeStatsUpdatePayload = ReturnType< - typeof createKeybase1NotifyRuntimeStatsRuntimeStatsUpdate -> -export type Keybase1NotifySaltpackSaltpackOperationDonePayload = ReturnType< - typeof createKeybase1NotifySaltpackSaltpackOperationDone -> -export type Keybase1NotifySaltpackSaltpackOperationProgressPayload = ReturnType< - typeof createKeybase1NotifySaltpackSaltpackOperationProgress -> -export type Keybase1NotifySaltpackSaltpackOperationStartPayload = ReturnType< - typeof createKeybase1NotifySaltpackSaltpackOperationStart -> -export type Keybase1NotifyServiceHTTPSrvInfoUpdatePayload = ReturnType< - typeof createKeybase1NotifyServiceHTTPSrvInfoUpdate -> -export type Keybase1NotifyServiceHandleKeybaseLinkPayload = ReturnType< - typeof createKeybase1NotifyServiceHandleKeybaseLink -> -export type Keybase1NotifyServiceShutdownPayload = ReturnType -export type Keybase1NotifySessionClientOutOfDatePayload = ReturnType< - typeof createKeybase1NotifySessionClientOutOfDate -> -export type Keybase1NotifySessionLoggedInPayload = ReturnType -export type Keybase1NotifySessionLoggedOutPayload = ReturnType -export type Keybase1NotifySimpleFSSimpleFSArchiveStatusChangedPayload = ReturnType< - typeof createKeybase1NotifySimpleFSSimpleFSArchiveStatusChanged -> -export type Keybase1NotifyTeamAvatarUpdatedPayload = ReturnType -export type Keybase1NotifyTeamNewlyAddedToTeamPayload = ReturnType< - typeof createKeybase1NotifyTeamNewlyAddedToTeam -> -export type Keybase1NotifyTeamTeamAbandonedPayload = ReturnType -export type Keybase1NotifyTeamTeamChangedByIDPayload = ReturnType< - typeof createKeybase1NotifyTeamTeamChangedByID -> -export type Keybase1NotifyTeamTeamChangedByNamePayload = ReturnType< - typeof createKeybase1NotifyTeamTeamChangedByName -> -export type Keybase1NotifyTeamTeamDeletedPayload = ReturnType -export type Keybase1NotifyTeamTeamExitPayload = ReturnType -export type Keybase1NotifyTeamTeamMetadataUpdatePayload = ReturnType< - typeof createKeybase1NotifyTeamTeamMetadataUpdate -> -export type Keybase1NotifyTeamTeamRoleMapChangedPayload = ReturnType< - typeof createKeybase1NotifyTeamTeamRoleMapChanged -> -export type Keybase1NotifyTeamTeamTreeMembershipsDonePayload = ReturnType< - typeof createKeybase1NotifyTeamTeamTreeMembershipsDone -> -export type Keybase1NotifyTeamTeamTreeMembershipsPartialPayload = ReturnType< - typeof createKeybase1NotifyTeamTeamTreeMembershipsPartial -> -export type Keybase1NotifyTeambotNewTeambotKeyPayload = ReturnType< - typeof createKeybase1NotifyTeambotNewTeambotKey -> -export type Keybase1NotifyTeambotTeambotKeyNeededPayload = ReturnType< - typeof createKeybase1NotifyTeambotTeambotKeyNeeded -> -export type Keybase1NotifyTrackingNotifyUserBlockedPayload = ReturnType< - typeof createKeybase1NotifyTrackingNotifyUserBlocked -> -export type Keybase1NotifyTrackingTrackingChangedPayload = ReturnType< - typeof createKeybase1NotifyTrackingTrackingChanged -> -export type Keybase1NotifyTrackingTrackingInfoPayload = ReturnType< - typeof createKeybase1NotifyTrackingTrackingInfo -> -export type Keybase1NotifyUsersIdentifyUpdatePayload = ReturnType< - typeof createKeybase1NotifyUsersIdentifyUpdate -> -export type Keybase1NotifyUsersPasswordChangedPayload = ReturnType< - typeof createKeybase1NotifyUsersPasswordChanged -> -export type Keybase1NotifyUsersUserChangedPayload = ReturnType -export type Keybase1NotifyUsersWebOfTrustChangedPayload = ReturnType< - typeof createKeybase1NotifyUsersWebOfTrustChanged -> -export type Keybase1PgpUiFinishedPayload = ReturnType -export type Keybase1PgpUiKeyGeneratedPayload = ReturnType -export type Keybase1PgpUiOutputPGPWarningPayload = ReturnType -export type Keybase1PgpUiOutputSignatureNonKeybasePayload = ReturnType< - typeof createKeybase1PgpUiOutputSignatureNonKeybase -> -export type Keybase1PgpUiOutputSignatureSuccessPayload = ReturnType< - typeof createKeybase1PgpUiOutputSignatureSuccess -> -export type Keybase1PgpUiShouldPushPrivatePayload = ReturnType -export type Keybase1ProveUiCheckingPayload = ReturnType -export type Keybase1ProveUiContinueCheckingPayload = ReturnType -export type Keybase1ProveUiDisplayRecheckWarningPayload = ReturnType< - typeof createKeybase1ProveUiDisplayRecheckWarning -> -export type Keybase1ProveUiOkToCheckPayload = ReturnType -export type Keybase1ProveUiOutputInstructionsPayload = ReturnType< - typeof createKeybase1ProveUiOutputInstructions -> -export type Keybase1ProveUiOutputPrechecksPayload = ReturnType -export type Keybase1ProveUiPreProofWarningPayload = ReturnType -export type Keybase1ProveUiPromptOverwritePayload = ReturnType -export type Keybase1ProveUiPromptUsernamePayload = ReturnType -export type Keybase1ProvisionUiChooseDevicePayload = ReturnType -export type Keybase1ProvisionUiChooseDeviceTypePayload = ReturnType< - typeof createKeybase1ProvisionUiChooseDeviceType -> -export type Keybase1ProvisionUiChooseGPGMethodPayload = ReturnType< - typeof createKeybase1ProvisionUiChooseGPGMethod -> -export type Keybase1ProvisionUiChooseProvisioningMethodPayload = ReturnType< - typeof createKeybase1ProvisionUiChooseProvisioningMethod -> -export type Keybase1ProvisionUiDisplayAndPromptSecretPayload = ReturnType< - typeof createKeybase1ProvisionUiDisplayAndPromptSecret -> -export type Keybase1ProvisionUiDisplaySecretExchangedPayload = ReturnType< - typeof createKeybase1ProvisionUiDisplaySecretExchanged -> -export type Keybase1ProvisionUiPromptNewDeviceNamePayload = ReturnType< - typeof createKeybase1ProvisionUiPromptNewDeviceName -> -export type Keybase1ProvisionUiProvisioneeSuccessPayload = ReturnType< - typeof createKeybase1ProvisionUiProvisioneeSuccess -> -export type Keybase1ProvisionUiProvisionerSuccessPayload = ReturnType< - typeof createKeybase1ProvisionUiProvisionerSuccess -> -export type Keybase1ProvisionUiSwitchToGPGSignOKPayload = ReturnType< - typeof createKeybase1ProvisionUiSwitchToGPGSignOK -> -export type Keybase1ReachabilityReachabilityChangedPayload = ReturnType< - typeof createKeybase1ReachabilityReachabilityChanged -> -export type Keybase1RekeyUIDelegateRekeyUIPayload = ReturnType -export type Keybase1RekeyUIRefreshPayload = ReturnType -export type Keybase1RekeyUIRekeySendEventPayload = ReturnType -export type Keybase1SaltpackUiSaltpackPromptForDecryptPayload = ReturnType< - typeof createKeybase1SaltpackUiSaltpackPromptForDecrypt -> -export type Keybase1SaltpackUiSaltpackVerifyBadSenderPayload = ReturnType< - typeof createKeybase1SaltpackUiSaltpackVerifyBadSender -> -export type Keybase1SaltpackUiSaltpackVerifySuccessPayload = ReturnType< - typeof createKeybase1SaltpackUiSaltpackVerifySuccess -> -export type Keybase1SecretUiGetPassphrasePayload = ReturnType -export type Keybase1StreamUiClosePayload = ReturnType -export type Keybase1StreamUiReadPayload = ReturnType -export type Keybase1StreamUiResetPayload = ReturnType -export type Keybase1StreamUiWritePayload = ReturnType -export type Keybase1TeamsUiConfirmInviteLinkAcceptPayload = ReturnType< - typeof createKeybase1TeamsUiConfirmInviteLinkAccept -> -export type Keybase1TeamsUiConfirmRootTeamDeletePayload = ReturnType< - typeof createKeybase1TeamsUiConfirmRootTeamDelete -> -export type Keybase1TeamsUiConfirmSubteamDeletePayload = ReturnType< - typeof createKeybase1TeamsUiConfirmSubteamDelete -> -export type Keybase1UiPromptYesNoPayload = ReturnType -export type Stellar1NotifyAccountDetailsUpdatePayload = ReturnType< - typeof createStellar1NotifyAccountDetailsUpdate -> -export type Stellar1NotifyAccountsUpdatePayload = ReturnType -export type Stellar1NotifyPaymentNotificationPayload = ReturnType< - typeof createStellar1NotifyPaymentNotification -> -export type Stellar1NotifyPaymentStatusNotificationPayload = ReturnType< - typeof createStellar1NotifyPaymentStatusNotification -> -export type Stellar1NotifyPendingPaymentsUpdatePayload = ReturnType< - typeof createStellar1NotifyPendingPaymentsUpdate -> -export type Stellar1NotifyRecentPaymentsUpdatePayload = ReturnType< - typeof createStellar1NotifyRecentPaymentsUpdate -> -export type Stellar1NotifyRequestStatusNotificationPayload = ReturnType< - typeof createStellar1NotifyRequestStatusNotification -> -export type Stellar1UiPaymentReviewedPayload = ReturnType +export type Chat1ChatUiChatBotCommandsUpdateStatusPayload = + ReturnType +export type Chat1ChatUiChatClearWatchPayload = ReturnType +export type Chat1ChatUiChatCoinFlipStatusPayload = ReturnType +export type Chat1ChatUiChatCommandMarkdownPayload = ReturnType +export type Chat1ChatUiChatCommandStatusPayload = ReturnType +export type Chat1ChatUiChatConfirmChannelDeletePayload = ReturnType +export type Chat1ChatUiChatGiphySearchResultsPayload = ReturnType +export type Chat1ChatUiChatGiphyToggleResultWindowPayload = + ReturnType +export type Chat1ChatUiChatInboxConversationPayload = ReturnType +export type Chat1ChatUiChatInboxFailedPayload = ReturnType +export type Chat1ChatUiChatInboxLayoutPayload = ReturnType +export type Chat1ChatUiChatInboxUnverifiedPayload = ReturnType +export type Chat1ChatUiChatLoadGalleryHitPayload = ReturnType +export type Chat1ChatUiChatMaybeMentionUpdatePayload = ReturnType +export type Chat1ChatUiChatSearchBotHitsPayload = ReturnType +export type Chat1ChatUiChatSearchConvHitsPayload = ReturnType +export type Chat1ChatUiChatSearchDonePayload = ReturnType +export type Chat1ChatUiChatSearchHitPayload = ReturnType +export type Chat1ChatUiChatSearchInboxDonePayload = ReturnType +export type Chat1ChatUiChatSearchInboxHitPayload = ReturnType +export type Chat1ChatUiChatSearchInboxStartPayload = ReturnType +export type Chat1ChatUiChatSearchIndexStatusPayload = ReturnType +export type Chat1ChatUiChatSearchTeamHitsPayload = ReturnType +export type Chat1ChatUiChatShowManageChannelsPayload = ReturnType +export type Chat1ChatUiChatStellarDataConfirmPayload = ReturnType +export type Chat1ChatUiChatStellarDataErrorPayload = ReturnType +export type Chat1ChatUiChatStellarDonePayload = ReturnType +export type Chat1ChatUiChatStellarShowConfirmPayload = ReturnType +export type Chat1ChatUiChatThreadCachedPayload = ReturnType +export type Chat1ChatUiChatThreadFullPayload = ReturnType +export type Chat1ChatUiChatThreadStatusPayload = ReturnType +export type Chat1ChatUiChatWatchPositionPayload = ReturnType +export type Chat1ChatUiTriggerContactSyncPayload = ReturnType +export type Chat1NotifyChatChatArchiveCompletePayload = ReturnType +export type Chat1NotifyChatChatArchiveProgressPayload = ReturnType +export type Chat1NotifyChatChatAttachmentDownloadCompletePayload = + ReturnType +export type Chat1NotifyChatChatAttachmentDownloadProgressPayload = + ReturnType +export type Chat1NotifyChatChatAttachmentUploadProgressPayload = + ReturnType +export type Chat1NotifyChatChatAttachmentUploadStartPayload = + ReturnType +export type Chat1NotifyChatChatConvUpdatePayload = ReturnType +export type Chat1NotifyChatChatIdentifyUpdatePayload = ReturnType +export type Chat1NotifyChatChatInboxStalePayload = ReturnType +export type Chat1NotifyChatChatInboxSyncStartedPayload = ReturnType +export type Chat1NotifyChatChatInboxSyncedPayload = ReturnType +export type Chat1NotifyChatChatJoinedConversationPayload = + ReturnType +export type Chat1NotifyChatChatKBFSToImpteamUpgradePayload = + ReturnType +export type Chat1NotifyChatChatLeftConversationPayload = ReturnType +export type Chat1NotifyChatChatParticipantsInfoPayload = ReturnType +export type Chat1NotifyChatChatPaymentInfoPayload = ReturnType +export type Chat1NotifyChatChatPromptUnfurlPayload = ReturnType +export type Chat1NotifyChatChatRequestInfoPayload = ReturnType +export type Chat1NotifyChatChatResetConversationPayload = + ReturnType +export type Chat1NotifyChatChatSetConvRetentionPayload = ReturnType +export type Chat1NotifyChatChatSetConvSettingsPayload = ReturnType +export type Chat1NotifyChatChatSetTeamRetentionPayload = ReturnType +export type Chat1NotifyChatChatSubteamRenamePayload = ReturnType +export type Chat1NotifyChatChatTLFFinalizePayload = ReturnType +export type Chat1NotifyChatChatTLFResolvePayload = ReturnType +export type Chat1NotifyChatChatThreadsStalePayload = ReturnType +export type Chat1NotifyChatChatTypingUpdatePayload = ReturnType +export type Chat1NotifyChatChatWelcomeMessageLoadedPayload = + ReturnType +export type Chat1NotifyChatNewChatActivityPayload = ReturnType +export type Keybase1GpgUiConfirmDuplicateKeyChosenPayload = + ReturnType +export type Keybase1GpgUiConfirmImportSecretToExistingKeyPayload = + ReturnType +export type Keybase1GpgUiGetTTYPayload = ReturnType +export type Keybase1GpgUiSelectKeyAndPushOptionPayload = ReturnType +export type Keybase1GpgUiSelectKeyPayload = ReturnType +export type Keybase1GpgUiSignPayload = ReturnType +export type Keybase1GpgUiWantToAddGPGKeyPayload = ReturnType +export type Keybase1GregorUIPushOutOfBandMessagesPayload = + ReturnType +export type Keybase1GregorUIPushStatePayload = ReturnType +export type Keybase1HomeUIHomeUIRefreshPayload = ReturnType +export type Keybase1Identify3UiIdentify3ResultPayload = ReturnType +export type Keybase1Identify3UiIdentify3ShowTrackerPayload = + ReturnType +export type Keybase1Identify3UiIdentify3SummaryPayload = ReturnType +export type Keybase1Identify3UiIdentify3TrackerTimedOutPayload = + ReturnType +export type Keybase1Identify3UiIdentify3UpdateRowPayload = + ReturnType +export type Keybase1Identify3UiIdentify3UpdateUserCardPayload = + ReturnType +export type Keybase1Identify3UiIdentify3UserResetPayload = + ReturnType +export type Keybase1IdentifyUiCancelPayload = ReturnType +export type Keybase1IdentifyUiConfirmPayload = ReturnType +export type Keybase1IdentifyUiDelegateIdentifyUIPayload = + ReturnType +export type Keybase1IdentifyUiDismissPayload = ReturnType +export type Keybase1IdentifyUiDisplayCryptocurrencyPayload = + ReturnType +export type Keybase1IdentifyUiDisplayKeyPayload = ReturnType +export type Keybase1IdentifyUiDisplayStellarAccountPayload = + ReturnType +export type Keybase1IdentifyUiDisplayTLFCreateWithInvitePayload = + ReturnType +export type Keybase1IdentifyUiDisplayTrackStatementPayload = + ReturnType +export type Keybase1IdentifyUiDisplayUserCardPayload = ReturnType +export type Keybase1IdentifyUiFinishPayload = ReturnType +export type Keybase1IdentifyUiFinishSocialProofCheckPayload = + ReturnType +export type Keybase1IdentifyUiFinishWebProofCheckPayload = + ReturnType +export type Keybase1IdentifyUiLaunchNetworkChecksPayload = + ReturnType +export type Keybase1IdentifyUiReportLastTrackPayload = ReturnType +export type Keybase1IdentifyUiReportTrackTokenPayload = ReturnType +export type Keybase1IdentifyUiStartPayload = ReturnType +export type Keybase1LogUiLogPayload = ReturnType +export type Keybase1LoginUiChooseDeviceToRecoverWithPayload = + ReturnType +export type Keybase1LoginUiDisplayPaperKeyPhrasePayload = + ReturnType +export type Keybase1LoginUiDisplayPrimaryPaperKeyPayload = + ReturnType +export type Keybase1LoginUiDisplayResetMessagePayload = ReturnType +export type Keybase1LoginUiDisplayResetProgressPayload = ReturnType +export type Keybase1LoginUiExplainDeviceRecoveryPayload = + ReturnType +export type Keybase1LoginUiGetEmailOrUsernamePayload = ReturnType +export type Keybase1LoginUiPromptPassphraseRecoveryPayload = + ReturnType +export type Keybase1LoginUiPromptResetAccountPayload = ReturnType +export type Keybase1LoginUiPromptRevokePaperKeysPayload = + ReturnType +export type Keybase1LogsendPrepareLogsendPayload = ReturnType +export type Keybase1NotifyAppExitPayload = ReturnType +export type Keybase1NotifyAuditBoxAuditErrorPayload = ReturnType +export type Keybase1NotifyAuditRootAuditErrorPayload = ReturnType +export type Keybase1NotifyBadgesBadgeStatePayload = ReturnType +export type Keybase1NotifyCanUserPerformCanUserPerformChangedPayload = + ReturnType +export type Keybase1NotifyDeviceCloneDeviceCloneCountChangedPayload = + ReturnType +export type Keybase1NotifyEmailAddressEmailAddressVerifiedPayload = + ReturnType +export type Keybase1NotifyEmailAddressEmailsChangedPayload = + ReturnType +export type Keybase1NotifyEphemeralNewTeamEkPayload = ReturnType +export type Keybase1NotifyEphemeralNewTeambotEkPayload = ReturnType +export type Keybase1NotifyEphemeralTeambotEkNeededPayload = + ReturnType +export type Keybase1NotifyFSFSActivityPayload = ReturnType +export type Keybase1NotifyFSFSEditListResponsePayload = ReturnType +export type Keybase1NotifyFSFSFavoritesChangedPayload = ReturnType +export type Keybase1NotifyFSFSOnlineStatusChangedPayload = + ReturnType +export type Keybase1NotifyFSFSOverallSyncStatusChangedPayload = + ReturnType +export type Keybase1NotifyFSFSPathUpdatedPayload = ReturnType +export type Keybase1NotifyFSFSSubscriptionNotifyPathPayload = + ReturnType +export type Keybase1NotifyFSFSSubscriptionNotifyPayload = + ReturnType +export type Keybase1NotifyFSFSSyncActivityPayload = ReturnType +export type Keybase1NotifyFSFSSyncStatusResponsePayload = + ReturnType +export type Keybase1NotifyFavoritesFavoritesChangedPayload = + ReturnType +export type Keybase1NotifyFeaturedBotsFeaturedBotsUpdatePayload = + ReturnType +export type Keybase1NotifyInviteFriendsUpdateInviteCountsPayload = + ReturnType +export type Keybase1NotifyKeyfamilyKeyfamilyChangedPayload = + ReturnType +export type Keybase1NotifyPGPPgpKeyInSecretStoreFilePayload = + ReturnType +export type Keybase1NotifyPaperKeyPaperKeyCachedPayload = + ReturnType +export type Keybase1NotifyPhoneNumberPhoneNumbersChangedPayload = + ReturnType +export type Keybase1NotifyRuntimeStatsRuntimeStatsUpdatePayload = + ReturnType +export type Keybase1NotifySaltpackSaltpackOperationDonePayload = + ReturnType +export type Keybase1NotifySaltpackSaltpackOperationProgressPayload = + ReturnType +export type Keybase1NotifySaltpackSaltpackOperationStartPayload = + ReturnType +export type Keybase1NotifyServiceHTTPSrvInfoUpdatePayload = + ReturnType +export type Keybase1NotifyServiceHandleKeybaseLinkPayload = + ReturnType +export type Keybase1NotifyServiceShutdownPayload = ReturnType +export type Keybase1NotifySessionClientOutOfDatePayload = + ReturnType +export type Keybase1NotifySessionLoggedInPayload = ReturnType +export type Keybase1NotifySessionLoggedOutPayload = ReturnType +export type Keybase1NotifySimpleFSSimpleFSArchiveStatusChangedPayload = + ReturnType +export type Keybase1NotifyTeamAvatarUpdatedPayload = ReturnType +export type Keybase1NotifyTeamNewlyAddedToTeamPayload = ReturnType +export type Keybase1NotifyTeamTeamAbandonedPayload = ReturnType +export type Keybase1NotifyTeamTeamChangedByIDPayload = ReturnType +export type Keybase1NotifyTeamTeamChangedByNamePayload = ReturnType +export type Keybase1NotifyTeamTeamDeletedPayload = ReturnType +export type Keybase1NotifyTeamTeamExitPayload = ReturnType +export type Keybase1NotifyTeamTeamMetadataUpdatePayload = + ReturnType +export type Keybase1NotifyTeamTeamRoleMapChangedPayload = + ReturnType +export type Keybase1NotifyTeamTeamTreeMembershipsDonePayload = + ReturnType +export type Keybase1NotifyTeamTeamTreeMembershipsPartialPayload = + ReturnType +export type Keybase1NotifyTeambotNewTeambotKeyPayload = ReturnType +export type Keybase1NotifyTeambotTeambotKeyNeededPayload = + ReturnType +export type Keybase1NotifyTrackingNotifyUserBlockedPayload = + ReturnType +export type Keybase1NotifyTrackingTrackingChangedPayload = + ReturnType +export type Keybase1NotifyTrackingTrackingInfoPayload = ReturnType +export type Keybase1NotifyUsersIdentifyUpdatePayload = ReturnType +export type Keybase1NotifyUsersPasswordChangedPayload = ReturnType +export type Keybase1NotifyUsersUserChangedPayload = ReturnType +export type Keybase1NotifyUsersWebOfTrustChangedPayload = + ReturnType +export type Keybase1PgpUiFinishedPayload = ReturnType +export type Keybase1PgpUiKeyGeneratedPayload = ReturnType +export type Keybase1PgpUiOutputPGPWarningPayload = ReturnType +export type Keybase1PgpUiOutputSignatureNonKeybasePayload = + ReturnType +export type Keybase1PgpUiOutputSignatureSuccessPayload = ReturnType +export type Keybase1PgpUiShouldPushPrivatePayload = ReturnType +export type Keybase1ProveUiCheckingPayload = ReturnType +export type Keybase1ProveUiContinueCheckingPayload = ReturnType +export type Keybase1ProveUiDisplayRecheckWarningPayload = + ReturnType +export type Keybase1ProveUiOkToCheckPayload = ReturnType +export type Keybase1ProveUiOutputInstructionsPayload = ReturnType +export type Keybase1ProveUiOutputPrechecksPayload = ReturnType +export type Keybase1ProveUiPreProofWarningPayload = ReturnType +export type Keybase1ProveUiPromptOverwritePayload = ReturnType +export type Keybase1ProveUiPromptUsernamePayload = ReturnType +export type Keybase1ProvisionUiChooseDevicePayload = ReturnType +export type Keybase1ProvisionUiChooseDeviceTypePayload = ReturnType +export type Keybase1ProvisionUiChooseGPGMethodPayload = ReturnType +export type Keybase1ProvisionUiChooseProvisioningMethodPayload = + ReturnType +export type Keybase1ProvisionUiDisplayAndPromptSecretPayload = + ReturnType +export type Keybase1ProvisionUiDisplaySecretExchangedPayload = + ReturnType +export type Keybase1ProvisionUiPromptNewDeviceNamePayload = + ReturnType +export type Keybase1ProvisionUiProvisioneeSuccessPayload = + ReturnType +export type Keybase1ProvisionUiProvisionerSuccessPayload = + ReturnType +export type Keybase1ProvisionUiSwitchToGPGSignOKPayload = + ReturnType +export type Keybase1ReachabilityReachabilityChangedPayload = + ReturnType +export type Keybase1RekeyUIDelegateRekeyUIPayload = ReturnType +export type Keybase1RekeyUIRefreshPayload = ReturnType +export type Keybase1RekeyUIRekeySendEventPayload = ReturnType +export type Keybase1SaltpackUiSaltpackPromptForDecryptPayload = + ReturnType +export type Keybase1SaltpackUiSaltpackVerifyBadSenderPayload = + ReturnType +export type Keybase1SaltpackUiSaltpackVerifySuccessPayload = + ReturnType +export type Keybase1SecretUiGetPassphrasePayload = ReturnType +export type Keybase1StreamUiClosePayload = ReturnType +export type Keybase1StreamUiReadPayload = ReturnType +export type Keybase1StreamUiResetPayload = ReturnType +export type Keybase1StreamUiWritePayload = ReturnType +export type Keybase1TeamsUiConfirmInviteLinkAcceptPayload = + ReturnType +export type Keybase1TeamsUiConfirmRootTeamDeletePayload = + ReturnType +export type Keybase1TeamsUiConfirmSubteamDeletePayload = ReturnType +export type Keybase1UiPromptYesNoPayload = ReturnType +export type Stellar1NotifyAccountDetailsUpdatePayload = ReturnType +export type Stellar1NotifyAccountsUpdatePayload = ReturnType +export type Stellar1NotifyPaymentNotificationPayload = ReturnType +export type Stellar1NotifyPaymentStatusNotificationPayload = + ReturnType +export type Stellar1NotifyPendingPaymentsUpdatePayload = ReturnType +export type Stellar1NotifyRecentPaymentsUpdatePayload = ReturnType +export type Stellar1NotifyRequestStatusNotificationPayload = + ReturnType +export type Stellar1UiPaymentReviewedPayload = ReturnType // All Actions // prettier-ignore diff --git a/shared/android/app/build.gradle b/shared/android/app/build.gradle index 2e20bd242fcf..6bb8a46cebb5 100644 --- a/shared/android/app/build.gradle +++ b/shared/android/app/build.gradle @@ -1,4 +1,5 @@ apply plugin: "com.android.application" +apply plugin: "org.jetbrains.kotlin.android" apply plugin: "com.facebook.react" apply plugin: 'com.github.triplet.play' @@ -17,26 +18,24 @@ Integer getVersionCode() { project.logger.lifecycle('Version code: ' + getVersionCode().toString()) -def nodeModules = "../../node_modules" -def defaultDir = file("$nodeModules/react-native/android") -def androidSourcesDir = defaultDir.parentFile.toString() -def prebuiltDir = "$buildDir/react-native-0*/jni" - /** * This is the configuration block to customize your React Native Android app. * By default you don't need to apply any configuration, just uncomment the lines you need. */ react { + cliFile = new File(["node", "--print", "require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })"].execute(null, rootDir).text.trim()) + bundleCommand = "export:embed" + /* Folders */ - // The root of your project, i.e. where "package.json" lives. Default is '..' + // The root of your project, i.e. where "package.json" lives. Default is '../..' // root = file("../../") - // The folder where the react-native NPM package is. Default is ../node_modules/react-native - // reactNativeDir = file("../node_modules/react-native") - // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen - // codegenDir = file("../node_modules/@react-native/codegen") - // The cli.js file which is the React Native CLI entrypoint. Default is ../node_modules/react-native/cli.js - // cliFile = file("../node_modules/react-native/cli.js") + // The folder where the react-native NPM package is. Default is ../../node_modules/react-native + // reactNativeDir = file("../../node_modules/react-native") + // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen + // codegenDir = file("../../node_modules/@react-native/codegen") + // The cli.js file which is the React Native CLI entrypoint. Default is ../../node_modules/react-native/cli.js + // cliFile = file("../../node_modules/react-native/cli.js") /* Variants */ // The list of variants to that are debuggable. For those we're going to @@ -71,6 +70,8 @@ react { // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map" // hermesFlags = ["-O", "-output-source-map"] + /* Autolinking */ + autolinkLibrariesWithApp() } /** @@ -93,8 +94,8 @@ def jscFlavor = 'org.webkit:android-jsc:+' android { ndkVersion rootProject.ext.ndkVersion - - compileSdkVersion rootProject.ext.compileSdkVersion + buildToolsVersion rootProject.ext.buildToolsVersion + compileSdk rootProject.ext.compileSdkVersion namespace "io.keybase.ossifrage" defaultConfig { @@ -119,12 +120,6 @@ android { buildTypes { debug { } - - storyBook.initWith(buildTypes.debug) - storyBook { - applicationIdSuffix ".storybook" - matchingFallbacks = ['debug'] - } release { signingConfig signingConfigs.release minifyEnabled enableProguardInReleaseBuilds @@ -166,32 +161,24 @@ dependencies { // The version of react-native is set by the React Native Gradle Plugin implementation("com.facebook.react:react-android") - debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") - debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") { - exclude group:'com.squareup.okhttp3', module:'okhttp' - } - - debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") if (hermesEnabled.toBoolean()) { implementation("com.facebook.react:hermes-android") } else { implementation jscFlavor } - implementation 'androidx.work:work-runtime:2.8.1' + implementation 'androidx.work:work-runtime:2.9.1' implementation 'androidx.multidex:multidex:2.0.1' - implementation "com.google.firebase:firebase-messaging:22.0.0" - implementation "com.facebook.fresco:animated-gif:2.6.0" - implementation "com.facebook.fresco:fresco:2.6.0" + implementation "com.google.firebase:firebase-messaging:24.0.1" + implementation "com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}" implementation 'org.msgpack:msgpack-core:0.9.0' implementation project(':keybaselib') implementation 'com.android.installreferrer:installreferrer:2.2' implementation "me.leolin:ShortcutBadger:1.1.22@aar" - implementation "androidx.lifecycle:lifecycle-common-java8:2.6.1" - implementation "androidx.lifecycle:lifecycle-process:2.6.1" + implementation "androidx.lifecycle:lifecycle-common-java8:2.8.5" + implementation "androidx.lifecycle:lifecycle-process:2.8.5" } -apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) // This requires a google-services.json file locally. Drop it in // android/app/src/debug/google-services.json // android/app/src/releaseUnsigned/google-services.json diff --git a/shared/android/app/src/androidTest/java/io/keybase/ossifrage/MainActivityTest.java b/shared/android/app/src/androidTest/java/io/keybase/ossifrage/MainActivityTest.java deleted file mode 100644 index d88f600d193d..000000000000 --- a/shared/android/app/src/androidTest/java/io/keybase/ossifrage/MainActivityTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package io.keybase.ossifrage.tests; - -import android.test.ActivityInstrumentationTestCase2; -import android.widget.Toast; - -import io.keybase.ossifrage.MainActivity; - -public class MainActivityTest extends ActivityInstrumentationTestCase2 { - private MainActivity mainActivity; - - public MainActivityTest() { - super(MainActivity.class); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - mainActivity = getActivity(); - } - - public void testPreconditions() { - assertNotNull("mFirstTestActivity is null", mainActivity); - } - - public void testToastWorksLikeWeThink() { - Toast.makeText(mainActivity, "Hello World!", Toast.LENGTH_SHORT).show(); - } -} diff --git a/shared/android/app/src/debug/AndroidManifest.xml b/shared/android/app/src/debug/AndroidManifest.xml index 991f74955782..ce2c8f1a813d 100644 --- a/shared/android/app/src/debug/AndroidManifest.xml +++ b/shared/android/app/src/debug/AndroidManifest.xml @@ -1,15 +1,9 @@ - - - - - - + tools:ignore="GoogleAppIndexingWarning"/> diff --git a/shared/android/app/src/debug/java/io/keybase/ossifrage/ReactNativeFlipper.java b/shared/android/app/src/debug/java/io/keybase/ossifrage/ReactNativeFlipper.java deleted file mode 100644 index 1a2a2a3f0889..000000000000 --- a/shared/android/app/src/debug/java/io/keybase/ossifrage/ReactNativeFlipper.java +++ /dev/null @@ -1,77 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - *

This source code is licensed under the MIT license found in the LICENSE file in the root - * directory of this source tree. - */ -package io.keybase.ossifrage; - -import android.content.Context; -import com.facebook.flipper.android.AndroidFlipperClient; -import com.facebook.flipper.android.utils.FlipperUtils; -import com.facebook.flipper.core.FlipperClient; -import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin; -import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin; -import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin; -import com.facebook.flipper.plugins.inspector.DescriptorMapping; -import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin; -import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor; -import com.facebook.flipper.plugins.network.NetworkFlipperPlugin; -import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin; -import com.facebook.react.ReactInstanceEventListener; -import com.facebook.react.ReactInstanceManager; -import com.facebook.react.bridge.ReactContext; -import com.facebook.react.modules.network.NetworkingModule; -import tech.bam.rnperformance.flipper.RNPerfMonitorPlugin; -import okhttp3.OkHttpClient; - -/** - * Class responsible of loading Flipper inside your React Native application. This is the debug - * flavor of it. Here you can add your own plugins and customize the Flipper setup. - */ -public class ReactNativeFlipper { - public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) { - if (FlipperUtils.shouldEnableFlipper(context)) { - final FlipperClient client = AndroidFlipperClient.getInstance(context); - - client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults())); - client.addPlugin(new DatabasesFlipperPlugin(context)); - client.addPlugin(new SharedPreferencesFlipperPlugin(context)); - client.addPlugin(CrashReporterPlugin.getInstance()); - client.addPlugin(new RNPerfMonitorPlugin(reactInstanceManager)); - - NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin(); - NetworkingModule.setCustomClientBuilder( - new NetworkingModule.CustomClientBuilder() { - @Override - public void apply(OkHttpClient.Builder builder) { - builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin)); - } - }); - client.addPlugin(networkFlipperPlugin); - client.start(); - - // Fresco Plugin needs to ensure that ImagePipelineFactory is initialized - // Hence we run if after all native modules have been initialized - ReactContext reactContext = reactInstanceManager.getCurrentReactContext(); - if (reactContext == null) { - reactInstanceManager.addReactInstanceEventListener( - new ReactInstanceEventListener() { - @Override - public void onReactContextInitialized(ReactContext reactContext) { - reactInstanceManager.removeReactInstanceEventListener(this); - reactContext.runOnNativeModulesQueueThread( - new Runnable() { - @Override - public void run() { - client.addPlugin(new FrescoFlipperPlugin()); - } - }); - } - }); - } else { - client.addPlugin(new FrescoFlipperPlugin()); - } - } - } -} diff --git a/shared/android/app/src/main/AndroidManifest.xml b/shared/android/app/src/main/AndroidManifest.xml index 0a75308889be..a084faceed82 100644 --- a/shared/android/app/src/main/AndroidManifest.xml +++ b/shared/android/app/src/main/AndroidManifest.xml @@ -19,8 +19,10 @@ android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:theme="@style/AppTheme" + android:supportsRtl="true" android:networkSecurityConfig="@xml/network_security_config" - android:largeHeap="true"> + android:largeHeap="true" + > - diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/ChatBroadcastReceiver.java b/shared/android/app/src/main/java/io/keybase/ossifrage/ChatBroadcastReceiver.java deleted file mode 100644 index df71b06d0d17..000000000000 --- a/shared/android/app/src/main/java/io/keybase/ossifrage/ChatBroadcastReceiver.java +++ /dev/null @@ -1,91 +0,0 @@ -package io.keybase.ossifrage; - -import android.app.PendingIntent; -import android.app.RemoteInput; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.os.Build; -import android.os.Bundle; -import android.util.Log; - -import androidx.annotation.RequiresApi; -import androidx.core.app.NotificationCompat; -import androidx.core.app.NotificationManagerCompat; - -import io.keybase.ossifrage.modules.NativeLogger; -import keybase.Keybase; - -public class ChatBroadcastReceiver extends BroadcastReceiver { - public static String KEY_TEXT_REPLY = "key_text_reply"; - - @RequiresApi(api = Build.VERSION_CODES.KITKAT_WATCH) - private String getMessageText(Intent intent) { - Bundle remoteInput = RemoteInput.getResultsFromIntent(intent); - if (remoteInput != null) { - return remoteInput.getCharSequence(KEY_TEXT_REPLY).toString(); - } - return null; - } - - @RequiresApi(api = Build.VERSION_CODES.KITKAT_WATCH) - @Override - public void onReceive(Context context, Intent intent) { - MainActivity.setupKBRuntime(context, false); - ConvData convData = new ConvData(intent); - PendingIntent openConv = intent.getParcelableExtra("openConvPendingIntent"); - NotificationCompat.Builder repliedNotification = new NotificationCompat.Builder(context, KeybasePushNotificationListenerService.CHAT_CHANNEL_ID) - .setContentIntent(openConv) - .setTimeoutAfter(1000) - .setSmallIcon(R.drawable.ic_notif); - NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); - - String messageBody = getMessageText(intent); - if (messageBody != null) { - - try { - WithBackgroundActive withBackgroundActive = () -> Keybase.handlePostTextReply(convData.convID, convData.tlfName, convData.lastMsgId, messageBody); - withBackgroundActive.whileActive(context); - repliedNotification.setContentText("Replied"); - } catch (Exception e) { - repliedNotification.setContentText("Couldn't send reply"); - NativeLogger.error("Failed to send quick reply", e); - } - - } else { - repliedNotification.setContentText("Couldn't send reply - Failed to read input."); - NativeLogger.error("Message Body in quick reply was null"); - } - - notificationManager.notify(convData.convID, 0, repliedNotification.build()); - } -} - -class ConvData { - String convID; - String tlfName; - long lastMsgId; - - ConvData(String convId, String tlfName, long lastMsgId) { - this.convID = convId; - this.tlfName = tlfName; - this.lastMsgId = lastMsgId; - } - - ConvData (Intent intent) { - Bundle data = intent.getBundleExtra("ConvData"); - this.convID = data.getString("convID"); - this.tlfName = data.getString("tlfName"); - this.lastMsgId = data.getLong("lastMsgId"); - } - - public Intent intoIntent(Context context) { - Bundle data = new Bundle(); - data.putString("convID", this.convID); - data.putString("tlfName", this.tlfName); - data.putLong("lastMsgId", this.lastMsgId); - Intent intent = new Intent(context, ChatBroadcastReceiver.class); - intent.putExtra("ConvData", data); - return intent; - } -} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/ChatBroadcastReceiver.kt b/shared/android/app/src/main/java/io/keybase/ossifrage/ChatBroadcastReceiver.kt new file mode 100644 index 000000000000..e7ce43df86cc --- /dev/null +++ b/shared/android/app/src/main/java/io/keybase/ossifrage/ChatBroadcastReceiver.kt @@ -0,0 +1,89 @@ +package io.keybase.ossifrage + +import android.app.PendingIntent +import android.app.RemoteInput +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.os.Build +import android.os.Bundle +import androidx.annotation.RequiresApi +import androidx.core.app.NotificationCompat +import androidx.core.app.NotificationManagerCompat +import io.keybase.ossifrage.MainActivity.Companion.setupKBRuntime +import io.keybase.ossifrage.modules.NativeLogger +import keybase.Keybase + +class ChatBroadcastReceiver : BroadcastReceiver() { + @RequiresApi(api = Build.VERSION_CODES.KITKAT_WATCH) + private fun getMessageText(intent: Intent): String? { + val remoteInput = RemoteInput.getResultsFromIntent(intent) + return remoteInput?.getCharSequence(KEY_TEXT_REPLY)?.toString() + } + + @RequiresApi(api = Build.VERSION_CODES.KITKAT_WATCH) + override fun onReceive(context: Context, intent: Intent) { + setupKBRuntime(context, false) + val convData = ConvData(intent) + val openConv = intent.getParcelableExtra("openConvPendingIntent") + val repliedNotification = NotificationCompat.Builder(context, KeybasePushNotificationListenerService.CHAT_CHANNEL_ID) + .setContentIntent(openConv) + .setTimeoutAfter(1000) + .setSmallIcon(R.drawable.ic_notif) + val notificationManager = NotificationManagerCompat.from(context) + val messageBody = getMessageText(intent) + if (messageBody != null) { + try { + val withBackgroundActive: WithBackgroundActive = object : WithBackgroundActive { + override fun task() { + Keybase.handlePostTextReply(convData.convID, convData.tlfName, convData.lastMsgId, messageBody) + } + } + withBackgroundActive.whileActive(context) + repliedNotification.setContentText("Replied") + } catch (e: Exception) { + repliedNotification.setContentText("Couldn't send reply") + NativeLogger.error("Failed to send quick reply", e) + } + } else { + repliedNotification.setContentText("Couldn't send reply - Failed to read input.") + NativeLogger.error("Message Body in quick reply was null") + } + notificationManager.notify(convData.convID, 0, repliedNotification.build()) + } + + companion object { + @JvmField + var KEY_TEXT_REPLY = "key_text_reply" + } +} + +internal class ConvData { + @JvmField + var convID: String? + var tlfName: String? + var lastMsgId: Long + + constructor(convId: String?, tlfName: String?, lastMsgId: Long) { + convID = convId + this.tlfName = tlfName + this.lastMsgId = lastMsgId + } + + constructor(intent: Intent) { + val data = intent.getBundleExtra("ConvData") + convID = data!!.getString("convID") + tlfName = data.getString("tlfName") + lastMsgId = data.getLong("lastMsgId") + } + + fun intoIntent(context: Context?): Intent { + val data = Bundle() + data.putString("convID", convID) + data.putString("tlfName", tlfName) + data.putLong("lastMsgId", lastMsgId) + val intent = Intent(context, ChatBroadcastReceiver::class.java) + intent.putExtra("ConvData", data) + return intent + } +} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/CustomBitmapMemoryCacheParamsSupplier.java b/shared/android/app/src/main/java/io/keybase/ossifrage/CustomBitmapMemoryCacheParamsSupplier.java deleted file mode 100644 index ef6d26fd36f5..000000000000 --- a/shared/android/app/src/main/java/io/keybase/ossifrage/CustomBitmapMemoryCacheParamsSupplier.java +++ /dev/null @@ -1,56 +0,0 @@ -package io.keybase.ossifrage; - -import android.app.ActivityManager; -import android.content.Context; -import android.os.Build; - -import com.facebook.common.internal.Supplier; -import com.facebook.common.util.ByteConstants; -import com.facebook.imagepipeline.cache.DefaultBitmapMemoryCacheParamsSupplier; -import com.facebook.imagepipeline.cache.MemoryCacheParams; - -/** - * Custom Bitmap cache config for Fresco based off of {@link DefaultBitmapMemoryCacheParamsSupplier} - */ -public class CustomBitmapMemoryCacheParamsSupplier implements Supplier { - - private static final int CACHE_DIVISION = 8; // cache size will be 1/8 of the max allocated app memory - private static final int MAX_CACHE_ENTRIES = 256; - private static final int MAX_EVICTION_QUEUE_SIZE = Integer.MAX_VALUE; - private static final int MAX_EVICTION_QUEUE_ENTRIES = Integer.MAX_VALUE; - private static final int MAX_CACHE_ENTRY_SIZE = Integer.MAX_VALUE; - - private final ActivityManager mActivityManager; - - public CustomBitmapMemoryCacheParamsSupplier(Context context) { - mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); - } - - @Override - public MemoryCacheParams get() { - return new MemoryCacheParams( - getMaxCacheSize(), - MAX_CACHE_ENTRIES, - MAX_EVICTION_QUEUE_SIZE, - MAX_EVICTION_QUEUE_ENTRIES, - MAX_CACHE_ENTRY_SIZE); - } - - private int getMaxCacheSize() { - final int maxMemory = - Math.min(mActivityManager.getMemoryClass() * ByteConstants.MB, Integer.MAX_VALUE); - if (maxMemory < 32 * ByteConstants.MB) { - return 4 * ByteConstants.MB; - } else if (maxMemory < 64 * ByteConstants.MB) { - return 6 * ByteConstants.MB; - } else { - // We don't want to use more ashmem on Gingerbread for now, since it doesn't respond well to - // native memory pressure (doesn't throw exceptions, crashes app, crashes phone) - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { - return 8 * ByteConstants.MB; - } else { - return maxMemory / CACHE_DIVISION; - } - } - } -} \ No newline at end of file diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/CustomBitmapMemoryCacheParamsSupplier.kt b/shared/android/app/src/main/java/io/keybase/ossifrage/CustomBitmapMemoryCacheParamsSupplier.kt new file mode 100644 index 000000000000..dd9c735ed968 --- /dev/null +++ b/shared/android/app/src/main/java/io/keybase/ossifrage/CustomBitmapMemoryCacheParamsSupplier.kt @@ -0,0 +1,54 @@ +package io.keybase.ossifrage + +import android.app.ActivityManager +import android.content.Context +import android.os.Build +import com.facebook.common.internal.Supplier +import com.facebook.common.util.ByteConstants +import com.facebook.imagepipeline.cache.MemoryCacheParams + +/** + * Custom Bitmap cache config for Fresco based off of [DefaultBitmapMemoryCacheParamsSupplier] + */ +class CustomBitmapMemoryCacheParamsSupplier(context: Context) : Supplier { + private val mActivityManager: ActivityManager + + init { + mActivityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager + } + + override fun get(): MemoryCacheParams { + return MemoryCacheParams( + maxCacheSize, + MAX_CACHE_ENTRIES, + MAX_EVICTION_QUEUE_SIZE, + MAX_EVICTION_QUEUE_ENTRIES, + MAX_CACHE_ENTRY_SIZE) + } + + private val maxCacheSize: Int + get() { + val maxMemory = Math.min(mActivityManager.memoryClass * ByteConstants.MB, Int.MAX_VALUE) + return if (maxMemory < 32 * ByteConstants.MB) { + 4 * ByteConstants.MB + } else if (maxMemory < 64 * ByteConstants.MB) { + 6 * ByteConstants.MB + } else { + // We don't want to use more ashmem on Gingerbread for now, since it doesn't respond well to + // native memory pressure (doesn't throw exceptions, crashes app, crashes phone) + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { + 8 * ByteConstants.MB + } else { + maxMemory / CACHE_DIVISION + } + } + } + + companion object { + private const val CACHE_DIVISION = 8 // cache size will be 1/8 of the max allocated app memory + private const val MAX_CACHE_ENTRIES = 256 + private const val MAX_EVICTION_QUEUE_SIZE = Int.MAX_VALUE + private const val MAX_EVICTION_QUEUE_ENTRIES = Int.MAX_VALUE + private const val MAX_CACHE_ENTRY_SIZE = Int.MAX_VALUE + } +} \ No newline at end of file diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/KBInstallReferrerListener.java b/shared/android/app/src/main/java/io/keybase/ossifrage/KBInstallReferrerListener.java deleted file mode 100644 index e741d58c73a0..000000000000 --- a/shared/android/app/src/main/java/io/keybase/ossifrage/KBInstallReferrerListener.java +++ /dev/null @@ -1,110 +0,0 @@ -package io.keybase.ossifrage; - -import android.content.Context; -import android.os.RemoteException; -import android.os.SystemClock; -import android.util.Log; - -import java.util.concurrent.Executor; -import java.util.concurrent.Executors; - -import com.android.installreferrer.api.InstallReferrerClient; -import com.android.installreferrer.api.InstallReferrerStateListener; -import com.android.installreferrer.api.ReferrerDetails; - -import io.keybase.ossifrage.modules.NativeLogger; -import keybase.StringReceiver; - -public class KBInstallReferrerListener implements keybase.NativeInstallReferrerListener, InstallReferrerStateListener { - - private InstallReferrerClient mReferrerClient; - private keybase.StringReceiver callback; - private Context context; - private int retries; - private Executor executor; - - private static final int max_retries = 5; - - KBInstallReferrerListener(Context _context) { - Log.d("KBIR", "KBInstallReferrerListener created"); - context = _context; - executor = Executors.newSingleThreadExecutor(); - retries = 0; - } - - // should only be called once per object - @Override - public void startInstallReferrerListener(StringReceiver cb) { - Log.e("KBIR", "KBInstallReferrerListener started"); - - mReferrerClient = InstallReferrerClient.newBuilder(this.context).build(); - mReferrerClient.startConnection(this); - callback = cb; - } - - @Override - public void onInstallReferrerSetupFinished(int responseCode) { - Log.e("KBIR", "KBInstallReferrerListener#onInstallReferrerSetupFinished: got code " + responseCode); - executor.execute(new Runnable() { - @Override - public void run() { - switch (responseCode) { - case InstallReferrerClient.InstallReferrerResponse.OK: - // Connection established - handleReferrerResponseOK(); - return; - case InstallReferrerClient.InstallReferrerResponse.SERVICE_DISCONNECTED: - reconnect(); - return; - case InstallReferrerClient.InstallReferrerResponse.FEATURE_NOT_SUPPORTED: - case InstallReferrerClient.InstallReferrerResponse.SERVICE_UNAVAILABLE: - case InstallReferrerClient.InstallReferrerResponse.DEVELOPER_ERROR: - default: - // other issues, can't do much here.... - callback.callbackWithString(""); - } - } - }); - } - - private void handleReferrerResponseOK() { - try { - ReferrerDetails response = mReferrerClient.getInstallReferrer(); - String referrerData = response.getInstallReferrer(); - callback.callbackWithString(referrerData); - } catch (RemoteException e) { - Log.e("KBIR", "KBInstallReferrerListener#handleReferrerResponseOK got exception: " + e.toString()); - e.printStackTrace(); - callback.callbackWithString(""); - } - mReferrerClient.endConnection(); - } - - // tries to reconnect up to max_retries times in case of errors - private void reconnect() { - if (retries >= max_retries) { - Log.e("KBIR", "KBInstallReferrerListener max reconnection attempts exceeded"); - callback.callbackWithString(""); - mReferrerClient.endConnection(); - return; - } - - retries++; - // sleep for a bit, hopefully when we wake up the play store - // connection will be available. - SystemClock.sleep(retries * 1000); - Log.e("KBIR", "KBInstallReferrerListener reconnecting..."); - mReferrerClient.startConnection(this); - } - - @Override - public void onInstallReferrerServiceDisconnected() { - Log.e("KBIR", "KBInstallReferrerListener#onInstallReferrerServiceDisconnected: attempting restart..."); - executor.execute(new Runnable() { - @Override - public void run() { - reconnect(); - } - }); - } -} \ No newline at end of file diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/KBInstallReferrerListener.kt b/shared/android/app/src/main/java/io/keybase/ossifrage/KBInstallReferrerListener.kt new file mode 100644 index 000000000000..613e5e259974 --- /dev/null +++ b/shared/android/app/src/main/java/io/keybase/ossifrage/KBInstallReferrerListener.kt @@ -0,0 +1,97 @@ +package io.keybase.ossifrage + +import android.content.Context +import android.os.RemoteException +import android.os.SystemClock +import android.util.Log +import com.android.installreferrer.api.InstallReferrerClient +import com.android.installreferrer.api.InstallReferrerStateListener +import keybase.NativeInstallReferrerListener +import keybase.StringReceiver +import java.util.concurrent.Executor +import java.util.concurrent.Executors + +class KBInstallReferrerListener internal constructor(_context: Context) : NativeInstallReferrerListener, InstallReferrerStateListener { + private var mReferrerClient: InstallReferrerClient? = null + private var callback: StringReceiver? = null + private val context: Context + private var retries: Int + private val executor: Executor + + init { + Log.d("KBIR", "KBInstallReferrerListener created") + context = _context + executor = Executors.newSingleThreadExecutor() + retries = 0 + } + + // should only be called once per object + override fun startInstallReferrerListener(cb: StringReceiver) { + Log.e("KBIR", "KBInstallReferrerListener started") + val rc = InstallReferrerClient.newBuilder(context).build() + mReferrerClient = rc + rc.startConnection(this) + callback = cb + } + + override fun onInstallReferrerSetupFinished(responseCode: Int) { + Log.e("KBIR", "KBInstallReferrerListener#onInstallReferrerSetupFinished: got code $responseCode") + executor.execute(Runnable { + when (responseCode) { + InstallReferrerClient.InstallReferrerResponse.OK -> { + // Connection established + handleReferrerResponseOK() + return@Runnable + } + + InstallReferrerClient.InstallReferrerResponse.SERVICE_DISCONNECTED -> { + reconnect() + return@Runnable + } + + InstallReferrerClient.InstallReferrerResponse.FEATURE_NOT_SUPPORTED, InstallReferrerClient.InstallReferrerResponse.SERVICE_UNAVAILABLE, InstallReferrerClient.InstallReferrerResponse.DEVELOPER_ERROR -> // other issues, can't do much here.... + callback!!.callbackWithString("") + + else -> callback!!.callbackWithString("") + } + }) + } + + private fun handleReferrerResponseOK() { + try { + val response = mReferrerClient!!.installReferrer + val referrerData = response.installReferrer + callback!!.callbackWithString(referrerData) + } catch (e: RemoteException) { + Log.e("KBIR", "KBInstallReferrerListener#handleReferrerResponseOK got exception: $e") + e.printStackTrace() + callback!!.callbackWithString("") + } + mReferrerClient!!.endConnection() + } + + // tries to reconnect up to max_retries times in case of errors + private fun reconnect() { + if (retries >= max_retries) { + Log.e("KBIR", "KBInstallReferrerListener max reconnection attempts exceeded") + callback!!.callbackWithString("") + mReferrerClient!!.endConnection() + return + } + retries++ + // sleep for a bit, hopefully when we wake up the play store + // connection will be available. + SystemClock.sleep((retries * 1000).toLong()) + Log.e("KBIR", "KBInstallReferrerListener reconnecting...") + mReferrerClient!!.startConnection(this) + } + + override fun onInstallReferrerServiceDisconnected() { + Log.e("KBIR", "KBInstallReferrerListener#onInstallReferrerServiceDisconnected: attempting restart...") + executor.execute { reconnect() } + } + + companion object { + private const val max_retries = 5 + } +} \ No newline at end of file diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/KBPushNotifier.java b/shared/android/app/src/main/java/io/keybase/ossifrage/KBPushNotifier.java deleted file mode 100644 index 1dfa6d7caed7..000000000000 --- a/shared/android/app/src/main/java/io/keybase/ossifrage/KBPushNotifier.java +++ /dev/null @@ -1,275 +0,0 @@ -package io.keybase.ossifrage; - -import android.app.PendingIntent; -import android.content.Context; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.graphics.PorterDuff; -import android.graphics.PorterDuffXfermode; -import android.graphics.Rect; -import android.net.Uri; -import android.os.Build; -import android.os.Bundle; - -import androidx.annotation.RequiresApi; -import androidx.core.app.NotificationCompat; -import androidx.core.app.NotificationCompat.MessagingStyle; -import androidx.core.app.NotificationManagerCompat; -import androidx.core.app.Person; -import androidx.core.app.RemoteInput; -import androidx.core.graphics.drawable.IconCompat; - -import java.io.BufferedInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.HttpURLConnection; -import java.net.URL; - -import io.keybase.ossifrage.modules.NativeLogger; -import keybase.ChatNotification; -import keybase.Message; -import keybase.PushNotifier; - -public class KBPushNotifier implements PushNotifier { - private final Context context; - private Bundle bundle; - private SmallMsgRingBuffer convMsgCache; - - private MessagingStyle buildStyle(Person person) { - MessagingStyle style = new MessagingStyle(person); - if (convMsgCache != null) { - for (MessagingStyle.Message msg : convMsgCache.summary()) { - style.addMessage(msg); - } - } - - return style; - } - - KBPushNotifier(Context ctx, Bundle bundle) { - this.context = ctx; - this.bundle = bundle; - } - - void setMsgCache(SmallMsgRingBuffer convMsgCache) { - this.convMsgCache = convMsgCache; - } - - // From: https://stackoverflow.com/questions/11932805/cropping-circular-area-from-bitmap-in-android - private static Bitmap getCroppedBitmap(Bitmap bitmap) { - Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), - bitmap.getHeight(), Bitmap.Config.ARGB_8888); - Canvas canvas = new Canvas(output); - - final int color = 0xff424242; - final Paint paint = new Paint(); - final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); - - paint.setAntiAlias(true); - canvas.drawARGB(0, 0, 0, 0); - paint.setColor(color); - canvas.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2, - bitmap.getWidth() / 2, paint); - paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); - canvas.drawBitmap(bitmap, rect, rect, paint); - return output; - } - - // Controls the Intent that gets built - private PendingIntent buildPendingIntent(Bundle bundle) { - Intent open_activity_intent = new Intent(context, MainActivity.class); - open_activity_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); - open_activity_intent.setPackage(context.getPackageName()); - open_activity_intent.putExtra("notification", bundle); - - // unique so our intents are deduped, else it'll reuse old ones - PendingIntent pending_intent = PendingIntent.getActivity(this.context, (int)(System.currentTimeMillis()/1000) , open_activity_intent, PendingIntent.FLAG_MUTABLE); - - return pending_intent; - } - - private IconCompat getKeybaseAvatar(String avatarUri) { - if (avatarUri.isEmpty()) { - return null; - } - - HttpURLConnection urlConnection = null; - try { - URL url = new URL(avatarUri); - urlConnection = (HttpURLConnection) url.openConnection(); - InputStream in = new BufferedInputStream(urlConnection.getInputStream()); - Bitmap bitmap = BitmapFactory.decodeStream(in); - Bitmap croppedBitmap = getCroppedBitmap(bitmap); - return IconCompat.createWithBitmap(croppedBitmap); - } catch (IOException e) { - e.printStackTrace(); - } finally { - if (urlConnection != null) { - urlConnection.disconnect(); - } - } - - return null; - } - - @RequiresApi(api = Build.VERSION_CODES.KITKAT_WATCH) - private NotificationCompat.Action newReplyAction(Context context, ConvData convData, PendingIntent openConv) { - String replyLabel = "Reply"; - RemoteInput remoteInput = new RemoteInput.Builder(ChatBroadcastReceiver.KEY_TEXT_REPLY) - .setLabel(replyLabel) - .build(); - - Intent intent = convData.intoIntent(context); - intent.putExtra("openConvPendingIntent", openConv); - - // Our pending intent which will be sent to the broadcast receiver - PendingIntent replyPendingIntent = - PendingIntent.getBroadcast(context, - convData.convID.hashCode(), - intent, - PendingIntent.FLAG_MUTABLE); - - NotificationCompat.Action action = - new NotificationCompat.Action.Builder(R.drawable.ic_notif, "Reply", replyPendingIntent) - .addRemoteInput(remoteInput) - .build(); - return action; - } - - @Override - public void displayChatNotification(ChatNotification chatNotification) { - // We need to specify these parameters so that the data returned - // from the launching intent is processed correctly. - // https://github.com/keybase/client/blob/95959e12d76612f455ab4a90835debff489eacf4/shared/actions/platform-specific/push.native.js#L363-L381 - Bundle bundle = (Bundle) this.bundle.clone(); - bundle.putBoolean("userInteraction", true); - bundle.putString("type", "chat.newmessage"); - bundle.putString("convID", chatNotification.getConvID()); - PendingIntent pending_intent = buildPendingIntent(bundle); - - ConvData convData = new ConvData(chatNotification.getConvID(), chatNotification.getTlfName(), chatNotification.getMessage().getID()); - - NotificationCompat.Builder builder = - new NotificationCompat.Builder(this.context, KeybasePushNotificationListenerService.CHAT_CHANNEL_ID) - .setSmallIcon(R.drawable.ic_notif) - .setContentIntent(pending_intent) - .setAutoCancel(true); - - int notificationDefaults = NotificationCompat.DEFAULT_LIGHTS | NotificationCompat.DEFAULT_VIBRATE; - - // Set notification sound - if (chatNotification.getSoundName().equals("default")) { - notificationDefaults |= NotificationCompat.DEFAULT_SOUND; - } else { - String soundResource = filenameResourceName(chatNotification.getSoundName()); - String soundUriStr = "android.resource://" + this.context.getPackageName() + "/raw/" + soundResource; - Uri soundUri = Uri.parse(soundUriStr); - builder.setSound(soundUri); - } - - builder.setDefaults(notificationDefaults); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) { - builder.addAction(newReplyAction(this.context, convData, pending_intent)); - } - - Message msg = chatNotification.getMessage(); - keybase.Person from = msg.getFrom(); - Person.Builder personBuilder = new Person.Builder() - .setName(from.getKeybaseUsername()) - .setBot(from.getIsBot()); - - String avatarUri = chatNotification.getMessage().getFrom().getKeybaseAvatar(); - IconCompat icon = getKeybaseAvatar(avatarUri); - if (icon != null) { - personBuilder.setIcon(icon); - } - - Person fromPerson = personBuilder.build(); - - if (this.convMsgCache != null) { - String msgText = chatNotification.getIsPlaintext() ? chatNotification.getMessage().getPlaintext() : ""; - if (msgText.isEmpty()) { - msgText = chatNotification.getMessage().getServerMessage(); - } - convMsgCache.add(new MessagingStyle.Message(msgText, msg.getAt(), fromPerson)); - } - - MessagingStyle style = buildStyle(fromPerson); - style.setConversationTitle(chatNotification.getConversationName()); - style.setGroupConversation(chatNotification.getIsGroupConversation()); - - builder.setStyle(style); - - NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this.context); - notificationManager.notify(chatNotification.getConvID(), 0, builder.build()); - } - - // Return the resource name of the specified file (i.e. name and no extension), - // suitable for use in a resource URI. - String filenameResourceName(String filename) { - if (filename.indexOf(".") >= 0) { - return filename.substring(0, filename.lastIndexOf(".")); - } else { - // Not all filenames have an extension to be stripped. - return filename; - } - } - - void followNotification(String username, String notificationMsg) { - Bundle bundle = (Bundle) this.bundle.clone(); - bundle.putBoolean("userInteraction", true); - bundle.putString("type", "follow"); - bundle.putString("username", username); - - NotificationCompat.Builder builder = new NotificationCompat.Builder(this.context, KeybasePushNotificationListenerService.FOLLOW_CHANNEL_ID) - .setSmallIcon(R.drawable.ic_notif) - .setContentTitle("Keybase - New Follower") - .setContentText(notificationMsg) - // Set the intent that will fire when the user taps the notification - .setContentIntent(buildPendingIntent(bundle)) - .setAutoCancel(true); - - NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this.context); - notificationManager.notify("follow:" + username, 0, builder.build()); - } - - void deviceNotification() { - Bundle bundle = (Bundle) this.bundle.clone(); - genericNotification(bundle.getString("device_id") + bundle.getString("type"), bundle.getString("message"), "", bundle, KeybasePushNotificationListenerService.DEVICE_CHANNEL_ID); - } - - void generalNotification() { - Bundle bundle = (Bundle) this.bundle.clone(); - genericNotification(bundle.getString("device_id") + bundle.getString("type"), bundle.getString("title"), bundle.getString("message"), bundle, KeybasePushNotificationListenerService.GENERAL_CHANNEL_ID); - } - - public void genericNotification(String uniqueTag, String notificationTitle, String notificationMsg, Bundle bundle, String channelID) { - bundle.putBoolean("userInteraction", true); - NotificationCompat.Builder builder = new NotificationCompat.Builder(this.context, channelID) - .setSmallIcon(R.drawable.ic_notif) - // Set the intent that will fire when the user taps the notification - .setContentIntent(buildPendingIntent(bundle)) - .setAutoCancel(true); - - if (!notificationMsg.isEmpty()) { - builder.setContentText(notificationMsg); - } - if (!notificationTitle.isEmpty()) { - builder.setContentTitle(notificationTitle); - } - - NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this.context); - notificationManager.notify(uniqueTag, 0, builder.build()); - - } - - public void localNotification(String ident, String msg, long badgeCount, String soundName, String convID, - String typ) { - genericNotification(ident, "", msg, this.bundle, KeybasePushNotificationListenerService.GENERAL_CHANNEL_ID); - } - -} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/KBPushNotifier.kt b/shared/android/app/src/main/java/io/keybase/ossifrage/KBPushNotifier.kt new file mode 100644 index 000000000000..50723c6b6c41 --- /dev/null +++ b/shared/android/app/src/main/java/io/keybase/ossifrage/KBPushNotifier.kt @@ -0,0 +1,238 @@ +package io.keybase.ossifrage +import kotlin.concurrent.thread +import android.app.PendingIntent +import android.content.Context +import android.content.Intent +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.graphics.Canvas +import android.graphics.Paint +import android.graphics.PorterDuff +import android.graphics.PorterDuffXfermode +import android.graphics.Rect +import android.net.Uri +import android.os.Build +import android.os.Bundle +import android.os.Handler +import android.os.Looper +import androidx.annotation.RequiresApi +import androidx.core.app.NotificationCompat +import androidx.core.app.NotificationManagerCompat +import androidx.core.app.Person +import androidx.core.app.RemoteInput +import androidx.core.graphics.drawable.IconCompat +import io.keybase.ossifrage.MainActivity +import keybase.ChatNotification +import keybase.PushNotifier +import java.io.BufferedInputStream +import java.io.IOException +import java.io.InputStream +import java.net.HttpURLConnection +import java.net.URL +import android.util.Log + +class KBPushNotifier internal constructor(private val context: Context, private val bundle: Bundle) : PushNotifier { + private var convMsgCache: SmallMsgRingBuffer? = null + private fun buildStyle(person: Person): NotificationCompat.MessagingStyle { + val style = NotificationCompat.MessagingStyle(person) + if (convMsgCache != null) { + for (msg in convMsgCache!!.summary()) { + style.addMessage(msg) + } + } + return style + } + + fun setMsgCache(convMsgCache: SmallMsgRingBuffer?) { + this.convMsgCache = convMsgCache + } + + // Controls the Intent that gets built + private fun buildPendingIntent(bundle: Bundle): PendingIntent { + val open_activity_intent = Intent(context, MainActivity::class.java) + open_activity_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP) + open_activity_intent.setPackage(context.packageName) + open_activity_intent.putExtra("notification", bundle) + + // unique so our intents are deduped, else it'll reuse old ones + return PendingIntent.getActivity(context, (System.currentTimeMillis() / 1000).toInt(), open_activity_intent, PendingIntent.FLAG_MUTABLE) + } + + private fun getKeybaseAvatar(avatarUri: String): IconCompat? { + if (avatarUri.isEmpty()) { + return null + } + var urlConnection: HttpURLConnection? = null + try { + val url = URL(avatarUri) + urlConnection = url.openConnection() as HttpURLConnection + val `in`: InputStream = BufferedInputStream(urlConnection.inputStream) + val bitmap = BitmapFactory.decodeStream(`in`) + val croppedBitmap = getCroppedBitmap(bitmap) + return IconCompat.createWithBitmap(croppedBitmap) + } catch (e: IOException) { + e.printStackTrace() + } finally { + urlConnection?.disconnect() + } + return null + } + + @RequiresApi(api = Build.VERSION_CODES.KITKAT_WATCH) + private fun newReplyAction(context: Context, convData: ConvData, openConv: PendingIntent): NotificationCompat.Action { + val replyLabel = "Reply" + val remoteInput = RemoteInput.Builder(ChatBroadcastReceiver.KEY_TEXT_REPLY) + .setLabel(replyLabel) + .build() + val intent = convData.intoIntent(context) + intent.putExtra("openConvPendingIntent", openConv) + + // Our pending intent which will be sent to the broadcast receiver + val replyPendingIntent = PendingIntent.getBroadcast(context, + convData.convID.hashCode(), + intent, + PendingIntent.FLAG_MUTABLE) + return NotificationCompat.Action.Builder(R.drawable.ic_notif, "Reply", replyPendingIntent) + .addRemoteInput(remoteInput) + .build() + } + + override fun displayChatNotification(chatNotification: ChatNotification) { + // We need to specify these parameters so that the data returned + // from the launching intent is processed correctly. + // https://github.com/keybase/client/blob/95959e12d76612f455ab4a90835debff489eacf4/shared/actions/platform-specific/push.native.js#L363-L381 + + // needs to be in the background since we make network calls + thread(start = true) { + displayChatNotification2(chatNotification) + } + } + private fun displayChatNotification2(chatNotification: ChatNotification) { + bundle.putBoolean("userInteraction", true) + bundle.putString("type", "chat.newmessage") + bundle.putString("convID", chatNotification.convID) + val pending_intent = buildPendingIntent(bundle) + val convData = ConvData(chatNotification.convID, chatNotification.tlfName, chatNotification.message.id) + val builder = NotificationCompat.Builder(context, KeybasePushNotificationListenerService.CHAT_CHANNEL_ID) + .setSmallIcon(R.drawable.ic_notif) + .setContentIntent(pending_intent) + .setAutoCancel(true) + var notificationDefaults = NotificationCompat.DEFAULT_LIGHTS or NotificationCompat.DEFAULT_VIBRATE + + // Set notification sound + if (chatNotification.soundName == "default") { + notificationDefaults = notificationDefaults or NotificationCompat.DEFAULT_SOUND + } else { + val soundResource = filenameResourceName(chatNotification.soundName) + val soundUriStr = "android.resource://" + context.packageName + "/raw/" + soundResource + val soundUri = Uri.parse(soundUriStr) + builder.setSound(soundUri) + } + builder.setDefaults(notificationDefaults) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) { + builder.addAction(newReplyAction(context, convData, pending_intent)) + } + val msg = chatNotification.message + val from = msg.from + val personBuilder = Person.Builder() + .setName(from.keybaseUsername) + .setBot(from.isBot) + val avatarUri = chatNotification.message.from.keybaseAvatar + val icon = getKeybaseAvatar(avatarUri) + if (icon != null) { + personBuilder.setIcon(icon) + } + val fromPerson = personBuilder.build() + if (convMsgCache != null) { + var msgText = if (chatNotification.isPlaintext) chatNotification.message.plaintext else "" + if (msgText.isEmpty()) { + msgText = chatNotification.message.serverMessage + } + convMsgCache!!.add(NotificationCompat.MessagingStyle.Message(msgText, msg.at, fromPerson)) + } + val style = buildStyle(fromPerson) + style.setConversationTitle(chatNotification.conversationName) + style.setGroupConversation(chatNotification.isGroupConversation) + builder.setStyle(style) + val notificationManager = NotificationManagerCompat.from(context) + notificationManager.notify(chatNotification.convID, 0, builder.build()) + } + + // Return the resource name of the specified file (i.e. name and no extension), + // suitable for use in a resource URI. + fun filenameResourceName(filename: String): String { + return if (filename.indexOf(".") >= 0) { + filename.substring(0, filename.lastIndexOf(".")) + } else { + // Not all filenames have an extension to be stripped. + filename + } + } + + fun followNotification(username: String, notificationMsg: String?) { + val bundle = bundle.clone() as Bundle + bundle.putBoolean("userInteraction", true) + bundle.putString("type", "follow") + bundle.putString("username", username) + val builder = NotificationCompat.Builder(context, KeybasePushNotificationListenerService.FOLLOW_CHANNEL_ID) + .setSmallIcon(R.drawable.ic_notif) + .setContentTitle("Keybase - New Follower") + .setContentText(notificationMsg) // Set the intent that will fire when the user taps the notification + .setContentIntent(buildPendingIntent(bundle)) + .setAutoCancel(true) + val notificationManager = NotificationManagerCompat.from(context) + notificationManager.notify("follow:$username", 0, builder.build()) + } + + fun deviceNotification() { + val bundle = bundle.clone() as Bundle + genericNotification(bundle.getString("device_id") + bundle.getString("type"), bundle.getString("message"), "", bundle, KeybasePushNotificationListenerService.DEVICE_CHANNEL_ID) + } + + fun generalNotification() { + val bundle = bundle.clone() as Bundle + genericNotification(bundle.getString("device_id") + bundle.getString("type"), bundle.getString("title"), bundle.getString("message"), bundle, KeybasePushNotificationListenerService.GENERAL_CHANNEL_ID) + } + + fun genericNotification(uniqueTag: String?, notificationTitle: String?, notificationMsg: String?, bundle: Bundle, channelID: String?) { + bundle.putBoolean("userInteraction", true) + val builder = NotificationCompat.Builder(context, channelID!!) + .setSmallIcon(R.drawable.ic_notif) // Set the intent that will fire when the user taps the notification + .setContentIntent(buildPendingIntent(bundle)) + .setAutoCancel(true) + if (!notificationMsg!!.isEmpty()) { + builder.setContentText(notificationMsg) + } + if (!notificationTitle!!.isEmpty()) { + builder.setContentTitle(notificationTitle) + } + val notificationManager = NotificationManagerCompat.from(context) + notificationManager.notify(uniqueTag, 0, builder.build()) + } + + override fun localNotification(ident: String, msg: String, badgeCount: Long, soundName: String, convID: String, + typ: String) { + genericNotification(ident, "", msg, bundle, KeybasePushNotificationListenerService.GENERAL_CHANNEL_ID) + } + + companion object { + // From: https://stackoverflow.com/questions/11932805/cropping-circular-area-from-bitmap-in-android + private fun getCroppedBitmap(bitmap: Bitmap): Bitmap { + val output = Bitmap.createBitmap(bitmap.width, + bitmap.height, Bitmap.Config.ARGB_8888) + val canvas = Canvas(output) + val color = -0xbdbdbe + val paint = Paint() + val rect = Rect(0, 0, bitmap.width, bitmap.height) + paint.isAntiAlias = true + canvas.drawARGB(0, 0, 0, 0) + paint.color = color + canvas.drawCircle((bitmap.width / 2).toFloat(), (bitmap.height / 2).toFloat(), + ( + bitmap.width / 2).toFloat(), paint) + paint.setXfermode(PorterDuffXfermode(PorterDuff.Mode.SRC_IN)) + canvas.drawBitmap(bitmap, rect, rect, paint) + return output + } + } +} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/KBReactPackage.java b/shared/android/app/src/main/java/io/keybase/ossifrage/KBReactPackage.java deleted file mode 100644 index 68b54c3e900d..000000000000 --- a/shared/android/app/src/main/java/io/keybase/ossifrage/KBReactPackage.java +++ /dev/null @@ -1,24 +0,0 @@ -package io.keybase.ossifrage; - -import com.facebook.react.bridge.NativeModule; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.uimanager.ViewManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; - -public class KBReactPackage implements com.facebook.react.ReactPackage { - @Override - public List createNativeModules(ReactApplicationContext reactApplicationContext) { - List modules = new ArrayList<>(); - // modules.add(); - return modules; - } - - @Override - public List createViewManagers(ReactApplicationContext reactApplicationContext) { - return Arrays.asList(); - } -} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/KBReactPackage.kt b/shared/android/app/src/main/java/io/keybase/ossifrage/KBReactPackage.kt new file mode 100644 index 000000000000..4e3dd8d8c697 --- /dev/null +++ b/shared/android/app/src/main/java/io/keybase/ossifrage/KBReactPackage.kt @@ -0,0 +1,17 @@ +package io.keybase.ossifrage + +import com.facebook.react.ReactPackage +import com.facebook.react.bridge.NativeModule +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.uimanager.ViewManager + +open class KBReactPackage : ReactPackage { + override fun createNativeModules(reactApplicationContext: ReactApplicationContext): List { + // modules.add(); + return ArrayList() + } + + override fun createViewManagers(reactApplicationContext: ReactApplicationContext): List> { + return mutableListOf() + } +} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/KeyStore.java b/shared/android/app/src/main/java/io/keybase/ossifrage/KeyStore.java deleted file mode 100644 index e0ee2bd798ee..000000000000 --- a/shared/android/app/src/main/java/io/keybase/ossifrage/KeyStore.java +++ /dev/null @@ -1,241 +0,0 @@ -package io.keybase.ossifrage; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.SharedPreferences; -import android.os.Build; -import android.security.keystore.KeyPermanentlyInvalidatedException; -import android.util.Base64; - -import org.msgpack.core.MessageBufferPacker; -import org.msgpack.core.MessagePack; - -import java.io.IOException; -import java.security.InvalidKeyException; -import java.security.KeyPair; -import java.security.KeyStore.Entry; -import java.security.KeyStore.PrivateKeyEntry; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.security.NoSuchProviderException; -import java.security.cert.CertificateException; -import java.util.ArrayList; -import java.util.Iterator; - -import javax.crypto.Cipher; -import javax.crypto.IllegalBlockSizeException; -import javax.crypto.NoSuchPaddingException; -import javax.crypto.SecretKey; -import javax.crypto.spec.SecretKeySpec; - -import keybase.UnsafeExternalKeyStore; -import io.keybase.ossifrage.keystore.KeyStoreHelper; -import io.keybase.ossifrage.modules.NativeLogger; - -public class KeyStore implements UnsafeExternalKeyStore { - private final Context context; - private final SharedPreferences prefs; - private java.security.KeyStore ks; - - // Prefix for the key we use when we place the data in shared preferences - private static final String PREFS_KEY = "_wrappedKey_"; - // The name of the key we use to store our created RSA keypair in android's keystore - private static final String KEY_ALIAS = "_keybase-rsa-wrapper_"; - - private static final String ALGORITHM = "RSA_SECRETBOX"; - - public KeyStore(final Context context, final SharedPreferences prefs) throws KeyStoreException, CertificateException, NoSuchAlgorithmException, IOException { - this.context = context; - this.prefs = prefs; - - ks = java.security.KeyStore.getInstance("AndroidKeyStore"); - ks.load(null); - NativeLogger.info("KeyStore: initialized"); - } - - private String sharedPrefKeyPrefix(final String serviceName) { - return serviceName + PREFS_KEY; - } - - private String keyStoreAlias(final String serviceName) { - return serviceName + KEY_ALIAS; - } - - @SuppressLint("CommitPrefEdits") - @Override - public void clearSecret(final String serviceName, final String key) throws Exception { - String id = serviceName + ":" + key; - NativeLogger.info("KeyStore: clearing secret for " + id); - - try { - prefs.edit().remove(sharedPrefKeyPrefix(serviceName) + key).commit(); - } catch (Exception e) { - NativeLogger.error("KeyStore: error clearing secret for " + id, e); - throw e; - } - - NativeLogger.info("KeyStore: cleared secret for " + id); - } - - @Override - public synchronized byte[] getUsersWithStoredSecretsMsgPack(final String serviceName) throws Exception { - NativeLogger.info("KeyStore: getting users with stored secrets for " + serviceName); - - try { - final Iterator keyIterator = prefs.getAll().keySet().iterator(); - final ArrayList userNames = new ArrayList<>(); - - while (keyIterator.hasNext()) { - final String key = keyIterator.next(); - if (key.indexOf(sharedPrefKeyPrefix(serviceName)) == 0) { - userNames.add(key.substring(sharedPrefKeyPrefix(serviceName).length())); - } - } - - NativeLogger.info("KeyStore: got " + userNames.size() + " users with stored secrets for " + serviceName); - - MessageBufferPacker packer = MessagePack.newDefaultBufferPacker(); - packer.packArrayHeader(userNames.size()); - for (String s: userNames) { - packer.packString(s); - } - packer.close(); - return packer.toByteArray(); - } catch (Exception e) { - NativeLogger.error("KeyStore: error getting users with stored secrets for " + serviceName, e); - throw e; - } - } - - @Override - public synchronized byte[] retrieveSecret(final String serviceName, final String key) throws Exception { - String id = serviceName + ":" + key; - NativeLogger.info("KeyStore: retrieving secret for " + id); - - try { - final byte[] wrappedSecret = readWrappedSecret(prefs, sharedPrefKeyPrefix(serviceName) + key); - Entry entry = ks.getEntry(keyStoreAlias(serviceName), null); - - if (entry == null) { - throw new KeyStoreException("No RSA keys in the keystore"); - } - - if (!(entry instanceof PrivateKeyEntry)) { - throw new KeyStoreException("Entry is not a PrivateKeyEntry. It is: " + entry.getClass()); - } - - try { - byte[] secret = unwrapSecret((PrivateKeyEntry) entry, wrappedSecret).getEncoded(); - NativeLogger.info("KeyStore: retrieved " + secret.length + "-byte secret for " + id); - return secret; - } catch (InvalidKeyException e) { - // Invalid key, this can happen when a user changes their lock screen from something to nothing - // or enrolls a new finger. See https://developer.android.com/reference/android/security/keystore/KeyPermanentlyInvalidatedException.html - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && e instanceof KeyPermanentlyInvalidatedException) { - NativeLogger.info("KeyStore: key no longer valid; deleting entry", e); - ks.deleteEntry((keyStoreAlias(serviceName))); - } - throw e; - } - } catch (Exception e) { - NativeLogger.error("KeyStore: error retrieving secret for " + id, e); - throw e; - } - } - - @Override - public synchronized void setupKeyStore(final String serviceName, final String key) throws Exception { - String id = serviceName + ":" + key; - NativeLogger.info("KeyStore: setting up key store for " + id); - - try { - if (!ks.containsAlias(keyStoreAlias(serviceName))) { - KeyStoreHelper.generateRSAKeyPair(context, keyStoreAlias(serviceName)); - } - - // Try to read the entry from the keystore. - // The entry may exist, but it may not be readable by us. - // (this happens when the app is uninstalled and reinstalled) - // In that case, lets' delete the entry and recreate it. - // Note we are purposely not recursing to avoid a state where we - // constantly try to generate new RSA keys (which is slow) - try { - final Entry entry = ks.getEntry(keyStoreAlias(serviceName), null); - if (entry == null) { - ks.deleteEntry(keyStoreAlias(serviceName)); - KeyStoreHelper.generateRSAKeyPair(context, keyStoreAlias(serviceName)); - } - } finally { - // Reload the keystore - ks = java.security.KeyStore.getInstance("AndroidKeyStore"); - ks.load(null); - } - } catch (Exception e) { - NativeLogger.error("KeyStore: error setting up key store for " + id, e); - throw e; - } - - NativeLogger.info("KeyStore: finished setting up key store for " + id); - } - - @Override - public synchronized void storeSecret(final String serviceName, final String key, final byte[] bytes) throws Exception { - String id = serviceName + ":" + key; - NativeLogger.info("KeyStore: storing " + bytes.length + "-byte secret for " + id); - - try { - Entry entry = ks.getEntry(keyStoreAlias(serviceName), null); - - if (entry == null) { - throw new KeyStoreException("No RSA keys in the keystore"); - } - - final byte[] wrappedSecret = wrapSecret((PrivateKeyEntry) entry, new SecretKeySpec(bytes, ALGORITHM)); - - if (wrappedSecret == null) { - throw new IOException("Null return when wrapping secret"); - } - - saveWrappedSecret(prefs, sharedPrefKeyPrefix(serviceName) + key, wrappedSecret); - } catch (Exception e) { - NativeLogger.error("KeyStore: error storing secret for " + id, e); - throw e; - } - - NativeLogger.info("KeyStore: stored " + bytes.length + "-byte secret for " + id); - } - - private static void saveWrappedSecret(SharedPreferences prefs, String prefsKey, byte[] wrappedSecret) { - prefs.edit().putString(prefsKey, Base64.encodeToString(wrappedSecret, Base64.NO_WRAP)).apply(); - } - - - private static byte[] readWrappedSecret(SharedPreferences prefs, String prefsKey) throws Exception { - final String wrappedKey = prefs.getString(prefsKey, ""); - if (wrappedKey.isEmpty()) { - throw new KeyStoreException("No secret for " + prefsKey); - } - return Base64.decode(wrappedKey, Base64.NO_WRAP); - } - - /** - * Similar to Android's example Vault https://github.com/android/platform_development/tree/master/samples/Vault - */ - private static byte[] wrapSecret(PrivateKeyEntry entry, SecretKey key) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, IllegalBlockSizeException, NoSuchProviderException { - KeyPair mPair = new KeyPair(entry.getCertificate().getPublicKey(), entry.getPrivateKey()); - // This is the only cipher that's supported by AndroidKeystore (api version +18) - // The padding makes sure this encryption isn't deterministic - Cipher mCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); - mCipher.init(Cipher.WRAP_MODE, mPair.getPublic()); - return mCipher.wrap(key); - } - - private static SecretKey unwrapSecret(PrivateKeyEntry entry, byte[] wrappedSecretKey) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, IllegalBlockSizeException, NoSuchProviderException { - KeyPair mPair = new KeyPair(entry.getCertificate().getPublicKey(), entry.getPrivateKey()); - Cipher mCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); - mCipher.init(Cipher.UNWRAP_MODE, mPair.getPrivate()); - return (SecretKey) mCipher.unwrap(wrappedSecretKey, ALGORITHM, Cipher.SECRET_KEY); - } - - -} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/KeyStore.kt b/shared/android/app/src/main/java/io/keybase/ossifrage/KeyStore.kt new file mode 100644 index 000000000000..66c815069010 --- /dev/null +++ b/shared/android/app/src/main/java/io/keybase/ossifrage/KeyStore.kt @@ -0,0 +1,207 @@ +package io.keybase.ossifrage + +import android.annotation.SuppressLint +import android.content.Context +import android.content.SharedPreferences +import android.os.Build +import android.security.keystore.KeyPermanentlyInvalidatedException +import android.util.Base64 +import io.keybase.ossifrage.keystore.KeyStoreHelper +import io.keybase.ossifrage.modules.NativeLogger +import keybase.UnsafeExternalKeyStore +import org.msgpack.core.MessagePack +import java.io.IOException +import java.security.InvalidKeyException +import java.security.KeyPair +import java.security.KeyStore +import java.security.KeyStoreException +import java.security.NoSuchAlgorithmException +import java.security.NoSuchProviderException +import javax.crypto.Cipher +import javax.crypto.IllegalBlockSizeException +import javax.crypto.NoSuchPaddingException +import javax.crypto.SecretKey +import javax.crypto.spec.SecretKeySpec + +class KeyStore(private val context: Context, private val prefs: SharedPreferences) : UnsafeExternalKeyStore { + private var ks: KeyStore + + init { + ks = KeyStore.getInstance("AndroidKeyStore") + ks.load(null) + NativeLogger.info("KeyStore: initialized") + } + + private fun sharedPrefKeyPrefix(serviceName: String): String { + return serviceName + PREFS_KEY + } + + private fun keyStoreAlias(serviceName: String): String { + return serviceName + KEY_ALIAS + } + + @SuppressLint("CommitPrefEdits") + @Throws(Exception::class) + override fun clearSecret(serviceName: String, key: String) { + val id = "$serviceName:$key" + NativeLogger.info("KeyStore: clearing secret for $id") + try { + prefs.edit().remove(sharedPrefKeyPrefix(serviceName) + key).commit() + } catch (e: Exception) { + NativeLogger.error("KeyStore: error clearing secret for $id", e) + throw e + } + NativeLogger.info("KeyStore: cleared secret for $id") + } + + @Synchronized + @Throws(Exception::class) + override fun getUsersWithStoredSecretsMsgPack(serviceName: String): ByteArray { + NativeLogger.info("KeyStore: getting users with stored secrets for $serviceName") + return try { + val keyIterator: Iterator = prefs.all.keys.iterator() + val userNames = ArrayList() + while (keyIterator.hasNext()) { + val key = keyIterator.next() + if (key.indexOf(sharedPrefKeyPrefix(serviceName)) == 0) { + userNames.add(key.substring(sharedPrefKeyPrefix(serviceName).length)) + } + } + NativeLogger.info("KeyStore: got " + userNames.size + " users with stored secrets for " + serviceName) + val packer = MessagePack.newDefaultBufferPacker() + packer.packArrayHeader(userNames.size) + for (s in userNames) { + packer.packString(s) + } + packer.close() + packer.toByteArray() + } catch (e: Exception) { + NativeLogger.error("KeyStore: error getting users with stored secrets for $serviceName", e) + throw e + } + } + + @Synchronized + @Throws(Exception::class) + override fun retrieveSecret(serviceName: String, key: String): ByteArray { + val id = "$serviceName:$key" + NativeLogger.info("KeyStore: retrieving secret for $id") + return try { + val wrappedSecret = readWrappedSecret(prefs, sharedPrefKeyPrefix(serviceName) + key) + val entry = ks.getEntry(keyStoreAlias(serviceName), null) + ?: throw KeyStoreException("No RSA keys in the keystore") + if (entry !is KeyStore.PrivateKeyEntry) { + throw KeyStoreException("Entry is not a PrivateKeyEntry. It is: " + entry.javaClass) + } + try { + val secret = unwrapSecret(entry, wrappedSecret).encoded + NativeLogger.info("KeyStore: retrieved " + secret.size + "-byte secret for " + id) + secret + } catch (e: InvalidKeyException) { + // Invalid key, this can happen when a user changes their lock screen from something to nothing + // or enrolls a new finger. See https://developer.android.com/reference/android/security/keystore/KeyPermanentlyInvalidatedException.html + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && e is KeyPermanentlyInvalidatedException) { + NativeLogger.info("KeyStore: key no longer valid; deleting entry", e) + ks.deleteEntry(keyStoreAlias(serviceName)) + } + throw e + } + } catch (e: Exception) { + NativeLogger.error("KeyStore: error retrieving secret for $id", e) + throw e + } + } + + @Synchronized + @Throws(Exception::class) + override fun setupKeyStore(serviceName: String, key: String) { + val id = "$serviceName:$key" + NativeLogger.info("KeyStore: setting up key store for $id") + try { + if (!ks.containsAlias(keyStoreAlias(serviceName))) { + KeyStoreHelper.generateRSAKeyPair(context, keyStoreAlias(serviceName)) + } + + // Try to read the entry from the keystore. + // The entry may exist, but it may not be readable by us. + // (this happens when the app is uninstalled and reinstalled) + // In that case, lets' delete the entry and recreate it. + // Note we are purposely not recursing to avoid a state where we + // constantly try to generate new RSA keys (which is slow) + try { + val entry = ks.getEntry(keyStoreAlias(serviceName), null) + if (entry == null) { + ks.deleteEntry(keyStoreAlias(serviceName)) + KeyStoreHelper.generateRSAKeyPair(context, keyStoreAlias(serviceName)) + } + } finally { + // Reload the keystore + ks = KeyStore.getInstance("AndroidKeyStore") + ks.load(null) + } + } catch (e: Exception) { + NativeLogger.error("KeyStore: error setting up key store for $id", e) + throw e + } + NativeLogger.info("KeyStore: finished setting up key store for $id") + } + + @Synchronized + @Throws(Exception::class) + override fun storeSecret(serviceName: String, key: String, bytes: ByteArray) { + val id = "$serviceName:$key" + NativeLogger.info("KeyStore: storing " + bytes.size + "-byte secret for " + id) + try { + val entry = ks.getEntry(keyStoreAlias(serviceName), null) + ?: throw KeyStoreException("No RSA keys in the keystore") + val wrappedSecret = wrapSecret(entry as KeyStore.PrivateKeyEntry, SecretKeySpec(bytes, ALGORITHM)) + saveWrappedSecret(prefs, sharedPrefKeyPrefix(serviceName) + key, wrappedSecret) + } catch (e: Exception) { + NativeLogger.error("KeyStore: error storing secret for $id", e) + throw e + } + NativeLogger.info("KeyStore: stored " + bytes.size + "-byte secret for " + id) + } + + companion object { + // Prefix for the key we use when we place the data in shared preferences + private const val PREFS_KEY = "_wrappedKey_" + + // The name of the key we use to store our created RSA keypair in android's keystore + private const val KEY_ALIAS = "_keybase-rsa-wrapper_" + private const val ALGORITHM = "RSA_SECRETBOX" + private fun saveWrappedSecret(prefs: SharedPreferences, prefsKey: String, wrappedSecret: ByteArray) { + prefs.edit().putString(prefsKey, Base64.encodeToString(wrappedSecret, Base64.NO_WRAP)).apply() + } + + @Throws(Exception::class) + private fun readWrappedSecret(prefs: SharedPreferences, prefsKey: String): ByteArray { + val wrappedKey = prefs.getString(prefsKey, "") + if (wrappedKey!!.isEmpty()) { + throw KeyStoreException("No secret for $prefsKey") + } + return Base64.decode(wrappedKey, Base64.NO_WRAP) + } + + /** + * Similar to Android's example Vault https://github.com/android/platform_development/tree/master/samples/Vault + */ + @Throws(NoSuchPaddingException::class, NoSuchAlgorithmException::class, InvalidKeyException::class, IllegalBlockSizeException::class, NoSuchProviderException::class) + private fun wrapSecret(entry: KeyStore.PrivateKeyEntry, key: SecretKey): ByteArray { + val mPair = KeyPair(entry.certificate.publicKey, entry.privateKey) + // This is the only cipher that's supported by AndroidKeystore (api version +18) + // The padding makes sure this encryption isn't deterministic + val mCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding") + mCipher.init(Cipher.WRAP_MODE, mPair.public) + return mCipher.wrap(key) + } + + @Throws(NoSuchPaddingException::class, NoSuchAlgorithmException::class, InvalidKeyException::class, IllegalBlockSizeException::class, NoSuchProviderException::class) + private fun unwrapSecret(entry: KeyStore.PrivateKeyEntry, wrappedSecretKey: ByteArray): SecretKey { + val mPair = KeyPair(entry.certificate.publicKey, entry.privateKey) + val mCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding") + mCipher.init(Cipher.UNWRAP_MODE, mPair.private) + return mCipher.unwrap(wrappedSecretKey, ALGORITHM, Cipher.SECRET_KEY) as SecretKey + } + } +} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/KeybasePushNotificationListenerService.java b/shared/android/app/src/main/java/io/keybase/ossifrage/KeybasePushNotificationListenerService.java deleted file mode 100644 index bf3e18d8b81c..000000000000 --- a/shared/android/app/src/main/java/io/keybase/ossifrage/KeybasePushNotificationListenerService.java +++ /dev/null @@ -1,318 +0,0 @@ -package io.keybase.ossifrage; - -import android.app.NotificationChannel; -import android.app.NotificationManager; -import android.content.Context; -import android.os.Build; -import android.os.Bundle; - -import androidx.annotation.RequiresApi; -import androidx.core.app.NotificationCompat; -import androidx.core.app.NotificationCompat.MessagingStyle; -import androidx.core.app.NotificationManagerCompat; -import androidx.core.app.Person; - -import me.leolin.shortcutbadger.ShortcutBadger; -import com.google.firebase.messaging.FirebaseMessagingService; -import com.google.firebase.messaging.RemoteMessage; - -import org.json.JSONArray; -import org.json.JSONObject; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; - -import io.keybase.ossifrage.modules.NativeLogger; -import keybase.Keybase; - -public class KeybasePushNotificationListenerService extends FirebaseMessagingService { - public static String CHAT_CHANNEL_ID = "kb_chat_channel"; - public static String FOLLOW_CHANNEL_ID = "kb_follow_channel"; - public static String DEVICE_CHANNEL_ID = "kb_device_channel"; - public static String GENERAL_CHANNEL_ID = "kb_rest_channel"; - - // This keeps a small ring buffer cache of the last 5 messages per conversation the user - // was notified about to give context to future notifications. - private HashMap msgCache = new HashMap(); - // Avoid ever showing doubles - private HashSet seenChatNotifications = new HashSet(); - - private NotificationCompat.Style buildStyle(String convID, Person person) { - MessagingStyle style = new MessagingStyle(person); - SmallMsgRingBuffer buf = msgCache.get(convID); - if (buf != null) { - for (MessagingStyle.Message msg: buf.summary()) { - style.addMessage(msg); - } - } - - return style; - } - - @Override - public void onCreate() { - MainActivity.setupKBRuntime(this, false); - NativeLogger.info("KeybasePushNotificationListenerService created"); - createNotificationChannel(this); - } - - - public static void createNotificationChannel(Context context) { - // Create the NotificationChannel, but only on API 26+ because - // the NotificationChannel class is new and not in the support library - // Safe to call this multiple times - no ops afterwards - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - NotificationManager notificationManager = context.getSystemService(NotificationManager.class); - - if (notificationManager.getNotificationChannel("keybase_all") != null) { - notificationManager.deleteNotificationChannel("keybase_all"); - } - - // Chat Notifications - { - CharSequence name = context.getString(R.string.channel_name); - String description = context.getString(R.string.channel_description); - int importance = NotificationManager.IMPORTANCE_HIGH; - NotificationChannel chat_channel = new NotificationChannel(CHAT_CHANNEL_ID, name, importance); - chat_channel.setDescription(description); - // Register the channel with the system; you can't change the importance - // or other notification behaviors after this - notificationManager.createNotificationChannel(chat_channel); - } - - - // Follow Notifications - { - CharSequence follow_name = context.getString(R.string.notif_follows_name); - String follow_description = context.getString(R.string.notif_follow_desc); - int follow_importance = NotificationManager.IMPORTANCE_DEFAULT; - NotificationChannel follow_channel = new NotificationChannel(FOLLOW_CHANNEL_ID, follow_name, follow_importance); - follow_channel.setDescription(follow_description); - notificationManager.createNotificationChannel(follow_channel); - } - - // Device Notifications - { - CharSequence device_name = context.getString(R.string.notif_devices_name); - String device_description = context.getString(R.string.notif_device_description); - int device_importance = NotificationManager.IMPORTANCE_HIGH; - NotificationChannel device_channel = new NotificationChannel(DEVICE_CHANNEL_ID, device_name, device_importance); - device_channel.setDescription(device_description); - notificationManager.createNotificationChannel(device_channel); - } - - // The rest of the notifications - { - CharSequence general_name = context.getString(R.string.general_channel_name); - String general_description = context.getString(R.string.general_channel_description); - int general_importance = NotificationManager.IMPORTANCE_LOW; - NotificationChannel general_channel = new NotificationChannel(GENERAL_CHANNEL_ID, general_name, general_importance); - general_channel.setDescription(general_description); - notificationManager.createNotificationChannel(general_channel); - } - - } - } - - @RequiresApi(api = Build.VERSION_CODES.HONEYCOMB_MR1) - @Override - public void onMessageReceived(RemoteMessage message) { - final Bundle bundle = new Bundle(); - for (Map.Entry entry : message.getData().entrySet()) { - bundle.putString(entry.getKey(), entry.getValue()); - } - JSONObject data = parseJSONObject(bundle.getString("data")); - if (data != null) { - if (!bundle.containsKey("message")) { - bundle.putString("message", data.optString("alert", null)); - } - if (!bundle.containsKey("title")) { - bundle.putString("title", data.optString("title", null)); - } - if (!bundle.containsKey("sound")) { - bundle.putString("soundName", data.optString("sound", null)); - } - if (!bundle.containsKey("color")) { - bundle.putString("color", data.optString("color", null)); - } - - final int badge = data.optInt("badge", -1); - if (badge >= 0) { - ShortcutBadger.applyCount(this, badge); - } - } - - NativeLogger.info("KeybasePushNotificationListenerService.onMessageReceived"); - - try { - String type = bundle.getString("type"); - String payload = bundle.getString("m"); - KBPushNotifier notifier = new KBPushNotifier(getApplicationContext(), bundle); - switch (type) { - case "chat.newmessage": - case "chat.newmessageSilent_2": { - NotificationData n = new NotificationData(type, bundle); - - // Blow the cache if we aren't displaying plaintext - if (!msgCache.containsKey(n.convID) || !n.displayPlaintext) { - msgCache.put(n.convID, new SmallMsgRingBuffer()); - } - - // We've shown this notification already - if (seenChatNotifications.contains(n.convID + n.messageId)) { - return; - } - - // If we aren't displaying the plain text version in a silent notif drop this. - // We'll get the non-silent version with a servermessagebody that we can display - // later. - boolean dontNotify = (type.equals("chat.newmessageSilent_2") && !n.displayPlaintext); - - notifier.setMsgCache(msgCache.get(n.convID)); - WithBackgroundActive withBackgroundActive = () -> { - try { - Keybase.handleBackgroundNotification(n.convID, payload, n.serverMessageBody, n.sender, - n.membersType, n.displayPlaintext, n.messageId, n.pushId, - n.badgeCount, n.unixTime, n.soundName, dontNotify ? null : notifier, true); - if (!dontNotify) { - seenChatNotifications.add(n.convID + n.messageId); - } - } catch (Exception ex) { - NativeLogger.error("Go Couldn't handle background notification2: " + ex.getMessage()); - } - }; - withBackgroundActive.whileActive(getApplicationContext()); - - } - break; - case "follow": { - notifier.followNotification(bundle.getString("username"), bundle.getString("message")); - } - break; - case "device.revoked": - case "device.new": { - notifier.deviceNotification(); - } - break; - case "chat.readmessage": { - String convID = bundle.getString("c"); - // Clear the cache of msgs for this conv id - if (msgCache.containsKey(convID)) { - msgCache.put(convID, new SmallMsgRingBuffer()); - } - // Cancel any push notifications. - NotificationManagerCompat notificationManager = NotificationManagerCompat.from(getApplicationContext()); - notificationManager.cancelAll(); - } - break; - default: - notifier.generalNotification(); - } - } catch (Exception ex) { - NativeLogger.error("Couldn't handle background notification: " + ex.getMessage()); - } - - } - - private JSONObject parseJSONObject(String str) { - try { - return new JSONObject(str); - } catch (Exception e) { - return null; - } - } - -} - -class SmallMsgRingBuffer { - private ArrayList buffer = new ArrayList(); - - public void add(MessagingStyle.Message m) { - while (buffer.size() > 4) { - buffer.remove(0); - } - buffer.add(m); - } - - public List summary() { - return buffer; - } -} - -class NotificationData { - final boolean displayPlaintext; - final int membersType; - final String convID; - final int messageId; - final String pushId; - final int badgeCount; - final long unixTime; - final String soundName; - final String serverMessageBody; - final String sender; - - // Derived from go/gregord/chatpush/push.go - @RequiresApi(api = Build.VERSION_CODES.HONEYCOMB_MR1) - NotificationData(String type, Bundle bundle) { - displayPlaintext = "true".equals(bundle.getString("n")); - membersType = Integer.parseInt(bundle.getString("t")); - badgeCount = Integer.parseInt(bundle.getString("b", "0")); - soundName = bundle.getString("s", ""); - serverMessageBody = bundle.getString("message", ""); - sender = bundle.getString("u", ""); - unixTime = Long.parseLong(bundle.getString("x", "0")); - - if (type.equals("chat.newmessage")) { - messageId = Integer.parseInt(bundle.getString("msgID", "0")); - convID = bundle.getString("convID"); - pushId = ""; - } else if (type.equals("chat.newmessageSilent_2")) { - messageId = Integer.parseInt(bundle.getString("d", "")); - convID = bundle.getString("c"); - - String pushIdTmp = ""; - try { - JSONArray pushes = new JSONArray(bundle.getString("p")); - pushIdTmp = pushes.getString(0); - } catch (Exception e) { - e.printStackTrace(); - } - pushId = pushIdTmp; - } else { - throw new Error("Tried to parse notification of unhandled type: " + type ); - } - - } -} - -// Interface to run some task while in backgroundActive. -// If already foreground, just runs the task. -interface WithBackgroundActive { - abstract void task() throws Exception; - - default void whileActive(Context context) throws Exception { - // We are foreground we don't need to change to background active - if (Keybase.isAppStateForeground()) { - this.task(); - } else { - Keybase.setAppStateBackgroundActive(); - this.task(); - - // Check if we are foreground now for some reason. In that case we don't want to go background again - if (Keybase.isAppStateForeground()) { - return; - } - - if (Keybase.appDidEnterBackground()) { - Keybase.appBeginBackgroundTaskNonblock(new KBPushNotifier(context, new Bundle())); - } else { - Keybase.setAppStateBackground(); - } - } - } - - -} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/KeybasePushNotificationListenerService.kt b/shared/android/app/src/main/java/io/keybase/ossifrage/KeybasePushNotificationListenerService.kt new file mode 100644 index 000000000000..a6346aface48 --- /dev/null +++ b/shared/android/app/src/main/java/io/keybase/ossifrage/KeybasePushNotificationListenerService.kt @@ -0,0 +1,306 @@ +package io.keybase.ossifrage + +import android.app.NotificationChannel +import android.app.NotificationManager +import android.content.Context +import android.os.Build +import android.os.Bundle +import android.os.Handler +import android.os.Looper +import androidx.annotation.RequiresApi +import androidx.core.app.NotificationCompat +import androidx.core.app.NotificationManagerCompat +import androidx.core.app.Person +import com.google.firebase.messaging.FirebaseMessagingService +import com.google.firebase.messaging.RemoteMessage +import io.keybase.ossifrage.MainActivity.Companion.setupKBRuntime +import io.keybase.ossifrage.modules.NativeLogger +import keybase.Keybase +import me.leolin.shortcutbadger.ShortcutBadger +import org.json.JSONArray +import org.json.JSONObject +import android.util.Log + +class KeybasePushNotificationListenerService : FirebaseMessagingService() { + // This keeps a small ring buffer cache of the last 5 messages per conversation the user + // was notified about to give context to future notifications. + private val msgCache = HashMap() + + // Avoid ever showing doubles + private val seenChatNotifications = HashSet() + private fun buildStyle(convID: String, person: Person): NotificationCompat.Style { + val style = NotificationCompat.MessagingStyle(person) + val buf = msgCache[convID] + if (buf != null) { + for (msg in buf.summary()) { + style.addMessage(msg) + } + } + return style + } + + override fun onCreate() { + setupKBRuntime(this, false) + NativeLogger.info("KeybasePushNotificationListenerService created") + createNotificationChannel(this) + } + + override fun onMessageReceived(message: RemoteMessage) { + val bundle = Bundle() + for ((key, value) in message.data) { + bundle.putString(key, value) + } + val data = parseJSONObject(bundle.getString("data")) + if (data != null) { + if (!bundle.containsKey("message")) { + bundle.putString("message", data.optString("alert", "")) + } + if (!bundle.containsKey("title")) { + bundle.putString("title", data.optString("title", "")) + } + if (!bundle.containsKey("sound")) { + bundle.putString("soundName", data.optString("sound", "")) + } + if (!bundle.containsKey("color")) { + bundle.putString("color", data.optString("color", "")) + } + val badge = data.optInt("badge", -1) + if (badge >= 0) { + ShortcutBadger.applyCount(this, badge) + } + } + NativeLogger.info("KeybasePushNotificationListenerService.onMessageReceived") + try { + val type = bundle.getString("type") + val payload = bundle.getString("m") + val notifier = KBPushNotifier(applicationContext, bundle.clone() as Bundle) + when (type) { + "chat.newmessage", "chat.newmessageSilent_2" -> { + val n = NotificationData(type, bundle) + + // Blow the cache if we aren't displaying plaintext + if (!msgCache.containsKey(n.convID) || !n.displayPlaintext) { + msgCache[n.convID] = SmallMsgRingBuffer() + } + + // We've shown this notification already + if (seenChatNotifications.contains(n.convID + n.messageId)) { + return + } + + // If we aren't displaying the plain text version in a silent notif drop this. + // We'll get the non-silent version with a servermessagebody that we can display + // later. + val dontNotify = type == "chat.newmessageSilent_2" && !n.displayPlaintext + notifier.setMsgCache(msgCache[n.convID]) + + val withBackgroundActive: WithBackgroundActive = object : WithBackgroundActive { + override fun task() { + try { + Keybase.handleBackgroundNotification(n.convID, payload, n.serverMessageBody, n.sender, + n.membersType.toLong(), n.displayPlaintext, n.messageId.toLong(), n.pushId, + n.badgeCount.toLong(), n.unixTime, n.soundName, if (dontNotify) null else notifier, true) + if (!dontNotify) { + seenChatNotifications.add(n.convID + n.messageId) + } + } catch (ex: Exception) { + NativeLogger.error("Go Couldn't handle background notification2: " + ex.message) + } + } + } + withBackgroundActive.whileActive(applicationContext) + } + + "follow" -> { + val username = bundle.getString("username") + val m = bundle.getString("message") + if (username != null && m != null) { + notifier.followNotification(username, m) + } + } + + "device.revoked", "device.new" -> { + notifier.deviceNotification() + } + + "chat.readmessage" -> { + val convID = bundle.getString("c") + // Clear the cache of msgs for this conv id + if (msgCache.containsKey(convID)) { + msgCache[convID] = SmallMsgRingBuffer() + } + // Cancel any push notifications. + val notificationManager = NotificationManagerCompat.from(applicationContext) + notificationManager.cancelAll() + } + + else -> notifier.generalNotification() + } + } catch (ex: Exception) { + NativeLogger.error("Couldn't handle background notification: " + ex.message) + } + } + + private fun parseJSONObject(str: String?): JSONObject? { + return try { + if (str != null) { + return JSONObject(str) + } else { + return null + } + } catch (e: Exception) { + null + } + } + + companion object { + @JvmField + var CHAT_CHANNEL_ID = "kb_chat_channel" + @JvmField + var FOLLOW_CHANNEL_ID = "kb_follow_channel" + @JvmField + var DEVICE_CHANNEL_ID = "kb_device_channel" + @JvmField + var GENERAL_CHANNEL_ID = "kb_rest_channel" + fun createNotificationChannel(context: Context) { + // Create the NotificationChannel, but only on API 26+ because + // the NotificationChannel class is new and not in the support library + // Safe to call this multiple times - no ops afterwards + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + val notificationManager = context.getSystemService(NotificationManager::class.java) + if (notificationManager.getNotificationChannel("keybase_all") != null) { + notificationManager.deleteNotificationChannel("keybase_all") + } + + // Chat Notifications + run { + val name: CharSequence = context.getString(R.string.channel_name) + val description = context.getString(R.string.channel_description) + val importance = NotificationManager.IMPORTANCE_HIGH + val chat_channel = NotificationChannel(CHAT_CHANNEL_ID, name, importance) + chat_channel.description = description + // Register the channel with the system; you can't change the importance + // or other notification behaviors after this + notificationManager.createNotificationChannel(chat_channel) + } + + + // Follow Notifications + run { + val follow_name: CharSequence = context.getString(R.string.notif_follows_name) + val follow_description = context.getString(R.string.notif_follow_desc) + val follow_importance = NotificationManager.IMPORTANCE_DEFAULT + val follow_channel = NotificationChannel(FOLLOW_CHANNEL_ID, follow_name, follow_importance) + follow_channel.description = follow_description + notificationManager.createNotificationChannel(follow_channel) + } + + // Device Notifications + run { + val device_name: CharSequence = context.getString(R.string.notif_devices_name) + val device_description = context.getString(R.string.notif_device_description) + val device_importance = NotificationManager.IMPORTANCE_HIGH + val device_channel = NotificationChannel(DEVICE_CHANNEL_ID, device_name, device_importance) + device_channel.description = device_description + notificationManager.createNotificationChannel(device_channel) + } + + // The rest of the notifications + run { + val general_name: CharSequence = context.getString(R.string.general_channel_name) + val general_description = context.getString(R.string.general_channel_description) + val general_importance = NotificationManager.IMPORTANCE_LOW + val general_channel = NotificationChannel(GENERAL_CHANNEL_ID, general_name, general_importance) + general_channel.description = general_description + notificationManager.createNotificationChannel(general_channel) + } + } + } + } +} + +class SmallMsgRingBuffer { + private val buffer = ArrayList() + fun add(m: NotificationCompat.MessagingStyle.Message) { + while (buffer.size > 4) { + buffer.removeAt(0) + } + buffer.add(m) + } + + fun summary(): List { + return buffer + } +} + +internal class NotificationData @RequiresApi(api = Build.VERSION_CODES.HONEYCOMB_MR1) constructor(type: String, bundle: Bundle) { + val displayPlaintext: Boolean + val membersType: Int + var convID: String? = null + var messageId = 0 + var pushId: String? = null + val badgeCount: Int + val unixTime: Long + val soundName: String + val serverMessageBody: String + val sender: String + + // Derived from go/gregord/chatpush/push.go + init { + displayPlaintext = "true" == bundle.getString("n") + membersType = bundle.getString("t")!!.toInt() + badgeCount = bundle.getString("b", "0").toInt() + soundName = bundle.getString("s", "") + serverMessageBody = bundle.getString("message", "") + sender = bundle.getString("u", "") + unixTime = bundle.getString("x", "0").toLong() + if (type == "chat.newmessage") { + messageId = bundle.getString("msgID", "0").toInt() + convID = bundle.getString("convID") + pushId = "" + } else if (type == "chat.newmessageSilent_2") { + messageId = bundle.getString("d", "").toInt() + convID = bundle.getString("c") + var pushIdTmp = "" + try { + val pushes = JSONArray(bundle.getString("p")) + pushIdTmp = pushes.getString(0) + } catch (e: Exception) { + e.printStackTrace() + } + pushId = pushIdTmp + } else { + throw Error("Tried to parse notification of unhandled type: $type") + } + } +} + +// Interface to run some task while in backgroundActive. +// If already foreground, ignore +internal interface WithBackgroundActive { + @Throws(Exception::class) + fun task() + + @Throws(Exception::class) + fun whileActive(context: Context?) { + // We are foreground don't show anything + if (Keybase.isAppStateForeground()) { + return + } else { + Keybase.setAppStateBackgroundActive() + task() + + // Check if we are foreground now for some reason. In that case we don't want to go background again + if (Keybase.isAppStateForeground()) { + return + } + if (Keybase.appDidEnterBackground()) { + if (context != null) { + Keybase.appBeginBackgroundTaskNonblock(KBPushNotifier(context, Bundle())) + } + } else { + Keybase.setAppStateBackground() + } + } + } +} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/MainActivity.java b/shared/android/app/src/main/java/io/keybase/ossifrage/MainActivity.java deleted file mode 100644 index 68e355af84f6..000000000000 --- a/shared/android/app/src/main/java/io/keybase/ossifrage/MainActivity.java +++ /dev/null @@ -1,528 +0,0 @@ -package io.keybase.ossifrage; - -import android.annotation.TargetApi; -import android.content.ContentResolver; -import android.content.Context; -import android.content.Intent; -import android.content.res.Configuration; -import android.database.Cursor; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.net.Uri; -import android.os.Build; -import android.os.Bundle; -import android.os.Handler; -import android.os.Looper; -import android.provider.MediaStore; -import android.provider.Settings; -import android.util.Log; -import android.view.KeyEvent; -import android.view.Window; -import android.webkit.MimeTypeMap; - -import com.facebook.react.ReactActivityDelegate; -import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint; -import com.facebook.react.defaults.DefaultReactActivityDelegate; -import com.facebook.react.ReactApplication; -import com.facebook.react.ReactInstanceManager; -import com.facebook.react.bridge.Arguments; -import com.facebook.react.bridge.ReactContext; -import com.facebook.react.ReactActivity; -import com.facebook.react.bridge.WritableMap; -import com.facebook.react.bridge.WritableArray; -import com.facebook.react.modules.core.DeviceEventManagerModule; -import com.facebook.react.modules.core.PermissionListener; - -import com.github.emilioicai.hwkeyboardevent.HWKeyboardEventModule; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.security.cert.CertificateException; -import java.util.Arrays; -import java.util.Objects; -import java.util.ArrayList; -import java.util.UUID; - -import io.keybase.ossifrage.modules.NativeLogger; -import io.keybase.ossifrage.util.DNSNSFetcher; -import io.keybase.ossifrage.util.VideoHelper; -import com.reactnativekb.GuiConfig; -import com.reactnativekb.DarkModePreference; -import keybase.Keybase; - -import static keybase.Keybase.initOnce; - -public class MainActivity extends ReactActivity { - private static final String TAG = MainActivity.class.getName(); - private PermissionListener listener; - private boolean isUsingHardwareKeyboard = false; - static boolean createdReact = false; - private Bundle initialBundleFromNotification; - private String[] shareFileUrls; - private String shareText; - - public void setInitialBundleFromNotification(Bundle bundle) { - this.initialBundleFromNotification = bundle; - } - public void setInitialShareFileUrls(String [] urls) { - this.shareFileUrls = urls; - } - public void setInitialShareText(String text) { - this.shareText = text; - } - - public Bundle getInitialBundleFromNotification() { - Bundle b = this.initialBundleFromNotification; - this.initialBundleFromNotification = null; - return b; - } - public String []getInitialShareFileUrls() { - String []s = this.shareFileUrls; - this.shareFileUrls = null; - return s; - } - public String getInitialShareText() { - String s = this.shareText; - this.shareText = null; - return s; - } - - - @Override - public void invokeDefaultOnBackPressed() { - moveTaskToBack(true); - } - - private static void createDummyFile(Context context) { - File dummyFile = new File(context.getFilesDir(), "dummy.txt"); - try { - if (dummyFile.createNewFile()) { - dummyFile.setWritable(true); - try (FileOutputStream stream = new FileOutputStream(dummyFile)) { - stream.write("hi".getBytes()); - } - } else { - Log.d(TAG, "dummy.txt exists"); - } - } catch (Exception e) { - NativeLogger.error("Exception in createDummyFile", e); - } - } - - private ReactContext getReactContext() { - ReactInstanceManager instanceManager = ((ReactApplication) getApplication()).getReactNativeHost().getReactInstanceManager(); - if (instanceManager == null) { - NativeLogger.warn("react instance manager not ready"); - return null; - } - - return instanceManager.getCurrentReactContext(); - } - - // Is this a robot controlled test device? (i.e. pre-launch report?) - public static boolean isTestDevice(Context context) { - String testLabSetting = Settings.System.getString(context.getContentResolver(), "firebase.test.lab"); - return "true".equals(testLabSetting); - } - - - public static void setupKBRuntime(Context context, boolean shouldCreateDummyFile) { - try { - Keybase.setGlobalExternalKeyStore(new KeyStore(context, context.getSharedPreferences("KeyStore", MODE_PRIVATE))); - } catch (KeyStoreException | CertificateException | IOException | NoSuchAlgorithmException e) { - NativeLogger.error("Exception in MainActivity.onCreate", e); - } - - if (shouldCreateDummyFile) { - createDummyFile(context); - } - String mobileOsVersion = Integer.toString(android.os.Build.VERSION.SDK_INT); - boolean isIPad = false; - boolean isIOS = false; - initOnce(context.getFilesDir().getPath(), "", context.getFileStreamPath("service.log").getAbsolutePath(), "prod", false, - new DNSNSFetcher(), new VideoHelper(), mobileOsVersion, isIPad, new KBInstallReferrerListener(context), isIOS); - } - - private String colorSchemeForCurrentConfiguration() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - int currentNightMode = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK; - switch (currentNightMode) { - case Configuration.UI_MODE_NIGHT_NO: - return "light"; - case Configuration.UI_MODE_NIGHT_YES: - return "dark"; - } - } - - return "light"; - } - - - @Override - @TargetApi(Build.VERSION_CODES.KITKAT) - protected void onCreate(Bundle savedInstanceState) { - NativeLogger.info("Activity onCreate"); - ReactInstanceManager instanceManager = ((ReactApplication) getApplication()).getReactNativeHost().getReactInstanceManager(); - if (!this.createdReact) { - this.createdReact = true; - instanceManager.createReactContextInBackground(); - } - - setupKBRuntime(this, true); - super.onCreate(null); - - new android.os.Handler().postDelayed(new Runnable() { - public void run() { - try { - setBackgroundColor(GuiConfig.getInstance(getFilesDir()).getDarkMode()); - } catch (Exception e) {} - } - }, 300); - - KeybasePushNotificationListenerService.createNotificationChannel(this); - updateIsUsingHardwareKeyboard(); - } - - @Override - public boolean onCreateThumbnail(final Bitmap outBitmap, final Canvas canvas) { - return super.onCreateThumbnail(outBitmap, canvas); - } - - @Override - public boolean onKeyUp(int keyCode, KeyEvent event) { - if (BuildConfig.DEBUG && keyCode == KeyEvent.KEYCODE_VOLUME_UP) { - return super.onKeyUp(KeyEvent.KEYCODE_MENU, null); - } - return super.onKeyUp(keyCode, event); - } - - @Override - public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { - if (listener != null) { - listener.onRequestPermissionsResult(requestCode, permissions, grantResults); - } - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - } - - @Override - protected void onPause() { - NativeLogger.info("Activity onPause"); - super.onPause(); - if (Keybase.appDidEnterBackground()) { - Keybase.appBeginBackgroundTaskNonblock(new KBPushNotifier(this, new Bundle())); - } else { - Keybase.setAppStateBackground(); - } - } - - private String getFileNameFromResolver(ContentResolver resolver, Uri uri, String extension) { - // Use a GUID default. - String filename = String.format("%s.%s", UUID.randomUUID().toString(), extension); - - String[] nameProjection = {MediaStore.MediaColumns.DISPLAY_NAME}; - try (Cursor cursor = resolver.query(uri, nameProjection, null, null, null)) { - if (cursor != null && cursor.moveToFirst()) { - filename = cursor.getString(0); - } - } - - int cut = filename.lastIndexOf('/'); - if (cut != -1) { - filename = filename.substring(cut + 1); - } - - return filename; - } - - private File saveFileToCache(ReactContext reactContext, Uri uri, String filename) { - File file = new File(reactContext.getCacheDir(), filename); - - try (InputStream istream = reactContext.getContentResolver().openInputStream(uri); - OutputStream ostream = new FileOutputStream(file)) { - - byte[] buf = new byte[64 * 1024]; - int len; - - while ((len = istream.read(buf)) != -1) { - ostream.write(buf, 0, len); - } - - } catch (IOException ex) { - Log.w(TAG, "Error writing shared file " + uri.toString(), ex); - } - - return file; - } - - private String readFileFromUri(ReactContext reactContext, Uri uri) { - if (uri == null) return null; - - String filePath = null; - if (uri.getScheme().equals("content")) { - ContentResolver resolver = reactContext.getContentResolver(); - String mimeType = resolver.getType(uri); - String extension = MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType); - - // Load the filename from the resolver. - String filename = getFileNameFromResolver(resolver, uri, extension); - - // Now load the file itself. - File file = saveFileToCache(reactContext, uri, filename); - filePath = file.getPath(); - } else { - filePath = uri.getPath(); - } - return filePath; - } - - private class IntentEmitter { - private final Intent intent; - - private IntentEmitter(Intent intent) { - this.intent = intent; - } - - public void emit() { - - // Here we are just reading from the notification bundle. - // If other sources start the app, we can get their intent data the same way. - Bundle bundleFromNotification = intent.getBundleExtra("notification"); - intent.removeExtra("notification"); - - String action = intent.getAction(); - - Uri [] uris_ = null; - if (Intent.ACTION_SEND_MULTIPLE.equals(action)) { - ArrayList alUri = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM); - uris_ = alUri.toArray(new Uri[0]); - } else if (Intent.ACTION_SEND.equals(action)) { - Uri oneUri = intent.getParcelableExtra(Intent.EXTRA_STREAM); - uris_ = new Uri[]{oneUri}; - } - intent.removeExtra(Intent.EXTRA_STREAM); - final Uri [] uris = uris_; - - String subject = intent.getStringExtra(Intent.EXTRA_SUBJECT); - intent.removeExtra(Intent.EXTRA_SUBJECT); - - String text = intent.getStringExtra(Intent.EXTRA_TEXT); - intent.removeExtra(Intent.EXTRA_TEXT); - - StringBuilder sb = new StringBuilder(); - if (subject != null) { - sb.append(subject); - } - if (subject != null && text != null){ - sb.append(" "); - } - if (text != null) { - sb.append(text); - } - String textPayload = sb.toString(); - - String[] filePaths; - if (uris != null) { - ArrayList filePathList = new ArrayList(); - for (Uri uri : uris) { - String filePath = readFileFromUri(getReactContext(), uri); - - if (filePath != null) { - filePathList.add(filePath); - } - } - filePaths = filePathList.toArray(new String[0]); - } else { - filePaths = new String[0]; - } - if (bundleFromNotification != null) { - setInitialBundleFromNotification(bundleFromNotification); - } else if (filePaths.length != 0) { - setInitialShareFileUrls(filePaths); - } else if (textPayload.length() > 0){ - setInitialShareText(textPayload); - } - - // Closure like class so we can keep our emit logic together - class Emit { - private final ReactContext context; - private DeviceEventManagerModule.RCTDeviceEventEmitter emitter; - - Emit(DeviceEventManagerModule.RCTDeviceEventEmitter emitter, ReactContext context) { - this.emitter = emitter; - this.context = context; - } - - private void run() { - ReactContext context = getReactContext(); - if (context == null) { - return; - } - // assert emitter != null; - // If there are any other bundle sources we care about, emit them here - if (bundleFromNotification != null) { - emitter.emit("initialIntentFromNotification", Arguments.fromBundle(bundleFromNotification)); - } - - if (filePaths.length != 0) { - WritableMap args = Arguments.createMap(); - WritableArray lPaths = Arguments.createArray(); - for (String path : filePaths) { - lPaths.pushString(path); - } - args.putArray("localPaths", lPaths); - emitter.emit("onShareData", args); - } else if (textPayload.length() > 0) { - WritableMap args = Arguments.createMap(); - args.putString("text", textPayload); - emitter.emit("onShareData", args); - } - } - } - - // We need to run this on the main thread, as the React code assumes that is true. - // Namely, DevServerHelper constructs a Handler() without a Looper, which triggers: - // "Can't create handler inside thread that has not called Looper.prepare()" - Handler handler = new Handler(Looper.getMainLooper()); - handler.post(() -> { - // Construct and load our normal React JS code bundle - ReactInstanceManager reactInstanceManager = ((ReactApplication) getApplication()).getReactNativeHost().getReactInstanceManager(); - ReactContext context = reactInstanceManager.getCurrentReactContext(); - - // If it's constructed, send a notification - if (context != null) { - DeviceEventManagerModule.RCTDeviceEventEmitter emitter = context - .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class); - (new Emit(emitter, context)).run(); - - } else { - // Otherwise wait for construction, then send the notification - reactInstanceManager.addReactInstanceEventListener(rctContext -> { - DeviceEventManagerModule.RCTDeviceEventEmitter emitter = rctContext - .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class); - (new Emit(emitter, rctContext)).run(); - }); - if (!reactInstanceManager.hasStartedCreatingInitialContext()) { - // Construct it in the background - reactInstanceManager.createReactContextInBackground(); - } - } - }); - } - } - - @Override - protected void onResume() { - NativeLogger.info("Activity onResume"); - super.onResume(); - Keybase.setAppStateForeground(); - // Emit the intent data to JS - Intent intent = getIntent(); - if (intent != null) { - (new IntentEmitter(intent)).emit(); - } - } - - @Override - protected void onStart() { - NativeLogger.info("Activity onStart"); - super.onStart(); - Keybase.setAppStateForeground(); - } - - @Override - protected void onDestroy() { - NativeLogger.info("Activity onDestroy"); - super.onDestroy(); - Keybase.appWillExit(new KBPushNotifier(this, new Bundle())); - } - - @Override - public void onNewIntent(Intent intent) { - super.onNewIntent(intent); - setIntent(intent); - } - - /** - * Returns the name of the main component registered from JavaScript. This is - * used to schedule rendering of the component. - */ - @Override - protected String getMainComponentName() { - return "Keybase"; - } - - /** - * Returns the instance of the {@link ReactActivityDelegate}. Here we use a util class {@link - * DefaultReactActivityDelegate} which allows you to easily enable Fabric and Concurrent React - * (aka React 18) with two boolean flags. - */ - @Override - protected ReactActivityDelegate createReactActivityDelegate() { - return new DefaultReactActivityDelegate( - this, - getMainComponentName(), - // If you opted-in for the New Architecture, we enable the Fabric Renderer. - DefaultNewArchitectureEntryPoint.getFabricEnabled() - ); - } - - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - ReactInstanceManager instanceManager = ((ReactApplication) getApplication()).getReactNativeHost().getReactInstanceManager(); - - try { - setBackgroundColor(GuiConfig.getInstance(getFilesDir()).getDarkMode()); - } catch (Exception e) {} - - if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) { - isUsingHardwareKeyboard = true; - } else if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) { - isUsingHardwareKeyboard = false; - } - } - - public void setBackgroundColor(DarkModePreference pref) { - final int bgColor; - if (pref == DarkModePreference.System) { - bgColor = this.colorSchemeForCurrentConfiguration().equals("light") ? R.color.white : R.color.black; - } else if (pref == DarkModePreference.AlwaysDark) { - bgColor = R.color.black; - } else { - bgColor = R.color.white; - } - final Window mainWindow = this.getWindow(); - Handler handler = new Handler(Looper.getMainLooper()); - // Run this on the main thread. - handler.post(() -> { - mainWindow.setBackgroundDrawableResource(bgColor); - }); - } - - @Override - public boolean dispatchKeyEvent(KeyEvent event) { - if (isUsingHardwareKeyboard && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) { - // Detects user pressing the enter key - if (event.getAction() == KeyEvent.ACTION_DOWN && !event.isShiftPressed()) { - // Enter is pressed - HWKeyboardEventModule.getInstance().keyPressed("enter"); - return true; - } - if (event.getAction() == KeyEvent.ACTION_DOWN && event.isShiftPressed()) { - // Shift-Enter is pressed - HWKeyboardEventModule.getInstance().keyPressed("shift-enter"); - return true; - } - } - return super.dispatchKeyEvent(event); - } - - private void updateIsUsingHardwareKeyboard() { - isUsingHardwareKeyboard = getResources().getConfiguration().keyboard == Configuration.KEYBOARD_QWERTY; - } -} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/MainActivity.kt b/shared/android/app/src/main/java/io/keybase/ossifrage/MainActivity.kt new file mode 100644 index 000000000000..bfdaa4609c2c --- /dev/null +++ b/shared/android/app/src/main/java/io/keybase/ossifrage/MainActivity.kt @@ -0,0 +1,403 @@ +package io.keybase.ossifrage + +import android.annotation.TargetApi +import android.content.ContentResolver +import android.content.Context +import android.content.Intent +import android.content.res.Configuration +import android.net.Uri +import android.os.Build +import android.os.Bundle +import android.os.Handler +import android.os.Looper +import android.provider.MediaStore +import android.provider.Settings +import android.util.Log +import android.view.KeyEvent +import android.webkit.MimeTypeMap +import com.facebook.react.ReactActivity +import com.facebook.react.ReactActivityDelegate +import com.facebook.react.ReactApplication +import com.facebook.react.ReactInstanceManager +import com.facebook.react.bridge.Arguments +import com.facebook.react.bridge.ReactContext +import com.facebook.react.bridge.WritableMap +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled +import com.facebook.react.defaults.DefaultReactActivityDelegate +import com.facebook.react.modules.core.DeviceEventManagerModule +import com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter +import com.facebook.react.modules.core.PermissionListener +import com.github.emilioicai.hwkeyboardevent.HWKeyboardEventModule +import com.reactnativekb.DarkModePreference +import com.reactnativekb.GuiConfig +import io.keybase.ossifrage.modules.NativeLogger +import io.keybase.ossifrage.util.DNSNSFetcher +import io.keybase.ossifrage.util.VideoHelper +import keybase.Keybase +import java.io.File +import java.io.FileOutputStream +import java.io.IOException +import java.security.KeyStoreException +import java.security.NoSuchAlgorithmException +import java.security.cert.CertificateException +import java.util.UUID + +class MainActivity : ReactActivity() { + private val listener: PermissionListener? = null + private var isUsingHardwareKeyboard = false + + override fun invokeDefaultOnBackPressed() { + moveTaskToBack(true) + } + + private val reactContext: ReactContext? + get() { + val reactHost = (application as ReactApplication).reactNativeHost + val reactInstanceManager = reactHost.reactInstanceManager + val currentContext = reactInstanceManager.currentReactContext + return currentContext + } + + private fun colorSchemeForCurrentConfiguration(): String { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + val currentNightMode = resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK + when (currentNightMode) { + Configuration.UI_MODE_NIGHT_NO -> return "light" + Configuration.UI_MODE_NIGHT_YES -> return "dark" + } + } + return "light" + } + + override fun onCreate(savedInstanceState: Bundle?) { + NativeLogger.info("Activity onCreate") + setupKBRuntime(this, true) + cachedIntent = intent + + super.onCreate(null) + Handler(Looper.getMainLooper()).postDelayed({ + try { + var gc = GuiConfig.getInstance(filesDir) + if (gc != null) { + setBackgroundColor(gc.getDarkMode()) + } + } catch (e: Exception) { + } + }, 300) + KeybasePushNotificationListenerService.createNotificationChannel(this) + updateIsUsingHardwareKeyboard() + + // old arch, hook up react starting up new arch does this by itself i think + val reactHost = (application as ReactApplication).reactNativeHost + val reactInstanceManager = reactHost.reactInstanceManager + if (reactInstanceManager.hasStartedCreatingInitialContext()) { + val currentContext = reactInstanceManager.currentReactContext + if (currentContext != null) { + handleIntent() + return + } + } + val listener = object : ReactInstanceManager.ReactInstanceEventListener { + override fun onReactContextInitialized(c: ReactContext) { + handleIntent() + reactInstanceManager.removeReactInstanceEventListener(this) + } + } + reactInstanceManager.addReactInstanceEventListener(listener) + } + + override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean { + return if (BuildConfig.DEBUG && keyCode == KeyEvent.KEYCODE_VOLUME_UP) { + super.onKeyUp(KeyEvent.KEYCODE_MENU, null) + } else super.onKeyUp(keyCode, event) + } + + override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { + listener?.onRequestPermissionsResult(requestCode, permissions, grantResults) + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + } + + override fun onPause() { + NativeLogger.info("Activity onPause") + super.onPause() + if (Keybase.appDidEnterBackground()) { + Keybase.appBeginBackgroundTaskNonblock(KBPushNotifier(this, Bundle())) + } else { + Keybase.setAppStateBackground() + } + } + + private fun getFileNameFromResolver(resolver: ContentResolver, uri: Uri, extension: String?): String { + // Use a GUID default. + var filename = String.format("%s.%s", UUID.randomUUID().toString(), extension) + val nameProjection = arrayOf(MediaStore.MediaColumns.DISPLAY_NAME) + resolver.query(uri, nameProjection, null, null, null).use { cursor -> + if (cursor != null && cursor.moveToFirst()) { + filename = cursor.getString(0) + } + } + val cut = filename.lastIndexOf('/') + if (cut != -1) { + filename = filename.substring(cut + 1) + } + return filename + } + + private fun saveFileToCache(reactContext: ReactContext?, uri: Uri, filename: String): File { + val file = File(reactContext!!.cacheDir, filename) + try { + reactContext.contentResolver.openInputStream(uri).use { istream -> + FileOutputStream(file).use { ostream -> + val buf = ByteArray(64 * 1024) + var len: Int + while (istream!!.read(buf).also { len = it } != -1) { + ostream.write(buf, 0, len) + } + } + } + } catch (ex: IOException) { + Log.w(TAG, "Error writing shared file $uri", ex) + } + return file + } + + private fun readFileFromUri(reactContext: ReactContext?, uri: Uri?): String? { + if (uri == null) return null + var filePath: String? + filePath = if (uri.scheme == "content") { + val resolver = reactContext!!.contentResolver + val mimeType = resolver.getType(uri) + val extension = MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType) + + // Load the filename from the resolver. + val filename = getFileNameFromResolver(resolver, uri, extension) + + // Now load the file itself. + val file = saveFileToCache(reactContext, uri, filename) + file.path + } else { + uri.path + } + return filePath + } + + override fun onResume() { + NativeLogger.info("Activity onResume") + super.onResume() + Keybase.setAppStateForeground() + } + + override fun onStart() { + NativeLogger.info("Activity onStart") + super.onStart() + Keybase.setAppStateForeground() + } + + override fun onDestroy() { + NativeLogger.info("Activity onDestroy") + super.onDestroy() + Keybase.appWillExit(KBPushNotifier(this, Bundle())) + } + + private var cachedIntent: Intent? = null + + override fun onNewIntent(intent: Intent) { + super.onNewIntent(intent) + setIntent(intent) + cachedIntent = intent + handleIntent() + } + + public fun shareListenersRegistered() { + jsIsListening = true + handleIntent() + } + + private var jsIsListening = false + private fun handleIntent() { + val intent = cachedIntent + var rc = reactContext + if (jsIsListening == false) { + return + } + if (cachedIntent == null || intent == null) { + return + } + if (rc == null) { + return + } + + val emitter = rc.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java) + if(emitter == null) { + return + } + + cachedIntent = null + + // Here we are just reading from the notification bundle. + // If other sources start the app, we can get their intent data the same way. + val bundleFromNotification = intent.getBundleExtra("notification") + intent.removeExtra("notification") + val action = intent.action + var uris_: Array? = null + if (Intent.ACTION_SEND_MULTIPLE == action) { + val alUri = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM) + uris_ = alUri!!.toTypedArray() + } else if (Intent.ACTION_SEND == action) { + val oneUri = intent.getParcelableExtra(Intent.EXTRA_STREAM) + uris_ = arrayOf(oneUri) + } + intent.removeExtra(Intent.EXTRA_STREAM) + val uris = uris_ + val subject = intent.getStringExtra(Intent.EXTRA_SUBJECT) + intent.removeExtra(Intent.EXTRA_SUBJECT) + val text = intent.getStringExtra(Intent.EXTRA_TEXT) + intent.removeExtra(Intent.EXTRA_TEXT) + val sb = StringBuilder() + if (subject != null) { + sb.append(subject) + } + if (subject != null && text != null) { + sb.append(" ") + } + if (text != null) { + sb.append(text) + } + + val textPayload = sb.toString() + + val filePaths = uris?.mapNotNull { uri -> + readFileFromUri(rc, uri) + }?.toTypedArray() ?: emptyArray() + + // If there are any other bundle sources we care about, emit them here + if (bundleFromNotification != null) { + var payload = Arguments.fromBundle(bundleFromNotification) + emitter.emit( + "initialIntentFromNotification", + payload + ) + } + if (filePaths.size != 0) { + val args = Arguments.createMap() + val lPaths = Arguments.createArray() + for (path in filePaths) { + lPaths.pushString(path) + } + args.putArray("localPaths", lPaths) + emitter.emit("onShareData", args) + } else if (textPayload.length > 0) { + val args = Arguments.createMap() + args.putString("text", textPayload) + emitter.emit("onShareData", args) + } + } + + override fun getMainComponentName(): String = "Keybase" + + override fun createReactActivityDelegate(): ReactActivityDelegate { + return DefaultReactActivityDelegate( + this, + mainComponentName, // If you opted-in for the New Architecture, we enable the Fabric Renderer. + fabricEnabled + ) + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + try { + var gc = GuiConfig.getInstance(filesDir) + if (gc != null) { + setBackgroundColor(gc.getDarkMode()) + } + } catch (e: Exception) { + } + if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) { + isUsingHardwareKeyboard = true + } else if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) { + isUsingHardwareKeyboard = false + } + } + + fun setBackgroundColor(pref: DarkModePreference) { + val bgColor: Int + bgColor = if (pref == DarkModePreference.System) { + if (colorSchemeForCurrentConfiguration() == "light") R.color.white else R.color.black + } else if (pref == DarkModePreference.AlwaysDark) { + R.color.black + } else { + R.color.white + } + val mainWindow = this.window + val handler = Handler(Looper.getMainLooper()) + // Run this on the main thread. + handler.post { mainWindow.setBackgroundDrawableResource(bgColor) } + } + + override fun dispatchKeyEvent(event: KeyEvent): Boolean { + if (isUsingHardwareKeyboard && event.keyCode == KeyEvent.KEYCODE_ENTER) { + // Detects user pressing the enter key + if (event.action == KeyEvent.ACTION_DOWN && !event.isShiftPressed) { + // Enter is pressed + HWKeyboardEventModule.getInstance().keyPressed("enter") + return true + } + if (event.action == KeyEvent.ACTION_DOWN && event.isShiftPressed) { + // Shift-Enter is pressed + HWKeyboardEventModule.getInstance().keyPressed("shift-enter") + return true + } + } + return super.dispatchKeyEvent(event) + } + + private fun updateIsUsingHardwareKeyboard() { + isUsingHardwareKeyboard = resources.configuration.keyboard == Configuration.KEYBOARD_QWERTY + } + + companion object { + private val TAG = "ossifrage" + private fun createDummyFile(context: Context) { + val dummyFile = File(context.filesDir, "dummy.txt") + try { + if (dummyFile.createNewFile()) { + dummyFile.setWritable(true) + FileOutputStream(dummyFile).use { stream -> stream.write("hi".toByteArray()) } + } else { + Log.d(TAG, "dummy.txt exists") + } + } catch (e: Exception) { + NativeLogger.error("Exception in createDummyFile", e) + } + } + + // Is this a robot controlled test device? (i.e. pre-launch report?) + fun isTestDevice(context: Context): Boolean { + val testLabSetting = Settings.System.getString(context.contentResolver, "firebase.test.lab") + return "true" == testLabSetting + } + + @JvmStatic + fun setupKBRuntime(context: Context, shouldCreateDummyFile: Boolean) { + try { + Keybase.setGlobalExternalKeyStore(KeyStore(context, context.getSharedPreferences("KeyStore", MODE_PRIVATE))) + } catch (e: KeyStoreException) { + NativeLogger.error("Exception in MainActivity.onCreate", e) + } catch (e: CertificateException) { + NativeLogger.error("Exception in MainActivity.onCreate", e) + } catch (e: IOException) { + NativeLogger.error("Exception in MainActivity.onCreate", e) + } catch (e: NoSuchAlgorithmException) { + NativeLogger.error("Exception in MainActivity.onCreate", e) + } + if (shouldCreateDummyFile) { + createDummyFile(context) + } + val mobileOsVersion = Integer.toString(Build.VERSION.SDK_INT) + val isIPad = false + val isIOS = false + Keybase.initOnce(context.filesDir.path, "", context.getFileStreamPath("service.log").absolutePath, "prod", false, + DNSNSFetcher(), VideoHelper(), mobileOsVersion, isIPad, KBInstallReferrerListener(context), isIOS) + } + } +} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/MainApplication.java b/shared/android/app/src/main/java/io/keybase/ossifrage/MainApplication.java deleted file mode 100644 index 92be3b54068a..000000000000 --- a/shared/android/app/src/main/java/io/keybase/ossifrage/MainApplication.java +++ /dev/null @@ -1,154 +0,0 @@ -package io.keybase.ossifrage; - -import android.os.Build; -import android.content.res.Configuration; -import expo.modules.ApplicationLifecycleDispatcher; -import expo.modules.ReactNativeHostWrapper; -import android.app.Application; -import android.content.Context; - -import androidx.multidex.MultiDex; -import androidx.work.PeriodicWorkRequest; -import androidx.work.WorkManager; -import androidx.work.WorkRequest; - -import com.facebook.react.ReactInstanceManager; -import com.facebook.react.PackageList; -import com.facebook.react.ReactApplication; -import com.facebook.react.ReactNativeHost; -import com.facebook.react.ReactPackage; -import com.facebook.react.bridge.NativeModule; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint; -import com.facebook.react.defaults.DefaultReactNativeHost; -import com.facebook.soloader.SoLoader; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.TimeUnit; - -import io.keybase.ossifrage.modules.BackgroundSyncWorker; -import io.keybase.ossifrage.modules.NativeLogger; -import io.keybase.ossifrage.modules.StorybookConstants; -import androidx.lifecycle.ProcessLifecycleOwner; -import androidx.lifecycle.DefaultLifecycleObserver; -import androidx.lifecycle.LifecycleOwner; -import androidx.annotation.NonNull; -import com.bumptech.glide.Glide; - -import static keybase.Keybase.forceGC; - -class AppLifecycleListener implements DefaultLifecycleObserver { - private final Context context; - public AppLifecycleListener (Context c) { - this.context = c; - } - @Override - public void onStop(LifecycleOwner owner) { // app moved to background - new Thread(new Runnable() { - @Override - public void run() { - Glide.get(context).clearDiskCache(); - } - }).start(); - } -} - -public class MainApplication extends Application implements ReactApplication { - private final ReactNativeHost mReactNativeHost = new DefaultReactNativeHost(this) { - @Override - public boolean getUseDeveloperSupport() { - return BuildConfig.DEBUG; - } - - @Override - protected List getPackages() { - //@SuppressWarnings("UnnecessaryLocalVariable") - List packages = new PackageList(this).getPackages(); - packages.add(new KBReactPackage() { - @Override - public List createNativeModules(ReactApplicationContext reactApplicationContext) { - if (BuildConfig.BUILD_TYPE == "storyBook") { - List modules = new ArrayList<>(); - modules.add(new StorybookConstants(reactApplicationContext)); - return modules; - } else { - return super.createNativeModules(reactApplicationContext); - } - } - }); - - return packages; - } - - @Override - protected String getJSMainModuleName() { - return "index"; - } - - @Override - protected boolean isNewArchEnabled() { - return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED; - } - @Override - protected Boolean isHermesEnabled() { - return BuildConfig.IS_HERMES_ENABLED; - } - }; - - @Override - public ReactNativeHost getReactNativeHost() { - return mReactNativeHost; - } - - @Override - public void onCreate() { - NativeLogger.info("MainApplication created"); - super.onCreate(); - SoLoader.init(this, /* native exopackage */ false); - if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { - // If you opted-in for the New Architecture, we load the native entry point for this app. - DefaultNewArchitectureEntryPoint.load(); - } - if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) { - ReactNativeFlipper.initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); - } - - // KB - ApplicationLifecycleDispatcher.onApplicationCreate(this); - - ReactInstanceManager instanceManager = getReactNativeHost().getReactInstanceManager(); - if (instanceManager != null) { - ProcessLifecycleOwner.get().getLifecycle().addObserver( - new AppLifecycleListener(instanceManager.getCurrentReactContext()) - ); - } - - WorkRequest backgroundSyncRequest = - new PeriodicWorkRequest.Builder(BackgroundSyncWorker.class, - 1, TimeUnit.HOURS, - 15, TimeUnit.MINUTES) - .build(); - WorkManager - .getInstance(this) - .enqueue(backgroundSyncRequest); - } - - @Override - protected void attachBaseContext(Context base) { - super.attachBaseContext(base); - MultiDex.install(this); - } - - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig); - } - - @Override - public void onLowMemory() { - forceGC(); - super.onLowMemory(); - } -} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/MainApplication.kt b/shared/android/app/src/main/java/io/keybase/ossifrage/MainApplication.kt new file mode 100644 index 000000000000..99d224b12dd0 --- /dev/null +++ b/shared/android/app/src/main/java/io/keybase/ossifrage/MainApplication.kt @@ -0,0 +1,105 @@ +package io.keybase.ossifrage + +import android.app.Application +import android.content.Context +import android.content.res.Configuration +import androidx.lifecycle.DefaultLifecycleObserver +import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.ProcessLifecycleOwner +import androidx.multidex.MultiDex +import androidx.work.PeriodicWorkRequest +import androidx.work.WorkManager +import androidx.work.WorkRequest +import com.bumptech.glide.Glide +import com.facebook.react.PackageList +import com.facebook.react.ReactApplication +import com.facebook.react.ReactHost +import com.facebook.react.ReactNativeHost +import com.facebook.react.ReactPackage +import com.facebook.react.bridge.ReactContext +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load +import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost +import com.facebook.react.defaults.DefaultReactNativeHost +import com.facebook.soloader.SoLoader +import com.facebook.react.soloader.OpenSourceMergedSoMapping +import expo.modules.ApplicationLifecycleDispatcher.onApplicationCreate +import expo.modules.ApplicationLifecycleDispatcher.onConfigurationChanged +import io.keybase.ossifrage.modules.BackgroundSyncWorker +import io.keybase.ossifrage.modules.NativeLogger +import keybase.Keybase +import java.util.concurrent.TimeUnit + +internal class AppLifecycleListener(private val context: Context?) : + DefaultLifecycleObserver { + override fun onStop(owner: LifecycleOwner) { // app moved to background + Thread { + try { + Glide.get(context!!).clearDiskCache() + } catch (e: Exception) { + } + }.start() + } +} + +class MainApplication : Application(), ReactApplication { + override val reactNativeHost: ReactNativeHost = object : DefaultReactNativeHost(this) { + override fun getPackages(): List { + val packages = PackageList(this).packages.toMutableList() + packages.add(KBReactPackage()) + return packages + } + + override fun getJSMainModuleName(): String = "index" + override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG + override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED + override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED + } + + override val reactHost: ReactHost + get() = getDefaultReactHost(applicationContext, reactNativeHost) + + + override fun onCreate() { + NativeLogger.info("MainApplication created") + super.onCreate() + SoLoader.init(this, OpenSourceMergedSoMapping) + if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { + // If you opted-in for the New Architecture, we load the native entry point for this app. + load(bridgelessEnabled = true) + } + + // KB + onApplicationCreate(this) + + val backgroundSyncRequest: WorkRequest = PeriodicWorkRequest.Builder( + BackgroundSyncWorker::class.java, + 1, TimeUnit.HOURS, + 15, TimeUnit.MINUTES + ) + .build() + WorkManager + .getInstance(this) + .enqueue(backgroundSyncRequest) + } + + fun onReactContextInitialized(context: ReactContext?) { + ProcessLifecycleOwner.get().lifecycle.addObserver( + AppLifecycleListener(context) + ) + } + + override fun attachBaseContext(base: Context) { + super.attachBaseContext(base) + MultiDex.install(this) + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + onConfigurationChanged(this, newConfig) + } + + override fun onLowMemory() { + Keybase.forceGC() + super.onLowMemory() + } +} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/keystore/KeyStoreHelper.java b/shared/android/app/src/main/java/io/keybase/ossifrage/keystore/KeyStoreHelper.java deleted file mode 100644 index 9fb4f671ce6f..000000000000 --- a/shared/android/app/src/main/java/io/keybase/ossifrage/keystore/KeyStoreHelper.java +++ /dev/null @@ -1,64 +0,0 @@ -package io.keybase.ossifrage.keystore; - -import android.annotation.TargetApi; -import android.content.Context; -import android.os.Build; -import android.security.KeyChain; -import android.security.KeyPairGeneratorSpec; -import android.security.keystore.KeyGenParameterSpec; -import android.security.keystore.KeyInfo; -import android.security.keystore.KeyProperties; - -import java.math.BigInteger; -import java.security.InvalidAlgorithmParameterException; -import java.security.KeyPair; -import java.security.KeyPairGenerator; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.security.NoSuchProviderException; -import java.security.PrivateKey; -import java.security.spec.AlgorithmParameterSpec; -import java.security.spec.InvalidKeySpecException; -import java.security.spec.RSAKeyGenParameterSpec; -import java.util.Calendar; - -import javax.crypto.SecretKey; -import javax.crypto.SecretKeyFactory; -import javax.security.auth.x500.X500Principal; - -public class KeyStoreHelper { - - @TargetApi(Build.VERSION_CODES.KITKAT) - public static void generateRSAKeyPair(Context ctx, String keyAlias) throws KeyStoreException, NoSuchProviderException, NoSuchAlgorithmException, InvalidAlgorithmParameterException { - KeyPairGenerator kpg = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_RSA, "AndroidKeyStore"); - - final AlgorithmParameterSpec spec; - final Calendar endTime = Calendar.getInstance(); - endTime.add(Calendar.YEAR, 10); - - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { - spec = new KeyGenParameterSpec.Builder( - keyAlias, - KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT) - .setBlockModes(KeyProperties.BLOCK_MODE_ECB) - .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1) - .setCertificateSerialNumber(BigInteger.ONE) - .setCertificateSubject(new X500Principal("CN=" + keyAlias)) - .setKeySize(2048) - .build(); - } else { - spec = new KeyPairGeneratorSpec.Builder(ctx) - .setAlias(keyAlias) - .setEncryptionRequired() - .setSerialNumber(BigInteger.ONE) - .setSubject(new X500Principal("CN=" + keyAlias)) - .setStartDate(Calendar.getInstance().getTime()) - .setEndDate(endTime.getTime()) - .setKeySize(2048) - .build(); - } - - kpg.initialize(spec); - KeyPair kp = kpg.generateKeyPair(); - } -} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/keystore/KeyStoreHelper.kt b/shared/android/app/src/main/java/io/keybase/ossifrage/keystore/KeyStoreHelper.kt new file mode 100644 index 000000000000..5cd423eeacde --- /dev/null +++ b/shared/android/app/src/main/java/io/keybase/ossifrage/keystore/KeyStoreHelper.kt @@ -0,0 +1,52 @@ +package io.keybase.ossifrage.keystore + +import android.annotation.TargetApi +import android.content.Context +import android.os.Build +import android.security.keystore.KeyGenParameterSpec +import android.security.keystore.KeyProperties +import java.math.BigInteger +import java.security.InvalidAlgorithmParameterException +import java.security.KeyPairGenerator +import java.security.KeyStoreException +import java.security.NoSuchAlgorithmException +import java.security.NoSuchProviderException +import java.security.spec.AlgorithmParameterSpec +import java.util.Calendar +import javax.security.auth.x500.X500Principal + +object KeyStoreHelper { + @TargetApi(Build.VERSION_CODES.KITKAT) + @Throws(KeyStoreException::class, NoSuchProviderException::class, NoSuchAlgorithmException::class, InvalidAlgorithmParameterException::class) + fun generateRSAKeyPair(ctx: Context?, keyAlias: String) { + val kpg = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_RSA, "AndroidKeyStore") + val spec: AlgorithmParameterSpec + val endTime = Calendar.getInstance() + endTime.add(Calendar.YEAR, 10) + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + spec = KeyGenParameterSpec.Builder( + keyAlias, + KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT) + .setBlockModes(KeyProperties.BLOCK_MODE_ECB) + .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1) + .setCertificateSerialNumber(BigInteger.ONE) + .setCertificateSubject(X500Principal("CN=$keyAlias")) + .setKeySize(2048) + .build() + } else { + @Suppress("DEPRECATION") + spec = android.security.KeyPairGeneratorSpec.Builder(ctx!!) + .setAlias(keyAlias) + .setEncryptionRequired() + .setSerialNumber(BigInteger.ONE) + .setSubject(X500Principal("CN=$keyAlias")) + .setStartDate(Calendar.getInstance().time) + .setEndDate(endTime.time) + .setKeySize(2048) + .build() + } + kpg.initialize(spec) + kpg.generateKeyPair() + } +} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/modules/BackgroundSyncWorker.java b/shared/android/app/src/main/java/io/keybase/ossifrage/modules/BackgroundSyncWorker.java deleted file mode 100644 index e829efa1061d..000000000000 --- a/shared/android/app/src/main/java/io/keybase/ossifrage/modules/BackgroundSyncWorker.java +++ /dev/null @@ -1,28 +0,0 @@ -package io.keybase.ossifrage.modules; - -import android.content.Context; -import android.util.Log; - -import androidx.annotation.NonNull; -import androidx.work.Worker; -import androidx.work.WorkerParameters; - -import keybase.Keybase; - -public class BackgroundSyncWorker extends Worker { - public static final String TAG = "background_sync_job"; - - public BackgroundSyncWorker( - @NonNull Context context, - @NonNull WorkerParameters params) { - super(context, params); - } - - @Override - public Result doWork() { - Log.d(TAG, "Background sync start."); - Keybase.backgroundSync(); - Log.d(TAG, "Background sync complete."); - return Result.success(); - } -} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/modules/BackgroundSyncWorker.kt b/shared/android/app/src/main/java/io/keybase/ossifrage/modules/BackgroundSyncWorker.kt new file mode 100644 index 000000000000..f80fd27fcdf3 --- /dev/null +++ b/shared/android/app/src/main/java/io/keybase/ossifrage/modules/BackgroundSyncWorker.kt @@ -0,0 +1,22 @@ +package io.keybase.ossifrage.modules + +import android.content.Context +import android.util.Log +import androidx.work.Worker +import androidx.work.WorkerParameters +import keybase.Keybase + +class BackgroundSyncWorker( + context: Context, + params: WorkerParameters) : Worker(context, params) { + override fun doWork(): Result { + Log.d(TAG, "Background sync start.") + Keybase.backgroundSync() + Log.d(TAG, "Background sync complete.") + return Result.success() + } + + companion object { + const val TAG = "background_sync_job" + } +} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/modules/KillableModule.java b/shared/android/app/src/main/java/io/keybase/ossifrage/modules/KillableModule.java deleted file mode 100644 index 8027d982950a..000000000000 --- a/shared/android/app/src/main/java/io/keybase/ossifrage/modules/KillableModule.java +++ /dev/null @@ -1,5 +0,0 @@ -package io.keybase.ossifrage.modules; - -public interface KillableModule { - void destroy (); -} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/modules/KillableModule.kt b/shared/android/app/src/main/java/io/keybase/ossifrage/modules/KillableModule.kt new file mode 100644 index 000000000000..3265cf0173f1 --- /dev/null +++ b/shared/android/app/src/main/java/io/keybase/ossifrage/modules/KillableModule.kt @@ -0,0 +1,5 @@ +package io.keybase.ossifrage.modules + +interface KillableModule { + fun destroy() +} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/modules/NativeLogger.java b/shared/android/app/src/main/java/io/keybase/ossifrage/modules/NativeLogger.java deleted file mode 100644 index 8bb34340c18c..000000000000 --- a/shared/android/app/src/main/java/io/keybase/ossifrage/modules/NativeLogger.java +++ /dev/null @@ -1,58 +0,0 @@ -package io.keybase.ossifrage.modules; - -import android.util.Log; - -import com.facebook.react.bridge.Arguments; -import com.facebook.react.bridge.Promise; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.bridge.ReadableArray; -import com.facebook.react.bridge.WritableArray; - -public class NativeLogger extends ReactContextBaseJavaModule { - private static final String NAME = "NativeLogger"; - private static final String RN_NAME = "ReactNativeJS"; - - private static void rawLog(String tag, String jsonLog) { - Log.i(tag + NAME, jsonLog); - } - - private static String formatLine(String tagPrefix, String toLog) { - // Copies the Style JS outputs in native/logger.native.tsx - return tagPrefix + NAME + ": [" + System.currentTimeMillis() + ",\"" + toLog + "\"]"; - } - - public static void error(String log) { - Log.e(RN_NAME, formatLine("e", log)); - } - - public static void error(String log, Throwable tr) { - Log.e(RN_NAME, formatLine("e", log + Log.getStackTraceString(tr))); - } - - public static void info(String log) { - Log.i(RN_NAME, formatLine("i", log)); - } - - public static void info(String log, Throwable tr) { - Log.i(RN_NAME, formatLine("i", log + Log.getStackTraceString(tr))); - } - - public static void warn(String log) { - Log.i(RN_NAME, formatLine("w", log)); - } - - public static void warn(String log, Throwable tr) { - Log.i(RN_NAME, formatLine("w", log + Log.getStackTraceString(tr))); - } - - public NativeLogger(final ReactApplicationContext reactContext) { - super(reactContext); - } - - @Override - public String getName() { - return NAME; - } -} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/modules/NativeLogger.kt b/shared/android/app/src/main/java/io/keybase/ossifrage/modules/NativeLogger.kt new file mode 100644 index 000000000000..c185214df84c --- /dev/null +++ b/shared/android/app/src/main/java/io/keybase/ossifrage/modules/NativeLogger.kt @@ -0,0 +1,48 @@ +package io.keybase.ossifrage.modules + +import android.util.Log +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReactContextBaseJavaModule + +class NativeLogger(reactContext: ReactApplicationContext?) : ReactContextBaseJavaModule(reactContext) { + override fun getName(): String { + return NAME + } + + companion object { + private const val NAME = "NativeLogger" + private const val RN_NAME = "ReactNativeJS" + private fun rawLog(tag: String, jsonLog: String) { + Log.i(tag + NAME, jsonLog) + } + + private fun formatLine(tagPrefix: String, toLog: String): String { + // Copies the Style JS outputs in native/logger.native.tsx + return tagPrefix + NAME + ": [" + System.currentTimeMillis() + ",\"" + toLog + "\"]" + } + + fun error(log: String) { + Log.e(RN_NAME, formatLine("e", log)) + } + + fun error(log: String, tr: Throwable?) { + Log.e(RN_NAME, formatLine("e", log + Log.getStackTraceString(tr))) + } + + fun info(log: String) { + Log.i(RN_NAME, formatLine("i", log)) + } + + fun info(log: String, tr: Throwable?) { + Log.i(RN_NAME, formatLine("i", log + Log.getStackTraceString(tr))) + } + + fun warn(log: String) { + Log.i(RN_NAME, formatLine("w", log)) + } + + fun warn(log: String, tr: Throwable?) { + Log.i(RN_NAME, formatLine("w", log + Log.getStackTraceString(tr))) + } + } +} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/modules/StorybookConstants.java b/shared/android/app/src/main/java/io/keybase/ossifrage/modules/StorybookConstants.java deleted file mode 100644 index 708abab6d475..000000000000 --- a/shared/android/app/src/main/java/io/keybase/ossifrage/modules/StorybookConstants.java +++ /dev/null @@ -1,28 +0,0 @@ -package io.keybase.ossifrage.modules; - -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; - -import java.util.HashMap; -import java.util.Map; - -import io.keybase.ossifrage.BuildConfig; - -public class StorybookConstants extends ReactContextBaseJavaModule { - public StorybookConstants(final ReactApplicationContext reactContext) { - super(reactContext); - } - - @Override - public Map getConstants() { - final boolean isStoryBook = BuildConfig.BUILD_TYPE == "storyBook"; - final Map constants = new HashMap<>(); - constants.put("isStorybook", isStoryBook); - return constants; - } - - @Override - public String getName() { - return "Storybook"; - } -} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/modules/StorybookConstants.kt b/shared/android/app/src/main/java/io/keybase/ossifrage/modules/StorybookConstants.kt new file mode 100644 index 000000000000..e24f193135ab --- /dev/null +++ b/shared/android/app/src/main/java/io/keybase/ossifrage/modules/StorybookConstants.kt @@ -0,0 +1,18 @@ +package io.keybase.ossifrage.modules + +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReactContextBaseJavaModule +import io.keybase.ossifrage.BuildConfig + +class StorybookConstants(reactContext: ReactApplicationContext?) : ReactContextBaseJavaModule(reactContext) { + override fun getConstants(): Map? { + val isStoryBook = BuildConfig.BUILD_TYPE === "storyBook" + val constants: MutableMap = HashMap() + constants["isStorybook"] = isStoryBook + return constants + } + + override fun getName(): String { + return "Storybook" + } +} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/util/DNSNSFetcher.java b/shared/android/app/src/main/java/io/keybase/ossifrage/util/DNSNSFetcher.java deleted file mode 100644 index f8652adab5de..000000000000 --- a/shared/android/app/src/main/java/io/keybase/ossifrage/util/DNSNSFetcher.java +++ /dev/null @@ -1,29 +0,0 @@ -package io.keybase.ossifrage.util; - -import java.lang.reflect.Method; -import java.util.ArrayList; - -public class DNSNSFetcher implements keybase.ExternalDNSNSFetcher { - public byte[] getServers() { - try { - Class SystemProperties = Class.forName("android.os.SystemProperties"); - Method method = SystemProperties.getMethod("get", new Class[] { String.class }); - ArrayList servers = new ArrayList(); - for (String name : new String[] { "net.dns1", "net.dns2", "net.dns3", "net.dns4", }) { - String value = (String) method.invoke(null, name); - if (value != null && !"".equals(value) && !servers.contains(value)) - servers.add(value); - } - String srvStr = new String(); - for (int i = 0; i < servers.size(); i++) { - srvStr += servers.get(i); - if (i < servers.size()-1) { - srvStr+=","; - } - } - return srvStr.getBytes(); - } catch (Exception e) { - return "".getBytes(); - } - } -} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/util/DNSNSFetcher.kt b/shared/android/app/src/main/java/io/keybase/ossifrage/util/DNSNSFetcher.kt new file mode 100644 index 000000000000..e4206d6f3311 --- /dev/null +++ b/shared/android/app/src/main/java/io/keybase/ossifrage/util/DNSNSFetcher.kt @@ -0,0 +1,27 @@ +package io.keybase.ossifrage.util + +import keybase.ExternalDNSNSFetcher + +class DNSNSFetcher : ExternalDNSNSFetcher { + override fun getServers(): ByteArray { + return try { + val SystemProperties = Class.forName("android.os.SystemProperties") + val method = SystemProperties.getMethod("get", *arrayOf>(String::class.java)) + val servers = ArrayList() + for (name in arrayOf("net.dns1", "net.dns2", "net.dns3", "net.dns4")) { + val value = method.invoke(null, name) as String? + if (value != null && "" != value && !servers.contains(value)) servers.add(value) + } + var srvStr = "" + for (i in servers.indices) { + srvStr += servers[i] + if (i < servers.size - 1) { + srvStr += "," + } + } + srvStr.toByteArray() + } catch (e: Exception) { + "".toByteArray() + } + } +} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/util/DeviceLockType.java b/shared/android/app/src/main/java/io/keybase/ossifrage/util/DeviceLockType.java deleted file mode 100644 index 957e51af941e..000000000000 --- a/shared/android/app/src/main/java/io/keybase/ossifrage/util/DeviceLockType.java +++ /dev/null @@ -1,115 +0,0 @@ -package io.keybase.ossifrage.util; - -import android.app.admin.DevicePolicyManager; -import android.content.ContentResolver; -import android.os.Environment; -import android.provider.Settings; - -import java.io.File; - -/** - * Code to check if the device has some lockscreen setup. - * Adapted from: http://stackoverflow.com/questions/7768879/check-whether-lock-was-enabled-or-not - */ -public class DeviceLockType { - private final static String PASSWORD_TYPE_KEY = "lockscreen.password_type"; - - /** - * This constant means that android using some unlock method not described here. - * Possible new methods would be added in the future releases. - */ - public final static int SOMETHING_ELSE = 0; - - /** - * Android using "None" or "Slide" unlock method. It seems there is no way to determine which method exactly used. - * In both cases you'll get "PASSWORD_QUALITY_SOMETHING" and "LOCK_PATTERN_ENABLED" == 0. - */ - public final static int NONE_OR_SLIDER = 1; - - /** - * Android using "Face Unlock" with "Pattern" as additional unlock method. Android don't allow you to select - * "Face Unlock" without additional unlock method. - */ - public final static int FACE_WITH_PATTERN = 3; - - /** - * Android using "Face Unlock" with "PIN" as additional unlock method. Android don't allow you to select - * "Face Unlock" without additional unlock method. - */ - public final static int FACE_WITH_PIN = 4; - - /** - * Android using "Face Unlock" with some additional unlock method not described here. - * Possible new methods would be added in the future releases. Values from 5 to 8 reserved for this situation. - */ - public final static int FACE_WITH_SOMETHING_ELSE = 9; - - /** - * Android using "Pattern" unlock method. - */ - public final static int PATTERN = 10; - - /** - * Android using "PIN" unlock method. - */ - public final static int PIN = 11; - - /** - * Android using "Password" unlock method with password containing only letters. - */ - public final static int PASSWORD_ALPHABETIC = 12; - - /** - * Android using "Password" unlock method with password containing both letters and numbers. - */ - public final static int PASSWORD_ALPHANUMERIC = 13; - - /** - * Returns current unlock method as integer value. You can see all possible values above - * - * @param contentResolver we need to pass ContentResolver to Settings.Secure.getLong(...) and - * Settings.Secure.getInt(...) - * @return current unlock method as integer value - */ - public static int getCurrent(ContentResolver contentResolver) { - long mode = android.provider.Settings.Secure.getLong(contentResolver, PASSWORD_TYPE_KEY, - DevicePolicyManager.PASSWORD_QUALITY_SOMETHING); - if (mode == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING) { - if (android.provider.Settings.Secure.getInt(contentResolver, Settings.Secure.LOCK_PATTERN_ENABLED, 0) == 1) { - return PATTERN; - } else return NONE_OR_SLIDER; - } else if (mode == DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK) { - String dataDirPath = Environment.getDataDirectory().getAbsolutePath(); - if (nonEmptyFileExists(dataDirPath + "/system/gesture.key")) { - return FACE_WITH_PATTERN; - } else if (nonEmptyFileExists(dataDirPath + "/system/password.key")) { - return FACE_WITH_PIN; - } else return FACE_WITH_SOMETHING_ELSE; - } else if (mode == DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC) { - return PASSWORD_ALPHANUMERIC; - } else if (mode == DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC) { - return PASSWORD_ALPHABETIC; - } else if (mode == DevicePolicyManager.PASSWORD_QUALITY_NUMERIC) { - return PIN; - } else return SOMETHING_ELSE; - } - - private static boolean nonEmptyFileExists(String filename) { - File file = new File(filename); - return file.exists() && file.length() > 0; - } - - public static boolean isDeviceLockEnabled(ContentResolver contentResolver) { - switch (getCurrent(contentResolver)) { - case PIN: - case PASSWORD_ALPHANUMERIC: - case PASSWORD_ALPHABETIC: - case FACE_WITH_PIN: - case FACE_WITH_PATTERN: - case PATTERN: - return true; - default: - return false; - } - } -} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/util/DeviceLockType.kt b/shared/android/app/src/main/java/io/keybase/ossifrage/util/DeviceLockType.kt new file mode 100644 index 000000000000..649ce9328e2a --- /dev/null +++ b/shared/android/app/src/main/java/io/keybase/ossifrage/util/DeviceLockType.kt @@ -0,0 +1,108 @@ +package io.keybase.ossifrage.util + +import android.app.admin.DevicePolicyManager +import android.content.ContentResolver +import android.os.Environment +import android.provider.Settings +import java.io.File + +/** + * Code to check if the device has some lockscreen setup. + * Adapted from: http://stackoverflow.com/questions/7768879/check-whether-lock-was-enabled-or-not + */ +object DeviceLockType { + private const val PASSWORD_TYPE_KEY = "lockscreen.password_type" + + /** + * This constant means that android using some unlock method not described here. + * Possible new methods would be added in the future releases. + */ + const val SOMETHING_ELSE = 0 + + /** + * Android using "None" or "Slide" unlock method. It seems there is no way to determine which method exactly used. + * In both cases you'll get "PASSWORD_QUALITY_SOMETHING" and "LOCK_PATTERN_ENABLED" == 0. + */ + const val NONE_OR_SLIDER = 1 + + /** + * Android using "Face Unlock" with "Pattern" as additional unlock method. Android don't allow you to select + * "Face Unlock" without additional unlock method. + */ + const val FACE_WITH_PATTERN = 3 + + /** + * Android using "Face Unlock" with "PIN" as additional unlock method. Android don't allow you to select + * "Face Unlock" without additional unlock method. + */ + const val FACE_WITH_PIN = 4 + + /** + * Android using "Face Unlock" with some additional unlock method not described here. + * Possible new methods would be added in the future releases. Values from 5 to 8 reserved for this situation. + */ + const val FACE_WITH_SOMETHING_ELSE = 9 + + /** + * Android using "Pattern" unlock method. + */ + const val PATTERN = 10 + + /** + * Android using "PIN" unlock method. + */ + const val PIN = 11 + + /** + * Android using "Password" unlock method with password containing only letters. + */ + const val PASSWORD_ALPHABETIC = 12 + + /** + * Android using "Password" unlock method with password containing both letters and numbers. + */ + const val PASSWORD_ALPHANUMERIC = 13 + + /** + * Returns current unlock method as integer value. You can see all possible values above + * + * @param contentResolver we need to pass ContentResolver to Settings.Secure.getLong(...) and + * Settings.Secure.getInt(...) + * @return current unlock method as integer value + */ + fun getCurrent(contentResolver: ContentResolver?): Int { + val mode = Settings.Secure.getLong(contentResolver, PASSWORD_TYPE_KEY, + DevicePolicyManager.PASSWORD_QUALITY_SOMETHING.toLong()) + return if (mode == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING.toLong()) { + @Suppress("DEPRECATION") + if (Settings.Secure.getInt(contentResolver, Settings.Secure.LOCK_PATTERN_ENABLED, 0) == 1) { + PATTERN + } else NONE_OR_SLIDER + } else if (mode == DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK.toLong()) { + val dataDirPath = Environment.getDataDirectory().absolutePath + if (nonEmptyFileExists("$dataDirPath/system/gesture.key")) { + FACE_WITH_PATTERN + } else if (nonEmptyFileExists("$dataDirPath/system/password.key")) { + FACE_WITH_PIN + } else FACE_WITH_SOMETHING_ELSE + } else if (mode == DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC.toLong()) { + PASSWORD_ALPHANUMERIC + } else if (mode == DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC.toLong()) { + PASSWORD_ALPHABETIC + } else if (mode == DevicePolicyManager.PASSWORD_QUALITY_NUMERIC.toLong()) { + PIN + } else SOMETHING_ELSE + } + + private fun nonEmptyFileExists(filename: String): Boolean { + val file = File(filename) + return file.exists() && file.length() > 0 + } + + fun isDeviceLockEnabled(contentResolver: ContentResolver?): Boolean { + return when (getCurrent(contentResolver)) { + PIN, PASSWORD_ALPHANUMERIC, PASSWORD_ALPHABETIC, FACE_WITH_PIN, FACE_WITH_PATTERN, PATTERN -> true + else -> false + } + } +} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/util/SharedFileProvider.java b/shared/android/app/src/main/java/io/keybase/ossifrage/util/SharedFileProvider.java deleted file mode 100644 index 82d6b0d483d1..000000000000 --- a/shared/android/app/src/main/java/io/keybase/ossifrage/util/SharedFileProvider.java +++ /dev/null @@ -1,6 +0,0 @@ -package io.keybase.ossifrage.util; - -import androidx.core.content.FileProvider; - -public class SharedFileProvider extends FileProvider { -} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/util/SharedFileProvider.kt b/shared/android/app/src/main/java/io/keybase/ossifrage/util/SharedFileProvider.kt new file mode 100644 index 000000000000..d489a059efc4 --- /dev/null +++ b/shared/android/app/src/main/java/io/keybase/ossifrage/util/SharedFileProvider.kt @@ -0,0 +1,5 @@ +package io.keybase.ossifrage.util + +import androidx.core.content.FileProvider + +class SharedFileProvider : FileProvider() diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/util/VideoHelper.java b/shared/android/app/src/main/java/io/keybase/ossifrage/util/VideoHelper.java deleted file mode 100644 index 2ef62ec5faec..000000000000 --- a/shared/android/app/src/main/java/io/keybase/ossifrage/util/VideoHelper.java +++ /dev/null @@ -1,41 +0,0 @@ -package io.keybase.ossifrage.util; - -import android.media.MediaMetadataRetriever; -import android.graphics.Bitmap; -import java.io.ByteArrayOutputStream; - -public class VideoHelper implements keybase.NativeVideoHelper { - public byte[] thumbnail(String filename) { - try { - MediaMetadataRetriever retriever = new MediaMetadataRetriever(); - retriever.setDataSource(filename); - Bitmap bmp = retriever.getFrameAtTime(); - if (bmp == null) { - return new byte[0]; - } - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - bmp.compress(Bitmap.CompressFormat.JPEG, 100, stream); - byte[] ret = stream.toByteArray(); - retriever.release(); - return ret; - } catch(Exception e) { - return new byte[0]; - } - } - - public long duration(String filename) { - try { - MediaMetadataRetriever retriever = new MediaMetadataRetriever(); - retriever.setDataSource(filename); - String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); - if (time == null) { - return 0; - } - int ret = Integer.parseInt(time); - retriever.release(); - return ret; - } catch (Exception e) { - return 0; - } - } -} diff --git a/shared/android/app/src/main/java/io/keybase/ossifrage/util/VideoHelper.kt b/shared/android/app/src/main/java/io/keybase/ossifrage/util/VideoHelper.kt new file mode 100644 index 000000000000..8bad323d3850 --- /dev/null +++ b/shared/android/app/src/main/java/io/keybase/ossifrage/util/VideoHelper.kt @@ -0,0 +1,37 @@ +package io.keybase.ossifrage.util + +import android.graphics.Bitmap +import android.media.MediaMetadataRetriever +import keybase.NativeVideoHelper +import java.io.ByteArrayOutputStream + +class VideoHelper : NativeVideoHelper { + override fun thumbnail(filename: String): ByteArray { + return try { + val retriever = MediaMetadataRetriever() + retriever.setDataSource(filename) + val bmp = retriever.frameAtTime ?: return ByteArray(0) + val stream = ByteArrayOutputStream() + bmp.compress(Bitmap.CompressFormat.JPEG, 100, stream) + val ret = stream.toByteArray() + retriever.release() + ret + } catch (e: Exception) { + ByteArray(0) + } + } + + override fun duration(filename: String): Long { + return try { + val retriever = MediaMetadataRetriever() + retriever.setDataSource(filename) + val time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION) + ?: return 0 + val ret = time.toInt() + retriever.release() + ret.toLong() + } catch (e: Exception) { + 0 + } + } +} diff --git a/shared/android/app/src/release/java/io/keybase/ossifrage/ReactNativeFlipper.java b/shared/android/app/src/release/java/io/keybase/ossifrage/ReactNativeFlipper.java deleted file mode 100644 index 3e7a4fa1104e..000000000000 --- a/shared/android/app/src/release/java/io/keybase/ossifrage/ReactNativeFlipper.java +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - *

This source code is licensed under the MIT license found in the LICENSE file in the root - * directory of this source tree. - */ -package io.keybase.ossifrage; -import android.content.Context; -import com.facebook.react.ReactInstanceManager; -/** - * Class responsible of loading Flipper inside your React Native application. This is the release - * flavor of it so it's empty as we don't want to load Flipper. - */ -public class ReactNativeFlipper { - public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) { - // Do nothing as we don't want to initialize Flipper on Release. - } -} diff --git a/shared/android/app/src/releaseUnsigned/java/io/keybase/ossifrage/ReactNativeFlipper.java b/shared/android/app/src/releaseUnsigned/java/io/keybase/ossifrage/ReactNativeFlipper.java deleted file mode 100644 index a859203dab0f..000000000000 --- a/shared/android/app/src/releaseUnsigned/java/io/keybase/ossifrage/ReactNativeFlipper.java +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - *

This source code is licensed under the MIT license found in the LICENSE file in the root - * directory of this source tree. - */ -package io.keybase.ossifrage; -import android.content.Context; -import com.facebook.react.ReactInstanceManager; -/** - * Class responsible of loading Flipper inside your React Native application. This is the release - * flavor of it so it's empty as we don't want to load Flipper. - */ -public class ReactNativeFlipper { - public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) { - // Do nothing as we don't want to initialize Flipper on Release. - } -} - diff --git a/shared/android/build.gradle b/shared/android/build.gradle index dc1c42919c32..898c66a33b3f 100644 --- a/shared/android/build.gradle +++ b/shared/android/build.gradle @@ -1,14 +1,11 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext { - buildToolsVersion = "33.0.0" - minSdkVersion = 21 - compileSdkVersion = 33 + buildToolsVersion = "35.0.0" + minSdkVersion = 24 + compileSdkVersion = 35 targetSdkVersion = 34 - kotlinVersion = "1.6.21" - - // We use NDK 23 which has both M1 support and is the side-by-side NDK version from AGP. - ndkVersion = "23.1.7779620" + ndkVersion = "26.1.10909125" + kotlinVersion = "1.9.24" } repositories { @@ -16,13 +13,36 @@ buildscript { mavenCentral() } dependencies { - classpath("com.google.gms:google-services:4.4.0") classpath("com.android.tools.build:gradle") classpath("com.facebook.react:react-native-gradle-plugin") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") + classpath("com.github.triplet.gradle:play-publisher:3.7.0") // To publish from gradle + classpath("com.google.gms:google-services:4.4.0") } } -plugins { - id 'org.jetbrains.kotlin.android' version '1.8.10' apply false +apply plugin: "com.facebook.react.rootproject" + +// fix expo-camera +allprojects { + repositories { + maven { + // expo-camera bundles a custom com.google.android:cameraview + url "$rootDir/../node_modules/expo-camera/android/maven" + } + + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url(new File(['node', '--print', "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), '../android')) + } + maven { + // Android JSC is installed from npm + url(new File(['node', '--print', "require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim(), '../dist')) + } + + google() + mavenCentral() + maven { url 'https://www.jitpack.io' } + } } diff --git a/shared/android/gradle.properties b/shared/android/gradle.properties index 9e486ae28259..3052afaf3825 100644 --- a/shared/android/gradle.properties +++ b/shared/android/gradle.properties @@ -1,12 +1,3 @@ -# Project-wide Gradle settings. - -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. - -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html - # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. # Default value: -Xmx512m -XX:MaxMetaspaceSize=256m @@ -18,11 +9,8 @@ org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m # https://developer.android.com/topic/libraries/support-library/androidx-rn android.useAndroidX=true # Automatically convert third-party libraries to use AndroidX -android.enableJetifier=true +#android.enableJetifier=true -# Version of flipper SDK to use with React Native -# Updating flipper can cause android to crash on start. be careful updating! -FLIPPER_VERSION=0.182.0 # Use this property to specify which architecture you want to build. # You can also override it from the CLI using # ./gradlew -PreactNativeArchitectures=x86_64 @@ -33,6 +21,7 @@ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 # to write custom TurboModules/Fabric components OR use libraries that # are providing them. # RUN A CLEAN if you change this +# TEMP this is just due to https://github.com/software-mansion/react-native-screens/pull/2466 not being merged newArchEnabled=false # Use this property to enable or disable the Hermes JS engine. # If set to false, you will be using JSC instead. diff --git a/shared/android/gradle/wrapper/gradle-wrapper.jar b/shared/android/gradle/wrapper/gradle-wrapper.jar index 943f0cbfa754..e6441136f3d4 100644 Binary files a/shared/android/gradle/wrapper/gradle-wrapper.jar and b/shared/android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/shared/android/gradle/wrapper/gradle-wrapper.properties b/shared/android/gradle/wrapper/gradle-wrapper.properties index 448da98bb858..570b64f936ff 100644 --- a/shared/android/gradle/wrapper/gradle-wrapper.properties +++ b/shared/android/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,8 @@ #Mon May 06 15:15:57 PDT 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.1-all.zip -networkTimeout=10000 diff --git a/shared/android/gradlew b/shared/android/gradlew index d0e3e7aa5d78..2ca480e1709e 100755 --- a/shared/android/gradlew +++ b/shared/android/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -69,37 +71,36 @@ app_path=$0 # Need this for daisy-chained symlinks. while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac + ls=$(ls -ld "$app_path") + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done # This is normally unused # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$(cd -P "${APP_HOME:-./}" >/dev/null && printf '%s +' "$PWD") || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum -warn () { - echo "$*" +warn() { + echo "$*" } >&2 -die () { - echo - echo "$*" - echo - exit 1 +die() { + echo + echo "$*" + echo + exit 1 } >&2 # OS specific support (must be 'true' or 'false'). @@ -107,55 +108,58 @@ cygwin=false msys=false darwin=false nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; +case "$(uname)" in #( +CYGWIN*) cygwin=true ;; #( +Darwin*) darwin=true ;; #( +MSYS* | MINGW*) msys=true ;; #( +NONSTOP*) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - # Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME +if [ -n "$JAVA_HOME" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ]; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME Please set the JAVA_HOME variable in your environment to match the location of your Java installation." - fi + fi else - JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + JAVACMD=java + if ! command -v java >/dev/null 2>&1; then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac +if ! "$cygwin" && ! "$darwin" && ! "$nonstop"; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$(ulimit -H -n) || + warn "Could not query maximum file descriptor limit" + ;; + esac + case $MAX_FD in #( + '' | soft) : ;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + ;; + esac fi # Collect all arguments for the java command, stacking in reverse order: @@ -167,52 +171,56 @@ fi # * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done +if "$cygwin" || "$msys"; then + APP_HOME=$(cygpath --path --mixed "$APP_HOME") + CLASSPATH=$(cygpath --path --mixed "$CLASSPATH") + + JAVACMD=$(cygpath --unix "$JAVACMD") + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg; do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) + t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] + ;; #( + *) false ;; + esac + then + arg=$(cygpath --path --ignore --mixed "$arg") + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done fi -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" # Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" +if ! command -v xargs >/dev/null 2>&1; then + die "xargs is not available" fi # Use "xargs" to parse quoted args. @@ -235,11 +243,10 @@ fi # eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' +)" '"$@"' exec "$JAVACMD" "$@" - diff --git a/shared/android/gradlew.bat b/shared/android/gradlew.bat index d45ec1e59103..9c5472d50c8e 100644 --- a/shared/android/gradlew.bat +++ b/shared/android/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## @@ -43,11 +45,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail diff --git a/shared/android/settings.gradle b/shared/android/settings.gradle index 78552bc4f391..e3faea6fe9bf 100644 --- a/shared/android/settings.gradle +++ b/shared/android/settings.gradle @@ -1,8 +1,18 @@ +pluginManagement { includeBuild("../node_modules/@react-native/gradle-plugin") } +plugins { id("com.facebook.react.settings") } +extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autolinkLibrariesFromCommand() } rootProject.name = 'Keybase' +dependencyResolutionManagement { + versionCatalogs { + reactAndroidLibs { + from(files(new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), "../gradle/libs.versions.toml"))) + } + } +} + apply from: new File(["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), "../scripts/autolinking.gradle") useExpoModules() -apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) include ':app', ':keybaselib' -includeBuild('../node_modules/@react-native/gradle-plugin') +includeBuild(new File(["node", "--print", "require.resolve('@react-native/gradle-plugin/package.json')"].execute(null, rootDir).text.trim()).getParentFile()) diff --git a/shared/app/global-errors/hook.tsx b/shared/app/global-errors/hook.tsx index 9053c82b5a09..425ede968add 100644 --- a/shared/app/global-errors/hook.tsx +++ b/shared/app/global-errors/hook.tsx @@ -31,8 +31,7 @@ const useData = () => { const [cachedSummary, setSummary] = React.useState(summaryForError(error)) const [cachedDetails, setDetails] = React.useState(detailsForError(error)) const [size, setSize] = React.useState('Closed') - const countdownTimerRef = React.useRef>() - const newErrorTimerRef = React.useRef>() + const countdownTimerRef = React.useRef>(undefined) const clearCountdown = React.useCallback(() => { countdownTimerRef.current && clearTimeout(countdownTimerRef.current) @@ -48,7 +47,6 @@ const useData = () => { C.useOnUnMountOnce(() => { clearCountdown() - newErrorTimerRef.current && clearTimeout(newErrorTimerRef.current) }) C.useOnMountOnce(() => { @@ -70,11 +68,8 @@ const useData = () => { [clearCountdown, onDismiss] ) - const [lastError, setLastError] = React.useState(error) - - if (lastError !== error) { - setLastError(error) - newErrorTimerRef.current = setTimeout( + React.useEffect(() => { + const id = setTimeout( () => { setDetails(detailsForError(error)) if (!C.isMobile) { @@ -84,7 +79,10 @@ const useData = () => { error ? 0 : 7000 ) // if it's set, do it immediately, if it's cleared set it in a bit resetError(!!error) - } + return () => { + clearTimeout(id) + } + }, [error, resetError]) return { cachedDetails, diff --git a/shared/app/global-errors/index.d.ts b/shared/app/global-errors/index.d.ts index 58348a14340a..695dd42f1e55 100644 --- a/shared/app/global-errors/index.d.ts +++ b/shared/app/global-errors/index.d.ts @@ -1,4 +1,3 @@ import type * as React from 'react' -export type Props = {} declare const GlobalError: () => React.ReactNode export default GlobalError diff --git a/shared/app/globals.native.tsx b/shared/app/globals.native.tsx index 96d4c8ec3231..75b3a18dbdb7 100644 --- a/shared/app/globals.native.tsx +++ b/shared/app/globals.native.tsx @@ -1,4 +1,3 @@ -/* eslint-disable no-global-assign */ // >>>>>>>>>>>>>>>>>>>>>>> DO NOT REORDER ANYTHING in this file <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // This is supposed to bootstrap / polyfill / fixup the app. Do NOT add things here or change things unless you really know // what's happening @@ -34,6 +33,19 @@ if (!Array.prototype.at) { }) } +// Needs jsc 5.4+ +// @ts-ignore +if (!String.prototype.replaceAll) { + Object.defineProperty(String.prototype, 'replaceAll', { + value: function (this: string, search: string, replace: string): string { + return this.replace(new RegExp(search, 'g'), replace) + }, + writable: true, + enumerable: false, + configurable: true, + }) +} + global.btoa = btoa global.atob = atob __FILE_SUFFIX__ = '' diff --git a/shared/app/index.native.tsx b/shared/app/index.native.tsx index 245d4dc9b0ce..626bd879d6b0 100644 --- a/shared/app/index.native.tsx +++ b/shared/app/index.native.tsx @@ -2,6 +2,7 @@ import * as C from '@/constants' import * as Kb from '@/common-adapters' import * as React from 'react' import Main from './main.native' +import {ReducedMotionConfig, ReduceMotion} from 'react-native-reanimated' import {AppRegistry, AppState, Appearance, Linking, Keyboard} from 'react-native' import {PortalProvider} from '@/common-adapters/portal.native' import {SafeAreaProvider, initialWindowMetrics} from 'react-native-safe-area-context' @@ -23,7 +24,7 @@ module.hot?.accept(() => { const useDarkHookup = () => { const appStateRef = React.useRef('active') - const {setSystemDarkMode} = C.useDarkModeState.getState().dispatch + const setSystemDarkMode = C.useDarkModeState(s => s.dispatch.setSystemDarkMode) const setMobileAppState = C.useConfigState(s => s.dispatch.setMobileAppState) React.useEffect(() => { const appStateChangeSub = AppState.addEventListener('change', nextAppState => { @@ -100,42 +101,52 @@ let inited = false const useInit = () => { if (inited) return inited = true - const {batch} = C.useWaitingState.getState().dispatch - const eng = makeEngine(batch, c => { - if (c) { - C.useEngineState.getState().dispatch.onEngineConnected() - } else { - C.useEngineState.getState().dispatch.onEngineDisconnected() - } - }) - C.initListeners() - eng.listenersAreReady() + const f = async () => { + const {batch} = C.useWaitingState.getState().dispatch + const eng = makeEngine(batch, c => { + if (c) { + C.useEngineState.getState().dispatch.onEngineConnected() + } else { + C.useEngineState.getState().dispatch.onEngineDisconnected() + } + }) + await C.initListeners() + eng.listenersAreReady() - // On mobile there is no installer - C.useConfigState.getState().dispatch.installerRan() + // On mobile there is no installer + C.useConfigState.getState().dispatch.installerRan() + } + C.ignorePromise(f()) } +// reanimated has issues updating shared values with this on seemingly w/ zoom toolkit +const UseStrict = false as boolean +const WRAP = UseStrict + ? ({children}: {children: React.ReactNode}) => {children} + : ({children}: {children: React.ReactNode}) => <>{children} + // on android this can be recreated a bunch so our engine/store / etc should live outside const Keybase = () => { useInit() - // reanimated still isn't compatible yet with strict mode - // - // const {unmountAll, show} = useUnmountAll() + return show ? ( - - - - - -

- {unmountAll} - - - - - + + + + + + + +
+ {unmountAll} + + + + + + ) : ( unmountAll ) diff --git a/shared/app/runtime-stats.tsx b/shared/app/runtime-stats.tsx index 5369d8b8955a..7dbfbd2ca901 100644 --- a/shared/app/runtime-stats.tsx +++ b/shared/app/runtime-stats.tsx @@ -83,21 +83,23 @@ const LogStats = (props: {num?: number}) => { const {num} = props const maxBuckets = num ?? 5 - const bucketsRef = React.useRef>( - [] - ) + const [buckets, setBuckets] = React.useState< + Array<{count: number; label: string; labelFull: string; updated: boolean}> + >([]) const [, setDoRender] = React.useState(0) const events = C.useConfigState(s => s.runtimeStats?.perfEvents) const lastEventsRef = React.useRef(new WeakSet>()) const eventsRef = React.useRef>([]) - if (events) { - // only if unprocessed - if (!lastEventsRef.current.has(events)) { - lastEventsRef.current.add(events) - eventsRef.current.push(...events) + React.useEffect(() => { + if (events) { + // only if unprocessed + if (!lastEventsRef.current.has(events)) { + lastEventsRef.current.add(events) + eventsRef.current.push(...events) + } } - } + }, [events]) Kb.useInterval(() => { const events = eventsRef.current @@ -128,7 +130,7 @@ const LogStats = (props: {num?: number}) => { }) // copy existing buckets - let newBuckets = bucketsRef.current.map(b => ({...b, updated: false})) + let newBuckets = buckets.map(b => ({...b, updated: false})) // find existing or add new ones incoming.forEach((i, idx) => { @@ -172,7 +174,7 @@ const LogStats = (props: {num?: number}) => { // sort remainder by alpha so things don't move around a lot newBuckets = newBuckets.sort((a, b) => a.label.localeCompare(b.label)) - bucketsRef.current = newBuckets + setBuckets(newBuckets) setDoRender(r => r + 1) }, 2000) @@ -190,7 +192,7 @@ const LogStats = (props: {num?: number}) => { Logs )} - {bucketsRef.current.map((b, i) => ( + {buckets.map((b, i) => ( { ) : null } -const styles = Styles.styleSheetCreate(() => ({ - boxGrow: Styles.platformStyles({ - isElectron: { - overflow: 'auto', - }, - }), - container: Styles.platformStyles({ - common: {backgroundColor: Styles.globalColors.blackOrBlack}, - isElectron: { - overflow: 'auto', - padding: Styles.globalMargins.tiny, - position: 'relative', - }, - isMobile: { - bottom: isIPhoneX ? 15 : 0, - position: 'absolute', - right: isIPhoneX ? 10 : 0, - }, - }), - logStat: Styles.platformStyles({ - common: {color: Styles.globalColors.whiteOrWhite}, - isElectron: {wordBreak: 'break-all'}, - isMobile: { - fontFamily: 'Courier', - fontSize: 12, - lineHeight: 16, - }, - }), - modalLogStats: { - position: 'absolute', - right: 0, - top: 20, - width: 130, - }, - modalLogStatsHidden: { - backgroundColor: 'yellow', - position: 'absolute', - right: 0, - top: 20, - width: 20, - }, - // radarContainer: Styles.platformStyles({ - // isElectron: { - // backgroundColor: Styles.globalColors.white_20, - // borderRadius: '50%', - // height: radarSize, - // position: 'absolute', - // right: Styles.globalMargins.tiny, - // top: Styles.globalMargins.tiny, - // width: radarSize, - // }, - // }), - stat: Styles.platformStyles({ - common: {color: Styles.globalColors.whiteOrGreenDark}, - isElectron: {wordBreak: 'break-all'}, - isMobile: { - fontFamily: 'Courier', - fontSize: 10, - lineHeight: 14, - }, - }), - statNormal: { - color: Styles.globalColors.whiteOrGreenDark, - }, - statSevere: { - color: Styles.globalColors.red, - }, - statWarning: { - color: Styles.globalColors.yellowOrYellowAlt, - }, -})) +const styles = Styles.styleSheetCreate( + () => + ({ + boxGrow: Styles.platformStyles({ + isElectron: { + overflow: 'auto', + }, + }), + container: Styles.platformStyles({ + common: {backgroundColor: Styles.globalColors.blackOrBlack}, + isElectron: { + overflow: 'auto', + padding: Styles.globalMargins.tiny, + position: 'relative', + }, + isMobile: { + bottom: isIPhoneX ? 15 : 0, + position: 'absolute', + right: isIPhoneX ? 10 : 0, + }, + }), + logStat: Styles.platformStyles({ + common: {color: Styles.globalColors.whiteOrWhite}, + isElectron: {wordBreak: 'break-all'}, + isMobile: { + fontFamily: 'Courier', + fontSize: 12, + lineHeight: 16, + }, + }), + modalLogStats: { + position: 'absolute', + right: 0, + top: 20, + width: 130, + }, + modalLogStatsHidden: { + backgroundColor: 'yellow', + position: 'absolute', + right: 0, + top: 20, + width: 20, + }, + // radarContainer: Styles.platformStyles({ + // isElectron: { + // backgroundColor: Styles.globalColors.white_20, + // borderRadius: '50%', + // height: radarSize, + // position: 'absolute', + // right: Styles.globalMargins.tiny, + // top: Styles.globalMargins.tiny, + // width: radarSize, + // }, + // }), + stat: Styles.platformStyles({ + common: {color: Styles.globalColors.whiteOrGreenDark}, + isElectron: {wordBreak: 'break-all'}, + isMobile: { + fontFamily: 'Courier', + fontSize: 10, + lineHeight: 14, + }, + }), + statNormal: { + color: Styles.globalColors.whiteOrGreenDark, + }, + statSevere: { + color: Styles.globalColors.red, + }, + statWarning: { + color: Styles.globalColors.yellowOrYellowAlt, + }, + }) as const +) export default RuntimeStats diff --git a/shared/babel.config.js b/shared/babel.config.js index 0f20620eefaf..fbe28a0deffb 100644 --- a/shared/babel.config.js +++ b/shared/babel.config.js @@ -43,7 +43,7 @@ module.exports = function (api /*: any */) { // console.error('KB babel.config.js for Electron') return { presets: [ - isTest ? ['@babel/preset-env', {targets: {node: 'current'}}] : '@babel/preset-env', + isTest ? ['@babel/preset-env', { targets: { node: 'current' } }] : '@babel/preset-env', '@babel/preset-typescript', ], } @@ -62,21 +62,23 @@ module.exports = function (api /*: any */) { }, ], ...(skipAnimation ? [] : ['react-native-reanimated/plugin']), - '@babel/plugin-proposal-numeric-separator', + // '@babel/plugin-proposal-numeric-separator', '@babel/plugin-transform-export-namespace-from', - isDev - ? [ - '@babel/plugin-transform-react-jsx-development', - { - runtime: 'automatic', - ...(enableWDYR ? {importSource: '@welldone-software/why-did-you-render'} : {}), - }, - ] - : ['@babel/plugin-transform-react-jsx', {runtime: 'automatic'}], + ...(isDev + ? [[ + '@babel/plugin-transform-react-jsx-development', + { + runtime: 'automatic', + ...(enableWDYR ? { importSource: '@welldone-software/why-did-you-render' } : {}), + }, + ]] + : [[ + '@babel/plugin-transform-react-jsx', { runtime: 'automatic' } + ]]), ], presets: [ // lets us set our own jsx above - ['module:metro-react-native-babel-preset', {useTransformReactJSXExperimental: true}], + ['module:@react-native/babel-preset', { useTransformReactJSXExperimental: true }], ], sourceMaps: true, } diff --git a/shared/chat/audio/audio-player.tsx b/shared/chat/audio/audio-player.tsx index a3a93dd93264..09ea8002e675 100644 --- a/shared/chat/audio/audio-player.tsx +++ b/shared/chat/audio/audio-player.tsx @@ -69,7 +69,6 @@ type Props = { const AudioPlayer = (props: Props) => { const {duration, big, maxWidth, url, visAmps} = props - const seekRef = React.useRef void)>(null) const [playedRatio, setPlayedRatio] = React.useState(0) const [paused, setPaused] = React.useState(true) const onClick = () => { @@ -111,13 +110,7 @@ const AudioPlayer = (props: Props) => { {formatAudioRecordDuration(timeLeft)} {url.length > 0 && ( - + )} ) diff --git a/shared/chat/audio/audio-recorder.native.tsx b/shared/chat/audio/audio-recorder.native.tsx index 69037c065dea..ce5ee61044bb 100644 --- a/shared/chat/audio/audio-recorder.native.tsx +++ b/shared/chat/audio/audio-recorder.native.tsx @@ -23,9 +23,9 @@ import * as Haptics from 'expo-haptics' import * as FileSystem from 'expo-file-system' import AudioSend from './audio-send.native' -const {useSharedValue, withTiming, useAnimatedStyle, withDelay, withSequence, withSpring} = Reanimated -const {useAnimatedReaction, runOnJS, Extrapolation, interpolate, interpolateColor} = Reanimated -const Animated = Reanimated.default +const {useSharedValue, Extrapolation, useAnimatedStyle} = Reanimated +const {interpolate, withSequence, withSpring, runOnJS} = Reanimated +const {useAnimatedReaction, withDelay, withTiming, interpolateColor, default: Animated} = Reanimated type SVN = Reanimated.SharedValue type Props = { @@ -41,35 +41,27 @@ enum Visible { const useTooltip = () => { const [showTooltip, setShowTooltip] = React.useState(false) - const [lastShowTooltip, setLastShowTooltip] = React.useState(showTooltip) + const lastShowTooltipRef = React.useRef(showTooltip) const opacitySV = useSharedValue(0) - const animatedStyles = useAnimatedStyle(() => ({opacity: opacitySV.value})) - if (showTooltip) { - opacitySV.value = withSequence( - withTiming(1, {duration: 200}), - withDelay(1000, withTiming(0, {duration: 200})) - ) - } - - const timeoutRef = React.useRef | undefined>() - - if (showTooltip !== lastShowTooltip) { - setLastShowTooltip(showTooltip) + React.useEffect(() => { + if (showTooltip === lastShowTooltipRef.current) return + lastShowTooltipRef.current = showTooltip if (showTooltip) { - timeoutRef.current && clearTimeout(timeoutRef.current) - timeoutRef.current = setTimeout(() => { + opacitySV.set( + withSequence(withTiming(1, {duration: 200}), withDelay(1000, withTiming(0, {duration: 200}))) + ) + + const id = setTimeout(() => { setShowTooltip(false) }, 1400) + return () => { + clearTimeout(id) + } } - } - - React.useEffect(() => { - return () => { - timeoutRef.current && clearTimeout(timeoutRef.current) - } - }, []) + return undefined + }, [showTooltip, opacitySV]) const tooltip = showTooltip ? ( @@ -84,117 +76,13 @@ const useTooltip = () => { ) : null const flashTip = React.useCallback(() => { - setShowTooltip(true) + 'worklet' + runOnJS(setShowTooltip)(true) }, [setShowTooltip]) return {flashTip, tooltip} } -// these need to be out so they capture as little scope as possible -const makePanOnFinalize = (p: { - startedSV: SVN - lockedSV: SVN - canceledSV: SVN - onCancelRecording: () => void - onFlashTip: () => void - sendRecording: () => void - fadeSV: SVN -}) => { - const {onCancelRecording, onFlashTip} = p - const {sendRecording, fadeSV, startedSV, lockedSV, canceledSV} = p - const onPanFinalizeJS = (needTip: boolean, wasCancel: boolean, panLocked: boolean) => { - if (wasCancel) { - onCancelRecording() - return - } - - if (needTip) { - onFlashTip() - return - } - - if (!panLocked) { - sendRecording() - fadeSV.value = withTiming(0, {duration: 200}) - } - } - - const onPanFinalizeWorklet = (_e: unknown, success: boolean) => { - startedSV.value = 0 - runOnJS(onPanFinalizeJS)(!success, canceledSV.value === 1, lockedSV.value === 1) - } - - return onPanFinalizeWorklet -} - -const makePanOnStart = (p: {startRecording: () => void; fadeSV: SVN; startedSV: SVN}) => { - const {startRecording, fadeSV, startedSV} = p - const onPanStartJS = () => { - startRecording() - fadeSV.value = withSpring(1) - } - - const onPanStartWorklet = () => { - // we get this multiple times for some reason - if (startedSV.value) { - return - } - - startedSV.value = 1 - runOnJS(onPanStartJS)() - } - - return onPanStartWorklet -} - -const makePanOnUpdate = (p: {lockedSV: SVN; canceledSV: SVN; dragYSV: SVN; dragXSV: SVN}) => { - const {lockedSV, dragYSV, dragXSV, canceledSV} = p - const onOnUpdateWorklet = (e: GestureUpdateEvent) => { - if (lockedSV.value || canceledSV.value) { - return - } - const maxCancelDrift = -120 - const maxLockDrift = -100 - dragYSV.value = interpolate(e.translationY, [maxLockDrift, 0], [maxLockDrift, 0], Extrapolation.CLAMP) - dragXSV.value = interpolate(e.translationX, [maxCancelDrift, 0], [maxCancelDrift, 0], Extrapolation.CLAMP) - - if (e.translationX < maxCancelDrift) { - canceledSV.value = 1 - } else if (e.translationY < maxLockDrift) { - lockedSV.value = 1 - } - } - return onOnUpdateWorklet -} - -const GestureIcon = React.memo( - function GestureIcon(p: { - panOnFinalize: ReturnType - panOnUpdate: ReturnType - panOnStart: ReturnType - }) { - const {panOnStart, panOnUpdate, panOnFinalize} = p - return ( - - - - - - ) - }, - // we never want to rerender the icon, all the helpers are fine at mount - () => true -) - const useIconAndOverlay = (p: { flashTip: () => void startRecording: () => void @@ -220,22 +108,23 @@ const useIconAndOverlay = (p: { (f: number) => { if (f === 0) { if (fadeSyncedSV.value !== 0) { - fadeSyncedSV.value = 0 + fadeSyncedSV.set(0) runOnJS(setVisible)(Visible.HIDDEN) } } else if (fadeSyncedSV.value !== 1) { - fadeSyncedSV.value = 1 + fadeSyncedSV.set(1) runOnJS(setVisible)(Visible.SHOW) } } ) const onReset = React.useCallback(() => { - fadeSV.value = withTiming(0, {duration: 200}) - dragXSV.value = 0 - dragYSV.value = 0 - lockedSV.value = 0 - canceledSV.value = 0 + 'worklet' + fadeSV.set(withTiming(0, {duration: 200})) + dragXSV.set(0) + dragYSV.set(0) + lockedSV.set(0) + canceledSV.set(0) }, [fadeSV, dragXSV, dragYSV, lockedSV, canceledSV]) const onCancelRecording = React.useCallback(() => { @@ -255,30 +144,124 @@ const useIconAndOverlay = (p: { const onFlashTip = React.useCallback(() => { flashTip() - cancelRecording() - }, [flashTip, cancelRecording]) - - const icon = ( - + onCancelRecording() + }, [flashTip, onCancelRecording]) + + const [iconVisible, setIconVisible] = React.useState(false) + + // work around bug in gesture handler where it crashes on mount + React.useEffect(() => { + const id = setTimeout(() => { + setIconVisible(true) + return () => { + clearTimeout(id) + } + }, 1000) + }, []) + const panStartSV = useSharedValue(0) + + const gesture = React.useMemo(() => { + let id: number + const showOverlay = () => { + // we get this multiple times for some reason + if (startedSV.value) { + return + } + startedSV.set(1) + fadeSV.set(withSpring(1, {duration: 200})) + startRecording() + } + + const setupOverlayTimeout = () => { + id = setTimeout(() => { + showOverlay() + }, 200) as unknown as number + } + const cleanupOverlayTimeout = () => { + clearTimeout(id) + // eslint-disable-next-line + id = 0 + } + + const panGesture = Gesture.Pan() + .minDistance(0) + .minPointers(1) + .maxPointers(1) + .onTouchesDown(() => { + 'worklet' + runOnJS(setupOverlayTimeout)() + if (!panStartSV.value) { + panStartSV.set(Date.now()) + } + }) + .onFinalize((_e: unknown, _success: boolean) => { + 'worklet' + const diff = Date.now() - panStartSV.value + startedSV.set(0) + panStartSV.set(0) + runOnJS(cleanupOverlayTimeout)() + const needTip = diff < 200 + const wasCancel = canceledSV.value === 1 + const panLocked = lockedSV.value === 1 + if (wasCancel) { + runOnJS(onCancelRecording)() + return + } + + if (needTip) { + runOnJS(onFlashTip)() + return + } + + if (!panLocked) { + runOnJS(sendRecording)() + onReset() + fadeSV.set(withTiming(0, {duration: 200})) + } + }) + .onUpdate((e: GestureUpdateEvent) => { + 'worklet' + if (lockedSV.value || canceledSV.value) { + return + } + const maxCancelDrift = -120 + const maxLockDrift = -100 + dragYSV.set(interpolate(e.translationY, [maxLockDrift, 0], [maxLockDrift, 0], Extrapolation.CLAMP)) + dragXSV.set( + interpolate(e.translationX, [maxCancelDrift, 0], [maxCancelDrift, 0], Extrapolation.CLAMP) + ) + if (e.translationX < maxCancelDrift) { + canceledSV.set(1) + } else if (e.translationY < maxLockDrift) { + lockedSV.set(1) + } + }) + return panGesture + }, [ + onReset, + panStartSV, + fadeSV, + onFlashTip, + lockedSV, + canceledSV, + dragXSV, + dragYSV, + startRecording, + sendRecording, + onCancelRecording, + startedSV, + ]) + + const icon = iconVisible ? ( + + + + + + + + ) : ( + ) const durationStyle = useAnimatedStyle(() => ({ @@ -447,7 +430,7 @@ const useRecorder = (p: {ampSV: SVN; setShowAudioSend: (s: boolean) => void; sho ampTracker.addAmp(amp) const maxScale = 8 const minScale = 3 - ampSV.value = withTiming(minScale + amp * (maxScale - minScale), {duration: 100}) + ampSV.set(withTiming(minScale + amp * (maxScale - minScale), {duration: 100})) } const recording = await makeRecorder(onRecordingStatusUpdate) @@ -615,11 +598,7 @@ const InnerCircle = (props: { return ( - + ) @@ -630,11 +609,13 @@ const LockHint = (props: {fadeSV: SVN; lockedSV: SVN; dragXSV: SVN; dragYSV: SVN const slideAmount = 150 const spaceBetween = 20 const deltaY = 50 + const arrowStyle = useAnimatedStyle(() => { // worklet needs this locally for some reason const dragDistanceX = -50 const dragXOpacity = dragYSV.value < -10 ? 1 : interpolate(dragXSV.value, [dragDistanceX, 0], [0, 1], Extrapolation.CLAMP) + return { opacity: lockedSV.value ? withTiming(0) @@ -642,7 +623,7 @@ const LockHint = (props: {fadeSV: SVN; lockedSV: SVN; dragXSV: SVN; dragYSV: SVN interpolate(dragYSV.value, [dragDistanceX, 0], [0, 1], Extrapolation.CLAMP) * dragXOpacity, transform: [{translateX: 10}, {translateY: deltaY - fadeSV.value * slideAmount}], - } + } as const }) const lockStyle = useAnimatedStyle(() => { // worklet needs this locally for some reason @@ -666,13 +647,16 @@ const LockHint = (props: {fadeSV: SVN; lockedSV: SVN; dragXSV: SVN; dragYSV: SVN }) return ( <> - - + + + + + + ) } -const AnimatedIcon = Animated.createAnimatedComponent(Kb.Icon) const AnimatedText = Animated.createAnimatedComponent(Kb.Text) const CancelHint = (props: {fadeSV: SVN; dragXSV: SVN; lockedSV: SVN; onCancel: () => void}) => { @@ -737,12 +721,12 @@ const CancelHint = (props: {fadeSV: SVN; dragXSV: SVN; lockedSV: SVN; onCancel: return ( <> - - + + + + + + { const [seconds, setSeconds] = React.useState(0) - const startTime = React.useRef(Date.now()).current + const startTime = React.useRef(Date.now()) React.useEffect(() => { const timer = setTimeout(() => { - setSeconds((Date.now() - startTime) / 1000) + setSeconds((Date.now() - startTime.current) / 1000) }, 1000) return () => clearTimeout(timer) }, [seconds, startTime]) diff --git a/shared/chat/audio/audio-send.native.tsx b/shared/chat/audio/audio-send.native.tsx index 610e67fda153..99517fe10a09 100644 --- a/shared/chat/audio/audio-send.native.tsx +++ b/shared/chat/audio/audio-send.native.tsx @@ -28,9 +28,8 @@ const AudioSend = (props: Props) => { const {cancelRecording, sendRecording, duration, ampTracker, path} = props // render - let player = No recording available const audioUrl = `file://${path}` - player = ( + const player = ( void)> onPositionUpdated: (ratio: number) => void onEnded: () => void } diff --git a/shared/chat/audio/audio-video.desktop.tsx b/shared/chat/audio/audio-video.desktop.tsx index 22f6daa6d956..ff6aec9f978e 100644 --- a/shared/chat/audio/audio-video.desktop.tsx +++ b/shared/chat/audio/audio-video.desktop.tsx @@ -2,21 +2,9 @@ import * as React from 'react' import type {Props} from './audio-video' const AudioVideo = (props: Props) => { - const {url, seekRef, paused, onPositionUpdated, onEnded} = props + const {url, paused, onPositionUpdated, onEnded} = props const vidRef = React.useRef(null) - const seek = React.useCallback( - (seconds: number) => { - if (vidRef.current) { - vidRef.current.currentTime = seconds - } - if (paused) { - vidRef.current?.pause() - } - }, - [vidRef, paused] - ) - seekRef.current = seek const onTimeUpdate = React.useCallback( (e: React.SyntheticEvent) => { const ct = e.currentTarget.currentTime @@ -33,9 +21,12 @@ const AudioVideo = (props: Props) => { onEnded() }, [onEnded]) - const [lastPaused, setLastPaused] = React.useState(paused) - if (lastPaused !== paused) { - setLastPaused(paused) + const lastPausedRef = React.useRef(paused) + React.useEffect(() => { + if (lastPausedRef.current === paused) { + return + } + lastPausedRef.current = paused if (paused) { vidRef.current?.pause() } else { @@ -44,7 +35,7 @@ const AudioVideo = (props: Props) => { .then(() => {}) .catch(() => {}) } - } + }, [paused]) return (