@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/import.yml CHANGED
@@ -13177,28 +13177,51 @@ components:
13177
13177
 
13178
13178
  Explicit JSON `null` is itself a valid fallback: the destination field is written as
13179
13179
  JSON null when the extract yields nothing (the Mapper UI's "Use null as default value"
13180
- action). Omitting the key entirely means no fallback — the field is left out of the
13181
- output when the extract is missing or an empty string (the UI's "Do nothing" action),
13182
- while a null source is still written as null unless `conditional.when` is
13183
- `extract_not_empty`. Failing the record instead is `conditional.when:
13184
- fail_record_when_empty`, which excludes a default.
13180
+ action). Outside the database and csv / xlsx file imports described below, omitting the
13181
+ key means no fallback — the field is left out of the output when the extract is missing
13182
+ or an empty string (the UI's "Do nothing" action), while a null source is still written
13183
+ as null unless `conditional.when` is `extract_not_empty`. Failing the record instead is
13184
+ `conditional.when: fail_record_when_empty`, which excludes a default.
13185
+
13186
+ On database imports (rdbms, jdbc) and csv / xlsx file imports (such as ftp, or an HTTP
13187
+ import with a file-provider assistant or `http.type: file`; an HTTP import that sends
13188
+ records is not one), the save stores an omitted key as `null` on every row that has no
13189
+ `hardCodedValue`, no `lookupName` and no `extract_not_empty` / `fail_record_when_empty`
13190
+ conditional — the same default the Mapper UI preselects for those imports. The rule runs
13191
+ when the document is saved, on create and on update, so "Do nothing" on those imports is
13192
+ `conditional.when: extract_not_empty`, not an omitted key.
13185
13193
  x-celigo-ai-guidance:
13186
13194
  - |-
13187
13195
  `"default": null` and `"default": ""` are distinct saved values, not
13188
13196
  absent keys: null renders the destination field as JSON null and the
13189
13197
  empty string renders it as `""` when the extract yields nothing.
13190
- Preserve them verbatim when editing or migrating a mapping — dropping
13191
- the key changes runtime behavior from "use null/empty string as
13192
- default value" to "do nothing" (a missing or `""` source is left out
13193
- of the output, while a null source is written as null unless
13194
- `conditional.when` is `extract_not_empty`).
13198
+ Preserve them verbatim when editing or migrating a mapping. Outside
13199
+ the database / csv-xlsx file import set, dropping the key changes
13200
+ runtime behavior from "use null/empty string as default value" to "do
13201
+ nothing" (a missing or `""` source is left out of the output, while a
13202
+ null source is written as null unless `conditional.when` is
13203
+ `extract_not_empty`); inside that set the save writes a dropped key
13204
+ back as `"default": null`, so dropping a stored null changes nothing
13205
+ while dropping a stored `""` or any other explicit value replaces it
13206
+ with null.
13195
13207
  - |-
13196
13208
  The four "Action to take if source field has no value" choices map to:
13197
- do nothing → no `default` key (add `conditional.when:
13198
- extract_not_empty` to leave a null source out too; without it a null
13199
- source is written as null); use null → `"default": null`; use empty string or
13200
- a custom value → `"default": "<value>"`; cause the record to fail →
13209
+ do nothing → `conditional.when: extract_not_empty` with no `default` key
13210
+ (on imports outside the database / csv-xlsx file set the key may simply
13211
+ be omitted, but a null source is then still written as null); use null →
13212
+ `"default": null`; use empty string or a custom value →
13213
+ `"default": "<value>"`; cause the record to fail →
13201
13214
  `conditional.when: fail_record_when_empty` with no `default` key.
13215
+ - |-
13216
+ On a database or csv / xlsx file import, a row sent with neither a
13217
+ `default` nor one of those conditionals reads back with `"default": null`
13218
+ after the save — create or update — so the destination is written as
13219
+ null; never express "Do nothing" by omission there. A stored
13220
+ `"default": null` on such a row is this save-time default, not a user's
13221
+ choice; keep it when re-sending the row. `"default": null` sent together
13222
+ with `fail_record_when_empty` is rejected with 422 `unsupported_mapping`
13223
+ `"default" and conditional.when "fail_record_when_empty" cannot be
13224
+ present in mapping simultaneously.`
13202
13225
  examples:
13203
13226
  - N/A
13204
13227
  - '0'
@@ -13605,7 +13628,10 @@ components:
13605
13628
  not found in the input data.
13606
13629
 
13607
13630
  Explicit JSON `null` is itself a valid fallback (the element is written as
13608
- JSON null); omitting the key means no fallback is applied.
13631
+ JSON null); omitting the key means no fallback is applied — except on database
13632
+ and csv / xlsx file imports, where the save stores an omitted key as `null` on an
13633
+ entry without an `extract_not_empty` / `fail_record_when_empty` conditional, as it
13634
+ does on leaf rows.
13609
13635
  examples:
13610
13636
  - N/A
13611
13637
  - '0'
@@ -14275,28 +14301,51 @@ components:
14275
14301
 
14276
14302
  Explicit JSON `null` is itself a valid fallback: the destination field is written as
14277
14303
  JSON null when the extract yields nothing (the Mapper UI's "Use null as default value"
14278
- action). Omitting the key entirely means no fallback — the field is left out of the
14279
- output when the extract is missing or an empty string (the UI's "Do nothing" action),
14280
- while a null source is still written as null unless `conditional.when` is
14281
- `extract_not_empty`. Failing the record instead is `conditional.when:
14282
- fail_record_when_empty`, which excludes a default.
14304
+ action). Outside the database and csv / xlsx file imports described below, omitting the
14305
+ key means no fallback — the field is left out of the output when the extract is missing
14306
+ or an empty string (the UI's "Do nothing" action), while a null source is still written
14307
+ as null unless `conditional.when` is `extract_not_empty`. Failing the record instead is
14308
+ `conditional.when: fail_record_when_empty`, which excludes a default.
14309
+
14310
+ On database imports (rdbms, jdbc) and csv / xlsx file imports (such as ftp, or an HTTP
14311
+ import with a file-provider assistant or `http.type: file`; an HTTP import that sends
14312
+ records is not one), the save stores an omitted key as `null` on every row that has no
14313
+ `hardCodedValue`, no `lookupName` and no `extract_not_empty` / `fail_record_when_empty`
14314
+ conditional — the same default the Mapper UI preselects for those imports. The rule runs
14315
+ when the document is saved, on create and on update, so "Do nothing" on those imports is
14316
+ `conditional.when: extract_not_empty`, not an omitted key.
14283
14317
  x-celigo-ai-guidance:
14284
14318
  - |-
14285
14319
  `"default": null` and `"default": ""` are distinct saved values, not
14286
14320
  absent keys: null renders the destination field as JSON null and the
14287
14321
  empty string renders it as `""` when the extract yields nothing.
14288
- Preserve them verbatim when editing or migrating a mapping — dropping
14289
- the key changes runtime behavior from "use null/empty string as
14290
- default value" to "do nothing" (a missing or `""` source is left out
14291
- of the output, while a null source is written as null unless
14292
- `conditional.when` is `extract_not_empty`).
14322
+ Preserve them verbatim when editing or migrating a mapping. Outside
14323
+ the database / csv-xlsx file import set, dropping the key changes
14324
+ runtime behavior from "use null/empty string as default value" to "do
14325
+ nothing" (a missing or `""` source is left out of the output, while a
14326
+ null source is written as null unless `conditional.when` is
14327
+ `extract_not_empty`); inside that set the save writes a dropped key
14328
+ back as `"default": null`, so dropping a stored null changes nothing
14329
+ while dropping a stored `""` or any other explicit value replaces it
14330
+ with null.
14293
14331
  - |-
14294
14332
  The four "Action to take if source field has no value" choices map to:
14295
- do nothing → no `default` key (add `conditional.when:
14296
- extract_not_empty` to leave a null source out too; without it a null
14297
- source is written as null); use null → `"default": null`; use empty string or
14298
- a custom value → `"default": "<value>"`; cause the record to fail →
14333
+ do nothing → `conditional.when: extract_not_empty` with no `default` key
14334
+ (on imports outside the database / csv-xlsx file set the key may simply
14335
+ be omitted, but a null source is then still written as null); use null →
14336
+ `"default": null`; use empty string or a custom value →
14337
+ `"default": "<value>"`; cause the record to fail →
14299
14338
  `conditional.when: fail_record_when_empty` with no `default` key.
14339
+ - |-
14340
+ On a database or csv / xlsx file import, a row sent with neither a
14341
+ `default` nor one of those conditionals reads back with `"default": null`
14342
+ after the save — create or update — so the destination is written as
14343
+ null; never express "Do nothing" by omission there. A stored
14344
+ `"default": null` on such a row is this save-time default, not a user's
14345
+ choice; keep it when re-sending the row. `"default": null` sent together
14346
+ with `fail_record_when_empty` is rejected with 422 `unsupported_mapping`
14347
+ `"default" and conditional.when "fail_record_when_empty" cannot be
14348
+ present in mapping simultaneously.`
14300
14349
  examples:
14301
14350
  - N/A
14302
14351
  - '0'
@@ -14703,7 +14752,10 @@ components:
14703
14752
  not found in the input data.
14704
14753
 
14705
14754
  Explicit JSON `null` is itself a valid fallback (the element is written as
14706
- JSON null); omitting the key means no fallback is applied.
14755
+ JSON null); omitting the key means no fallback is applied — except on database
14756
+ and csv / xlsx file imports, where the save stores an omitted key as `null` on an
14757
+ entry without an `extract_not_empty` / `fail_record_when_empty` conditional, as it
14758
+ does on leaf rows.
14707
14759
  examples:
14708
14760
  - N/A
14709
14761
  - '0'
package/dist/tool.yml CHANGED
@@ -3849,28 +3849,51 @@ components:
3849
3849
 
3850
3850
  Explicit JSON `null` is itself a valid fallback: the destination field is written as
3851
3851
  JSON null when the extract yields nothing (the Mapper UI's "Use null as default value"
3852
- action). Omitting the key entirely means no fallback — the field is left out of the
3853
- output when the extract is missing or an empty string (the UI's "Do nothing" action),
3854
- while a null source is still written as null unless `conditional.when` is
3855
- `extract_not_empty`. Failing the record instead is `conditional.when:
3856
- fail_record_when_empty`, which excludes a default.
3852
+ action). Outside the database and csv / xlsx file imports described below, omitting the
3853
+ key means no fallback — the field is left out of the output when the extract is missing
3854
+ or an empty string (the UI's "Do nothing" action), while a null source is still written
3855
+ as null unless `conditional.when` is `extract_not_empty`. Failing the record instead is
3856
+ `conditional.when: fail_record_when_empty`, which excludes a default.
3857
+
3858
+ On database imports (rdbms, jdbc) and csv / xlsx file imports (such as ftp, or an HTTP
3859
+ import with a file-provider assistant or `http.type: file`; an HTTP import that sends
3860
+ records is not one), the save stores an omitted key as `null` on every row that has no
3861
+ `hardCodedValue`, no `lookupName` and no `extract_not_empty` / `fail_record_when_empty`
3862
+ conditional — the same default the Mapper UI preselects for those imports. The rule runs
3863
+ when the document is saved, on create and on update, so "Do nothing" on those imports is
3864
+ `conditional.when: extract_not_empty`, not an omitted key.
3857
3865
  x-celigo-ai-guidance:
3858
3866
  - |-
3859
3867
  `"default": null` and `"default": ""` are distinct saved values, not
3860
3868
  absent keys: null renders the destination field as JSON null and the
3861
3869
  empty string renders it as `""` when the extract yields nothing.
3862
- Preserve them verbatim when editing or migrating a mapping — dropping
3863
- the key changes runtime behavior from "use null/empty string as
3864
- default value" to "do nothing" (a missing or `""` source is left out
3865
- of the output, while a null source is written as null unless
3866
- `conditional.when` is `extract_not_empty`).
3870
+ Preserve them verbatim when editing or migrating a mapping. Outside
3871
+ the database / csv-xlsx file import set, dropping the key changes
3872
+ runtime behavior from "use null/empty string as default value" to "do
3873
+ nothing" (a missing or `""` source is left out of the output, while a
3874
+ null source is written as null unless `conditional.when` is
3875
+ `extract_not_empty`); inside that set the save writes a dropped key
3876
+ back as `"default": null`, so dropping a stored null changes nothing
3877
+ while dropping a stored `""` or any other explicit value replaces it
3878
+ with null.
3867
3879
  - |-
3868
3880
  The four "Action to take if source field has no value" choices map to:
3869
- do nothing → no `default` key (add `conditional.when:
3870
- extract_not_empty` to leave a null source out too; without it a null
3871
- source is written as null); use null → `"default": null`; use empty string or
3872
- a custom value → `"default": "<value>"`; cause the record to fail →
3881
+ do nothing → `conditional.when: extract_not_empty` with no `default` key
3882
+ (on imports outside the database / csv-xlsx file set the key may simply
3883
+ be omitted, but a null source is then still written as null); use null →
3884
+ `"default": null`; use empty string or a custom value →
3885
+ `"default": "<value>"`; cause the record to fail →
3873
3886
  `conditional.when: fail_record_when_empty` with no `default` key.
3887
+ - |-
3888
+ On a database or csv / xlsx file import, a row sent with neither a
3889
+ `default` nor one of those conditionals reads back with `"default": null`
3890
+ after the save — create or update — so the destination is written as
3891
+ null; never express "Do nothing" by omission there. A stored
3892
+ `"default": null` on such a row is this save-time default, not a user's
3893
+ choice; keep it when re-sending the row. `"default": null` sent together
3894
+ with `fail_record_when_empty` is rejected with 422 `unsupported_mapping`
3895
+ `"default" and conditional.when "fail_record_when_empty" cannot be
3896
+ present in mapping simultaneously.`
3874
3897
  examples:
3875
3898
  - N/A
3876
3899
  - '0'
@@ -4277,7 +4300,10 @@ components:
4277
4300
  not found in the input data.
4278
4301
 
4279
4302
  Explicit JSON `null` is itself a valid fallback (the element is written as
4280
- JSON null); omitting the key means no fallback is applied.
4303
+ JSON null); omitting the key means no fallback is applied — except on database
4304
+ and csv / xlsx file imports, where the save stores an omitted key as `null` on an
4305
+ entry without an `extract_not_empty` / `fail_record_when_empty` conditional, as it
4306
+ does on leaf rows.
4281
4307
  examples:
4282
4308
  - N/A
4283
4309
  - '0'
@@ -4947,28 +4973,51 @@ components:
4947
4973
 
4948
4974
  Explicit JSON `null` is itself a valid fallback: the destination field is written as
4949
4975
  JSON null when the extract yields nothing (the Mapper UI's "Use null as default value"
4950
- action). Omitting the key entirely means no fallback — the field is left out of the
4951
- output when the extract is missing or an empty string (the UI's "Do nothing" action),
4952
- while a null source is still written as null unless `conditional.when` is
4953
- `extract_not_empty`. Failing the record instead is `conditional.when:
4954
- fail_record_when_empty`, which excludes a default.
4976
+ action). Outside the database and csv / xlsx file imports described below, omitting the
4977
+ key means no fallback — the field is left out of the output when the extract is missing
4978
+ or an empty string (the UI's "Do nothing" action), while a null source is still written
4979
+ as null unless `conditional.when` is `extract_not_empty`. Failing the record instead is
4980
+ `conditional.when: fail_record_when_empty`, which excludes a default.
4981
+
4982
+ On database imports (rdbms, jdbc) and csv / xlsx file imports (such as ftp, or an HTTP
4983
+ import with a file-provider assistant or `http.type: file`; an HTTP import that sends
4984
+ records is not one), the save stores an omitted key as `null` on every row that has no
4985
+ `hardCodedValue`, no `lookupName` and no `extract_not_empty` / `fail_record_when_empty`
4986
+ conditional — the same default the Mapper UI preselects for those imports. The rule runs
4987
+ when the document is saved, on create and on update, so "Do nothing" on those imports is
4988
+ `conditional.when: extract_not_empty`, not an omitted key.
4955
4989
  x-celigo-ai-guidance:
4956
4990
  - |-
4957
4991
  `"default": null` and `"default": ""` are distinct saved values, not
4958
4992
  absent keys: null renders the destination field as JSON null and the
4959
4993
  empty string renders it as `""` when the extract yields nothing.
4960
- Preserve them verbatim when editing or migrating a mapping — dropping
4961
- the key changes runtime behavior from "use null/empty string as
4962
- default value" to "do nothing" (a missing or `""` source is left out
4963
- of the output, while a null source is written as null unless
4964
- `conditional.when` is `extract_not_empty`).
4994
+ Preserve them verbatim when editing or migrating a mapping. Outside
4995
+ the database / csv-xlsx file import set, dropping the key changes
4996
+ runtime behavior from "use null/empty string as default value" to "do
4997
+ nothing" (a missing or `""` source is left out of the output, while a
4998
+ null source is written as null unless `conditional.when` is
4999
+ `extract_not_empty`); inside that set the save writes a dropped key
5000
+ back as `"default": null`, so dropping a stored null changes nothing
5001
+ while dropping a stored `""` or any other explicit value replaces it
5002
+ with null.
4965
5003
  - |-
4966
5004
  The four "Action to take if source field has no value" choices map to:
4967
- do nothing → no `default` key (add `conditional.when:
4968
- extract_not_empty` to leave a null source out too; without it a null
4969
- source is written as null); use null → `"default": null`; use empty string or
4970
- a custom value → `"default": "<value>"`; cause the record to fail →
5005
+ do nothing → `conditional.when: extract_not_empty` with no `default` key
5006
+ (on imports outside the database / csv-xlsx file set the key may simply
5007
+ be omitted, but a null source is then still written as null); use null →
5008
+ `"default": null`; use empty string or a custom value →
5009
+ `"default": "<value>"`; cause the record to fail →
4971
5010
  `conditional.when: fail_record_when_empty` with no `default` key.
5011
+ - |-
5012
+ On a database or csv / xlsx file import, a row sent with neither a
5013
+ `default` nor one of those conditionals reads back with `"default": null`
5014
+ after the save — create or update — so the destination is written as
5015
+ null; never express "Do nothing" by omission there. A stored
5016
+ `"default": null` on such a row is this save-time default, not a user's
5017
+ choice; keep it when re-sending the row. `"default": null` sent together
5018
+ with `fail_record_when_empty` is rejected with 422 `unsupported_mapping`
5019
+ `"default" and conditional.when "fail_record_when_empty" cannot be
5020
+ present in mapping simultaneously.`
4972
5021
  examples:
4973
5022
  - N/A
4974
5023
  - '0'
@@ -5375,7 +5424,10 @@ components:
5375
5424
  not found in the input data.
5376
5425
 
5377
5426
  Explicit JSON `null` is itself a valid fallback (the element is written as
5378
- JSON null); omitting the key means no fallback is applied.
5427
+ JSON null); omitting the key means no fallback is applied — except on database
5428
+ and csv / xlsx file imports, where the save stores an omitted key as `null` on an
5429
+ entry without an `extract_not_empty` / `fail_record_when_empty` conditional, as it
5430
+ does on leaf rows.
5379
5431
  examples:
5380
5432
  - N/A
5381
5433
  - '0'
@@ -31247,12 +31299,22 @@ components:
31247
31299
  description: |-
31248
31300
  Change-data-capture configuration for real-time listener exports (the "Listen for real-time
31249
31301
  data" source step). Present only when `type` is `stream`. Set on `MongodbExport` (MongoDB change
31250
- streams) and `RDBMSExport` (SQL Server CDC and PostgreSQL logical replication); the listener
31251
- streams change events continuously instead of fetching records on a schedule.
31302
+ streams) and `RDBMSExport` (SQL Server CDC, PostgreSQL logical replication, and MySQL binary-log
31303
+ CDC); the listener streams change events continuously instead of fetching records on a schedule.
31252
31304
 
31253
31305
  On save the API normalizes the `properties` grid into the typed fields: a `snapshot.mode`
31254
31306
  entry populates `snapshotMode` and a `capture.mode` entry populates `captureMode`. Every
31255
31307
  stream export must resolve a snapshot mode from one of those two places.
31308
+
31309
+ The prerequisites live on the database, not on the export: a listener saves (201) on a
31310
+ connection whose database host is unreachable, so a successful save does not confirm them.
31311
+ The platform's listener documentation requires: for PostgreSQL, logical replication
31312
+ (`wal_level=logical`) and a replication-capable user; for SQL Server, CDC enabled on the
31313
+ database and tables; for MongoDB change streams, a replica set; for MySQL, binary logging in
31314
+ row format (`log_bin=ON`, `binlog_format=ROW`, `binlog_row_image=FULL`) and a connection user
31315
+ holding `REPLICATION SLAVE`, `REPLICATION CLIENT` and `SELECT` on the captured tables
31316
+ (`RELOAD` is not needed on Amazon RDS or Aurora, where the listener takes no global read
31317
+ lock).
31256
31318
  x-celigo-ai-guidance:
31257
31319
  - |-
31258
31320
  A stream export that resolves no snapshot mode — neither `snapshotMode` nor a
@@ -31271,7 +31333,13 @@ components:
31271
31333
  description: |-
31272
31334
  How MongoDB change-stream events are materialized into records. Use
31273
31335
  `change_streams_update_full_with_pre_image` when downstream steps need the document's prior
31274
- state. MongoDB listeners only — `RDBMSExport` (SQL Server CDC, PostgreSQL) does not set this.
31336
+ state. MongoDB listeners only — `RDBMSExport` (SQL Server CDC, PostgreSQL, MySQL) does not
31337
+ set this.
31338
+ x-celigo-ai-guidance:
31339
+ - |-
31340
+ Never author this on an `RDBMSExport`: the API stores it on a MySQL stream export without
31341
+ rejecting it (unlike `slotName`, it is not gated per adaptor), so nothing at save time
31342
+ catches the mistake and the dead setting rides on the document.
31275
31343
  examples:
31276
31344
  - change_streams_update_full
31277
31345
  - change_streams_update_full_with_pre_image
@@ -31289,13 +31357,17 @@ components:
31289
31357
  initial_only: Takes the initial snapshot and then stops, without streaming ongoing changes.
31290
31358
  default: no_data
31291
31359
  description: |-
31292
- Whether the listener seeds existing rows before streaming changes. Use `initial` to backfill
31293
- existing data on the first run; `no_data` to stream only new changes.
31360
+ Whether the listener seeds existing rows before streaming changes. `no_data` streams only
31361
+ new changes; `initial` backfills existing data on the first run where the listener form
31362
+ offers it (MongoDB, SQL Server). The PostgreSQL and MySQL forms offer `no_data` and
31363
+ `when_needed` only; the MySQL listener documentation describes `when_needed` as a one-time
31364
+ read of the captured tables when no stream position is stored or the stored position is no
31365
+ longer on the server.
31294
31366
  x-celigo-ai-guidance:
31295
31367
  - |-
31296
- The PostgreSQL listener form offers only `no_data` and `when_needed`. The API stores other
31297
- values on a PostgreSQL export without rejecting them, but they are outside the supported
31298
- PostgreSQL matrix — stay within the form's subset.
31368
+ The PostgreSQL and MySQL listener forms offer only `no_data` and `when_needed`. The API
31369
+ stores other values on those exports without rejecting them, but they are outside the
31370
+ supported matrix — stay within the form's subset.
31299
31371
  examples:
31300
31372
  - initial
31301
31373
  - no_data
@@ -31310,8 +31382,9 @@ components:
31310
31382
  underscore).
31311
31383
  x-celigo-ai-guidance:
31312
31384
  - |-
31313
- PostgreSQL connections only: on any other connection the save is rejected 422
31314
- `not_allowed` ("CDC slotName can only be used with postgresql adaptor type").
31385
+ PostgreSQL connections only: on any other connection — SQL Server, MySQL — the save is
31386
+ rejected 422 `not_allowed` ("CDC slotName can only be used with postgresql adaptor type").
31387
+ MySQL CDC reads the binary log directly; it has no replication slot.
31315
31388
  - |-
31316
31389
  The identifier pattern is enforced server-side — an invalid name (uppercase, dashes) is
31317
31390
  rejected 422 `invalid_field_value` at save time.
@@ -31331,17 +31404,27 @@ components:
31331
31404
  sent, so nothing catches the ambiguity at save time — the exclusivity is the listener
31332
31405
  form's rule (publication wins as the sole table filter).
31333
31406
  - |-
31334
- PostgreSQL connections only: rejected 422 `not_allowed` on other connections, and the
31335
- identifier pattern is enforced server-side like `slotName`.
31407
+ PostgreSQL connections only: rejected 422 `not_allowed` on other connections (SQL Server,
31408
+ MySQL — "CDC publicationName can only be used with postgresql adaptor type"), and the
31409
+ identifier pattern is enforced server-side like `slotName`. A MySQL listener scopes
31410
+ tables only through `rdbms.tables` and the include / exclude `properties`.
31411
+ - |-
31412
+ On a PostgreSQL connection one of this field or `rdbms.tables` must be present: a stream
31413
+ export carrying neither is rejected 422 `missing_required_field` on both paths
31414
+ ("publicationName is required when tables is not provided." / "tables is required when
31415
+ publicationName is not provided."). SQL Server and MySQL listeners save without either.
31336
31416
  examples:
31337
31417
  - celigo_pub
31338
31418
  - orders_publication
31339
31419
  cursor:
31340
31420
  type: string
31341
31421
  description: |-
31342
- Server-managed stream position marker (where the listener resumes reading change events).
31422
+ Server-managed stream position marker (where the listener resumes reading change events;
31423
+ the MySQL listener documentation describes it as the binlog file and position last saved).
31343
31424
  Maintained by the platform as events are consumed; the UI exposes a reset workflow for it
31344
- under Cursor Management.
31425
+ under Cursor Management, which appears once a cursor exists. The form's reset is a full save that omits `cursor` and carries the
31426
+ top-level request flag `pendingCursorReset: true`; the API accepts the flag and does not
31427
+ store it on the document.
31345
31428
  x-celigo-ai-guidance:
31346
31429
  - Never author or modify this field — the platform owns the stream position.
31347
31430
  paths:
@@ -31350,17 +31433,33 @@ components:
31350
31433
  type: string
31351
31434
  description: |-
31352
31435
  Dot-notation paths within each raw change event to retain in the emitted record. MongoDB
31353
- listeners default to `["payload"]` (the whole change document); SQL Server and PostgreSQL
31354
- listeners commonly select `payload.after`, `payload.op`, and related fields to expose the
31355
- changed row and operation type.
31436
+ listeners default to `["payload"]` (the whole change document); SQL Server, PostgreSQL and
31437
+ MySQL listeners commonly select `payload.after`, `payload.op`, and related fields to expose
31438
+ the changed row and operation type. The MySQL listener form offers `payload.after`,
31439
+ `payload.before`, `schema`, `payload.source`, `payload.op`, `payload.transaction`,
31440
+ `payload.ts_ms`, `payload.ts_us` and `payload.ts_ns`, preselecting `payload.after`; it has
31441
+ no `updateDescription`-derived options and no `payload.id`. The MySQL listener
31442
+ documentation describes `after` as the row after the change (empty on a delete), `before`
31443
+ as the row before an update or delete (needs `binlog_row_image=FULL`), `op` as `c` / `u` /
31444
+ `d` / `r` (insert / update / delete / snapshot read) and `source` as the database, table,
31445
+ binlog file and position.
31356
31446
  examples:
31357
31447
  - - payload
31358
31448
  - - payload.after
31359
31449
  - payload.op
31450
+ - - payload.after
31451
+ - payload.before
31452
+ - payload.op
31360
31453
  intervalTime:
31361
31454
  type: integer
31362
31455
  default: 300
31363
- description: Polling interval, in seconds, at which the listener checks the source for new change events.
31456
+ minimum: 30
31457
+ 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.
31458
+ description: |-
31459
+ Interval, in seconds, that bounds how long the listener holds change events before sending
31460
+ a page downstream. The listener forms label it Max wait time, and the platform's listener
31461
+ documentation describes it as the longest a page waits when fewer than `pageSize` events
31462
+ have arrived — a full page is sent as soon as it fills.
31364
31463
  examples:
31365
31464
  - 300
31366
31465
  - 30
@@ -31369,11 +31468,25 @@ components:
31369
31468
  description: |-
31370
31469
  Connector-engine settings passed through to the underlying CDC connector as name/value
31371
31470
  pairs. Mirrors the form's additional-properties grid: the required keys (`capture.mode`
31372
- and `snapshot.mode` for MongoDB, `snapshot.mode` for SQL Server and PostgreSQL) are
31471
+ and `snapshot.mode` for MongoDB, `snapshot.mode` for SQL Server, PostgreSQL and MySQL) are
31373
31472
  serialized first, followed by optional keys such as `field.exclude.list`,
31374
31473
  `column.include.list`, or `snapshot.collection.filter.overrides.<db>.<collection>`.
31375
31474
  On save the API also lifts `snapshot.mode` / `capture.mode` entries into the typed
31376
31475
  `snapshotMode` / `captureMode` fields.
31476
+
31477
+ The MySQL listener form offers six keys: `snapshot.mode` (preselected `no_data`) and five
31478
+ optional comma-separated regular-expression lists — `table.exclude.list` (matched on
31479
+ `database.table`), `database.include.list`, `database.exclude.list`,
31480
+ `column.include.list` and `column.exclude.list` (matched on `database.table.column`).
31481
+ MySQL has no schema layer, so there are no `schema.include.list` / `schema.exclude.list`
31482
+ keys, and the MongoDB keys (`capture.mode`, `collection.exclude.list`,
31483
+ `field.exclude.list`) do not apply. The MySQL listener documentation describes a blank
31484
+ watch list as every table the connection's user can read, trimmed by `table.exclude.list`.
31485
+ x-celigo-ai-guidance:
31486
+ - |-
31487
+ The API persists any key sent here without validating it against the connector, so a
31488
+ MongoDB or PostgreSQL key on a MySQL listener saves cleanly and does nothing — author only
31489
+ the keys the listener's form offers.
31377
31490
  items:
31378
31491
  type: object
31379
31492
  required:
@@ -37298,8 +37411,8 @@ components:
37298
37411
  for other connection types. For query-type exports (standard, delta, once) it is REQUIRED
37299
37412
  when the _connectionId field references an RDBMS database connection and holds the SQL
37300
37413
  query. For real-time stream listeners (`type: "stream"`) it holds the CDC watch list
37301
- (`tables`) instead — and a PostgreSQL listener scoped by a publication
37302
- (`cdc.publicationName`) may omit this object entirely.
37414
+ (`tables`) instead — and a SQL Server or MySQL listener with no watch list, or a PostgreSQL
37415
+ listener scoped by a publication (`cdc.publicationName`), may omit this object entirely.
37303
37416
 
37304
37417
  **Rdbms export capabilities**
37305
37418
  - Execute custom SQL SELECT statements
@@ -37353,8 +37466,8 @@ components:
37353
37466
  ```
37354
37467
 
37355
37468
  **Real-time CDC listener exports (type: "stream")**
37356
- SQL Server and PostgreSQL connections support change-data-capture listeners that stream row
37357
- changes continuously (the `cdc` object holds the listener settings). A stream export has NO
37469
+ SQL Server, PostgreSQL and MySQL connections support change-data-capture listeners that stream
37470
+ row changes continuously (the `cdc` object holds the listener settings). A stream export has NO
37358
37471
  `query` — it watches `tables`:
37359
37472
  ```json
37360
37473
  {
@@ -37363,9 +37476,26 @@ components:
37363
37476
  "cdc": { "properties": [{ "name": "snapshot.mode", "value": "no_data" }] }
37364
37477
  }
37365
37478
  ```
37479
+ A MySQL listener names its tables as `database.table` (MySQL has no schema layer):
37480
+ ```json
37481
+ {
37482
+ "type": "stream",
37483
+ "rdbms": { "tables": "sales.orders,sales.order_lines" },
37484
+ "cdc": {
37485
+ "properties": [{ "name": "snapshot.mode", "value": "no_data" }],
37486
+ "paths": ["payload.after", "payload.op"]
37487
+ }
37488
+ }
37489
+ ```
37366
37490
  A PostgreSQL listener can instead scope tables through a publication
37367
37491
  (`cdc.publicationName`), in which case `tables` stays unset and the `rdbms` object may be
37368
- omitted entirely.
37492
+ omitted entirely; on PostgreSQL one of the two must be present. SQL Server and MySQL
37493
+ listeners save with no `tables` and no `rdbms` object at all (a blank `tables` string is
37494
+ dropped on save); the MySQL listener documentation describes that as every table the
37495
+ connection's user can read, trimmed by the `table.exclude.list` property.
37496
+ `POST /v1/exports/preview` rejects a stream export both with `rdbms.tables` sent and with
37497
+ no `rdbms` object at all, with the same 422 `missing_required_field` ("rdbms subschema not
37498
+ defined") — listeners have no preview.
37369
37499
  properties:
37370
37500
  tables:
37371
37501
  type: string
@@ -37373,16 +37503,26 @@ components:
37373
37503
  Comma-separated list of tables the CDC listener watches for changes. Used only by real-time
37374
37504
  listener exports (`type` is `stream`); standard SQL exports use `query` instead. SQL Server
37375
37505
  listeners use fully-qualified three-part names (`database.schema.table`); PostgreSQL
37376
- listeners use two-part names (`schema.table`).
37506
+ listeners use two-part names (`schema.table`); MySQL listeners use two-part
37507
+ `database.table` names, since MySQL has no schema layer between the database and the
37508
+ table. A PostgreSQL listener must carry this field or `cdc.publicationName`; SQL Server
37509
+ and MySQL listeners may leave it out (for MySQL the listener documentation describes that
37510
+ as every table the connection's user can read, trimmed by `table.exclude.list`).
37377
37511
  x-celigo-ai-guidance:
37378
37512
  - |-
37379
37513
  For a PostgreSQL listener, author EITHER this field OR `cdc.publicationName`, never both —
37380
37514
  when a publication is set it is the sole table filter and the listener form clears this
37381
37515
  field (the API stores both if sent, so nothing catches the conflict at save time).
37516
+ - |-
37517
+ The API does not validate the names against the engine — a three-part name on a MySQL
37518
+ listener saves cleanly — so nothing at save time catches the wrong form. Use the engine's
37519
+ own: `database.table` on MySQL, `schema.table` on PostgreSQL, `database.schema.table` on
37520
+ SQL Server.
37382
37521
  examples:
37383
37522
  - UKGODS.dbo.UKG_MetadataStaging
37384
37523
  - dbo.WorkOrderT,dbo.OrderLineT
37385
37524
  - public.orders,public.customers
37525
+ - sales.orders,sales.order_lines
37386
37526
  query:
37387
37527
  type: string
37388
37528
  x-celigo-agent:
@@ -38214,8 +38354,8 @@ components:
38214
38354
  - **Listen for inbound events from NetSuite or Salesforce**
38215
38355
  -> `distributed`
38216
38356
  - **Stream database changes in real time as they happen**
38217
- (change data capture from MongoDB, SQL Server, or
38218
- PostgreSQL — "when a row changes", "listen to my table")
38357
+ (change data capture from MongoDB, SQL Server, PostgreSQL
38358
+ or MySQL — "when a row changes", "listen to my table")
38219
38359
  -> `stream`, configured via the `cdc` object
38220
38360
  - **Subscribe to an Event Streams topic** ("listen to topic X",
38221
38361
  "consume messages published to …") -> `stream` with
@@ -38239,8 +38379,8 @@ components:
38239
38379
  delta config is a separate concern that scopes how you fill in
38240
38380
  the chosen config, not whether to use it.
38241
38381
  - |-
38242
- `stream` is accepted only on MongoDB and RDBMS exports (SQL Server
38243
- or PostgreSQL connections) and on Event Streams listeners
38382
+ `stream` is accepted only on MongoDB and RDBMS exports (SQL Server,
38383
+ PostgreSQL or MySQL connections) and on Event Streams listeners
38244
38384
  (`adaptorType: TopicExport`); every other adaptor rejects the save
38245
38385
  with `unsupported_export_type`. A MongoDB or RDBMS stream export
38246
38386
  must carry `cdc.snapshotMode` (and `cdc.captureMode` on MongoDB) —
@@ -38265,7 +38405,7 @@ components:
38265
38405
  simple: Allows manual file uploads through the data loader UI.
38266
38406
  blob: Retrieves raw files without parsing them into structured data records.
38267
38407
  distributed: Listens for real-time events from NetSuite or Salesforce.
38268
- 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`.
38408
+ 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`.
38269
38409
  all: Explicitly retrieves all available records — equivalent to omitting `type`.
38270
38410
  examples:
38271
38411
  - webhook
@@ -38392,6 +38532,21 @@ components:
38392
38532
  $ref: '#/components/schemas/Distributed'
38393
38533
  cdc:
38394
38534
  $ref: '#/components/schemas/Cdc'
38535
+ pendingCursorReset:
38536
+ type: boolean
38537
+ writeOnly: true
38538
+ description: |-
38539
+ When true on a save of a stream listener, requests a reset of the listener's stored stream
38540
+ position — the Cursor Management reset the listener form sends, with `cdc.cursor` omitted
38541
+ from the same document; the listener documentation describes the save as clearing the
38542
+ stored cursor and restarting the listener. Accepted on the request and not stored on the
38543
+ export.
38544
+ x-celigo-ai-guidance:
38545
+ - |-
38546
+ Never author this flag — like `cdc.cursor`, the stream position is the platform's, and
38547
+ the reset is the listener form's Cursor Management action. The API accepts it silently
38548
+ (200) and the readback carries no trace that it was sent, so a save that carried it by
38549
+ mistake cannot be seen afterwards on the export.
38395
38550
  topic:
38396
38551
  $ref: '#/components/schemas/Topic-2'
38397
38552
  filesystem: