5
0
mirror of https://github.com/cwinfo/matterbridge.git synced 2024-09-19 15:49:36 +00:00

Update dependencies / vendor (#1146)

This commit is contained in:
Wim 2020-05-24 00:06:21 +02:00 committed by GitHub
parent ba0bfe70a8
commit 393f9e998b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
438 changed files with 35015 additions and 92744 deletions

View File

@ -10,8 +10,8 @@ import (
"github.com/42wim/matterbridge/bridge/config" "github.com/42wim/matterbridge/bridge/config"
"github.com/42wim/matterbridge/bridge/helper" "github.com/42wim/matterbridge/bridge/helper"
"github.com/dfordsoft/golib/ic"
"github.com/lrstanley/girc" "github.com/lrstanley/girc"
"github.com/missdeer/golib/ic"
"github.com/paulrosania/go-charset/charset" "github.com/paulrosania/go-charset/charset"
"github.com/saintfish/chardet" "github.com/saintfish/chardet"

30
go.mod
View File

@ -6,20 +6,19 @@ require (
github.com/Jeffail/gabs v1.1.1 // indirect github.com/Jeffail/gabs v1.1.1 // indirect
github.com/Philipp15b/go-steam v1.0.1-0.20190816133340-b04c5a83c1c0 github.com/Philipp15b/go-steam v1.0.1-0.20190816133340-b04c5a83c1c0
github.com/Rhymen/go-whatsapp v0.1.1-0.20200421062035-31e8111ac334 github.com/Rhymen/go-whatsapp v0.1.1-0.20200421062035-31e8111ac334
github.com/d5/tengo/v2 v2.1.2 github.com/d5/tengo/v2 v2.4.2
github.com/dfordsoft/golib v0.0.0-20180902042739-76ee6ab99bec github.com/fsnotify/fsnotify v1.4.9
github.com/fsnotify/fsnotify v1.4.7
github.com/go-telegram-bot-api/telegram-bot-api v4.6.5-0.20181225215658-ec221ba9ea45+incompatible github.com/go-telegram-bot-api/telegram-bot-api v4.6.5-0.20181225215658-ec221ba9ea45+incompatible
github.com/gomarkdown/markdown v0.0.0-20200127000047-1813ea067497 github.com/gomarkdown/markdown v0.0.0-20200127000047-1813ea067497
github.com/google/gops v0.3.6 github.com/google/gops v0.3.6
github.com/gopackage/ddp v0.0.0-20170117053602-652027933df4 // indirect github.com/gopackage/ddp v0.0.0-20170117053602-652027933df4 // indirect
github.com/gorilla/schema v1.1.0 github.com/gorilla/schema v1.1.0
github.com/gorilla/websocket v1.4.1 github.com/gorilla/websocket v1.4.2
github.com/hashicorp/golang-lru v0.5.3 github.com/hashicorp/golang-lru v0.5.4
github.com/hpcloud/tail v1.0.0 // indirect github.com/hpcloud/tail v1.0.0 // indirect
github.com/jpillora/backoff v1.0.0 github.com/jpillora/backoff v1.0.0
github.com/keybase/go-keybase-chat-bot v0.0.0-20200226211841-4e48f3eaef3e github.com/keybase/go-keybase-chat-bot v0.0.0-20200505163032-5cacf52379da
github.com/labstack/echo/v4 v4.1.13 github.com/labstack/echo/v4 v4.1.16
github.com/lrstanley/girc v0.0.0-20190801035559-4fc93959e1a7 github.com/lrstanley/girc v0.0.0-20190801035559-4fc93959e1a7
github.com/matterbridge/Rocket.Chat.Go.SDK v0.0.0-20200411204219-d5c18ce75048 github.com/matterbridge/Rocket.Chat.Go.SDK v0.0.0-20200411204219-d5c18ce75048
github.com/matterbridge/discordgo v0.18.1-0.20200308151012-aa40f01cbcc3 github.com/matterbridge/discordgo v0.18.1-0.20200308151012-aa40f01cbcc3
@ -29,9 +28,9 @@ require (
github.com/matterbridge/gozulipbot v0.0.0-20190212232658-7aa251978a18 github.com/matterbridge/gozulipbot v0.0.0-20190212232658-7aa251978a18
github.com/matterbridge/logrus-prefixed-formatter v0.0.0-20180806162718-01618749af61 github.com/matterbridge/logrus-prefixed-formatter v0.0.0-20180806162718-01618749af61
github.com/mattermost/mattermost-server v5.5.0+incompatible github.com/mattermost/mattermost-server v5.5.0+incompatible
github.com/mattn/go-runewidth v0.0.7 // indirect github.com/mattn/godown v0.0.0-20200217152941-afc959f6a561
github.com/mattn/godown v0.0.0-20180312012330-2e9e17e0ea51
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect
github.com/missdeer/golib v1.0.3
github.com/mreiferson/go-httpclient v0.0.0-20160630210159-31f0106b4474 // indirect github.com/mreiferson/go-httpclient v0.0.0-20160630210159-31f0106b4474 // indirect
github.com/mrexodia/wray v0.0.0-20160318003008-78a2c1f284ff // indirect github.com/mrexodia/wray v0.0.0-20160318003008-78a2c1f284ff // indirect
github.com/nelsonken/gomf v0.0.0-20180504123937-a9dd2f9deae9 github.com/nelsonken/gomf v0.0.0-20180504123937-a9dd2f9deae9
@ -44,20 +43,19 @@ require (
github.com/russross/blackfriday v1.5.2 github.com/russross/blackfriday v1.5.2
github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca
github.com/shazow/ssh-chat v1.8.3-0.20200308224626-80ddf1f43a98 github.com/shazow/ssh-chat v1.8.3-0.20200308224626-80ddf1f43a98
github.com/sirupsen/logrus v1.4.2 github.com/sirupsen/logrus v1.6.0
github.com/slack-go/slack v0.6.3 github.com/slack-go/slack v0.6.4
github.com/spf13/viper v1.6.1 github.com/spf13/viper v1.7.0
github.com/stretchr/testify v1.4.0 github.com/stretchr/testify v1.5.1
github.com/technoweenie/multipartstreamer v1.0.1 // indirect github.com/technoweenie/multipartstreamer v1.0.1 // indirect
github.com/writeas/go-strip-markdown v2.0.1+incompatible github.com/writeas/go-strip-markdown v2.0.1+incompatible
github.com/x-cray/logrus-prefixed-formatter v0.5.2 // indirect github.com/x-cray/logrus-prefixed-formatter v0.5.2 // indirect
github.com/yaegashi/msgraph.go v0.1.2 github.com/yaegashi/msgraph.go v0.1.2
github.com/zfjagann/golang-ring v0.0.0-20190106091943-a88bb6aef447 github.com/zfjagann/golang-ring v0.0.0-20190304061218-d34796e0a6c2
golang.org/x/image v0.0.0-20191214001246-9130b4cfad52 golang.org/x/image v0.0.0-20200430140353-33d19683fad8
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d
gopkg.in/fsnotify.v1 v1.4.7 // indirect gopkg.in/fsnotify.v1 v1.4.7 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
github.com/writeas/go-strip-markdown v2.0.1+incompatible
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
) )

244
go.sum
View File

@ -1,11 +1,23 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/42wim/go-gitter v0.0.0-20170828205020-017310c2d557 h1:IZtuWGfzQnKnCSu+vl8WGLhpVQ5Uvy3rlSwqXSg+sQg= github.com/42wim/go-gitter v0.0.0-20170828205020-017310c2d557 h1:IZtuWGfzQnKnCSu+vl8WGLhpVQ5Uvy3rlSwqXSg+sQg=
github.com/42wim/go-gitter v0.0.0-20170828205020-017310c2d557/go.mod h1:jL0YSXMs/txjtGJ4PWrmETOk6KUHMDPMshgQZlTeB3Y= github.com/42wim/go-gitter v0.0.0-20170828205020-017310c2d557/go.mod h1:jL0YSXMs/txjtGJ4PWrmETOk6KUHMDPMshgQZlTeB3Y=
github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f h1:2dk3eOnYllh+wUOuDhOoC2vUVoJF/5z478ryJ+wzEII= github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f h1:2dk3eOnYllh+wUOuDhOoC2vUVoJF/5z478ryJ+wzEII=
github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f/go.mod h1:4a58ifQTEe2uwwsaqbh3i2un5/CBPg+At/qHpt18Tmk= github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f/go.mod h1:4a58ifQTEe2uwwsaqbh3i2un5/CBPg+At/qHpt18Tmk=
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/Jeffail/gabs v1.1.1 h1:V0uzR08Hj22EX8+8QMhyI9sX2hwRu+/RJhJUmnwda/E= github.com/Jeffail/gabs v1.1.1 h1:V0uzR08Hj22EX8+8QMhyI9sX2hwRu+/RJhJUmnwda/E=
github.com/Jeffail/gabs v1.1.1/go.mod h1:6xMvQMK4k33lb7GUUpaAPh6nKMmemQeg5d4gn7/bOXc= github.com/Jeffail/gabs v1.1.1/go.mod h1:6xMvQMK4k33lb7GUUpaAPh6nKMmemQeg5d4gn7/bOXc=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
@ -23,29 +35,35 @@ github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuy
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alexcesaro/log v0.0.0-20150915221235-61e686294e58 h1:MkpmYfld/S8kXqTYI68DfL8/hHXjHogL120Dy00TIxc= github.com/alexcesaro/log v0.0.0-20150915221235-61e686294e58 h1:MkpmYfld/S8kXqTYI68DfL8/hHXjHogL120Dy00TIxc=
github.com/alexcesaro/log v0.0.0-20150915221235-61e686294e58/go.mod h1:YNfsMyWSs+h+PaYkxGeMVmVCX75Zj/pqdjbu12ciCYE= github.com/alexcesaro/log v0.0.0-20150915221235-61e686294e58/go.mod h1:YNfsMyWSs+h+PaYkxGeMVmVCX75Zj/pqdjbu12ciCYE=
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= 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.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/d5/tengo/v2 v2.1.2 h1:JR5O6qJW2GW9lpv/MfEqK16a/Wpp2y8I0JZZ5fqNOL0= github.com/d5/tengo/v2 v2.4.2 h1:Sj+v0CS8jtrZrXyJLzWof6QTnE6S5k3tYP0y6YVPGkw=
github.com/d5/tengo/v2 v2.1.2/go.mod h1:XRGjEs5I9jYIKTxly6HCF8oiiilk5E/RYXOZ5b0DZC8= github.com/d5/tengo/v2 v2.4.2/go.mod h1:XRGjEs5I9jYIKTxly6HCF8oiiilk5E/RYXOZ5b0DZC8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dfordsoft/golib v0.0.0-20180902042739-76ee6ab99bec h1:JEUiu7P9smN7zgX87a2zVnnbPPickIM9Gf9OIhsIgWQ=
github.com/dfordsoft/golib v0.0.0-20180902042739-76ee6ab99bec/go.mod h1:UGa5M2Sz/Uh13AMse4+RELKCDw7kqgqlTjeGae+7vUY=
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
@ -60,17 +78,29 @@ github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zV
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0=
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/gomarkdown/markdown v0.0.0-20200127000047-1813ea067497 h1:wJkj+x9gPYlDyM34C6r3SXPs270coWeh85wu1CsusDo= github.com/gomarkdown/markdown v0.0.0-20200127000047-1813ea067497 h1:wJkj+x9gPYlDyM34C6r3SXPs270coWeh85wu1CsusDo=
github.com/gomarkdown/markdown v0.0.0-20200127000047-1813ea067497/go.mod h1:aii0r/K0ZnHv7G0KF7xy1v0A7s2Ljrb5byB7MO5p6TU= github.com/gomarkdown/markdown v0.0.0-20200127000047-1813ea067497/go.mod h1:aii0r/K0ZnHv7G0KF7xy1v0A7s2Ljrb5byB7MO5p6TU=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/gops v0.3.6 h1:6akvbMlpZrEYOuoebn2kR+ZJekbZqJ28fJXTs84+8to= github.com/google/gops v0.3.6 h1:6akvbMlpZrEYOuoebn2kR+ZJekbZqJ28fJXTs84+8to=
github.com/google/gops v0.3.6/go.mod h1:RZ1rH95wsAGX4vMWKmqBOIWynmWisBf4QFdgT/k/xOI= github.com/google/gops v0.3.6/go.mod h1:RZ1rH95wsAGX4vMWKmqBOIWynmWisBf4QFdgT/k/xOI=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/gopackage/ddp v0.0.0-20170117053602-652027933df4 h1:4EZlYQIiyecYJlUbVkFXCXHz1QPhVXcHnQKAzBTPfQo= github.com/gopackage/ddp v0.0.0-20170117053602-652027933df4 h1:4EZlYQIiyecYJlUbVkFXCXHz1QPhVXcHnQKAzBTPfQo=
github.com/gopackage/ddp v0.0.0-20170117053602-652027933df4/go.mod h1:lEO7XoHJ/xNRBCxrn4h/CEB67h0kW1B0t4ooP2yrjUA= github.com/gopackage/ddp v0.0.0-20170117053602-652027933df4/go.mod h1:lEO7XoHJ/xNRBCxrn4h/CEB67h0kW1B0t4ooP2yrjUA=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
@ -81,13 +111,34 @@ github.com/gorilla/websocket v1.2.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoA
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM= github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM=
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
github.com/hashicorp/golang-lru v0.5.3 h1:YPkqC67at8FYaadspW/6uE0COsBxS2656RLEr8Bppgk= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
github.com/howeyc/gopass v0.0.0-20170109162249-bf9dde6d0d2c/go.mod h1:lADxMC39cJJqL93Duh1xhAs4I2Zs8mKS89XWXFGp9cs= github.com/howeyc/gopass v0.0.0-20170109162249-bf9dde6d0d2c/go.mod h1:lADxMC39cJJqL93Duh1xhAs4I2Zs8mKS89XWXFGp9cs=
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
@ -95,29 +146,31 @@ github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJS
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA=
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/kardianos/osext v0.0.0-20170510131534-ae77be60afb1 h1:PJPDf8OUfOK1bb/NeTKd4f1QXZItOX389VN3B6qC8ro= github.com/kardianos/osext v0.0.0-20170510131534-ae77be60afb1 h1:PJPDf8OUfOK1bb/NeTKd4f1QXZItOX389VN3B6qC8ro=
github.com/kardianos/osext v0.0.0-20170510131534-ae77be60afb1/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8= github.com/kardianos/osext v0.0.0-20170510131534-ae77be60afb1/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
github.com/keybase/go-keybase-chat-bot v0.0.0-20200226211841-4e48f3eaef3e h1:KbPTfR/PYuau1IzKoE4lnd8yby5I2pBj+VR6fSVbYU8= github.com/keybase/go-keybase-chat-bot v0.0.0-20200505163032-5cacf52379da h1:LK+8uBG3kNikj664cjFt88RBmuGmonxkXv2rUVfbqz4=
github.com/keybase/go-keybase-chat-bot v0.0.0-20200226211841-4e48f3eaef3e/go.mod h1:vNc28YFzigVJod0j5EbuTtRIe7swx8vodh2yA4jZ2s8= github.com/keybase/go-keybase-chat-bot v0.0.0-20200505163032-5cacf52379da/go.mod h1:xJA+X9ZVyT/irGldcb7q1XnJBq5F9s5H9h2L44Y+poY=
github.com/keybase/go-ps v0.0.0-20161005175911-668c8856d999 h1:2d+FLQbz4xRTi36DO1qYNUwfORax9XcQ0jhbO81Vago= github.com/keybase/go-ps v0.0.0-20161005175911-668c8856d999 h1:2d+FLQbz4xRTi36DO1qYNUwfORax9XcQ0jhbO81Vago=
github.com/keybase/go-ps v0.0.0-20161005175911-668c8856d999/go.mod h1:hY+WOq6m2FpbvyrI93sMaypsttvaIL5nhVR92dTMUcQ= github.com/keybase/go-ps v0.0.0-20161005175911-668c8856d999/go.mod h1:hY+WOq6m2FpbvyrI93sMaypsttvaIL5nhVR92dTMUcQ=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/labstack/echo v3.3.10+incompatible h1:pGRcYk231ExFAyoAjAfD85kQzRJCRI8bbnE7CX5OEgg= github.com/labstack/echo/v4 v4.1.16 h1:8swiwjE5Jkai3RPfZoahp8kjVCRNq+y7Q0hPji2Kz0o=
github.com/labstack/echo v3.3.10+incompatible/go.mod h1:0INS7j/VjnFxD4E2wkz67b8cVwCLbBmJyDaka6Cmk1s= github.com/labstack/echo/v4 v4.1.16/go.mod h1:awO+5TzAjvL8XpibdsfXxPgHr+orhtXZJZIQCVjogKI=
github.com/labstack/echo/v4 v4.1.13 h1:JYgKq6NQQSaKbQcsOadAKX1kUVLCUzLGwu8sxN5tC34=
github.com/labstack/echo/v4 v4.1.13/go.mod h1:3WZNypykZ3tnqpF2Qb4fPg27XDunFqgP3HGDmCMgv7U=
github.com/labstack/gommon v0.3.0 h1:JEeO0bvc78PKdyHxloTKiF8BD5iGrH8T6MSeGvSgob0= github.com/labstack/gommon v0.3.0 h1:JEeO0bvc78PKdyHxloTKiF8BD5iGrH8T6MSeGvSgob0=
github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k=
github.com/lrstanley/girc v0.0.0-20190801035559-4fc93959e1a7 h1:BS9tqL0OCiOGuy/CYYk2gc33fxqaqh5/rhqMKu4tcYA= github.com/lrstanley/girc v0.0.0-20190801035559-4fc93959e1a7 h1:BS9tqL0OCiOGuy/CYYk2gc33fxqaqh5/rhqMKu4tcYA=
@ -140,24 +193,37 @@ github.com/matterbridge/logrus-prefixed-formatter v0.0.0-20180806162718-01618749
github.com/matterbridge/logrus-prefixed-formatter v0.0.0-20180806162718-01618749af61/go.mod h1:iXGEotOvwI1R1SjLxRc+BF5rUORTMtE0iMZBT2lxqAU= github.com/matterbridge/logrus-prefixed-formatter v0.0.0-20180806162718-01618749af61/go.mod h1:iXGEotOvwI1R1SjLxRc+BF5rUORTMtE0iMZBT2lxqAU=
github.com/mattermost/mattermost-server v5.5.0+incompatible h1:0wcLGgYtd+YImtLDPf2AOfpBHxbU4suATx+6XKw1XbU= github.com/mattermost/mattermost-server v5.5.0+incompatible h1:0wcLGgYtd+YImtLDPf2AOfpBHxbU4suATx+6XKw1XbU=
github.com/mattermost/mattermost-server v5.5.0+incompatible/go.mod h1:5L6MjAec+XXQwMIt791Ganu45GKsSiM+I0tLR9wUj8Y= github.com/mattermost/mattermost-server v5.5.0+incompatible/go.mod h1:5L6MjAec+XXQwMIt791Ganu45GKsSiM+I0tLR9wUj8Y=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE=
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
github.com/mattn/go-isatty v0.0.11 h1:FxPOTFNqGkuDUGi3H/qkUbQO4ZiBa2brKq5r0l8TGeM= github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-runewidth v0.0.7 h1:Ei8KR0497xHyKJPAv59M1dkC+rOZCMBJ+t3fZ+twI54= github.com/mattn/go-runewidth v0.0.8 h1:3tS41NlGYSmhhe/8fhGRzc+z3AYCw1Fe1WAyLuujKs0=
github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.8/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/mattn/godown v0.0.0-20180312012330-2e9e17e0ea51 h1:MpI7hy3MiCnrggmZI/s8LaPbLVOOWpzDbjA4F+XaXaM= github.com/mattn/godown v0.0.0-20200217152941-afc959f6a561 h1:0YGo77enc6tJpXQxUeQWs9bPIQPTH1lbOmc5tgRuq4o=
github.com/mattn/godown v0.0.0-20180312012330-2e9e17e0ea51/go.mod h1:s3KUdOIXJ+jaGM++XHiXA6gikdleaWVATCcQGD4h734= github.com/mattn/godown v0.0.0-20200217152941-afc959f6a561/go.mod h1:/ivCKurgV/bx6yqtP/Jtc2Xmrv3beCYBvlfAUl4X5g4=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4=
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/missdeer/golib v1.0.3 h1:+kz/tn1lXlPS8i+gjHHVAZC8YcgrmfiMTqELyvOwI4g=
github.com/missdeer/golib v1.0.3/go.mod h1:Cys1ITPPZxIk2eTcQcKT3jDsBdhICAfrrw+ki/eRXxA=
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/mreiferson/go-httpclient v0.0.0-20160630210159-31f0106b4474 h1:oKIteTqeSpenyTrOVj5zkiyCaflLa8B+CD0324otT+o= github.com/mreiferson/go-httpclient v0.0.0-20160630210159-31f0106b4474 h1:oKIteTqeSpenyTrOVj5zkiyCaflLa8B+CD0324otT+o=
github.com/mreiferson/go-httpclient v0.0.0-20160630210159-31f0106b4474/go.mod h1:OQA4XLvDbMgS8P0CevmM4m9Q3Jq4phKUzcocxuGJ5m8= github.com/mreiferson/go-httpclient v0.0.0-20160630210159-31f0106b4474/go.mod h1:OQA4XLvDbMgS8P0CevmM4m9Q3Jq4phKUzcocxuGJ5m8=
github.com/mrexodia/wray v0.0.0-20160318003008-78a2c1f284ff h1:HLGD5/9UxxfEuO9DtP8gnTmNtMxbPyhYltfxsITel8g= github.com/mrexodia/wray v0.0.0-20160318003008-78a2c1f284ff h1:HLGD5/9UxxfEuO9DtP8gnTmNtMxbPyhYltfxsITel8g=
@ -167,13 +233,12 @@ github.com/nelsonken/gomf v0.0.0-20180504123937-a9dd2f9deae9 h1:mp6tU1r0xLostUGL
github.com/nelsonken/gomf v0.0.0-20180504123937-a9dd2f9deae9/go.mod h1:A5SRAcpTemjGgIuBq6Kic2yHcoeUFWUinOAlMP/i9xo= github.com/nelsonken/gomf v0.0.0-20180504123937-a9dd2f9deae9/go.mod h1:A5SRAcpTemjGgIuBq6Kic2yHcoeUFWUinOAlMP/i9xo=
github.com/nicksnyder/go-i18n v1.4.0 h1:AgLl+Yq7kg5OYlzCgu9cKTZOyI4tD/NgukKqLqC8E+I= github.com/nicksnyder/go-i18n v1.4.0 h1:AgLl+Yq7kg5OYlzCgu9cKTZOyI4tD/NgukKqLqC8E+I=
github.com/nicksnyder/go-i18n v1.4.0/go.mod h1:HrK7VCrbOvQoUAQ7Vpy7i87N7JZZZ7R2xBGjv0j365Q= github.com/nicksnyder/go-i18n v1.4.0/go.mod h1:HrK7VCrbOvQoUAQ7Vpy7i87N7JZZZ7R2xBGjv0j365Q=
github.com/nlopes/slack v0.6.0 h1:jt0jxVQGhssx1Ib7naAOZEZcGdtIhTzkP0nopK0AsRA=
github.com/nlopes/slack v0.6.0/go.mod h1:JzQ9m3PMAqcpeCam7UaHSuBuupz7CmpjehYMayT6YOk=
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
github.com/onsi/ginkgo v1.6.0 h1:Ix8l273rp3QzYgXSR+c8d1fTG7UPgYkOSELPhiY/YGw= github.com/onsi/ginkgo v1.6.0 h1:Ix8l273rp3QzYgXSR+c8d1fTG7UPgYkOSELPhiY/YGw=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/gomega v1.4.1 h1:PZSj/UFNaVp3KxrzHOcS7oyuWA7LoOY/77yCTEFu21U= github.com/onsi/gomega v1.4.1 h1:PZSj/UFNaVp3KxrzHOcS7oyuWA7LoOY/77yCTEFu21U=
github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/paulrosania/go-charset v0.0.0-20190326053356-55c9d7a5834c h1:P6XGcuPTigoHf4TSu+3D/7QOQ1MbL6alNwrGhcW7sKw= github.com/paulrosania/go-charset v0.0.0-20190326053356-55c9d7a5834c h1:P6XGcuPTigoHf4TSu+3D/7QOQ1MbL6alNwrGhcW7sKw=
github.com/paulrosania/go-charset v0.0.0-20190326053356-55c9d7a5834c/go.mod h1:YnNlZP7l4MhyGQ4CBRwv6ohZTPrUJJZtEv4ZgADkbs4= github.com/paulrosania/go-charset v0.0.0-20190326053356-55c9d7a5834c/go.mod h1:YnNlZP7l4MhyGQ4CBRwv6ohZTPrUJJZtEv4ZgADkbs4=
github.com/pborman/uuid v0.0.0-20160216163710-c55201b03606 h1:/CPgDYrfeK2LMK6xcUhvI17yO9SlpAdDIJGkhDEgO8A= github.com/pborman/uuid v0.0.0-20160216163710-c55201b03606 h1:/CPgDYrfeK2LMK6xcUhvI17yO9SlpAdDIJGkhDEgO8A=
@ -185,6 +250,7 @@ github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
@ -199,12 +265,15 @@ github.com/rickb777/date v1.12.4/go.mod h1:xP0eo/I5qmUt97yRGClHZfyLZ3ikMw6v6SU5M
github.com/rickb777/plural v1.2.0 h1:5tvEc7UBCZ7l8h/2UeybSkt/uu1DQsZFOFdNevmUhlE= github.com/rickb777/plural v1.2.0 h1:5tvEc7UBCZ7l8h/2UeybSkt/uu1DQsZFOFdNevmUhlE=
github.com/rickb777/plural v1.2.0/go.mod h1:UdpyWFCGbo3mvK3f/PfZOAOrkjzJlYN/sD46XNWJ+Es= github.com/rickb777/plural v1.2.0/go.mod h1:UdpyWFCGbo3mvK3f/PfZOAOrkjzJlYN/sD46XNWJ+Es=
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc= github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc=
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca h1:NugYot0LIVPxTvN8n+Kvkn6TrbMyxQiuvKdEwFdR9vI= github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca h1:NugYot0LIVPxTvN8n+Kvkn6TrbMyxQiuvKdEwFdR9vI=
github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca/go.mod h1:uugorj2VCxiV1x+LzaIdVa9b4S4qGAcH6cbhh4qVxOU= github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca/go.mod h1:uugorj2VCxiV1x+LzaIdVa9b4S4qGAcH6cbhh4qVxOU=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/shazow/rateio v0.0.0-20150116013248-e8e00881e5c1 h1:Lx3BlDGFElJt4u/zKc9A3BuGYbQAGlEFyPuUA3jeMD0= github.com/shazow/rateio v0.0.0-20150116013248-e8e00881e5c1 h1:Lx3BlDGFElJt4u/zKc9A3BuGYbQAGlEFyPuUA3jeMD0=
github.com/shazow/rateio v0.0.0-20150116013248-e8e00881e5c1/go.mod h1:vt2jWY/3Qw1bIzle5thrJWucsLuuX9iUNnp20CqCciI= github.com/shazow/rateio v0.0.0-20150116013248-e8e00881e5c1/go.mod h1:vt2jWY/3Qw1bIzle5thrJWucsLuuX9iUNnp20CqCciI=
github.com/shazow/ssh-chat v1.8.3-0.20200308224626-80ddf1f43a98 h1:sN07ff+PSRsUNhpSod4uGKAQ+Nc0FXsBPG9FmYMNg4w= github.com/shazow/ssh-chat v1.8.3-0.20200308224626-80ddf1f43a98 h1:sN07ff+PSRsUNhpSod4uGKAQ+Nc0FXsBPG9FmYMNg4w=
@ -212,12 +281,12 @@ github.com/shazow/ssh-chat v1.8.3-0.20200308224626-80ddf1f43a98/go.mod h1:xkTgfD
github.com/shirou/gopsutil v0.0.0-20180427012116-c95755e4bcd7/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/gopsutil v0.0.0-20180427012116-c95755e4bcd7/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/skip2/go-qrcode v0.0.0-20190110000554-dc11ecdae0a9 h1:lpEzuenPuO1XNTeikEmvqYFcU37GVLl8SRNblzyvGBE= github.com/skip2/go-qrcode v0.0.0-20190110000554-dc11ecdae0a9 h1:lpEzuenPuO1XNTeikEmvqYFcU37GVLl8SRNblzyvGBE=
github.com/skip2/go-qrcode v0.0.0-20190110000554-dc11ecdae0a9/go.mod h1:PLPIyL7ikehBD1OAjmKKiOEhbvWyHGaNDjquXMcYABo= github.com/skip2/go-qrcode v0.0.0-20190110000554-dc11ecdae0a9/go.mod h1:PLPIyL7ikehBD1OAjmKKiOEhbvWyHGaNDjquXMcYABo=
github.com/slack-go/slack v0.6.3 h1:qU037g8gQ71EuH6S9zYKnvYrEUj0fLFH4HFekFqBoRU= github.com/slack-go/slack v0.6.4 h1:cxOqFgM5RW6mdEyDqAJutFk3qiORK9oHRKi5bPqkY9o=
github.com/slack-go/slack v0.6.3/go.mod h1:HE4RwNe7YpOg/F0vqo5PwXH3Hki31TplTvKRW9dGGaw= github.com/slack-go/slack v0.6.4/go.mod h1:sGRjv3w+ERAUMMMbldHObQPBcNSyVB7KLKYfnwUFBfw=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
@ -232,19 +301,21 @@ github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/viper v1.6.1 h1:VPZzIkznI1YhVMRi6vNFLHSwhnhReBfgTxIPccpfdZk= github.com/spf13/viper v1.7.0 h1:xVKxvI7ouOI5I+U9s2eeiUfMaWBVoXA3AWskkrqK0VM=
github.com/spf13/viper v1.6.1/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
github.com/technoweenie/multipartstreamer v1.0.1 h1:XRztA5MXiR1TIRHxH2uNxXxaIkKQDeX7m2XsSOlQEnM= github.com/technoweenie/multipartstreamer v1.0.1 h1:XRztA5MXiR1TIRHxH2uNxXxaIkKQDeX7m2XsSOlQEnM=
github.com/technoweenie/multipartstreamer v1.0.1/go.mod h1:jNVxdtShOxzAsukZwTSw6MDx5eUJoiEBsSvzDU9uzog= github.com/technoweenie/multipartstreamer v1.0.1/go.mod h1:jNVxdtShOxzAsukZwTSw6MDx5eUJoiEBsSvzDU9uzog=
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=
@ -256,12 +327,13 @@ github.com/x-cray/logrus-prefixed-formatter v0.5.2 h1:00txxvfBM9muc0jiLIEAkAcIMJ
github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE=
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg=
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
github.com/yaegashi/msgraph.go v0.1.2 h1:83uVRQaj8YBsVqOUGj0WRwzxdgGF69jRpg5IQYaTvoY= github.com/yaegashi/msgraph.go v0.1.2 h1:83uVRQaj8YBsVqOUGj0WRwzxdgGF69jRpg5IQYaTvoY=
github.com/yaegashi/msgraph.go v0.1.2/go.mod h1:Lp39e9oo596G5FcmMKI0cXR3mg/QikSdabgZdbMqbAM= github.com/yaegashi/msgraph.go v0.1.2/go.mod h1:Lp39e9oo596G5FcmMKI0cXR3mg/QikSdabgZdbMqbAM=
github.com/zfjagann/golang-ring v0.0.0-20190106091943-a88bb6aef447 h1:CHgPZh8bFkZmislPrr/0gd7MciDAX+JJB70A2/5Lvmo= github.com/zfjagann/golang-ring v0.0.0-20190304061218-d34796e0a6c2 h1:UQwvu7FjUEdVYofx0U6bsc5odNE7wa5TSA0fl559GcA=
github.com/zfjagann/golang-ring v0.0.0-20190106091943-a88bb6aef447/go.mod h1:0MsIttMJIF/8Y7x0XjonJP7K99t3sR6bjj4m5S4JmqU= github.com/zfjagann/golang-ring v0.0.0-20190304061218-d34796e0a6c2/go.mod h1:0MsIttMJIF/8Y7x0XjonJP7K99t3sR6bjj4m5S4JmqU=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU= go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU=
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI=
@ -270,67 +342,141 @@ go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM=
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
golang.org/dl v0.0.0-20190829154251-82a15e2f2ead/go.mod h1:IUMfjQLJQd4UTqG1Z90tenwKoCX93Gn3MAQJMOSBsDQ= golang.org/dl v0.0.0-20190829154251-82a15e2f2ead/go.mod h1:IUMfjQLJQd4UTqG1Z90tenwKoCX93Gn3MAQJMOSBsDQ=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190131182504-b8fe1690c613/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190131182504-b8fe1690c613/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876 h1:sKJQZMuxjOAR/Uo2LBfU90onWEf1dF4C+0hPJCc9Mpc= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/image v0.0.0-20191214001246-9130b4cfad52 h1:2fktqPPvDiVEEVT/vSTeoUPXfmRxRaGy6GU8jypvEn0= golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d h1:1ZiEyfaQIg3Qh0EoqpwAakHVhecoE5wlSg5GjnafJGw=
golang.org/x/image v0.0.0-20191214001246-9130b4cfad52/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
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=
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
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.0.0-20200430140353-33d19683fad8 h1:6WW6V3x1P/jokJBpRQYUJnMHRP6isStQwCozxnU7XQw=
golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 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=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
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/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/net v0.0.0-20180724234803-3673e40ba225/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= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553 h1:efeOvDhwQ29Dj3SdAV/MJf8oukgn+8D8WgaCaRMchF8= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= 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=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/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-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20171017063910-8dbc5d05d6ed/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20171017063910-8dbc5d05d6ed/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 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-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8 h1:JA8d3MPx/IToSyXZG/RhwYEtfrKO1Fxrqe8KrkiLXKM= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/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=
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
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-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508= google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno= gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno=
@ -345,5 +491,11 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/goversion v1.0.0/go.mod h1:Eih9y/uIBS3ulggl7KNJ09xGSLcuNaLgmvvqa07sgfo= rsc.io/goversion v1.0.0/go.mod h1:Eih9y/uIBS3ulggl7KNJ09xGSLcuNaLgmvvqa07sgfo=

View File

@ -6,6 +6,7 @@ lint:
test: generate lint test: generate lint
go test -race -cover ./... go test -race -cover ./...
go run ./cmd/tengo -resolve ./testdata/cli/test.tengo
fmt: fmt:
go fmt ./... go fmt ./...

View File

@ -5,8 +5,8 @@
# The Tengo Language # The Tengo Language
[![GoDoc](https://godoc.org/github.com/d5/tengo?status.svg)](https://godoc.org/github.com/d5/tengo) [![GoDoc](https://godoc.org/github.com/d5/tengo?status.svg)](https://godoc.org/github.com/d5/tengo)
![test](https://github.com/d5/tengo/workflows/test/badge.svg)
[![Go Report Card](https://goreportcard.com/badge/github.com/d5/tengo)](https://goreportcard.com/report/github.com/d5/tengo) [![Go Report Card](https://goreportcard.com/badge/github.com/d5/tengo)](https://goreportcard.com/report/github.com/d5/tengo)
[![CircleCI](https://circleci.com/gh/d5/tengo.svg?style=svg)](https://circleci.com/gh/d5/tengo)
**Tengo is a small, dynamic, fast, secure script language for Go.** **Tengo is a small, dynamic, fast, secure script language for Go.**
@ -51,19 +51,21 @@ fmt.println(sum("", [1, 2, 3])) // "123"
## Benchmark ## Benchmark
| | fib(35) | fibt(35) | Type | | | fib(35) | fibt(35) | Language (Type) |
| :--- | ---: | ---: | :---: | | :--- | ---: | ---: | :---: |
| Go | `48ms` | `3ms` | Go (native) | | [**Tengo**](https://github.com/d5/tengo) | `2,931ms` | `4ms` | Tengo (VM) |
| [**Tengo**](https://github.com/d5/tengo) | `2,349ms` | `5ms` | VM on Go | | [go-lua](https://github.com/Shopify/go-lua) | `4,824ms` | `4ms` | Lua (VM) |
| Lua | `1,416ms` | `3ms` | Lua (native) | | [GopherLua](https://github.com/yuin/gopher-lua) | `5,365ms` | `4ms` | Lua (VM) |
| [go-lua](https://github.com/Shopify/go-lua) | `4,402ms` | `5ms` | Lua VM on Go | | [goja](https://github.com/dop251/goja) | `5,533ms` | `5ms` | JavaScript (VM) |
| [GopherLua](https://github.com/yuin/gopher-lua) | `4,023ms` | `5ms` | Lua VM on Go | | [starlark-go](https://github.com/google/starlark-go) | `11,495ms` | `5ms` | Starlark (Interpreter) |
| Python | `2,588ms` | `26ms` | Python (native) | | [Yaegi](https://github.com/containous/yaegi) | `15,645ms` | `12ms` | Yaegi (Interpreter) |
| [starlark-go](https://github.com/google/starlark-go) | `11,126ms` | `6ms` | Python-like Interpreter on Go | | [gpython](https://github.com/go-python/gpython) | `16,322ms` | `5ms` | Python (Interpreter) |
| [gpython](https://github.com/go-python/gpython) | `15,035ms` | `4ms` | Python Interpreter on Go | | [otto](https://github.com/robertkrimen/otto) | `73,093ms` | `10ms` | JavaScript (Interpreter) |
| [goja](https://github.com/dop251/goja) | `5,089ms` | `5ms` | JS VM on Go | | [Anko](https://github.com/mattn/anko) | `79,809ms` | `8ms` | Anko (Interpreter) |
| [otto](https://github.com/robertkrimen/otto) | `68,377ms` | `11ms` | JS Interpreter on Go | | - | - | - | - |
| [Anko](https://github.com/mattn/anko) | `92,579ms` | `18ms` | Interpreter on Go | | Go | `53ms` | `3ms` | Go (Native) |
| Lua | `1,612ms` | `3ms` | Lua (Native) |
| Python | `2,632ms` | `23ms` | Python 2 (Native) |
_* [fib(35)](https://github.com/d5/tengobench/blob/master/code/fib.tengo): _* [fib(35)](https://github.com/d5/tengobench/blob/master/code/fib.tengo):
Fibonacci(35)_ Fibonacci(35)_
@ -136,3 +138,10 @@ each([a, b, c, d], func(x) {
- [Interoperability](https://github.com/d5/tengo/blob/master/docs/interoperability.md) - [Interoperability](https://github.com/d5/tengo/blob/master/docs/interoperability.md)
- [Tengo CLI](https://github.com/d5/tengo/blob/master/docs/tengo-cli.md) - [Tengo CLI](https://github.com/d5/tengo/blob/master/docs/tengo-cli.md)
- [Standard Library](https://github.com/d5/tengo/blob/master/docs/stdlib.md) - [Standard Library](https://github.com/d5/tengo/blob/master/docs/stdlib.md)
- Syntax Highlighters: [VSCode](https://github.com/lissein/vscode-tengo), [Atom](https://github.com/d5/tengo-atom)
- **Why the name Tengo?** It's from [1Q84](https://en.wikipedia.org/wiki/1Q84).
##
:hearts: Like writing Go code? Come work at Skool. [We're hiring!](https://jobs.lever.co/skool)

View File

@ -97,6 +97,7 @@ func (b *Bytecode) RemoveDuplicates() {
var deduped []Object var deduped []Object
indexMap := make(map[int]int) // mapping from old constant index to new index indexMap := make(map[int]int) // mapping from old constant index to new index
fns := make(map[*CompiledFunction]int)
ints := make(map[int64]int) ints := make(map[int64]int)
strings := make(map[string]int) strings := make(map[string]int)
floats := make(map[float64]int) floats := make(map[float64]int)
@ -106,9 +107,14 @@ func (b *Bytecode) RemoveDuplicates() {
for curIdx, c := range b.Constants { for curIdx, c := range b.Constants {
switch c := c.(type) { switch c := c.(type) {
case *CompiledFunction: case *CompiledFunction:
// add to deduped list if newIdx, ok := fns[c]; ok {
indexMap[curIdx] = len(deduped) indexMap[curIdx] = newIdx
deduped = append(deduped, c) } else {
newIdx = len(deduped)
fns[c] = newIdx
indexMap[curIdx] = newIdx
deduped = append(deduped, c)
}
case *ImmutableMap: case *ImmutableMap:
modName := inferModuleName(c) modName := inferModuleName(c)
newIdx, ok := immutableMaps[modName] newIdx, ok := immutableMaps[modName]

View File

@ -44,6 +44,7 @@ type Compiler struct {
file *parser.SourceFile file *parser.SourceFile
parent *Compiler parent *Compiler
modulePath string modulePath string
importDir string
constants []Object constants []Object
symbolTable *SymbolTable symbolTable *SymbolTable
scopes []compilationScope scopes []compilationScope
@ -520,7 +521,7 @@ func (c *Compiler) Compile(node parser.Node) error {
switch v := v.(type) { switch v := v.(type) {
case []byte: // module written in Tengo case []byte: // module written in Tengo
compiled, err := c.compileModule(node, compiled, err := c.compileModule(node,
node.ModuleName, node.ModuleName, v) node.ModuleName, v, false)
if err != nil { if err != nil {
return err return err
} }
@ -537,24 +538,20 @@ func (c *Compiler) Compile(node parser.Node) error {
moduleName += ".tengo" moduleName += ".tengo"
} }
modulePath, err := filepath.Abs(moduleName) modulePath, err := filepath.Abs(
filepath.Join(c.importDir, moduleName))
if err != nil { if err != nil {
return c.errorf(node, "module file path error: %s", return c.errorf(node, "module file path error: %s",
err.Error()) err.Error())
} }
if err := c.checkCyclicImports(node, modulePath); err != nil { moduleSrc, err := ioutil.ReadFile(modulePath)
return err
}
moduleSrc, err := ioutil.ReadFile(moduleName)
if err != nil { if err != nil {
return c.errorf(node, "module file read error: %s", return c.errorf(node, "module file read error: %s",
err.Error()) err.Error())
} }
compiled, err := c.compileModule(node, compiled, err := c.compileModule(node, modulePath, moduleSrc, true)
moduleName, modulePath, moduleSrc)
if err != nil { if err != nil {
return err return err
} }
@ -634,6 +631,11 @@ func (c *Compiler) EnableFileImport(enable bool) {
c.allowFileImport = enable c.allowFileImport = enable
} }
// SetImportDir sets the initial import directory path for file imports.
func (c *Compiler) SetImportDir(dir string) {
c.importDir = dir
}
func (c *Compiler) compileAssign( func (c *Compiler) compileAssign(
node parser.Node, node parser.Node,
lhs, rhs []parser.Expr, lhs, rhs []parser.Expr,
@ -847,8 +849,8 @@ func (c *Compiler) compileForInStmt(stmt *parser.ForInStmt) error {
// ... body ... // ... body ...
// } // }
// //
// ":it" is a local variable but will be conflict with other user variables // ":it" is a local variable but it will not conflict with other user variables
// because character ":" is not allowed. // because character ":" is not allowed in the variable names.
// init // init
// :it = iterator(iterable) // :it = iterator(iterable)
@ -893,6 +895,7 @@ func (c *Compiler) compileForInStmt(stmt *parser.ForInStmt) error {
if keySymbol.Scope == ScopeGlobal { if keySymbol.Scope == ScopeGlobal {
c.emit(stmt, parser.OpSetGlobal, keySymbol.Index) c.emit(stmt, parser.OpSetGlobal, keySymbol.Index)
} else { } else {
keySymbol.LocalAssigned = true
c.emit(stmt, parser.OpDefineLocal, keySymbol.Index) c.emit(stmt, parser.OpDefineLocal, keySymbol.Index)
} }
} }
@ -909,6 +912,7 @@ func (c *Compiler) compileForInStmt(stmt *parser.ForInStmt) error {
if valueSymbol.Scope == ScopeGlobal { if valueSymbol.Scope == ScopeGlobal {
c.emit(stmt, parser.OpSetGlobal, valueSymbol.Index) c.emit(stmt, parser.OpSetGlobal, valueSymbol.Index)
} else { } else {
valueSymbol.LocalAssigned = true
c.emit(stmt, parser.OpDefineLocal, valueSymbol.Index) c.emit(stmt, parser.OpDefineLocal, valueSymbol.Index)
} }
} }
@ -955,8 +959,9 @@ func (c *Compiler) checkCyclicImports(
func (c *Compiler) compileModule( func (c *Compiler) compileModule(
node parser.Node, node parser.Node,
moduleName, modulePath string, modulePath string,
src []byte, src []byte,
isFile bool,
) (*CompiledFunction, error) { ) (*CompiledFunction, error) {
if err := c.checkCyclicImports(node, modulePath); err != nil { if err := c.checkCyclicImports(node, modulePath); err != nil {
return nil, err return nil, err
@ -967,7 +972,7 @@ func (c *Compiler) compileModule(
return compiledModule, nil return compiledModule, nil
} }
modFile := c.file.Set().AddFile(moduleName, -1, len(src)) modFile := c.file.Set().AddFile(modulePath, -1, len(src))
p := parser.NewParser(modFile, src, nil) p := parser.NewParser(modFile, src, nil)
file, err := p.ParseFile() file, err := p.ParseFile()
if err != nil { if err != nil {
@ -984,7 +989,7 @@ func (c *Compiler) compileModule(
symbolTable = symbolTable.Fork(false) symbolTable = symbolTable.Fork(false)
// compile module // compile module
moduleCompiler := c.fork(modFile, modulePath, symbolTable) moduleCompiler := c.fork(modFile, modulePath, symbolTable, isFile)
if err := moduleCompiler.Compile(file); err != nil { if err := moduleCompiler.Compile(file); err != nil {
return nil, err return nil, err
} }
@ -1082,10 +1087,16 @@ func (c *Compiler) fork(
file *parser.SourceFile, file *parser.SourceFile,
modulePath string, modulePath string,
symbolTable *SymbolTable, symbolTable *SymbolTable,
isFile bool,
) *Compiler { ) *Compiler {
child := NewCompiler(file, symbolTable, nil, c.modules, c.trace) child := NewCompiler(file, symbolTable, nil, c.modules, c.trace)
child.modulePath = modulePath // module file path child.modulePath = modulePath // module file path
child.parent = c // parent to set to current compiler child.parent = c // parent to set to current compiler
child.allowFileImport = c.allowFileImport
child.importDir = c.importDir
if isFile && c.importDir != "" {
child.importDir = filepath.Dir(modulePath)
}
return child return child
} }
@ -1192,6 +1203,7 @@ func (c *Compiler) optimizeFunc(node parser.Node) {
var lastOp parser.Opcode var lastOp parser.Opcode
var appendReturn bool var appendReturn bool
endPos := len(c.scopes[c.scopeIndex].Instructions) endPos := len(c.scopes[c.scopeIndex].Instructions)
newEndPost := len(newInsts)
iterateInstructions(newInsts, iterateInstructions(newInsts,
func(pos int, opcode parser.Opcode, operands []int) bool { func(pos int, opcode parser.Opcode, operands []int) bool {
switch opcode { switch opcode {
@ -1204,6 +1216,8 @@ func (c *Compiler) optimizeFunc(node parser.Node) {
} else if endPos == operands[0] { } else if endPos == operands[0] {
// there's a jump instruction that jumps to the end of // there's a jump instruction that jumps to the end of
// function compiler should append "return". // function compiler should append "return".
copy(newInsts[pos:],
MakeInstruction(opcode, newEndPost))
appendReturn = true appendReturn = true
} else { } else {
panic(fmt.Errorf("invalid jump position: %d", newDst)) panic(fmt.Errorf("invalid jump position: %d", newDst))

View File

@ -3,6 +3,7 @@ package tengo
import ( import (
"context" "context"
"fmt" "fmt"
"path/filepath"
"sync" "sync"
"github.com/d5/tengo/v2/parser" "github.com/d5/tengo/v2/parser"
@ -16,6 +17,7 @@ type Script struct {
maxAllocs int64 maxAllocs int64
maxConstObjects int maxConstObjects int
enableFileImport bool enableFileImport bool
importDir string
} }
// NewScript creates a Script instance with an input script. // NewScript creates a Script instance with an input script.
@ -56,6 +58,16 @@ func (s *Script) SetImports(modules *ModuleMap) {
s.modules = modules s.modules = modules
} }
// SetImportDir sets the initial import directory for script files.
func (s *Script) SetImportDir(dir string) error {
dir, err := filepath.Abs(dir)
if err != nil {
return err
}
s.importDir = dir
return nil
}
// SetMaxAllocs sets the maximum number of objects allocations during the run // SetMaxAllocs sets the maximum number of objects allocations during the run
// time. Compiled script will return ErrObjectAllocLimit error if it // time. Compiled script will return ErrObjectAllocLimit error if it
// exceeds this limit. // exceeds this limit.
@ -93,6 +105,7 @@ func (s *Script) Compile() (*Compiled, error) {
c := NewCompiler(srcFile, symbolTable, nil, s.modules, nil) c := NewCompiler(srcFile, symbolTable, nil, s.modules, nil)
c.EnableFileImport(s.enableFileImport) c.EnableFileImport(s.enableFileImport)
c.SetImportDir(s.importDir)
if err := c.Compile(file); err != nil { if err := c.Compile(file); err != nil {
return nil, err return nil, err
} }

View File

@ -1,20 +1,129 @@
// A modified version of Go's JSON implementation. // A modified version of Go's JSON implementation.
// Copyright 2010 The Go Authors. All rights reserved. // Copyright 2010, 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
package json package json
import ( import (
"bytes"
"encoding/base64" "encoding/base64"
"errors" "errors"
"math" "math"
"strconv" "strconv"
"unicode/utf8"
"github.com/d5/tengo/v2" "github.com/d5/tengo/v2"
) )
// safeSet holds the value true if the ASCII character with the given array
// position can be represented inside a JSON string without any further
// escaping.
//
// All values are true except for the ASCII control characters (0-31), the
// double quote ("), and the backslash character ("\").
var safeSet = [utf8.RuneSelf]bool{
' ': true,
'!': true,
'"': false,
'#': true,
'$': true,
'%': true,
'&': true,
'\'': true,
'(': true,
')': true,
'*': true,
'+': true,
',': true,
'-': true,
'.': true,
'/': true,
'0': true,
'1': true,
'2': true,
'3': true,
'4': true,
'5': true,
'6': true,
'7': true,
'8': true,
'9': true,
':': true,
';': true,
'<': true,
'=': true,
'>': true,
'?': true,
'@': true,
'A': true,
'B': true,
'C': true,
'D': true,
'E': true,
'F': true,
'G': true,
'H': true,
'I': true,
'J': true,
'K': true,
'L': true,
'M': true,
'N': true,
'O': true,
'P': true,
'Q': true,
'R': true,
'S': true,
'T': true,
'U': true,
'V': true,
'W': true,
'X': true,
'Y': true,
'Z': true,
'[': true,
'\\': false,
']': true,
'^': true,
'_': true,
'`': true,
'a': true,
'b': true,
'c': true,
'd': true,
'e': true,
'f': true,
'g': true,
'h': true,
'i': true,
'j': true,
'k': true,
'l': true,
'm': true,
'n': true,
'o': true,
'p': true,
'q': true,
'r': true,
's': true,
't': true,
'u': true,
'v': true,
'w': true,
'x': true,
'y': true,
'z': true,
'{': true,
'|': true,
'}': true,
'~': true,
'\u007f': true,
}
var hex = "0123456789abcdef"
// Encode returns the JSON encoding of the object. // Encode returns the JSON encoding of the object.
func Encode(o tengo.Object) ([]byte, error) { func Encode(o tengo.Object) ([]byte, error) {
var b []byte var b []byte
@ -53,7 +162,7 @@ func Encode(o tengo.Object) ([]byte, error) {
len1 := len(o.Value) - 1 len1 := len(o.Value) - 1
idx := 0 idx := 0
for key, value := range o.Value { for key, value := range o.Value {
b = strconv.AppendQuote(b, key) b = encodeString(b, key)
b = append(b, ':') b = append(b, ':')
eb, err := Encode(value) eb, err := Encode(value)
if err != nil { if err != nil {
@ -71,7 +180,7 @@ func Encode(o tengo.Object) ([]byte, error) {
len1 := len(o.Value) - 1 len1 := len(o.Value) - 1
idx := 0 idx := 0
for key, value := range o.Value { for key, value := range o.Value {
b = strconv.AppendQuote(b, key) b = encodeString(b, key)
b = append(b, ':') b = append(b, ':')
eb, err := Encode(value) eb, err := Encode(value)
if err != nil { if err != nil {
@ -130,7 +239,9 @@ func Encode(o tengo.Object) ([]byte, error) {
case *tengo.Int: case *tengo.Int:
b = strconv.AppendInt(b, o.Value, 10) b = strconv.AppendInt(b, o.Value, 10)
case *tengo.String: case *tengo.String:
b = strconv.AppendQuote(b, o.Value) // string encoding bug is fixed with newly introduced function
// encodeString(). See: https://github.com/d5/tengo/issues/268
b = encodeString(b, o.Value)
case *tengo.Time: case *tengo.Time:
y, err := o.Value.MarshalJSON() y, err := o.Value.MarshalJSON()
if err != nil { if err != nil {
@ -144,3 +255,79 @@ func Encode(o tengo.Object) ([]byte, error) {
} }
return b, nil return b, nil
} }
// encodeString encodes given string as JSON string according to
// https://www.json.org/img/string.png
// Implementation is inspired by https://github.com/json-iterator/go
// See encodeStringSlowPath() for more information.
func encodeString(b []byte, val string) []byte {
valLen := len(val)
buf := bytes.NewBuffer(b)
buf.WriteByte('"')
// write string, the fast path, without utf8 and escape support
i := 0
for ; i < valLen; i++ {
c := val[i]
if c > 31 && c != '"' && c != '\\' {
buf.WriteByte(c)
} else {
break
}
}
if i == valLen {
buf.WriteByte('"')
return buf.Bytes()
}
encodeStringSlowPath(buf, i, val, valLen)
buf.WriteByte('"')
return buf.Bytes()
}
// encodeStringSlowPath is ported from Go 1.14.2 encoding/json package.
// U+2028 U+2029 JSONP security holes can be fixed with addition call to
// json.html_escape() thus it is removed from the implementation below.
// Note: Invalid runes are not checked as they are checked in original
// implementation.
func encodeStringSlowPath(buf *bytes.Buffer, i int, val string, valLen int) {
start := i
for i < valLen {
if b := val[i]; b < utf8.RuneSelf {
if safeSet[b] {
i++
continue
}
if start < i {
buf.WriteString(val[start:i])
}
buf.WriteByte('\\')
switch b {
case '\\', '"':
buf.WriteByte(b)
case '\n':
buf.WriteByte('n')
case '\r':
buf.WriteByte('r')
case '\t':
buf.WriteByte('t')
default:
// This encodes bytes < 0x20 except for \t, \n and \r.
// If escapeHTML is set, it also escapes <, >, and &
// because they can lead to security holes when
// user-controlled strings are rendered into JSON
// and served to some browsers.
buf.WriteString(`u00`)
buf.WriteByte(hex[b>>4])
buf.WriteByte(hex[b&0xF])
}
i++
start = i
continue
}
i++
continue
}
if start < valLen {
buf.WriteString(val[start:])
}
}

View File

@ -1,5 +1,12 @@
root = true root = true
[*] [*.go]
indent_style = tab indent_style = tab
indent_size = 4 indent_size = 4
insert_final_newline = true
[*.{yml,yaml}]
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true

1
vendor/github.com/fsnotify/fsnotify/.gitattributes generated vendored Normal file
View File

@ -0,0 +1 @@
go.sum linguist-generated

View File

@ -2,29 +2,35 @@ sudo: false
language: go language: go
go: go:
- 1.8.x - "stable"
- 1.9.x - "1.11.x"
- tip - "1.10.x"
- "1.9.x"
matrix: matrix:
include:
- go: "stable"
env: GOLINT=true
allow_failures: allow_failures:
- go: tip - go: tip
fast_finish: true fast_finish: true
before_script:
- go get -u github.com/golang/lint/golint before_install:
- if [ ! -z "${GOLINT}" ]; then go get -u golang.org/x/lint/golint; fi
script: script:
- go test -v --race ./... - go test --race ./...
after_script: after_script:
- test -z "$(gofmt -s -l -w . | tee /dev/stderr)" - test -z "$(gofmt -s -l -w . | tee /dev/stderr)"
- test -z "$(golint ./... | tee /dev/stderr)" - if [ ! -z "${GOLINT}" ]; then echo running golint; golint --set_exit_status ./...; else echo skipping golint; fi
- go vet ./... - go vet ./...
os: os:
- linux - linux
- osx - osx
- windows
notifications: notifications:
email: false email: false

View File

@ -1,5 +1,5 @@
Copyright (c) 2012 The Go Authors. All rights reserved. Copyright (c) 2012 The Go Authors. All rights reserved.
Copyright (c) 2012 fsnotify Authors. All rights reserved. Copyright (c) 2012-2019 fsnotify Authors. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are modification, are permitted provided that the following conditions are

View File

@ -10,16 +10,16 @@ go get -u golang.org/x/sys/...
Cross platform: Windows, Linux, BSD and macOS. Cross platform: Windows, Linux, BSD and macOS.
|Adapter |OS |Status | | Adapter | OS | Status |
|----------|----------|----------| | --------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
|inotify |Linux 2.6.27 or later, Android\*|Supported [![Build Status](https://travis-ci.org/fsnotify/fsnotify.svg?branch=master)](https://travis-ci.org/fsnotify/fsnotify)| | inotify | Linux 2.6.27 or later, Android\* | Supported [![Build Status](https://travis-ci.org/fsnotify/fsnotify.svg?branch=master)](https://travis-ci.org/fsnotify/fsnotify) |
|kqueue |BSD, macOS, iOS\*|Supported [![Build Status](https://travis-ci.org/fsnotify/fsnotify.svg?branch=master)](https://travis-ci.org/fsnotify/fsnotify)| | kqueue | BSD, macOS, iOS\* | Supported [![Build Status](https://travis-ci.org/fsnotify/fsnotify.svg?branch=master)](https://travis-ci.org/fsnotify/fsnotify) |
|ReadDirectoryChangesW|Windows|Supported [![Build status](https://ci.appveyor.com/api/projects/status/ivwjubaih4r0udeh/branch/master?svg=true)](https://ci.appveyor.com/project/NathanYoungman/fsnotify/branch/master)| | ReadDirectoryChangesW | Windows | Supported [![Build Status](https://travis-ci.org/fsnotify/fsnotify.svg?branch=master)](https://travis-ci.org/fsnotify/fsnotify) |
|FSEvents |macOS |[Planned](https://github.com/fsnotify/fsnotify/issues/11)| | FSEvents | macOS | [Planned](https://github.com/fsnotify/fsnotify/issues/11) |
|FEN |Solaris 11 |[In Progress](https://github.com/fsnotify/fsnotify/issues/12)| | FEN | Solaris 11 | [In Progress](https://github.com/fsnotify/fsnotify/issues/12) |
|fanotify |Linux 2.6.37+ | | | fanotify | Linux 2.6.37+ | [Planned](https://github.com/fsnotify/fsnotify/issues/114) |
|USN Journals |Windows |[Maybe](https://github.com/fsnotify/fsnotify/issues/53)| | USN Journals | Windows | [Maybe](https://github.com/fsnotify/fsnotify/issues/53) |
|Polling |*All* |[Maybe](https://github.com/fsnotify/fsnotify/issues/9)| | Polling | *All* | [Maybe](https://github.com/fsnotify/fsnotify/issues/9) |
\* Android and iOS are untested. \* Android and iOS are untested.
@ -33,6 +33,53 @@ All [releases](https://github.com/fsnotify/fsnotify/releases) are tagged based o
Go 1.6 supports dependencies located in the `vendor/` folder. Unless you are creating a library, it is recommended that you copy fsnotify into `vendor/github.com/fsnotify/fsnotify` within your project, and likewise for `golang.org/x/sys`. Go 1.6 supports dependencies located in the `vendor/` folder. Unless you are creating a library, it is recommended that you copy fsnotify into `vendor/github.com/fsnotify/fsnotify` within your project, and likewise for `golang.org/x/sys`.
## Usage
```go
package main
import (
"log"
"github.com/fsnotify/fsnotify"
)
func main() {
watcher, err := fsnotify.NewWatcher()
if err != nil {
log.Fatal(err)
}
defer watcher.Close()
done := make(chan bool)
go func() {
for {
select {
case event, ok := <-watcher.Events:
if !ok {
return
}
log.Println("event:", event)
if event.Op&fsnotify.Write == fsnotify.Write {
log.Println("modified file:", event.Name)
}
case err, ok := <-watcher.Errors:
if !ok {
return
}
log.Println("error:", err)
}
}
}()
err = watcher.Add("/tmp/foo")
if err != nil {
log.Fatal(err)
}
<-done
}
```
## Contributing ## Contributing
Please refer to [CONTRIBUTING][] before opening an issue or pull request. Please refer to [CONTRIBUTING][] before opening an issue or pull request.
@ -65,6 +112,10 @@ There are OS-specific limits as to how many watches can be created:
* Linux: /proc/sys/fs/inotify/max_user_watches contains the limit, reaching this limit results in a "no space left on device" error. * Linux: /proc/sys/fs/inotify/max_user_watches contains the limit, reaching this limit results in a "no space left on device" error.
* BSD / OSX: sysctl variables "kern.maxfiles" and "kern.maxfilesperproc", reaching these limits results in a "too many open files" error. * BSD / OSX: sysctl variables "kern.maxfiles" and "kern.maxfilesperproc", reaching these limits results in a "too many open files" error.
**Why don't notifications work with NFS filesystems or filesystem in userspace (FUSE)?**
fsnotify requires support from underlying OS to work. The current NFS protocol does not provide network level support for file notifications.
[#62]: https://github.com/howeyc/fsnotify/issues/62 [#62]: https://github.com/howeyc/fsnotify/issues/62
[#18]: https://github.com/fsnotify/fsnotify/issues/18 [#18]: https://github.com/fsnotify/fsnotify/issues/18
[#11]: https://github.com/fsnotify/fsnotify/issues/11 [#11]: https://github.com/fsnotify/fsnotify/issues/11

View File

@ -63,4 +63,6 @@ func (e Event) String() string {
} }
// Common errors that can be reported by a watcher // Common errors that can be reported by a watcher
var ErrEventOverflow = errors.New("fsnotify queue overflow") var (
ErrEventOverflow = errors.New("fsnotify queue overflow")
)

5
vendor/github.com/fsnotify/fsnotify/go.mod generated vendored Normal file
View File

@ -0,0 +1,5 @@
module github.com/fsnotify/fsnotify
go 1.13
require golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9

2
vendor/github.com/fsnotify/fsnotify/go.sum generated vendored Normal file
View File

@ -0,0 +1,2 @@
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9 h1:L2auWcuQIvxz9xSEqzESnV/QN/gNRXNApHi3fYwl2w0=
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=

View File

@ -40,12 +40,12 @@ func newFdPoller(fd int) (*fdPoller, error) {
poller.fd = fd poller.fd = fd
// Create epoll fd // Create epoll fd
poller.epfd, errno = unix.EpollCreate1(0) poller.epfd, errno = unix.EpollCreate1(unix.EPOLL_CLOEXEC)
if poller.epfd == -1 { if poller.epfd == -1 {
return nil, errno return nil, errno
} }
// Create pipe; pipe[0] is the read end, pipe[1] the write end. // Create pipe; pipe[0] is the read end, pipe[1] the write end.
errno = unix.Pipe2(poller.pipe[:], unix.O_NONBLOCK) errno = unix.Pipe2(poller.pipe[:], unix.O_NONBLOCK|unix.O_CLOEXEC)
if errno != nil { if errno != nil {
return nil, errno return nil, errno
} }

View File

@ -8,4 +8,4 @@ package fsnotify
import "golang.org/x/sys/unix" import "golang.org/x/sys/unix"
const openMode = unix.O_NONBLOCK | unix.O_RDONLY const openMode = unix.O_NONBLOCK | unix.O_RDONLY | unix.O_CLOEXEC

View File

@ -9,4 +9,4 @@ package fsnotify
import "golang.org/x/sys/unix" import "golang.org/x/sys/unix"
// note: this constant is not defined on BSD // note: this constant is not defined on BSD
const openMode = unix.O_EVTONLY const openMode = unix.O_EVTONLY | unix.O_CLOEXEC

View File

@ -38,7 +38,6 @@ package proto
import ( import (
"fmt" "fmt"
"log" "log"
"os"
"reflect" "reflect"
"sort" "sort"
"strconv" "strconv"
@ -194,7 +193,7 @@ func (p *Properties) Parse(s string) {
// "bytes,49,opt,name=foo,def=hello!" // "bytes,49,opt,name=foo,def=hello!"
fields := strings.Split(s, ",") // breaks def=, but handled below. fields := strings.Split(s, ",") // breaks def=, but handled below.
if len(fields) < 2 { if len(fields) < 2 {
fmt.Fprintf(os.Stderr, "proto: tag has too few fields: %q\n", s) log.Printf("proto: tag has too few fields: %q", s)
return return
} }
@ -214,7 +213,7 @@ func (p *Properties) Parse(s string) {
p.WireType = WireBytes p.WireType = WireBytes
// no numeric converter for non-numeric types // no numeric converter for non-numeric types
default: default:
fmt.Fprintf(os.Stderr, "proto: tag has unknown wire type: %q\n", s) log.Printf("proto: tag has unknown wire type: %q", s)
return return
} }

View File

@ -8,7 +8,7 @@ Gorilla WebSocket is a [Go](http://golang.org/) implementation of the
### Documentation ### Documentation
* [API Reference](http://godoc.org/github.com/gorilla/websocket) * [API Reference](https://pkg.go.dev/github.com/gorilla/websocket?tab=doc)
* [Chat example](https://github.com/gorilla/websocket/tree/master/examples/chat) * [Chat example](https://github.com/gorilla/websocket/tree/master/examples/chat)
* [Command example](https://github.com/gorilla/websocket/tree/master/examples/command) * [Command example](https://github.com/gorilla/websocket/tree/master/examples/command)
* [Client and server example](https://github.com/gorilla/websocket/tree/master/examples/echo) * [Client and server example](https://github.com/gorilla/websocket/tree/master/examples/echo)

View File

@ -244,8 +244,8 @@ type Conn struct {
subprotocol string subprotocol string
// Write fields // Write fields
mu chan bool // used as mutex to protect write to conn mu chan struct{} // used as mutex to protect write to conn
writeBuf []byte // frame is constructed in this buffer. writeBuf []byte // frame is constructed in this buffer.
writePool BufferPool writePool BufferPool
writeBufSize int writeBufSize int
writeDeadline time.Time writeDeadline time.Time
@ -302,8 +302,8 @@ func newConn(conn net.Conn, isServer bool, readBufferSize, writeBufferSize int,
writeBuf = make([]byte, writeBufferSize) writeBuf = make([]byte, writeBufferSize)
} }
mu := make(chan bool, 1) mu := make(chan struct{}, 1)
mu <- true mu <- struct{}{}
c := &Conn{ c := &Conn{
isServer: isServer, isServer: isServer,
br: br, br: br,
@ -377,7 +377,7 @@ func (c *Conn) read(n int) ([]byte, error) {
func (c *Conn) write(frameType int, deadline time.Time, buf0, buf1 []byte) error { func (c *Conn) write(frameType int, deadline time.Time, buf0, buf1 []byte) error {
<-c.mu <-c.mu
defer func() { c.mu <- true }() defer func() { c.mu <- struct{}{} }()
c.writeErrMu.Lock() c.writeErrMu.Lock()
err := c.writeErr err := c.writeErr
@ -429,7 +429,7 @@ func (c *Conn) WriteControl(messageType int, data []byte, deadline time.Time) er
maskBytes(key, 0, buf[6:]) maskBytes(key, 0, buf[6:])
} }
d := time.Hour * 1000 d := 1000 * time.Hour
if !deadline.IsZero() { if !deadline.IsZero() {
d = deadline.Sub(time.Now()) d = deadline.Sub(time.Now())
if d < 0 { if d < 0 {
@ -444,7 +444,7 @@ func (c *Conn) WriteControl(messageType int, data []byte, deadline time.Time) er
case <-timer.C: case <-timer.C:
return errWriteTimeout return errWriteTimeout
} }
defer func() { c.mu <- true }() defer func() { c.mu <- struct{}{} }()
c.writeErrMu.Lock() c.writeErrMu.Lock()
err := c.writeErr err := c.writeErr

View File

@ -187,9 +187,9 @@
// than the largest message do not provide any benefit. // than the largest message do not provide any benefit.
// //
// Depending on the distribution of message sizes, setting the buffer size to // Depending on the distribution of message sizes, setting the buffer size to
// to a value less than the maximum expected message size can greatly reduce // a value less than the maximum expected message size can greatly reduce memory
// memory use with a small impact on performance. Here's an example: If 99% of // use with a small impact on performance. Here's an example: If 99% of the
// the messages are smaller than 256 bytes and the maximum message size is 512 // messages are smaller than 256 bytes and the maximum message size is 512
// bytes, then a buffer size of 256 bytes will result in 1.01 more system calls // bytes, then a buffer size of 256 bytes will result in 1.01 more system calls
// than a buffer size of 512 bytes. The memory savings is 50%. // than a buffer size of 512 bytes. The memory savings is 50%.
// //

View File

@ -1,2 +0,0 @@
github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=

View File

@ -73,8 +73,8 @@ func (pm *PreparedMessage) frame(key prepareKey) (int, []byte, error) {
// Prepare a frame using a 'fake' connection. // Prepare a frame using a 'fake' connection.
// TODO: Refactor code in conn.go to allow more direct construction of // TODO: Refactor code in conn.go to allow more direct construction of
// the frame. // the frame.
mu := make(chan bool, 1) mu := make(chan struct{}, 1)
mu <- true mu <- struct{}{}
var nc prepareConn var nc prepareConn
c := &Conn{ c := &Conn{
conn: &nc, conn: &nc,

View File

@ -37,7 +37,7 @@ func (c *Cache) Purge() {
c.lock.Unlock() c.lock.Unlock()
} }
// Add adds a value to the cache. Returns true if an eviction occurred. // Add adds a value to the cache. Returns true if an eviction occurred.
func (c *Cache) Add(key, value interface{}) (evicted bool) { func (c *Cache) Add(key, value interface{}) (evicted bool) {
c.lock.Lock() c.lock.Lock()
evicted = c.lru.Add(key, value) evicted = c.lru.Add(key, value)
@ -71,8 +71,8 @@ func (c *Cache) Peek(key interface{}) (value interface{}, ok bool) {
return value, ok return value, ok
} }
// ContainsOrAdd checks if a key is in the cache without updating the // ContainsOrAdd checks if a key is in the cache without updating the
// recent-ness or deleting it for being stale, and if not, adds the value. // recent-ness or deleting it for being stale, and if not, adds the value.
// Returns whether found and whether an eviction occurred. // Returns whether found and whether an eviction occurred.
func (c *Cache) ContainsOrAdd(key, value interface{}) (ok, evicted bool) { func (c *Cache) ContainsOrAdd(key, value interface{}) (ok, evicted bool) {
c.lock.Lock() c.lock.Lock()
@ -85,6 +85,22 @@ func (c *Cache) ContainsOrAdd(key, value interface{}) (ok, evicted bool) {
return false, evicted return false, evicted
} }
// PeekOrAdd checks if a key is in the cache without updating the
// recent-ness or deleting it for being stale, and if not, adds the value.
// Returns whether found and whether an eviction occurred.
func (c *Cache) PeekOrAdd(key, value interface{}) (previous interface{}, ok, evicted bool) {
c.lock.Lock()
defer c.lock.Unlock()
previous, ok = c.lru.Peek(key)
if ok {
return previous, true, false
}
evicted = c.lru.Add(key, value)
return nil, false, evicted
}
// Remove removes the provided key from the cache. // Remove removes the provided key from the cache.
func (c *Cache) Remove(key interface{}) (present bool) { func (c *Cache) Remove(key interface{}) (present bool) {
c.lock.Lock() c.lock.Lock()

View File

@ -70,7 +70,11 @@ func (a *API) GetConversations(unreadOnly bool) ([]chat1.ConvSummary, error) {
} }
func (a *API) GetConversation(convID chat1.ConvIDStr) (res chat1.ConvSummary, err error) { func (a *API) GetConversation(convID chat1.ConvIDStr) (res chat1.ConvSummary, err error) {
apiInput := fmt.Sprintf(`{"method":"list", "params": { "options": { "conversation_id": "%s"}}}`, convID) convIDEscaped, err := json.Marshal(convID)
if err != nil {
return res, err
}
apiInput := fmt.Sprintf(`{"method":"list", "params": { "options": { "conversation_id": %s}}}`, convIDEscaped)
output, err := a.doFetch(apiInput) output, err := a.doFetch(apiInput)
if err != nil { if err != nil {
return res, err return res, err
@ -94,7 +98,7 @@ func (a *API) GetTextMessages(channel chat1.ChatChannel, unreadOnly bool) ([]cha
if err != nil { if err != nil {
return nil, err return nil, err
} }
apiInput := fmt.Sprintf(`{"method": "read", "params": {"options": {"channel": %s}}}`, string(channelBytes)) apiInput := fmt.Sprintf(`{"method": "read", "params": {"options": {"channel": %s}}}`, channelBytes)
output, err := a.doFetch(apiInput) output, err := a.doFetch(apiInput)
if err != nil { if err != nil {
return nil, err return nil, err
@ -324,7 +328,11 @@ type LeaveChannel struct {
} }
func (a *API) ListChannels(teamName string) ([]string, error) { func (a *API) ListChannels(teamName string) ([]string, error) {
apiInput := fmt.Sprintf(`{"method": "listconvsonname", "params": {"options": {"topic_type": "CHAT", "members_type": "team", "name": "%s"}}}`, teamName) teamNameEscaped, err := json.Marshal(teamName)
if err != nil {
return nil, err
}
apiInput := fmt.Sprintf(`{"method": "listconvsonname", "params": {"options": {"topic_type": "CHAT", "members_type": "team", "name": %s}}}`, teamNameEscaped)
output, err := a.doFetch(apiInput) output, err := a.doFetch(apiInput)
if err != nil { if err != nil {
return nil, err return nil, err
@ -347,7 +355,16 @@ func (a *API) ListChannels(teamName string) ([]string, error) {
func (a *API) JoinChannel(teamName string, channelName string) (chat1.EmptyRes, error) { func (a *API) JoinChannel(teamName string, channelName string) (chat1.EmptyRes, error) {
empty := chat1.EmptyRes{} empty := chat1.EmptyRes{}
apiInput := fmt.Sprintf(`{"method": "join", "params": {"options": {"channel": {"name": "%s", "members_type": "team", "topic_name": "%s"}}}}`, teamName, channelName) teamNameEscaped, err := json.Marshal(teamName)
if err != nil {
return empty, err
}
channelNameEscaped, err := json.Marshal(channelName)
if err != nil {
return empty, err
}
apiInput := fmt.Sprintf(`{"method": "join", "params": {"options": {"channel": {"name": %s, "members_type": "team", "topic_name": %s}}}}`,
teamNameEscaped, channelNameEscaped)
output, err := a.doFetch(apiInput) output, err := a.doFetch(apiInput)
if err != nil { if err != nil {
return empty, err return empty, err
@ -367,7 +384,16 @@ func (a *API) JoinChannel(teamName string, channelName string) (chat1.EmptyRes,
func (a *API) LeaveChannel(teamName string, channelName string) (chat1.EmptyRes, error) { func (a *API) LeaveChannel(teamName string, channelName string) (chat1.EmptyRes, error) {
empty := chat1.EmptyRes{} empty := chat1.EmptyRes{}
apiInput := fmt.Sprintf(`{"method": "leave", "params": {"options": {"channel": {"name": "%s", "members_type": "team", "topic_name": "%s"}}}}`, teamName, channelName) teamNameEscaped, err := json.Marshal(teamName)
if err != nil {
return empty, err
}
channelNameEscaped, err := json.Marshal(channelName)
if err != nil {
return empty, err
}
apiInput := fmt.Sprintf(`{"method": "leave", "params": {"options": {"channel": {"name": %s, "members_type": "team", "topic_name": %s}}}}`,
teamNameEscaped, channelNameEscaped)
output, err := a.doFetch(apiInput) output, err := a.doFetch(apiInput)
if err != nil { if err != nil {
return empty, err return empty, err
@ -461,13 +487,28 @@ func (a *API) AdvertiseCommands(ad Advertisement) (SendResponse, error) {
return a.doSend(newAdvertiseCmdsMsgArg(ad)) return a.doSend(newAdvertiseCmdsMsgArg(ad))
} }
func (a *API) ClearCommands() error { type clearCmdsOptions struct {
arg := struct { Filter *chat1.ClearCommandAPIParam `json:"filter"`
Method string }
}{
type clearCmdsParams struct {
Options clearCmdsOptions `json:"options"`
}
type clearCmdsArg struct {
Method string `json:"method"`
Params clearCmdsParams `json:"params,omitempty"`
}
func (a *API) ClearCommands(filter *chat1.ClearCommandAPIParam) error {
_, err := a.doSend(clearCmdsArg{
Method: "clearcommands", Method: "clearcommands",
} Params: clearCmdsParams{
_, err := a.doSend(arg) Options: clearCmdsOptions{
Filter: filter,
},
},
})
return err return err
} }

View File

@ -1,9 +1,14 @@
package kbchat package kbchat
import "fmt" import (
"errors"
"fmt"
)
type ErrorCode int type ErrorCode int
var errAPIDisconnected = errors.New("chat API disconnected")
const ( const (
RevisionErrorCode ErrorCode = 2760 RevisionErrorCode ErrorCode = 2760
DeleteNonExistentErrorCode ErrorCode = 2762 DeleteNonExistentErrorCode ErrorCode = 2762

View File

@ -7,7 +7,6 @@ import (
"fmt" "fmt"
"io" "io"
"io/ioutil" "io/ioutil"
"log"
"os" "os"
"os/exec" "os/exec"
"sync" "sync"
@ -18,63 +17,110 @@ import (
"github.com/keybase/go-keybase-chat-bot/kbchat/types/stellar1" "github.com/keybase/go-keybase-chat-bot/kbchat/types/stellar1"
) )
// API is the main object used for communicating with the Keybase JSON API // SubscriptionMessage contains a message and conversation object
type API struct { type SubscriptionMessage struct {
sync.Mutex Message chat1.MsgSummary
apiInput io.Writer Conversation chat1.ConvSummary
apiOutput *bufio.Reader
apiCmd *exec.Cmd
username string
runOpts RunOptions
subscriptions []*NewSubscription
} }
func getUsername(runOpts RunOptions) (username string, err error) { type SubscriptionConversation struct {
p := runOpts.Command("whoami", "-json") Conversation chat1.ConvSummary
output, err := p.StdoutPipe() }
if err != nil {
return "", err
}
p.ExtraFiles = []*os.File{output.(*os.File)}
if err = p.Start(); err != nil {
return "", err
}
doneCh := make(chan error) type SubscriptionWalletEvent struct {
go func() { Payment stellar1.PaymentDetailsLocal
defer func() { close(doneCh) }() }
statusJSON, err := ioutil.ReadAll(output)
if err != nil {
doneCh <- fmt.Errorf("error reading whoami output: %v", err)
return
}
var status keybase1.CurrentStatus
if err := json.Unmarshal(statusJSON, &status); err != nil {
doneCh <- fmt.Errorf("invalid whoami JSON %q: %v", statusJSON, err)
return
}
if status.LoggedIn && status.User != nil {
username = status.User.Username
doneCh <- nil
} else {
doneCh <- fmt.Errorf("unable to authenticate to keybase service: logged in: %v user: %+v", status.LoggedIn, status.User)
}
// Cleanup the command
if err := p.Wait(); err != nil {
log.Printf("unable to wait for cmd: %v", err)
}
}()
// Subscription has methods to control the background message fetcher loop
type Subscription struct {
*DebugOutput
sync.Mutex
newMsgsCh chan SubscriptionMessage
newConvsCh chan SubscriptionConversation
newWalletCh chan SubscriptionWalletEvent
errorCh chan error
running bool
shutdownCh chan struct{}
}
func NewSubscription() *Subscription {
newMsgsCh := make(chan SubscriptionMessage, 100)
newConvsCh := make(chan SubscriptionConversation, 100)
newWalletCh := make(chan SubscriptionWalletEvent, 100)
errorCh := make(chan error, 100)
shutdownCh := make(chan struct{})
return &Subscription{
DebugOutput: NewDebugOutput("Subscription"),
newMsgsCh: newMsgsCh,
newConvsCh: newConvsCh,
newWalletCh: newWalletCh,
shutdownCh: shutdownCh,
errorCh: errorCh,
running: true,
}
}
// Read blocks until a new message arrives
func (m *Subscription) Read() (msg SubscriptionMessage, err error) {
defer m.Trace(&err, "Read")()
select { select {
case err = <-doneCh: case msg = <-m.newMsgsCh:
if err != nil { return msg, nil
return "", err case err = <-m.errorCh:
} return SubscriptionMessage{}, err
case <-time.After(5 * time.Second): case <-m.shutdownCh:
return "", errors.New("unable to run Keybase command") return SubscriptionMessage{}, errors.New("Subscription shutdown")
} }
}
return username, nil func (m *Subscription) ReadNewConvs() (conv SubscriptionConversation, err error) {
defer m.Trace(&err, "ReadNewConvs")()
select {
case conv = <-m.newConvsCh:
return conv, nil
case err = <-m.errorCh:
return SubscriptionConversation{}, err
case <-m.shutdownCh:
return SubscriptionConversation{}, errors.New("Subscription shutdown")
}
}
// Read blocks until a new message arrives
func (m *Subscription) ReadWallet() (msg SubscriptionWalletEvent, err error) {
defer m.Trace(&err, "ReadWallet")()
select {
case msg = <-m.newWalletCh:
return msg, nil
case err = <-m.errorCh:
return SubscriptionWalletEvent{}, err
case <-m.shutdownCh:
return SubscriptionWalletEvent{}, errors.New("Subscription shutdown")
}
}
// Shutdown terminates the background process
func (m *Subscription) Shutdown() {
defer m.Trace(nil, "Shutdown")()
m.Lock()
defer m.Unlock()
if m.running {
close(m.shutdownCh)
m.running = false
}
}
type ListenOptions struct {
Wallet bool
Convs bool
}
type PaymentHolder struct {
Payment stellar1.PaymentDetailsLocal `json:"notification"`
}
type TypeHolder struct {
Type string `json:"type"`
} }
type OneshotOptions struct { type OneshotOptions struct {
@ -110,22 +156,101 @@ func (r RunOptions) Command(args ...string) *exec.Cmd {
} }
// Start fires up the Keybase JSON API in stdin/stdout mode // Start fires up the Keybase JSON API in stdin/stdout mode
func Start(runOpts RunOptions) (*API, error) { func Start(runOpts RunOptions, opts ...func(*API)) (*API, error) {
api := &API{ api := NewAPI(runOpts, opts...)
runOpts: runOpts,
}
if err := api.startPipes(); err != nil { if err := api.startPipes(); err != nil {
return nil, err return nil, err
} }
return api, nil return api, nil
} }
// API is the main object used for communicating with the Keybase JSON API
type API struct {
sync.Mutex
*DebugOutput
apiInput io.Writer
apiOutput *bufio.Reader
apiCmd *exec.Cmd
username string
runOpts RunOptions
subscriptions []*Subscription
Timeout time.Duration
LogSendBytes int
}
func CustomTimeout(timeout time.Duration) func(*API) {
return func(a *API) {
a.Timeout = timeout
}
}
func NewAPI(runOpts RunOptions, opts ...func(*API)) *API {
api := &API{
DebugOutput: NewDebugOutput("API"),
runOpts: runOpts,
Timeout: 5 * time.Second,
LogSendBytes: 1024 * 1024 * 5, // request 5MB so we don't get killed
}
for _, opt := range opts {
opt(api)
}
return api
}
func (a *API) Command(args ...string) *exec.Cmd { func (a *API) Command(args ...string) *exec.Cmd {
return a.runOpts.Command(args...) return a.runOpts.Command(args...)
} }
func (a *API) getUsername(runOpts RunOptions) (username string, err error) {
p := runOpts.Command("whoami", "-json")
output, err := p.StdoutPipe()
if err != nil {
return "", err
}
p.ExtraFiles = []*os.File{output.(*os.File)}
if err = p.Start(); err != nil {
return "", err
}
doneCh := make(chan error)
go func() {
defer func() { close(doneCh) }()
statusJSON, err := ioutil.ReadAll(output)
if err != nil {
doneCh <- fmt.Errorf("error reading whoami output: %v", err)
return
}
var status keybase1.CurrentStatus
if err := json.Unmarshal(statusJSON, &status); err != nil {
doneCh <- fmt.Errorf("invalid whoami JSON %q: %v", statusJSON, err)
return
}
if status.LoggedIn && status.User != nil {
username = status.User.Username
doneCh <- nil
} else {
doneCh <- fmt.Errorf("unable to authenticate to keybase service: logged in: %v user: %+v", status.LoggedIn, status.User)
}
// Cleanup the command
if err := p.Wait(); err != nil {
a.Debug("unable to wait for cmd: %v", err)
}
}()
select {
case err = <-doneCh:
if err != nil {
return "", err
}
case <-time.After(a.Timeout):
return "", errors.New("unable to run Keybase command")
}
return username, nil
}
func (a *API) auth() (string, error) { func (a *API) auth() (string, error) {
username, err := getUsername(a.runOpts) username, err := a.getUsername(a.runOpts)
if err == nil { if err == nil {
return username, nil return username, nil
} }
@ -194,8 +319,6 @@ func (a *API) startPipes() (err error) {
return nil return nil
} }
var errAPIDisconnected = errors.New("chat API disconnected")
func (a *API) getAPIPipesLocked() (io.Writer, *bufio.Reader, error) { func (a *API) getAPIPipesLocked() (io.Writer, *bufio.Reader, error) {
// this should only be called inside a lock // this should only be called inside a lock
if a.apiCmd == nil { if a.apiCmd == nil {
@ -214,7 +337,7 @@ func (a *API) doSend(arg interface{}) (resp SendResponse, err error) {
bArg, err := json.Marshal(arg) bArg, err := json.Marshal(arg)
if err != nil { if err != nil {
return SendResponse{}, err return SendResponse{}, fmt.Errorf("unable to send arg: %+v: %v", arg, err)
} }
input, output, err := a.getAPIPipesLocked() input, output, err := a.getAPIPipesLocked()
if err != nil { if err != nil {
@ -228,7 +351,7 @@ func (a *API) doSend(arg interface{}) (resp SendResponse, err error) {
return SendResponse{}, err return SendResponse{}, err
} }
if err := json.Unmarshal(responseRaw, &resp); err != nil { if err := json.Unmarshal(responseRaw, &resp); err != nil {
return resp, fmt.Errorf("failed to decode API response: %s", err) return resp, fmt.Errorf("failed to decode API response: %v %v", responseRaw, err)
} else if resp.Error != nil { } else if resp.Error != nil {
return resp, errors.New(resp.Error.Message) return resp, errors.New(resp.Error.Message)
} }
@ -254,97 +377,13 @@ func (a *API) doFetch(apiInput string) ([]byte, error) {
return byteOutput, nil return byteOutput, nil
} }
// SubscriptionMessage contains a message and conversation object
type SubscriptionMessage struct {
Message chat1.MsgSummary
Conversation chat1.ConvSummary
}
type SubscriptionConversation struct {
Conversation chat1.ConvSummary
}
type SubscriptionWalletEvent struct {
Payment stellar1.PaymentDetailsLocal
}
// NewSubscription has methods to control the background message fetcher loop
type NewSubscription struct {
sync.Mutex
newMsgsCh <-chan SubscriptionMessage
newConvsCh <-chan SubscriptionConversation
newWalletCh <-chan SubscriptionWalletEvent
errorCh <-chan error
running bool
shutdownCh chan struct{}
}
// Read blocks until a new message arrives
func (m *NewSubscription) Read() (SubscriptionMessage, error) {
select {
case msg := <-m.newMsgsCh:
return msg, nil
case err := <-m.errorCh:
return SubscriptionMessage{}, err
case <-m.shutdownCh:
return SubscriptionMessage{}, errors.New("Subscription shutdown")
}
}
func (m *NewSubscription) ReadNewConvs() (SubscriptionConversation, error) {
select {
case conv := <-m.newConvsCh:
return conv, nil
case err := <-m.errorCh:
return SubscriptionConversation{}, err
case <-m.shutdownCh:
return SubscriptionConversation{}, errors.New("Subscription shutdown")
}
}
// Read blocks until a new message arrives
func (m *NewSubscription) ReadWallet() (SubscriptionWalletEvent, error) {
select {
case msg := <-m.newWalletCh:
return msg, nil
case err := <-m.errorCh:
return SubscriptionWalletEvent{}, err
case <-m.shutdownCh:
return SubscriptionWalletEvent{}, errors.New("Subscription shutdown")
}
}
// Shutdown terminates the background process
func (m *NewSubscription) Shutdown() {
m.Lock()
defer m.Unlock()
if m.running {
close(m.shutdownCh)
m.running = false
}
}
type ListenOptions struct {
Wallet bool
Convs bool
}
type PaymentHolder struct {
Payment stellar1.PaymentDetailsLocal `json:"notification"`
}
type TypeHolder struct {
Type string `json:"type"`
}
// ListenForNewTextMessages proxies to Listen without wallet events // ListenForNewTextMessages proxies to Listen without wallet events
func (a *API) ListenForNewTextMessages() (*NewSubscription, error) { func (a *API) ListenForNewTextMessages() (*Subscription, error) {
opts := ListenOptions{Wallet: false} opts := ListenOptions{Wallet: false}
return a.Listen(opts) return a.Listen(opts)
} }
func (a *API) registerSubscription(sub *NewSubscription) { func (a *API) registerSubscription(sub *Subscription) {
a.Lock() a.Lock()
defer a.Unlock() defer a.Unlock()
a.subscriptions = append(a.subscriptions, sub) a.subscriptions = append(a.subscriptions, sub)
@ -352,30 +391,17 @@ func (a *API) registerSubscription(sub *NewSubscription) {
// Listen fires of a background loop and puts chat messages and wallet // Listen fires of a background loop and puts chat messages and wallet
// events into channels // events into channels
func (a *API) Listen(opts ListenOptions) (*NewSubscription, error) { func (a *API) Listen(opts ListenOptions) (*Subscription, error) {
newMsgsCh := make(chan SubscriptionMessage, 100)
newConvsCh := make(chan SubscriptionConversation, 100)
newWalletCh := make(chan SubscriptionWalletEvent, 100)
errorCh := make(chan error, 100)
shutdownCh := make(chan struct{})
done := make(chan struct{}) done := make(chan struct{})
sub := NewSubscription()
sub := &NewSubscription{
newMsgsCh: newMsgsCh,
newConvsCh: newConvsCh,
newWalletCh: newWalletCh,
shutdownCh: shutdownCh,
errorCh: errorCh,
running: true,
}
a.registerSubscription(sub) a.registerSubscription(sub)
pause := 2 * time.Second pause := 2 * time.Second
readScanner := func(boutput *bufio.Scanner) { readScanner := func(boutput *bufio.Scanner) {
defer func() { done <- struct{}{} }() defer func() { done <- struct{}{} }()
for { for {
select { select {
case <-shutdownCh: case <-sub.shutdownCh:
log.Printf("readScanner: received shutdown") a.Debug("readScanner: received shutdown")
return return
default: default:
} }
@ -383,18 +409,18 @@ func (a *API) Listen(opts ListenOptions) (*NewSubscription, error) {
t := boutput.Text() t := boutput.Text()
var typeHolder TypeHolder var typeHolder TypeHolder
if err := json.Unmarshal([]byte(t), &typeHolder); err != nil { if err := json.Unmarshal([]byte(t), &typeHolder); err != nil {
errorCh <- err sub.errorCh <- fmt.Errorf("err: %v, data: %v", err, t)
break break
} }
switch typeHolder.Type { switch typeHolder.Type {
case "chat": case "chat":
var notification chat1.MsgNotification var notification chat1.MsgNotification
if err := json.Unmarshal([]byte(t), &notification); err != nil { if err := json.Unmarshal([]byte(t), &notification); err != nil {
errorCh <- err sub.errorCh <- fmt.Errorf("err: %v, data: %v", err, t)
break break
} }
if notification.Error != nil { if notification.Error != nil {
log.Printf("error message received: %s", *notification.Error) a.Debug("error message received: %s", *notification.Error)
} else if notification.Msg != nil { } else if notification.Msg != nil {
subscriptionMessage := SubscriptionMessage{ subscriptionMessage := SubscriptionMessage{
Message: *notification.Msg, Message: *notification.Msg,
@ -403,30 +429,30 @@ func (a *API) Listen(opts ListenOptions) (*NewSubscription, error) {
Channel: notification.Msg.Channel, Channel: notification.Msg.Channel,
}, },
} }
newMsgsCh <- subscriptionMessage sub.newMsgsCh <- subscriptionMessage
} }
case "chat_conv": case "chat_conv":
var notification chat1.ConvNotification var notification chat1.ConvNotification
if err := json.Unmarshal([]byte(t), &notification); err != nil { if err := json.Unmarshal([]byte(t), &notification); err != nil {
errorCh <- err sub.errorCh <- fmt.Errorf("err: %v, data: %v", err, t)
break break
} }
if notification.Error != nil { if notification.Error != nil {
log.Printf("error message received: %s", *notification.Error) a.Debug("error message received: %s", *notification.Error)
} else if notification.Conv != nil { } else if notification.Conv != nil {
subscriptionConv := SubscriptionConversation{ subscriptionConv := SubscriptionConversation{
Conversation: *notification.Conv, Conversation: *notification.Conv,
} }
newConvsCh <- subscriptionConv sub.newConvsCh <- subscriptionConv
} }
case "wallet": case "wallet":
var holder PaymentHolder var holder PaymentHolder
if err := json.Unmarshal([]byte(t), &holder); err != nil { if err := json.Unmarshal([]byte(t), &holder); err != nil {
errorCh <- err sub.errorCh <- fmt.Errorf("err: %v, data: %v", err, t)
break break
} }
subscriptionPayment := SubscriptionWalletEvent(holder) subscriptionPayment := SubscriptionWalletEvent(holder)
newWalletCh <- subscriptionPayment sub.newWalletCh <- subscriptionPayment
default: default:
continue continue
} }
@ -434,31 +460,31 @@ func (a *API) Listen(opts ListenOptions) (*NewSubscription, error) {
} }
attempts := 0 attempts := 0
maxAttempts := 1800 maxAttempts := 30
go func() { go func() {
defer func() { defer func() {
close(newMsgsCh) close(sub.newMsgsCh)
close(newConvsCh) close(sub.newConvsCh)
close(newWalletCh) close(sub.newWalletCh)
close(errorCh) close(sub.errorCh)
}() }()
for { for {
select { select {
case <-shutdownCh: case <-sub.shutdownCh:
log.Printf("Listen: received shutdown") a.Debug("Listen: received shutdown")
return return
default: default:
} }
if attempts >= maxAttempts { if attempts >= maxAttempts {
if err := a.LogSend("Listen: failed to auth, giving up"); err != nil { if err := a.LogSend("Listen: failed to auth, giving up"); err != nil {
log.Printf("Listen: logsend failed to send: %v", err) a.Debug("Listen: logsend failed to send: %v", err)
} }
panic("Listen: failed to auth, giving up") panic("Listen: failed to auth, giving up")
} }
attempts++ attempts++
if _, err := a.auth(); err != nil { if _, err := a.auth(); err != nil {
log.Printf("Listen: failed to auth: %s", err) a.Debug("Listen: failed to auth: %s", err)
time.Sleep(pause) time.Sleep(pause)
continue continue
} }
@ -472,13 +498,13 @@ func (a *API) Listen(opts ListenOptions) (*NewSubscription, error) {
p := a.runOpts.Command(cmdElements...) p := a.runOpts.Command(cmdElements...)
output, err := p.StdoutPipe() output, err := p.StdoutPipe()
if err != nil { if err != nil {
log.Printf("Listen: failed to listen: %s", err) a.Debug("Listen: failed to listen: %s", err)
time.Sleep(pause) time.Sleep(pause)
continue continue
} }
stderr, err := p.StderrPipe() stderr, err := p.StderrPipe()
if err != nil { if err != nil {
log.Printf("Listen: failed to listen to stderr: %s", err) a.Debug("Listen: failed to listen to stderr: %s", err)
time.Sleep(pause) time.Sleep(pause)
continue continue
} }
@ -486,19 +512,27 @@ func (a *API) Listen(opts ListenOptions) (*NewSubscription, error) {
boutput := bufio.NewScanner(output) boutput := bufio.NewScanner(output)
if err := p.Start(); err != nil { if err := p.Start(); err != nil {
log.Printf("Listen: failed to make listen scanner: %s", err) a.Debug("Listen: failed to make listen scanner: %s", err)
time.Sleep(pause) time.Sleep(pause)
continue continue
} }
attempts = 0 attempts = 0
go readScanner(boutput) go readScanner(boutput)
<-done select {
case <-sub.shutdownCh:
a.Debug("Listen: received shutdown")
return
case <-done:
}
if err := p.Wait(); err != nil { if err := p.Wait(); err != nil {
stderrBytes, rerr := ioutil.ReadAll(stderr) stderrBytes, rerr := ioutil.ReadAll(stderr)
if rerr != nil { if rerr != nil {
stderrBytes = []byte("failed to get stderr") stderrBytes = []byte(fmt.Sprintf("failed to get stderr: %v", rerr))
}
a.Debug("Listen: failed to Wait for command, restarting pipes: %s (```%s```)", err, stderrBytes)
if err := a.startPipes(); err != nil {
a.Debug("Listen: failed to restart pipes: %v", err)
} }
log.Printf("Listen: failed to Wait for command: %s (```%s```)", err, stderrBytes)
} }
time.Sleep(pause) time.Sleep(pause)
} }
@ -515,31 +549,27 @@ func (a *API) LogSend(feedback string) error {
"log", "send", "log", "send",
"--no-confirm", "--no-confirm",
"--feedback", feedback, "--feedback", feedback,
"-n", fmt.Sprintf("%d", a.LogSendBytes),
} }
// We're determining whether the service is already running by running status
// with autofork disabled.
if err := a.runOpts.Command("--no-auto-fork", "status"); err != nil {
// Assume that there's no service running, so log send as standalone
args = append([]string{"--standalone"}, args...)
}
return a.runOpts.Command(args...).Run() return a.runOpts.Command(args...).Run()
} }
func (a *API) Shutdown() error { func (a *API) Shutdown() (err error) {
defer a.Trace(&err, "Shutdown")()
a.Lock() a.Lock()
defer a.Unlock() defer a.Unlock()
for _, sub := range a.subscriptions { for _, sub := range a.subscriptions {
sub.Shutdown() sub.Shutdown()
} }
if a.apiCmd != nil { if a.apiCmd != nil {
a.Debug("waiting for API command")
if err := a.apiCmd.Wait(); err != nil { if err := a.apiCmd.Wait(); err != nil {
return err return err
} }
} }
if a.runOpts.Oneshot != nil { if a.runOpts.Oneshot != nil {
a.Debug("logging out")
err := a.runOpts.Command("logout", "--force").Run() err := a.runOpts.Command("logout", "--force").Run()
if err != nil { if err != nil {
return err return err
@ -547,6 +577,7 @@ func (a *API) Shutdown() error {
} }
if a.runOpts.StartService { if a.runOpts.StartService {
a.Debug("stopping service")
err := a.runOpts.Command("ctl", "stop", "--shutdown").Run() err := a.runOpts.Command("ctl", "stop", "--shutdown").Run()
if err != nil { if err != nil {
return err return err

View File

@ -26,7 +26,11 @@ type ListUserMemberships struct {
} }
func (a *API) ListMembersOfTeam(teamName string) (res keybase1.TeamMembersDetails, err error) { func (a *API) ListMembersOfTeam(teamName string) (res keybase1.TeamMembersDetails, err error) {
apiInput := fmt.Sprintf(`{"method": "list-team-memberships", "params": {"options": {"team": "%s"}}}`, teamName) teamNameEscaped, err := json.Marshal(teamName)
if err != nil {
return res, err
}
apiInput := fmt.Sprintf(`{"method": "list-team-memberships", "params": {"options": {"team": %s}}}`, teamNameEscaped)
cmd := a.runOpts.Command("team", "api") cmd := a.runOpts.Command("team", "api")
cmd.Stdin = strings.NewReader(apiInput) cmd.Stdin = strings.NewReader(apiInput)
var stderr bytes.Buffer var stderr bytes.Buffer
@ -51,7 +55,11 @@ func (a *API) ListMembersOfTeam(teamName string) (res keybase1.TeamMembersDetail
} }
func (a *API) ListUserMemberships(username string) ([]keybase1.AnnotatedMemberInfo, error) { func (a *API) ListUserMemberships(username string) ([]keybase1.AnnotatedMemberInfo, error) {
apiInput := fmt.Sprintf(`{"method": "list-user-memberships", "params": {"options": {"username": "%s"}}}`, username) usernameEscaped, err := json.Marshal(username)
if err != nil {
return nil, err
}
apiInput := fmt.Sprintf(`{"method": "list-user-memberships", "params": {"options": {"username": %s}}}`, usernameEscaped)
cmd := a.runOpts.Command("team", "api") cmd := a.runOpts.Command("team", "api")
cmd.Stdin = strings.NewReader(apiInput) cmd.Stdin = strings.NewReader(apiInput)
var stderr bytes.Buffer var stderr bytes.Buffer

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/chat1/api.avdl // Input file: ../client/protocol/avdl/chat1/api.avdl
package chat1 package chat1
@ -139,9 +139,119 @@ func (o MsgFlipContent) DeepCopy() MsgFlipContent {
} }
} }
type EmojiContent struct {
Alias string `codec:"alias" json:"alias"`
IsCrossTeam bool `codec:"isCrossTeam" json:"isCrossTeam"`
ConvID *ConvIDStr `codec:"convID,omitempty" json:"convID,omitempty"`
MessageID *MessageID `codec:"messageID,omitempty" json:"messageID,omitempty"`
}
func (o EmojiContent) DeepCopy() EmojiContent {
return EmojiContent{
Alias: o.Alias,
IsCrossTeam: o.IsCrossTeam,
ConvID: (func(x *ConvIDStr) *ConvIDStr {
if x == nil {
return nil
}
tmp := (*x).DeepCopy()
return &tmp
})(o.ConvID),
MessageID: (func(x *MessageID) *MessageID {
if x == nil {
return nil
}
tmp := (*x).DeepCopy()
return &tmp
})(o.MessageID),
}
}
type MsgTextContent struct {
Body string `codec:"body" json:"body"`
Payments []TextPayment `codec:"payments" json:"payments"`
ReplyTo *MessageID `codec:"replyTo,omitempty" json:"replyTo,omitempty"`
ReplyToUID *string `codec:"replyToUID,omitempty" json:"replyToUID,omitempty"`
UserMentions []KnownUserMention `codec:"userMentions" json:"userMentions"`
TeamMentions []KnownTeamMention `codec:"teamMentions" json:"teamMentions"`
LiveLocation *LiveLocation `codec:"liveLocation,omitempty" json:"liveLocation,omitempty"`
Emojis []EmojiContent `codec:"emojis" json:"emojis"`
}
func (o MsgTextContent) DeepCopy() MsgTextContent {
return MsgTextContent{
Body: o.Body,
Payments: (func(x []TextPayment) []TextPayment {
if x == nil {
return nil
}
ret := make([]TextPayment, len(x))
for i, v := range x {
vCopy := v.DeepCopy()
ret[i] = vCopy
}
return ret
})(o.Payments),
ReplyTo: (func(x *MessageID) *MessageID {
if x == nil {
return nil
}
tmp := (*x).DeepCopy()
return &tmp
})(o.ReplyTo),
ReplyToUID: (func(x *string) *string {
if x == nil {
return nil
}
tmp := (*x)
return &tmp
})(o.ReplyToUID),
UserMentions: (func(x []KnownUserMention) []KnownUserMention {
if x == nil {
return nil
}
ret := make([]KnownUserMention, len(x))
for i, v := range x {
vCopy := v.DeepCopy()
ret[i] = vCopy
}
return ret
})(o.UserMentions),
TeamMentions: (func(x []KnownTeamMention) []KnownTeamMention {
if x == nil {
return nil
}
ret := make([]KnownTeamMention, len(x))
for i, v := range x {
vCopy := v.DeepCopy()
ret[i] = vCopy
}
return ret
})(o.TeamMentions),
LiveLocation: (func(x *LiveLocation) *LiveLocation {
if x == nil {
return nil
}
tmp := (*x).DeepCopy()
return &tmp
})(o.LiveLocation),
Emojis: (func(x []EmojiContent) []EmojiContent {
if x == nil {
return nil
}
ret := make([]EmojiContent, len(x))
for i, v := range x {
vCopy := v.DeepCopy()
ret[i] = vCopy
}
return ret
})(o.Emojis),
}
}
type MsgContent struct { type MsgContent struct {
TypeName string `codec:"typeName" json:"type"` TypeName string `codec:"typeName" json:"type"`
Text *MessageText `codec:"text,omitempty" json:"text,omitempty"` Text *MsgTextContent `codec:"text,omitempty" json:"text,omitempty"`
Attachment *MessageAttachment `codec:"attachment,omitempty" json:"attachment,omitempty"` Attachment *MessageAttachment `codec:"attachment,omitempty" json:"attachment,omitempty"`
Edit *MessageEdit `codec:"edit,omitempty" json:"edit,omitempty"` Edit *MessageEdit `codec:"edit,omitempty" json:"edit,omitempty"`
Reaction *MessageReaction `codec:"reaction,omitempty" json:"reaction,omitempty"` Reaction *MessageReaction `codec:"reaction,omitempty" json:"reaction,omitempty"`
@ -159,7 +269,7 @@ type MsgContent struct {
func (o MsgContent) DeepCopy() MsgContent { func (o MsgContent) DeepCopy() MsgContent {
return MsgContent{ return MsgContent{
TypeName: o.TypeName, TypeName: o.TypeName,
Text: (func(x *MessageText) *MessageText { Text: (func(x *MsgTextContent) *MsgTextContent {
if x == nil { if x == nil {
return nil return nil
} }
@ -269,7 +379,7 @@ type MsgSummary struct {
IsEphemeral bool `codec:"isEphemeral,omitempty" json:"is_ephemeral,omitempty"` IsEphemeral bool `codec:"isEphemeral,omitempty" json:"is_ephemeral,omitempty"`
IsEphemeralExpired bool `codec:"isEphemeralExpired,omitempty" json:"is_ephemeral_expired,omitempty"` IsEphemeralExpired bool `codec:"isEphemeralExpired,omitempty" json:"is_ephemeral_expired,omitempty"`
ETime gregor1.Time `codec:"eTime,omitempty" json:"e_time,omitempty"` ETime gregor1.Time `codec:"eTime,omitempty" json:"e_time,omitempty"`
Reactions *ReactionMap `codec:"reactions,omitempty" json:"reactions,omitempty"` Reactions *UIReactionMap `codec:"reactions,omitempty" json:"reactions,omitempty"`
HasPairwiseMacs bool `codec:"hasPairwiseMacs,omitempty" json:"has_pairwise_macs,omitempty"` HasPairwiseMacs bool `codec:"hasPairwiseMacs,omitempty" json:"has_pairwise_macs,omitempty"`
AtMentionUsernames []string `codec:"atMentionUsernames,omitempty" json:"at_mention_usernames,omitempty"` AtMentionUsernames []string `codec:"atMentionUsernames,omitempty" json:"at_mention_usernames,omitempty"`
ChannelMention string `codec:"channelMention,omitempty" json:"channel_mention,omitempty"` ChannelMention string `codec:"channelMention,omitempty" json:"channel_mention,omitempty"`
@ -304,7 +414,7 @@ func (o MsgSummary) DeepCopy() MsgSummary {
IsEphemeral: o.IsEphemeral, IsEphemeral: o.IsEphemeral,
IsEphemeralExpired: o.IsEphemeralExpired, IsEphemeralExpired: o.IsEphemeralExpired,
ETime: o.ETime.DeepCopy(), ETime: o.ETime.DeepCopy(),
Reactions: (func(x *ReactionMap) *ReactionMap { Reactions: (func(x *UIReactionMap) *UIReactionMap {
if x == nil { if x == nil {
return nil return nil
} }
@ -832,6 +942,7 @@ type AdvertiseCommandAPIParam struct {
Typ string `codec:"typ" json:"type"` Typ string `codec:"typ" json:"type"`
Commands []UserBotCommandInput `codec:"commands" json:"commands"` Commands []UserBotCommandInput `codec:"commands" json:"commands"`
TeamName string `codec:"teamName,omitempty" json:"team_name,omitempty"` TeamName string `codec:"teamName,omitempty" json:"team_name,omitempty"`
ConvID ConvIDStr `codec:"convID,omitempty" json:"conv_id,omitempty"`
} }
func (o AdvertiseCommandAPIParam) DeepCopy() AdvertiseCommandAPIParam { func (o AdvertiseCommandAPIParam) DeepCopy() AdvertiseCommandAPIParam {
@ -849,6 +960,21 @@ func (o AdvertiseCommandAPIParam) DeepCopy() AdvertiseCommandAPIParam {
return ret return ret
})(o.Commands), })(o.Commands),
TeamName: o.TeamName, TeamName: o.TeamName,
ConvID: o.ConvID.DeepCopy(),
}
}
type ClearCommandAPIParam struct {
Typ string `codec:"typ" json:"type"`
TeamName string `codec:"teamName,omitempty" json:"team_name,omitempty"`
ConvID ConvIDStr `codec:"convID,omitempty" json:"conv_id,omitempty"`
}
func (o ClearCommandAPIParam) DeepCopy() ClearCommandAPIParam {
return ClearCommandAPIParam{
Typ: o.Typ,
TeamName: o.TeamName,
ConvID: o.ConvID.DeepCopy(),
} }
} }
@ -897,17 +1023,17 @@ func (o GetResetConvMembersRes) DeepCopy() GetResetConvMembersRes {
} }
type DeviceInfo struct { type DeviceInfo struct {
DeviceID keybase1.DeviceID `codec:"deviceID" json:"id"` DeviceID keybase1.DeviceID `codec:"deviceID" json:"id"`
DeviceDescription string `codec:"deviceDescription" json:"description"` DeviceDescription string `codec:"deviceDescription" json:"description"`
DeviceType string `codec:"deviceType" json:"type"` DeviceType keybase1.DeviceTypeV2 `codec:"deviceType" json:"type"`
DeviceCtime int64 `codec:"deviceCtime" json:"ctime"` DeviceCtime int64 `codec:"deviceCtime" json:"ctime"`
} }
func (o DeviceInfo) DeepCopy() DeviceInfo { func (o DeviceInfo) DeepCopy() DeviceInfo {
return DeviceInfo{ return DeviceInfo{
DeviceID: o.DeviceID.DeepCopy(), DeviceID: o.DeviceID.DeepCopy(),
DeviceDescription: o.DeviceDescription, DeviceDescription: o.DeviceDescription,
DeviceType: o.DeviceType, DeviceType: o.DeviceType.DeepCopy(),
DeviceCtime: o.DeviceCtime, DeviceCtime: o.DeviceCtime,
} }
} }

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/chat1/blocking.avdl // Input file: ../client/protocol/avdl/chat1/blocking.avdl
package chat1 package chat1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/chat1/chat_ui.avdl // Input file: ../client/protocol/avdl/chat1/chat_ui.avdl
package chat1 package chat1
@ -537,6 +537,7 @@ type InboxUIItem struct {
IsDefaultConv bool `codec:"isDefaultConv" json:"isDefaultConv"` IsDefaultConv bool `codec:"isDefaultConv" json:"isDefaultConv"`
Name string `codec:"name" json:"name"` Name string `codec:"name" json:"name"`
Snippet string `codec:"snippet" json:"snippet"` Snippet string `codec:"snippet" json:"snippet"`
SnippetDecorated string `codec:"snippetDecorated" json:"snippetDecorated"`
SnippetDecoration SnippetDecoration `codec:"snippetDecoration" json:"snippetDecoration"` SnippetDecoration SnippetDecoration `codec:"snippetDecoration" json:"snippetDecoration"`
Channel string `codec:"channel" json:"channel"` Channel string `codec:"channel" json:"channel"`
Headline string `codec:"headline" json:"headline"` Headline string `codec:"headline" json:"headline"`
@ -579,6 +580,7 @@ func (o InboxUIItem) DeepCopy() InboxUIItem {
IsDefaultConv: o.IsDefaultConv, IsDefaultConv: o.IsDefaultConv,
Name: o.Name, Name: o.Name,
Snippet: o.Snippet, Snippet: o.Snippet,
SnippetDecorated: o.SnippetDecorated,
SnippetDecoration: o.SnippetDecoration.DeepCopy(), SnippetDecoration: o.SnippetDecoration.DeepCopy(),
Channel: o.Channel, Channel: o.Channel,
Headline: o.Headline, Headline: o.Headline,
@ -889,6 +891,50 @@ func (o UIMessageUnfurlInfo) DeepCopy() UIMessageUnfurlInfo {
} }
} }
type UIReactionDesc struct {
Decorated string `codec:"decorated" json:"decorated"`
Users map[string]Reaction `codec:"users" json:"users"`
}
func (o UIReactionDesc) DeepCopy() UIReactionDesc {
return UIReactionDesc{
Decorated: o.Decorated,
Users: (func(x map[string]Reaction) map[string]Reaction {
if x == nil {
return nil
}
ret := make(map[string]Reaction, len(x))
for k, v := range x {
kCopy := k
vCopy := v.DeepCopy()
ret[kCopy] = vCopy
}
return ret
})(o.Users),
}
}
type UIReactionMap struct {
Reactions map[string]UIReactionDesc `codec:"reactions" json:"reactions"`
}
func (o UIReactionMap) DeepCopy() UIReactionMap {
return UIReactionMap{
Reactions: (func(x map[string]UIReactionDesc) map[string]UIReactionDesc {
if x == nil {
return nil
}
ret := make(map[string]UIReactionDesc, len(x))
for k, v := range x {
kCopy := k
vCopy := v.DeepCopy()
ret[kCopy] = vCopy
}
return ret
})(o.Reactions),
}
}
type UIMessageValid struct { type UIMessageValid struct {
MessageID MessageID `codec:"messageID" json:"messageID"` MessageID MessageID `codec:"messageID" json:"messageID"`
Ctime gregor1.Time `codec:"ctime" json:"ctime"` Ctime gregor1.Time `codec:"ctime" json:"ctime"`
@ -898,7 +944,7 @@ type UIMessageValid struct {
BodySummary string `codec:"bodySummary" json:"bodySummary"` BodySummary string `codec:"bodySummary" json:"bodySummary"`
SenderUsername string `codec:"senderUsername" json:"senderUsername"` SenderUsername string `codec:"senderUsername" json:"senderUsername"`
SenderDeviceName string `codec:"senderDeviceName" json:"senderDeviceName"` SenderDeviceName string `codec:"senderDeviceName" json:"senderDeviceName"`
SenderDeviceType string `codec:"senderDeviceType" json:"senderDeviceType"` SenderDeviceType keybase1.DeviceTypeV2 `codec:"senderDeviceType" json:"senderDeviceType"`
SenderUID gregor1.UID `codec:"senderUID" json:"senderUID"` SenderUID gregor1.UID `codec:"senderUID" json:"senderUID"`
SenderDeviceID gregor1.DeviceID `codec:"senderDeviceID" json:"senderDeviceID"` SenderDeviceID gregor1.DeviceID `codec:"senderDeviceID" json:"senderDeviceID"`
Superseded bool `codec:"superseded" json:"superseded"` Superseded bool `codec:"superseded" json:"superseded"`
@ -911,7 +957,7 @@ type UIMessageValid struct {
IsEphemeralExpired bool `codec:"isEphemeralExpired" json:"isEphemeralExpired"` IsEphemeralExpired bool `codec:"isEphemeralExpired" json:"isEphemeralExpired"`
ExplodedBy *string `codec:"explodedBy,omitempty" json:"explodedBy,omitempty"` ExplodedBy *string `codec:"explodedBy,omitempty" json:"explodedBy,omitempty"`
Etime gregor1.Time `codec:"etime" json:"etime"` Etime gregor1.Time `codec:"etime" json:"etime"`
Reactions ReactionMap `codec:"reactions" json:"reactions"` Reactions UIReactionMap `codec:"reactions" json:"reactions"`
HasPairwiseMacs bool `codec:"hasPairwiseMacs" json:"hasPairwiseMacs"` HasPairwiseMacs bool `codec:"hasPairwiseMacs" json:"hasPairwiseMacs"`
PaymentInfos []UIPaymentInfo `codec:"paymentInfos" json:"paymentInfos"` PaymentInfos []UIPaymentInfo `codec:"paymentInfos" json:"paymentInfos"`
RequestInfo *UIRequestInfo `codec:"requestInfo,omitempty" json:"requestInfo,omitempty"` RequestInfo *UIRequestInfo `codec:"requestInfo,omitempty" json:"requestInfo,omitempty"`
@ -947,7 +993,7 @@ func (o UIMessageValid) DeepCopy() UIMessageValid {
BodySummary: o.BodySummary, BodySummary: o.BodySummary,
SenderUsername: o.SenderUsername, SenderUsername: o.SenderUsername,
SenderDeviceName: o.SenderDeviceName, SenderDeviceName: o.SenderDeviceName,
SenderDeviceType: o.SenderDeviceType, SenderDeviceType: o.SenderDeviceType.DeepCopy(),
SenderUID: o.SenderUID.DeepCopy(), SenderUID: o.SenderUID.DeepCopy(),
SenderDeviceID: o.SenderDeviceID.DeepCopy(), SenderDeviceID: o.SenderDeviceID.DeepCopy(),
Superseded: o.Superseded, Superseded: o.Superseded,
@ -1068,6 +1114,7 @@ type UIMessageOutbox struct {
IsEphemeral bool `codec:"isEphemeral" json:"isEphemeral"` IsEphemeral bool `codec:"isEphemeral" json:"isEphemeral"`
FlipGameID *FlipGameIDStr `codec:"flipGameID,omitempty" json:"flipGameID,omitempty"` FlipGameID *FlipGameIDStr `codec:"flipGameID,omitempty" json:"flipGameID,omitempty"`
ReplyTo *UIMessage `codec:"replyTo,omitempty" json:"replyTo,omitempty"` ReplyTo *UIMessage `codec:"replyTo,omitempty" json:"replyTo,omitempty"`
Supersedes MessageID `codec:"supersedes" json:"supersedes"`
Filename string `codec:"filename" json:"filename"` Filename string `codec:"filename" json:"filename"`
Title string `codec:"title" json:"title"` Title string `codec:"title" json:"title"`
Preview *MakePreviewRes `codec:"preview,omitempty" json:"preview,omitempty"` Preview *MakePreviewRes `codec:"preview,omitempty" json:"preview,omitempty"`
@ -1103,8 +1150,9 @@ func (o UIMessageOutbox) DeepCopy() UIMessageOutbox {
tmp := (*x).DeepCopy() tmp := (*x).DeepCopy()
return &tmp return &tmp
})(o.ReplyTo), })(o.ReplyTo),
Filename: o.Filename, Supersedes: o.Supersedes.DeepCopy(),
Title: o.Title, Filename: o.Filename,
Title: o.Title,
Preview: (func(x *MakePreviewRes) *MakePreviewRes { Preview: (func(x *MakePreviewRes) *MakePreviewRes {
if x == nil { if x == nil {
return nil return nil
@ -1418,6 +1466,7 @@ const (
UITextDecorationTyp_LINK UITextDecorationTyp = 4 UITextDecorationTyp_LINK UITextDecorationTyp = 4
UITextDecorationTyp_MAILTO UITextDecorationTyp = 5 UITextDecorationTyp_MAILTO UITextDecorationTyp = 5
UITextDecorationTyp_KBFSPATH UITextDecorationTyp = 6 UITextDecorationTyp_KBFSPATH UITextDecorationTyp = 6
UITextDecorationTyp_EMOJI UITextDecorationTyp = 7
) )
func (o UITextDecorationTyp) DeepCopy() UITextDecorationTyp { return o } func (o UITextDecorationTyp) DeepCopy() UITextDecorationTyp { return o }
@ -1430,6 +1479,7 @@ var UITextDecorationTypMap = map[string]UITextDecorationTyp{
"LINK": 4, "LINK": 4,
"MAILTO": 5, "MAILTO": 5,
"KBFSPATH": 6, "KBFSPATH": 6,
"EMOJI": 7,
} }
var UITextDecorationTypRevMap = map[UITextDecorationTyp]string{ var UITextDecorationTypRevMap = map[UITextDecorationTyp]string{
@ -1440,6 +1490,7 @@ var UITextDecorationTypRevMap = map[UITextDecorationTyp]string{
4: "LINK", 4: "LINK",
5: "MAILTO", 5: "MAILTO",
6: "KBFSPATH", 6: "KBFSPATH",
7: "EMOJI",
} }
func (e UITextDecorationTyp) String() string { func (e UITextDecorationTyp) String() string {
@ -1566,6 +1617,7 @@ type UITextDecoration struct {
Link__ *UILinkDecoration `codec:"link,omitempty" json:"link,omitempty"` Link__ *UILinkDecoration `codec:"link,omitempty" json:"link,omitempty"`
Mailto__ *UILinkDecoration `codec:"mailto,omitempty" json:"mailto,omitempty"` Mailto__ *UILinkDecoration `codec:"mailto,omitempty" json:"mailto,omitempty"`
Kbfspath__ *KBFSPath `codec:"kbfspath,omitempty" json:"kbfspath,omitempty"` Kbfspath__ *KBFSPath `codec:"kbfspath,omitempty" json:"kbfspath,omitempty"`
Emoji__ *Emoji `codec:"emoji,omitempty" json:"emoji,omitempty"`
} }
func (o *UITextDecoration) Typ() (ret UITextDecorationTyp, err error) { func (o *UITextDecoration) Typ() (ret UITextDecorationTyp, err error) {
@ -1605,6 +1657,11 @@ func (o *UITextDecoration) Typ() (ret UITextDecorationTyp, err error) {
err = errors.New("unexpected nil value for Kbfspath__") err = errors.New("unexpected nil value for Kbfspath__")
return ret, err return ret, err
} }
case UITextDecorationTyp_EMOJI:
if o.Emoji__ == nil {
err = errors.New("unexpected nil value for Emoji__")
return ret, err
}
} }
return o.Typ__, nil return o.Typ__, nil
} }
@ -1679,6 +1736,16 @@ func (o UITextDecoration) Kbfspath() (res KBFSPath) {
return *o.Kbfspath__ return *o.Kbfspath__
} }
func (o UITextDecoration) Emoji() (res Emoji) {
if o.Typ__ != UITextDecorationTyp_EMOJI {
panic("wrong case accessed")
}
if o.Emoji__ == nil {
return
}
return *o.Emoji__
}
func NewUITextDecorationWithPayment(v TextPayment) UITextDecoration { func NewUITextDecorationWithPayment(v TextPayment) UITextDecoration {
return UITextDecoration{ return UITextDecoration{
Typ__: UITextDecorationTyp_PAYMENT, Typ__: UITextDecorationTyp_PAYMENT,
@ -1728,6 +1795,13 @@ func NewUITextDecorationWithKbfspath(v KBFSPath) UITextDecoration {
} }
} }
func NewUITextDecorationWithEmoji(v Emoji) UITextDecoration {
return UITextDecoration{
Typ__: UITextDecorationTyp_EMOJI,
Emoji__: &v,
}
}
func (o UITextDecoration) DeepCopy() UITextDecoration { func (o UITextDecoration) DeepCopy() UITextDecoration {
return UITextDecoration{ return UITextDecoration{
Typ__: o.Typ__.DeepCopy(), Typ__: o.Typ__.DeepCopy(),
@ -1780,6 +1854,13 @@ func (o UITextDecoration) DeepCopy() UITextDecoration {
tmp := (*x).DeepCopy() tmp := (*x).DeepCopy()
return &tmp return &tmp
})(o.Kbfspath__), })(o.Kbfspath__),
Emoji__: (func(x *Emoji) *Emoji {
if x == nil {
return nil
}
tmp := (*x).DeepCopy()
return &tmp
})(o.Emoji__),
} }
} }
@ -1917,6 +1998,50 @@ func (o UIChatSearchConvHits) DeepCopy() UIChatSearchConvHits {
} }
} }
type UIChatSearchTeamHits struct {
Hits []keybase1.TeamSearchItem `codec:"hits" json:"hits"`
SuggestedMatches bool `codec:"suggestedMatches" json:"suggestedMatches"`
}
func (o UIChatSearchTeamHits) DeepCopy() UIChatSearchTeamHits {
return UIChatSearchTeamHits{
Hits: (func(x []keybase1.TeamSearchItem) []keybase1.TeamSearchItem {
if x == nil {
return nil
}
ret := make([]keybase1.TeamSearchItem, len(x))
for i, v := range x {
vCopy := v.DeepCopy()
ret[i] = vCopy
}
return ret
})(o.Hits),
SuggestedMatches: o.SuggestedMatches,
}
}
type UIChatSearchBotHits struct {
Hits []keybase1.FeaturedBot `codec:"hits" json:"hits"`
SuggestedMatches bool `codec:"suggestedMatches" json:"suggestedMatches"`
}
func (o UIChatSearchBotHits) DeepCopy() UIChatSearchBotHits {
return UIChatSearchBotHits{
Hits: (func(x []keybase1.FeaturedBot) []keybase1.FeaturedBot {
if x == nil {
return nil
}
ret := make([]keybase1.FeaturedBot, len(x))
for i, v := range x {
vCopy := v.DeepCopy()
ret[i] = vCopy
}
return ret
})(o.Hits),
SuggestedMatches: o.SuggestedMatches,
}
}
type UIChatPayment struct { type UIChatPayment struct {
Username string `codec:"username" json:"username"` Username string `codec:"username" json:"username"`
FullName string `codec:"fullName" json:"fullName"` FullName string `codec:"fullName" json:"fullName"`

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/chat1/commands.avdl // Input file: ../client/protocol/avdl/chat1/commands.avdl
package chat1 package chat1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/chat1/common.avdl // Input file: ../client/protocol/avdl/chat1/common.avdl
package chat1 package chat1
@ -9,6 +9,7 @@ import (
gregor1 "github.com/keybase/go-keybase-chat-bot/kbchat/types/gregor1" gregor1 "github.com/keybase/go-keybase-chat-bot/kbchat/types/gregor1"
keybase1 "github.com/keybase/go-keybase-chat-bot/kbchat/types/keybase1" keybase1 "github.com/keybase/go-keybase-chat-bot/kbchat/types/keybase1"
stellar1 "github.com/keybase/go-keybase-chat-bot/kbchat/types/stellar1"
) )
type ThreadID []byte type ThreadID []byte
@ -311,6 +312,8 @@ const (
TopicType_CHAT TopicType = 1 TopicType_CHAT TopicType = 1
TopicType_DEV TopicType = 2 TopicType_DEV TopicType = 2
TopicType_KBFSFILEEDIT TopicType = 3 TopicType_KBFSFILEEDIT TopicType = 3
TopicType_EMOJI TopicType = 4
TopicType_EMOJICROSS TopicType = 5
) )
func (o TopicType) DeepCopy() TopicType { return o } func (o TopicType) DeepCopy() TopicType { return o }
@ -320,6 +323,8 @@ var TopicTypeMap = map[string]TopicType{
"CHAT": 1, "CHAT": 1,
"DEV": 2, "DEV": 2,
"KBFSFILEEDIT": 3, "KBFSFILEEDIT": 3,
"EMOJI": 4,
"EMOJICROSS": 5,
} }
var TopicTypeRevMap = map[TopicType]string{ var TopicTypeRevMap = map[TopicType]string{
@ -327,6 +332,8 @@ var TopicTypeRevMap = map[TopicType]string{
1: "CHAT", 1: "CHAT",
2: "DEV", 2: "DEV",
3: "KBFSFILEEDIT", 3: "KBFSFILEEDIT",
4: "EMOJI",
5: "EMOJICROSS",
} }
type TeamType int type TeamType int
@ -627,6 +634,32 @@ func (o RateLimit) DeepCopy() RateLimit {
} }
} }
type InboxParticipantsMode int
const (
InboxParticipantsMode_ALL InboxParticipantsMode = 0
InboxParticipantsMode_SKIP_TEAMS InboxParticipantsMode = 1
)
func (o InboxParticipantsMode) DeepCopy() InboxParticipantsMode { return o }
var InboxParticipantsModeMap = map[string]InboxParticipantsMode{
"ALL": 0,
"SKIP_TEAMS": 1,
}
var InboxParticipantsModeRevMap = map[InboxParticipantsMode]string{
0: "ALL",
1: "SKIP_TEAMS",
}
func (e InboxParticipantsMode) String() string {
if v, ok := InboxParticipantsModeRevMap[e]; ok {
return v
}
return fmt.Sprintf("%v", int(e))
}
type GetInboxQuery struct { type GetInboxQuery struct {
ConvID *ConversationID `codec:"convID,omitempty" json:"convID,omitempty"` ConvID *ConversationID `codec:"convID,omitempty" json:"convID,omitempty"`
TopicType *TopicType `codec:"topicType,omitempty" json:"topicType,omitempty"` TopicType *TopicType `codec:"topicType,omitempty" json:"topicType,omitempty"`
@ -645,6 +678,7 @@ type GetInboxQuery struct {
ReadOnly bool `codec:"readOnly" json:"readOnly"` ReadOnly bool `codec:"readOnly" json:"readOnly"`
ComputeActiveList bool `codec:"computeActiveList" json:"computeActiveList"` ComputeActiveList bool `codec:"computeActiveList" json:"computeActiveList"`
SummarizeMaxMsgs bool `codec:"summarizeMaxMsgs" json:"summarizeMaxMsgs"` SummarizeMaxMsgs bool `codec:"summarizeMaxMsgs" json:"summarizeMaxMsgs"`
ParticipantsMode InboxParticipantsMode `codec:"participantsMode" json:"participantsMode"`
SkipBgLoads bool `codec:"skipBgLoads" json:"skipBgLoads"` SkipBgLoads bool `codec:"skipBgLoads" json:"skipBgLoads"`
AllowUnseenQuery bool `codec:"allowUnseenQuery" json:"allowUnseenQuery"` AllowUnseenQuery bool `codec:"allowUnseenQuery" json:"allowUnseenQuery"`
} }
@ -766,6 +800,7 @@ func (o GetInboxQuery) DeepCopy() GetInboxQuery {
ReadOnly: o.ReadOnly, ReadOnly: o.ReadOnly,
ComputeActiveList: o.ComputeActiveList, ComputeActiveList: o.ComputeActiveList,
SummarizeMaxMsgs: o.SummarizeMaxMsgs, SummarizeMaxMsgs: o.SummarizeMaxMsgs,
ParticipantsMode: o.ParticipantsMode.DeepCopy(),
SkipBgLoads: o.SkipBgLoads, SkipBgLoads: o.SkipBgLoads,
AllowUnseenQuery: o.AllowUnseenQuery, AllowUnseenQuery: o.AllowUnseenQuery,
} }
@ -959,6 +994,7 @@ type ConversationReaderInfo struct {
MaxMsgid MessageID `codec:"maxMsgid" json:"maxMsgid"` MaxMsgid MessageID `codec:"maxMsgid" json:"maxMsgid"`
Status ConversationMemberStatus `codec:"status" json:"status"` Status ConversationMemberStatus `codec:"status" json:"status"`
UntrustedTeamRole keybase1.TeamRole `codec:"untrustedTeamRole" json:"untrustedTeamRole"` UntrustedTeamRole keybase1.TeamRole `codec:"untrustedTeamRole" json:"untrustedTeamRole"`
LastSendTime gregor1.Time `codec:"l" json:"l"`
Journeycard *ConversationJourneycardInfo `codec:"jc,omitempty" json:"jc,omitempty"` Journeycard *ConversationJourneycardInfo `codec:"jc,omitempty" json:"jc,omitempty"`
} }
@ -969,6 +1005,7 @@ func (o ConversationReaderInfo) DeepCopy() ConversationReaderInfo {
MaxMsgid: o.MaxMsgid.DeepCopy(), MaxMsgid: o.MaxMsgid.DeepCopy(),
Status: o.Status.DeepCopy(), Status: o.Status.DeepCopy(),
UntrustedTeamRole: o.UntrustedTeamRole.DeepCopy(), UntrustedTeamRole: o.UntrustedTeamRole.DeepCopy(),
LastSendTime: o.LastSendTime.DeepCopy(),
Journeycard: (func(x *ConversationJourneycardInfo) *ConversationJourneycardInfo { Journeycard: (func(x *ConversationJourneycardInfo) *ConversationJourneycardInfo {
if x == nil { if x == nil {
return nil return nil
@ -1333,6 +1370,7 @@ type MessageClientHeader struct {
EphemeralMetadata *MsgEphemeralMetadata `codec:"em,omitempty" json:"em,omitempty"` EphemeralMetadata *MsgEphemeralMetadata `codec:"em,omitempty" json:"em,omitempty"`
PairwiseMacs map[keybase1.KID][]byte `codec:"pm" json:"pm"` PairwiseMacs map[keybase1.KID][]byte `codec:"pm" json:"pm"`
BotUID *gregor1.UID `codec:"b,omitempty" json:"b,omitempty"` BotUID *gregor1.UID `codec:"b,omitempty" json:"b,omitempty"`
TxID *stellar1.TransactionID `codec:"t,omitempty" json:"t,omitempty"`
} }
func (o MessageClientHeader) DeepCopy() MessageClientHeader { func (o MessageClientHeader) DeepCopy() MessageClientHeader {
@ -1432,6 +1470,13 @@ func (o MessageClientHeader) DeepCopy() MessageClientHeader {
tmp := (*x).DeepCopy() tmp := (*x).DeepCopy()
return &tmp return &tmp
})(o.BotUID), })(o.BotUID),
TxID: (func(x *stellar1.TransactionID) *stellar1.TransactionID {
if x == nil {
return nil
}
tmp := (*x).DeepCopy()
return &tmp
})(o.TxID),
} }
} }
@ -1959,6 +2004,7 @@ const (
GetThreadReason_KBFSFILEACTIVITY GetThreadReason = 8 GetThreadReason_KBFSFILEACTIVITY GetThreadReason = 8
GetThreadReason_COINFLIP GetThreadReason = 9 GetThreadReason_COINFLIP GetThreadReason = 9
GetThreadReason_BOTCOMMANDS GetThreadReason = 10 GetThreadReason_BOTCOMMANDS GetThreadReason = 10
GetThreadReason_EMOJISOURCE GetThreadReason = 11
) )
func (o GetThreadReason) DeepCopy() GetThreadReason { return o } func (o GetThreadReason) DeepCopy() GetThreadReason { return o }
@ -1975,6 +2021,7 @@ var GetThreadReasonMap = map[string]GetThreadReason{
"KBFSFILEACTIVITY": 8, "KBFSFILEACTIVITY": 8,
"COINFLIP": 9, "COINFLIP": 9,
"BOTCOMMANDS": 10, "BOTCOMMANDS": 10,
"EMOJISOURCE": 11,
} }
var GetThreadReasonRevMap = map[GetThreadReason]string{ var GetThreadReasonRevMap = map[GetThreadReason]string{
@ -1989,6 +2036,7 @@ var GetThreadReasonRevMap = map[GetThreadReason]string{
8: "KBFSFILEACTIVITY", 8: "KBFSFILEACTIVITY",
9: "COINFLIP", 9: "COINFLIP",
10: "BOTCOMMANDS", 10: "BOTCOMMANDS",
11: "EMOJISOURCE",
} }
func (e GetThreadReason) String() string { func (e GetThreadReason) String() string {
@ -2044,6 +2092,9 @@ type SearchOpts struct {
MaxConvsHit int `codec:"maxConvsHit" json:"maxConvsHit"` MaxConvsHit int `codec:"maxConvsHit" json:"maxConvsHit"`
ConvID *ConversationID `codec:"convID,omitempty" json:"convID,omitempty"` ConvID *ConversationID `codec:"convID,omitempty" json:"convID,omitempty"`
MaxNameConvs int `codec:"maxNameConvs" json:"maxNameConvs"` MaxNameConvs int `codec:"maxNameConvs" json:"maxNameConvs"`
MaxTeams int `codec:"maxTeams" json:"maxTeams"`
MaxBots int `codec:"maxBots" json:"maxBots"`
SkipBotCache bool `codec:"skipBotCache" json:"skipBotCache"`
} }
func (o SearchOpts) DeepCopy() SearchOpts { func (o SearchOpts) DeepCopy() SearchOpts {
@ -2076,6 +2127,9 @@ func (o SearchOpts) DeepCopy() SearchOpts {
return &tmp return &tmp
})(o.ConvID), })(o.ConvID),
MaxNameConvs: o.MaxNameConvs, MaxNameConvs: o.MaxNameConvs,
MaxTeams: o.MaxTeams,
MaxBots: o.MaxBots,
SkipBotCache: o.SkipBotCache,
} }
} }
@ -2387,6 +2441,7 @@ type Asset struct {
Size int64 `codec:"size" json:"size"` Size int64 `codec:"size" json:"size"`
MimeType string `codec:"mimeType" json:"mimeType"` MimeType string `codec:"mimeType" json:"mimeType"`
EncHash Hash `codec:"encHash" json:"encHash"` EncHash Hash `codec:"encHash" json:"encHash"`
PtHash Hash `codec:"ptHash" json:"ptHash"`
Key []byte `codec:"key" json:"key"` Key []byte `codec:"key" json:"key"`
VerifyKey []byte `codec:"verifyKey" json:"verifyKey"` VerifyKey []byte `codec:"verifyKey" json:"verifyKey"`
Title string `codec:"title" json:"title"` Title string `codec:"title" json:"title"`
@ -2405,6 +2460,7 @@ func (o Asset) DeepCopy() Asset {
Size: o.Size, Size: o.Size,
MimeType: o.MimeType, MimeType: o.MimeType,
EncHash: o.EncHash.DeepCopy(), EncHash: o.EncHash.DeepCopy(),
PtHash: o.PtHash.DeepCopy(),
Key: (func(x []byte) []byte { Key: (func(x []byte) []byte {
if x == nil { if x == nil {
return nil return nil
@ -2435,6 +2491,7 @@ const (
BotCommandsAdvertisementTyp_PUBLIC BotCommandsAdvertisementTyp = 0 BotCommandsAdvertisementTyp_PUBLIC BotCommandsAdvertisementTyp = 0
BotCommandsAdvertisementTyp_TLFID_MEMBERS BotCommandsAdvertisementTyp = 1 BotCommandsAdvertisementTyp_TLFID_MEMBERS BotCommandsAdvertisementTyp = 1
BotCommandsAdvertisementTyp_TLFID_CONVS BotCommandsAdvertisementTyp = 2 BotCommandsAdvertisementTyp_TLFID_CONVS BotCommandsAdvertisementTyp = 2
BotCommandsAdvertisementTyp_CONV BotCommandsAdvertisementTyp = 3
) )
func (o BotCommandsAdvertisementTyp) DeepCopy() BotCommandsAdvertisementTyp { return o } func (o BotCommandsAdvertisementTyp) DeepCopy() BotCommandsAdvertisementTyp { return o }
@ -2443,12 +2500,14 @@ var BotCommandsAdvertisementTypMap = map[string]BotCommandsAdvertisementTyp{
"PUBLIC": 0, "PUBLIC": 0,
"TLFID_MEMBERS": 1, "TLFID_MEMBERS": 1,
"TLFID_CONVS": 2, "TLFID_CONVS": 2,
"CONV": 3,
} }
var BotCommandsAdvertisementTypRevMap = map[BotCommandsAdvertisementTyp]string{ var BotCommandsAdvertisementTypRevMap = map[BotCommandsAdvertisementTyp]string{
0: "PUBLIC", 0: "PUBLIC",
1: "TLFID_MEMBERS", 1: "TLFID_MEMBERS",
2: "TLFID_CONVS", 2: "TLFID_CONVS",
3: "CONV",
} }
func (e BotCommandsAdvertisementTyp) String() string { func (e BotCommandsAdvertisementTyp) String() string {
@ -2471,3 +2530,126 @@ func (o TeamMember) DeepCopy() TeamMember {
Status: o.Status.DeepCopy(), Status: o.Status.DeepCopy(),
} }
} }
type LastActiveStatus int
const (
LastActiveStatus_NONE LastActiveStatus = 0
LastActiveStatus_ACTIVE LastActiveStatus = 1
LastActiveStatus_RECENTLY_ACTIVE LastActiveStatus = 2
)
func (o LastActiveStatus) DeepCopy() LastActiveStatus { return o }
var LastActiveStatusMap = map[string]LastActiveStatus{
"NONE": 0,
"ACTIVE": 1,
"RECENTLY_ACTIVE": 2,
}
var LastActiveStatusRevMap = map[LastActiveStatus]string{
0: "NONE",
1: "ACTIVE",
2: "RECENTLY_ACTIVE",
}
func (e LastActiveStatus) String() string {
if v, ok := LastActiveStatusRevMap[e]; ok {
return v
}
return fmt.Sprintf("%v", int(e))
}
type ChatMemberDetails struct {
Uid keybase1.UID `codec:"uid" json:"uid"`
Username string `codec:"username" json:"username"`
FullName keybase1.FullName `codec:"fullName" json:"fullName"`
}
func (o ChatMemberDetails) DeepCopy() ChatMemberDetails {
return ChatMemberDetails{
Uid: o.Uid.DeepCopy(),
Username: o.Username,
FullName: o.FullName.DeepCopy(),
}
}
type ChatMembersDetails struct {
Owners []ChatMemberDetails `codec:"owners" json:"owners"`
Admins []ChatMemberDetails `codec:"admins" json:"admins"`
Writers []ChatMemberDetails `codec:"writers" json:"writers"`
Readers []ChatMemberDetails `codec:"readers" json:"readers"`
Bots []ChatMemberDetails `codec:"bots" json:"bots"`
RestrictedBots []ChatMemberDetails `codec:"restrictedBots" json:"restrictedBots"`
}
func (o ChatMembersDetails) DeepCopy() ChatMembersDetails {
return ChatMembersDetails{
Owners: (func(x []ChatMemberDetails) []ChatMemberDetails {
if x == nil {
return nil
}
ret := make([]ChatMemberDetails, len(x))
for i, v := range x {
vCopy := v.DeepCopy()
ret[i] = vCopy
}
return ret
})(o.Owners),
Admins: (func(x []ChatMemberDetails) []ChatMemberDetails {
if x == nil {
return nil
}
ret := make([]ChatMemberDetails, len(x))
for i, v := range x {
vCopy := v.DeepCopy()
ret[i] = vCopy
}
return ret
})(o.Admins),
Writers: (func(x []ChatMemberDetails) []ChatMemberDetails {
if x == nil {
return nil
}
ret := make([]ChatMemberDetails, len(x))
for i, v := range x {
vCopy := v.DeepCopy()
ret[i] = vCopy
}
return ret
})(o.Writers),
Readers: (func(x []ChatMemberDetails) []ChatMemberDetails {
if x == nil {
return nil
}
ret := make([]ChatMemberDetails, len(x))
for i, v := range x {
vCopy := v.DeepCopy()
ret[i] = vCopy
}
return ret
})(o.Readers),
Bots: (func(x []ChatMemberDetails) []ChatMemberDetails {
if x == nil {
return nil
}
ret := make([]ChatMemberDetails, len(x))
for i, v := range x {
vCopy := v.DeepCopy()
ret[i] = vCopy
}
return ret
})(o.Bots),
RestrictedBots: (func(x []ChatMemberDetails) []ChatMemberDetails {
if x == nil {
return nil
}
ret := make([]ChatMemberDetails, len(x))
for i, v := range x {
vCopy := v.DeepCopy()
ret[i] = vCopy
}
return ret
})(o.RestrictedBots),
}
}

View File

@ -0,0 +1,374 @@
// Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/chat1/emoji.avdl
package chat1
import (
"errors"
"fmt"
gregor1 "github.com/keybase/go-keybase-chat-bot/kbchat/types/gregor1"
)
type EmojiLoadSourceTyp int
const (
EmojiLoadSourceTyp_HTTPSRV EmojiLoadSourceTyp = 0
EmojiLoadSourceTyp_STR EmojiLoadSourceTyp = 1
)
func (o EmojiLoadSourceTyp) DeepCopy() EmojiLoadSourceTyp { return o }
var EmojiLoadSourceTypMap = map[string]EmojiLoadSourceTyp{
"HTTPSRV": 0,
"STR": 1,
}
var EmojiLoadSourceTypRevMap = map[EmojiLoadSourceTyp]string{
0: "HTTPSRV",
1: "STR",
}
func (e EmojiLoadSourceTyp) String() string {
if v, ok := EmojiLoadSourceTypRevMap[e]; ok {
return v
}
return fmt.Sprintf("%v", int(e))
}
type EmojiLoadSource struct {
Typ__ EmojiLoadSourceTyp `codec:"typ" json:"typ"`
Httpsrv__ *string `codec:"httpsrv,omitempty" json:"httpsrv,omitempty"`
Str__ *string `codec:"str,omitempty" json:"str,omitempty"`
}
func (o *EmojiLoadSource) Typ() (ret EmojiLoadSourceTyp, err error) {
switch o.Typ__ {
case EmojiLoadSourceTyp_HTTPSRV:
if o.Httpsrv__ == nil {
err = errors.New("unexpected nil value for Httpsrv__")
return ret, err
}
case EmojiLoadSourceTyp_STR:
if o.Str__ == nil {
err = errors.New("unexpected nil value for Str__")
return ret, err
}
}
return o.Typ__, nil
}
func (o EmojiLoadSource) Httpsrv() (res string) {
if o.Typ__ != EmojiLoadSourceTyp_HTTPSRV {
panic("wrong case accessed")
}
if o.Httpsrv__ == nil {
return
}
return *o.Httpsrv__
}
func (o EmojiLoadSource) Str() (res string) {
if o.Typ__ != EmojiLoadSourceTyp_STR {
panic("wrong case accessed")
}
if o.Str__ == nil {
return
}
return *o.Str__
}
func NewEmojiLoadSourceWithHttpsrv(v string) EmojiLoadSource {
return EmojiLoadSource{
Typ__: EmojiLoadSourceTyp_HTTPSRV,
Httpsrv__: &v,
}
}
func NewEmojiLoadSourceWithStr(v string) EmojiLoadSource {
return EmojiLoadSource{
Typ__: EmojiLoadSourceTyp_STR,
Str__: &v,
}
}
func (o EmojiLoadSource) DeepCopy() EmojiLoadSource {
return EmojiLoadSource{
Typ__: o.Typ__.DeepCopy(),
Httpsrv__: (func(x *string) *string {
if x == nil {
return nil
}
tmp := (*x)
return &tmp
})(o.Httpsrv__),
Str__: (func(x *string) *string {
if x == nil {
return nil
}
tmp := (*x)
return &tmp
})(o.Str__),
}
}
type EmojiRemoteSourceTyp int
const (
EmojiRemoteSourceTyp_MESSAGE EmojiRemoteSourceTyp = 0
EmojiRemoteSourceTyp_STOCKALIAS EmojiRemoteSourceTyp = 1
)
func (o EmojiRemoteSourceTyp) DeepCopy() EmojiRemoteSourceTyp { return o }
var EmojiRemoteSourceTypMap = map[string]EmojiRemoteSourceTyp{
"MESSAGE": 0,
"STOCKALIAS": 1,
}
var EmojiRemoteSourceTypRevMap = map[EmojiRemoteSourceTyp]string{
0: "MESSAGE",
1: "STOCKALIAS",
}
func (e EmojiRemoteSourceTyp) String() string {
if v, ok := EmojiRemoteSourceTypRevMap[e]; ok {
return v
}
return fmt.Sprintf("%v", int(e))
}
type EmojiMessage struct {
ConvID ConversationID `codec:"convID" json:"convID"`
MsgID MessageID `codec:"msgID" json:"msgID"`
IsAlias bool `codec:"isAlias" json:"isAlias"`
}
func (o EmojiMessage) DeepCopy() EmojiMessage {
return EmojiMessage{
ConvID: o.ConvID.DeepCopy(),
MsgID: o.MsgID.DeepCopy(),
IsAlias: o.IsAlias,
}
}
type EmojiStockAlias struct {
Text string `codec:"text" json:"text"`
Username string `codec:"username" json:"username"`
Time gregor1.Time `codec:"time" json:"time"`
}
func (o EmojiStockAlias) DeepCopy() EmojiStockAlias {
return EmojiStockAlias{
Text: o.Text,
Username: o.Username,
Time: o.Time.DeepCopy(),
}
}
type EmojiRemoteSource struct {
Typ__ EmojiRemoteSourceTyp `codec:"typ" json:"typ"`
Message__ *EmojiMessage `codec:"message,omitempty" json:"message,omitempty"`
Stockalias__ *EmojiStockAlias `codec:"stockalias,omitempty" json:"stockalias,omitempty"`
}
func (o *EmojiRemoteSource) Typ() (ret EmojiRemoteSourceTyp, err error) {
switch o.Typ__ {
case EmojiRemoteSourceTyp_MESSAGE:
if o.Message__ == nil {
err = errors.New("unexpected nil value for Message__")
return ret, err
}
case EmojiRemoteSourceTyp_STOCKALIAS:
if o.Stockalias__ == nil {
err = errors.New("unexpected nil value for Stockalias__")
return ret, err
}
}
return o.Typ__, nil
}
func (o EmojiRemoteSource) Message() (res EmojiMessage) {
if o.Typ__ != EmojiRemoteSourceTyp_MESSAGE {
panic("wrong case accessed")
}
if o.Message__ == nil {
return
}
return *o.Message__
}
func (o EmojiRemoteSource) Stockalias() (res EmojiStockAlias) {
if o.Typ__ != EmojiRemoteSourceTyp_STOCKALIAS {
panic("wrong case accessed")
}
if o.Stockalias__ == nil {
return
}
return *o.Stockalias__
}
func NewEmojiRemoteSourceWithMessage(v EmojiMessage) EmojiRemoteSource {
return EmojiRemoteSource{
Typ__: EmojiRemoteSourceTyp_MESSAGE,
Message__: &v,
}
}
func NewEmojiRemoteSourceWithStockalias(v EmojiStockAlias) EmojiRemoteSource {
return EmojiRemoteSource{
Typ__: EmojiRemoteSourceTyp_STOCKALIAS,
Stockalias__: &v,
}
}
func (o EmojiRemoteSource) DeepCopy() EmojiRemoteSource {
return EmojiRemoteSource{
Typ__: o.Typ__.DeepCopy(),
Message__: (func(x *EmojiMessage) *EmojiMessage {
if x == nil {
return nil
}
tmp := (*x).DeepCopy()
return &tmp
})(o.Message__),
Stockalias__: (func(x *EmojiStockAlias) *EmojiStockAlias {
if x == nil {
return nil
}
tmp := (*x).DeepCopy()
return &tmp
})(o.Stockalias__),
}
}
type HarvestedEmoji struct {
Alias string `codec:"alias" json:"alias"`
IsBig bool `codec:"isBig" json:"isBig"`
IsCrossTeam bool `codec:"isCrossTeam" json:"isCrossTeam"`
Source EmojiRemoteSource `codec:"source" json:"source"`
}
func (o HarvestedEmoji) DeepCopy() HarvestedEmoji {
return HarvestedEmoji{
Alias: o.Alias,
IsBig: o.IsBig,
IsCrossTeam: o.IsCrossTeam,
Source: o.Source.DeepCopy(),
}
}
type EmojiCreationInfo struct {
Username string `codec:"username" json:"username"`
Time gregor1.Time `codec:"time" json:"time"`
}
func (o EmojiCreationInfo) DeepCopy() EmojiCreationInfo {
return EmojiCreationInfo{
Username: o.Username,
Time: o.Time.DeepCopy(),
}
}
type Emoji struct {
Alias string `codec:"alias" json:"alias"`
IsBig bool `codec:"isBig" json:"isBig"`
IsReacji bool `codec:"isReacji" json:"isReacji"`
IsCrossTeam bool `codec:"isCrossTeam" json:"isCrossTeam"`
IsAlias bool `codec:"isAlias" json:"isAlias"`
Source EmojiLoadSource `codec:"source" json:"source"`
NoAnimSource EmojiLoadSource `codec:"noAnimSource" json:"noAnimSource"`
RemoteSource EmojiRemoteSource `codec:"remoteSource" json:"remoteSource"`
CreationInfo *EmojiCreationInfo `codec:"creationInfo,omitempty" json:"creationInfo,omitempty"`
Teamname *string `codec:"teamname,omitempty" json:"teamname,omitempty"`
}
func (o Emoji) DeepCopy() Emoji {
return Emoji{
Alias: o.Alias,
IsBig: o.IsBig,
IsReacji: o.IsReacji,
IsCrossTeam: o.IsCrossTeam,
IsAlias: o.IsAlias,
Source: o.Source.DeepCopy(),
NoAnimSource: o.NoAnimSource.DeepCopy(),
RemoteSource: o.RemoteSource.DeepCopy(),
CreationInfo: (func(x *EmojiCreationInfo) *EmojiCreationInfo {
if x == nil {
return nil
}
tmp := (*x).DeepCopy()
return &tmp
})(o.CreationInfo),
Teamname: (func(x *string) *string {
if x == nil {
return nil
}
tmp := (*x)
return &tmp
})(o.Teamname),
}
}
type EmojiGroup struct {
Name string `codec:"name" json:"name"`
Emojis []Emoji `codec:"emojis" json:"emojis"`
}
func (o EmojiGroup) DeepCopy() EmojiGroup {
return EmojiGroup{
Name: o.Name,
Emojis: (func(x []Emoji) []Emoji {
if x == nil {
return nil
}
ret := make([]Emoji, len(x))
for i, v := range x {
vCopy := v.DeepCopy()
ret[i] = vCopy
}
return ret
})(o.Emojis),
}
}
type UserEmojis struct {
Emojis []EmojiGroup `codec:"emojis" json:"emojis"`
}
func (o UserEmojis) DeepCopy() UserEmojis {
return UserEmojis{
Emojis: (func(x []EmojiGroup) []EmojiGroup {
if x == nil {
return nil
}
ret := make([]EmojiGroup, len(x))
for i, v := range x {
vCopy := v.DeepCopy()
ret[i] = vCopy
}
return ret
})(o.Emojis),
}
}
type EmojiStorage struct {
Mapping map[string]EmojiRemoteSource `codec:"mapping" json:"mapping"`
}
func (o EmojiStorage) DeepCopy() EmojiStorage {
return EmojiStorage{
Mapping: (func(x map[string]EmojiRemoteSource) map[string]EmojiRemoteSource {
if x == nil {
return nil
}
ret := make(map[string]EmojiRemoteSource, len(x))
for k, v := range x {
kCopy := k
vCopy := v.DeepCopy()
ret[kCopy] = vCopy
}
return ret
})(o.Mapping),
}
}

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/chat1/gregor.avdl // Input file: ../client/protocol/avdl/chat1/gregor.avdl
package chat1 package chat1
@ -453,16 +453,6 @@ func (o UpdateConversations) DeepCopy() UpdateConversations {
} }
} }
type TeamChannelUpdate struct {
TeamID TLFID `codec:"teamID" json:"teamID"`
}
func (o TeamChannelUpdate) DeepCopy() TeamChannelUpdate {
return TeamChannelUpdate{
TeamID: o.TeamID.DeepCopy(),
}
}
type SetConvRetentionUpdate struct { type SetConvRetentionUpdate struct {
InboxVers InboxVers `codec:"inboxVers" json:"inboxVers"` InboxVers InboxVers `codec:"inboxVers" json:"inboxVers"`
ConvID ConversationID `codec:"convID" json:"convID"` ConvID ConversationID `codec:"convID" json:"convID"`

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/chat1/notify.avdl // Input file: ../client/protocol/avdl/chat1/notify.avdl
package chat1 package chat1
@ -115,7 +115,7 @@ func (o IncomingMessage) DeepCopy() IncomingMessage {
tmp := (*x).DeepCopy() tmp := (*x).DeepCopy()
return &tmp return &tmp
})(o.ModifiedMessage), })(o.ModifiedMessage),
ConvID: o.ConvID.DeepCopy(), ConvID: o.ConvID.DeepCopy(),
DisplayDesktopNotification: o.DisplayDesktopNotification, DisplayDesktopNotification: o.DisplayDesktopNotification,
DesktopNotificationSnippet: o.DesktopNotificationSnippet, DesktopNotificationSnippet: o.DesktopNotificationSnippet,
Conv: (func(x *InboxUIItem) *InboxUIItem { Conv: (func(x *InboxUIItem) *InboxUIItem {
@ -324,8 +324,8 @@ func (o EphemeralPurgeNotifInfo) DeepCopy() EphemeralPurgeNotifInfo {
} }
type ReactionUpdate struct { type ReactionUpdate struct {
Reactions ReactionMap `codec:"reactions" json:"reactions"` Reactions UIReactionMap `codec:"reactions" json:"reactions"`
TargetMsgID MessageID `codec:"targetMsgID" json:"targetMsgID"` TargetMsgID MessageID `codec:"targetMsgID" json:"targetMsgID"`
} }
func (o ReactionUpdate) DeepCopy() ReactionUpdate { func (o ReactionUpdate) DeepCopy() ReactionUpdate {
@ -758,20 +758,16 @@ func (o ChatActivity) DeepCopy() ChatActivity {
} }
type TyperInfo struct { type TyperInfo struct {
Uid keybase1.UID `codec:"uid" json:"uid"` Uid keybase1.UID `codec:"uid" json:"uid"`
Username string `codec:"username" json:"username"` Username string `codec:"username" json:"username"`
DeviceID keybase1.DeviceID `codec:"deviceID" json:"deviceID"` DeviceID keybase1.DeviceID `codec:"deviceID" json:"deviceID"`
DeviceName string `codec:"deviceName" json:"deviceName"`
DeviceType string `codec:"deviceType" json:"deviceType"`
} }
func (o TyperInfo) DeepCopy() TyperInfo { func (o TyperInfo) DeepCopy() TyperInfo {
return TyperInfo{ return TyperInfo{
Uid: o.Uid.DeepCopy(), Uid: o.Uid.DeepCopy(),
Username: o.Username, Username: o.Username,
DeviceID: o.DeviceID.DeepCopy(), DeviceID: o.DeviceID.DeepCopy(),
DeviceName: o.DeviceName,
DeviceType: o.DeviceType,
} }
} }

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/chat1/remote.avdl // Input file: ../client/protocol/avdl/chat1/remote.avdl
package chat1 package chat1
@ -232,8 +232,10 @@ func (o NewConversationRemoteRes) DeepCopy() NewConversationRemoteRes {
} }
type GetMessagesRemoteRes struct { type GetMessagesRemoteRes struct {
Msgs []MessageBoxed `codec:"msgs" json:"msgs"` Msgs []MessageBoxed `codec:"msgs" json:"msgs"`
RateLimit *RateLimit `codec:"rateLimit,omitempty" json:"rateLimit,omitempty"` MembersType ConversationMembersType `codec:"membersType" json:"membersType"`
Visibility keybase1.TLFVisibility `codec:"visibility" json:"visibility"`
RateLimit *RateLimit `codec:"rateLimit,omitempty" json:"rateLimit,omitempty"`
} }
func (o GetMessagesRemoteRes) DeepCopy() GetMessagesRemoteRes { func (o GetMessagesRemoteRes) DeepCopy() GetMessagesRemoteRes {
@ -249,6 +251,8 @@ func (o GetMessagesRemoteRes) DeepCopy() GetMessagesRemoteRes {
} }
return ret return ret
})(o.Msgs), })(o.Msgs),
MembersType: o.MembersType.DeepCopy(),
Visibility: o.Visibility.DeepCopy(),
RateLimit: (func(x *RateLimit) *RateLimit { RateLimit: (func(x *RateLimit) *RateLimit {
if x == nil { if x == nil {
return nil return nil
@ -962,11 +966,24 @@ func (o RemoteBotCommandsAdvertisementTLFID) DeepCopy() RemoteBotCommandsAdverti
} }
} }
type RemoteBotCommandsAdvertisementConv struct {
ConvID ConversationID `codec:"convID" json:"convID"`
AdvertiseConvID ConversationID `codec:"advertiseConvID" json:"advertiseConvID"`
}
func (o RemoteBotCommandsAdvertisementConv) DeepCopy() RemoteBotCommandsAdvertisementConv {
return RemoteBotCommandsAdvertisementConv{
ConvID: o.ConvID.DeepCopy(),
AdvertiseConvID: o.AdvertiseConvID.DeepCopy(),
}
}
type RemoteBotCommandsAdvertisement struct { type RemoteBotCommandsAdvertisement struct {
Typ__ BotCommandsAdvertisementTyp `codec:"typ" json:"typ"` Typ__ BotCommandsAdvertisementTyp `codec:"typ" json:"typ"`
Public__ *RemoteBotCommandsAdvertisementPublic `codec:"public,omitempty" json:"public,omitempty"` Public__ *RemoteBotCommandsAdvertisementPublic `codec:"public,omitempty" json:"public,omitempty"`
TlfidMembers__ *RemoteBotCommandsAdvertisementTLFID `codec:"tlfidMembers,omitempty" json:"tlfidMembers,omitempty"` TlfidMembers__ *RemoteBotCommandsAdvertisementTLFID `codec:"tlfidMembers,omitempty" json:"tlfidMembers,omitempty"`
TlfidConvs__ *RemoteBotCommandsAdvertisementTLFID `codec:"tlfidConvs,omitempty" json:"tlfidConvs,omitempty"` TlfidConvs__ *RemoteBotCommandsAdvertisementTLFID `codec:"tlfidConvs,omitempty" json:"tlfidConvs,omitempty"`
Conv__ *RemoteBotCommandsAdvertisementConv `codec:"conv,omitempty" json:"conv,omitempty"`
} }
func (o *RemoteBotCommandsAdvertisement) Typ() (ret BotCommandsAdvertisementTyp, err error) { func (o *RemoteBotCommandsAdvertisement) Typ() (ret BotCommandsAdvertisementTyp, err error) {
@ -986,6 +1003,11 @@ func (o *RemoteBotCommandsAdvertisement) Typ() (ret BotCommandsAdvertisementTyp,
err = errors.New("unexpected nil value for TlfidConvs__") err = errors.New("unexpected nil value for TlfidConvs__")
return ret, err return ret, err
} }
case BotCommandsAdvertisementTyp_CONV:
if o.Conv__ == nil {
err = errors.New("unexpected nil value for Conv__")
return ret, err
}
} }
return o.Typ__, nil return o.Typ__, nil
} }
@ -1020,6 +1042,16 @@ func (o RemoteBotCommandsAdvertisement) TlfidConvs() (res RemoteBotCommandsAdver
return *o.TlfidConvs__ return *o.TlfidConvs__
} }
func (o RemoteBotCommandsAdvertisement) Conv() (res RemoteBotCommandsAdvertisementConv) {
if o.Typ__ != BotCommandsAdvertisementTyp_CONV {
panic("wrong case accessed")
}
if o.Conv__ == nil {
return
}
return *o.Conv__
}
func NewRemoteBotCommandsAdvertisementWithPublic(v RemoteBotCommandsAdvertisementPublic) RemoteBotCommandsAdvertisement { func NewRemoteBotCommandsAdvertisementWithPublic(v RemoteBotCommandsAdvertisementPublic) RemoteBotCommandsAdvertisement {
return RemoteBotCommandsAdvertisement{ return RemoteBotCommandsAdvertisement{
Typ__: BotCommandsAdvertisementTyp_PUBLIC, Typ__: BotCommandsAdvertisementTyp_PUBLIC,
@ -1041,6 +1073,13 @@ func NewRemoteBotCommandsAdvertisementWithTlfidConvs(v RemoteBotCommandsAdvertis
} }
} }
func NewRemoteBotCommandsAdvertisementWithConv(v RemoteBotCommandsAdvertisementConv) RemoteBotCommandsAdvertisement {
return RemoteBotCommandsAdvertisement{
Typ__: BotCommandsAdvertisementTyp_CONV,
Conv__: &v,
}
}
func (o RemoteBotCommandsAdvertisement) DeepCopy() RemoteBotCommandsAdvertisement { func (o RemoteBotCommandsAdvertisement) DeepCopy() RemoteBotCommandsAdvertisement {
return RemoteBotCommandsAdvertisement{ return RemoteBotCommandsAdvertisement{
Typ__: o.Typ__.DeepCopy(), Typ__: o.Typ__.DeepCopy(),
@ -1065,6 +1104,13 @@ func (o RemoteBotCommandsAdvertisement) DeepCopy() RemoteBotCommandsAdvertisemen
tmp := (*x).DeepCopy() tmp := (*x).DeepCopy()
return &tmp return &tmp
})(o.TlfidConvs__), })(o.TlfidConvs__),
Conv__: (func(x *RemoteBotCommandsAdvertisementConv) *RemoteBotCommandsAdvertisementConv {
if x == nil {
return nil
}
tmp := (*x).DeepCopy()
return &tmp
})(o.Conv__),
} }
} }
@ -1126,6 +1172,169 @@ func (o AdvertiseBotCommandsRes) DeepCopy() AdvertiseBotCommandsRes {
} }
} }
type RemoteClearBotCommandsFilterPublic struct {
}
func (o RemoteClearBotCommandsFilterPublic) DeepCopy() RemoteClearBotCommandsFilterPublic {
return RemoteClearBotCommandsFilterPublic{}
}
type RemoteClearBotCommandsFilterTLFID struct {
TlfID TLFID `codec:"tlfID" json:"tlfID"`
}
func (o RemoteClearBotCommandsFilterTLFID) DeepCopy() RemoteClearBotCommandsFilterTLFID {
return RemoteClearBotCommandsFilterTLFID{
TlfID: o.TlfID.DeepCopy(),
}
}
type RemoteClearBotCommandsFilterConv struct {
ConvID ConversationID `codec:"convID" json:"convID"`
}
func (o RemoteClearBotCommandsFilterConv) DeepCopy() RemoteClearBotCommandsFilterConv {
return RemoteClearBotCommandsFilterConv{
ConvID: o.ConvID.DeepCopy(),
}
}
type RemoteClearBotCommandsFilter struct {
Typ__ BotCommandsAdvertisementTyp `codec:"typ" json:"typ"`
Public__ *RemoteClearBotCommandsFilterPublic `codec:"public,omitempty" json:"public,omitempty"`
TlfidMembers__ *RemoteClearBotCommandsFilterTLFID `codec:"tlfidMembers,omitempty" json:"tlfidMembers,omitempty"`
TlfidConvs__ *RemoteClearBotCommandsFilterTLFID `codec:"tlfidConvs,omitempty" json:"tlfidConvs,omitempty"`
Conv__ *RemoteClearBotCommandsFilterConv `codec:"conv,omitempty" json:"conv,omitempty"`
}
func (o *RemoteClearBotCommandsFilter) Typ() (ret BotCommandsAdvertisementTyp, err error) {
switch o.Typ__ {
case BotCommandsAdvertisementTyp_PUBLIC:
if o.Public__ == nil {
err = errors.New("unexpected nil value for Public__")
return ret, err
}
case BotCommandsAdvertisementTyp_TLFID_MEMBERS:
if o.TlfidMembers__ == nil {
err = errors.New("unexpected nil value for TlfidMembers__")
return ret, err
}
case BotCommandsAdvertisementTyp_TLFID_CONVS:
if o.TlfidConvs__ == nil {
err = errors.New("unexpected nil value for TlfidConvs__")
return ret, err
}
case BotCommandsAdvertisementTyp_CONV:
if o.Conv__ == nil {
err = errors.New("unexpected nil value for Conv__")
return ret, err
}
}
return o.Typ__, nil
}
func (o RemoteClearBotCommandsFilter) Public() (res RemoteClearBotCommandsFilterPublic) {
if o.Typ__ != BotCommandsAdvertisementTyp_PUBLIC {
panic("wrong case accessed")
}
if o.Public__ == nil {
return
}
return *o.Public__
}
func (o RemoteClearBotCommandsFilter) TlfidMembers() (res RemoteClearBotCommandsFilterTLFID) {
if o.Typ__ != BotCommandsAdvertisementTyp_TLFID_MEMBERS {
panic("wrong case accessed")
}
if o.TlfidMembers__ == nil {
return
}
return *o.TlfidMembers__
}
func (o RemoteClearBotCommandsFilter) TlfidConvs() (res RemoteClearBotCommandsFilterTLFID) {
if o.Typ__ != BotCommandsAdvertisementTyp_TLFID_CONVS {
panic("wrong case accessed")
}
if o.TlfidConvs__ == nil {
return
}
return *o.TlfidConvs__
}
func (o RemoteClearBotCommandsFilter) Conv() (res RemoteClearBotCommandsFilterConv) {
if o.Typ__ != BotCommandsAdvertisementTyp_CONV {
panic("wrong case accessed")
}
if o.Conv__ == nil {
return
}
return *o.Conv__
}
func NewRemoteClearBotCommandsFilterWithPublic(v RemoteClearBotCommandsFilterPublic) RemoteClearBotCommandsFilter {
return RemoteClearBotCommandsFilter{
Typ__: BotCommandsAdvertisementTyp_PUBLIC,
Public__: &v,
}
}
func NewRemoteClearBotCommandsFilterWithTlfidMembers(v RemoteClearBotCommandsFilterTLFID) RemoteClearBotCommandsFilter {
return RemoteClearBotCommandsFilter{
Typ__: BotCommandsAdvertisementTyp_TLFID_MEMBERS,
TlfidMembers__: &v,
}
}
func NewRemoteClearBotCommandsFilterWithTlfidConvs(v RemoteClearBotCommandsFilterTLFID) RemoteClearBotCommandsFilter {
return RemoteClearBotCommandsFilter{
Typ__: BotCommandsAdvertisementTyp_TLFID_CONVS,
TlfidConvs__: &v,
}
}
func NewRemoteClearBotCommandsFilterWithConv(v RemoteClearBotCommandsFilterConv) RemoteClearBotCommandsFilter {
return RemoteClearBotCommandsFilter{
Typ__: BotCommandsAdvertisementTyp_CONV,
Conv__: &v,
}
}
func (o RemoteClearBotCommandsFilter) DeepCopy() RemoteClearBotCommandsFilter {
return RemoteClearBotCommandsFilter{
Typ__: o.Typ__.DeepCopy(),
Public__: (func(x *RemoteClearBotCommandsFilterPublic) *RemoteClearBotCommandsFilterPublic {
if x == nil {
return nil
}
tmp := (*x).DeepCopy()
return &tmp
})(o.Public__),
TlfidMembers__: (func(x *RemoteClearBotCommandsFilterTLFID) *RemoteClearBotCommandsFilterTLFID {
if x == nil {
return nil
}
tmp := (*x).DeepCopy()
return &tmp
})(o.TlfidMembers__),
TlfidConvs__: (func(x *RemoteClearBotCommandsFilterTLFID) *RemoteClearBotCommandsFilterTLFID {
if x == nil {
return nil
}
tmp := (*x).DeepCopy()
return &tmp
})(o.TlfidConvs__),
Conv__: (func(x *RemoteClearBotCommandsFilterConv) *RemoteClearBotCommandsFilterConv {
if x == nil {
return nil
}
tmp := (*x).DeepCopy()
return &tmp
})(o.Conv__),
}
}
type ClearBotCommandsRes struct { type ClearBotCommandsRes struct {
RateLimit *RateLimit `codec:"rateLimit,omitempty" json:"rateLimit,omitempty"` RateLimit *RateLimit `codec:"rateLimit,omitempty" json:"rateLimit,omitempty"`
} }
@ -1248,3 +1457,155 @@ func (o BotInfoHash) DeepCopy() BotInfoHash {
return append([]byte{}, x...) return append([]byte{}, x...)
})(o) })(o)
} }
type GetDefaultTeamChannelsRes struct {
Convs []ConversationID `codec:"convs" json:"convs"`
RateLimit *RateLimit `codec:"rateLimit,omitempty" json:"rateLimit,omitempty"`
}
func (o GetDefaultTeamChannelsRes) DeepCopy() GetDefaultTeamChannelsRes {
return GetDefaultTeamChannelsRes{
Convs: (func(x []ConversationID) []ConversationID {
if x == nil {
return nil
}
ret := make([]ConversationID, len(x))
for i, v := range x {
vCopy := v.DeepCopy()
ret[i] = vCopy
}
return ret
})(o.Convs),
RateLimit: (func(x *RateLimit) *RateLimit {
if x == nil {
return nil
}
tmp := (*x).DeepCopy()
return &tmp
})(o.RateLimit),
}
}
type SetDefaultTeamChannelsRes struct {
RateLimit *RateLimit `codec:"rateLimit,omitempty" json:"rateLimit,omitempty"`
}
func (o SetDefaultTeamChannelsRes) DeepCopy() SetDefaultTeamChannelsRes {
return SetDefaultTeamChannelsRes{
RateLimit: (func(x *RateLimit) *RateLimit {
if x == nil {
return nil
}
tmp := (*x).DeepCopy()
return &tmp
})(o.RateLimit),
}
}
type GetRecentJoinsRes struct {
NumJoins int `codec:"numJoins" json:"numJoins"`
RateLimit *RateLimit `codec:"rateLimit,omitempty" json:"rateLimit,omitempty"`
}
func (o GetRecentJoinsRes) DeepCopy() GetRecentJoinsRes {
return GetRecentJoinsRes{
NumJoins: o.NumJoins,
RateLimit: (func(x *RateLimit) *RateLimit {
if x == nil {
return nil
}
tmp := (*x).DeepCopy()
return &tmp
})(o.RateLimit),
}
}
type RefreshParticipantsRemoteRes struct {
HashMatch bool `codec:"hashMatch" json:"hashMatch"`
Uids []gregor1.UID `codec:"uids" json:"uids"`
Hash string `codec:"hash" json:"hash"`
RateLimit *RateLimit `codec:"rateLimit,omitempty" json:"rateLimit,omitempty"`
}
func (o RefreshParticipantsRemoteRes) DeepCopy() RefreshParticipantsRemoteRes {
return RefreshParticipantsRemoteRes{
HashMatch: o.HashMatch,
Uids: (func(x []gregor1.UID) []gregor1.UID {
if x == nil {
return nil
}
ret := make([]gregor1.UID, len(x))
for i, v := range x {
vCopy := v.DeepCopy()
ret[i] = vCopy
}
return ret
})(o.Uids),
Hash: o.Hash,
RateLimit: (func(x *RateLimit) *RateLimit {
if x == nil {
return nil
}
tmp := (*x).DeepCopy()
return &tmp
})(o.RateLimit),
}
}
type GetLastActiveAtRes struct {
LastActiveAt gregor1.Time `codec:"lastActiveAt" json:"lastActiveAt"`
RateLimit *RateLimit `codec:"rateLimit,omitempty" json:"rateLimit,omitempty"`
}
func (o GetLastActiveAtRes) DeepCopy() GetLastActiveAtRes {
return GetLastActiveAtRes{
LastActiveAt: o.LastActiveAt.DeepCopy(),
RateLimit: (func(x *RateLimit) *RateLimit {
if x == nil {
return nil
}
tmp := (*x).DeepCopy()
return &tmp
})(o.RateLimit),
}
}
type ResetConversationMember struct {
ConvID ConversationID `codec:"convID" json:"convID"`
Uid gregor1.UID `codec:"uid" json:"uid"`
}
func (o ResetConversationMember) DeepCopy() ResetConversationMember {
return ResetConversationMember{
ConvID: o.ConvID.DeepCopy(),
Uid: o.Uid.DeepCopy(),
}
}
type GetResetConversationsRes struct {
ResetConvs []ResetConversationMember `codec:"resetConvs" json:"resetConvs"`
RateLimit *RateLimit `codec:"rateLimit,omitempty" json:"rateLimit,omitempty"`
}
func (o GetResetConversationsRes) DeepCopy() GetResetConversationsRes {
return GetResetConversationsRes{
ResetConvs: (func(x []ResetConversationMember) []ResetConversationMember {
if x == nil {
return nil
}
ret := make([]ResetConversationMember, len(x))
for i, v := range x {
vCopy := v.DeepCopy()
ret[i] = vCopy
}
return ret
})(o.ResetConvs),
RateLimit: (func(x *RateLimit) *RateLimit {
if x == nil {
return nil
}
tmp := (*x).DeepCopy()
return &tmp
})(o.RateLimit),
}
}

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/chat1/unfurl.avdl // Input file: ../client/protocol/avdl/chat1/unfurl.avdl
package chat1 package chat1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/gregor1/auth.avdl // Input file: ../client/protocol/avdl/gregor1/auth.avdl
package gregor1 package gregor1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/gregor1/auth_internal.avdl // Input file: ../client/protocol/avdl/gregor1/auth_internal.avdl
package gregor1 package gregor1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/gregor1/auth_update.avdl // Input file: ../client/protocol/avdl/gregor1/auth_update.avdl
package gregor1 package gregor1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/gregor1/common.avdl // Input file: ../client/protocol/avdl/gregor1/common.avdl
package gregor1 package gregor1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/gregor1/incoming.avdl // Input file: ../client/protocol/avdl/gregor1/incoming.avdl
package gregor1 package gregor1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/gregor1/outgoing.avdl // Input file: ../client/protocol/avdl/gregor1/outgoing.avdl
package gregor1 package gregor1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/gregor1/remind.avdl // Input file: ../client/protocol/avdl/gregor1/remind.avdl
package gregor1 package gregor1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/account.avdl // Input file: ../client/protocol/avdl/keybase1/account.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/airdrop.avdl // Input file: ../client/protocol/avdl/keybase1/airdrop.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/apiserver.avdl // Input file: ../client/protocol/avdl/keybase1/apiserver.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/appstate.avdl // Input file: ../client/protocol/avdl/keybase1/appstate.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/audit.avdl // Input file: ../client/protocol/avdl/keybase1/audit.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/avatars.avdl // Input file: ../client/protocol/avdl/keybase1/avatars.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/backend_common.avdl // Input file: ../client/protocol/avdl/keybase1/backend_common.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/badger.avdl // Input file: ../client/protocol/avdl/keybase1/badger.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/block.avdl // Input file: ../client/protocol/avdl/keybase1/block.avdl
package keybase1 package keybase1
@ -57,6 +57,38 @@ func (o GetBlockRes) DeepCopy() GetBlockRes {
} }
} }
type GetBlockSizesRes struct {
Sizes []int `codec:"sizes" json:"sizes"`
Statuses []BlockStatus `codec:"statuses" json:"statuses"`
}
func (o GetBlockSizesRes) DeepCopy() GetBlockSizesRes {
return GetBlockSizesRes{
Sizes: (func(x []int) []int {
if x == nil {
return nil
}
ret := make([]int, len(x))
for i, v := range x {
vCopy := v
ret[i] = vCopy
}
return ret
})(o.Sizes),
Statuses: (func(x []BlockStatus) []BlockStatus {
if x == nil {
return nil
}
ret := make([]BlockStatus, len(x))
for i, v := range x {
vCopy := v.DeepCopy()
ret[i] = vCopy
}
return ret
})(o.Statuses),
}
}
type BlockRefNonce [8]byte type BlockRefNonce [8]byte
func (o BlockRefNonce) DeepCopy() BlockRefNonce { func (o BlockRefNonce) DeepCopy() BlockRefNonce {
@ -151,3 +183,75 @@ type BlockPingResponse struct {
func (o BlockPingResponse) DeepCopy() BlockPingResponse { func (o BlockPingResponse) DeepCopy() BlockPingResponse {
return BlockPingResponse{} return BlockPingResponse{}
} }
type UsageStatRecord struct {
Write int64 `codec:"write" json:"write"`
Archive int64 `codec:"archive" json:"archive"`
Read int64 `codec:"read" json:"read"`
MdWrite int64 `codec:"mdWrite" json:"mdWrite"`
GitWrite int64 `codec:"gitWrite" json:"gitWrite"`
GitArchive int64 `codec:"gitArchive" json:"gitArchive"`
}
func (o UsageStatRecord) DeepCopy() UsageStatRecord {
return UsageStatRecord{
Write: o.Write,
Archive: o.Archive,
Read: o.Read,
MdWrite: o.MdWrite,
GitWrite: o.GitWrite,
GitArchive: o.GitArchive,
}
}
type UsageStat struct {
Bytes UsageStatRecord `codec:"bytes" json:"bytes"`
Blocks UsageStatRecord `codec:"blocks" json:"blocks"`
Mtime Time `codec:"mtime" json:"mtime"`
}
func (o UsageStat) DeepCopy() UsageStat {
return UsageStat{
Bytes: o.Bytes.DeepCopy(),
Blocks: o.Blocks.DeepCopy(),
Mtime: o.Mtime.DeepCopy(),
}
}
type FolderUsageStat struct {
FolderID string `codec:"folderID" json:"folderID"`
Stats UsageStat `codec:"stats" json:"stats"`
}
func (o FolderUsageStat) DeepCopy() FolderUsageStat {
return FolderUsageStat{
FolderID: o.FolderID,
Stats: o.Stats.DeepCopy(),
}
}
type BlockQuotaInfo struct {
Folders []FolderUsageStat `codec:"folders" json:"folders"`
Total UsageStat `codec:"total" json:"total"`
Limit int64 `codec:"limit" json:"limit"`
GitLimit int64 `codec:"gitLimit" json:"gitLimit"`
}
func (o BlockQuotaInfo) DeepCopy() BlockQuotaInfo {
return BlockQuotaInfo{
Folders: (func(x []FolderUsageStat) []FolderUsageStat {
if x == nil {
return nil
}
ret := make([]FolderUsageStat, len(x))
for i, v := range x {
vCopy := v.DeepCopy()
ret[i] = vCopy
}
return ret
})(o.Folders),
Total: o.Total.DeepCopy(),
Limit: o.Limit,
GitLimit: o.GitLimit,
}
}

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/bot.avdl // Input file: ../client/protocol/avdl/keybase1/bot.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/btc.avdl // Input file: ../client/protocol/avdl/keybase1/btc.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/common.avdl // Input file: ../client/protocol/avdl/keybase1/common.avdl
package keybase1 package keybase1
@ -26,6 +26,12 @@ func (o DurationSec) DeepCopy() DurationSec {
return o return o
} }
type DurationMsec float64
func (o DurationMsec) DeepCopy() DurationMsec {
return o
}
type StringKVPair struct { type StringKVPair struct {
Key string `codec:"key" json:"key"` Key string `codec:"key" json:"key"`
Value string `codec:"value" json:"value"` Value string `codec:"value" json:"value"`
@ -432,7 +438,7 @@ type PublicKey struct {
ParentID string `codec:"parentID" json:"parentID"` ParentID string `codec:"parentID" json:"parentID"`
DeviceID DeviceID `codec:"deviceID" json:"deviceID"` DeviceID DeviceID `codec:"deviceID" json:"deviceID"`
DeviceDescription string `codec:"deviceDescription" json:"deviceDescription"` DeviceDescription string `codec:"deviceDescription" json:"deviceDescription"`
DeviceType string `codec:"deviceType" json:"deviceType"` DeviceType DeviceTypeV2 `codec:"deviceType" json:"deviceType"`
CTime Time `codec:"cTime" json:"cTime"` CTime Time `codec:"cTime" json:"cTime"`
ETime Time `codec:"eTime" json:"eTime"` ETime Time `codec:"eTime" json:"eTime"`
IsRevoked bool `codec:"isRevoked" json:"isRevoked"` IsRevoked bool `codec:"isRevoked" json:"isRevoked"`
@ -458,7 +464,7 @@ func (o PublicKey) DeepCopy() PublicKey {
ParentID: o.ParentID, ParentID: o.ParentID,
DeviceID: o.DeviceID.DeepCopy(), DeviceID: o.DeviceID.DeepCopy(),
DeviceDescription: o.DeviceDescription, DeviceDescription: o.DeviceDescription,
DeviceType: o.DeviceType, DeviceType: o.DeviceType.DeepCopy(),
CTime: o.CTime.DeepCopy(), CTime: o.CTime.DeepCopy(),
ETime: o.ETime.DeepCopy(), ETime: o.ETime.DeepCopy(),
IsRevoked: o.IsRevoked, IsRevoked: o.IsRevoked,
@ -504,21 +510,21 @@ func (o User) DeepCopy() User {
} }
type Device struct { type Device struct {
Type string `codec:"type" json:"type"` Type DeviceTypeV2 `codec:"type" json:"type"`
Name string `codec:"name" json:"name"` Name string `codec:"name" json:"name"`
DeviceID DeviceID `codec:"deviceID" json:"deviceID"` DeviceID DeviceID `codec:"deviceID" json:"deviceID"`
DeviceNumberOfType int `codec:"deviceNumberOfType" json:"deviceNumberOfType"` DeviceNumberOfType int `codec:"deviceNumberOfType" json:"deviceNumberOfType"`
CTime Time `codec:"cTime" json:"cTime"` CTime Time `codec:"cTime" json:"cTime"`
MTime Time `codec:"mTime" json:"mTime"` MTime Time `codec:"mTime" json:"mTime"`
LastUsedTime Time `codec:"lastUsedTime" json:"lastUsedTime"` LastUsedTime Time `codec:"lastUsedTime" json:"lastUsedTime"`
EncryptKey KID `codec:"encryptKey" json:"encryptKey"` EncryptKey KID `codec:"encryptKey" json:"encryptKey"`
VerifyKey KID `codec:"verifyKey" json:"verifyKey"` VerifyKey KID `codec:"verifyKey" json:"verifyKey"`
Status int `codec:"status" json:"status"` Status int `codec:"status" json:"status"`
} }
func (o Device) DeepCopy() Device { func (o Device) DeepCopy() Device {
return Device{ return Device{
Type: o.Type, Type: o.Type.DeepCopy(),
Name: o.Name, Name: o.Name,
DeviceID: o.DeviceID.DeepCopy(), DeviceID: o.DeviceID.DeepCopy(),
DeviceNumberOfType: o.DeviceNumberOfType, DeviceNumberOfType: o.DeviceNumberOfType,
@ -557,6 +563,12 @@ func (e DeviceType) String() string {
return fmt.Sprintf("%v", int(e)) return fmt.Sprintf("%v", int(e))
} }
type DeviceTypeV2 string
func (o DeviceTypeV2) DeepCopy() DeviceTypeV2 {
return o
}
type Stream struct { type Stream struct {
Fd int `codec:"fd" json:"fd"` Fd int `codec:"fd" json:"fd"`
} }
@ -1061,26 +1073,84 @@ func (e OfflineAvailability) String() string {
return fmt.Sprintf("%v", int(e)) return fmt.Sprintf("%v", int(e))
} }
type UserReacji struct {
Name string `codec:"name" json:"name"`
CustomAddr *string `codec:"customAddr,omitempty" json:"customAddr,omitempty"`
CustomAddrNoAnim *string `codec:"customAddrNoAnim,omitempty" json:"customAddrNoAnim,omitempty"`
}
func (o UserReacji) DeepCopy() UserReacji {
return UserReacji{
Name: o.Name,
CustomAddr: (func(x *string) *string {
if x == nil {
return nil
}
tmp := (*x)
return &tmp
})(o.CustomAddr),
CustomAddrNoAnim: (func(x *string) *string {
if x == nil {
return nil
}
tmp := (*x)
return &tmp
})(o.CustomAddrNoAnim),
}
}
type ReacjiSkinTone int type ReacjiSkinTone int
func (o ReacjiSkinTone) DeepCopy() ReacjiSkinTone { const (
return o ReacjiSkinTone_NONE ReacjiSkinTone = 0
ReacjiSkinTone_SKINTONE1 ReacjiSkinTone = 1
ReacjiSkinTone_SKINTONE2 ReacjiSkinTone = 2
ReacjiSkinTone_SKINTONE3 ReacjiSkinTone = 3
ReacjiSkinTone_SKINTONE4 ReacjiSkinTone = 4
ReacjiSkinTone_SKINTONE5 ReacjiSkinTone = 5
)
func (o ReacjiSkinTone) DeepCopy() ReacjiSkinTone { return o }
var ReacjiSkinToneMap = map[string]ReacjiSkinTone{
"NONE": 0,
"SKINTONE1": 1,
"SKINTONE2": 2,
"SKINTONE3": 3,
"SKINTONE4": 4,
"SKINTONE5": 5,
}
var ReacjiSkinToneRevMap = map[ReacjiSkinTone]string{
0: "NONE",
1: "SKINTONE1",
2: "SKINTONE2",
3: "SKINTONE3",
4: "SKINTONE4",
5: "SKINTONE5",
}
func (e ReacjiSkinTone) String() string {
if v, ok := ReacjiSkinToneRevMap[e]; ok {
return v
}
return fmt.Sprintf("%v", int(e))
} }
type UserReacjis struct { type UserReacjis struct {
TopReacjis []string `codec:"topReacjis" json:"topReacjis"` TopReacjis []UserReacji `codec:"topReacjis" json:"topReacjis"`
SkinTone ReacjiSkinTone `codec:"skinTone" json:"skinTone"` SkinTone ReacjiSkinTone `codec:"skinTone" json:"skinTone"`
} }
func (o UserReacjis) DeepCopy() UserReacjis { func (o UserReacjis) DeepCopy() UserReacjis {
return UserReacjis{ return UserReacjis{
TopReacjis: (func(x []string) []string { TopReacjis: (func(x []UserReacji) []UserReacji {
if x == nil { if x == nil {
return nil return nil
} }
ret := make([]string, len(x)) ret := make([]UserReacji, len(x))
for i, v := range x { for i, v := range x {
vCopy := v vCopy := v.DeepCopy()
ret[i] = vCopy ret[i] = vCopy
} }
return ret return ret
@ -1088,3 +1158,38 @@ func (o UserReacjis) DeepCopy() UserReacjis {
SkinTone: o.SkinTone.DeepCopy(), SkinTone: o.SkinTone.DeepCopy(),
} }
} }
type WotStatusType int
const (
WotStatusType_NONE WotStatusType = 0
WotStatusType_PROPOSED WotStatusType = 1
WotStatusType_ACCEPTED WotStatusType = 2
WotStatusType_REJECTED WotStatusType = 3
WotStatusType_REVOKED WotStatusType = 4
)
func (o WotStatusType) DeepCopy() WotStatusType { return o }
var WotStatusTypeMap = map[string]WotStatusType{
"NONE": 0,
"PROPOSED": 1,
"ACCEPTED": 2,
"REJECTED": 3,
"REVOKED": 4,
}
var WotStatusTypeRevMap = map[WotStatusType]string{
0: "NONE",
1: "PROPOSED",
2: "ACCEPTED",
3: "REJECTED",
4: "REVOKED",
}
func (e WotStatusType) String() string {
if v, ok := WotStatusTypeRevMap[e]; ok {
return v
}
return fmt.Sprintf("%v", int(e))
}

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/config.avdl // Input file: ../client/protocol/avdl/keybase1/config.avdl
package keybase1 package keybase1
@ -9,11 +9,12 @@ import (
) )
type CurrentStatus struct { type CurrentStatus struct {
Configured bool `codec:"configured" json:"configured"` Configured bool `codec:"configured" json:"configured"`
Registered bool `codec:"registered" json:"registered"` Registered bool `codec:"registered" json:"registered"`
LoggedIn bool `codec:"loggedIn" json:"loggedIn"` LoggedIn bool `codec:"loggedIn" json:"loggedIn"`
SessionIsValid bool `codec:"sessionIsValid" json:"sessionIsValid"` SessionIsValid bool `codec:"sessionIsValid" json:"sessionIsValid"`
User *User `codec:"user,omitempty" json:"user,omitempty"` User *User `codec:"user,omitempty" json:"user,omitempty"`
DeviceName string `codec:"deviceName" json:"deviceName"`
} }
func (o CurrentStatus) DeepCopy() CurrentStatus { func (o CurrentStatus) DeepCopy() CurrentStatus {
@ -29,6 +30,7 @@ func (o CurrentStatus) DeepCopy() CurrentStatus {
tmp := (*x).DeepCopy() tmp := (*x).DeepCopy()
return &tmp return &tmp
})(o.User), })(o.User),
DeviceName: o.DeviceName,
} }
} }
@ -331,6 +333,7 @@ type KbServiceStatus struct {
Pid string `codec:"pid" json:"pid"` Pid string `codec:"pid" json:"pid"`
Log string `codec:"log" json:"log"` Log string `codec:"log" json:"log"`
EkLog string `codec:"ekLog" json:"ekLog"` EkLog string `codec:"ekLog" json:"ekLog"`
PerfLog string `codec:"perfLog" json:"perfLog"`
} }
func (o KbServiceStatus) DeepCopy() KbServiceStatus { func (o KbServiceStatus) DeepCopy() KbServiceStatus {
@ -340,6 +343,7 @@ func (o KbServiceStatus) DeepCopy() KbServiceStatus {
Pid: o.Pid, Pid: o.Pid,
Log: o.Log, Log: o.Log,
EkLog: o.EkLog, EkLog: o.EkLog,
PerfLog: o.PerfLog,
} }
} }
@ -349,6 +353,7 @@ type KBFSStatus struct {
Running bool `codec:"running" json:"running"` Running bool `codec:"running" json:"running"`
Pid string `codec:"pid" json:"pid"` Pid string `codec:"pid" json:"pid"`
Log string `codec:"log" json:"log"` Log string `codec:"log" json:"log"`
PerfLog string `codec:"perfLog" json:"perfLog"`
Mount string `codec:"mount" json:"mount"` Mount string `codec:"mount" json:"mount"`
} }
@ -359,6 +364,7 @@ func (o KBFSStatus) DeepCopy() KBFSStatus {
Running: o.Running, Running: o.Running,
Pid: o.Pid, Pid: o.Pid,
Log: o.Log, Log: o.Log,
PerfLog: o.PerfLog,
Mount: o.Mount, Mount: o.Mount,
} }
} }
@ -398,12 +404,14 @@ func (o StartStatus) DeepCopy() StartStatus {
} }
type GitStatus struct { type GitStatus struct {
Log string `codec:"log" json:"log"` Log string `codec:"log" json:"log"`
PerfLog string `codec:"perfLog" json:"perfLog"`
} }
func (o GitStatus) DeepCopy() GitStatus { func (o GitStatus) DeepCopy() GitStatus {
return GitStatus{ return GitStatus{
Log: o.Log, Log: o.Log,
PerfLog: o.PerfLog,
} }
} }

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/constants.avdl // Input file: ../client/protocol/avdl/keybase1/constants.avdl
package keybase1 package keybase1
@ -12,6 +12,7 @@ type StatusCode int
const ( const (
StatusCode_SCOk StatusCode = 0 StatusCode_SCOk StatusCode = 0
StatusCode_SCInputError StatusCode = 100 StatusCode_SCInputError StatusCode = 100
StatusCode_SCAssertionParseError StatusCode = 101
StatusCode_SCLoginRequired StatusCode = 201 StatusCode_SCLoginRequired StatusCode = 201
StatusCode_SCBadSession StatusCode = 202 StatusCode_SCBadSession StatusCode = 202
StatusCode_SCBadLoginUserNotFound StatusCode = 203 StatusCode_SCBadLoginUserNotFound StatusCode = 203
@ -34,11 +35,13 @@ const (
StatusCode_SCWrongCryptoFormat StatusCode = 279 StatusCode_SCWrongCryptoFormat StatusCode = 279
StatusCode_SCDecryptionError StatusCode = 280 StatusCode_SCDecryptionError StatusCode = 280
StatusCode_SCInvalidAddress StatusCode = 281 StatusCode_SCInvalidAddress StatusCode = 281
StatusCode_SCWrongCryptoMsgType StatusCode = 282
StatusCode_SCNoSession StatusCode = 283 StatusCode_SCNoSession StatusCode = 283
StatusCode_SCAccountReset StatusCode = 290 StatusCode_SCAccountReset StatusCode = 290
StatusCode_SCIdentifiesFailed StatusCode = 295 StatusCode_SCIdentifiesFailed StatusCode = 295
StatusCode_SCNoSpaceOnDevice StatusCode = 297 StatusCode_SCNoSpaceOnDevice StatusCode = 297
StatusCode_SCMerkleClientError StatusCode = 299 StatusCode_SCMerkleClientError StatusCode = 299
StatusCode_SCMerkleUpdateRoot StatusCode = 300
StatusCode_SCBadEmail StatusCode = 472 StatusCode_SCBadEmail StatusCode = 472
StatusCode_SCRateLimit StatusCode = 602 StatusCode_SCRateLimit StatusCode = 602
StatusCode_SCBadSignupUsernameTaken StatusCode = 701 StatusCode_SCBadSignupUsernameTaken StatusCode = 701
@ -69,6 +72,7 @@ const (
StatusCode_SCKeyDuplicateUpdate StatusCode = 921 StatusCode_SCKeyDuplicateUpdate StatusCode = 921
StatusCode_SCSibkeyAlreadyExists StatusCode = 922 StatusCode_SCSibkeyAlreadyExists StatusCode = 922
StatusCode_SCDecryptionKeyNotFound StatusCode = 924 StatusCode_SCDecryptionKeyNotFound StatusCode = 924
StatusCode_SCVerificationKeyNotFound StatusCode = 925
StatusCode_SCKeyNoPGPEncryption StatusCode = 927 StatusCode_SCKeyNoPGPEncryption StatusCode = 927
StatusCode_SCKeyNoNaClEncryption StatusCode = 928 StatusCode_SCKeyNoNaClEncryption StatusCode = 928
StatusCode_SCKeySyncedPGPNotFound StatusCode = 929 StatusCode_SCKeySyncedPGPNotFound StatusCode = 929
@ -102,6 +106,7 @@ const (
StatusCode_SCGenericAPIError StatusCode = 1600 StatusCode_SCGenericAPIError StatusCode = 1600
StatusCode_SCAPINetworkError StatusCode = 1601 StatusCode_SCAPINetworkError StatusCode = 1601
StatusCode_SCTimeout StatusCode = 1602 StatusCode_SCTimeout StatusCode = 1602
StatusCode_SCKBFSClientTimeout StatusCode = 1603
StatusCode_SCProofError StatusCode = 1701 StatusCode_SCProofError StatusCode = 1701
StatusCode_SCIdentificationExpired StatusCode = 1702 StatusCode_SCIdentificationExpired StatusCode = 1702
StatusCode_SCSelfNotFound StatusCode = 1703 StatusCode_SCSelfNotFound StatusCode = 1703
@ -142,6 +147,8 @@ const (
StatusCode_SCChatNotInTeam StatusCode = 2517 StatusCode_SCChatNotInTeam StatusCode = 2517
StatusCode_SCChatStalePreviousState StatusCode = 2518 StatusCode_SCChatStalePreviousState StatusCode = 2518
StatusCode_SCChatEphemeralRetentionPolicyViolatedError StatusCode = 2519 StatusCode_SCChatEphemeralRetentionPolicyViolatedError StatusCode = 2519
StatusCode_SCChatUsersAlreadyInConversationError StatusCode = 2520
StatusCode_SCChatBadConversationError StatusCode = 2521
StatusCode_SCTeamBadMembership StatusCode = 2604 StatusCode_SCTeamBadMembership StatusCode = 2604
StatusCode_SCTeamSelfNotOwner StatusCode = 2607 StatusCode_SCTeamSelfNotOwner StatusCode = 2607
StatusCode_SCTeamNotFound StatusCode = 2614 StatusCode_SCTeamNotFound StatusCode = 2614
@ -152,6 +159,8 @@ const (
StatusCode_SCNoOp StatusCode = 2638 StatusCode_SCNoOp StatusCode = 2638
StatusCode_SCTeamInviteBadCancel StatusCode = 2645 StatusCode_SCTeamInviteBadCancel StatusCode = 2645
StatusCode_SCTeamInviteBadToken StatusCode = 2646 StatusCode_SCTeamInviteBadToken StatusCode = 2646
StatusCode_SCTeamInviteCompletionMissing StatusCode = 2648
StatusCode_SCTeamBadNameReservedDB StatusCode = 2650
StatusCode_SCTeamTarDuplicate StatusCode = 2663 StatusCode_SCTeamTarDuplicate StatusCode = 2663
StatusCode_SCTeamTarNotFound StatusCode = 2664 StatusCode_SCTeamTarNotFound StatusCode = 2664
StatusCode_SCTeamMemberExists StatusCode = 2665 StatusCode_SCTeamMemberExists StatusCode = 2665
@ -188,6 +197,7 @@ const (
StatusCode_SCTeamStorageBadGeneration StatusCode = 2761 StatusCode_SCTeamStorageBadGeneration StatusCode = 2761
StatusCode_SCTeamStorageNotFound StatusCode = 2762 StatusCode_SCTeamStorageNotFound StatusCode = 2762
StatusCode_SCTeamContactSettingsBlock StatusCode = 2763 StatusCode_SCTeamContactSettingsBlock StatusCode = 2763
StatusCode_SCTeamSeitanInviteNeedPUK StatusCode = 2770
StatusCode_SCEphemeralKeyBadGeneration StatusCode = 2900 StatusCode_SCEphemeralKeyBadGeneration StatusCode = 2900
StatusCode_SCEphemeralKeyUnexpectedBox StatusCode = 2901 StatusCode_SCEphemeralKeyUnexpectedBox StatusCode = 2901
StatusCode_SCEphemeralKeyMissingBox StatusCode = 2902 StatusCode_SCEphemeralKeyMissingBox StatusCode = 2902
@ -242,143 +252,154 @@ const (
StatusCode_SCTeambotKeyOldBoxedGeneration StatusCode = 3801 StatusCode_SCTeambotKeyOldBoxedGeneration StatusCode = 3801
StatusCode_SCTeambotKeyBadGeneration StatusCode = 3802 StatusCode_SCTeambotKeyBadGeneration StatusCode = 3802
StatusCode_SCAirdropRegisterFailedMisc StatusCode = 4207 StatusCode_SCAirdropRegisterFailedMisc StatusCode = 4207
StatusCode_SCSimpleFSNameExists StatusCode = 5101
StatusCode_SCSimpleFSDirNotEmpty StatusCode = 5102
StatusCode_SCSimpleFSNotExist StatusCode = 5103
StatusCode_SCSimpleFSNoAccess StatusCode = 5104
) )
func (o StatusCode) DeepCopy() StatusCode { return o } func (o StatusCode) DeepCopy() StatusCode { return o }
var StatusCodeMap = map[string]StatusCode{ var StatusCodeMap = map[string]StatusCode{
"SCOk": 0, "SCOk": 0,
"SCInputError": 100, "SCInputError": 100,
"SCLoginRequired": 201, "SCAssertionParseError": 101,
"SCBadSession": 202, "SCLoginRequired": 201,
"SCBadLoginUserNotFound": 203, "SCBadSession": 202,
"SCBadLoginPassword": 204, "SCBadLoginUserNotFound": 203,
"SCNotFound": 205, "SCBadLoginPassword": 204,
"SCThrottleControl": 210, "SCNotFound": 205,
"SCDeleted": 216, "SCThrottleControl": 210,
"SCGeneric": 218, "SCDeleted": 216,
"SCAlreadyLoggedIn": 235, "SCGeneric": 218,
"SCExists": 230, "SCAlreadyLoggedIn": 235,
"SCCanceled": 237, "SCExists": 230,
"SCInputCanceled": 239, "SCCanceled": 237,
"SCBadUsername": 243, "SCInputCanceled": 239,
"SCOffline": 267, "SCBadUsername": 243,
"SCReloginRequired": 274, "SCOffline": 267,
"SCResolutionFailed": 275, "SCReloginRequired": 274,
"SCProfileNotPublic": 276, "SCResolutionFailed": 275,
"SCIdentifyFailed": 277, "SCProfileNotPublic": 276,
"SCTrackingBroke": 278, "SCIdentifyFailed": 277,
"SCWrongCryptoFormat": 279, "SCTrackingBroke": 278,
"SCDecryptionError": 280, "SCWrongCryptoFormat": 279,
"SCInvalidAddress": 281, "SCDecryptionError": 280,
"SCNoSession": 283, "SCInvalidAddress": 281,
"SCAccountReset": 290, "SCWrongCryptoMsgType": 282,
"SCIdentifiesFailed": 295, "SCNoSession": 283,
"SCNoSpaceOnDevice": 297, "SCAccountReset": 290,
"SCMerkleClientError": 299, "SCIdentifiesFailed": 295,
"SCBadEmail": 472, "SCNoSpaceOnDevice": 297,
"SCRateLimit": 602, "SCMerkleClientError": 299,
"SCBadSignupUsernameTaken": 701, "SCMerkleUpdateRoot": 300,
"SCDuplicate": 706, "SCBadEmail": 472,
"SCBadInvitationCode": 707, "SCRateLimit": 602,
"SCBadSignupUsernameReserved": 710, "SCBadSignupUsernameTaken": 701,
"SCBadSignupTeamName": 711, "SCDuplicate": 706,
"SCFeatureFlag": 712, "SCBadInvitationCode": 707,
"SCEmailTaken": 713, "SCBadSignupUsernameReserved": 710,
"SCEmailAlreadyAdded": 714, "SCBadSignupTeamName": 711,
"SCEmailLimitExceeded": 715, "SCFeatureFlag": 712,
"SCEmailCannotDeletePrimary": 716, "SCEmailTaken": 713,
"SCEmailUnknown": 717, "SCEmailAlreadyAdded": 714,
"SCBotSignupTokenNotFound": 719, "SCEmailLimitExceeded": 715,
"SCNoUpdate": 723, "SCEmailCannotDeletePrimary": 716,
"SCMissingResult": 801, "SCEmailUnknown": 717,
"SCKeyNotFound": 901, "SCBotSignupTokenNotFound": 719,
"SCKeyCorrupted": 905, "SCNoUpdate": 723,
"SCKeyInUse": 907, "SCMissingResult": 801,
"SCKeyBadGen": 913, "SCKeyNotFound": 901,
"SCKeyNoSecret": 914, "SCKeyCorrupted": 905,
"SCKeyBadUIDs": 915, "SCKeyInUse": 907,
"SCKeyNoActive": 916, "SCKeyBadGen": 913,
"SCKeyNoSig": 917, "SCKeyNoSecret": 914,
"SCKeyBadSig": 918, "SCKeyBadUIDs": 915,
"SCKeyBadEldest": 919, "SCKeyNoActive": 916,
"SCKeyNoEldest": 920, "SCKeyNoSig": 917,
"SCKeyDuplicateUpdate": 921, "SCKeyBadSig": 918,
"SCSibkeyAlreadyExists": 922, "SCKeyBadEldest": 919,
"SCDecryptionKeyNotFound": 924, "SCKeyNoEldest": 920,
"SCKeyNoPGPEncryption": 927, "SCKeyDuplicateUpdate": 921,
"SCKeyNoNaClEncryption": 928, "SCSibkeyAlreadyExists": 922,
"SCKeySyncedPGPNotFound": 929, "SCDecryptionKeyNotFound": 924,
"SCKeyNoMatchingGPG": 930, "SCVerificationKeyNotFound": 925,
"SCKeyRevoked": 931, "SCKeyNoPGPEncryption": 927,
"SCSigCannotVerify": 1002, "SCKeyNoNaClEncryption": 928,
"SCSigWrongKey": 1008, "SCKeySyncedPGPNotFound": 929,
"SCSigOldSeqno": 1010, "SCKeyNoMatchingGPG": 930,
"SCSigCreationDisallowed": 1016, "SCKeyRevoked": 931,
"SCSigMissingRatchet": 1021, "SCSigCannotVerify": 1002,
"SCSigBadTotalOrder": 1022, "SCSigWrongKey": 1008,
"SCBadTrackSession": 1301, "SCSigOldSeqno": 1010,
"SCDeviceBadName": 1404, "SCSigCreationDisallowed": 1016,
"SCDeviceBadStatus": 1405, "SCSigMissingRatchet": 1021,
"SCDeviceNameInUse": 1408, "SCSigBadTotalOrder": 1022,
"SCDeviceNotFound": 1409, "SCBadTrackSession": 1301,
"SCDeviceMismatch": 1410, "SCDeviceBadName": 1404,
"SCDeviceRequired": 1411, "SCDeviceBadStatus": 1405,
"SCDevicePrevProvisioned": 1413, "SCDeviceNameInUse": 1408,
"SCDeviceNoProvision": 1414, "SCDeviceNotFound": 1409,
"SCDeviceProvisionViaDevice": 1415, "SCDeviceMismatch": 1410,
"SCRevokeCurrentDevice": 1416, "SCDeviceRequired": 1411,
"SCRevokeLastDevice": 1417, "SCDevicePrevProvisioned": 1413,
"SCDeviceProvisionOffline": 1418, "SCDeviceNoProvision": 1414,
"SCRevokeLastDevicePGP": 1419, "SCDeviceProvisionViaDevice": 1415,
"SCStreamExists": 1501, "SCRevokeCurrentDevice": 1416,
"SCStreamNotFound": 1502, "SCRevokeLastDevice": 1417,
"SCStreamWrongKind": 1503, "SCDeviceProvisionOffline": 1418,
"SCStreamEOF": 1504, "SCRevokeLastDevicePGP": 1419,
"SCStreamUnknown": 1505, "SCStreamExists": 1501,
"SCGenericAPIError": 1600, "SCStreamNotFound": 1502,
"SCAPINetworkError": 1601, "SCStreamWrongKind": 1503,
"SCTimeout": 1602, "SCStreamEOF": 1504,
"SCProofError": 1701, "SCStreamUnknown": 1505,
"SCIdentificationExpired": 1702, "SCGenericAPIError": 1600,
"SCSelfNotFound": 1703, "SCAPINetworkError": 1601,
"SCBadKexPhrase": 1704, "SCTimeout": 1602,
"SCNoUIDelegation": 1705, "SCKBFSClientTimeout": 1603,
"SCNoUI": 1706, "SCProofError": 1701,
"SCGPGUnavailable": 1707, "SCIdentificationExpired": 1702,
"SCInvalidVersionError": 1800, "SCSelfNotFound": 1703,
"SCOldVersionError": 1801, "SCBadKexPhrase": 1704,
"SCInvalidLocationError": 1802, "SCNoUIDelegation": 1705,
"SCServiceStatusError": 1803, "SCNoUI": 1706,
"SCInstallError": 1804, "SCGPGUnavailable": 1707,
"SCLoadKextError": 1810, "SCInvalidVersionError": 1800,
"SCLoadKextPermError": 1811, "SCOldVersionError": 1801,
"SCGitInternal": 2300, "SCInvalidLocationError": 1802,
"SCGitRepoAlreadyExists": 2301, "SCServiceStatusError": 1803,
"SCGitInvalidRepoName": 2302, "SCInstallError": 1804,
"SCGitCannotDelete": 2303, "SCLoadKextError": 1810,
"SCGitRepoDoesntExist": 2304, "SCLoadKextPermError": 1811,
"SCLoginStateTimeout": 2400, "SCGitInternal": 2300,
"SCChatInternal": 2500, "SCGitRepoAlreadyExists": 2301,
"SCChatRateLimit": 2501, "SCGitInvalidRepoName": 2302,
"SCChatConvExists": 2502, "SCGitCannotDelete": 2303,
"SCChatUnknownTLFID": 2503, "SCGitRepoDoesntExist": 2304,
"SCChatNotInConv": 2504, "SCLoginStateTimeout": 2400,
"SCChatBadMsg": 2505, "SCChatInternal": 2500,
"SCChatBroadcast": 2506, "SCChatRateLimit": 2501,
"SCChatAlreadySuperseded": 2507, "SCChatConvExists": 2502,
"SCChatAlreadyDeleted": 2508, "SCChatUnknownTLFID": 2503,
"SCChatTLFFinalized": 2509, "SCChatNotInConv": 2504,
"SCChatCollision": 2510, "SCChatBadMsg": 2505,
"SCIdentifySummaryError": 2511, "SCChatBroadcast": 2506,
"SCNeedSelfRekey": 2512, "SCChatAlreadySuperseded": 2507,
"SCNeedOtherRekey": 2513, "SCChatAlreadyDeleted": 2508,
"SCChatMessageCollision": 2514, "SCChatTLFFinalized": 2509,
"SCChatDuplicateMessage": 2515, "SCChatCollision": 2510,
"SCChatClientError": 2516, "SCIdentifySummaryError": 2511,
"SCChatNotInTeam": 2517, "SCNeedSelfRekey": 2512,
"SCChatStalePreviousState": 2518, "SCNeedOtherRekey": 2513,
"SCChatMessageCollision": 2514,
"SCChatDuplicateMessage": 2515,
"SCChatClientError": 2516,
"SCChatNotInTeam": 2517,
"SCChatStalePreviousState": 2518,
"SCChatEphemeralRetentionPolicyViolatedError": 2519, "SCChatEphemeralRetentionPolicyViolatedError": 2519,
"SCChatUsersAlreadyInConversationError": 2520,
"SCChatBadConversationError": 2521,
"SCTeamBadMembership": 2604, "SCTeamBadMembership": 2604,
"SCTeamSelfNotOwner": 2607, "SCTeamSelfNotOwner": 2607,
"SCTeamNotFound": 2614, "SCTeamNotFound": 2614,
@ -389,6 +410,8 @@ var StatusCodeMap = map[string]StatusCode{
"SCNoOp": 2638, "SCNoOp": 2638,
"SCTeamInviteBadCancel": 2645, "SCTeamInviteBadCancel": 2645,
"SCTeamInviteBadToken": 2646, "SCTeamInviteBadToken": 2646,
"SCTeamInviteCompletionMissing": 2648,
"SCTeamBadNameReservedDB": 2650,
"SCTeamTarDuplicate": 2663, "SCTeamTarDuplicate": 2663,
"SCTeamTarNotFound": 2664, "SCTeamTarNotFound": 2664,
"SCTeamMemberExists": 2665, "SCTeamMemberExists": 2665,
@ -425,6 +448,7 @@ var StatusCodeMap = map[string]StatusCode{
"SCTeamStorageBadGeneration": 2761, "SCTeamStorageBadGeneration": 2761,
"SCTeamStorageNotFound": 2762, "SCTeamStorageNotFound": 2762,
"SCTeamContactSettingsBlock": 2763, "SCTeamContactSettingsBlock": 2763,
"SCTeamSeitanInviteNeedPUK": 2770,
"SCEphemeralKeyBadGeneration": 2900, "SCEphemeralKeyBadGeneration": 2900,
"SCEphemeralKeyUnexpectedBox": 2901, "SCEphemeralKeyUnexpectedBox": 2901,
"SCEphemeralKeyMissingBox": 2902, "SCEphemeralKeyMissingBox": 2902,
@ -479,11 +503,16 @@ var StatusCodeMap = map[string]StatusCode{
"SCTeambotKeyOldBoxedGeneration": 3801, "SCTeambotKeyOldBoxedGeneration": 3801,
"SCTeambotKeyBadGeneration": 3802, "SCTeambotKeyBadGeneration": 3802,
"SCAirdropRegisterFailedMisc": 4207, "SCAirdropRegisterFailedMisc": 4207,
"SCSimpleFSNameExists": 5101,
"SCSimpleFSDirNotEmpty": 5102,
"SCSimpleFSNotExist": 5103,
"SCSimpleFSNoAccess": 5104,
} }
var StatusCodeRevMap = map[StatusCode]string{ var StatusCodeRevMap = map[StatusCode]string{
0: "SCOk", 0: "SCOk",
100: "SCInputError", 100: "SCInputError",
101: "SCAssertionParseError",
201: "SCLoginRequired", 201: "SCLoginRequired",
202: "SCBadSession", 202: "SCBadSession",
203: "SCBadLoginUserNotFound", 203: "SCBadLoginUserNotFound",
@ -506,11 +535,13 @@ var StatusCodeRevMap = map[StatusCode]string{
279: "SCWrongCryptoFormat", 279: "SCWrongCryptoFormat",
280: "SCDecryptionError", 280: "SCDecryptionError",
281: "SCInvalidAddress", 281: "SCInvalidAddress",
282: "SCWrongCryptoMsgType",
283: "SCNoSession", 283: "SCNoSession",
290: "SCAccountReset", 290: "SCAccountReset",
295: "SCIdentifiesFailed", 295: "SCIdentifiesFailed",
297: "SCNoSpaceOnDevice", 297: "SCNoSpaceOnDevice",
299: "SCMerkleClientError", 299: "SCMerkleClientError",
300: "SCMerkleUpdateRoot",
472: "SCBadEmail", 472: "SCBadEmail",
602: "SCRateLimit", 602: "SCRateLimit",
701: "SCBadSignupUsernameTaken", 701: "SCBadSignupUsernameTaken",
@ -541,6 +572,7 @@ var StatusCodeRevMap = map[StatusCode]string{
921: "SCKeyDuplicateUpdate", 921: "SCKeyDuplicateUpdate",
922: "SCSibkeyAlreadyExists", 922: "SCSibkeyAlreadyExists",
924: "SCDecryptionKeyNotFound", 924: "SCDecryptionKeyNotFound",
925: "SCVerificationKeyNotFound",
927: "SCKeyNoPGPEncryption", 927: "SCKeyNoPGPEncryption",
928: "SCKeyNoNaClEncryption", 928: "SCKeyNoNaClEncryption",
929: "SCKeySyncedPGPNotFound", 929: "SCKeySyncedPGPNotFound",
@ -574,6 +606,7 @@ var StatusCodeRevMap = map[StatusCode]string{
1600: "SCGenericAPIError", 1600: "SCGenericAPIError",
1601: "SCAPINetworkError", 1601: "SCAPINetworkError",
1602: "SCTimeout", 1602: "SCTimeout",
1603: "SCKBFSClientTimeout",
1701: "SCProofError", 1701: "SCProofError",
1702: "SCIdentificationExpired", 1702: "SCIdentificationExpired",
1703: "SCSelfNotFound", 1703: "SCSelfNotFound",
@ -614,6 +647,8 @@ var StatusCodeRevMap = map[StatusCode]string{
2517: "SCChatNotInTeam", 2517: "SCChatNotInTeam",
2518: "SCChatStalePreviousState", 2518: "SCChatStalePreviousState",
2519: "SCChatEphemeralRetentionPolicyViolatedError", 2519: "SCChatEphemeralRetentionPolicyViolatedError",
2520: "SCChatUsersAlreadyInConversationError",
2521: "SCChatBadConversationError",
2604: "SCTeamBadMembership", 2604: "SCTeamBadMembership",
2607: "SCTeamSelfNotOwner", 2607: "SCTeamSelfNotOwner",
2614: "SCTeamNotFound", 2614: "SCTeamNotFound",
@ -624,6 +659,8 @@ var StatusCodeRevMap = map[StatusCode]string{
2638: "SCNoOp", 2638: "SCNoOp",
2645: "SCTeamInviteBadCancel", 2645: "SCTeamInviteBadCancel",
2646: "SCTeamInviteBadToken", 2646: "SCTeamInviteBadToken",
2648: "SCTeamInviteCompletionMissing",
2650: "SCTeamBadNameReservedDB",
2663: "SCTeamTarDuplicate", 2663: "SCTeamTarDuplicate",
2664: "SCTeamTarNotFound", 2664: "SCTeamTarNotFound",
2665: "SCTeamMemberExists", 2665: "SCTeamMemberExists",
@ -660,6 +697,7 @@ var StatusCodeRevMap = map[StatusCode]string{
2761: "SCTeamStorageBadGeneration", 2761: "SCTeamStorageBadGeneration",
2762: "SCTeamStorageNotFound", 2762: "SCTeamStorageNotFound",
2763: "SCTeamContactSettingsBlock", 2763: "SCTeamContactSettingsBlock",
2770: "SCTeamSeitanInviteNeedPUK",
2900: "SCEphemeralKeyBadGeneration", 2900: "SCEphemeralKeyBadGeneration",
2901: "SCEphemeralKeyUnexpectedBox", 2901: "SCEphemeralKeyUnexpectedBox",
2902: "SCEphemeralKeyMissingBox", 2902: "SCEphemeralKeyMissingBox",
@ -714,6 +752,10 @@ var StatusCodeRevMap = map[StatusCode]string{
3801: "SCTeambotKeyOldBoxedGeneration", 3801: "SCTeambotKeyOldBoxedGeneration",
3802: "SCTeambotKeyBadGeneration", 3802: "SCTeambotKeyBadGeneration",
4207: "SCAirdropRegisterFailedMisc", 4207: "SCAirdropRegisterFailedMisc",
5101: "SCSimpleFSNameExists",
5102: "SCSimpleFSDirNotEmpty",
5103: "SCSimpleFSNotExist",
5104: "SCSimpleFSNoAccess",
} }
func (e StatusCode) String() string { func (e StatusCode) String() string {

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/contacts.avdl // Input file: ../client/protocol/avdl/keybase1/contacts.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/crypto.avdl // Input file: ../client/protocol/avdl/keybase1/crypto.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/cryptocurrency.avdl // Input file: ../client/protocol/avdl/keybase1/cryptocurrency.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/ctl.avdl // Input file: ../client/protocol/avdl/keybase1/ctl.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/debugging.avdl // Input file: ../client/protocol/avdl/keybase1/debugging.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/delegate_ui_ctl.avdl // Input file: ../client/protocol/avdl/keybase1/delegate_ui_ctl.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/device.avdl // Input file: ../client/protocol/avdl/keybase1/device.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/emails.avdl // Input file: ../client/protocol/avdl/keybase1/emails.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/ephemeral.avdl // Input file: ../client/protocol/avdl/keybase1/ephemeral.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/favorite.avdl // Input file: ../client/protocol/avdl/keybase1/favorite.avdl
package keybase1 package keybase1

View File

@ -1,25 +1,27 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/featured_bot.avdl // Input file: ../client/protocol/avdl/keybase1/featured_bot.avdl
package keybase1 package keybase1
type FeaturedBot struct { type FeaturedBot struct {
BotAlias string `codec:"botAlias" json:"botAlias"` BotAlias string `codec:"botAlias" json:"botAlias"`
Description string `codec:"description" json:"description"` Description string `codec:"description" json:"description"`
ExtendedDescription string `codec:"extendedDescription" json:"extendedDescription"` ExtendedDescription string `codec:"extendedDescription" json:"extendedDescription"`
BotUsername string `codec:"botUsername" json:"botUsername"` ExtendedDescriptionRaw string `codec:"extendedDescriptionRaw" json:"extendedDescriptionRaw"`
OwnerTeam *string `codec:"ownerTeam,omitempty" json:"ownerTeam,omitempty"` BotUsername string `codec:"botUsername" json:"botUsername"`
OwnerUser *string `codec:"ownerUser,omitempty" json:"ownerUser,omitempty"` OwnerTeam *string `codec:"ownerTeam,omitempty" json:"ownerTeam,omitempty"`
Rank int `codec:"rank" json:"rank"` OwnerUser *string `codec:"ownerUser,omitempty" json:"ownerUser,omitempty"`
IsPromoted bool `codec:"isPromoted" json:"isPromoted"` Rank int `codec:"rank" json:"rank"`
IsPromoted bool `codec:"isPromoted" json:"isPromoted"`
} }
func (o FeaturedBot) DeepCopy() FeaturedBot { func (o FeaturedBot) DeepCopy() FeaturedBot {
return FeaturedBot{ return FeaturedBot{
BotAlias: o.BotAlias, BotAlias: o.BotAlias,
Description: o.Description, Description: o.Description,
ExtendedDescription: o.ExtendedDescription, ExtendedDescription: o.ExtendedDescription,
BotUsername: o.BotUsername, ExtendedDescriptionRaw: o.ExtendedDescriptionRaw,
BotUsername: o.BotUsername,
OwnerTeam: (func(x *string) *string { OwnerTeam: (func(x *string) *string {
if x == nil { if x == nil {
return nil return nil

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/fs.avdl // Input file: ../client/protocol/avdl/keybase1/fs.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/git.avdl // Input file: ../client/protocol/avdl/keybase1/git.avdl
package keybase1 package keybase1
@ -223,8 +223,8 @@ type GitServerMetadata struct {
func (o GitServerMetadata) DeepCopy() GitServerMetadata { func (o GitServerMetadata) DeepCopy() GitServerMetadata {
return GitServerMetadata{ return GitServerMetadata{
Ctime: o.Ctime.DeepCopy(), Ctime: o.Ctime.DeepCopy(),
Mtime: o.Mtime.DeepCopy(), Mtime: o.Mtime.DeepCopy(),
LastModifyingUsername: o.LastModifyingUsername, LastModifyingUsername: o.LastModifyingUsername,
LastModifyingDeviceID: o.LastModifyingDeviceID.DeepCopy(), LastModifyingDeviceID: o.LastModifyingDeviceID.DeepCopy(),
LastModifyingDeviceName: o.LastModifyingDeviceName, LastModifyingDeviceName: o.LastModifyingDeviceName,

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/gpg_common.avdl // Input file: ../client/protocol/avdl/keybase1/gpg_common.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/gpg_ui.avdl // Input file: ../client/protocol/avdl/keybase1/gpg_ui.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/gregor.avdl // Input file: ../client/protocol/avdl/keybase1/gregor.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/gregor_ui.avdl // Input file: ../client/protocol/avdl/keybase1/gregor_ui.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/home.avdl // Input file: ../client/protocol/avdl/keybase1/home.avdl
package keybase1 package keybase1
@ -298,19 +298,19 @@ const (
HomeScreenTodoType_PROOF HomeScreenTodoType = 2 HomeScreenTodoType_PROOF HomeScreenTodoType = 2
HomeScreenTodoType_DEVICE HomeScreenTodoType = 3 HomeScreenTodoType_DEVICE HomeScreenTodoType = 3
HomeScreenTodoType_FOLLOW HomeScreenTodoType = 4 HomeScreenTodoType_FOLLOW HomeScreenTodoType = 4
HomeScreenTodoType_CHAT HomeScreenTodoType = 5
HomeScreenTodoType_PAPERKEY HomeScreenTodoType = 6 HomeScreenTodoType_PAPERKEY HomeScreenTodoType = 6
HomeScreenTodoType_TEAM HomeScreenTodoType = 7 HomeScreenTodoType_TEAM HomeScreenTodoType = 7
HomeScreenTodoType_FOLDER HomeScreenTodoType = 8 HomeScreenTodoType_FOLDER HomeScreenTodoType = 8
HomeScreenTodoType_GIT_REPO HomeScreenTodoType = 9 HomeScreenTodoType_GIT_REPO HomeScreenTodoType = 9
HomeScreenTodoType_TEAM_SHOWCASE HomeScreenTodoType = 10 HomeScreenTodoType_TEAM_SHOWCASE HomeScreenTodoType = 10
HomeScreenTodoType_AVATAR_USER HomeScreenTodoType = 11
HomeScreenTodoType_AVATAR_TEAM HomeScreenTodoType = 12 HomeScreenTodoType_AVATAR_TEAM HomeScreenTodoType = 12
HomeScreenTodoType_ADD_PHONE_NUMBER HomeScreenTodoType = 18 HomeScreenTodoType_ADD_PHONE_NUMBER HomeScreenTodoType = 18
HomeScreenTodoType_VERIFY_ALL_PHONE_NUMBER HomeScreenTodoType = 19 HomeScreenTodoType_VERIFY_ALL_PHONE_NUMBER HomeScreenTodoType = 19
HomeScreenTodoType_VERIFY_ALL_EMAIL HomeScreenTodoType = 20 HomeScreenTodoType_VERIFY_ALL_EMAIL HomeScreenTodoType = 20
HomeScreenTodoType_LEGACY_EMAIL_VISIBILITY HomeScreenTodoType = 21 HomeScreenTodoType_LEGACY_EMAIL_VISIBILITY HomeScreenTodoType = 21
HomeScreenTodoType_ADD_EMAIL HomeScreenTodoType = 22 HomeScreenTodoType_ADD_EMAIL HomeScreenTodoType = 22
HomeScreenTodoType_AVATAR_USER HomeScreenTodoType = 23
HomeScreenTodoType_CHAT HomeScreenTodoType = 24
HomeScreenTodoType_ANNONCEMENT_PLACEHOLDER HomeScreenTodoType = 10000 HomeScreenTodoType_ANNONCEMENT_PLACEHOLDER HomeScreenTodoType = 10000
) )
@ -322,19 +322,19 @@ var HomeScreenTodoTypeMap = map[string]HomeScreenTodoType{
"PROOF": 2, "PROOF": 2,
"DEVICE": 3, "DEVICE": 3,
"FOLLOW": 4, "FOLLOW": 4,
"CHAT": 5,
"PAPERKEY": 6, "PAPERKEY": 6,
"TEAM": 7, "TEAM": 7,
"FOLDER": 8, "FOLDER": 8,
"GIT_REPO": 9, "GIT_REPO": 9,
"TEAM_SHOWCASE": 10, "TEAM_SHOWCASE": 10,
"AVATAR_USER": 11,
"AVATAR_TEAM": 12, "AVATAR_TEAM": 12,
"ADD_PHONE_NUMBER": 18, "ADD_PHONE_NUMBER": 18,
"VERIFY_ALL_PHONE_NUMBER": 19, "VERIFY_ALL_PHONE_NUMBER": 19,
"VERIFY_ALL_EMAIL": 20, "VERIFY_ALL_EMAIL": 20,
"LEGACY_EMAIL_VISIBILITY": 21, "LEGACY_EMAIL_VISIBILITY": 21,
"ADD_EMAIL": 22, "ADD_EMAIL": 22,
"AVATAR_USER": 23,
"CHAT": 24,
"ANNONCEMENT_PLACEHOLDER": 10000, "ANNONCEMENT_PLACEHOLDER": 10000,
} }
@ -344,19 +344,19 @@ var HomeScreenTodoTypeRevMap = map[HomeScreenTodoType]string{
2: "PROOF", 2: "PROOF",
3: "DEVICE", 3: "DEVICE",
4: "FOLLOW", 4: "FOLLOW",
5: "CHAT",
6: "PAPERKEY", 6: "PAPERKEY",
7: "TEAM", 7: "TEAM",
8: "FOLDER", 8: "FOLDER",
9: "GIT_REPO", 9: "GIT_REPO",
10: "TEAM_SHOWCASE", 10: "TEAM_SHOWCASE",
11: "AVATAR_USER",
12: "AVATAR_TEAM", 12: "AVATAR_TEAM",
18: "ADD_PHONE_NUMBER", 18: "ADD_PHONE_NUMBER",
19: "VERIFY_ALL_PHONE_NUMBER", 19: "VERIFY_ALL_PHONE_NUMBER",
20: "VERIFY_ALL_EMAIL", 20: "VERIFY_ALL_EMAIL",
21: "LEGACY_EMAIL_VISIBILITY", 21: "LEGACY_EMAIL_VISIBILITY",
22: "ADD_EMAIL", 22: "ADD_EMAIL",
23: "AVATAR_USER",
24: "CHAT",
10000: "ANNONCEMENT_PLACEHOLDER", 10000: "ANNONCEMENT_PLACEHOLDER",
} }
@ -435,7 +435,7 @@ func (o HomeScreenTodo) LegacyEmailVisibility() (res EmailAddress) {
func NewHomeScreenTodoWithVerifyAllPhoneNumber(v PhoneNumber) HomeScreenTodo { func NewHomeScreenTodoWithVerifyAllPhoneNumber(v PhoneNumber) HomeScreenTodo {
return HomeScreenTodo{ return HomeScreenTodo{
T__: HomeScreenTodoType_VERIFY_ALL_PHONE_NUMBER, T__: HomeScreenTodoType_VERIFY_ALL_PHONE_NUMBER,
VerifyAllPhoneNumber__: &v, VerifyAllPhoneNumber__: &v,
} }
} }
@ -449,7 +449,7 @@ func NewHomeScreenTodoWithVerifyAllEmail(v EmailAddress) HomeScreenTodo {
func NewHomeScreenTodoWithLegacyEmailVisibility(v EmailAddress) HomeScreenTodo { func NewHomeScreenTodoWithLegacyEmailVisibility(v EmailAddress) HomeScreenTodo {
return HomeScreenTodo{ return HomeScreenTodo{
T__: HomeScreenTodoType_LEGACY_EMAIL_VISIBILITY, T__: HomeScreenTodoType_LEGACY_EMAIL_VISIBILITY,
LegacyEmailVisibility__: &v, LegacyEmailVisibility__: &v,
} }
} }

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/home_ui.avdl // Input file: ../client/protocol/avdl/keybase1/home_ui.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/identify.avdl // Input file: ../client/protocol/avdl/keybase1/identify.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/identify3.avdl // Input file: ../client/protocol/avdl/keybase1/identify3.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/identify3_common.avdl // Input file: ../client/protocol/avdl/keybase1/identify3_common.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/identify3_ui.avdl // Input file: ../client/protocol/avdl/keybase1/identify3_ui.avdl
package keybase1 package keybase1
@ -128,21 +128,23 @@ func (o Identify3RowMeta) DeepCopy() Identify3RowMeta {
} }
type Identify3Row struct { type Identify3Row struct {
GuiID Identify3GUIID `codec:"guiID" json:"guiID"` GuiID Identify3GUIID `codec:"guiID" json:"guiID"`
Key string `codec:"key" json:"key"` Key string `codec:"key" json:"key"`
Value string `codec:"value" json:"value"` Value string `codec:"value" json:"value"`
Priority int `codec:"priority" json:"priority"` Priority int `codec:"priority" json:"priority"`
SiteURL string `codec:"siteURL" json:"siteURL"` SiteURL string `codec:"siteURL" json:"siteURL"`
SiteIcon []SizedImage `codec:"siteIcon" json:"siteIcon"` SiteIcon []SizedImage `codec:"siteIcon" json:"siteIcon"`
SiteIconFull []SizedImage `codec:"siteIconFull" json:"siteIconFull"` SiteIconDarkmode []SizedImage `codec:"siteIconDarkmode" json:"siteIconDarkmode"`
SiteIconWhite []SizedImage `codec:"siteIconWhite" json:"siteIconWhite"` SiteIconFull []SizedImage `codec:"siteIconFull" json:"siteIconFull"`
ProofURL string `codec:"proofURL" json:"proofURL"` SiteIconFullDarkmode []SizedImage `codec:"siteIconFullDarkmode" json:"siteIconFullDarkmode"`
SigID SigID `codec:"sigID" json:"sigID"` ProofURL string `codec:"proofURL" json:"proofURL"`
Ctime Time `codec:"ctime" json:"ctime"` SigID SigID `codec:"sigID" json:"sigID"`
State Identify3RowState `codec:"state" json:"state"` Ctime Time `codec:"ctime" json:"ctime"`
Metas []Identify3RowMeta `codec:"metas" json:"metas"` State Identify3RowState `codec:"state" json:"state"`
Color Identify3RowColor `codec:"color" json:"color"` Metas []Identify3RowMeta `codec:"metas" json:"metas"`
Kid *KID `codec:"kid,omitempty" json:"kid,omitempty"` Color Identify3RowColor `codec:"color" json:"color"`
Kid *KID `codec:"kid,omitempty" json:"kid,omitempty"`
WotProof *WotProof `codec:"wotProof,omitempty" json:"wotProof,omitempty"`
} }
func (o Identify3Row) DeepCopy() Identify3Row { func (o Identify3Row) DeepCopy() Identify3Row {
@ -163,6 +165,17 @@ func (o Identify3Row) DeepCopy() Identify3Row {
} }
return ret return ret
})(o.SiteIcon), })(o.SiteIcon),
SiteIconDarkmode: (func(x []SizedImage) []SizedImage {
if x == nil {
return nil
}
ret := make([]SizedImage, len(x))
for i, v := range x {
vCopy := v.DeepCopy()
ret[i] = vCopy
}
return ret
})(o.SiteIconDarkmode),
SiteIconFull: (func(x []SizedImage) []SizedImage { SiteIconFull: (func(x []SizedImage) []SizedImage {
if x == nil { if x == nil {
return nil return nil
@ -174,7 +187,7 @@ func (o Identify3Row) DeepCopy() Identify3Row {
} }
return ret return ret
})(o.SiteIconFull), })(o.SiteIconFull),
SiteIconWhite: (func(x []SizedImage) []SizedImage { SiteIconFullDarkmode: (func(x []SizedImage) []SizedImage {
if x == nil { if x == nil {
return nil return nil
} }
@ -184,7 +197,7 @@ func (o Identify3Row) DeepCopy() Identify3Row {
ret[i] = vCopy ret[i] = vCopy
} }
return ret return ret
})(o.SiteIconWhite), })(o.SiteIconFullDarkmode),
ProofURL: o.ProofURL, ProofURL: o.ProofURL,
SigID: o.SigID.DeepCopy(), SigID: o.SigID.DeepCopy(),
Ctime: o.Ctime.DeepCopy(), Ctime: o.Ctime.DeepCopy(),
@ -208,5 +221,24 @@ func (o Identify3Row) DeepCopy() Identify3Row {
tmp := (*x).DeepCopy() tmp := (*x).DeepCopy()
return &tmp return &tmp
})(o.Kid), })(o.Kid),
WotProof: (func(x *WotProof) *WotProof {
if x == nil {
return nil
}
tmp := (*x).DeepCopy()
return &tmp
})(o.WotProof),
}
}
type Identify3Summary struct {
GuiID Identify3GUIID `codec:"guiID" json:"guiID"`
NumProofsToCheck int `codec:"numProofsToCheck" json:"numProofsToCheck"`
}
func (o Identify3Summary) DeepCopy() Identify3Summary {
return Identify3Summary{
GuiID: o.GuiID.DeepCopy(),
NumProofsToCheck: o.NumProofsToCheck,
} }
} }

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/identify_common.avdl // Input file: ../client/protocol/avdl/keybase1/identify_common.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/identify_ui.avdl // Input file: ../client/protocol/avdl/keybase1/identify_ui.avdl
package keybase1 package keybase1
@ -337,37 +337,33 @@ func (o UserTeamShowcase) DeepCopy() UserTeamShowcase {
} }
type UserCard struct { type UserCard struct {
Following int `codec:"following" json:"following"` UnverifiedNumFollowing int `codec:"unverifiedNumFollowing" json:"unverifiedNumFollowing"`
Followers int `codec:"followers" json:"followers"` UnverifiedNumFollowers int `codec:"unverifiedNumFollowers" json:"unverifiedNumFollowers"`
Uid UID `codec:"uid" json:"uid"` Uid UID `codec:"uid" json:"uid"`
FullName string `codec:"fullName" json:"fullName"` FullName string `codec:"fullName" json:"fullName"`
Location string `codec:"location" json:"location"` Location string `codec:"location" json:"location"`
Bio string `codec:"bio" json:"bio"` Bio string `codec:"bio" json:"bio"`
BioDecorated string `codec:"bioDecorated" json:"bioDecorated"` BioDecorated string `codec:"bioDecorated" json:"bioDecorated"`
Website string `codec:"website" json:"website"` Website string `codec:"website" json:"website"`
Twitter string `codec:"twitter" json:"twitter"` Twitter string `codec:"twitter" json:"twitter"`
YouFollowThem bool `codec:"youFollowThem" json:"youFollowThem"` TeamShowcase []UserTeamShowcase `codec:"teamShowcase" json:"teamShowcase"`
TheyFollowYou bool `codec:"theyFollowYou" json:"theyFollowYou"` RegisteredForAirdrop bool `codec:"registeredForAirdrop" json:"registeredForAirdrop"`
TeamShowcase []UserTeamShowcase `codec:"teamShowcase" json:"teamShowcase"` StellarHidden bool `codec:"stellarHidden" json:"stellarHidden"`
RegisteredForAirdrop bool `codec:"registeredForAirdrop" json:"registeredForAirdrop"` Blocked bool `codec:"blocked" json:"blocked"`
StellarHidden bool `codec:"stellarHidden" json:"stellarHidden"` HidFromFollowers bool `codec:"hidFromFollowers" json:"hidFromFollowers"`
Blocked bool `codec:"blocked" json:"blocked"`
HidFromFollowers bool `codec:"hidFromFollowers" json:"hidFromFollowers"`
} }
func (o UserCard) DeepCopy() UserCard { func (o UserCard) DeepCopy() UserCard {
return UserCard{ return UserCard{
Following: o.Following, UnverifiedNumFollowing: o.UnverifiedNumFollowing,
Followers: o.Followers, UnverifiedNumFollowers: o.UnverifiedNumFollowers,
Uid: o.Uid.DeepCopy(), Uid: o.Uid.DeepCopy(),
FullName: o.FullName, FullName: o.FullName,
Location: o.Location, Location: o.Location,
Bio: o.Bio, Bio: o.Bio,
BioDecorated: o.BioDecorated, BioDecorated: o.BioDecorated,
Website: o.Website, Website: o.Website,
Twitter: o.Twitter, Twitter: o.Twitter,
YouFollowThem: o.YouFollowThem,
TheyFollowYou: o.TheyFollowYou,
TeamShowcase: (func(x []UserTeamShowcase) []UserTeamShowcase { TeamShowcase: (func(x []UserTeamShowcase) []UserTeamShowcase {
if x == nil { if x == nil {
return nil return nil

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/implicit_team_migration.avdl // Input file: ../client/protocol/avdl/keybase1/implicit_team_migration.avdl
package keybase1 package keybase1

View File

@ -0,0 +1,98 @@
// Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/incoming-share.avdl
package keybase1
import (
"fmt"
)
type IncomingShareType int
const (
IncomingShareType_FILE IncomingShareType = 0
IncomingShareType_TEXT IncomingShareType = 1
IncomingShareType_IMAGE IncomingShareType = 2
IncomingShareType_VIDEO IncomingShareType = 3
)
func (o IncomingShareType) DeepCopy() IncomingShareType { return o }
var IncomingShareTypeMap = map[string]IncomingShareType{
"FILE": 0,
"TEXT": 1,
"IMAGE": 2,
"VIDEO": 3,
}
var IncomingShareTypeRevMap = map[IncomingShareType]string{
0: "FILE",
1: "TEXT",
2: "IMAGE",
3: "VIDEO",
}
func (e IncomingShareType) String() string {
if v, ok := IncomingShareTypeRevMap[e]; ok {
return v
}
return fmt.Sprintf("%v", int(e))
}
type IncomingShareItem struct {
Type IncomingShareType `codec:"type" json:"type"`
OriginalPath *string `codec:"originalPath,omitempty" json:"originalPath,omitempty"`
OriginalSize *int `codec:"originalSize,omitempty" json:"originalSize,omitempty"`
ScaledPath *string `codec:"scaledPath,omitempty" json:"scaledPath,omitempty"`
ScaledSize *int `codec:"scaledSize,omitempty" json:"scaledSize,omitempty"`
ThumbnailPath *string `codec:"thumbnailPath,omitempty" json:"thumbnailPath,omitempty"`
Content *string `codec:"content,omitempty" json:"content,omitempty"`
}
func (o IncomingShareItem) DeepCopy() IncomingShareItem {
return IncomingShareItem{
Type: o.Type.DeepCopy(),
OriginalPath: (func(x *string) *string {
if x == nil {
return nil
}
tmp := (*x)
return &tmp
})(o.OriginalPath),
OriginalSize: (func(x *int) *int {
if x == nil {
return nil
}
tmp := (*x)
return &tmp
})(o.OriginalSize),
ScaledPath: (func(x *string) *string {
if x == nil {
return nil
}
tmp := (*x)
return &tmp
})(o.ScaledPath),
ScaledSize: (func(x *int) *int {
if x == nil {
return nil
}
tmp := (*x)
return &tmp
})(o.ScaledSize),
ThumbnailPath: (func(x *string) *string {
if x == nil {
return nil
}
tmp := (*x)
return &tmp
})(o.ThumbnailPath),
Content: (func(x *string) *string {
if x == nil {
return nil
}
tmp := (*x)
return &tmp
})(o.Content),
}
}

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/install.avdl // Input file: ../client/protocol/avdl/keybase1/install.avdl
package keybase1 package keybase1

View File

@ -0,0 +1,56 @@
// Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/invite_friends.avdl
package keybase1
type InviteCounts struct {
InviteCount int `codec:"inviteCount" json:"inviteCount"`
PercentageChange float64 `codec:"percentageChange" json:"percentageChange"`
ShowNumInvites bool `codec:"showNumInvites" json:"showNumInvites"`
ShowFire bool `codec:"showFire" json:"showFire"`
TooltipMarkdown string `codec:"tooltipMarkdown" json:"tooltipMarkdown"`
}
func (o InviteCounts) DeepCopy() InviteCounts {
return InviteCounts{
InviteCount: o.InviteCount,
PercentageChange: o.PercentageChange,
ShowNumInvites: o.ShowNumInvites,
ShowFire: o.ShowFire,
TooltipMarkdown: o.TooltipMarkdown,
}
}
type EmailInvites struct {
CommaSeparatedEmailsFromUser *string `codec:"commaSeparatedEmailsFromUser,omitempty" json:"commaSeparatedEmailsFromUser,omitempty"`
EmailsFromContacts *[]EmailAddress `codec:"emailsFromContacts,omitempty" json:"emailsFromContacts,omitempty"`
}
func (o EmailInvites) DeepCopy() EmailInvites {
return EmailInvites{
CommaSeparatedEmailsFromUser: (func(x *string) *string {
if x == nil {
return nil
}
tmp := (*x)
return &tmp
})(o.CommaSeparatedEmailsFromUser),
EmailsFromContacts: (func(x *[]EmailAddress) *[]EmailAddress {
if x == nil {
return nil
}
tmp := (func(x []EmailAddress) []EmailAddress {
if x == nil {
return nil
}
ret := make([]EmailAddress, len(x))
for i, v := range x {
vCopy := v.DeepCopy()
ret[i] = vCopy
}
return ret
})((*x))
return &tmp
})(o.EmailsFromContacts),
}
}

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/kbfs.avdl // Input file: ../client/protocol/avdl/keybase1/kbfs.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/kbfs_common.avdl // Input file: ../client/protocol/avdl/keybase1/kbfs_common.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/kbfs_git.avdl // Input file: ../client/protocol/avdl/keybase1/kbfs_git.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/kbfsmount.avdl // Input file: ../client/protocol/avdl/keybase1/kbfsmount.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/kex2provisionee.avdl // Input file: ../client/protocol/avdl/keybase1/kex2provisionee.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/kex2provisionee2.avdl // Input file: ../client/protocol/avdl/keybase1/kex2provisionee2.avdl
package keybase1 package keybase1

View File

@ -1,4 +1,4 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/kex2provisioner.avdl // Input file: ../client/protocol/avdl/keybase1/kex2provisioner.avdl
package keybase1 package keybase1

View File

@ -1,23 +1,29 @@
// Auto-generated to Go types using avdl-compiler v1.4.6 (https://github.com/keybase/node-avdl-compiler) // Auto-generated to Go types using avdl-compiler v1.4.8 (https://github.com/keybase/node-avdl-compiler)
// Input file: ../client/protocol/avdl/keybase1/kvstore.avdl // Input file: ../client/protocol/avdl/keybase1/kvstore.avdl
package keybase1 package keybase1
type KVGetResult struct { type KVGetResult struct {
TeamName string `codec:"teamName" json:"teamName"` TeamName string `codec:"teamName" json:"teamName"`
Namespace string `codec:"namespace" json:"namespace"` Namespace string `codec:"namespace" json:"namespace"`
EntryKey string `codec:"entryKey" json:"entryKey"` EntryKey string `codec:"entryKey" json:"entryKey"`
EntryValue string `codec:"entryValue" json:"entryValue"` EntryValue *string `codec:"entryValue" json:"entryValue"`
Revision int `codec:"revision" json:"revision"` Revision int `codec:"revision" json:"revision"`
} }
func (o KVGetResult) DeepCopy() KVGetResult { func (o KVGetResult) DeepCopy() KVGetResult {
return KVGetResult{ return KVGetResult{
TeamName: o.TeamName, TeamName: o.TeamName,
Namespace: o.Namespace, Namespace: o.Namespace,
EntryKey: o.EntryKey, EntryKey: o.EntryKey,
EntryValue: o.EntryValue, EntryValue: (func(x *string) *string {
Revision: o.Revision, if x == nil {
return nil
}
tmp := (*x)
return &tmp
})(o.EntryValue),
Revision: o.Revision,
} }
} }

Some files were not shown because too many files have changed in this diff Show More