gitextract_oztk1vft/ ├── .gitattributes ├── .github/ │ └── ISSUE_TEMPLATE/ │ ├── bug_report.md │ ├── config.yml │ └── feature_request.md ├── CONTRIBUTING.md ├── INSTALL.md ├── LICENSE ├── README.md ├── README_ko.md ├── SECURITY.md ├── build-all.sh ├── build-py-grpc.sh ├── chatbot/ │ ├── LICENSE │ ├── README.md │ ├── csharp/ │ │ └── README.md │ └── python/ │ ├── .gitignore │ ├── README.md │ ├── basic-cookie.sample │ ├── chatbot.py │ ├── quotes.txt │ ├── requirements.txt │ ├── setup.py │ └── token-cookie.sample ├── docker/ │ ├── README.md │ ├── chatbot/ │ │ └── Dockerfile │ ├── docker-compose/ │ │ ├── README.md │ │ ├── cluster.mongodb.yml │ │ ├── cluster.postgres.yml │ │ ├── cluster.rethinkdb.yml │ │ ├── cluster.yml │ │ ├── single-instance.mongodb.yml │ │ ├── single-instance.postgres.yml │ │ ├── single-instance.rethinkdb.yml │ │ └── single-instance.yml │ ├── exporter/ │ │ ├── Dockerfile │ │ └── entrypoint.sh │ └── tinode/ │ ├── Dockerfile │ ├── config.template │ └── entrypoint.sh ├── docker-build.sh ├── docker-release.sh ├── docs/ │ ├── API.md │ ├── CLA.md │ ├── call-establishment.md │ ├── drafty.md │ ├── faq.md │ ├── monitoring.md │ ├── thecard.md │ └── translations.md ├── go.mod ├── go.sum ├── keygen/ │ ├── README.md │ └── keygen.go ├── loadtest/ │ ├── LICENSE │ ├── README.md │ ├── loadtest.scala │ ├── tinode.beam │ ├── tinode.erl │ ├── tinode.scala │ ├── tsung.xml │ └── users.csv ├── monitoring/ │ ├── LICENSE │ ├── README.md │ └── exporter/ │ ├── README.md │ ├── build.sh │ ├── influxdb_exporter.go │ ├── main.go │ ├── prom_exporter.go │ └── scraper.go ├── pbx/ │ ├── README.md │ ├── go-generate.sh │ ├── model.pb.go │ ├── model.proto │ ├── model_grpc.pb.go │ ├── py-generate.sh │ └── py_fix.py ├── py_grpc/ │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── pyproject.toml │ ├── tinode_grpc/ │ │ ├── __init__.py │ │ ├── model_pb2.py │ │ ├── model_pb2.pyi │ │ └── model_pb2_grpc.py │ └── version.py ├── rest-auth/ │ ├── README.md │ ├── auth.py │ ├── dummy_data.json │ └── requirements.txt ├── server/ │ ├── .golangci.yml │ ├── api_key.go │ ├── auth/ │ │ ├── anon/ │ │ │ └── auth_anon.go │ │ ├── auth.go │ │ ├── basic/ │ │ │ └── auth_basic.go │ │ ├── code/ │ │ │ └── auth_code.go │ │ ├── mock_auth/ │ │ │ └── mock_auth.go │ │ ├── rest/ │ │ │ ├── README.md │ │ │ └── auth_rest.go │ │ └── token/ │ │ └── auth_token.go │ ├── calls.go │ ├── cluster.go │ ├── cluster_leader.go │ ├── concurrency/ │ │ ├── goroutinepool.go │ │ └── simplemutex.go │ ├── datamodel.go │ ├── db/ │ │ ├── adapter.go │ │ ├── common/ │ │ │ ├── common.go │ │ │ ├── common_test.go │ │ │ └── test_data/ │ │ │ └── test_data.go │ │ ├── mongodb/ │ │ │ ├── adapter.go │ │ │ ├── blank.go │ │ │ ├── schema.md │ │ │ └── tests/ │ │ │ ├── mongo_test.go │ │ │ └── test.conf │ │ ├── mysql/ │ │ │ ├── adapter.go │ │ │ ├── blank.go │ │ │ ├── schema.sql │ │ │ └── tests/ │ │ │ ├── mysql_test.go │ │ │ └── test.conf │ │ ├── postgres/ │ │ │ ├── adapter.go │ │ │ ├── blank.go │ │ │ ├── schema.sql │ │ │ └── tests/ │ │ │ ├── postgres_test.go │ │ │ └── test.conf │ │ └── rethinkdb/ │ │ ├── adapter.go │ │ ├── blank.go │ │ ├── schema.md │ │ └── tests/ │ │ ├── rethink_test.go │ │ └── test.conf │ ├── drafty/ │ │ ├── drafty.go │ │ ├── drafty_test.go │ │ └── grapheme.go │ ├── hdl_files.go │ ├── hdl_grpc.go │ ├── hdl_longpoll.go │ ├── hdl_websock.go │ ├── http.go │ ├── http_pprof.go │ ├── hub.go │ ├── init_topic.go │ ├── logs/ │ │ └── logs.go │ ├── main.go │ ├── media/ │ │ ├── fs/ │ │ │ └── filesys.go │ │ ├── media.go │ │ ├── media_test.go │ │ └── s3/ │ │ └── s3.go │ ├── pbconverter.go │ ├── plugins.go │ ├── pres.go │ ├── push/ │ │ ├── common/ │ │ │ └── typedef.go │ │ ├── fcm/ │ │ │ ├── README.md │ │ │ ├── payload.go │ │ │ └── push_fcm.go │ │ ├── push.go │ │ ├── stdout/ │ │ │ ├── README.md │ │ │ └── push_stdout.go │ │ └── tnpg/ │ │ ├── README.md │ │ └── push_tnpg.go │ ├── push.go │ ├── ringhash/ │ │ ├── ringhash.go │ │ └── ringhash_test.go │ ├── run-cluster.sh │ ├── sanity-test.sh │ ├── session.go │ ├── session_test.go │ ├── sessionstore.go │ ├── stats.go │ ├── store/ │ │ ├── mock_store/ │ │ │ └── mock_store.go │ │ ├── store.go │ │ └── types/ │ │ ├── types.go │ │ ├── uidgen.go │ │ └── uidgen_test.go │ ├── templ/ │ │ ├── email-password-reset-en.templ │ │ ├── email-password-reset-es.templ │ │ ├── email-password-reset-fr.templ │ │ ├── email-password-reset-pt.templ │ │ ├── email-password-reset-ru.templ │ │ ├── email-password-reset-uk.templ │ │ ├── email-password-reset-vi.templ │ │ ├── email-password-reset-zh-TW.templ │ │ ├── email-password-reset-zh.templ │ │ ├── email-validation-en.templ │ │ ├── email-validation-es.templ │ │ ├── email-validation-fr.templ │ │ ├── email-validation-pt.templ │ │ ├── email-validation-ru.templ │ │ ├── email-validation-uk.templ │ │ ├── email-validation-vi.templ │ │ ├── email-validation-zh-TW.templ │ │ ├── email-validation-zh.templ │ │ ├── sms-universal-en.templ │ │ ├── sms-universal-es.templ │ │ ├── sms-universal-fr.templ │ │ ├── sms-universal-pt.templ │ │ ├── sms-universal-ru.templ │ │ ├── sms-universal-uk.templ │ │ ├── sms-universal-vi.templ │ │ ├── sms-universal-zh-TW.templ │ │ └── sms-universal-zh.templ │ ├── tinode.conf │ ├── topic.go │ ├── topic_proxy.go │ ├── topic_test.go │ ├── user.go │ ├── utils.go │ ├── utils_test.go │ └── validate/ │ ├── email/ │ │ └── validate.go │ ├── tel/ │ │ ├── twilio.go │ │ └── validate.go │ └── validator.go ├── tinode-db/ │ ├── README.md │ ├── credentials.sh │ ├── data.json │ ├── gendb.go │ ├── generate_dataset.py │ ├── main.go │ └── tinode.conf └── tn-cli/ ├── CODE-STRUCTURE.md ├── LICENSE ├── README.md ├── client.py ├── commands.py ├── input_handler.py ├── macros.py ├── requirements.txt ├── sample-macro-script.txt ├── sample-script.txt ├── tn-cli.py ├── tn_globals.py └── utils.py