@celigo/api-specs 0.2.197 → 0.2.199

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/export.yml CHANGED
@@ -5926,12 +5926,22 @@ components:
5926
5926
  description: |-
5927
5927
  Change-data-capture configuration for real-time listener exports (the "Listen for real-time
5928
5928
  data" source step). Present only when `type` is `stream`. Set on `MongodbExport` (MongoDB change
5929
- streams) and `RDBMSExport` (SQL Server CDC and PostgreSQL logical replication); the listener
5930
- streams change events continuously instead of fetching records on a schedule.
5929
+ streams) and `RDBMSExport` (SQL Server CDC, PostgreSQL logical replication, and MySQL binary-log
5930
+ CDC); the listener streams change events continuously instead of fetching records on a schedule.
5931
5931
 
5932
5932
  On save the API normalizes the `properties` grid into the typed fields: a `snapshot.mode`
5933
5933
  entry populates `snapshotMode` and a `capture.mode` entry populates `captureMode`. Every
5934
5934
  stream export must resolve a snapshot mode from one of those two places.
5935
+
5936
+ The prerequisites live on the database, not on the export: a listener saves (201) on a
5937
+ connection whose database host is unreachable, so a successful save does not confirm them.
5938
+ The platform's listener documentation requires: for PostgreSQL, logical replication
5939
+ (`wal_level=logical`) and a replication-capable user; for SQL Server, CDC enabled on the
5940
+ database and tables; for MongoDB change streams, a replica set; for MySQL, binary logging in
5941
+ row format (`log_bin=ON`, `binlog_format=ROW`, `binlog_row_image=FULL`) and a connection user
5942
+ holding `REPLICATION SLAVE`, `REPLICATION CLIENT` and `SELECT` on the captured tables
5943
+ (`RELOAD` is not needed on Amazon RDS or Aurora, where the listener takes no global read
5944
+ lock).
5935
5945
  x-celigo-ai-guidance:
5936
5946
  - |-
5937
5947
  A stream export that resolves no snapshot mode — neither `snapshotMode` nor a
@@ -5950,7 +5960,13 @@ components:
5950
5960
  description: |-
5951
5961
  How MongoDB change-stream events are materialized into records. Use
5952
5962
  `change_streams_update_full_with_pre_image` when downstream steps need the document's prior
5953
- state. MongoDB listeners only — `RDBMSExport` (SQL Server CDC, PostgreSQL) does not set this.
5963
+ state. MongoDB listeners only — `RDBMSExport` (SQL Server CDC, PostgreSQL, MySQL) does not
5964
+ set this.
5965
+ x-celigo-ai-guidance:
5966
+ - |-
5967
+ Never author this on an `RDBMSExport`: the API stores it on a MySQL stream export without
5968
+ rejecting it (unlike `slotName`, it is not gated per adaptor), so nothing at save time
5969
+ catches the mistake and the dead setting rides on the document.
5954
5970
  examples:
5955
5971
  - change_streams_update_full
5956
5972
  - change_streams_update_full_with_pre_image
@@ -5968,13 +5984,17 @@ components:
5968
5984
  initial_only: Takes the initial snapshot and then stops, without streaming ongoing changes.
5969
5985
  default: no_data
5970
5986
  description: |-
5971
- Whether the listener seeds existing rows before streaming changes. Use `initial` to backfill
5972
- existing data on the first run; `no_data` to stream only new changes.
5987
+ Whether the listener seeds existing rows before streaming changes. `no_data` streams only
5988
+ new changes; `initial` backfills existing data on the first run where the listener form
5989
+ offers it (MongoDB, SQL Server). The PostgreSQL and MySQL forms offer `no_data` and
5990
+ `when_needed` only; the MySQL listener documentation describes `when_needed` as a one-time
5991
+ read of the captured tables when no stream position is stored or the stored position is no
5992
+ longer on the server.
5973
5993
  x-celigo-ai-guidance:
5974
5994
  - |-
5975
- The PostgreSQL listener form offers only `no_data` and `when_needed`. The API stores other
5976
- values on a PostgreSQL export without rejecting them, but they are outside the supported
5977
- PostgreSQL matrix — stay within the form's subset.
5995
+ The PostgreSQL and MySQL listener forms offer only `no_data` and `when_needed`. The API
5996
+ stores other values on those exports without rejecting them, but they are outside the
5997
+ supported matrix — stay within the form's subset.
5978
5998
  examples:
