Update dependencies / vendor (#1146)

pull/1147/head
Wim 4 years ago committed by GitHub
parent ba0bfe70a8
commit 393f9e998b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

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

@ -6,20 +6,19 @@ require (
github.com/Jeffail/gabs v1.1.1 // indirect
github.com/Philipp15b/go-steam v1.0.1-0.20190816133340-b04c5a83c1c0
github.com/Rhymen/go-whatsapp v0.1.1-0.20200421062035-31e8111ac334
github.com/d5/tengo/v2 v2.1.2
github.com/dfordsoft/golib v0.0.0-20180902042739-76ee6ab99bec
github.com/fsnotify/fsnotify v1.4.7
github.com/d5/tengo/v2 v2.4.2
github.com/fsnotify/fsnotify v1.4.9
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/google/gops v0.3.6
github.com/gopackage/ddp v0.0.0-20170117053602-652027933df4 // indirect
github.com/gorilla/schema v1.1.0
github.com/gorilla/websocket v1.4.1
github.com/hashicorp/golang-lru v0.5.3
github.com/gorilla/websocket v1.4.2
github.com/hashicorp/golang-lru v0.5.4
github.com/hpcloud/tail v1.0.0 // indirect
github.com/jpillora/backoff v1.0.0
github.com/keybase/go-keybase-chat-bot v0.0.0-20200226211841-4e48f3eaef3e
github.com/labstack/echo/v4 v4.1.13
github.com/keybase/go-keybase-chat-bot v0.0.0-20200505163032-5cacf52379da
github.com/labstack/echo/v4 v4.1.16
github.com/lrstanley/girc v0.0.0-20190801035559-4fc93959e1a7
github.com/matterbridge/Rocket.Chat.Go.SDK v0.0.0-20200411204219-d5c18ce75048
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/logrus-prefixed-formatter v0.0.0-20180806162718-01618749af61
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-20180312012330-2e9e17e0ea51
github.com/mattn/godown v0.0.0-20200217152941-afc959f6a561
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/mrexodia/wray v0.0.0-20160318003008-78a2c1f284ff // indirect
github.com/nelsonken/gomf v0.0.0-20180504123937-a9dd2f9deae9
@ -44,20 +43,19 @@ require (
github.com/russross/blackfriday v1.5.2
github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca
github.com/shazow/ssh-chat v1.8.3-0.20200308224626-80ddf1f43a98
github.com/sirupsen/logrus v1.4.2
github.com/slack-go/slack v0.6.3
github.com/spf13/viper v1.6.1
github.com/stretchr/testify v1.4.0
github.com/sirupsen/logrus v1.6.0
github.com/slack-go/slack v0.6.4
github.com/spf13/viper v1.7.0
github.com/stretchr/testify v1.5.1
github.com/technoweenie/multipartstreamer v1.0.1 // indirect
github.com/writeas/go-strip-markdown v2.0.1+incompatible
github.com/x-cray/logrus-prefixed-formatter v0.5.2 // indirect
github.com/yaegashi/msgraph.go v0.1.2
github.com/zfjagann/golang-ring v0.0.0-20190106091943-a88bb6aef447
golang.org/x/image v0.0.0-20191214001246-9130b4cfad52
github.com/zfjagann/golang-ring v0.0.0-20190304061218-d34796e0a6c2
golang.org/x/image v0.0.0-20200430140353-33d19683fad8
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d
gopkg.in/fsnotify.v1 v1.4.7 // 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
)

244
go.sum

@ -1,11 +1,23 @@
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.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/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/go.mod h1:4a58ifQTEe2uwwsaqbh3i2un5/CBPg+At/qHpt18Tmk=
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
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/go.mod h1:6xMvQMK4k33lb7GUUpaAPh6nKMmemQeg5d4gn7/bOXc=
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/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/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 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/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
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/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
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/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.1.2/go.mod h1:XRGjEs5I9jYIKTxly6HCF8oiiilk5E/RYXOZ5b0DZC8=
github.com/d5/tengo/v2 v2.4.2 h1:Sj+v0CS8jtrZrXyJLzWof6QTnE6S5k3tYP0y6YVPGkw=
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.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
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/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/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/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/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-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
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/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.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.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/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/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/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/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/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/go.mod h1:lEO7XoHJ/xNRBCxrn4h/CEB67h0kW1B0t4ooP2yrjUA=
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.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.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-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/hashicorp/golang-lru v0.5.3 h1:YPkqC67at8FYaadspW/6uE0COsBxS2656RLEr8Bppgk=
github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
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/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/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
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/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA=
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/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
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/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-20200226211841-4e48f3eaef3e/go.mod h1:vNc28YFzigVJod0j5EbuTtRIe7swx8vodh2yA4jZ2s8=
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-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/go.mod h1:hY+WOq6m2FpbvyrI93sMaypsttvaIL5nhVR92dTMUcQ=
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/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.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/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
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/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
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 v3.3.10+incompatible/go.mod h1:0INS7j/VjnFxD4E2wkz67b8cVwCLbBmJyDaka6Cmk1s=
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/echo/v4 v4.1.16 h1:8swiwjE5Jkai3RPfZoahp8kjVCRNq+y7Q0hPji2Kz0o=
github.com/labstack/echo/v4 v4.1.16/go.mod h1:awO+5TzAjvL8XpibdsfXxPgHr+orhtXZJZIQCVjogKI=
github.com/labstack/gommon v0.3.0 h1:JEeO0bvc78PKdyHxloTKiF8BD5iGrH8T6MSeGvSgob0=
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=
@ -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/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/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.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA=
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE=
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.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.11 h1:FxPOTFNqGkuDUGi3H/qkUbQO4ZiBa2brKq5r0l8TGeM=
github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
github.com/mattn/go-runewidth v0.0.7 h1:Ei8KR0497xHyKJPAv59M1dkC+rOZCMBJ+t3fZ+twI54=
github.com/mattn/go-runewidth v0.0.7/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-20180312012330-2e9e17e0ea51/go.mod h1:s3KUdOIXJ+jaGM++XHiXA6gikdleaWVATCcQGD4h734=
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-runewidth v0.0.8 h1:3tS41NlGYSmhhe/8fhGRzc+z3AYCw1Fe1WAyLuujKs0=
github.com/mattn/go-runewidth v0.0.8/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/mattn/godown v0.0.0-20200217152941-afc959f6a561 h1:0YGo77enc6tJpXQxUeQWs9bPIQPTH1lbOmc5tgRuq4o=
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/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/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/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/go.mod h1:OQA4XLvDbMgS8P0CevmM4m9Q3Jq4phKUzcocxuGJ5m8=
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/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/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/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/gomega v1.4.1 h1:PZSj/UFNaVp3KxrzHOcS7oyuWA7LoOY/77yCTEFu21U=
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/go.mod h1:YnNlZP7l4MhyGQ4CBRwv6ohZTPrUJJZtEv4ZgADkbs4=
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/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
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.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
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/go.mod h1:UdpyWFCGbo3mvK3f/PfZOAOrkjzJlYN/sD46XNWJ+Es=
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/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
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/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/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/go.mod h1:vt2jWY/3Qw1bIzle5thrJWucsLuuX9iUNnp20CqCciI=
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/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.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I=
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/go.mod h1:PLPIyL7ikehBD1OAjmKKiOEhbvWyHGaNDjquXMcYABo=
github.com/slack-go/slack v0.6.3 h1:qU037g8gQ71EuH6S9zYKnvYrEUj0fLFH4HFekFqBoRU=
github.com/slack-go/slack v0.6.3/go.mod h1:HE4RwNe7YpOg/F0vqo5PwXH3Hki31TplTvKRW9dGGaw=
github.com/slack-go/slack v0.6.4 h1:cxOqFgM5RW6mdEyDqAJutFk3qiORK9oHRKi5bPqkY9o=
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/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
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/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
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.6.1/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k=
github.com/spf13/viper v1.7.0 h1:xVKxvI7ouOI5I+U9s2eeiUfMaWBVoXA3AWskkrqK0VM=
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.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
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/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/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
github.com/technoweenie/multipartstreamer v1.0.1 h1:XRztA5MXiR1TIRHxH2uNxXxaIkKQDeX7m2XsSOlQEnM=
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/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/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
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/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/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/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-20190106091943-a88bb6aef447/go.mod h1:0MsIttMJIF/8Y7x0XjonJP7K99t3sR6bjj4m5S4JmqU=
github.com/zfjagann/golang-ring v0.0.0-20190304061218-d34796e0a6c2 h1:UQwvu7FjUEdVYofx0U6bsc5odNE7wa5TSA0fl559GcA=
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.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/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
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=
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-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-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-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-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/image v0.0.0-20191214001246-9130b4cfad52 h1:2fktqPPvDiVEEVT/vSTeoUPXfmRxRaGy6GU8jypvEn0=
golang.org/x/image v0.0.0-20191214001246-9130b4cfad52/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d h1:1ZiEyfaQIg3Qh0EoqpwAakHVhecoE5wlSg5GjnafJGw=
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-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-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-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-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-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-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-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-20191209160850-c0dbc17a3553 h1:efeOvDhwQ29Dj3SdAV/MJf8oukgn+8D8WgaCaRMchF8=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
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-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/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-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-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-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-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-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-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-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-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-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8 h1:JA8d3MPx/IToSyXZG/RhwYEtfrKO1Fxrqe8KrkiLXKM=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/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.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/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/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-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-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-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.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.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-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.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/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/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/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
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.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
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-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=

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

@ -5,8 +5,8 @@
# The Tengo Language
[![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)
[![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.**
@ -51,19 +51,21 @@ fmt.println(sum("", [1, 2, 3])) // "123"
## Benchmark
| | fib(35) | fibt(35) | Type |
| | fib(35) | fibt(35) | Language (Type) |
| :--- | ---: | ---: | :---: |
| Go | `48ms` | `3ms` | Go (native) |
| [**Tengo**](https://github.com/d5/tengo) | `2,349ms` | `5ms` | VM on Go |
| Lua | `1,416ms` | `3ms` | Lua (native) |
| [go-lua](https://github.com/Shopify/go-lua) | `4,402ms` | `5ms` | Lua VM on Go |
| [GopherLua](https://github.com/yuin/gopher-lua) | `4,023ms` | `5ms` | Lua VM on Go |
| Python | `2,588ms` | `26ms` | Python (native) |
| [starlark-go](https://github.com/google/starlark-go) | `11,126ms` | `6ms` | Python-like Interpreter on Go |
| [gpython](https://github.com/go-python/gpython) | `15,035ms` | `4ms` | Python Interpreter on Go |
| [goja](https://github.com/dop251/goja) | `5,089ms` | `5ms` | JS VM on Go |
| [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 |
| [**Tengo**](https://github.com/d5/tengo) | `2,931ms` | `4ms` | Tengo (VM) |
| [go-lua](https://github.com/Shopify/go-lua) | `4,824ms` | `4ms` | Lua (VM) |
| [GopherLua](https://github.com/yuin/gopher-lua) | `5,365ms` | `4ms` | Lua (VM) |
| [goja](https://github.com/dop251/goja) | `5,533ms` | `5ms` | JavaScript (VM) |
| [starlark-go](https://github.com/google/starlark-go) | `11,495ms` | `5ms` | Starlark (Interpreter) |
| [Yaegi](https://github.com/containous/yaegi) | `15,645ms` | `12ms` | Yaegi (Interpreter) |
| [gpython](https://github.com/go-python/gpython) | `16,322ms` | `5ms` | Python (Interpreter) |
| [otto](https://github.com/robertkrimen/otto) | `73,093ms` | `10ms` | JavaScript (Interpreter) |
| [Anko](https://github.com/mattn/anko) | `79,809ms` | `8ms` | Anko (Interpreter) |
| - | - | - | - |
| 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):
Fibonacci(35)_
@ -136,3 +138,10 @@ each([a, b, c, d], func(x) {
- [Interoperability](https://github.com/d5/tengo/blob/master/docs/interoperability.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)
- 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)

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

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

@ -3,6 +3,7 @@ package tengo
import (
"context"
"fmt"
"path/filepath"
"sync"
"github.com/d5/tengo/v2/parser"
@ -16,6 +17,7 @@ type Script struct {
maxAllocs int64
maxConstObjects int
enableFileImport bool
importDir string
}
// NewScript creates a Script instance with an input script.
@ -56,6 +58,16 @@ func (s *Script) SetImports(modules *ModuleMap) {
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
// time. Compiled script will return ErrObjectAllocLimit error if it
// exceeds this limit.
@ -93,6 +105,7 @@ func (s *Script) Compile() (*Compiled, error) {
c := NewCompiler(srcFile, symbolTable, nil, s.modules, nil)
c.EnableFileImport(s.enableFileImport)
c.SetImportDir(s.importDir)
if err := c.Compile(file); err != nil {
return nil, err
}

@ -1,20 +1,129 @@
// 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
// license that can be found in the LICENSE file.
package json
import (
"bytes"
"encoding/base64"
"errors"
"math"
"strconv"
"unicode/utf8"
"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.
func Encode(o tengo.Object) ([]byte, error) {
var b []byte
@ -53,7 +162,7 @@ func Encode(o tengo.Object) ([]byte, error) {
len1 := len(o.Value) - 1
idx := 0
for key, value := range o.Value {
b = strconv.AppendQuote(b, key)
b = encodeString(b, key)
b = append(b, ':')
eb, err := Encode(value)
if err != nil {
@ -71,7 +180,7 @@ func Encode(o tengo.Object) ([]byte, error) {
len1 := len(o.Value) - 1
idx := 0
for key, value := range o.Value {
b = strconv.AppendQuote(b, key)
b = encodeString(b, key)
b = append(b, ':')
eb, err := Encode(value)
if err != nil {
@ -130,7 +239,9 @@ func Encode(o tengo.Object) ([]byte, error) {
case *tengo.Int:
b = strconv.AppendInt(b, o.Value, 10)
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:
y, err := o.Value.MarshalJSON()
if err != nil {
@ -144,3 +255,79 @@ func Encode(o tengo.Object) ([]byte, error) {
}
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:])
}
}

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

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

@ -2,29 +2,35 @@ sudo: false
language: go
go:
- 1.8.x
- 1.9.x
- tip
- "stable"
- "1.11.x"
- "1.10.x"
- "1.9.x"
matrix:
include:
- go: "stable"
env: GOLINT=true
allow_failures:
- go: tip
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:
- go test -v --race ./...
- go test --race ./...
after_script:
- 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 ./...
os:
- linux
- osx
- windows
notifications:
email: false

@ -1,5 +1,5 @@
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
modification, are permitted provided that the following conditions are

@ -10,16 +10,16 @@ go get -u golang.org/x/sys/...
Cross platform: Windows, Linux, BSD and macOS.
|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)|
|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)|
|FSEvents |macOS |[Planned](https://github.com/fsnotify/fsnotify/issues/11)|
|FEN |Solaris 11 |[In Progress](https://github.com/fsnotify/fsnotify/issues/12)|
|fanotify |Linux 2.6.37+ | |
|USN Journals |Windows |[Maybe](https://github.com/fsnotify/fsnotify/issues/53)|
|Polling |*All* |[Maybe](https://github.com/fsnotify/fsnotify/issues/9)|
| 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) |
| 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://travis-ci.org/fsnotify/fsnotify.svg?branch=master)](https://travis-ci.org/fsnotify/fsnotify) |
| FSEvents | macOS | [Planned](https://github.com/fsnotify/fsnotify/issues/11) |
| FEN | Solaris 11 | [In Progress](https://github.com/fsnotify/fsnotify/issues/12) |
| fanotify | Linux 2.6.37+ | [Planned](https://github.com/fsnotify/fsnotify/issues/114) |
| USN Journals | Windows | [Maybe](https://github.com/fsnotify/fsnotify/issues/53) |
| Polling | *All* | [Maybe](https://github.com/fsnotify/fsnotify/issues/9) |
\* 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`.
## 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
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.
* 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
[#18]: https://github.com/fsnotify/fsnotify/issues/18
[#11]: https://github.com/fsnotify/fsnotify/issues/11

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

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

@ -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=

@ -40,12 +40,12 @@ func newFdPoller(fd int) (*fdPoller, error) {
poller.fd = fd
// Create epoll fd
poller.epfd, errno = unix.EpollCreate1(0)
poller.epfd, errno = unix.EpollCreate1(unix.EPOLL_CLOEXEC)
if poller.epfd == -1 {
return nil, errno
}
// 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 {
return nil, errno
}

@ -8,4 +8,4 @@ package fsnotify
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

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

@ -38,7 +38,6 @@ package proto
import (
"fmt"
"log"
"os"
"reflect"
"sort"
"strconv"
@ -194,7 +193,7 @@ func (p *Properties) Parse(s string) {
// "bytes,49,opt,name=foo,def=hello!"
fields := strings.Split(s, ",") // breaks def=, but handled below.
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
}
@ -214,7 +213,7 @@ func (p *Properties) Parse(s string) {
p.WireType = WireBytes
// no numeric converter for non-numeric types
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
}

@ -8,7 +8,7 @@ Gorilla WebSocket is a [Go](http://golang.org/) implementation of the
### 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)
* [Command example](https://github.com/gorilla/websocket/tree/master/examples/command)
* [Client and server example](https://github.com/gorilla/websocket/tree/master/examples/echo)

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

@ -187,9 +187,9 @@
// than the largest message do not provide any benefit.
//
// 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
// memory use with a small impact on performance. Here's an example: If 99% of
// the messages are smaller than 256 bytes and the maximum message size is 512
// a value less than the maximum expected message size can greatly reduce memory
// use with a small impact on performance. Here's an example: If 99% of the
// 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
// than a buffer size of 512 bytes. The memory savings is 50%.
//

@ -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=

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

@ -37,7 +37,7 @@ func (c *Cache) Purge() {
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) {
c.lock.Lock()
evicted = c.lru.Add(key, value)
@ -71,8 +71,8 @@ func (c *Cache) Peek(key interface{}) (value interface{}, ok bool) {
return value, ok
}
// 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.
// 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.
// Returns whether found and whether an eviction occurred.
func (c *Cache) ContainsOrAdd(key, value interface{}) (ok, evicted bool) {
c.lock.Lock()
@ -85,6 +85,22 @@ func (c *Cache) ContainsOrAdd(key, value interface{}) (ok, evicted bool) {
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.
func (c *Cache) Remove(key interface{}) (present bool) {
c.lock.Lock()

@ -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) {
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)
if err != nil {
return res, err
@ -94,7 +98,7 @@ func (a *API) GetTextMessages(channel chat1.ChatChannel, unreadOnly bool) ([]cha
if err != nil {
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)
if err != nil {
return nil, err
@ -324,7 +328,11 @@ type LeaveChannel struct {
}
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)
if err != nil {
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) {
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)
if err != nil {
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) {
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)
if err != nil {
return empty, err
@ -461,13 +487,28 @@ func (a *API) AdvertiseCommands(ad Advertisement) (SendResponse, error) {
return a.doSend(newAdvertiseCmdsMsgArg(ad))
}
func (a *API) ClearCommands() error {
arg := struct {
Method string
}{
type clearCmdsOptions struct {
Filter *chat1.ClearCommandAPIParam `json:"filter"`
}
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",
}
_, err := a.doSend(arg)
Params: clearCmdsParams{
Options: clearCmdsOptions{
Filter: filter,
},
},
})
return err
}

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

@ -7,7 +7,6 @@ import (
"fmt"
"io"
"io/ioutil"
"log"
"os"
"os/exec"
"sync"
@ -18,63 +17,110 @@ import (
"github.com/keybase/go-keybase-chat-bot/kbchat/types/stellar1"
)
// API is the main object used for communicating with the Keybase JSON API
type API struct {
// 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
}
// Subscription has methods to control the background message fetcher loop
type Subscription struct {
*DebugOutput
sync.Mutex
apiInput io.Writer
apiOutput *bufio.Reader
apiCmd *exec.Cmd
username string
runOpts RunOptions
subscriptions []*NewSubscription
newMsgsCh chan SubscriptionMessage
newConvsCh chan SubscriptionConversation
newWalletCh chan SubscriptionWalletEvent
errorCh chan error
running bool
shutdownCh chan struct{}
}
func getUsername(runOpts RunOptions) (username string, err error) {
p := runOpts.Command("whoami", "-json")
output, err := p.StdoutPipe()
if err != nil {
return "", err
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,
}
p.ExtraFiles = []*os.File{output.(*os.File)}
if err = p.Start(); err != nil {
return "", err
}
// Read blocks until a new message arrives
func (m *Subscription) Read() (msg SubscriptionMessage, err error) {
defer m.Trace(&err, "Read")()
select {
case msg = <-m.newMsgsCh:
return msg, nil
case err = <-m.errorCh:
return SubscriptionMessage{}, err
case <-m.shutdownCh:
return SubscriptionMessage{}, errors.New("Subscription shutdown")
}
}
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 {
log.Printf("unable to wait for cmd: %v", err)
}
}()
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 err = <-doneCh:
if err != nil {
return "", err
}
case <-time.After(5 * time.Second):
return "", errors.New("unable to run Keybase command")
case msg = <-m.newWalletCh:
return msg, nil
case err = <-m.errorCh:
return SubscriptionWalletEvent{}, err
case <-m.shutdownCh:
return SubscriptionWalletEvent{}, errors.New("Subscription shutdown")
}
}
return username, nil
// 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 {
@ -110,22 +156,101 @@ func (r RunOptions) Command(args ...string) *exec.Cmd {
}
// Start fires up the Keybase JSON API in stdin/stdout mode
func Start(runOpts RunOptions) (*API, error) {
api := &API{
runOpts: runOpts,
}
func Start(runOpts RunOptions, opts ...func(*API)) (*API, error) {
api := NewAPI(runOpts, opts...)
if err := api.startPipes(); err != nil {
return nil, err
}
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 {
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) {
username, err := getUsername(a.runOpts)
username, err := a.getUsername(a.runOpts)
if err == nil {
return username, nil
}
@ -194,8 +319,6 @@ func (a *API) startPipes() (err error) {
return nil
}
var errAPIDisconnected = errors.New("chat API disconnected")
func (a *API) getAPIPipesLocked() (io.Writer, *bufio.Reader, error) {
// this should only be called inside a lock
if a.apiCmd == nil {
@ -214,7 +337,7 @@ func (a *API) doSend(arg interface{}) (resp SendResponse, err error) {
bArg, err := json.Marshal(arg)
if err != nil {
return SendResponse{}, err
return SendResponse{}, fmt.Errorf("unable to send arg: %+v: %v", arg, err)
}
input, output, err := a.getAPIPipesLocked()
if err != nil {
@ -228,7 +351,7 @@ func (a *API) doSend(arg interface{}) (resp SendResponse, err error) {
return SendResponse{}, err
}
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 {
return resp, errors.New(resp.Error.Message)
}
@ -254,97 +377,13 @@ func (a *API) doFetch(apiInput string) ([]byte, error) {
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
func (a *API) ListenForNewTextMessages() (*NewSubscription, error) {
func (a *API) ListenForNewTextMessages() (*Subscription, error) {
opts := ListenOptions{Wallet: false}
return a.Listen(opts)
}
func (a *API) registerSubscription(sub *NewSubscription) {
func (a *API) registerSubscription(sub *Subscription) {
a.Lock()
defer a.Unlock()
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
// events into channels
func (a *API) Listen(opts ListenOptions) (*NewSubscription, 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{})
func (a *API) Listen(opts ListenOptions) (*Subscription, error) {
done := make(chan struct{})
sub := &NewSubscription{
newMsgsCh: newMsgsCh,
newConvsCh: newConvsCh,
newWalletCh: newWalletCh,
shutdownCh: shutdownCh,
errorCh: errorCh,
running: true,
}
sub := NewSubscription()
a.registerSubscription(sub)
pause := 2 * time.Second
readScanner := func(boutput *bufio.Scanner) {
defer func() { done <- struct{}{} }()
for {
select {
case <-shutdownCh:
log.Printf("readScanner: received shutdown")
case <-sub.shutdownCh:
a.Debug("readScanner: received shutdown")
return
default:
}
@ -383,18 +409,18 @@ func (a *API) Listen(opts ListenOptions) (*NewSubscription, error) {
t := boutput.Text()
var typeHolder TypeHolder
if err := json.Unmarshal([]byte(t), &typeHolder); err != nil {
errorCh <- err
sub.errorCh <- fmt.Errorf("err: %v, data: %v", err, t)
break
}
switch typeHolder.Type {
case "chat":
var notification chat1.MsgNotification
if err := json.Unmarshal([]byte(t), &notification); err != nil {
errorCh <- err
sub.errorCh <- fmt.Errorf("err: %v, data: %v", err, t)
break
}
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 {
subscriptionMessage := SubscriptionMessage{
Message: *notification.Msg,
@ -403,30 +429,30 @@ func (a *API) Listen(opts ListenOptions) (*NewSubscription, error) {
Channel: notification.Msg.Channel,
},
}
newMsgsCh <- subscriptionMessage
sub.newMsgsCh <- subscriptionMessage
}
case "chat_conv":
var notification chat1.ConvNotification
if err := json.Unmarshal([]byte(t), &notification); err != nil {
errorCh <- err
sub.errorCh <- fmt.Errorf("err: %v, data: %v", err, t)
break
}
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 {
subscriptionConv := SubscriptionConversation{
Conversation: *notification.Conv,
}
newConvsCh <- subscriptionConv
sub.newConvsCh <- subscriptionConv
}
case "wallet":
var holder PaymentHolder
if err := json.Unmarshal([]byte(t), &holder); err != nil {
errorCh <- err
sub.errorCh <- fmt.Errorf("err: %v, data: %v", err, t)
break
}
subscriptionPayment := SubscriptionWalletEvent(holder)
newWalletCh <- subscriptionPayment
sub.newWalletCh <- subscriptionPayment
default:
continue
}
@ -434,31 +460,31 @@ func (a *API) Listen(opts ListenOptions) (*NewSubscription, error) {
}
attempts := 0
maxAttempts := 1800
maxAttempts := 30
go func() {
defer func() {
close(newMsgsCh)
close(newConvsCh)
close(newWalletCh)
close(errorCh)
close(sub.newMsgsCh)
close(sub.newConvsCh)
close(sub.newWalletCh)
close(sub.errorCh)
}()
for {
select {
case <-shutdownCh:
log.Printf("Listen: received shutdown")
case <-sub.shutdownCh:
a.Debug("Listen: received shutdown")
return
default:
}
if attempts >= maxAttempts {
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")
}
attempts++
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)
continue
}
@ -472,13 +498,13 @@ func (a *API) Listen(opts ListenOptions) (*NewSubscription, error) {
p := a.runOpts.Command(cmdElements...)
output, err := p.StdoutPipe()
if err != nil {
log.Printf("Listen: failed to listen: %s", err)
a.Debug("Listen: failed to listen: %s", err)
time.Sleep(pause)
continue
}
stderr, err := p.StderrPipe()
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)
continue
}
@ -486,19 +512,27 @@ func (a *API) Listen(opts ListenOptions) (*NewSubscription, error) {
boutput := bufio.NewScanner(output)
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)
continue
}
attempts = 0
go readScanner(boutput)
<-done
select {
case <-sub.shutdownCh:
a.Debug("Listen: received shutdown")
return
case <-done:
}
if err := p.Wait(); err != nil {
stderrBytes, rerr := ioutil.ReadAll(stderr)
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)
}
@ -515,31 +549,27 @@ func (a *API) LogSend(feedback string) error {
"log", "send",
"--no-confirm",
"--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()
}
func (a *API) Shutdown() error {
func (a *API) Shutdown() (err error) {
defer a.Trace(&err, "Shutdown")()
a.Lock()
defer a.Unlock()
for _, sub := range a.subscriptions {
sub.Shutdown()
}
if a.apiCmd != nil {
a.Debug("waiting for API command")
if err := a.apiCmd.Wait(); err != nil {
return err
}
}
if a.runOpts.Oneshot != nil {
a.Debug("logging out")
err := a.runOpts.Command("logout", "--force").Run()
if err != nil {
return err
@ -547,6 +577,7 @@ func (a *API) Shutdown() error {
}
if a.runOpts.StartService {
a.Debug("stopping service")
err := a.runOpts.Command("ctl", "stop", "--shutdown").Run()
if err != nil {
return err

@ -26,7 +26,11 @@ type ListUserMemberships struct {
}
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.Stdin = strings.NewReader(apiInput)
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) {
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.Stdin = strings.NewReader(apiInput)
var stderr bytes.Buffer

@ -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
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 {
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"`
Edit *MessageEdit `codec:"edit,omitempty" json:"edit,omitempty"`
Reaction *MessageReaction `codec:"reaction,omitempty" json:"reaction,omitempty"`
@ -159,7 +269,7 @@ type MsgContent struct {
func (o MsgContent) DeepCopy() MsgContent {
return MsgContent{
TypeName: o.TypeName,
Text: (func(x *MessageText) *MessageText {
Text: (func(x *MsgTextContent) *MsgTextContent {
if x == nil {
return nil
}
@ -269,7 +379,7 @@ type MsgSummary struct {
IsEphemeral bool `codec:"isEphemeral,omitempty" json:"is_ephemeral,omitempty"`
IsEphemeralExpired bool `codec:"isEphemeralExpired,omitempty" json:"is_ephemeral_expired,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"`
AtMentionUsernames []string `codec:"atMentionUsernames,omitempty" json:"at_mention_usernames,omitempty"`
ChannelMention string `codec:"channelMention,omitempty" json:"channel_mention,omitempty"`
@ -304,7 +414,7 @@ func (o MsgSummary) DeepCopy() MsgSummary {
IsEphemeral: o.IsEphemeral,
IsEphemeralExpired: o.IsEphemeralExpired,
ETime: o.ETime.DeepCopy(),
Reactions: (func(x *ReactionMap) *ReactionMap {
Reactions: (func(x *UIReactionMap) *UIReactionMap {
if x == nil {
return nil
}
@ -832,6 +942,7 @@ type AdvertiseCommandAPIParam struct {
Typ string `codec:"typ" json:"type"`
Commands []UserBotCommandInput `codec:"commands" json:"commands"`
TeamName string `codec:"teamName,omitempty" json:"team_name,omitempty"`
ConvID ConvIDStr `codec:"convID,omitempty" json:"conv_id,omitempty"`
}
func (o AdvertiseCommandAPIParam) DeepCopy() AdvertiseCommandAPIParam {
@ -849,6 +960,21 @@ func (o AdvertiseCommandAPIParam) DeepCopy() AdvertiseCommandAPIParam {
return ret
})(o.Commands),
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 {
DeviceID keybase1.DeviceID `codec:"deviceID" json:"id"`
DeviceDescription string `codec:"deviceDescription" json:"description"`
DeviceType string `codec:"deviceType" json:"type"`
DeviceCtime int64 `codec:"deviceCtime" json:"ctime"`
DeviceID keybase1.DeviceID `codec:"deviceID" json:"id"`
DeviceDescription string `codec:"deviceDescription" json:"description"`
DeviceType keybase1.DeviceTypeV2 `codec:"deviceType" json:"type"`
DeviceCtime int64 `codec:"deviceCtime" json:"ctime"`
}
func (o DeviceInfo) DeepCopy() DeviceInfo {
return DeviceInfo{
DeviceID: o.DeviceID.DeepCopy(),
DeviceDescription: o.DeviceDescription,
DeviceType: o.DeviceType,
DeviceType: o.DeviceType.DeepCopy(),
DeviceCtime: o.DeviceCtime,
}
}

@ -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
package chat1

@ -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
package chat1
@ -537,6 +537,7 @@ type InboxUIItem struct {
IsDefaultConv bool `codec:"isDefaultConv" json:"isDefaultConv"`
Name string `codec:"name" json:"name"`
Snippet string `codec:"snippet" json:"snippet"`
SnippetDecorated string `codec:"snippetDecorated" json:"snippetDecorated"`
SnippetDecoration SnippetDecoration `codec:"snippetDecoration" json:"snippetDecoration"`
Channel string `codec:"channel" json:"channel"`
Headline string `codec:"headline" json:"headline"`
@ -579,6 +580,7 @@ func (o InboxUIItem) DeepCopy() InboxUIItem {
IsDefaultConv: o.IsDefaultConv,
Name: o.Name,
Snippet: o.Snippet,
SnippetDecorated: o.SnippetDecorated,
SnippetDecoration: o.SnippetDecoration.DeepCopy(),
Channel: o.Channel,
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 {
MessageID MessageID `codec:"messageID" json:"messageID"`
Ctime gregor1.Time `codec:"ctime" json:"ctime"`
@ -898,7 +944,7 @@ type UIMessageValid struct {
BodySummary string `codec:"bodySummary" json:"bodySummary"`
SenderUsername string `codec:"senderUsername" json:"senderUsername"`
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"`
SenderDeviceID gregor1.DeviceID `codec:"senderDeviceID" json:"senderDeviceID"`
Superseded bool `codec:"superseded" json:"superseded"`
@ -911,7 +957,7 @@ type UIMessageValid struct {
IsEphemeralExpired bool `codec:"isEphemeralExpired" json:"isEphemeralExpired"`
ExplodedBy *string `codec:"explodedBy,omitempty" json:"explodedBy,omitempty"`
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"`
PaymentInfos []UIPaymentInfo `codec:"paymentInfos" json:"paymentInfos"`
RequestInfo *UIRequestInfo `codec:"requestInfo,omitempty" json:"requestInfo,omitempty"`
@ -947,7 +993,7 @@ func (o UIMessageValid) DeepCopy() UIMessageValid {
BodySummary: o.BodySummary,
SenderUsername: o.SenderUsername,
SenderDeviceName: o.SenderDeviceName,
SenderDeviceType: o.SenderDeviceType,
SenderDeviceType: o.SenderDeviceType.DeepCopy(),
SenderUID: o.SenderUID.DeepCopy(),
SenderDeviceID: o.SenderDeviceID.DeepCopy(),
Superseded: o.Superseded,
@ -1068,6 +1114,7 @@ type UIMessageOutbox struct {
IsEphemeral bool `codec:"isEphemeral" json:"isEphemeral"`
FlipGameID *FlipGameIDStr `codec:"flipGameID,omitempty" json:"flipGameID,omitempty"`
ReplyTo *UIMessage `codec:"replyTo,omitempty" json:"replyTo,omitempty"`
Supersedes MessageID `codec:"supersedes" json:"supersedes"`
Filename string `codec:"filename" json:"filename"`
Title string `codec:"title" json:"title"`
Preview *MakePreviewRes `codec:"preview,omitempty" json:"preview,omitempty"`
@ -1103,8 +1150,9 @@ func (o UIMessageOutbox) DeepCopy() UIMessageOutbox {
tmp := (*x).DeepCopy()
return &tmp
})(o.ReplyTo),
Filename: o.Filename,
Title: o.Title,
Supersedes: o.Supersedes.DeepCopy(),
Filename: o.Filename,
Title: o.Title,
Preview: (func(x *MakePreviewRes) *MakePreviewRes {
if x == nil {
return nil
@ -1418,6 +1466,7 @@ const (
UITextDecorationTyp_LINK UITextDecorationTyp = 4
UITextDecorationTyp_MAILTO UITextDecorationTyp = 5
UITextDecorationTyp_KBFSPATH UITextDecorationTyp = 6
UITextDecorationTyp_EMOJI UITextDecorationTyp = 7
)
func (o UITextDecorationTyp) DeepCopy() UITextDecorationTyp { return o }
@ -1430,6 +1479,7 @@ var UITextDecorationTypMap = map[string]UITextDecorationTyp{
"LINK": 4,
"MAILTO": 5,
"KBFSPATH": 6,
"EMOJI": 7,
}
var UITextDecorationTypRevMap = map[UITextDecorationTyp]string{
@ -1440,6 +1490,7 @@ var UITextDecorationTypRevMap = map[UITextDecorationTyp]string{
4: "LINK",
5: "MAILTO",
6: "KBFSPATH",
7: "EMOJI",
}
func (e UITextDecorationTyp) String() string {
@ -1566,6 +1617,7 @@ type UITextDecoration struct {
Link__ *UILinkDecoration `codec:"link,omitempty" json:"link,omitempty"`
Mailto__ *UILinkDecoration `codec:"mailto,omitempty" json:"mailto,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) {
@ -1605,6 +1657,11 @@ func (o *UITextDecoration) Typ() (ret UITextDecorationTyp, err error) {
err = errors.New("unexpected nil value for Kbfspath__")
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
}
@ -1679,6 +1736,16 @@ func (o UITextDecoration) Kbfspath() (res 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 {
return UITextDecoration{
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 {
return UITextDecoration{
Typ__: o.Typ__.DeepCopy(),
@ -1780,6 +1854,13 @@ func (o UITextDecoration) DeepCopy() UITextDecoration {
tmp := (*x).DeepCopy()
return &tmp
})(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 {
Username string `codec:"username" json:"username"`
FullName string `codec:"fullName" json:"fullName"`

@ -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
package chat1

@ -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
package chat1
@ -9,6 +9,7 @@ import (
gregor1 "github.com/keybase/go-keybase-chat-bot/kbchat/types/gregor1"
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
@ -311,6 +312,8 @@ const (
TopicType_CHAT TopicType = 1
TopicType_DEV TopicType = 2
TopicType_KBFSFILEEDIT TopicType = 3
TopicType_EMOJI TopicType = 4
TopicType_EMOJICROSS TopicType = 5
)
func (o TopicType) DeepCopy() TopicType { return o }
@ -320,6 +323,8 @@ var TopicTypeMap = map[string]TopicType{
"CHAT": 1,
"DEV": 2,
"KBFSFILEEDIT": 3,
"EMOJI": 4,
"EMOJICROSS": 5,
}
var TopicTypeRevMap = map[TopicType]string{
@ -327,6 +332,8 @@ var TopicTypeRevMap = map[TopicType]string{
1: "CHAT",
2: "DEV",
3: "KBFSFILEEDIT",
4: "EMOJI",
5: "EMOJICROSS",
}
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 {
ConvID *ConversationID `codec:"convID,omitempty" json:"convID,omitempty"`
TopicType *TopicType `codec:"topicType,omitempty" json:"topicType,omitempty"`
@ -645,6 +678,7 @@ type GetInboxQuery struct {
ReadOnly bool `codec:"readOnly" json:"readOnly"`
ComputeActiveList bool `codec:"computeActiveList" json:"computeActiveList"`
SummarizeMaxMsgs bool `codec:"summarizeMaxMsgs" json:"summarizeMaxMsgs"`
ParticipantsMode InboxParticipantsMode `codec:"participantsMode" json:"participantsMode"`
SkipBgLoads bool `codec:"skipBgLoads" json:"skipBgLoads"`
AllowUnseenQuery bool `codec:"allowUnseenQuery" json:"allowUnseenQuery"`
}
@ -766,6 +800,7 @@ func (o GetInboxQuery) DeepCopy() GetInboxQuery {
ReadOnly: o.ReadOnly,
ComputeActiveList: o.ComputeActiveList,
SummarizeMaxMsgs: o.SummarizeMaxMsgs,
ParticipantsMode: o.ParticipantsMode.DeepCopy(),
SkipBgLoads: o.SkipBgLoads,
AllowUnseenQuery: o.AllowUnseenQuery,
}
@ -959,6 +994,7 @@ type ConversationReaderInfo struct {
MaxMsgid MessageID `codec:"maxMsgid" json:"maxMsgid"`
Status ConversationMemberStatus `codec:"status" json:"status"`
UntrustedTeamRole keybase1.TeamRole `codec:"untrustedTeamRole" json:"untrustedTeamRole"`
LastSendTime gregor1.Time `codec:"l" json:"l"`
Journeycard *ConversationJourneycardInfo `codec:"jc,omitempty" json:"jc,omitempty"`
}
@ -969,6 +1005,7 @@ func (o ConversationReaderInfo) DeepCopy() ConversationReaderInfo {
MaxMsgid: o.MaxMsgid.DeepCopy(),
Status: o.Status.DeepCopy(),
UntrustedTeamRole: o.UntrustedTeamRole.DeepCopy(),
LastSendTime: o.LastSendTime.DeepCopy(),
Journeycard: (func(x *ConversationJourneycardInfo) *ConversationJourneycardInfo {
if x == nil {
return nil
@ -1333,6 +1370,7 @@ type MessageClientHeader struct {
EphemeralMetadata *MsgEphemeralMetadata `codec:"em,omitempty" json:"em,omitempty"`
PairwiseMacs map[keybase1.KID][]byte `codec:"pm" json:"pm"`
BotUID *gregor1.UID `codec:"b,omitempty" json:"b,omitempty"`
TxID *stellar1.TransactionID `codec:"t,omitempty" json:"t,omitempty"`
}
func (o MessageClientHeader) DeepCopy() MessageClientHeader {
@ -1432,6 +1470,13 @@ func (o MessageClientHeader) DeepCopy() MessageClientHeader {
tmp := (*x).DeepCopy()
return &tmp
})(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_COINFLIP GetThreadReason = 9
GetThreadReason_BOTCOMMANDS GetThreadReason = 10
GetThreadReason_EMOJISOURCE GetThreadReason = 11
)
func (o GetThreadReason) DeepCopy() GetThreadReason { return o }
@ -1975,6 +2021,7 @@ var GetThreadReasonMap = map[string]GetThreadReason{
"KBFSFILEACTIVITY": 8,
"COINFLIP": 9,
"BOTCOMMANDS": 10,
"EMOJISOURCE": 11,
}
var GetThreadReasonRevMap = map[GetThreadReason]string{
@ -1989,6 +2036,7 @@ var GetThreadReasonRevMap = map[GetThreadReason]string{
8: "KBFSFILEACTIVITY",
9: "COINFLIP",
10: "BOTCOMMANDS",
11: "EMOJISOURCE",
}
func (e GetThreadReason) String() string {
@ -2044,6 +2092,9 @@ type SearchOpts struct {
MaxConvsHit int `codec:"maxConvsHit" json:"maxConvsHit"`
ConvID *ConversationID `codec:"convID,omitempty" json:"convID,omitempty"`
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 {
@ -2076,6 +2127,9 @@ func (o SearchOpts) DeepCopy() SearchOpts {
return &tmp
})(o.ConvID),
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"`
MimeType string `codec:"mimeType" json:"mimeType"`
EncHash Hash `codec:"encHash" json:"encHash"`
PtHash Hash `codec:"ptHash" json:"ptHash"`
Key []byte `codec:"key" json:"key"`
VerifyKey []byte `codec:"verifyKey" json:"verifyKey"`
Title string `codec:"title" json:"title"`
@ -2405,6 +2460,7 @@ func (o Asset) DeepCopy() Asset {
Size: o.Size,
MimeType: o.MimeType,
EncHash: o.EncHash.DeepCopy(),
PtHash: o.PtHash.DeepCopy(),
Key: (func(x []byte) []byte {
if x == nil {
return nil
@ -2435,6 +2491,7 @@ const (
BotCommandsAdvertisementTyp_PUBLIC BotCommandsAdvertisementTyp = 0
BotCommandsAdvertisementTyp_TLFID_MEMBERS BotCommandsAdvertisementTyp = 1
BotCommandsAdvertisementTyp_TLFID_CONVS BotCommandsAdvertisementTyp = 2
BotCommandsAdvertisementTyp_CONV BotCommandsAdvertisementTyp = 3
)
func (o BotCommandsAdvertisementTyp) DeepCopy() BotCommandsAdvertisementTyp { return o }
@ -2443,12 +2500,14 @@ var BotCommandsAdvertisementTypMap = map[string]BotCommandsAdvertisementTyp{
"PUBLIC": 0,
"TLFID_MEMBERS": 1,
"TLFID_CONVS": 2,
"CONV": 3,
}
var BotCommandsAdvertisementTypRevMap = map[BotCommandsAdvertisementTyp]string{
0: "PUBLIC",
1: "TLFID_MEMBERS",
2: "TLFID_CONVS",
3: "CONV",
}
func (e BotCommandsAdvertisementTyp) String() string {
@ -2471,3 +2530,126 @@ func (o TeamMember) DeepCopy() TeamMember {
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),
}
}

@ -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),
}
}

@ -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
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 {
InboxVers InboxVers `codec:"inboxVers" json:"inboxVers"`
ConvID ConversationID `codec:"convID" json:"convID"`

File diff suppressed because it is too large Load Diff

@ -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
package chat1
@ -115,7 +115,7 @@ func (o IncomingMessage) DeepCopy() IncomingMessage {
tmp := (*x).DeepCopy()
return &tmp
})(o.ModifiedMessage),
ConvID: o.ConvID.DeepCopy(),
ConvID: o.ConvID.DeepCopy(),
DisplayDesktopNotification: o.DisplayDesktopNotification,
DesktopNotificationSnippet: o.DesktopNotificationSnippet,
Conv: (func(x *InboxUIItem) *InboxUIItem {
@ -324,8 +324,8 @@ func (o EphemeralPurgeNotifInfo) DeepCopy() EphemeralPurgeNotifInfo {
}
type ReactionUpdate struct {
Reactions ReactionMap `codec:"reactions" json:"reactions"`
TargetMsgID MessageID `codec:"targetMsgID" json:"targetMsgID"`
Reactions UIReactionMap `codec:"reactions" json:"reactions"`
TargetMsgID MessageID `codec:"targetMsgID" json:"targetMsgID"`
}
func (o ReactionUpdate) DeepCopy() ReactionUpdate {
@ -758,20 +758,16 @@ func (o ChatActivity) DeepCopy() ChatActivity {
}
type TyperInfo struct {
Uid keybase1.UID `codec:"uid" json:"uid"`
Username string `codec:"username" json:"username"`
DeviceID keybase1.DeviceID `codec:"deviceID" json:"deviceID"`
DeviceName string `codec:"deviceName" json:"deviceName"`
DeviceType string `codec:"deviceType" json:"deviceType"`
Uid keybase1.UID `codec:"uid" json:"uid"`
Username string `codec:"username" json:"username"`
DeviceID keybase1.DeviceID `codec:"deviceID" json:"deviceID"`
}
func (o TyperInfo) DeepCopy() TyperInfo {
return TyperInfo{
Uid: o.Uid.DeepCopy(),
Username: o.Username,
DeviceID: o.DeviceID.DeepCopy(),
DeviceName: o.DeviceName,
DeviceType: o.DeviceType,
Uid: o.Uid.DeepCopy(),
Username: o.Username,
DeviceID: o.DeviceID.DeepCopy(),
}
}

@ -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
package chat1
@ -232,8 +232,10 @@ func (o NewConversationRemoteRes) DeepCopy() NewConversationRemoteRes {
}
type GetMessagesRemoteRes struct {
Msgs []MessageBoxed `codec:"msgs" json:"msgs"`
RateLimit *RateLimit `codec:"rateLimit,omitempty" json:"rateLimit,omitempty"`
Msgs []MessageBoxed `codec:"msgs" json:"msgs"`
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 {
@ -249,6 +251,8 @@ func (o GetMessagesRemoteRes) DeepCopy() GetMessagesRemoteRes {
}
return ret
})(o.Msgs),
MembersType: o.MembersType.DeepCopy(),
Visibility: o.Visibility.DeepCopy(),
RateLimit: (func(x *RateLimit) *RateLimit {
if x == 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 {
Typ__ BotCommandsAdvertisementTyp `codec:"typ" json:"typ"`
Public__ *RemoteBotCommandsAdvertisementPublic `codec:"public,omitempty" json:"public,omitempty"`
TlfidMembers__ *RemoteBotCommandsAdvertisementTLFID `codec:"tlfidMembers,omitempty" json:"tlfidMembers,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) {
@ -986,6 +1003,11 @@ func (o *RemoteBotCommandsAdvertisement) Typ() (ret BotCommandsAdvertisementTyp,
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
}
@ -1020,6 +1042,16 @@ func (o RemoteBotCommandsAdvertisement) TlfidConvs() (res RemoteBotCommandsAdver
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 {
return RemoteBotCommandsAdvertisement{
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 {
return RemoteBotCommandsAdvertisement{
Typ__: o.Typ__.DeepCopy(),
@ -1065,6 +1104,13 @@ func (o RemoteBotCommandsAdvertisement) DeepCopy() RemoteBotCommandsAdvertisemen
tmp := (*x).DeepCopy()
return &tmp
})(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 {
RateLimit *RateLimit `codec:"rateLimit,omitempty" json:"rateLimit,omitempty"`
}
@ -1248,3 +1457,155 @@ func (o BotInfoHash) DeepCopy() BotInfoHash {
return append([]byte{}, x...)
})(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),
}
}

@ -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
package chat1

@ -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
package gregor1

@ -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
package gregor1

@ -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
package gregor1

@ -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
package gregor1

@ -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
package gregor1

@ -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
package gregor1

@ -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
package gregor1

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1

@ -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
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
func (o BlockRefNonce) DeepCopy() BlockRefNonce {
@ -151,3 +183,75 @@ type BlockPingResponse struct {
func (o BlockPingResponse) DeepCopy() 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,
}
}

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1
@ -26,6 +26,12 @@ func (o DurationSec) DeepCopy() DurationSec {
return o
}
type DurationMsec float64
func (o DurationMsec) DeepCopy() DurationMsec {
return o
}
type StringKVPair struct {
Key string `codec:"key" json:"key"`
Value string `codec:"value" json:"value"`
@ -432,7 +438,7 @@ type PublicKey struct {
ParentID string `codec:"parentID" json:"parentID"`
DeviceID DeviceID `codec:"deviceID" json:"deviceID"`
DeviceDescription string `codec:"deviceDescription" json:"deviceDescription"`
DeviceType string `codec:"deviceType" json:"deviceType"`
DeviceType DeviceTypeV2 `codec:"deviceType" json:"deviceType"`
CTime Time `codec:"cTime" json:"cTime"`
ETime Time `codec:"eTime" json:"eTime"`
IsRevoked bool `codec:"isRevoked" json:"isRevoked"`
@ -458,7 +464,7 @@ func (o PublicKey) DeepCopy() PublicKey {
ParentID: o.ParentID,
DeviceID: o.DeviceID.DeepCopy(),
DeviceDescription: o.DeviceDescription,
DeviceType: o.DeviceType,
DeviceType: o.DeviceType.DeepCopy(),
CTime: o.CTime.DeepCopy(),
ETime: o.ETime.DeepCopy(),
IsRevoked: o.IsRevoked,
@ -504,21 +510,21 @@ func (o User) DeepCopy() User {
}
type Device struct {
Type string `codec:"type" json:"type"`
Name string `codec:"name" json:"name"`
DeviceID DeviceID `codec:"deviceID" json:"deviceID"`
DeviceNumberOfType int `codec:"deviceNumberOfType" json:"deviceNumberOfType"`
CTime Time `codec:"cTime" json:"cTime"`
MTime Time `codec:"mTime" json:"mTime"`
LastUsedTime Time `codec:"lastUsedTime" json:"lastUsedTime"`
EncryptKey KID `codec:"encryptKey" json:"encryptKey"`
VerifyKey KID `codec:"verifyKey" json:"verifyKey"`
Status int `codec:"status" json:"status"`
Type DeviceTypeV2 `codec:"type" json:"type"`
Name string `codec:"name" json:"name"`
DeviceID DeviceID `codec:"deviceID" json:"deviceID"`
DeviceNumberOfType int `codec:"deviceNumberOfType" json:"deviceNumberOfType"`
CTime Time `codec:"cTime" json:"cTime"`
MTime Time `codec:"mTime" json:"mTime"`
LastUsedTime Time `codec:"lastUsedTime" json:"lastUsedTime"`
EncryptKey KID `codec:"encryptKey" json:"encryptKey"`
VerifyKey KID `codec:"verifyKey" json:"verifyKey"`
Status int `codec:"status" json:"status"`
}
func (o Device) DeepCopy() Device {
return Device{
Type: o.Type,
Type: o.Type.DeepCopy(),
Name: o.Name,
DeviceID: o.DeviceID.DeepCopy(),
DeviceNumberOfType: o.DeviceNumberOfType,
@ -557,6 +563,12 @@ func (e DeviceType) String() string {
return fmt.Sprintf("%v", int(e))
}
type DeviceTypeV2 string
func (o DeviceTypeV2) DeepCopy() DeviceTypeV2 {
return o
}
type Stream struct {
Fd int `codec:"fd" json:"fd"`
}
@ -1061,26 +1073,84 @@ func (e OfflineAvailability) String() string {
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
func (o ReacjiSkinTone) DeepCopy() ReacjiSkinTone {
return o
const (
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 {
TopReacjis []string `codec:"topReacjis" json:"topReacjis"`
TopReacjis []UserReacji `codec:"topReacjis" json:"topReacjis"`
SkinTone ReacjiSkinTone `codec:"skinTone" json:"skinTone"`
}
func (o UserReacjis) DeepCopy() UserReacjis {
return UserReacjis{
TopReacjis: (func(x []string) []string {
TopReacjis: (func(x []UserReacji) []UserReacji {
if x == nil {
return nil
}
ret := make([]string, len(x))
ret := make([]UserReacji, len(x))
for i, v := range x {
vCopy := v
vCopy := v.DeepCopy()
ret[i] = vCopy
}
return ret
@ -1088,3 +1158,38 @@ func (o UserReacjis) DeepCopy() UserReacjis {
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))
}

@ -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
package keybase1
@ -9,11 +9,12 @@ import (
)
type CurrentStatus struct {
Configured bool `codec:"configured" json:"configured"`
Registered bool `codec:"registered" json:"registered"`
LoggedIn bool `codec:"loggedIn" json:"loggedIn"`
SessionIsValid bool `codec:"sessionIsValid" json:"sessionIsValid"`
User *User `codec:"user,omitempty" json:"user,omitempty"`
Configured bool `codec:"configured" json:"configured"`
Registered bool `codec:"registered" json:"registered"`
LoggedIn bool `codec:"loggedIn" json:"loggedIn"`
SessionIsValid bool `codec:"sessionIsValid" json:"sessionIsValid"`
User *User `codec:"user,omitempty" json:"user,omitempty"`
DeviceName string `codec:"deviceName" json:"deviceName"`
}
func (o CurrentStatus) DeepCopy() CurrentStatus {
@ -29,6 +30,7 @@ func (o CurrentStatus) DeepCopy() CurrentStatus {
tmp := (*x).DeepCopy()
return &tmp
})(o.User),
DeviceName: o.DeviceName,
}
}
@ -331,6 +333,7 @@ type KbServiceStatus struct {
Pid string `codec:"pid" json:"pid"`
Log string `codec:"log" json:"log"`
EkLog string `codec:"ekLog" json:"ekLog"`
PerfLog string `codec:"perfLog" json:"perfLog"`
}
func (o KbServiceStatus) DeepCopy() KbServiceStatus {
@ -340,6 +343,7 @@ func (o KbServiceStatus) DeepCopy() KbServiceStatus {
Pid: o.Pid,
Log: o.Log,
EkLog: o.EkLog,
PerfLog: o.PerfLog,
}
}
@ -349,6 +353,7 @@ type KBFSStatus struct {
Running bool `codec:"running" json:"running"`
Pid string `codec:"pid" json:"pid"`
Log string `codec:"log" json:"log"`
PerfLog string `codec:"perfLog" json:"perfLog"`
Mount string `codec:"mount" json:"mount"`
}
@ -359,6 +364,7 @@ func (o KBFSStatus) DeepCopy() KBFSStatus {
Running: o.Running,
Pid: o.Pid,
Log: o.Log,
PerfLog: o.PerfLog,
Mount: o.Mount,
}
}
@ -398,12 +404,14 @@ func (o StartStatus) DeepCopy() StartStatus {
}
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 {
return GitStatus{
Log: o.Log,
Log: o.Log,
PerfLog: o.PerfLog,
}
}

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

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1
type FeaturedBot struct {
BotAlias string `codec:"botAlias" json:"botAlias"`
Description string `codec:"description" json:"description"`
ExtendedDescription string `codec:"extendedDescription" json:"extendedDescription"`
BotUsername string `codec:"botUsername" json:"botUsername"`
OwnerTeam *string `codec:"ownerTeam,omitempty" json:"ownerTeam,omitempty"`
OwnerUser *string `codec:"ownerUser,omitempty" json:"ownerUser,omitempty"`
Rank int `codec:"rank" json:"rank"`
IsPromoted bool `codec:"isPromoted" json:"isPromoted"`
BotAlias string `codec:"botAlias" json:"botAlias"`
Description string `codec:"description" json:"description"`
ExtendedDescription string `codec:"extendedDescription" json:"extendedDescription"`
ExtendedDescriptionRaw string `codec:"extendedDescriptionRaw" json:"extendedDescriptionRaw"`
BotUsername string `codec:"botUsername" json:"botUsername"`
OwnerTeam *string `codec:"ownerTeam,omitempty" json:"ownerTeam,omitempty"`
OwnerUser *string `codec:"ownerUser,omitempty" json:"ownerUser,omitempty"`
Rank int `codec:"rank" json:"rank"`
IsPromoted bool `codec:"isPromoted" json:"isPromoted"`
}
func (o FeaturedBot) DeepCopy() FeaturedBot {
return FeaturedBot{
BotAlias: o.BotAlias,
Description: o.Description,
ExtendedDescription: o.ExtendedDescription,
BotUsername: o.BotUsername,
BotAlias: o.BotAlias,
Description: o.Description,
ExtendedDescription: o.ExtendedDescription,
ExtendedDescriptionRaw: o.ExtendedDescriptionRaw,
BotUsername: o.BotUsername,
OwnerTeam: (func(x *string) *string {
if x == nil {
return nil

@ -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
package keybase1

@ -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
package keybase1
@ -223,8 +223,8 @@ type GitServerMetadata struct {
func (o GitServerMetadata) DeepCopy() GitServerMetadata {
return GitServerMetadata{
Ctime: o.Ctime.DeepCopy(),
Mtime: o.Mtime.DeepCopy(),
Ctime: o.Ctime.DeepCopy(),
Mtime: o.Mtime.DeepCopy(),
LastModifyingUsername: o.LastModifyingUsername,
LastModifyingDeviceID: o.LastModifyingDeviceID.DeepCopy(),
LastModifyingDeviceName: o.LastModifyingDeviceName,

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1
@ -298,19 +298,19 @@ const (
HomeScreenTodoType_PROOF HomeScreenTodoType = 2
HomeScreenTodoType_DEVICE HomeScreenTodoType = 3
HomeScreenTodoType_FOLLOW HomeScreenTodoType = 4
HomeScreenTodoType_CHAT HomeScreenTodoType = 5
HomeScreenTodoType_PAPERKEY HomeScreenTodoType = 6
HomeScreenTodoType_TEAM HomeScreenTodoType = 7
HomeScreenTodoType_FOLDER HomeScreenTodoType = 8
HomeScreenTodoType_GIT_REPO HomeScreenTodoType = 9
HomeScreenTodoType_TEAM_SHOWCASE HomeScreenTodoType = 10
HomeScreenTodoType_AVATAR_USER HomeScreenTodoType = 11
HomeScreenTodoType_AVATAR_TEAM HomeScreenTodoType = 12
HomeScreenTodoType_ADD_PHONE_NUMBER HomeScreenTodoType = 18
HomeScreenTodoType_VERIFY_ALL_PHONE_NUMBER HomeScreenTodoType = 19
HomeScreenTodoType_VERIFY_ALL_EMAIL HomeScreenTodoType = 20
HomeScreenTodoType_LEGACY_EMAIL_VISIBILITY HomeScreenTodoType = 21
HomeScreenTodoType_ADD_EMAIL HomeScreenTodoType = 22
HomeScreenTodoType_AVATAR_USER HomeScreenTodoType = 23
HomeScreenTodoType_CHAT HomeScreenTodoType = 24
HomeScreenTodoType_ANNONCEMENT_PLACEHOLDER HomeScreenTodoType = 10000
)
@ -322,19 +322,19 @@ var HomeScreenTodoTypeMap = map[string]HomeScreenTodoType{
"PROOF": 2,
"DEVICE": 3,
"FOLLOW": 4,
"CHAT": 5,
"PAPERKEY": 6,
"TEAM": 7,
"FOLDER": 8,
"GIT_REPO": 9,
"TEAM_SHOWCASE": 10,
"AVATAR_USER": 11,
"AVATAR_TEAM": 12,
"ADD_PHONE_NUMBER": 18,
"VERIFY_ALL_PHONE_NUMBER": 19,
"VERIFY_ALL_EMAIL": 20,
"LEGACY_EMAIL_VISIBILITY": 21,
"ADD_EMAIL": 22,
"AVATAR_USER": 23,
"CHAT": 24,
"ANNONCEMENT_PLACEHOLDER": 10000,
}
@ -344,19 +344,19 @@ var HomeScreenTodoTypeRevMap = map[HomeScreenTodoType]string{
2: "PROOF",
3: "DEVICE",
4: "FOLLOW",
5: "CHAT",
6: "PAPERKEY",
7: "TEAM",
8: "FOLDER",
9: "GIT_REPO",
10: "TEAM_SHOWCASE",
11: "AVATAR_USER",
12: "AVATAR_TEAM",
18: "ADD_PHONE_NUMBER",
19: "VERIFY_ALL_PHONE_NUMBER",
20: "VERIFY_ALL_EMAIL",
21: "LEGACY_EMAIL_VISIBILITY",
22: "ADD_EMAIL",
23: "AVATAR_USER",
24: "CHAT",
10000: "ANNONCEMENT_PLACEHOLDER",
}
@ -435,7 +435,7 @@ func (o HomeScreenTodo) LegacyEmailVisibility() (res EmailAddress) {
func NewHomeScreenTodoWithVerifyAllPhoneNumber(v PhoneNumber) HomeScreenTodo {
return HomeScreenTodo{
T__: HomeScreenTodoType_VERIFY_ALL_PHONE_NUMBER,
T__: HomeScreenTodoType_VERIFY_ALL_PHONE_NUMBER,
VerifyAllPhoneNumber__: &v,
}
}
@ -449,7 +449,7 @@ func NewHomeScreenTodoWithVerifyAllEmail(v EmailAddress) HomeScreenTodo {
func NewHomeScreenTodoWithLegacyEmailVisibility(v EmailAddress) HomeScreenTodo {
return HomeScreenTodo{
T__: HomeScreenTodoType_LEGACY_EMAIL_VISIBILITY,
T__: HomeScreenTodoType_LEGACY_EMAIL_VISIBILITY,
LegacyEmailVisibility__: &v,
}
}

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1
@ -128,21 +128,23 @@ func (o Identify3RowMeta) DeepCopy() Identify3RowMeta {
}
type Identify3Row struct {
GuiID Identify3GUIID `codec:"guiID" json:"guiID"`
Key string `codec:"key" json:"key"`
Value string `codec:"value" json:"value"`
Priority int `codec:"priority" json:"priority"`
SiteURL string `codec:"siteURL" json:"siteURL"`
SiteIcon []SizedImage `codec:"siteIcon" json:"siteIcon"`
SiteIconFull []SizedImage `codec:"siteIconFull" json:"siteIconFull"`
SiteIconWhite []SizedImage `codec:"siteIconWhite" json:"siteIconWhite"`
ProofURL string `codec:"proofURL" json:"proofURL"`
SigID SigID `codec:"sigID" json:"sigID"`
Ctime Time `codec:"ctime" json:"ctime"`
State Identify3RowState `codec:"state" json:"state"`
Metas []Identify3RowMeta `codec:"metas" json:"metas"`
Color Identify3RowColor `codec:"color" json:"color"`
Kid *KID `codec:"kid,omitempty" json:"kid,omitempty"`
GuiID Identify3GUIID `codec:"guiID" json:"guiID"`
Key string `codec:"key" json:"key"`
Value string `codec:"value" json:"value"`
Priority int `codec:"priority" json:"priority"`
SiteURL string `codec:"siteURL" json:"siteURL"`
SiteIcon []SizedImage `codec:"siteIcon" json:"siteIcon"`
SiteIconDarkmode []SizedImage `codec:"siteIconDarkmode" json:"siteIconDarkmode"`
SiteIconFull []SizedImage `codec:"siteIconFull" json:"siteIconFull"`
SiteIconFullDarkmode []SizedImage `codec:"siteIconFullDarkmode" json:"siteIconFullDarkmode"`
ProofURL string `codec:"proofURL" json:"proofURL"`
SigID SigID `codec:"sigID" json:"sigID"`
Ctime Time `codec:"ctime" json:"ctime"`
State Identify3RowState `codec:"state" json:"state"`
Metas []Identify3RowMeta `codec:"metas" json:"metas"`
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 {
@ -163,6 +165,17 @@ func (o Identify3Row) DeepCopy() Identify3Row {
}
return ret
})(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 {
if x == nil {
return nil
@ -174,7 +187,7 @@ func (o Identify3Row) DeepCopy() Identify3Row {
}
return ret
})(o.SiteIconFull),
SiteIconWhite: (func(x []SizedImage) []SizedImage {
SiteIconFullDarkmode: (func(x []SizedImage) []SizedImage {
if x == nil {
return nil
}
@ -184,7 +197,7 @@ func (o Identify3Row) DeepCopy() Identify3Row {
ret[i] = vCopy
}
return ret
})(o.SiteIconWhite),
})(o.SiteIconFullDarkmode),
ProofURL: o.ProofURL,
SigID: o.SigID.DeepCopy(),
Ctime: o.Ctime.DeepCopy(),
@ -208,5 +221,24 @@ func (o Identify3Row) DeepCopy() Identify3Row {
tmp := (*x).DeepCopy()
return &tmp
})(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,
}
}

@ -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
package keybase1

@ -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
package keybase1
@ -337,37 +337,33 @@ func (o UserTeamShowcase) DeepCopy() UserTeamShowcase {
}
type UserCard struct {
Following int `codec:"following" json:"following"`
Followers int `codec:"followers" json:"followers"`
Uid UID `codec:"uid" json:"uid"`
FullName string `codec:"fullName" json:"fullName"`
Location string `codec:"location" json:"location"`
Bio string `codec:"bio" json:"bio"`
BioDecorated string `codec:"bioDecorated" json:"bioDecorated"`
Website string `codec:"website" json:"website"`
Twitter string `codec:"twitter" json:"twitter"`
YouFollowThem bool `codec:"youFollowThem" json:"youFollowThem"`
TheyFollowYou bool `codec:"theyFollowYou" json:"theyFollowYou"`
TeamShowcase []UserTeamShowcase `codec:"teamShowcase" json:"teamShowcase"`
RegisteredForAirdrop bool `codec:"registeredForAirdrop" json:"registeredForAirdrop"`
StellarHidden bool `codec:"stellarHidden" json:"stellarHidden"`
Blocked bool `codec:"blocked" json:"blocked"`
HidFromFollowers bool `codec:"hidFromFollowers" json:"hidFromFollowers"`
UnverifiedNumFollowing int `codec:"unverifiedNumFollowing" json:"unverifiedNumFollowing"`
UnverifiedNumFollowers int `codec:"unverifiedNumFollowers" json:"unverifiedNumFollowers"`
Uid UID `codec:"uid" json:"uid"`
FullName string `codec:"fullName" json:"fullName"`
Location string `codec:"location" json:"location"`
Bio string `codec:"bio" json:"bio"`
BioDecorated string `codec:"bioDecorated" json:"bioDecorated"`
Website string `codec:"website" json:"website"`
Twitter string `codec:"twitter" json:"twitter"`
TeamShowcase []UserTeamShowcase `codec:"teamShowcase" json:"teamShowcase"`
RegisteredForAirdrop bool `codec:"registeredForAirdrop" json:"registeredForAirdrop"`
StellarHidden bool `codec:"stellarHidden" json:"stellarHidden"`
Blocked bool `codec:"blocked" json:"blocked"`
HidFromFollowers bool `codec:"hidFromFollowers" json:"hidFromFollowers"`
}
func (o UserCard) DeepCopy() UserCard {
return UserCard{
Following: o.Following,
Followers: o.Followers,
Uid: o.Uid.DeepCopy(),
FullName: o.FullName,
Location: o.Location,
Bio: o.Bio,
BioDecorated: o.BioDecorated,
Website: o.Website,
Twitter: o.Twitter,
YouFollowThem: o.YouFollowThem,
TheyFollowYou: o.TheyFollowYou,
UnverifiedNumFollowing: o.UnverifiedNumFollowing,
UnverifiedNumFollowers: o.UnverifiedNumFollowers,
Uid: o.Uid.DeepCopy(),
FullName: o.FullName,
Location: o.Location,
Bio: o.Bio,
BioDecorated: o.BioDecorated,
Website: o.Website,
Twitter: o.Twitter,
TeamShowcase: (func(x []UserTeamShowcase) []UserTeamShowcase {
if x == nil {
return nil

@ -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
package keybase1

@ -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),
}
}

@ -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
package keybase1

@ -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),
}
}

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1

@ -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
package keybase1
type KVGetResult struct {
TeamName string `codec:"teamName" json:"teamName"`
Namespace string `codec:"namespace" json:"namespace"`
EntryKey string `codec:"entryKey" json:"entryKey"`
EntryValue string `codec:"entryValue" json:"entryValue"`
Revision int `codec:"revision" json:"revision"`
TeamName string `codec:"teamName" json:"teamName"`
Namespace string `codec:"namespace" json:"namespace"`
EntryKey string `codec:"entryKey" json:"entryKey"`
EntryValue *string `codec:"entryValue" json:"entryValue"`
Revision int `codec:"revision" json:"revision"`
}
func (o KVGetResult) DeepCopy() KVGetResult {
return KVGetResult{
TeamName: o.TeamName,
Namespace: o.Namespace,
EntryKey: o.EntryKey,
EntryValue: o.EntryValue,
Revision: o.Revision,
TeamName: o.TeamName,
Namespace: o.Namespace,
EntryKey: o.EntryKey,
EntryValue: (func(x *string) *string {
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

Loading…
Cancel
Save