<!--
Welcome to Airbyte!
We're really appreciate your report and know that th…is will help us build an
amazing tool. If you want to contribute yourself, you can find a good place
to start by searching for the good-first-issues label or maybe... by trying
to solve this one? (we can help debug this with you!)
Right now we are in alpha, so we're releasing versions a lot more frequently than
normal. You can help us get to the root of the problem faster by filling out the
questionnaire below!
It's really important having all information and context.
You can remove the examples bellow and fill out with your information.
-->
## Enviroment
- **Airbyte version**: 0.32.0-alpha
- **OS Version / Instance**: MacOS
- **Deployment**: Docker
- **Source Connector and version**: Facebook Marketing
- **Destination Connector and version**: (if applicable example Postgres 0.3.3)
- **Severity**: Very Low / Low / Medium / High / Critical
- **Step where error happened**: Deploy / Sync job / Setup new connection / Update connector / Upgrade Airbyte
## Current Behavior
After creating a Facebook Marketing source I'm not able to remove the `end_date` params.
If I try the UI return me to the source page, give me the impression it worked... but when I return to the connector setting page the end date param still there.
## Expected Behavior
*Tell us what should happen.*
## Logs
<details>
<summary>Response from <em>check_connection_for_update</em> endpoint:</summary>
<pre>
{
"message": "The provided configuration does not fulfill the specification. Errors: json schema validation failed when comparing the data to the json schema. \nErrors: $.end_date: does not match the regex pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$, $.end_date: is an invalid date-time \nSchema: \n{\n \"type\" : \"object\",\n \"title\" : \"Source Facebook Marketing\",\n \"required\" : [ \"account_id\", \"access_token\", \"start_date\" ],\n \"properties\" : {\n \"end_date\" : {\n \"type\" : \"string\",\n \"title\" : \"End Date\",\n \"format\" : \"date-time\",\n \"pattern\" : \"^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$\",\n \"examples\" : [ \"2017-01-26T00:00:00Z\" ],\n \"description\" : \"The date until which you'd like to replicate data for AdCreatives and AdInsights APIs, in the format YYYY-MM-DDT00:00:00Z. All data generated between start_date and this date will be replicated. Not setting this option will result in always syncing the latest data.\"\n },\n \"account_id\" : {\n \"type\" : \"string\",\n \"title\" : \"Account Id\",\n \"description\" : \"The Facebook Ad account ID to use when pulling data from the Facebook Marketing API.\"\n },\n \"start_date\" : {\n \"type\" : \"string\",\n \"title\" : \"Start Date\",\n \"format\" : \"date-time\",\n \"pattern\" : \"^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$\",\n \"examples\" : [ \"2017-01-25T00:00:00Z\" ],\n \"description\" : \"The date from which you'd like to replicate data for AdCreatives and AdInsights APIs, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.\"\n },\n \"access_token\" : {\n \"type\" : \"string\",\n \"title\" : \"Access Token\",\n \"description\" : \"The value of the access token generated. See the <a href=\\\"https://docs.airbyte.io/integrations/sources/facebook-marketing\\\">docs</a> for more information\",\n \"airbyte_secret\" : true\n },\n \"custom_insights\" : {\n \"type\" : \"array\",\n \"items\" : {\n \"type\" : \"object\",\n \"title\" : \"InsightConfig\",\n \"required\" : [ \"name\" ],\n \"properties\" : {\n \"name\" : {\n \"type\" : \"string\",\n \"title\" : \"Name\",\n \"description\" : \"The name value of insight\"\n },\n \"fields\" : {\n \"type\" : \"array\",\n \"items\" : {\n \"type\" : \"string\"\n },\n \"title\" : \"Fields\",\n \"default\" : [ ],\n \"description\" : \"A list of chosen fields for fields parameter\"\n },\n \"breakdowns\" : {\n \"type\" : \"array\",\n \"items\" : {\n \"type\" : \"string\"\n },\n \"title\" : \"Breakdowns\",\n \"default\" : [ ],\n \"description\" : \"A list of chosen breakdowns for breakdowns\"\n },\n \"action_breakdowns\" : {\n \"type\" : \"array\",\n \"items\" : {\n \"type\" : \"string\"\n },\n \"title\" : \"Action Breakdowns\",\n \"default\" : [ ],\n \"description\" : \"A list of chosen action_breakdowns for action_breakdowns\"\n }\n }\n },\n \"title\" : \"Custom Insights\",\n \"description\" : \"A list wich contains insights entries, each entry must have a name and can contains fields, breakdowns or action_breakdowns)\"\n },\n \"include_deleted\" : {\n \"type\" : \"boolean\",\n \"title\" : \"Include Deleted\",\n \"default\" : false,\n \"description\" : \"Include data from deleted campaigns, ads, and adsets.\"\n },\n \"insights_days_per_job\" : {\n \"type\" : \"integer\",\n \"title\" : \"Insights Days Per Job\",\n \"default\" : 7,\n \"maximum\" : 30,\n \"minimum\" : 1,\n \"description\" : \"Number of days to sync in one job. The more data you have - the smaller you want this parameter to be.\"\n },\n \"insights_lookback_window\" : {\n \"type\" : \"integer\",\n \"title\" : \"Insights Lookback Window\",\n \"default\" : 28,\n \"maximum\" : 28,\n \"minimum\" : 0,\n \"description\" : \"The attribution window for the actions\"\n }\n },\n \"definitions\" : {\n \"InsightConfig\" : {\n \"type\" : \"object\",\n \"title\" : \"InsightConfig\",\n \"required\" : [ \"name\" ],\n \"properties\" : {\n \"name\" : {\n \"type\" : \"string\",\n \"title\" : \"Name\",\n \"description\" : \"The name value of insight\"\n },\n \"fields\" : {\n \"type\" : \"array\",\n \"items\" : {\n \"type\" : \"string\"\n },\n \"title\" : \"Fields\",\n \"default\" : [ ],\n \"description\" : \"A list of chosen fields for fields parameter\"\n },\n \"breakdowns\" : {\n \"type\" : \"array\",\n \"items\" : {\n \"type\" : \"string\"\n },\n \"title\" : \"Breakdowns\",\n \"default\" : [ ],\n \"description\" : \"A list of chosen breakdowns for breakdowns\"\n },\n \"action_breakdowns\" : {\n \"type\" : \"array\",\n \"items\" : {\n \"type\" : \"string\"\n },\n \"title\" : \"Action Breakdowns\",\n \"default\" : [ ],\n \"description\" : \"A list of chosen action_breakdowns for action_breakdowns\"\n }\n }\n }\n }\n}",
"exceptionClassName": "io.airbyte.server.errors.BadObjectSchemaKnownException",
"exceptionStack": [
"io.airbyte.server.errors.BadObjectSchemaKnownException: The provided configuration does not fulfill the specification. Errors: json schema validation failed when comparing the data to the json schema. ",
"Errors: $.end_date: does not match the regex pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$, $.end_date: is an invalid date-time ",
"Schema: ",
"{",
" \"type\" : \"object\",",
" \"title\" : \"Source Facebook Marketing\",",
" \"required\" : [ \"account_id\", \"access_token\", \"start_date\" ],",
" \"properties\" : {",
" \"end_date\" : {",
" \"type\" : \"string\",",
" \"title\" : \"End Date\",",
" \"format\" : \"date-time\",",
" \"pattern\" : \"^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$\",",
" \"examples\" : [ \"2017-01-26T00:00:00Z\" ],",
" \"description\" : \"The date until which you'd like to replicate data for AdCreatives and AdInsights APIs, in the format YYYY-MM-DDT00:00:00Z. All data generated between start_date and this date will be replicated. Not setting this option will result in always syncing the latest data.\"",
" },",
" \"account_id\" : {",
" \"type\" : \"string\",",
" \"title\" : \"Account Id\",",
" \"description\" : \"The Facebook Ad account ID to use when pulling data from the Facebook Marketing API.\"",
" },",
" \"start_date\" : {",
" \"type\" : \"string\",",
" \"title\" : \"Start Date\",",
" \"format\" : \"date-time\",",
" \"pattern\" : \"^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$\",",
" \"examples\" : [ \"2017-01-25T00:00:00Z\" ],",
" \"description\" : \"The date from which you'd like to replicate data for AdCreatives and AdInsights APIs, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.\"",
" },",
" \"access_token\" : {",
" \"type\" : \"string\",",
" \"title\" : \"Access Token\",",
" \"description\" : \"The value of the access token generated. See the <a href=\\\"https://docs.airbyte.io/integrations/sources/facebook-marketing\\\">docs</a> for more information\",",
" \"airbyte_secret\" : true",
" },",
" \"custom_insights\" : {",
" \"type\" : \"array\",",
" \"items\" : {",
" \"type\" : \"object\",",
" \"title\" : \"InsightConfig\",",
" \"required\" : [ \"name\" ],",
" \"properties\" : {",
" \"name\" : {",
" \"type\" : \"string\",",
" \"title\" : \"Name\",",
" \"description\" : \"The name value of insight\"",
" },",
" \"fields\" : {",
" \"type\" : \"array\",",
" \"items\" : {",
" \"type\" : \"string\"",
" },",
" \"title\" : \"Fields\",",
" \"default\" : [ ],",
" \"description\" : \"A list of chosen fields for fields parameter\"",
" },",
" \"breakdowns\" : {",
" \"type\" : \"array\",",
" \"items\" : {",
" \"type\" : \"string\"",
" },",
" \"title\" : \"Breakdowns\",",
" \"default\" : [ ],",
" \"description\" : \"A list of chosen breakdowns for breakdowns\"",
" },",
" \"action_breakdowns\" : {",
" \"type\" : \"array\",",
" \"items\" : {",
" \"type\" : \"string\"",
" },",
" \"title\" : \"Action Breakdowns\",",
" \"default\" : [ ],",
" \"description\" : \"A list of chosen action_breakdowns for action_breakdowns\"",
" }",
" }",
" },",
" \"title\" : \"Custom Insights\",",
" \"description\" : \"A list wich contains insights entries, each entry must have a name and can contains fields, breakdowns or action_breakdowns)\"",
" },",
" \"include_deleted\" : {",
" \"type\" : \"boolean\",",
" \"title\" : \"Include Deleted\",",
" \"default\" : false,",
" \"description\" : \"Include data from deleted campaigns, ads, and adsets.\"",
" },",
" \"insights_days_per_job\" : {",
" \"type\" : \"integer\",",
" \"title\" : \"Insights Days Per Job\",",
" \"default\" : 7,",
" \"maximum\" : 30,",
" \"minimum\" : 1,",
" \"description\" : \"Number of days to sync in one job. The more data you have - the smaller you want this parameter to be.\"",
" },",
" \"insights_lookback_window\" : {",
" \"type\" : \"integer\",",
" \"title\" : \"Insights Lookback Window\",",
" \"default\" : 28,",
" \"maximum\" : 28,",
" \"minimum\" : 0,",
" \"description\" : \"The attribution window for the actions\"",
" }",
" },",
" \"definitions\" : {",
" \"InsightConfig\" : {",
" \"type\" : \"object\",",
" \"title\" : \"InsightConfig\",",
" \"required\" : [ \"name\" ],",
" \"properties\" : {",
" \"name\" : {",
" \"type\" : \"string\",",
" \"title\" : \"Name\",",
" \"description\" : \"The name value of insight\"",
" },",
" \"fields\" : {",
" \"type\" : \"array\",",
" \"items\" : {",
" \"type\" : \"string\"",
" },",
" \"title\" : \"Fields\",",
" \"default\" : [ ],",
" \"description\" : \"A list of chosen fields for fields parameter\"",
" },",
" \"breakdowns\" : {",
" \"type\" : \"array\",",
" \"items\" : {",
" \"type\" : \"string\"",
" },",
" \"title\" : \"Breakdowns\",",
" \"default\" : [ ],",
" \"description\" : \"A list of chosen breakdowns for breakdowns\"",
" },",
" \"action_breakdowns\" : {",
" \"type\" : \"array\",",
" \"items\" : {",
" \"type\" : \"string\"",
" },",
" \"title\" : \"Action Breakdowns\",",
" \"default\" : [ ],",
" \"description\" : \"A list of chosen action_breakdowns for action_breakdowns\"",
" }",
" }",
" }",
" }",
"}",
"\tat io.airbyte.server.apis.ConfigurationApi.execute(ConfigurationApi.java:685)",
"\tat io.airbyte.server.apis.ConfigurationApi.checkConnectionToSourceForUpdate(ConfigurationApi.java:375)",
"\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
"\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)",
"\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
"\tat java.base/java.lang.reflect.Method.invoke(Method.java:564)",
"\tat org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52)",
"\tat org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:124)",
"\tat org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:167)",
"\tat org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:219)",
"\tat org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:79)",
"\tat org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:469)",
"\tat org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:391)",
"\tat org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:80)",
"\tat org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:253)",
"\tat org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)",
"\tat org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)",
"\tat org.glassfish.jersey.internal.Errors.process(Errors.java:292)",
"\tat org.glassfish.jersey.internal.Errors.process(Errors.java:274)",
"\tat org.glassfish.jersey.internal.Errors.process(Errors.java:244)",
"\tat org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265)",
"\tat org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:232)",
"\tat org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:680)",
"\tat org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:394)",
"\tat org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)",
"\tat org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:366)",
"\tat org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:319)",
"\tat org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205)",
"\tat org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:763)",
"\tat org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:569)",
"\tat org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)",
"\tat org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1377)",
"\tat org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)",
"\tat org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:507)",
"\tat org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)",
"\tat org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1292)",
"\tat org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)",
"\tat org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)",
"\tat org.eclipse.jetty.server.Server.handle(Server.java:501)",
"\tat org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383)",
"\tat org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:556)",
"\tat org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375)",
"\tat org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:273)",
"\tat org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)",
"\tat org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)",
"\tat org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)",
"\tat org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)",
"\tat org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)",
"\tat org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)",
"\tat org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)",
"\tat org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:375)",
"\tat org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806)",
"\tat org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938)",
"\tat java.base/java.lang.Thread.run(Thread.java:832)",
"Caused by: io.airbyte.validation.json.JsonValidationException: json schema validation failed when comparing the data to the json schema. ",
"Errors: $.end_date: does not match the regex pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$, $.end_date: is an invalid date-time ",
"Schema: ",
"{",
" \"type\" : \"object\",",
" \"title\" : \"Source Facebook Marketing\",",
" \"required\" : [ \"account_id\", \"access_token\", \"start_date\" ],",
" \"properties\" : {",
" \"end_date\" : {",
" \"type\" : \"string\",",
" \"title\" : \"End Date\",",
" \"format\" : \"date-time\",",
" \"pattern\" : \"^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$\",",
" \"examples\" : [ \"2017-01-26T00:00:00Z\" ],",
" \"description\" : \"The date until which you'd like to replicate data for AdCreatives and AdInsights APIs, in the format YYYY-MM-DDT00:00:00Z. All data generated between start_date and this date will be replicated. Not setting this option will result in always syncing the latest data.\"",
" },",
" \"account_id\" : {",
" \"type\" : \"string\",",
" \"title\" : \"Account Id\",",
" \"description\" : \"The Facebook Ad account ID to use when pulling data from the Facebook Marketing API.\"",
" },",
" \"start_date\" : {",
" \"type\" : \"string\",",
" \"title\" : \"Start Date\",",
" \"format\" : \"date-time\",",
" \"pattern\" : \"^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$\",",
" \"examples\" : [ \"2017-01-25T00:00:00Z\" ],",
" \"description\" : \"The date from which you'd like to replicate data for AdCreatives and AdInsights APIs, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.\"",
" },",
" \"access_token\" : {",
" \"type\" : \"string\",",
" \"title\" : \"Access Token\",",
" \"description\" : \"The value of the access token generated. See the <a href=\\\"https://docs.airbyte.io/integrations/sources/facebook-marketing\\\">docs</a> for more information\",",
" \"airbyte_secret\" : true",
" },",
" \"custom_insights\" : {",
" \"type\" : \"array\",",
" \"items\" : {",
" \"type\" : \"object\",",
" \"title\" : \"InsightConfig\",",
" \"required\" : [ \"name\" ],",
" \"properties\" : {",
" \"name\" : {",
" \"type\" : \"string\",",
" \"title\" : \"Name\",",
" \"description\" : \"The name value of insight\"",
" },",
" \"fields\" : {",
" \"type\" : \"array\",",
" \"items\" : {",
" \"type\" : \"string\"",
" },",
" \"title\" : \"Fields\",",
" \"default\" : [ ],",
" \"description\" : \"A list of chosen fields for fields parameter\"",
" },",
" \"breakdowns\" : {",
" \"type\" : \"array\",",
" \"items\" : {",
" \"type\" : \"string\"",
" },",
" \"title\" : \"Breakdowns\",",
" \"default\" : [ ],",
" \"description\" : \"A list of chosen breakdowns for breakdowns\"",
" },",
" \"action_breakdowns\" : {",
" \"type\" : \"array\",",
" \"items\" : {",
" \"type\" : \"string\"",
" },",
" \"title\" : \"Action Breakdowns\",",
" \"default\" : [ ],",
" \"description\" : \"A list of chosen action_breakdowns for action_breakdowns\"",
" }",
" }",
" },",
" \"title\" : \"Custom Insights\",",
" \"description\" : \"A list wich contains insights entries, each entry must have a name and can contains fields, breakdowns or action_breakdowns)\"",
" },",
" \"include_deleted\" : {",
" \"type\" : \"boolean\",",
" \"title\" : \"Include Deleted\",",
" \"default\" : false,",
" \"description\" : \"Include data from deleted campaigns, ads, and adsets.\"",
" },",
" \"insights_days_per_job\" : {",
" \"type\" : \"integer\",",
" \"title\" : \"Insights Days Per Job\",",
" \"default\" : 7,",
" \"maximum\" : 30,",
" \"minimum\" : 1,",
" \"description\" : \"Number of days to sync in one job. The more data you have - the smaller you want this parameter to be.\"",
" },",
" \"insights_lookback_window\" : {",
" \"type\" : \"integer\",",
" \"title\" : \"Insights Lookback Window\",",
" \"default\" : 28,",
" \"maximum\" : 28,",
" \"minimum\" : 0,",
" \"description\" : \"The attribution window for the actions\"",
" }",
" },",
" \"definitions\" : {",
" \"InsightConfig\" : {",
" \"type\" : \"object\",",
" \"title\" : \"InsightConfig\",",
" \"required\" : [ \"name\" ],",
" \"properties\" : {",
" \"name\" : {",
" \"type\" : \"string\",",
" \"title\" : \"Name\",",
" \"description\" : \"The name value of insight\"",
" },",
" \"fields\" : {",
" \"type\" : \"array\",",
" \"items\" : {",
" \"type\" : \"string\"",
" },",
" \"title\" : \"Fields\",",
" \"default\" : [ ],",
" \"description\" : \"A list of chosen fields for fields parameter\"",
" },",
" \"breakdowns\" : {",
" \"type\" : \"array\",",
" \"items\" : {",
" \"type\" : \"string\"",
" },",
" \"title\" : \"Breakdowns\",",
" \"default\" : [ ],",
" \"description\" : \"A list of chosen breakdowns for breakdowns\"",
" },",
" \"action_breakdowns\" : {",
" \"type\" : \"array\",",
" \"items\" : {",
" \"type\" : \"string\"",
" },",
" \"title\" : \"Action Breakdowns\",",
" \"default\" : [ ],",
" \"description\" : \"A list of chosen action_breakdowns for action_breakdowns\"",
" }",
" }",
" }",
" }",
"}",
"\tat io.airbyte.validation.json.JsonSchemaValidator.ensure(JsonSchemaValidator.java:68)",
"\tat io.airbyte.server.handlers.SchedulerHandler.checkSourceConnectionFromSourceIdForUpdate(SchedulerHandler.java:172)",
"\tat io.airbyte.server.apis.ConfigurationApi.lambda$checkConnectionToSourceForUpdate$23(ConfigurationApi.java:375)",
"\tat io.airbyte.server.apis.ConfigurationApi.execute(ConfigurationApi.java:679)",
"\t... 53 more"
],
"rootCauseExceptionClassName": "java.lang.Class",
"rootCauseExceptionStack": [
"io.airbyte.validation.json.JsonValidationException: json schema validation failed when comparing the data to the json schema. ",
"Errors: $.end_date: does not match the regex pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$, $.end_date: is an invalid date-time ",
"Schema: ",
"{",
" \"type\" : \"object\",",
" \"title\" : \"Source Facebook Marketing\",",
" \"required\" : [ \"account_id\", \"access_token\", \"start_date\" ],",
" \"properties\" : {",
" \"end_date\" : {",
" \"type\" : \"string\",",
" \"title\" : \"End Date\",",
" \"format\" : \"date-time\",",
" \"pattern\" : \"^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$\",",
" \"examples\" : [ \"2017-01-26T00:00:00Z\" ],",
" \"description\" : \"The date until which you'd like to replicate data for AdCreatives and AdInsights APIs, in the format YYYY-MM-DDT00:00:00Z. All data generated between start_date and this date will be replicated. Not setting this option will result in always syncing the latest data.\"",
" },",
" \"account_id\" : {",
" \"type\" : \"string\",",
" \"title\" : \"Account Id\",",
" \"description\" : \"The Facebook Ad account ID to use when pulling data from the Facebook Marketing API.\"",
" },",
" \"start_date\" : {",
" \"type\" : \"string\",",
" \"title\" : \"Start Date\",",
" \"format\" : \"date-time\",",
" \"pattern\" : \"^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$\",",
" \"examples\" : [ \"2017-01-25T00:00:00Z\" ],",
" \"description\" : \"The date from which you'd like to replicate data for AdCreatives and AdInsights APIs, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.\"",
" },",
" \"access_token\" : {",
" \"type\" : \"string\",",
" \"title\" : \"Access Token\",",
" \"description\" : \"The value of the access token generated. See the <a href=\\\"https://docs.airbyte.io/integrations/sources/facebook-marketing\\\">docs</a> for more information\",",
" \"airbyte_secret\" : true",
" },",
" \"custom_insights\" : {",
" \"type\" : \"array\",",
" \"items\" : {",
" \"type\" : \"object\",",
" \"title\" : \"InsightConfig\",",
" \"required\" : [ \"name\" ],",
" \"properties\" : {",
" \"name\" : {",
" \"type\" : \"string\",",
" \"title\" : \"Name\",",
" \"description\" : \"The name value of insight\"",
" },",
" \"fields\" : {",
" \"type\" : \"array\",",
" \"items\" : {",
" \"type\" : \"string\"",
" },",
" \"title\" : \"Fields\",",
" \"default\" : [ ],",
" \"description\" : \"A list of chosen fields for fields parameter\"",
" },",
" \"breakdowns\" : {",
" \"type\" : \"array\",",
" \"items\" : {",
" \"type\" : \"string\"",
" },",
" \"title\" : \"Breakdowns\",",
" \"default\" : [ ],",
" \"description\" : \"A list of chosen breakdowns for breakdowns\"",
" },",
" \"action_breakdowns\" : {",
" \"type\" : \"array\",",
" \"items\" : {",
" \"type\" : \"string\"",
" },",
" \"title\" : \"Action Breakdowns\",",
" \"default\" : [ ],",
" \"description\" : \"A list of chosen action_breakdowns for action_breakdowns\"",
" }",
" }",
" },",
" \"title\" : \"Custom Insights\",",
" \"description\" : \"A list wich contains insights entries, each entry must have a name and can contains fields, breakdowns or action_breakdowns)\"",
" },",
" \"include_deleted\" : {",
" \"type\" : \"boolean\",",
" \"title\" : \"Include Deleted\",",
" \"default\" : false,",
" \"description\" : \"Include data from deleted campaigns, ads, and adsets.\"",
" },",
" \"insights_days_per_job\" : {",
" \"type\" : \"integer\",",
" \"title\" : \"Insights Days Per Job\",",
" \"default\" : 7,",
" \"maximum\" : 30,",
" \"minimum\" : 1,",
" \"description\" : \"Number of days to sync in one job. The more data you have - the smaller you want this parameter to be.\"",
" },",
" \"insights_lookback_window\" : {",
" \"type\" : \"integer\",",
" \"title\" : \"Insights Lookback Window\",",
" \"default\" : 28,",
" \"maximum\" : 28,",
" \"minimum\" : 0,",
" \"description\" : \"The attribution window for the actions\"",
" }",
" },",
" \"definitions\" : {",
" \"InsightConfig\" : {",
" \"type\" : \"object\",",
" \"title\" : \"InsightConfig\",",
" \"required\" : [ \"name\" ],",
" \"properties\" : {",
" \"name\" : {",
" \"type\" : \"string\",",
" \"title\" : \"Name\",",
" \"description\" : \"The name value of insight\"",
" },",
" \"fields\" : {",
" \"type\" : \"array\",",
" \"items\" : {",
" \"type\" : \"string\"",
" },",
" \"title\" : \"Fields\",",
" \"default\" : [ ],",
" \"description\" : \"A list of chosen fields for fields parameter\"",
" },",
" \"breakdowns\" : {",
" \"type\" : \"array\",",
" \"items\" : {",
" \"type\" : \"string\"",
" },",
" \"title\" : \"Breakdowns\",",
" \"default\" : [ ],",
" \"description\" : \"A list of chosen breakdowns for breakdowns\"",
" },",
" \"action_breakdowns\" : {",
" \"type\" : \"array\",",
" \"items\" : {",
" \"type\" : \"string\"",
" },",
" \"title\" : \"Action Breakdowns\",",
" \"default\" : [ ],",
" \"description\" : \"A list of chosen action_breakdowns for action_breakdowns\"",
" }",
" }",
" }",
" }",
"}",
"\tat io.airbyte.validation.json.JsonSchemaValidator.ensure(JsonSchemaValidator.java:68)",
"\tat io.airbyte.server.handlers.SchedulerHandler.checkSourceConnectionFromSourceIdForUpdate(SchedulerHandler.java:172)",
"\tat io.airbyte.server.apis.ConfigurationApi.lambda$checkConnectionToSourceForUpdate$23(ConfigurationApi.java:375)",
"\tat io.airbyte.server.apis.ConfigurationApi.execute(ConfigurationApi.java:679)",
"\tat io.airbyte.server.apis.ConfigurationApi.checkConnectionToSourceForUpdate(ConfigurationApi.java:375)",
"\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
"\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)",
"\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
"\tat java.base/java.lang.reflect.Method.invoke(Method.java:564)",
"\tat org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52)",
"\tat org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:124)",
"\tat org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:167)",
"\tat org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:219)",
"\tat org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:79)",
"\tat org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:469)",
"\tat org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:391)",
"\tat org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:80)",
"\tat org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:253)",
"\tat org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)",
"\tat org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)",
"\tat org.glassfish.jersey.internal.Errors.process(Errors.java:292)",
"\tat org.glassfish.jersey.internal.Errors.process(Errors.java:274)",
"\tat org.glassfish.jersey.internal.Errors.process(Errors.java:244)",
"\tat org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265)",
"\tat org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:232)",
"\tat org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:680)",
"\tat org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:394)",
"\tat org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)",
"\tat org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:366)",
"\tat org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:319)",
"\tat org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205)",
"\tat org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:763)",
"\tat org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:569)",
"\tat org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)",
"\tat org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1377)",
"\tat org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)",
"\tat org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:507)",
"\tat org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)",
"\tat org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1292)",
"\tat org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)",
"\tat org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)",
"\tat org.eclipse.jetty.server.Server.handle(Server.java:501)",
"\tat org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383)",
"\tat org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:556)",
"\tat org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375)",
"\tat org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:273)",
"\tat org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)",
"\tat org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)",
"\tat org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)",
"\tat org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)",
"\tat org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)",
"\tat org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)",
"\tat org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)",
"\tat org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:375)",
"\tat org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806)",
"\tat org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938)",
"\tat java.base/java.lang.Thread.run(Thread.java:832)"
]
}
</pre>
</details>
## Steps to Reproduce
Create a Facebook Marketing source (using integration test creds)
![image](https://user-images.githubusercontent.com/5154322/142251415-25d8d0d4-1667-4801-8498-27d1e226230f.png)
After try to remove the end date params
![image](https://user-images.githubusercontent.com/5154322/142252048-ee0f06db-cc7b-4416-86da-879312ea28d8.png)
## Are you willing to submit a PR?
<!---
We accept contributions!
Don't feel pressured, but if you want to contribute we can help you by giving some tips,
highlighting the necessary code change or explaining any relevant point your feature will impact.
You can also send questions on #dev Slack channel.
We understand if you can't submit a PR and we're tremendously grateful
that you've already contributed by suggesting a new feature.
-->
Remove this with your answer.