5979
5999
  - initial
5980
6000
  - no_data
@@ -5989,8 +6009,9 @@ components:
5989
6009
  underscore).
5990
6010
  x-celigo-ai-guidance:
5991
6011
  - |-
5992
- PostgreSQL connections only: on any other connection the save is rejected 422
5993
- `not_allowed` ("CDC slotName can only be used with postgresql adaptor type").
6012
+ PostgreSQL connections only: on any other connection — SQL Server, MySQL — the save is
6013
+ rejected 422 `not_allowed` ("CDC slotName can only be used with postgresql adaptor type").
6014
+ MySQL CDC reads the binary log directly; it has no replication slot.
5994
6015
  - |-
5995
6016
  The identifier pattern is enforced server-side — an invalid name (uppercase, dashes) is
5996
6017
  rejected 422 `invalid_field_value` at save time.
@@ -6010,17 +6031,27 @@ components:
6010
6031
  sent, so nothing catches the ambiguity at save time — the exclusivity is the listener
6011
6032
  form's rule (publication wins as the sole table filter).
6012
6033
  - |-
6013
- PostgreSQL connections only: rejected 422 `not_allowed` on other connections, and the
6014
- identifier pattern is enforced server-side like `slotName`.
6034
+ PostgreSQL connections only: rejected 422 `not_allowed` on other connections (SQL Server,
6035
+ MySQL — "CDC publicationName can only be used with postgresql adaptor type"), and the
6036
+ identifier pattern is enforced server-side like `slotName`. A MySQL listener scopes
6037
+ tables only through `rdbms.tables` and the include / exclude `properties`.
6038
+ - |-
6039
+ On a PostgreSQL connection one of this field or `rdbms.tables` must be present: a stream
6040
+ export carrying neither is rejected 422 `missing_required_field` on both paths
6041
+ ("publicationName is required when tables is not provided." / "tables is required when
6042
+ publicationName is not provided."). SQL Server and MySQL listeners save without either.
6015
6043
  examples:
6016
6044
  - celigo_pub
6017
6045
  - orders_publication
6018
6046
  cursor:
6019
6047
  type: string
6020
6048
  description: |-
6021
- Server-managed stream position marker (where the listener resumes reading change events).
6049
+ Server-managed stream position marker (where the listener resumes reading change events;
6050
+ the MySQL listener documentation describes it as the binlog file and position last saved).
6022
6051
  Maintained by the platform as events are consumed; the UI exposes a reset workflow for it
6023
- under Cursor Management.
6052
+ under Cursor Management, which appears once a cursor exists. The form's reset is a full save that omits `cursor` and carries the
6053
+ top-level request flag `pendingCursorReset: true`; the API accepts the flag and does not
6054
+ store it on the document.
6024
6055
  x-celigo-ai-guidance:
6025
6056
  - Never author or modify this field — the platform owns the stream position.
6026
6057
  paths:
@@ -6029,17 +6060,33 @@ components:
6029
6060
  type: string
6030
6061
  description: |-
6031
6062
  Dot-notation paths within each raw change event to retain in the emitted record. MongoDB
6032
- listeners default to `["payload"]` (the whole change document); SQL Server and PostgreSQL
6033
- listeners commonly select `payload.after`, `payload.op`, and related fields to expose the
6034
- changed row and operation type.
6063
+ listeners default to `["payload"]` (the whole change document); SQL Server, PostgreSQL and
6064
+ MySQL listeners commonly select `payload.after`, `payload.op`, and related fields to expose
6065
+ the changed row and operation type. The MySQL listener form offers `payload.after`,
6066
+ `payload.before`, `schema`, `payload.source`, `payload.op`, `payload.transaction`,
6067
+ `payload.ts_ms`, `payload.ts_us` and `payload.ts_ns`, preselecting `payload.after`; it has
6068
+ no `updateDescription`-derived options and no `payload.id`. The MySQL listener
6069
+ documentation describes `after` as the row after the change (empty on a delete), `before`
6070
+ as the row before an update or delete (needs `binlog_row_image=FULL`), `op` as `c` / `u` /
6071
+ `d` / `r` (insert / update / delete / snapshot read) and `source` as the database, table,
6072
+ binlog file and position.
6035
6073
  examples:
6036
6074
  - - payload
6037
6075
  - - payload.after
6038
6076
  - payload.op
6077
+ - - payload.after
6078
+ - payload.before
6079
+ - payload.op
6039
6080
  intervalTime:
6040
6081
  type: integer
6041
6082
  default: 300
6042
- description: Polling interval, in seconds, at which the listener checks the source for new change events.
6083
+ minimum: 30
6084
+ x-celigo-ui-override: The minimum mirrors the listener forms, which label this field Max wait time and reject a value under 30 ("Max wait time must be at least 30 seconds."); the API itself stores a lower value.
6085
+ description: |-
6086
+ Interval, in seconds, that bounds how long the listener holds change events before sending
6087
+ a page downstream. The listener forms label it Max wait time, and the platform's listener
6088
+ documentation describes it as the longest a page waits when fewer than `pageSize` events
6089
+ have arrived — a full page is sent as soon as it fills.
6043
6090
  examples:
6044
6091
  - 300
6045
6092
  - 30
@@ -6048,11 +6095,25 @@ components:
6048
6095
  description: |-
6049
6096
  Connector-engine settings passed through to the underlying CDC connector as name/value
6050
6097
  pairs. Mirrors the form's additional-properties grid: the required keys (`capture.mode`
6051
- and `snapshot.mode` for MongoDB, `snapshot.mode` for SQL Server and PostgreSQL) are
6098
+ and `snapshot.mode` for MongoDB, `snapshot.mode` for SQL Server, PostgreSQL and MySQL) are
6052
6099
  serialized first, followed by optional keys such as `field.exclude.list`,
