diff --git a/go.mod b/go.mod index 458f4d5..7c32cb8 100644 --- a/go.mod +++ b/go.mod @@ -3,24 +3,27 @@ module git.selly.red/Selly-Modules/3pl go 1.17 require ( + git.selly.red/Selly-Modules/logger v0.0.2-0.20221010053254-567df039afdb + git.selly.red/Selly-Modules/natsio v1.0.2-0.20221010041139-c11419a3ad33 github.com/nats-io/nats.go v1.17.0 github.com/thoas/go-funk v0.9.2 ) require ( - git.selly.red/Selly-Modules/logger v0.0.2-0.20221010053254-567df039afdb // indirect - git.selly.red/Selly-Modules/natsio v1.0.2-0.20221010041139-c11419a3ad33 // indirect github.com/armon/go-radix v1.0.0 // indirect github.com/elastic/go-licenser v0.4.1 // indirect github.com/elastic/go-sysinfo v1.1.1 // indirect github.com/elastic/go-windows v1.0.1 // indirect + github.com/golang/snappy v0.0.3 // indirect github.com/jcchavezs/porto v0.4.0 // indirect github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901 // indirect + github.com/klauspost/compress v1.13.6 // indirect github.com/nats-io/nkeys v0.3.0 // indirect github.com/nats-io/nuid v1.0.1 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/procfs v0.0.0-20190425082905-87a4384529e0 // indirect github.com/santhosh-tekuri/jsonschema v1.2.4 // indirect + github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect go.elastic.co/apm v1.15.0 // indirect go.elastic.co/apm/module/apmzap v1.15.0 // indirect go.elastic.co/fastjson v1.1.0 // indirect diff --git a/go.sum b/go.sum index 0227907..dbbf8f5 100644 --- a/go.sum +++ b/go.sum @@ -1,9 +1,5 @@ -git.selly.red/Selly-Modules/logger v0.0.1 h1:dwLLtW53FfVBlklhdtFRB63eP0ofIh0IUQ/Gjgi0r5k= -git.selly.red/Selly-Modules/logger v0.0.1/go.mod h1:RWhSQ3F01an8KD00VjzRBZOMcE5eV2Cy0/l4ZkeieyU= git.selly.red/Selly-Modules/logger v0.0.2-0.20221010053254-567df039afdb h1:AmcYd88IcdSkH+NEvKyJLT7psidSkjJQT/nAg/KuzFk= git.selly.red/Selly-Modules/logger v0.0.2-0.20221010053254-567df039afdb/go.mod h1:Q1//Z6HRmfa7VyjH2J6YyT0YV2jT8+K6SIgwnYuS4II= -git.selly.red/Selly-Modules/natsio v1.0.2-0.20220826163751-df340fefda0a h1:QmJ8iqksbU+1vUa2SijsAMSLnw1C5X4R8PYjuNPNCCE= -git.selly.red/Selly-Modules/natsio v1.0.2-0.20220826163751-df340fefda0a/go.mod h1:q9dqmiMyl9MUVYZsvAWDI85083rnLEGAEFfYajLOLUU= git.selly.red/Selly-Modules/natsio v1.0.2-0.20221010041139-c11419a3ad33 h1:GvQjelaV4XZm++AOihYAKOD6k9510aMAr6B6MGnrXPs= git.selly.red/Selly-Modules/natsio v1.0.2-0.20221010041139-c11419a3ad33/go.mod h1:KNODhfeBqxRmHHQHHU+p3JfH42t8s5aNxfgr6X8fr6g= github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= @@ -13,13 +9,11 @@ github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZx github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/elastic/go-licenser v0.3.1 h1:RmRukU/JUmts+rpexAw0Fvt2ly7VVu6mw8z4HrEzObU= github.com/elastic/go-licenser v0.3.1/go.mod h1:D8eNQk70FOCVBl3smCGQt/lv7meBeQno2eI1S5apiHQ= github.com/elastic/go-licenser v0.4.1 h1:1xDURsc8pL5zYT9R29425J3vkHdt4RT5TNEMeRN48x4= github.com/elastic/go-licenser v0.4.1/go.mod h1:V56wHMpmdURfibNBggaSBfqgPxyT1Tldns1i87iTEvU= github.com/elastic/go-sysinfo v1.1.1 h1:ZVlaLDyhVkDfjwPGU55CQRCRolNpc7P0BbyhhQZQmMI= github.com/elastic/go-sysinfo v1.1.1/go.mod h1:i1ZYdU10oLNfRzq4vq62BEwD2fH8KaWh6eh0ikPT9F0= -github.com/elastic/go-windows v1.0.0 h1:qLURgZFkkrYyTTkvYpsZIgf83AUsdIHfvlJaqaZ7aSY= github.com/elastic/go-windows v1.0.0/go.mod h1:TsU0Nrp7/y3+VwE82FoZF8gC/XFg/Elz6CcloAxnPgU= github.com/elastic/go-windows v1.0.1 h1:AlYZOldA+UJ0/2nBuqWdo90GFCgG9xuyw9SYzGUtJm0= github.com/elastic/go-windows v1.0.1/go.mod h1:FoVvqWSun28vaDQPbj2Elfc0JahhPB7WQEGa3c814Ss= @@ -33,6 +27,7 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -40,7 +35,6 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/jcchavezs/porto v0.1.0 h1:Xmxxn25zQMmgE7/yHYmh19KcItG81hIwfbEEFnd6w/Q= github.com/jcchavezs/porto v0.1.0/go.mod h1:fESH0gzDHiutHRdX2hv27ojnOVFco37hg1W6E9EZF4A= github.com/jcchavezs/porto v0.4.0 h1:Zj7RligrxmDdKGo6fBO2xYAHxEgrVBfs1YAja20WbV4= github.com/jcchavezs/porto v0.4.0/go.mod h1:fESH0gzDHiutHRdX2hv27ojnOVFco37hg1W6E9EZF4A= @@ -55,6 +49,7 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/minio/highwayhash v1.0.1 h1:dZ6IIu8Z14VlC0VpfKofAhCy74wu/Qb5gcn52yWoz/0= github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= +github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/nats-io/jwt v1.2.2 h1:w3GMTO969dFg+UOKTmmyuu7IGdusK+7Ytlt//OYH/uU= github.com/nats-io/jwt v1.2.2/go.mod h1:/xX356yQA6LuXI9xWW7mZNpxgF2mBmGecH+Fj34sP5Q= @@ -63,7 +58,6 @@ github.com/nats-io/jwt/v2 v2.0.3/go.mod h1:VRP+deawSXyhNjXmxPCHskrR6Mq50BqpEI5SE github.com/nats-io/nats-server/v2 v2.6.1 h1:cJy+ia7/4EaJL+ZYDmIy2rD1mDWTfckhtPBU0GYo8xM= github.com/nats-io/nats-server/v2 v2.6.1/go.mod h1:Az91TbZiV7K4a6k/4v6YYdOKEoxCXj+iqhHVf/MlrKo= github.com/nats-io/nats.go v1.12.3/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= -github.com/nats-io/nats.go v1.13.0 h1:LvYqRB5epIzZWQp6lmeltOOZNLqCvm4b+qfvzZO03HE= github.com/nats-io/nats.go v1.13.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= github.com/nats-io/nats.go v1.17.0 h1:1jp5BThsdGlN91hW0k3YEfJbfACjiOYtUiLXG0RL4IE= github.com/nats-io/nats.go v1.17.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= @@ -88,22 +82,24 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/thoas/go-funk v0.9.1 h1:O549iLZqPpTUQ10ykd26sZhzD+rmR5pWhuElrhbC20M= github.com/thoas/go-funk v0.9.1/go.mod h1:+IWnUfUmFO1+WVYQWQtIJHeRRdaIyyYglZN7xzUPe4Q= github.com/thoas/go-funk v0.9.2 h1:oKlNYv0AY5nyf9g+/GhMgS/UO2ces0QRdPKwkhY3VCk= github.com/thoas/go-funk v0.9.2/go.mod h1:+IWnUfUmFO1+WVYQWQtIJHeRRdaIyyYglZN7xzUPe4Q= +github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E= github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= +github.com/xdg-go/stringprep v1.0.3 h1:kdwGpVNwPFtjs98xCGkHjQtGKh86rDcRZN17QEMCOIs= github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.elastic.co/apm v1.13.1 h1:ICIcUcQOImg/bve9mQVyLCvm1cSUZ1afdwK6ACnxczU= go.elastic.co/apm v1.13.1/go.mod h1:dylGv2HKR0tiCV+wliJz1KHtDyuD8SPe69oV7VyK6WY= go.elastic.co/apm v1.15.0 h1:uPk2g/whK7c7XiZyz/YCUnAUBNPiyNeE3ARX3G6Gx7Q= go.elastic.co/apm v1.15.0/go.mod h1:dylGv2HKR0tiCV+wliJz1KHtDyuD8SPe69oV7VyK6WY= -go.elastic.co/apm/module/apmzap v1.13.1 h1:Soa4vNYYabPvOW1vm1A00C0UcEmfEzcx3YBjAgf5ue4= go.elastic.co/apm/module/apmzap v1.13.1/go.mod h1:Tu8/TwffpBoNGmI05VcL1Ye2AC8oXrlMKNaKD1TIQy0= go.elastic.co/apm/module/apmzap v1.15.0 h1:SjXslnImV3jaK2BtNqRl994H9mpG8+6qqPAahbzwIys= go.elastic.co/apm/module/apmzap v1.15.0/go.mod h1:eowOIqa+vS+BZ9YOCztd8poYGxSxXh8YfVuOHTMhKQs= @@ -117,7 +113,6 @@ go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -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/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= @@ -132,13 +127,11 @@ golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d h1:sK3txAijHtOK88l68nt020reeT1ZdKLIYetKl95FzVY= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5 h1:2M3HP5CCK1Si9FQhwnzYhXdG6DXeebvUHFpre8QvbyI= golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.5.1 h1:OJxoQ/rynoF0dcCdI7cLPktw/hR2cueqYfjm43oqK38= @@ -153,6 +146,7 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -162,7 +156,6 @@ golang.org/x/sys v0.0.0-20191025021431-6c3a3bfe00ae/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 h1:SrN+KX8Art/Sf4HNj6Zcz06G7VEz+7w9tdXTPOZ7+l4= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211102192858-4dd72447c267 h1:7zYaz3tjChtpayGDzu6H0hDAUM5zIGA2XW7kRNgQ0jc= @@ -171,6 +164,7 @@ golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9sn golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1 h1:NusfzzA6yGQ+ua51ck7E3omNUX/JuqbFSaRGqU8CcLI= golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -179,13 +173,11 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5 h1:MeC2gMlMdkd67dn17MEby3rGXRxZtWeiRXOnISfTQ74= golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.1.7 h1:6j8CgantCy3yc8JGBqkDLMKWqZ0RDU2g1HVgacojGWQ= golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= 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 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -210,7 +202,6 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -howett.net/plist v0.0.0-20181124034731-591f970eefbb h1:jhnBjNi9UFpfpl8YZhA9CrOqpnJdvzuiHsl/dnxl11M= howett.net/plist v0.0.0-20181124034731-591f970eefbb/go.mod h1:vMygbs4qMhSZSc4lCUl2OEE+rDiIIJAIdR4m7MiMcm0= howett.net/plist v1.0.0 h1:7CrbWYbPPO/PyNy38b2EB/+gYbjCe2DXBxgtOOZbSQM= howett.net/plist v1.0.0/go.mod h1:lqaXoTrLY4hg8tnEzNru53gicrbv7rrk+2xJA/7hw9g= diff --git a/partnerapi/globalcare/globale_care.go b/partnerapi/globalcare/globale_care.go index aaf9815..d3cf669 100644 --- a/partnerapi/globalcare/globale_care.go +++ b/partnerapi/globalcare/globale_care.go @@ -18,6 +18,7 @@ import ( "github.com/thoas/go-funk" "git.selly.red/Selly-Modules/3pl/util/base64" + "git.selly.red/Selly-Modules/3pl/util/httputil" "git.selly.red/Selly-Modules/3pl/util/pjson" ) @@ -72,7 +73,7 @@ func (c *Client) CreateOrder(data CreateOrderPayload) (*CreateOrderResponseDecod Method: http.MethodPost, Data: pjson.ToJSONString(body), Header: map[string]string{ - "Content-Type": "application/json", + httputil.HeaderKeyContentType: httputil.HeaderValueApplicationJSON, }, }, } diff --git a/partnerapi/globalcare/model_request.go b/partnerapi/globalcare/model_request.go index 2da031f..3b3b258 100644 --- a/partnerapi/globalcare/model_request.go +++ b/partnerapi/globalcare/model_request.go @@ -1,7 +1,6 @@ package globalcare import ( - "encoding/json" "time" ) @@ -41,20 +40,7 @@ type VehicleInfo struct { // CarOccupantAccidentInsuranceObj ... type CarOccupantAccidentInsuranceObj struct { NumberOfSeats int `json:"numberOfSeats"` -} - -func (c *CarOccupantAccidentInsuranceObj) MarshalJSON() ([]byte, error) { - buy := 1 - if c.NumberOfSeats <= 0 { - buy = 2 - } - return json.Marshal(&struct { - Buy int `json:"buy"` - NumberOfSeats int `json:"numberOfSeats"` - }{ - Buy: buy, - NumberOfSeats: c.NumberOfSeats, - }) + Buy int `json:"buy"` } // InsuredInfo ... diff --git a/partnerapi/onpoint/const.go b/partnerapi/onpoint/const.go new file mode 100644 index 0000000..e9573bc --- /dev/null +++ b/partnerapi/onpoint/const.go @@ -0,0 +1,37 @@ +package onpoint + +const ( + PaymentMethodCOD = "cod" + PaymentMethodBankTransfer = "bank_transfer" + PaymentMethodWallet = "wallet" +) + +const ( + CodeSuccess = "SUCCESS" + + TimeLayout = "2006-01-02T15:04:05Z" +) + +const ( + baseURLStaging = "https://dev-selly-api.onpoint.vn" + baseURLProd = "https://selly-api.onpoint.vn" + + apiPathCreateOrder = "/v1/orders/create" + apiPathUpdateDelivery = "/v1/orders/update_delivery" + apiPathCancelOrder = "/v1/orders/cancel" + apiPathGetChannels = "/v1/channels" + + headerXAPIKey = "x-api-key" + headerXTimestamp = "x-timestamp" + headerXSignature = "x-signature" + + webhookEventUpdateOrderStatus = "UPDATE_ORDER_STATUS" + webhookEventUpdateInventory = "update_inventory" +) + +var ( + baseURLENVMapping = map[ENV]string{ + EnvProd: baseURLProd, + EnvStaging: baseURLStaging, + } +) diff --git a/partnerapi/onpoint/env.go b/partnerapi/onpoint/env.go new file mode 100644 index 0000000..ebcc363 --- /dev/null +++ b/partnerapi/onpoint/env.go @@ -0,0 +1,9 @@ +package onpoint + +// ENV ... +type ENV string + +const ( + EnvStaging ENV = "STAGING" + EnvProd ENV = "PROD" +) diff --git a/partnerapi/onpoint/error.go b/partnerapi/onpoint/error.go new file mode 100644 index 0000000..445d921 --- /dev/null +++ b/partnerapi/onpoint/error.go @@ -0,0 +1,25 @@ +package onpoint + +import ( + "fmt" + "strings" +) + +// Error ... +type Error struct { + Message string `json:"message"` + Code string `json:"code"` + Errors map[string][]string `json:"errors"` +} + +// Error ... +func (e Error) Error() string { + msg := fmt.Sprintf("onpoint_err: code %s, message: %s", e.Code, e.Message) + if len(e.Errors) > 0 { + msg += "\ndetail: " + for k, v := range e.Errors { + msg += fmt.Sprintf("field %s - error %s", k, strings.Join(v, ",")) + } + } + return msg +} diff --git a/partnerapi/onpoint/model_request.go b/partnerapi/onpoint/model_request.go new file mode 100644 index 0000000..708f349 --- /dev/null +++ b/partnerapi/onpoint/model_request.go @@ -0,0 +1,109 @@ +package onpoint + +import ( + "time" + + "git.selly.red/Selly-Modules/3pl/util/pjson" +) + +/* + * Request payload + */ + +// CreateOrderRequest ... +type CreateOrderRequest struct { + OrderCode string `json:"order_code"` + OrderDate time.Time `json:"order_date"` + PickupLocationCode string `json:"pickup_location_code"` + Note string `json:"note"` + SubtotalPrice int `json:"subtotal_price"` + TotalDiscounts int `json:"total_discounts"` + TotalPrice int `json:"total_price"` + PaymentMethod string `json:"payment_method"` + Items []OrderItem `json:"items"` +} + +// OrderItem ... +type OrderItem struct { + SellingPrice int `json:"selling_price"` + Quantity int `json:"quantity"` + Uom string `json:"uom"` + Amount int `json:"amount"` + Name string `json:"name"` + PartnerSku string `json:"sku"` + DiscountPrice int `json:"discount_price"` +} + +// UpdateOrderDeliveryRequest ... +type UpdateOrderDeliveryRequest struct { + OrderCode string `json:"order_code"` // required + DeliveryPlatform string `json:"delivery_platform"` // required + DeliveryTrackingNumber string `json:"delivery_tracking_number"` + DeliveryStatus string `json:"delivery_status"` + ShippingLabel string `json:"shipping_label"` +} + +// CancelOrderRequest ... +type CancelOrderRequest struct { + OrderNo string `json:"order_code"` +} + +/** + * WEBHOOK ONPOINT + */ + +// WebhookDataUpdateInventory ... +type WebhookDataUpdateInventory struct { + Sku string `json:"sku"` + PartnerSku string `json:"partner_sku"` + WarehouseCode string `json:"warehouse_code"` + AvailableQuantity int `json:"available_quantity"` + CommittedQuantity int `json:"committed_quantity"` + TotalQuantity int `json:"total_quantity"` + UpdatedAt string `json:"updated_at"` +} + +// WebhookDataUpdateOrderStatus ... +type WebhookDataUpdateOrderStatus struct { + OrderCode string `json:"order_code"` + OnpointOrderCode string `json:"onpoint_order_code"` + Status string `json:"status"` + UpdatedAt string `json:"updated_at"` +} + +// WebhookPayload ... +type WebhookPayload struct { + Event string `json:"event"` + RequestedAt time.Time `json:"requested_at"` + Payload interface{} `json:"payload"` +} + +// GetDataEventUpdateOrderStatus ... +func (p WebhookPayload) GetDataEventUpdateOrderStatus() (data *WebhookDataUpdateOrderStatus, ok bool) { + if p.Event != webhookEventUpdateOrderStatus { + return nil, false + } + b, err := pjson.Marshal(p.Payload) + if err != nil { + return nil, false + } + if err = pjson.Unmarshal(b, &data); err != nil { + return nil, false + } + return data, true +} + +// GetDataEventUpdateInventory ... +func (p WebhookPayload) GetDataEventUpdateInventory() (data *WebhookDataUpdateInventory, ok bool) { + if p.Event != webhookEventUpdateInventory { + return nil, false + } + b, err := pjson.Marshal(p.Payload) + if err != nil { + return nil, false + } + if err = pjson.Unmarshal(b, &data); err != nil { + return nil, false + } + return data, true +} diff --git a/partnerapi/onpoint/model_response.go b/partnerapi/onpoint/model_response.go new file mode 100644 index 0000000..6ed84e0 --- /dev/null +++ b/partnerapi/onpoint/model_response.go @@ -0,0 +1,36 @@ +package onpoint + +// CreateOrderResponse ... +type CreateOrderResponse struct { + OrderCode string `json:"order_code"` + OnpointOrderCode string `json:"onpoint_order_code"` + OrderDate string `json:"order_date"` + Note string `json:"note"` + SubtotalPrice int `json:"subtotal_price"` + TotalDiscounts int `json:"total_discounts"` + TotalPrice int `json:"total_price"` + PaymentMethod string `json:"payment_method"` + DeliveryPlatform string `json:"delivery_platform"` + Status string `json:"status"` + UpdatedAt string `json:"updated_at"` + Items []OrderItem `json:"items"` +} + +// UpdateOrderDeliveryResponse ... +type UpdateOrderDeliveryResponse struct { + DeliveryPlatform string `json:"delivery_platform"` + DeliveryTrackingNumber string `json:"delivery_tracking_number"` + ShippingLabel string `json:"shipping_label"` +} + +// CancelOrderResponse ... +type CancelOrderResponse struct { + OrderNo string `json:"order_no"` + Status string `json:"status"` +} + +// ChannelResponse ... +type ChannelResponse struct { + Code string `json:"code"` + Name string `json:"name"` +} diff --git a/partnerapi/onpoint/onpoint.go b/partnerapi/onpoint/onpoint.go new file mode 100644 index 0000000..c1f0cf1 --- /dev/null +++ b/partnerapi/onpoint/onpoint.go @@ -0,0 +1,186 @@ +package onpoint + +import ( + "errors" + "fmt" + "net/http" + "strconv" + "strings" + "time" + + "git.selly.red/Selly-Modules/natsio" + "git.selly.red/Selly-Modules/natsio/model" + "git.selly.red/Selly-Modules/natsio/subject" + + "git.selly.red/Selly-Modules/3pl/util/httputil" + "git.selly.red/Selly-Modules/3pl/util/pjson" +) + +// Client ... +type Client struct { + env ENV + apiKey string + secretKey string + natsClient natsio.Server +} + +// NewClient generate OnPoint client +func NewClient(env ENV, apiKey, secretKey string, nc natsio.Server) (*Client, error) { + if apiKey == "" { + return nil, errors.New("onpoint: cannot init with empty api key") + } + return &Client{ + env: env, + apiKey: apiKey, + secretKey: secretKey, + natsClient: nc, + }, nil +} + +// CreateOrder ... +func (c *Client) CreateOrder(p CreateOrderRequest) (*CreateOrderResponse, error) { + url := c.getBaseURL() + apiPathCreateOrder + natsPayload := model.CommunicationRequestHttp{ + ResponseImmediately: true, + Payload: model.HttpRequest{ + URL: url, + Method: http.MethodPost, + Data: pjson.ToJSONString(p), + }, + } + var ( + r model.CommunicationHttpResponse + errRes Error + dataRes struct { + Code string `json:"code"` + Data CreateOrderResponse `json:"data"` + } + ) + if err := c.requestHttpViaNats(natsPayload, &r); err != nil { + return nil, err + } + res := r.Response + if res == nil { + return nil, fmt.Errorf("onpoint.Client.CreateOrder: empty_response") + } + if res.StatusCode >= http.StatusBadRequest { + if err := r.ParseResponseData(&errRes); err != nil { + return nil, fmt.Errorf("onpoint.Client.CreateOrder: parse_response_err: %v", err) + } + return nil, errRes + } + if err := r.ParseResponseData(&dataRes); err != nil { + return nil, fmt.Errorf("onpoint.Client.CreateOrder: parse_response_data: %v", err) + } + + return &dataRes.Data, nil +} + +// UpdateDelivery ... +func (c *Client) UpdateDelivery(p UpdateOrderDeliveryRequest) (*UpdateOrderDeliveryResponse, error) { + url := c.getBaseURL() + apiPathUpdateDelivery + natsPayload := model.CommunicationRequestHttp{ + ResponseImmediately: true, + Payload: model.HttpRequest{ + URL: url, + Method: http.MethodPost, + Data: pjson.ToJSONString(p), + }, + } + var ( + r model.CommunicationHttpResponse + errRes Error + dataRes struct { + Data UpdateOrderDeliveryResponse `json:"data"` + } + ) + if err := c.requestHttpViaNats(natsPayload, &r); err != nil { + return nil, err + } + res := r.Response + if res == nil { + return nil, fmt.Errorf("onpoint.Client.UpdateDelivery: empty_response") + } + if res.StatusCode >= http.StatusBadRequest { + if err := r.ParseResponseData(&errRes); err != nil { + return nil, fmt.Errorf("onpoint.Client.UpdateDelivery: parse_response_err: %v", err) + } + return nil, errRes + } + if err := r.ParseResponseData(&dataRes); err != nil { + return nil, fmt.Errorf("onpoint.Client.UpdateDelivery: parse_response_data: %v", err) + } + + return &dataRes.Data, nil +} + +// CancelOrder ... +func (c *Client) CancelOrder(p CancelOrderRequest) (*CancelOrderResponse, error) { + url := c.getBaseURL() + apiPathCancelOrder + natsPayload := model.CommunicationRequestHttp{ + ResponseImmediately: true, + Payload: model.HttpRequest{ + URL: url, + Method: http.MethodPost, + Data: pjson.ToJSONString(p), + }, + } + var ( + r model.CommunicationHttpResponse + errRes Error + dataRes struct { + Data CancelOrderResponse `json:"data"` + } + ) + if err := c.requestHttpViaNats(natsPayload, &r); err != nil { + return nil, err + } + res := r.Response + if res == nil { + return nil, fmt.Errorf("onpoint.Client.CancelOrder: empty_response") + } + if res.StatusCode >= http.StatusBadRequest { + if err := r.ParseResponseData(&errRes); err != nil { + return nil, fmt.Errorf("onpoint.Client.CancelOrder: parse_response_err: %v", err) + } + return nil, errRes + } + if err := r.ParseResponseData(&dataRes); err != nil { + return nil, fmt.Errorf("onpoint.Client.CancelOrder: parse_response_data: %v", err) + } + + return &dataRes.Data, nil +} + +func (c *Client) requestHttpViaNats(data model.CommunicationRequestHttp, res interface{}) error { + ec, err := c.natsClient.NewJSONEncodedConn() + if err != nil { + return fmt.Errorf("onpoint: request via nats %v", err) + } + qs := "" + for k, v := range data.Payload.Query { + qs += k + "=" + v + } + now := time.Now().Unix() + ts := strconv.FormatInt(now, 10) + arr := []string{ + qs, + data.Payload.Data, + ts, + } + s := strings.Join(arr, ".") + // sign data + sign := hashSHA256AndUppercase(s, c.secretKey) + data.Payload.Header = map[string]string{ + headerXAPIKey: c.apiKey, + headerXSignature: sign, + headerXTimestamp: ts, + httputil.HeaderKeyContentType: httputil.HeaderValueApplicationJSON, + } + + return ec.Request(subject.Communication.RequestHTTP, data, res) +} + +func (c *Client) getBaseURL() string { + return baseURLENVMapping[c.env] +} diff --git a/partnerapi/onpoint/status.go b/partnerapi/onpoint/status.go new file mode 100644 index 0000000..96cc880 --- /dev/null +++ b/partnerapi/onpoint/status.go @@ -0,0 +1,17 @@ +package onpoint + +const ( + OrderStatusNew = "new" + OrderStatusPendingWarehouse = "pending_warehouse" + OrderStatusWhProcessing = "wh_processing" + OrderStatusWhCompleted = "wh_completed" + OrderStatusDlPending = "dl_pending" + OrderStatusDlIntransit = "dl_intransit" + OrderStatusDLDelivered = "dl_delivered" + OrderStatusDLReturning = "dl_returning" + OrderStatusReturned = "returned" + OrderStatusPartialCancelled = "partial_cancelled" + OrderStatusCancelled = "cancelled" + OrderStatusCompleted = "completed" + OrderStatusUnknown = "unknown" +) diff --git a/partnerapi/onpoint/util.go b/partnerapi/onpoint/util.go new file mode 100644 index 0000000..1e0ee51 --- /dev/null +++ b/partnerapi/onpoint/util.go @@ -0,0 +1,18 @@ +package onpoint + +import ( + "crypto/hmac" + "crypto/sha256" + "encoding/hex" + "strings" +) + +func hashSHA256(data, key string) string { + h := hmac.New(sha256.New, []byte(key)) + h.Write([]byte(data)) + return hex.EncodeToString(h.Sum(nil)) +} + +func hashSHA256AndUppercase(data, key string) string { + return strings.ToUpper(hashSHA256(data, key)) +} diff --git a/partnerapi/tnc/tnc.go b/partnerapi/tnc/tnc.go index a0b00cd..0df0e74 100644 --- a/partnerapi/tnc/tnc.go +++ b/partnerapi/tnc/tnc.go @@ -12,6 +12,7 @@ import ( "git.selly.red/Selly-Modules/natsio/subject" "github.com/nats-io/nats.go" + "git.selly.red/Selly-Modules/3pl/util/httputil" "git.selly.red/Selly-Modules/3pl/util/pjson" ) @@ -230,7 +231,7 @@ func (c *Client) auth() (*authRes, error) { body := v.Encode() header := map[string]string{ - "Content-Type": "application/x-www-form-urlencoded", + httputil.HeaderKeyContentType: httputil.HeaderValueApplicationURLEncoded, } apiURL := baseURLAuthENVMapping[c.env] + fmt.Sprintf(apiPathAuth, c.realm) natsPayload := model.CommunicationRequestHttp{ @@ -276,7 +277,7 @@ func (c *Client) auth() (*authRes, error) { func (c *Client) getRequestHeader() map[string]string { m := map[string]string{ - "Content-Type": "application/json", + httputil.HeaderKeyContentType: httputil.HeaderValueApplicationJSON, } token, err := c.getToken() if err != nil { diff --git a/util/httputil/const.go b/util/httputil/const.go new file mode 100644 index 0000000..c708838 --- /dev/null +++ b/util/httputil/const.go @@ -0,0 +1,8 @@ +package httputil + +const ( + HeaderKeyContentType = "Content-Type" + + HeaderValueApplicationJSON = "application/json" + HeaderValueApplicationURLEncoded = "application/x-www-form-urlencoded" +) diff --git a/util/pjson/marshal.go b/util/pjson/marshal.go new file mode 100644 index 0000000..3484fae --- /dev/null +++ b/util/pjson/marshal.go @@ -0,0 +1,15 @@ +package pjson + +import ( + "encoding/json" + "log" +) + +// Marshal ... +func Marshal(data interface{}) ([]byte, error) { + b, err := json.Marshal(data) + if err != nil { + log.Printf("3pl/util/pjson.Marshal: err %v, payload %v", err, data) + } + return b, err +} diff --git a/util/pjson/unmarshal.go b/util/pjson/unmarshal.go index adc7ebf..641067d 100644 --- a/util/pjson/unmarshal.go +++ b/util/pjson/unmarshal.go @@ -2,18 +2,14 @@ package pjson import ( "encoding/json" - - "git.selly.red/Selly-Modules/logger" + "log" ) // Unmarshal ... func Unmarshal(b []byte, resultP interface{}) error { err := json.Unmarshal(b, resultP) if err != nil { - logger.Error("pjson.Unmarshal", logger.LogData{ - "raw": string(b), - "err": err.Error(), - }) + log.Printf("3pl/util/pjson.Unmarshal: err %v, payload %s", err, string(b)) } return err }