* [NP] Allow custom validations in HTTP Routes apart from @kbn/config-schema
* API docs
* Allow validate function in the route handler (run-code validation)
* Prefix RouteXXX + Params and Body Validation Aliases
* Fix test broken by lodash
* Update API docs
* Add default types for simpler manual declaration
* Add run-time validation of the RouteValidateSpec
* Expose RouteValidationError instead of SchemaTypeError
* RouteValidator as a class to match config-schema interface
* Test for not-inline handler (need to check IRouter for #47047)
* Add preValidation of the input for a safer custom validation
* Better types for RouteHandlers
* [NP] Move route validation to RouteValidator wrapper
* Use the class only internally but maintain the same API
* Fix types
* Ensure RouteValidator instance in KibanaRequest.from
* Fix validator.tests (Buffer.from instead of new Buffer)
* Default precheck should allow null values
* Also allow undefined in preChecks
* MR feedback fixes
* Provide RouteValidationResolver to the validation function
* Add functional tests
* Fix new functional tests
* Fix validator additional test
* Fix test with new resolver
* Remove unused import
* Rename ValidationResolver to ValidationResultFactory and change the interface to look more like the KibanaResponseFactory
Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
* Revert "Revert "[Canvas] Adds telemetry info for custom elements (#36177)" (#37100)"
This reverts commit 3f4c2c89ec.
* Cast fromExpression unknown type
* PR Feedback
* Fixed broken elements in logs sample workpad. Cleaned up expression formatting in each element
* Removed return characters at the beginning of expressions
* Dispatch on node id convention as we don't carry around the node type information
* place groups previously misplaced into its proper array
* don't render (always invisible) groups, which are free of own contents
* Initial code to force collectors to indicate when they are ready
* Add and fix tests
* Remove debug
* Add ready check in api call
* Fix prettier complaints
* Return 503 if not all collectors are ready
* PR feedback
* Add retry logic for usage collection in the reporting tests
* Fix incorrect boomify usage
* Fix more issues with the tests
* Just add debug I guess
* More debug
* Try and handle this exception
* Try and make the tests more defensive and remove console logs
* Retry logic here too
* Debug for the reporting tests failure
* I don't like this, but lets see if it works
* Move the retry logic into the collector set directly
* Add support for this new collector
* Localize this
* This shouldn't be static on the class, but rather static for the entire runtime
* [@kbn/expect] "fork" expect.js into repo
* [eslint] autofix references to expect.js
* [tslint] autofix all expect.js imports
* now that expect.js is in strict mode, avoid reassigning fn.length
* udpate jest, jest-cli, @types/jest to v24
* fix type error in kibana-i18n package
* return serivce explicitly to fix typings
* add explicit never
* suppress typings errors
* update jest versions in x-pack
* make tests in x-pack more robust and fix incompatibility
* suppress CallCluster mock typings
Mock interface doesn't match CallCluster. Requires
additional work
* x-pack. resolve other typing conflicts
* remove unused types/jest
* fix snapshots
* restore mocks after jest.spyOn
* remove outdated definitions for jest
* cleanup x-pack package.json and update @types/jest
* fix tests merged from master
* updated yarn.lock and log errors for scripts/type_check
* This commit fixes error in TS, which failed on parsing the file.
* suppress type errors from master
* jest-cli is devDep
Removes sinon from saved objects unit tests. (#32045) (#32151)
* Removes sinon from saved objects unit tests.
* Uses mockResolvedValue for return values as promises.
temp
This removes the custom build process for Canvas plugins. Canvas plugins are now regular
Kibana plugins. They can register server-side functions like so:
```js
server.plugins.interpreter.register({
serverFunctions: [yourFunctionsHere],
});
```
And client-side functions need to be included in `uiExports.canvas`, then they need to
register themselves like so:
```js
// kbnInterpreter is a global, sadly, but it makes registration simple
kbnInterpreter.register({
elements: [yourElementsHere],
browserFunctions: [yourFnsHere],
});
```
The sample data does not currently specify a migration version, which means we have manually update the data sets when updating the saved objects API. This just sets the migration version for all the saved objects to `{}`, which signals to the saved objects API that the object has not been migrated and should have all migrations applied.
* [canvas] remove styling rules that are handled by prettier, always use curlys in if
* [eslint] autofix missing curly brackets
* [eslint/canvas] remove redundant prettier plugin config
* autofix lint errors in canvas_plugin_src/renderers/time_filter/components/datetime_range_absolute/datetime_range_absolute.js
Summary of changes:
- move all build artifacts under `target` directory
- run babel and webpack in parallel
- support optional watch and sourcemaps in build
- expose /common /public /plugin /server sub-exports as index.js
- avoid importing deeply from `@kbn/interpreter`
- move a couple missed dependencies from x-pack to kibana
- remove custom babel-register implementation
## Summary
CI was broken when enabling functional smoke tests via #25262. The problem is that the Kibana build is broken in master...
I think #25711 broke it, which was merged in between #25262 passing and it being merged (and then CI breaking). So this PR reverts that PR and enabled canvas smoke tests again to see if CI will pass.
- Revert #25711
- Revert 7ae0d28d87
Fixes https://github.com/elastic/kibana/issues/23552
Extends the webpack config used to pre-build `x-pack/plugins/canvas/canvas_plugins_src` so that it does a couple things:
- use the "browser" and "main" fields when defined by packages, this allows the already transpiled output of packages like `@elastic/eui` to be used rather than rebuilding from source
- use the `@kbn/babel-preset/webpack_preset` for babel-loader
- include all errors in the log output when an error occurs
Closes https://github.com/elastic/kibana/issues/25154
Canvas' threading code uses babel-register for the runtime, much like Kibana does, so we can execute code that uses newer syntax (mostly es modules at this point...). The default configuration of babel-register ignores `node_modules`, and since x-pack is built into `node_modules`, this worked fine in dev mode and not at all in the build.
There was also an issue where Kibana's build step removes all bablerc files, which meant Canvas' threaded runtime also wasn't getting any of the settings.
This PR pulls in the configuration from Kibana, which has an exception for transpiling x-pack code, and allows the runtime to operate correctly in the build.
Huge thanks to @jbudz for helping me sort out the issue!
@spalger ~~know more about babel than I do, if we can just use `@kbn/babel-preset/node_preset` directly instead, that seems less likely to break going forward. I meant to try it but ran out of time yesterday to make another build.~~ Works! PR updated.
PR fixes issues with the socket connection.
- handle socket failures
- previously would either leave Canvas in an infinite loading state, or load the app even when it wouldn't function
- upgrade socket.io
- add headers to socket connection and modify auth connection
* Adds custom font as option in font picker
* Adjusted font sizes in ecommerce sample worpad
* Adjusted font sizes in sample flight workpad
* Adjusted font sizes in smaple web logs workpad
Replaces https://github.com/elastic/kibana/pull/23301
Closes https://github.com/elastic/kibana/issues/23080
---
This is a minimal threading implementation for Canvas. There's still a lot to be done to make this concept great, but this is a start.
What it does:
- Creates a server side abstraction on top of the interpreter
- Determines where to send the expression by checking the first function to be run
- Loads common functions in a separate worker thread on the server.
- Routes to a single forked worker (thread), the main thread (server), or the browser (browser), in that order
- Defers back to the router when a function isn't found. Fails if the function isn't found in any of the above 3 environments
- Times out the worker if it takes too long, and respawns it as needed.
- Simplifies the error dialog to remove the stack.
What is does not.:
- Round robin a pool of workers
- Queue. If one expression in the threaded env fails then anything sent to it in the meantime will fail. The upstream environment handles managing timeouts. I think this would only make sense todo with a pool.
- Client side. This doesn't implement web workers, but we could use roughly the same architecture.
- Implement a specific, pluggable `worker` environment on the server. Right now it's just common functions, so plugin authors will always end up in a thread if they put their function in the common directory.
What I don't like:
- The socketProvider code. This was reused across the server & browser, but now that it's only used in the browser there's no good reason for the abstraction
- The serialize/deserialize stuff feels messy. Do we really need serialization?
## Summary
Closes https://github.com/elastic/kibana/issues/23303 ~(@cqliu1 can you confirm this too?)~ confirmed
Fixes the way we capture the request info when configuring the socket and providing it to plugins via `callWithRequest`. Instead of exposing a route that returns the info, simply use the request object that comes back from `server.inject`.
Also adds a check in the `elasticsearchClient` handler exposed to plugins to ensure the session is still valid because using `callWithRequest`.

*Note:* the actual error message is a bit different, but this is how the failure is exposed to the user