6053
6100
  `column.include.list`, or `snapshot.collection.filter.overrides.<db>.<collection>`.
6054
6101
  On save the API also lifts `snapshot.mode` / `capture.mode` entries into the typed
6055
6102
  `snapshotMode` / `captureMode` fields.
6103
+
6104
+ The MySQL listener form offers six keys: `snapshot.mode` (preselected `no_data`) and five
6105
+ optional comma-separated regular-expression lists — `table.exclude.list` (matched on
6106
+ `database.table`), `database.include.list`, `database.exclude.list`,
6107
+ `column.include.list` and `column.exclude.list` (matched on `database.table.column`).
6108
+ MySQL has no schema layer, so there are no `schema.include.list` / `schema.exclude.list`
6109
+ keys, and the MongoDB keys (`capture.mode`, `collection.exclude.list`,
6110
+ `field.exclude.list`) do not apply. The MySQL listener documentation describes a blank
6111
+ watch list as every table the connection's user can read, trimmed by `table.exclude.list`.
6112
+ x-celigo-ai-guidance:
6113
+ - |-
6114
+ The API persists any key sent here without validating it against the connector, so a
6115
+ MongoDB or PostgreSQL key on a MySQL listener saves cleanly and does nothing — author only
6116
+ the keys the listener's form offers.
6056
6117
  items:
6057
6118
  type: object
6058
6119
  required:
@@ -11977,8 +12038,8 @@ components:
11977
12038
  for other connection types. For query-type exports (standard, delta, once) it is REQUIRED
11978
12039
  when the _connectionId field references an RDBMS database connection and holds the SQL
11979
12040
  query. For real-time stream listeners (`type: "stream"`) it holds the CDC watch list
11980
- (`tables`) instead — and a PostgreSQL listener scoped by a publication
11981
- (`cdc.publicationName`) may omit this object entirely.
12041
+ (`tables`) instead — and a SQL Server or MySQL listener with no watch list, or a PostgreSQL
12042
+ listener scoped by a publication (`cdc.publicationName`), may omit this object entirely.
11982
12043
 
11983
12044
  **Rdbms export capabilities**
11984
12045
  - Execute custom SQL SELECT statements
@@ -12032,8 +12093,8 @@ components:
12032
12093
  ```
12033
12094
 
12034
12095
  **Real-time CDC listener exports (type: "stream")**
12035
- SQL Server and PostgreSQL connections support change-data-capture listeners that stream row
12036
- changes continuously (the `cdc` object holds the listener settings). A stream export has NO
12096
+ SQL Server, PostgreSQL and MySQL connections support change-data-capture listeners that stream
12097
+ row changes continuously (the `cdc` object holds the listener settings). A stream export has NO
12037
12098
  `query` — it watches `tables`:
12038
12099
  ```json
