* Add logic to enable generic hook expiry
* Add storage for hook expiry warnings.
* Migrate generic hooks / add expiry field
* Allow reporting a specific error and status code for generic webhooks
* Report the specific error when a message fails to send
* Refactor input class to better support datetime
* Remove single use of innerChild
* Add UI support for expiry configuration
* Add new packages
* Add warnings when the timer is about to expire.
* Add send expiry notice config option
* lint
* document new option s
* Fixup test
* Add tests for expiry
* Add textual command for setting a duration on a webhook.
* Add e2e test for inbound hooks.
* changelog
* Add a configuration option to force webhooks to expire.
* update config.sample.yml
* fix field not working
* Initial support for outbound webhooks.
* Refactor outbound into it's own connection type.
* Add support for media / encrypted media.
* Ensure we configure a sensible User Agent
* Add a test for outbound webhooks
* Checkpoint for feature completeness.
* Lint tidy
* Finish up media tests.
* changelog
* Add outbound documentation
* update default config
* fix tests
* Split out queue and cache config
* Update usages of cache config,
* Update default
* Cleanup
* Make queue optional.
* config updates.
* changelog
* update spec config
* Update tests
* tweak import
* Update default config.
* fixup test
* Update config.sample.yml
Co-authored-by: Andrew Ferrazzutti <andrewf@element.io>
Signed-off-by: Will Hunt <will@half-shot.uk>
* Update encryption.md
Signed-off-by: Will Hunt <will@half-shot.uk>
* Clear up worker config
Signed-off-by: Will Hunt <will@half-shot.uk>
* Update src/config/Config.ts
Co-authored-by: Andrew Ferrazzutti <andrewf@element.io>
Signed-off-by: Will Hunt <will@half-shot.uk>
* update helm config
* move UserTokenStore.ts
* Port all the imports to new path.
* Port RSA handling to rust.
* Add tests.
* linting
* lint rust
* Remove unwraps / panics
* fix build script
* Ensure we store and check with algorithm and key was used.
* quieten false deadcode warnings
* changelog
* fix test imports
* lazy mock out UTS
* Refactor so that UserTokenStore is initiated by the time Bridge is created.
* update defaults
* replace if with match
* Use the magic of ?
* fmt
---------
Signed-off-by: Will Hunt <will@half-shot.uk>
Co-authored-by: Andrew Ferrazzutti <andrewf@element.io>
* Add ability to respond to webhooks.
* Refactor hook handling code for simplicity
* Cleanup checkbox
* Ensure we can send a response even we send no content.
* Add docs
* changelog
* Reflect local and global state in the UI
* Revert CHANGELOG for now
* Emphasize Slack the service in webhooks docs
and not time slack
* Guard against falsey non-string values
---------
Co-authored-by: Andrew Ferrazzutti <andrewf@element.io>
* Various smaller changes
* Drop account data entirely
* Use max feed items
* Commit known working improvements
* Better status handlingh
* changelog
* Update changelog
* Add a note on Redis.
* Add proper HTTP tests
* Linty lint
* Tweaks
* New metrics woah
* Tweaks
* Add an ensureJoined to assertUserPermissions
* Ensure web component retries connection fetches
* Ensure errors are caught and logged as JSON on the widget API
* changelog
* non-linear retry timer
* lint
* Use retry
* Make getBotUserInRoom try to join the room
* Make this fn safe to handle
* Add support for checking connection grants
* Make this less noisy
* Remove import
* Trying to generic-ize the grant system
* Implement for Figma
* More grant reformatting
* Add tests
* changelog
* Fix todo
* Refactor grants
* Add logging to grant checkers
* Ensure we provide a sender
* WIP
* Update vite
* Add oauth landing page
* Add API support for GitHub oauthing
* Remove console.logs
* Add support for logging and and out of GitHub
* Add bridge API methods
* Add base link styling
* Sugar syntax main get
* Update vite
* changelog
* Review changes
* Use instance to match UI
* lint
---------
Co-authored-by: Justin Carlson <justinc@element.io>
* Add service bots config
* Add joined rooms manager and keep track of joined rooms
* Add bot users manager and ensure registration and profiles
* Improve joined rooms manager and set up already joined rooms
* Handle invites with service bots
* Handle messages with service bots
* Use service bots for connections
* Use service bots in widget and provisioning APIs
* Use service bots in setup connections
* Use service bots for feed connections
* Handle admin rooms for service bots
* Fix confused event type and service type in provisioning and widget APIs
* Fix generic webhooks service name
* Fix enabled services config
* Handle power level change
* Create widgets with service scope
* Use service bots for gitlab repo connections
* Use service bots for gitlab issue connections
* Use service bots for generic webhook connections
* Use service bots for figma file connections
* Use service bots when verifying state events
* Use service bots for github repo connections
* Use service bots for github discussion connections
* Use service bots for github discussion space connections
* Use service bots for github project connections
* Use service bots for github issue connections
* Use service bots for github user space connections
* Use service bots for jira connections
* Make sure ghost users are invited for gitlab issue comments
* Configure one service per service bot
* Add changelog
* Update tests
* Fix up following rebase
* Fix comment
* Use getter for enabled services
* Ensure homeserver can be reached before registering bots
* Add intent getter on bot user
* Update config comment
* Merge joined rooms manager with bot users manager
* Remove unused localpart from bot user class
* Refactor to pass in bot users manager
* Improve priority sort function
Co-authored-by: Christian Paul <christianp@matrix.org>
* Fix priority sort
Higher priority should come first
* Add debug log when invites are rejected
* Use different state key for scoped setup widgets
* Use different subtitles to differentiate service bots setup widgets
* Refactor bot user setup into bot users manager
* Refactor to reduce duplication in widget API
* Consistent room ID and intent args order
* Add docs and update changelog
* Add overrideUserId deprecation warning
* Add service bots link
Co-authored-by: Christian Paul <christianp@matrix.org>
Co-authored-by: Will Hunt <will@half-shot.uk>
* Add a queue system for loading connections on startup
* Retry state requests
* Add ability to retry on some matrix failures
* Add the queue
* changelog
* Add docstring
* Add support for native e2ee
* Various temps to coax it into working
* Formatting nitpicks
* Include stable registration config key for msc2409
* Update default config with encryption options
* Manage admin rooms with bot-sdk DMs
This also enables encryption for new admin rooms when appropriate.
* Update config comments for encryption settings
- Add comment to clarify Redis (the `queue` section) must be configured
in order for encryption to work
- Mention that the `encryption` section is optional, and omitting it
will disable encryption support
* Update docs for encryption support
* Add changelog
* Add to docs some notes about encryption state
* Move all post-join logic to onRoomJoin
* Block post-join actions on crypto setup
Requires https://github.com/turt2live/matrix-bot-sdk/pull/269
* Fix linter error
* Update encryption docs and changelog
- Mention that worker mode isn't supported with encryption yet
- Mention removal of Pantalaimon-based encryption
* Update worker docs with encryption config notice
* Share main appservice config with feed bots
This is required to safely enable encryption for the bots that post
GenericHook messages.
* Make slight clarification for queue config
* Minor fixes
* Block post-join actions on feed bot crypto setup
Same as a9e6e11d but for the sub-bots that post GenericHook messages.
* Get joined rooms from intent instead of bot
This refreshes the list of known rooms for crypto events.
* Use Element fork of bot-sdk for crypto fixes
Co-authored-by: Andrew Ferrazzutti <andrewf@element.io>
* Save bot-created admin rooms in profile data
This prevents a process restart from causing bot-created admin rooms
to be forgotten.
* Clarify changelog
* Harden against unauthorized changes to room state
If an unauthorized change to connection-related room state is detected,
deny the new connection settings & attempt to revert the state change.
Also catch an otherwise-uncaught error on authentication failure.
* `any`->`unknown` for some StateEvent content types
* Limit how far back in state to look when restoring
* Explicitly drop unneeded return value of promise
* Add reason to redacted state events
* Rename & document the fn to revert room state
* Move connection state check to ConnectionManager
* Don't rollback bad room state on startup
- Support version created/updated/released events
- Look up project ID if missing when subscribing to version events
- Properly format version event notices
- Prioritize project URL over ID in debug strings
- Refactor Jira event handling to be more like GitHub & GitLab
- Fix silently-ignored Jira events due to expecting wrong type strings
- Update UI for Jira events
* Log fatal to console if we haven't configured logging
* Move token store load up
* Fix logging typo
* Fix everything logging at debug
* changelog
* Make private
* Add support for setting a global feed timeout
* Track failures, and don't show the first non-serious error
* Tidy up error reporting
* Make a prettier error pane
* Use the prettier event pane
* Show failed feed attempts in the widget
* Ensure we catch connection resets
* Add styling file
* Ensure we only track one result per fetch
* changelog
* Refactor to use better status codes
* Make feed results cheaper
* splice
* Disallow some empty config URL settings
If these settings are meant to be unspecified, then their entire parent
sections (`widgets` & `generic`) should be unspecified.
Signed-off-by: Andrew Ferrazzutti <andrewf@element.io>
* Convert some config URL strings to URL objects
This allows both parsing and easier crafting of relative URLs.
Signed-off-by: Andrew Ferrazzutti <andrewf@element.io>
* Dump parsed URLs to default config
Also implement getters to return stringified URLs, instead of having to
store a URL's string representation directly.
Signed-off-by: Andrew Ferrazzutti <andrewf@element.io>
* Add Admin command from listing and disconnecting connections
(Only lists Github for now).
* Require connectionManager permissions to manipulate connections
Gives connection management its own config section and switches
AdminRoom categories to be enums.
* Fail more descriptively if connectionManager is not up in time for adminRoom
* Fix Github API URLs (#366)
* Fix Github API URLs
* Add changelog entry
* Fixes
* Tidyup
Co-authored-by: Will Hunt <will@half-shot.uk>
Co-authored-by: Tadeusz Sośnierz <tadeusz@sosnierz.com>
* Fix URLs *again*
* Block private repos from being publically bridged
* Ensure check looks at service type
* Finish up deleting connections impl
Co-authored-by: Tadeusz Sośnierz <tadeusz@sosnierz.com>
Co-authored-by: Will Hunt <will@half-shot.uk>
* 1.6.1
* Add new error type for validation errors
* Validate state for GitHubRepo properly
* Add tests to check labels
* Also check GitLab repo
* changelog
* add mock store
* remove nullable
* Be less strict for existing state
* Improve test coverage
* Improve expect error text
* ValidationApiError now takes falsey objects and errors on them
* Remove UserTokenMockStore
* Actually commit the new tests
* Whoops we need to include github
* Statically define connection creation and provisioing
* Tidy up
* Drop JIRA
* Convert other connections to new system
* Small linting fixes
* Fixes
* changelog
* Fix bridge
* Fix JIRA instance naming
* Fix JIRA config
* Drop unnessacery check