diff --git a/.gitignore b/.gitignore index 76add87..eaa4267 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ node_modules -dist \ No newline at end of file +# dist \ No newline at end of file diff --git a/certs/Private_G1_chain.pem b/certs/Private_G1_chain.pem index be98f55..b6fdb35 100644 --- a/certs/Private_G1_chain.pem +++ b/certs/Private_G1_chain.pem @@ -1,110 +1,99 @@ -----BEGIN CERTIFICATE----- -MIIFhDCCA2ygAwIBAgIEAJimITANBgkqhkiG9w0BAQsFADBiMQswCQYDVQQGEwJO -TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMTMwMQYDVQQDDCpTdGFh -dCBkZXIgTmVkZXJsYW5kZW4gUHJpdmF0ZSBSb290IENBIC0gRzEwHhcNMTMxMTE0 -MTM0ODU1WhcNMjgxMTEzMjMwMDAwWjBiMQswCQYDVQQGEwJOTDEeMBwGA1UECgwV -U3RhYXQgZGVyIE5lZGVybGFuZGVuMTMwMQYDVQQDDCpTdGFhdCBkZXIgTmVkZXJs -YW5kZW4gUHJpdmF0ZSBSb290IENBIC0gRzEwggIiMA0GCSqGSIb3DQEBAQUAA4IC -DwAwggIKAoICAQDaIMh56ynwnEhE7Ey54KpX5j1XDoxbHDCgXctute55RjmG2hy6 -fuq++q/dCSsj38Pi/KYn/PN13EF05k39IRvakb0AQNVyHifNKXfta6Tzi5QcM4BK -09DB4Ckb6TdZTNUtWyEcAtRblYaVSQ4Xr5QODNqu2FGQucraVXqCIx81azlOE2Jb -Zli9AZKn94pP57A11dUYhxMsh70YosJEKVB8Ue4ROksHhb/nnOISG+2y9FD5M8u8 -jYhp00TGZGVu5z0IFgtqX0i8GmrH0ub9AWjf/iU4MWjGVRSq0cwUHEeKRj/UD9a8 -xIEn9TxIfYj+6+s4tn9dW/4PV5jc6iGJx6ExTPfOR7VHpxS4XujrZb5Ba/+oj/ON -dOfR0JSm2itCytbtjQBBL0oocIIqaqOna1cufHkcn9VleF7Zvz/8njQIpAU4J4nJ -4pE5pQ3k4ORAGNnq5R9hAqqUQGDlo3Uj8PBou0nPzQ7JNgGkN+my/lGr4rceUNK/ -8CoGnYFUH+UyFtJkvlLlEkb688/IdNdGgY+vuXCAB6xfKlJjAGChFUBb6swbNeNc -tVEdUj7Weg4Jt5gXu78C2mjs9x5lcHOgMO4ZmvYJ3Ejp4k3nNa45HOIVkYrfQrrB -HzBhR0BuReAagurcbtUjJFd7BtufGVLfU3CUn1l6u3/9eG4DGH6pq+dSKQIDAQAB -o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU -Kv25Kx76w4SHBtuB/4aXdQ3rAYswDQYJKoZIhvcNAQELBQADggIBAEvpmXMOOKdQ -wUPysrsdIkGJUFF+dvmsJDiOuAqV0A1nNTooL3esvDLEZAWZwKTOwRomnHzeCfS/ -QxRKTkVX21pfrHf9ufDKykpzjl9uAILTS76FJ6//R0RTIPMrzknQpG2fCLR5DFEb -HWU/jWAxGmncfx6HQYl/azHaWbv0dhZOUjPdkGAQ6EPvHcyNU9yMkETdw0X6ioxq -zMwkGM893oBrMmtduiqIf3/H6HTXoRKAc+/DXZIq/pAc6eVMa6x43kokluaam9L7 -8yDrlHbGd2VYAr/HZ0TjDZTtI2t2/ySTb7JjC8wL8rSqxYmLpNrnhZzPW87sl2OC -FC3re3ZhtJkIHNP85jj1gqewTC7DCW6llZdB3hBzfHWby0EX2RlcwgaMfNBEV5U0 -IogccdXV+S6zWK4F+yBr0sXUrdbdMFu+g3I9CbXxt0q4eVJtoaun4M2Z+bZMqZvy -9FryBdSfhpgmJqwFz2luOhPOVCblCPhLrUeewrvuBXoZQWt1ZjuHfwJZ1dgjszVE -qwY9S0SdqCg2ZlL9s3vDIrrd3wLWrcHLQMd9gwsppNv9c7JfIJdlcZLTmF9EuL6e -CvVVrqBVqLHjva4erqYol6K/jbSfUtRCy8IlFU7LYu1KLehZKYvj3vekj3Cn08Aq -ljr/Q8Pw+OfUZTzKg4PVDQVfFqKtyosv +MIIHdDCCBVygAwIBAgIQCTtvhv0uAIdCZI0KPg1d4TANBgkqhkiG9w0BAQsFADBl +MQswCQYDVQQGEwJJRTEhMB8GA1UEChMYRGlnaUNlcnQgSXJlbGFuZCBMaW1pdGVk +MTMwMQYDVQQDEypEaWdpQ2VydCBHMiBUTFMgRVUgUlNBNDA5NiBTSEEzODQgMjAy +MiBDQTEwHhcNMjQwMzE5MDAwMDAwWhcNMjUwMzE4MjM1OTU5WjBTMQswCQYDVQQG +EwJOTDEQMA4GA1UEBxMHVXRyZWNodDEdMBsGA1UEChMUS2FtZXIgdmFuIEtvb3Bo +YW5kZWwxEzARBgNVBAMTCmFwaS5rdmsubmwwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQDgff29P8DzK6WAinCpuGCoAYeqplzEANeChbUTJO0YWZf70NEy +ZpesFBRjl5HA5uhyEZORkJ0pA89YUQ6hasE9T9OtAMV57oRqDDEoVdKjNlujgN66 +rSbkz4sll8BCdF8vqvgy7kSCgr25619WSDUwx2jFShycqcNANTwMRXl8xGJ9WCSu +B71lWDbt3V107otIBrj8+YoT0MFLOMcD/QUvk663Uh0UfjPIpCN475eTQljiWQ6t +UIZWGCXn3CM37XMAYh4MkXRLCKf4oBeaK5w7UWEcj00SlPnqNOBbDf945DxOmGFl +dLUYM3yEF4q6nslZj976KzZaJyiAVxLDmu7LAgMBAAGjggMwMIIDLDAfBgNVHSME +GDAWgBQYieev8Cj2fMpoBVLhYtiR1hZlYDAdBgNVHQ4EFgQUOo7d4A/DIRPs8rVm +e+NK5F7gtN4wFQYDVR0RBA4wDIIKYXBpLmt2ay5ubDA+BgNVHSAENzA1MDMGBmeB +DAECAjApMCcGCCsGAQUFBwIBFhtodHRwOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMw +DgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBP +BgNVHR8ESDBGMESgQqBAhj5odHRwOi8vY3JsLmRpZ2ljZXJ0LmV1L0RpZ2lDZXJ0 +RzJUTFNFVVJTQTQwOTZTSEEzODQyMDIyQ0ExLmNybDCBgwYIKwYBBQUHAQEEdzB1 +MCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5kaWdpY2VydC5ldTBOBggrBgEFBQcw +AoZCaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuZXUvRGlnaUNlcnRHMlRMU0VVUlNB +NDA5NlNIQTM4NDIwMjJDQTEuY3J0MAwGA1UdEwEB/wQCMAAwggF9BgorBgEEAdZ5 +AgQCBIIBbQSCAWkBZwB3AE51oydcmhDDOFts1N8/Uusd8OCOG41pwLH6ZLFimjnf +AAABjlYWK7oAAAQDAEgwRgIhANRvIePiWyNoKeOR7/dfEXmB7U3QCUjHQf7sRlNv +3wAPAiEAi9X6iLPay8LDsawjYRp6qW1+CpsGHbPssP5/JzeK6FYAdQDm0jFjQHeM +wRBBBtdxuc7B0kD2loSG+7qHMh39HjeOUAAAAY5WFixQAAAEAwBGMEQCIDZ2wT6S +17TSyqYtumUQmZUA9zcCj+aVZZpuwhUWlVPoAiAEk280/8xEx6D8x8VW7n+iGi/Y +CIk+IkunkDfJg3rx7wB1AM8RVu7VLnyv84db2Wkum+kacWdKsBfsrAHSW3fOzDsI +AAABjlYWK3wAAAQDAEYwRAIgaC0qLC23aOdFyMJQGbXx3K9kTnmrkC9MbjyPhiqj +4QkCIF5yiqo/0FoL7MTUBFvN9greMIGdFj4g1tGr24kGYXfbMA0GCSqGSIb3DQEB +CwUAA4ICAQBw6bppiKHoXZLCpJy/jhRmAXOTDv2hnaj4PKbOj1LTtKGvxWub4hZE +l5gBcKfCqkr0CMUApo6Nkp8P7aCm9ew4bTPA72GEU1qHTgEzMD8+KyqKc8xh35IB +MMjUkttBW9uX8GtDqn0pmYONGGLU5IUZ+qdBUExaUexeUL5ryZjlswrpIsqiI9Kx +0UlE1ndP3pQ130mBTH6xrmd+8YN3LLceJnZ9VHw0evk2N3DIpZzqCqRkT6wxlxEB +OM82IXYRKNVNYVquRObWsP8k9+Wuj9s7i/bUkDqQ/76i8rt1vXeE3eVz8eZCp3My +ubwQ5q7D73TOiSpW1jQJm0C7LS4ywr4w2F1VrTD4fVvU6LYPTwpshG9CK+ztpT4t +E7SkpnPtawcsbWDZrUjhDdSFLuZLo7Rofc4B0Jq+R50rDKHPiOCZjYB+Da7ZMdyP +2JApylOMDmxM5Njw0I4OuQARPhTnycJ7xu9hD0f/5Y5nMe6rxWe7eT0u2UKccfPs +STVqvpmCH5JZKtu5ZpMcwKVO3rsYjEL2WztqQNQGn+qvhAty1XaABTh40BA46PHB +/btFQccVlC+BUXBlna+7tmPup4BdhPBRmVfD7puo2f9MT2sucYgv5gY467xgy8zU +NsGXaRU9d+dmVSeq2lkJn5QtDiUfXlndQzK7drnhGtN9CjQKQlbfBA== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- -MIIGoTCCBImgAwIBAgIEAJimiDANBgkqhkiG9w0BAQsFADBiMQswCQYDVQQGEwJO -TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMTMwMQYDVQQDDCpTdGFh -dCBkZXIgTmVkZXJsYW5kZW4gUHJpdmF0ZSBSb290IENBIC0gRzEwHhcNMTMxMTE1 -MTAwNDEzWhcNMjgxMTEyMjMwMDAwWjBmMQswCQYDVQQGEwJOTDEeMBwGA1UECgwV -U3RhYXQgZGVyIE5lZGVybGFuZGVuMTcwNQYDVQQDDC5TdGFhdCBkZXIgTmVkZXJs -YW5kZW4gUHJpdmF0ZSBTZXJ2aWNlcyBDQSAtIEcxMIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEAvwOIqjkS4zOz5/8mp/xJ0N2031fQVS53AwimkLBrkqut -ypo0dZKyn4JEoNs2KmwdjMNC4TWWn8aagdAzL0e8pIdJwuswDb2S5yKRCs1cvaTH -op+ueVc8QoQbiQXx25ryJn0c+Se3DTo+0DGljnf+UXUqoDSnV0upptEt+yM7m17W -ndBUzOUk/hh6dw63gkHSJn9fiN/Apd5iRH+fnAr6AE6uKcSYtjkrr4mt64WJCLFM -9aISg3eplf3Gqv7Pzr7AVxr/VAMuSLz9EQdMveOYEqzjxDZJptvrGAmfFMYPkEDC -yXPXF8Njbh5CVdCiaJye2dJXvYwnUtTCBs8Qbcf7Fzl5NFKEB7bvmY85kGZV5SJd -3EPbSiNUtMZ2Dx5trC9NxobI4iOIdzIGx8t+lZ2hOSrBhidgXBa2AkbxqdVl+ibY -wI2FOtdXg/EQzps2owvQST4uQAqthHsR2bGcAoKASXNSuBNrzUz0eu84k/Si/aPy -Q1Yo3AkqC5qkX6QQP5JzjrTXTcoxsKYsqNdxyACA80/D0RXX5yNTMfMoAPl/n1Ax -D8h1LB1tf3uiDImTkfU0Fjorqe7oTJdtWQLep+e+CVcDpuSzssk+6aKZnKESOzv6 -S+V85Z+iHfELSRku64dMZL6i4Yzr0MPidxwAvZGg7nuf48ruKeyE8C81V/fT2RcC -AwEAAaOCAVkwggFVMA8GA1UdEwEB/wQFMAMBAf8wXQYDVR0gBFYwVDAMBgpghBAB -h2sBAggEMAwGCmCEEAGHawECCAUwNgYKYIQQAYdrAQIIBjAoMCYGCCsGAQUFBwIB -FhpodHRwczovL2Nwcy5wa2lvdmVyaGVpZC5ubDBLBggrBgEFBQcBAQQ/MD0wOwYI -KwYBBQUHMAKGL2h0dHA6Ly9jZXJ0LnBraW92ZXJoZWlkLm5sL1ByaXZhdGVSb290 -Q0EtRzEuY2VyMA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQq/bkrHvrDhIcG -24H/hpd1DesBizBGBgNVHR8EPzA9MDugOaA3hjVodHRwOi8vY3JsLnBraW92ZXJo -ZWlkLm5sL1ByaXZhdGVSb290TGF0ZXN0Q1JMLUcxLmNybDAdBgNVHQ4EFgQUPq+o -D4eiLEF7FGwb89to05KnRKgwDQYJKoZIhvcNAQELBQADggIBAD679+kWzn1Qf9Nv -GMlO+HFSTXmJ1M5/SMnbaXJCa1EHMzL7KErSc5BnQcwjV4HCrtQB9hRc6tzso2tE -PAj9ytopNIvCelnW9ooYQ7wLuNErZU+LNYyOad7+pP+YSmwsIKF8wSBjz6IFgC+9 -NtWjNL00enDXPo0/gcVTAuwUuk2qXH4qhqU3IhnstHWgnlOH+dS1UsJR1Za+JTFa -9mxy9vDC/D/MbFYcUd88M3QZ1aadUjZAbLR6dhZGsuFJSqX2Ck7F1ZNt48Hd2uB1 -DRYBedT7w+D/lKoJMz5XsYAVZx7yon3aohz+7SiuaQrvB6zo8HkMTRDGR1SKvguc -yposE1o3SCkutP34xNvAG3Ykuop9J4vjdfmJ5G22eHwclbi037jGc2xv64KSanS9 -09VDFO4KCrKICwEUG4n36Dg8gEdYNLukZBvnH9LPdVao7cl8S6Clpd1JTTnMl1KD -IVjICvggNklD0A+9Zl6o25ongji1F9SGLVy9LHkmymGybAvWvYTZJaOmzYtdxwih -KxywNovJruAnD37+T63lt5S/FSpLSjOfKj0dvBxCPPeNs2B418/A3HTGz63e2dCV -T+QOH14xfKJ+k9/ZFr5XuhkingMUG6vZeND4HWVJzc4mq6Ic27QKS9ulmcUdYos+ -0nOnmkmh5knv11C1n8YATbQjZh0i +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH +MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI +2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx +1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ +q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz +tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ +vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV +5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY +1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 +NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG +Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 +8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe +pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- -MIIG/DCCBOSgAwIBAgIIU2w5U7TnvlwwDQYJKoZIhvcNAQELBQAwZjELMAkGA1UE -BhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjE3MDUGA1UEAwwu -U3RhYXQgZGVyIE5lZGVybGFuZGVuIFByaXZhdGUgU2VydmljZXMgQ0EgLSBHMTAe -Fw0xNjExMDMxMDM2MTFaFw0yODExMTIwMDAwMDBaMIGAMQswCQYDVQQGEwJOTDEg -MB4GA1UECgwXUXVvVmFkaXMgVHJ1c3RsaW5rIEIuVi4xFzAVBgNVBGEMDk5UUk5M -LTMwMjM3NDU5MTYwNAYDVQQDDC1RdW9WYWRpcyBQS0lvdmVyaGVpZCBQcml2YXRl -IFNlcnZpY2VzIENBIC0gRzEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQCo9ep1FEPp6FQIgMT8wD5UoTDQoqkE43vWFx2ur6cxYQFpWXefd0dpdaugwOJ5 -igIilAoIrd+FdYxbJxQOkrbmkFX1mdW2mAf10+9BW5rn1HvwHG/nvZ8kyaeZuEyE -UmVZ+EEFw+7hOru7YPkxA5U7N3IY409xAjiYS3Cti388bLPfE3Ci0Rt2WQlL3jbn -SlAty2ZdJ5aCRkL3Cm8wERlwZ0lsLsTIQo1TCw6WfrDgEk+41MvP3eh+0wL3lWPn -SPzwvI13Dd5PjT7Pte73oVpqRwgWl+2ZjGD7vwNf14rma3Khuwv74lWWJIr9EHu4 -miseqVlhk4mFpPC4zsKM6AeXfhZwKLmGAwM54yHw7hjvSPoBilpGiKdIdELMfFzW -ToSOjMXPQZyHSF5F13sj/hD+YLRBx95QsDa+1xWJq4hv+/t/WPuw1E+s8JYQ/5HK -ArYfGNMou20skdJyvYW5H+NcZ0guCaF6zdrUDkFv+uI+MkWQMxGw/mwqZX/cW4EC -4PPG1j3NEK6/gfU7LT4W/M/GIBC6kJ+L5AJtDIvW8719oIp0UBmhF1nZyQSX6Wda -plsM6CNYZ7SSq+kUC4k6Oalzsnv4kNy7ru6yzHoI33V6VXQcs2BevJjbf09YIHoh -2cPKPB0nIvRNq9Lvpek0mi5lGzmDj+/DxRySLdPJbzzdCQIDAQABo4IBkTCCAY0w -UgYIKwYBBQUHAQEERjBEMEIGCCsGAQUFBzAChjZodHRwOi8vY2VydC5wa2lvdmVy -aGVpZC5ubC9Eb21Qcml2YXRlU2VydmljZXNDQS1HMS5jZXIwHQYDVR0OBBYEFLls -phO6uy80Y4MxLvl+SR3fAPVjMBIGA1UdEwEB/wQIMAYBAf8CAQAwHwYDVR0jBBgw -FoAUPq+oD4eiLEF7FGwb89to05KnRKgwJQYIKwYBBQUHAQMEGTAXMBUGCCsGAQUF -BwsCMAkGBwQAi+xJAQIwXQYDVR0gBFYwVDAMBgpghBABh2sBAggEMAwGCmCEEAGH -awECCAUwNgYKYIQQAYdrAQIIBjAoMCYGCCsGAQUFBwIBFhpodHRwczovL2Nwcy5w -a2lvdmVyaGVpZC5ubDBNBgNVHR8ERjBEMEKgQKA+hjxodHRwOi8vY3JsLnBraW92 -ZXJoZWlkLm5sL0RvbVByaXZhdGVTZXJ2aWNlc0xhdGVzdENSTC1HMS5jcmwwDgYD -VR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQCM9aEWB9EutS4/TKJ0hSrJ -ljJSt0sAFxkoi6upCv7+C9Pjp+R5woGAwiBctbM5PyT+KpOKlDZKL3mrXSUc/71q -NxsPlZR703c+HhlkvDCHbk9afrAXWtXz0sKVs8KaNS2W4k7O8xGNZVMjMwpanQdB -csTnFPu12OTj8BCv4aOFxIYnPqPHkl8VTAi2pTArCtTQk9vi6QaXPzSmfi/rDINC -JUAOnA3BEeZZI+BD8yCzE2x9M1N0AIn3UZRfVMfLJdI68a67lt3fLh2ZbLcjE0Pi -4arBqxzFyKa1LyVsnA1Yg5UCZQh8U9l+5DS5dNS9lDVSBcd9iUio+lg8LvAQ7biz -+FFiLSqxVcWDuUg079d8JjPakm4JllmORlnSfWlcTHmgKmQOR0TgtXUL/7EDW2qb -mRb5hUttT6ixBKnjtllnXmpOkx8hZn0F0hqjnIUsw8E0SdpYlrvIKszmowoKtZps -zL/REVZybhfki5zj22GBMNBBP5MWTkltAZ8x2qu8iUw7MAUkBJy14cWmbqxue95J -tT3a2/BnSMofYQNALQM4Ay9iZZyCUJIF/EYxg1OXmv65UthXpc4DdApICObyxY+/ -OABPJWHtxuG27SmMBx/MT3ZEs6vswVqGIsbPZydVSqerDskkP1AOl4iFEwmGOtfL -B+VGn3werrg7IVfbCWEqdA== +MIIF1DCCBLygAwIBAgIQBk+E/3kfpnbynPNlN6J0njANBgkqhkiG9w0BAQwFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH +MjAeFw0yMjA5MTkwMDAwMDBaFw0zMjA5MTgyMzU5NTlaMGUxCzAJBgNVBAYTAklF +MSEwHwYDVQQKExhEaWdpQ2VydCBJcmVsYW5kIExpbWl0ZWQxMzAxBgNVBAMTKkRp +Z2lDZXJ0IEcyIFRMUyBFVSBSU0E0MDk2IFNIQTM4NCAyMDIyIENBMTCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAN4iiUwFRU3M4Ybw83MDTNpV49ks4gHZ +eFKbAw3CFAG5OLvVEZXaO2UFlikNK6pyHAH9c7vO19t7VF3lA2c0Y0MNhHcKRkYc +fGKPffhcDaV5lKtE/azrbatl9Mpc/X+sG/0EjOLUDRGldG4EANSNFKlPN0nhGtp2 +rEDe24v9IFE7wAlu9cPkgE+CDNT3vauSGhThbP34twARP5s10zmUqqi63ZAS3jhJ +KV41aI84Mc/jrg2o4aYKGhUBrSMu0XT4Q7D3aMIv1s44BrhbNpRrFwjw+frzu3Bz +S/kp2ymdmeCX7EgZr2OKTCxdY0zkxsgt5TxQIAuWJIDSWC6SYtf+DYP7M4j5kVRM +M4aEVuDcKxLlR9r+lJWBbQ025PAtph+wsW2Uqsnl2gjv5da3t+H2fABZ3k7HyYRJ +s6CAdqygQT1cuTIuJAQChlLW+9ewa0S+Ny4zV9U7K2xH5DWe3xsWzusHWBADmB+J +jwPShK1sQeOfMtz2VMLIXbbk5ktW4qjJc7TUqx6oqiymRsc1ftAmr92n+pZY01Ww +qx9AigmvaSwpsBoMxJJWPz4x/L1BY7TQ7bxYC/1QUEFp3LL6B+O1wienOVX570v+ +gh/0HcFLSb7c+SAThCu9ZamrPsfqUhJiX0mX2xLKXXAYE1090iweqPJLSS4w39YS +Rw/XLWMGwhbvAgMBAAGjggGCMIIBfjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1Ud +DgQWBBQYieev8Cj2fMpoBVLhYtiR1hZlYDAfBgNVHSMEGDAWgBROIlQgGJXm427m +D/r6uRLtBhePOTAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwEG +CCsGAQUFBwMCMHYGCCsGAQUFBwEBBGowaDAkBggrBgEFBQcwAYYYaHR0cDovL29j +c3AuZGlnaWNlcnQuY29tMEAGCCsGAQUFBzAChjRodHRwOi8vY2FjZXJ0cy5kaWdp +Y2VydC5jb20vRGlnaUNlcnRHbG9iYWxSb290RzIuY3J0MEIGA1UdHwQ7MDkwN6A1 +oDOGMWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RH +Mi5jcmwwPQYDVR0gBDYwNDALBglghkgBhv1sAgEwBwYFZ4EMAQEwCAYGZ4EMAQIB +MAgGBmeBDAECAjAIBgZngQwBAgMwDQYJKoZIhvcNAQEMBQADggEBAEQOjk9D1gf8 +jJfOqSjbuuYCy3hdaFZwfi3kfhGaFoT5V5nhu2cnruBw1KREgawfxi7xcLwBaQbq +RBGchvqPSfRboGU1qYmhUyo2el2wCLWXgVJxuy1PSW2cPIN3MYo0y8XDo78cVlw0 +eZs2z8F8W8AkGqhjhVCrOoL1+gPrzO3b0akjzeGGtihbwDpH7/EH0o1ZkcdZYhUy +HubnWq/LYupz26kZVQMHuaSgYPhnI6gsBk4A0Mz+JnMEf+nAXu9oeXZiFPFV5omz +QUMeo5mz+K3ERI45CtB38aoCxMuvgIpw1Db7vzFWV/8e/T/hhJCnnApirbqJU42B +J+sOZ9FoWLo= -----END CERTIFICATE----- + diff --git a/dist/cjs/index.js b/dist/cjs/index.js new file mode 100644 index 0000000..8fb9235 --- /dev/null +++ b/dist/cjs/index.js @@ -0,0 +1,199 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __rest = (this && this.__rest) || function (s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.KVK = void 0; +const node_fs_1 = __importDefault(require("node:fs")); +const node_path_1 = __importDefault(require("node:path")); +const node_https_1 = __importDefault(require("node:https")); +const node_crypto_1 = __importDefault(require("node:crypto")); +const node_fetch_1 = __importDefault(require("node-fetch")); +const BASE_URL = 'https://api.kvk.nl/api'; +const CERTIFICATE_PATH = '../../certs/Private_G1_chain.pem'; +class KVK { + constructor(apiKey, baseUrl, certificate, httpsAgent) { + this.apiKey = apiKey; + this.baseUrl = baseUrl || BASE_URL; + this.certificate = certificate || this.getCertificate(); + this.httpsAgent = httpsAgent || this.createHttpsAgent(); + } + getCertificate() { + const pathToCertificate = node_path_1.default.join(__dirname, CERTIFICATE_PATH); + const certificate = node_fs_1.default.readFileSync(pathToCertificate, { + encoding: 'utf-8', + }); + return certificate; + } + createHttpsAgent() { + const httpsAgent = new node_https_1.default.Agent({ + ca: this.certificate, + secureOptions: node_crypto_1.default.constants.SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION, + }); + return httpsAgent; + } + static validateKvkNummer(val) { + if (val.length !== 8) + return false; + return /^\d+$/.test(val); + } + static validateVestigingsnummer(val) { + if (val.length !== 12) + return false; + return /^\d+$/.test(val); + } + request({ endpoint, params = {}, headers = {}, }) { + return __awaiter(this, void 0, void 0, function* () { + const query = new URLSearchParams(Object.assign({}, Object.fromEntries(Object.entries(params).filter(([_, v]) => v != null)))).toString(); + const url = this.baseUrl + endpoint + (query ? `?${query}` : ''); + const res = yield (0, node_fetch_1.default)(url, { + method: 'GET', + headers: Object.assign({ Accept: 'application/json', apiKey: this.apiKey }, headers), + agent: this.httpsAgent, + }); + const data = yield res.json(); + return data; + }); + } + /** + * @deprecated This function is deprecated and will be removed in a future version. + * The KVK api will stop supporting searching on the V1 endpoint starting 29-07-2024 + * Use [zoekenV2] instead. + */ + zoeken(_a) { + var { kvkNummer, vestigingsnummer, postcode, huisnummer, pagina = 1, aantal = 15 } = _a, params = __rest(_a, ["kvkNummer", "vestigingsnummer", "postcode", "huisnummer", "pagina", "aantal"]); + return __awaiter(this, void 0, void 0, function* () { + if (kvkNummer && !KVK.validateKvkNummer(kvkNummer)) + throw new Error('KVK: Ongeldig kvknummer.'); + if (vestigingsnummer && !KVK.validateVestigingsnummer(vestigingsnummer)) + throw new Error('KVK: Ongeldig vestigingsnummer.'); + if ((postcode && !huisnummer) || (huisnummer && !postcode)) + throw new Error('KVK: Postcode en huisnummer mogen alleen in combinatie met elkaar gebruikt worden.'); + if (pagina < 1 || pagina > 1000) + throw new Error('KVK: Pagina is minimaal 1 en maximaal 1000.'); + if (aantal < 1 || aantal > 100) + throw new Error('KVK: Aantal is minimaal 1 en maximaal 100.'); + return yield this.request({ + endpoint: '/v1/zoeken', + params: Object.assign({ kvkNummer, + vestigingsnummer, + postcode, + huisnummer, + pagina, + aantal }, params), + }); + }); + } + zoekenV2(_a) { + var { kvkNummer, vestigingsnummer, postcode, huisnummer, pagina = 1, resultatenPerPagina = 15 } = _a, params = __rest(_a, ["kvkNummer", "vestigingsnummer", "postcode", "huisnummer", "pagina", "resultatenPerPagina"]); + return __awaiter(this, void 0, void 0, function* () { + if (kvkNummer && !KVK.validateKvkNummer(kvkNummer)) + throw new Error('KVK: Ongeldig kvknummer.'); + if (vestigingsnummer && !KVK.validateVestigingsnummer(vestigingsnummer)) + throw new Error('KVK: Ongeldig vestigingsnummer.'); + if ((postcode && !huisnummer) || (huisnummer && !postcode)) + throw new Error('KVK: Postcode en huisnummer mogen alleen in combinatie met elkaar gebruikt worden.'); + if (pagina < 1 || pagina > 1000) + throw new Error('KVK: Pagina is minimaal 1 en maximaal 1000.'); + if (resultatenPerPagina < 1 || resultatenPerPagina > 100) + throw new Error('KVK: Aantal is minimaal 1 en maximaal 100.'); + return yield this.request({ + endpoint: '/v2/zoeken', + params: Object.assign({ kvkNummer, + vestigingsnummer, + postcode, + huisnummer, + pagina, + resultatenPerPagina }, params), + }); + }); + } + basisprofiel(kvkNummer, geoData) { + return __awaiter(this, void 0, void 0, function* () { + if (kvkNummer && !KVK.validateKvkNummer(kvkNummer)) + throw new Error('KVK: Ongeldig kvknummer.'); + return yield this.request({ + endpoint: `/v1/basisprofielen/${kvkNummer}`, + params: { + geoData, + }, + }); + }); + } + basisprofielEigenaar(kvkNummer, geoData) { + return __awaiter(this, void 0, void 0, function* () { + if (kvkNummer && !KVK.validateKvkNummer(kvkNummer)) + throw new Error('KVK: Ongeldig kvknummer.'); + return yield this.request({ + endpoint: `/v1/basisprofielen/${kvkNummer}/eigenaar`, + params: { + geoData, + }, + }); + }); + } + basisprofielHoofdvestiging(kvkNummer, geoData) { + return __awaiter(this, void 0, void 0, function* () { + if (kvkNummer && !KVK.validateKvkNummer(kvkNummer)) + throw new Error('KVK: Ongeldig kvknummer.'); + return yield this.request({ + endpoint: `/v1/basisprofielen/${kvkNummer}/hoofdvestiging`, + params: { + geoData, + }, + }); + }); + } + basisprofielVestigingen(kvkNummer) { + return __awaiter(this, void 0, void 0, function* () { + if (kvkNummer && !KVK.validateKvkNummer(kvkNummer)) + throw new Error('KVK: Ongeldig kvknummer.'); + return yield this.request({ + endpoint: `/v1/basisprofielen/${kvkNummer}/vestigingen`, + }); + }); + } + vestigingsprofiel(vestigingsnummer, geoData) { + return __awaiter(this, void 0, void 0, function* () { + if (vestigingsnummer && !KVK.validateVestigingsnummer(vestigingsnummer)) + throw new Error('KVK: Ongeldig vestigingsnummer.'); + return yield this.request({ + endpoint: `/v1/vestigingsprofielen/${vestigingsnummer}`, + params: { + geoData, + }, + }); + }); + } + naamgeving(kvkNummer) { + return __awaiter(this, void 0, void 0, function* () { + if (kvkNummer && !KVK.validateKvkNummer(kvkNummer)) + throw new Error('KVK: Ongeldig kvknummer.'); + return yield this.request({ + endpoint: `/v1/naamgevingen/kvkNummer/${kvkNummer}`, + }); + }); + } +} +exports.KVK = KVK; +exports.default = KVK; diff --git a/dist/cjs/types/index.d.ts b/dist/cjs/types/index.d.ts new file mode 100644 index 0000000..aa9a173 --- /dev/null +++ b/dist/cjs/types/index.d.ts @@ -0,0 +1,61 @@ +/// +import https from 'node:https'; +export declare class KVK { + apiKey: string; + baseUrl: string; + certificate: string; + httpsAgent: https.Agent; + constructor(apiKey: string, baseUrl?: string | null, certificate?: string | null, httpsAgent?: https.Agent | null); + getCertificate(): string; + createHttpsAgent(): https.Agent; + static validateKvkNummer(val: string): boolean; + static validateVestigingsnummer(val: string): boolean; + request({ endpoint, params, headers, }: { + endpoint: string; + params?: object; + headers?: object; + }): Promise; + /** + * @deprecated This function is deprecated and will be removed in a future version. + * The KVK api will stop supporting searching on the V1 endpoint starting 29-07-2024 + * Use [zoekenV2] instead. + */ + zoeken({ kvkNummer, vestigingsnummer, postcode, huisnummer, pagina, aantal, ...params }: { + kvkNummer?: string; + rsin?: string; + vestigingsnummer?: string; + handelsnaam?: string; + straatnaam?: string; + plaats?: string; + postcode?: string; + huisnummer?: string; + huisnummerToevoeging?: string; + type?: 'hoofdvestiging' | 'nevenvestiging' | 'rechtspersoon'; + InclusiefInactieveRegistraties?: boolean; + pagina?: number; + aantal?: number; + }): Promise; + zoekenV2({ kvkNummer, vestigingsnummer, postcode, huisnummer, pagina, resultatenPerPagina, ...params }: { + kvkNummer?: string; + rsin?: string; + vestigingsnummer?: string; + naam?: string; + straatnaam?: string; + plaats?: string; + postcode?: string; + huisnummer?: string; + huisletter?: string; + type?: 'hoofdvestiging' | 'nevenvestiging' | 'rechtspersoon'; + InclusiefInactieveRegistraties?: boolean; + pagina?: number; + resultatenPerPagina?: number; + }): Promise; + basisprofiel(kvkNummer: string, geoData?: boolean): Promise; + basisprofielEigenaar(kvkNummer: string, geoData?: boolean): Promise; + basisprofielHoofdvestiging(kvkNummer: string, geoData?: boolean): Promise; + basisprofielVestigingen(kvkNummer: string): Promise; + vestigingsprofiel(vestigingsnummer: string, geoData?: boolean): Promise; + naamgeving(kvkNummer: string): Promise; +} +export default KVK; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/dist/cjs/types/index.d.ts.map b/dist/cjs/types/index.d.ts.map new file mode 100644 index 0000000..8b52b9d --- /dev/null +++ b/dist/cjs/types/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/index.mjs b/dist/esm/index.mjs new file mode 100644 index 0000000..3c9dccd --- /dev/null +++ b/dist/esm/index.mjs @@ -0,0 +1,168 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import https from 'node:https'; +import crypto from 'node:crypto'; +import fetch from 'node-fetch'; +const BASE_URL = 'https://api.kvk.nl/api'; +const CERTIFICATE_PATH = '../../certs/Private_G1_chain.pem'; +export class KVK { + apiKey; + baseUrl; + certificate; + httpsAgent; + constructor(apiKey, baseUrl, certificate, httpsAgent) { + this.apiKey = apiKey; + this.baseUrl = baseUrl || BASE_URL; + this.certificate = certificate || this.getCertificate(); + this.httpsAgent = httpsAgent || this.createHttpsAgent(); + } + getCertificate() { + const pathToCertificate = path.join(__dirname, CERTIFICATE_PATH); + const certificate = fs.readFileSync(pathToCertificate, { + encoding: 'utf-8', + }); + return certificate; + } + createHttpsAgent() { + const httpsAgent = new https.Agent({ + ca: this.certificate, + secureOptions: crypto.constants.SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION, + }); + return httpsAgent; + } + static validateKvkNummer(val) { + if (val.length !== 8) + return false; + return /^\d+$/.test(val); + } + static validateVestigingsnummer(val) { + if (val.length !== 12) + return false; + return /^\d+$/.test(val); + } + async request({ endpoint, params = {}, headers = {}, }) { + const query = new URLSearchParams({ + ...Object.fromEntries(Object.entries(params).filter(([_, v]) => v != null)), + }).toString(); + const url = this.baseUrl + endpoint + (query ? `?${query}` : ''); + const res = await fetch(url, { + method: 'GET', + headers: { + Accept: 'application/json', + apiKey: this.apiKey, + ...headers, + }, + agent: this.httpsAgent, + }); + const data = await res.json(); + return data; + } + /** + * @deprecated This function is deprecated and will be removed in a future version. + * The KVK api will stop supporting searching on the V1 endpoint starting 29-07-2024 + * Use [zoekenV2] instead. + */ + async zoeken({ kvkNummer, vestigingsnummer, postcode, huisnummer, pagina = 1, aantal = 15, ...params }) { + if (kvkNummer && !KVK.validateKvkNummer(kvkNummer)) + throw new Error('KVK: Ongeldig kvknummer.'); + if (vestigingsnummer && !KVK.validateVestigingsnummer(vestigingsnummer)) + throw new Error('KVK: Ongeldig vestigingsnummer.'); + if ((postcode && !huisnummer) || (huisnummer && !postcode)) + throw new Error('KVK: Postcode en huisnummer mogen alleen in combinatie met elkaar gebruikt worden.'); + if (pagina < 1 || pagina > 1000) + throw new Error('KVK: Pagina is minimaal 1 en maximaal 1000.'); + if (aantal < 1 || aantal > 100) + throw new Error('KVK: Aantal is minimaal 1 en maximaal 100.'); + return await this.request({ + endpoint: '/v1/zoeken', + params: { + kvkNummer, + vestigingsnummer, + postcode, + huisnummer, + pagina, + aantal, + ...params, + }, + }); + } + async zoekenV2({ kvkNummer, vestigingsnummer, postcode, huisnummer, pagina = 1, resultatenPerPagina = 15, ...params }) { + if (kvkNummer && !KVK.validateKvkNummer(kvkNummer)) + throw new Error('KVK: Ongeldig kvknummer.'); + if (vestigingsnummer && !KVK.validateVestigingsnummer(vestigingsnummer)) + throw new Error('KVK: Ongeldig vestigingsnummer.'); + if ((postcode && !huisnummer) || (huisnummer && !postcode)) + throw new Error('KVK: Postcode en huisnummer mogen alleen in combinatie met elkaar gebruikt worden.'); + if (pagina < 1 || pagina > 1000) + throw new Error('KVK: Pagina is minimaal 1 en maximaal 1000.'); + if (resultatenPerPagina < 1 || resultatenPerPagina > 100) + throw new Error('KVK: Aantal is minimaal 1 en maximaal 100.'); + return await this.request({ + endpoint: '/v2/zoeken', + params: { + kvkNummer, + vestigingsnummer, + postcode, + huisnummer, + pagina, + resultatenPerPagina, + ...params, + }, + }); + } + async basisprofiel(kvkNummer, geoData) { + if (kvkNummer && !KVK.validateKvkNummer(kvkNummer)) + throw new Error('KVK: Ongeldig kvknummer.'); + return await this.request({ + endpoint: `/v1/basisprofielen/${kvkNummer}`, + params: { + geoData, + }, + }); + } + async basisprofielEigenaar(kvkNummer, geoData) { + if (kvkNummer && !KVK.validateKvkNummer(kvkNummer)) + throw new Error('KVK: Ongeldig kvknummer.'); + return await this.request({ + endpoint: `/v1/basisprofielen/${kvkNummer}/eigenaar`, + params: { + geoData, + }, + }); + } + async basisprofielHoofdvestiging(kvkNummer, geoData) { + if (kvkNummer && !KVK.validateKvkNummer(kvkNummer)) + throw new Error('KVK: Ongeldig kvknummer.'); + return await this.request({ + endpoint: `/v1/basisprofielen/${kvkNummer}/hoofdvestiging`, + params: { + geoData, + }, + }); + } + async basisprofielVestigingen(kvkNummer) { + if (kvkNummer && !KVK.validateKvkNummer(kvkNummer)) + throw new Error('KVK: Ongeldig kvknummer.'); + return await this.request({ + endpoint: `/v1/basisprofielen/${kvkNummer}/vestigingen`, + }); + } + async vestigingsprofiel(vestigingsnummer, geoData) { + if (vestigingsnummer && !KVK.validateVestigingsnummer(vestigingsnummer)) + throw new Error('KVK: Ongeldig vestigingsnummer.'); + return await this.request({ + endpoint: `/v1/vestigingsprofielen/${vestigingsnummer}`, + params: { + geoData, + }, + }); + } + async naamgeving(kvkNummer) { + if (kvkNummer && !KVK.validateKvkNummer(kvkNummer)) + throw new Error('KVK: Ongeldig kvknummer.'); + return await this.request({ + endpoint: `/v1/naamgevingen/kvkNummer/${kvkNummer}`, + }); + } +} +export default KVK; diff --git a/dist/esm/types/index.d.ts b/dist/esm/types/index.d.ts new file mode 100644 index 0000000..aa9a173 --- /dev/null +++ b/dist/esm/types/index.d.ts @@ -0,0 +1,61 @@ +/// +import https from 'node:https'; +export declare class KVK { + apiKey: string; + baseUrl: string; + certificate: string; + httpsAgent: https.Agent; + constructor(apiKey: string, baseUrl?: string | null, certificate?: string | null, httpsAgent?: https.Agent | null); + getCertificate(): string; + createHttpsAgent(): https.Agent; + static validateKvkNummer(val: string): boolean; + static validateVestigingsnummer(val: string): boolean; + request({ endpoint, params, headers, }: { + endpoint: string; + params?: object; + headers?: object; + }): Promise; + /** + * @deprecated This function is deprecated and will be removed in a future version. + * The KVK api will stop supporting searching on the V1 endpoint starting 29-07-2024 + * Use [zoekenV2] instead. + */ + zoeken({ kvkNummer, vestigingsnummer, postcode, huisnummer, pagina, aantal, ...params }: { + kvkNummer?: string; + rsin?: string; + vestigingsnummer?: string; + handelsnaam?: string; + straatnaam?: string; + plaats?: string; + postcode?: string; + huisnummer?: string; + huisnummerToevoeging?: string; + type?: 'hoofdvestiging' | 'nevenvestiging' | 'rechtspersoon'; + InclusiefInactieveRegistraties?: boolean; + pagina?: number; + aantal?: number; + }): Promise; + zoekenV2({ kvkNummer, vestigingsnummer, postcode, huisnummer, pagina, resultatenPerPagina, ...params }: { + kvkNummer?: string; + rsin?: string; + vestigingsnummer?: string; + naam?: string; + straatnaam?: string; + plaats?: string; + postcode?: string; + huisnummer?: string; + huisletter?: string; + type?: 'hoofdvestiging' | 'nevenvestiging' | 'rechtspersoon'; + InclusiefInactieveRegistraties?: boolean; + pagina?: number; + resultatenPerPagina?: number; + }): Promise; + basisprofiel(kvkNummer: string, geoData?: boolean): Promise; + basisprofielEigenaar(kvkNummer: string, geoData?: boolean): Promise; + basisprofielHoofdvestiging(kvkNummer: string, geoData?: boolean): Promise; + basisprofielVestigingen(kvkNummer: string): Promise; + vestigingsprofiel(vestigingsnummer: string, geoData?: boolean): Promise; + naamgeving(kvkNummer: string): Promise; +} +export default KVK; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/dist/esm/types/index.d.ts.map b/dist/esm/types/index.d.ts.map new file mode 100644 index 0000000..8b52b9d --- /dev/null +++ b/dist/esm/types/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 440abb3..f336743 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@quantix-ict/kvk", - "version": "1.1.2", + "version": "1.1.5", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@quantix-ict/kvk", - "version": "1.1.2", + "version": "1.1.5", "license": "ISC", "dependencies": { "node-fetch": "^2.6.7" diff --git a/package.json b/package.json index 19284a5..56395f5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@quantix-ict/kvk", - "version": "1.1.5", + "version": "1.2.2", "description": "Package for KvK (Quantix)", "exports": { ".": { diff --git a/src/index.ts b/src/index.ts index 284eab1..7b256b4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,7 +4,7 @@ import https from 'node:https' import crypto from 'node:crypto' import fetch from 'node-fetch' -const BASE_URL = 'https://api.kvk.nl/api/v1' +const BASE_URL = 'https://api.kvk.nl/api' const CERTIFICATE_PATH = '../../certs/Private_G1_chain.pem' export class KVK { @@ -15,7 +15,7 @@ export class KVK { constructor( apiKey: string, - baseUrl: string | null, + baseUrl?: string | null, certificate?: string | null, httpsAgent?: https.Agent | null ) { @@ -81,7 +81,12 @@ export class KVK { return data } - + + /** + * @deprecated This function is deprecated and will be removed in a future version. + * The KVK api will stop supporting searching on the V1 endpoint starting 29-07-2024 + * Use [zoekenV2] instead. + */ async zoeken({ kvkNummer, vestigingsnummer, @@ -123,7 +128,7 @@ export class KVK { throw new Error('KVK: Aantal is minimaal 1 en maximaal 100.') return await this.request({ - endpoint: '/zoeken', + endpoint: '/v1/zoeken', params: { kvkNummer, vestigingsnummer, @@ -136,12 +141,66 @@ export class KVK { }) } + async zoekenV2({ + kvkNummer, + vestigingsnummer, + postcode, + huisnummer, + pagina = 1, + resultatenPerPagina = 15, + ...params + }: { + kvkNummer?: string + rsin?: string + vestigingsnummer?: string + naam?: string + straatnaam?: string + plaats?: string + postcode?: string + huisnummer?: string + huisletter?: string + type?: 'hoofdvestiging' | 'nevenvestiging' | 'rechtspersoon' + InclusiefInactieveRegistraties?: boolean + pagina?: number + resultatenPerPagina?: number + }): Promise { + if (kvkNummer && !KVK.validateKvkNummer(kvkNummer)) + throw new Error('KVK: Ongeldig kvknummer.') + + if (vestigingsnummer && !KVK.validateVestigingsnummer(vestigingsnummer)) + throw new Error('KVK: Ongeldig vestigingsnummer.') + + if ((postcode && !huisnummer) || (huisnummer && !postcode)) + throw new Error( + 'KVK: Postcode en huisnummer mogen alleen in combinatie met elkaar gebruikt worden.' + ) + + if (pagina < 1 || pagina > 1000) + throw new Error('KVK: Pagina is minimaal 1 en maximaal 1000.') + + if (resultatenPerPagina < 1 || resultatenPerPagina > 100) + throw new Error('KVK: Aantal is minimaal 1 en maximaal 100.') + + return await this.request({ + endpoint: '/v2/zoeken', + params: { + kvkNummer, + vestigingsnummer, + postcode, + huisnummer, + pagina, + resultatenPerPagina, + ...params, + }, + }) + } + async basisprofiel(kvkNummer: string, geoData?: boolean): Promise { if (kvkNummer && !KVK.validateKvkNummer(kvkNummer)) throw new Error('KVK: Ongeldig kvknummer.') return await this.request({ - endpoint: `/basisprofielen/${kvkNummer}`, + endpoint: `/v1/basisprofielen/${kvkNummer}`, params: { geoData, }, @@ -156,7 +215,7 @@ export class KVK { throw new Error('KVK: Ongeldig kvknummer.') return await this.request({ - endpoint: `/basisprofielen/${kvkNummer}/eigenaar`, + endpoint: `/v1/basisprofielen/${kvkNummer}/eigenaar`, params: { geoData, }, @@ -171,7 +230,7 @@ export class KVK { throw new Error('KVK: Ongeldig kvknummer.') return await this.request({ - endpoint: `/basisprofielen/${kvkNummer}/hoofdvestiging`, + endpoint: `/v1/basisprofielen/${kvkNummer}/hoofdvestiging`, params: { geoData, }, @@ -183,7 +242,7 @@ export class KVK { throw new Error('KVK: Ongeldig kvknummer.') return await this.request({ - endpoint: `/basisprofielen/${kvkNummer}/vestigingen`, + endpoint: `/v1/basisprofielen/${kvkNummer}/vestigingen`, }) } @@ -195,7 +254,7 @@ export class KVK { throw new Error('KVK: Ongeldig vestigingsnummer.') return await this.request({ - endpoint: `/vestigingsprofielen/${vestigingsnummer}`, + endpoint: `/v1/vestigingsprofielen/${vestigingsnummer}`, params: { geoData, }, @@ -207,7 +266,7 @@ export class KVK { throw new Error('KVK: Ongeldig kvknummer.') return await this.request({ - endpoint: `/naamgevingen/kvkNummer/${kvkNummer}`, + endpoint: `/v1/naamgevingen/kvkNummer/${kvkNummer}`, }) } }