12039
12100
  {
@@ -12042,9 +12103,26 @@ components:
12042
12103
  "cdc": { "properties": [{ "name": "snapshot.mode", "value": "no_data" }] }
12043
12104
  }
12044
12105
  ```
12106
+ A MySQL listener names its tables as `database.table` (MySQL has no schema layer):
12107
+ ```json
12108
+ {
12109
+ "type": "stream",
12110
+ "rdbms": { "tables": "sales.orders,sales.order_lines" },
12111
+ "cdc": {
12112
+ "properties": [{ "name": "snapshot.mode", "value": "no_data" }],
12113
+ "paths": ["payload.after", "payload.op"]
12114
+ }
12115
+ }
12116
+ ```
12045
12117
  A PostgreSQL listener can instead scope tables through a publication
12046
12118
  (`cdc.publicationName`), in which case `tables` stays unset and the `rdbms` object may be
12047
- omitted entirely.
12119
+ omitted entirely; on PostgreSQL one of the two must be present. SQL Server and MySQL
12120
+ listeners save with no `tables` and no `rdbms` object at all (a blank `tables` string is
12121
+ dropped on save); the MySQL listener documentation describes that as every table the
12122
+ connection's user can read, trimmed by the `table.exclude.list` property.
12123
+ `POST /v1/exports/preview` rejects a stream export both with `rdbms.tables` sent and with
12124
+ no `rdbms` object at all, with the same 422 `missing_required_field` ("rdbms subschema not
12125
+ defined") — listeners have no preview.
12048
12126
  properties:
12049
12127
  tables:
12050
12128
  type: string
@@ -12052,16 +12130,26 @@ components:
12052
12130
  Comma-separated list of tables the CDC listener watches for changes. Used only by real-time
12053
12131
  listener exports (`type` is `stream`); standard SQL exports use `query` instead. SQL Server
12054
12132
  listeners use fully-qualified three-part names (`database.schema.table`); PostgreSQL
12055
- listeners use two-part names (`schema.table`).
12133
+ listeners use two-part names (`schema.table`); MySQL listeners use two-part
12134
+ `database.table` names, since MySQL has no schema layer between the database and the
12135
+ table. A PostgreSQL listener must carry this field or `cdc.publicationName`; SQL Server
12136
+ and MySQL listeners may leave it out (for MySQL the listener documentation describes that
12137
+ as every table the connection's user can read, trimmed by `table.exclude.list`).
12056
12138
  x-celigo-ai-guidance:
12057
12139
  - |-
12058
12140
  For a PostgreSQL listener, author EITHER this field OR `cdc.publicationName`, never both —
12059
12141
  when a publication is set it is the sole table filter and the listener form clears this
12060
12142
  field (the API stores both if sent, so nothing catches the conflict at save time).
12143
+ - |-
12144
+ The API does not validate the names against the engine — a three-part name on a MySQL
12145
+ listener saves cleanly — so nothing at save time catches the wrong form. Use the engine's
12146
+ own: `database.table` on MySQL, `schema.table` on PostgreSQL, `database.schema.table` on
12147
+ SQL Server.
12061
12148
  examples:
12062
12149
  - UKGODS.dbo.UKG_MetadataStaging
12063
12150
  - dbo.WorkOrderT,dbo.OrderLineT
12064
12151
  - public.orders,public.customers
12152
+ - sales.orders,sales.order_lines
12065
12153
  query:
12066
12154
  type: string
12067
12155
  x-celigo-agent:
@@ -12891,28 +12979,51 @@ components:
12891
12979
 
12892
12980
  Explicit JSON `null` is itself a valid fallback: the destination field is written as
12893
12981
  JSON null when the extract yields nothing (the Mapper UI's "Use null as default value"
12894
- action). Omitting the key entirely means no fallback — the field is left out of the
12895
- output when the extract is missing or an empty string (the UI's "Do nothing" action),
12896
- while a null source is still written as null unless `conditional.when` is
12897
- `extract_not_empty`. Failing the record instead is `conditional.when:
12898
- fail_record_when_empty`, which excludes a default.
12982
+ action). Outside the database and csv / xlsx file imports described below, omitting the
12983
+ key means no fallback — the field is left out of the output when the extract is missing
12984
+ or an empty string (the UI's "Do nothing" action), while a null source is still written
12985
+ as null unless `conditional.when` is `extract_not_empty`. Failing the record instead is
12986
+ `conditional.when: fail_record_when_empty`, which excludes a default.
12987
+
12988
+ On database imports (rdbms, jdbc) and csv / xlsx file imports (such as ftp, or an HTTP
12989
+ import with a file-provider assistant or `http.type: file`; an HTTP import that sends
12990
+ records is not one), the save stores an omitted key as `null` on every row that has no
12991
+ `hardCodedValue`, no `lookupName` and no `extract_not_empty` / `fail_record_when_empty`
12992
+ conditional — the same default the Mapper UI preselects for those imports. The rule runs
12993
+ when the document is saved, on create and on update, so "Do nothing" on those imports is
12994
+ `conditional.when: extract_not_empty`, not an omitted key.
12899
12995
  x-celigo-ai-guidance:
12900
12996
  - |-
12901
12997
  `"default": null` and `"default": ""` are distinct saved values, not
12902
12998
  absent keys: null renders the destination field as JSON null and the
12903
12999
  empty string renders it as `""` when the extract yields nothing.
12904
- Preserve them verbatim when editing or migrating a mapping — dropping
12905
- the key changes runtime behavior from "use null/empty string as
12906
- default value" to "do nothing" (a missing or `""` source is left out
12907
- of the output, while a null source is written as null unless
12908
- `conditional.when` is `extract_not_empty`).
13000
+ Preserve them verbatim when editing or migrating a mapping. Outside
13001
+ the database / csv-xlsx file import set, dropping the key changes
13002
+ runtime behavior from "use null/empty string as default value" to "do
13003
+ nothing" (a missing or `""` source is left out of the output, while a
13004
+ null source is written as null unless `conditional.when` is
13005
+ `extract_not_empty`); inside that set the save writes a dropped key
13006
+ back as `"default": null`, so dropping a stored null changes nothing
13007
+ while dropping a stored `""` or any other explicit value replaces it
13008
+ with null.
12909
13009
  - |-
12910
13010
  The four "Action to take if source field has no value" choices map to:
12911
- do nothing → no `default` key (add `conditional.when:
12912
- extract_not_empty` to leave a null source out too; without it a null
12913
- source is written as null); use null → `"default": null`; use empty string or
12914
- a custom value → `"default": "<value>"`; cause the record to fail →
13011
+ do nothing → `conditional.when: extract_not_empty` with no `default` key
13012
+ (on imports outside the database / csv-xlsx file set the key may simply
13013
+ be omitted, but a null source is then still written as null); use null →
13014
+ `"default": null`; use empty string or a custom value →
13015
+ `"default": "<value>"`; cause the record to fail →
12915
13016
  `conditional.when: fail_record_when_empty` with no `default` key.
13017
+ - |-
13018
+ On a database or csv / xlsx file import, a row sent with neither a
13019
+ `default` nor one of those conditionals reads back with `"default": null`
13020
+ after the save — create or update — so the destination is written as
13021
+ null; never express "Do nothing" by omission there. A stored
13022
+ `"default": null` on such a row is this save-time default, not a user's
13023
+ choice; keep it when re-sending the row. `"default": null` sent together
13024
+ with `fail_record_when_empty` is rejected with 422 `unsupported_mapping`
13025
+ `"default" and conditional.when "fail_record_when_empty" cannot be
13026
+ present in mapping simultaneously.`
12916
13027
  examples:
12917
13028
  - N/A
12918
13029
  - '0'
@@ -13319,7 +13430,10 @@ components:
13319
13430
  not found in the input data.
13320
13431
 
13321
13432
  Explicit JSON `null` is itself a valid fallback (the element is written as
13322
- JSON null); omitting the key means no fallback is applied.
13433
+ JSON null); omitting the key means no fallback is applied — except on database
13434
+ and csv / xlsx file imports, where the save stores an omitted key as `null` on an
13435
+ entry without an `extract_not_empty` / `fail_record_when_empty` conditional, as it
13436
+ does on leaf rows.
13323
13437
  examples:
13324
13438
  - N/A
13325
13439
  - '0'
@@ -13989,28 +14103,51 @@ components:
13989
14103
 
13990
14104
  Explicit JSON `null` is itself a valid fallback: the destination field is written as
13991
14105
  JSON null when the extract yields nothing (the Mapper UI's "Use null as default value"
13992
- action). Omitting the key entirely means no fallback — the field is left out of the
13993
- output when the extract is missing or an empty string (the UI's "Do nothing" action),
13994
- while a null source is still written as null unless `conditional.when` is
13995
- `extract_not_empty`. Failing the record instead is `conditional.when:
13996
- fail_record_when_empty`, which excludes a default.
14106
+ action). Outside the database and csv / xlsx file imports described below, omitting the
14107
+ key means no fallback — the field is left out of the output when the extract is missing
14108
+ or an empty string (the UI's "Do nothing" action), while a null source is still written
14109
+ as null unless `conditional.when` is `extract_not_empty`. Failing the record instead is
14110
+ `conditional.when: fail_record_when_empty`, which excludes a default.
14111
+
14112
+ On database imports (rdbms, jdbc) and csv / xlsx file imports (such as ftp, or an HTTP
14113
+ import with a file-provider assistant or `http.type: file`; an HTTP import that sends
14114
+ records is not one), the save stores an omitted key as `null` on every row that has no
14115
+ `hardCodedValue`, no `lookupName` and no `extract_not_empty` / `fail_record_when_empty`
14116
+ conditional — the same default the Mapper UI preselects for those imports. The rule runs
14117
+ when the document is saved, on create and on update, so "Do nothing" on those imports is
14118
+ `conditional.when: extract_not_empty`, not an omitted key.
13997
14119
  x-celigo-ai-guidance:
13998
14120
  - |-
13999
14121
  `"default": null` and `"default": ""` are distinct saved values, not
14000
14122
  absent keys: null renders the destination field as JSON null and the
14001
14123
  empty string renders it as `""` when the extract yields nothing.
14002
- Preserve them verbatim when editing or migrating a mapping — dropping
14003
- the key changes runtime behavior from "use null/empty string as
14004
- default value" to "do nothing" (a missing or `""` source is left out
14005
- of the output, while a null source is written as null unless
14006
- `conditional.when` is `extract_not_empty`).
14124
+ Preserve them verbatim when editing or migrating a mapping. Outside
14125
+ the database / csv-xlsx file import set, dropping the key changes
14126
+ runtime behavior from "use null/empty string as default value" to "do
14127
+ nothing" (a missing or `""` source is left out of the output, while a
14128
+ null source is written as null unless `conditional.when` is
14129
+ `extract_not_empty`); inside that set the save writes a dropped key
14130
+ back as `"default": null`, so dropping a stored null changes nothing
14131
+ while dropping a stored `""` or any other explicit value replaces it
14132
+ with null.
14007
14133
  - |-
14008
14134
  The four "Action to take if source field has no value" choices map to:
14009
- do nothing → no `default` key (add `conditional.when:
14010
- extract_not_empty` to leave a null source out too; without it a null
14011
- source is written as null); use null → `"default": null`; use empty string or
14012
- a custom value → `"default": "<value>"`; cause the record to fail →
14135
+ do nothing → `conditional.when: extract_not_empty` with no `default` key
14136
+ (on imports outside the database / csv-xlsx file set the key may simply
14137
+ be omitted, but a null source is then still written as null); use null →
14138
+ `"default": null`; use empty string or a custom value →
14139
+ `"default": "<value>"`; cause the record to fail →
14013
14140
  `conditional.when: fail_record_when_empty` with no `default` key.
14141
+ - |-
14142
+ On a database or csv / xlsx file import, a row sent with neither a
14143
+ `default` nor one of those conditionals reads back with `"default": null`
14144
+ after the save — create or update — so the destination is written as
14145
+ null; never express "Do nothing" by omission there. A stored
14146
+ `"default": null` on such a row is this save-time default, not a user's
14147
+ choice; keep it when re-sending the row. `"default": null` sent together
14148
+ with `fail_record_when_empty` is rejected with 422 `unsupported_mapping`
14149
+ `"default" and conditional.when "fail_record_when_empty" cannot be
14150
+ present in mapping simultaneously.`
14014
14151
  examples:
14015
14152
  - N/A
14016
14153
  - '0'
@@ -14417,7 +14554,10 @@ components:
14417
14554
  not found in the input data.
14418
14555
 
14419
14556
  Explicit JSON `null` is itself a valid fallback (the element is written as
14420
- JSON null); omitting the key means no fallback is applied.
14557
+ JSON null); omitting the key means no fallback is applied — except on database
14558
+ and csv / xlsx file imports, where the save stores an omitted key as `null` on an
14559
+ entry without an `extract_not_empty` / `fail_record_when_empty` conditional, as it
14560
+ does on leaf rows.
14421
14561
  examples:
14422
14562
  - N/A
14423
14563
  - '0'
@@ -16575,8 +16715,8 @@ components:
16575
16715
  - **Listen for inbound events from NetSuite or Salesforce**
16576
16716
  -> `distributed`
16577
16717
  - **Stream database changes in real time as they happen**
16578
- (change data capture from MongoDB, SQL Server, or
16579
- PostgreSQL — "when a row changes", "listen to my table")
16718
+ (change data capture from MongoDB, SQL Server, PostgreSQL
16719
+ or MySQL — "when a row changes", "listen to my table")
16580
16720
  -> `stream`, configured via the `cdc` object
16581
16721
  - **Subscribe to an Event Streams topic** ("listen to topic X",
16582
16722
  "consume messages published to …") -> `stream` with
@@ -16600,8 +16740,8 @@ components:
16600
16740
  delta config is a separate concern that scopes how you fill in
16601
16741
  the chosen config, not whether to use it.
16602
16742
  - |-
16603
- `stream` is accepted only on MongoDB and RDBMS exports (SQL Server
16604
- or PostgreSQL connections) and on Event Streams listeners
16743
+ `stream` is accepted only on MongoDB and RDBMS exports (SQL Server,
16744
+ PostgreSQL or MySQL connections) and on Event Streams listeners
16605
16745
  (`adaptorType: TopicExport`); every other adaptor rejects the save
16606
16746
  with `unsupported_export_type`. A MongoDB or RDBMS stream export
16607
16747
  must carry `cdc.snapshotMode` (and `cdc.captureMode` on MongoDB) —
@@ -16626,7 +16766,7 @@ components:
16626
16766
  simple: Allows manual file uploads through the data loader UI.
16627
16767
  blob: Retrieves raw files without parsing them into structured data records.
16628
16768
  distributed: Listens for real-time events from NetSuite or Salesforce.
16629
- stream: Streams events in real time — database change data capture (MongoDB change streams, SQL Server CDC, PostgreSQL logical replication) configured through the `cdc` object, or an Event Streams topic subscription (`TopicExport`) configured through `topic`.
16769
+ stream: Streams events in real time — database change data capture (MongoDB change streams, SQL Server CDC, PostgreSQL logical replication, MySQL binary log) configured through the `cdc` object, or an Event Streams topic subscription (`TopicExport`) configured through `topic`.
16630
16770
  all: Explicitly retrieves all available records — equivalent to omitting `type`.
16631
16771
  examples:
16632
16772
  - webhook
@@ -16753,6 +16893,21 @@ components:
16753
16893
  $ref: '#/components/schemas/Distributed'
16754
16894
  cdc:
16755
16895
  $ref: '#/components/schemas/Cdc'
16896
+ pendingCursorReset:
16897
+ type: boolean
16898
+ writeOnly: true
16899
+ description: |-
16900
+ When true on a save of a stream listener, requests a reset of the listener's stored stream
16901
+ position — the Cursor Management reset the listener form sends, with `cdc.cursor` omitted
16902
+ from the same document; the listener documentation describes the save as clearing the
16903
+ stored cursor and restarting the listener. Accepted on the request and not stored on the
16904
+ export.
16905
+ x-celigo-ai-guidance:
16906
+ - |-
16907
+ Never author this flag — like `cdc.cursor`, the stream position is the platform's, and
16908
+ the reset is the listener form's Cursor Management action. The API accepts it silently
16909
+ (200) and the readback carries no trace that it was sent, so a save that carried it by
16910
+ mistake cannot be seen afterwards on the export.
16756
16911
  topic:
16757
16912
  $ref: '#/components/schemas/Topic'
16758
16913
  filesystem:
@@ -17547,8 +17702,18 @@ components:
17547
17702
  required:
17548
17703
  - adaptorType
17549
17704
  then:
17550
- required:
17551
- - rdbms
17705
+ if:
17706
+ properties:
17707
+ type:
17708
+ const: stream
17709
+ required:
17710
+ - type
17711
+ then:
17712
+ required:
17713
+ - cdc
17714
+ else:
17715
+ required:
17716
+ - rdbms
17552
17717
  else:
17553
17718
  if:
17554
17719
  properties: