@celigo/api-specs 0.2.51 → 0.2.52

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
@@ -920,7 +920,17 @@ components:
920
920
  When grouping is used, the export's page size determines the maximum number of groups per page, not individual
921
921
  records. Note that effective grouping typically requires that records with the same group field values appear
922
922
  together in the export data.
923
+
924
+ Not a webhook listener feature: on a `webhook` export the platform applies it only within each page, after
925
+ the request has been paged, and only to adjacent rows — the field is not offered for listeners in the UI.
923
926
  x-celigo-ai-guidance:
927
+ - |-
928
+ Never set this on a webhook listener to keep a request's rows together —
929
+ the listener pages the request's records at ``pageSize`` FIRST and then
930
+ merges only adjacent same-key rows inside each page, so rows that cross a
931
+ page boundary still arrive as separate records and unsorted rows are not
932
+ grouped at all. Keep a listener's request together by having the sender
933
+ post an object (one record) or by raising the listener's ``pageSize``.
924
934
  - |-
925
935
  A grouped record's wire shape is a BARE ARRAY of the grouped rows
926
936
  (``[{row}, {row}]``) — there is no ``rows`` key on the record
@@ -2045,7 +2055,10 @@ components:
2045
2055
  - csv
2046
2056
  pathToRecords:
2047
2057
  type: string
2048
- description: JSON path into the incoming payload to the array of records to emit; when omitted, the whole payload is emitted as a single record.
2058
+ description: JSON path into an object payload to the array whose elements become the records. When omitted, a top-level JSON array is emitted as one record per element and an object payload is emitted as a single record.
2059
+ x-celigo-ai-guidance:
2060
+ - 'Set this only when the records sit inside an object (`{"data": {"items": [...]}}` → `data.items`). A sender that already posts a top-level array needs nothing here; a sender that posts an object with no path configured delivers exactly one record per request — the whole object — which is also the way to make one request one record on purpose.'
2061
+ - 'Records are paged per request at the export''s `pageSize` (default 20) before any hook, filter, or downstream step runs: a 25-element array is a page of 20 records followed by a page of 5, and a `preSavePage` hook receives one page (up to `pageSize` records) per call. A hook that groups rows by order therefore groups only the rows on the same page — an order whose rows span two pages comes out as two grouped records, the second after the first was already processed. To keep a request''s rows together, have the sender wrap them in an object (one record, rows under `record.<path>`) or raise `pageSize` above the largest request — never `groupByFields`, which the listener applies per page after paging.'
2049
2062
  examples:
2050
2063
  - events
2051
2064
  - data.items
@@ -16242,6 +16255,8 @@ components:
16242
16255
  record as one response, capped at 5 MB in total, so the value does not change how many
16243
16256
  results a lookup returns; a result set larger than that belongs in a standalone export
16244
16257
  step. In a test run or preview the value also caps the records fetched (default 20).
16258
+ On a webhook listener the records of each incoming request are paged separately, before
16259
+ any hook or downstream step runs.
16245
16260
  default: 20
16246
16261
  examples:
16247
16262
  - 100
package/dist/import.yml CHANGED
@@ -1734,8 +1734,17 @@ components:
1734
1734
  description: |-
1735
1735
  Maximum number of records submitted per HTTP request, which affects throughput and API rate limiting.
1736
1736
  REST services typically send one record per request; raise it only for batch endpoints or RPC/XML services that accept multiple records, consulting the target API documentation for the optimal value.
1737
+ Above 1, the body, relative URI, and header templates render once per request against `batch_of_records` — each entry carrying that record as `record` (or `rows` for a grouped record) — and a root-level `record` or `rows` is undefined.
1737
1738
 
1738
1739
  The default varies by API.
1740
+ x-celigo-ai-guidance:
1741
+ - |-
1742
+ A batched import's templates iterate ``{{#each batch_of_records}}`` and address
1743
+ ``this.record.<field>`` (``this.rows.0.<field>`` for grouped records), or iterate
1744
+ the bare records as ``{{#each data}}``; a ``{{record.<field>}}`` left at the root
1745
+ renders empty in the body and fails the request in a relative URI or header. With
1746
+ the default batch size the shape root is ``record`` / ``rows``, ``data`` holds that
1747
+ one record, and ``batch_of_records`` is undefined.
1739
1748
  examples:
1740
1749
  - 1
1741
1750
  - 10
@@ -1830,6 +1839,7 @@ components:
1830
1839
  For composite (upsert) imports, the array is positionally aligned with method and requestType, and existingExtract decides the index used at runtime: the UPDATE index when its field has a value, the CREATE index when it is empty or missing.
1831
1840
  Reference the existing record ID in the UPDATE URI with `{{{data.0.fieldName}}}` (triple braces with the data.0 prefix).
1832
1841
  Use separate array elements per operation rather than `{{#if}}` conditionals inside a single URI.
1842
+ URI templates render strictly: a path that is undefined on the record — such as `record.<field>` on a grouped record, whose root is `rows` — fails the request instead of rendering empty.
1833
1843
  x-celigo-ai-guidance:
1834
1844
  - '**CRITICAL: This MUST be an array of strings, NOT an object.**'
1835
1845
  - |-
@@ -1999,6 +2009,21 @@ components:
1999
2009
  Avoid bare ``{{{jsonSerialize record}}}`` with no wrapper — leave the field undefined instead.
2000
2010
  Also avoid wrapping a single post-mapped scalar field in ``jsonSerialize`` (e.g.
2001
2011
  ``{{{jsonSerialize record.<scalar>}}}``) — that pattern is brittle.
2012
+ - |-
2013
+ Every request context carries two data roots: ``data`` — the list of records in
2014
+ the request, always present (Pattern B) — and ONE shape-specific root that follows
2015
+ the record entering the step. An object record is ``record``; a GROUPED record (an
2016
+ array of rows — a ``groupByFields`` export, file key columns, a NetSuite grouped
2017
+ saved search) is ``rows`` (``{{rows.0.<field>}}``, ``{{#each rows}}``,
2018
+ ``{{{jsonSerialize rows}}}``) and ``record.*`` is undefined on it; when
2019
+ ``batchSize`` exceeds 1 the shape root is ``batch_of_records`` and neither ``record``
2020
+ nor ``rows`` exists at the top level. Inside ``data`` a grouped record is itself an
2021
+ array element (``{{#each data}}{{#each this}}…{{/each}}{{/each}}``). An object record
2022
+ that carries its own ``rows`` field is still ``record`` — ``{{#each record.rows}}``.
2023
+ Here an undefined path renders empty by default (``strictHandlebarEvaluation`` is the
2024
+ documented switch to raise instead); in ``relativeURI`` and ``headers[].value``
2025
+ templates an undefined path always fails the request — a wrong root there is a
2026
+ runtime failure, not a blank.
2002
2027
  - |-
2003
2028
  ## LEAVE UNDEFINED for the most common case
2004
2029
 
@@ -2074,10 +2099,11 @@ components:
2074
2099
  (the default) the root carries ``record`` (an object record —
2075
2100
  or the fanned-out child on a ``oneToMany`` import) or ``rows``
2076
2101
  (a grouped/array record), and ``data`` is the one-element list
2077
- of records in the request; with ``batchSize`` > 1 the root
2078
- carries ``batch_of_records`` (one ``{record: …}`` item per
2079
- record in the request) and ``data`` (the bare records), and
2080
- ``record`` / ``rows`` are ABSENT. ``oneToMany`` does not make
2102
+ of records in the request (a grouped record is that element,
2103
+ itself an array); with ``batchSize`` > 1 the root carries
2104
+ ``batch_of_records`` (one ``{record: …}`` item per object
2105
+ record, ``{rows: […]}`` for a grouped record) and ``data`` (the
2106
+ bare records), and ``record`` / ``rows`` are ABSENT. ``oneToMany`` does not make
2081
2107
  ``batch_of_records`` appear — children are batched after
2082
2108
  fan-out under the same rule.
2083
2109
 
@@ -2359,7 +2385,7 @@ components:
2359
2385
  description: Name of the HTTP header to include with each import request.
2360
2386
  value:
2361
2387
  type: string
2362
- description: Value sent for the header. Supports handlebars expressions rendered against the pre-mapped record.
2388
+ description: Value sent for the header. Supports handlebars expressions rendered against the pre-mapped record, with the same data roots as the body (`record` / `rows` / `batch_of_records`, plus `data`); an undefined path fails the request rather than rendering empty.
2363
2389
  x-celigo-agent:
2364
2390
  - handlebars
2365
2391
  x-celigo-handlebars-context: pre-mapped
package/dist/tool.yml CHANGED
@@ -12254,8 +12254,17 @@ components:
12254
12254
  description: |-
12255
12255
  Maximum number of records submitted per HTTP request, which affects throughput and API rate limiting.
12256
12256
  REST services typically send one record per request; raise it only for batch endpoints or RPC/XML services that accept multiple records, consulting the target API documentation for the optimal value.
12257
+ Above 1, the body, relative URI, and header templates render once per request against `batch_of_records` — each entry carrying that record as `record` (or `rows` for a grouped record) — and a root-level `record` or `rows` is undefined.
12257
12258
 
12258
12259
  The default varies by API.
12260
+ x-celigo-ai-guidance:
12261
+ - |-
12262
+ A batched import's templates iterate ``{{#each batch_of_records}}`` and address
12263
+ ``this.record.<field>`` (``this.rows.0.<field>`` for grouped records), or iterate
12264
+ the bare records as ``{{#each data}}``; a ``{{record.<field>}}`` left at the root
12265
+ renders empty in the body and fails the request in a relative URI or header. With
12266
+ the default batch size the shape root is ``record`` / ``rows``, ``data`` holds that
12267
+ one record, and ``batch_of_records`` is undefined.
12259
12268
  examples:
12260
12269
  - 1
12261
12270
  - 10
@@ -12350,6 +12359,7 @@ components:
12350
12359
  For composite (upsert) imports, the array is positionally aligned with method and requestType, and existingExtract decides the index used at runtime: the UPDATE index when its field has a value, the CREATE index when it is empty or missing.
12351
12360
  Reference the existing record ID in the UPDATE URI with `{{{data.0.fieldName}}}` (triple braces with the data.0 prefix).
12352
12361
  Use separate array elements per operation rather than `{{#if}}` conditionals inside a single URI.
12362
+ URI templates render strictly: a path that is undefined on the record — such as `record.<field>` on a grouped record, whose root is `rows` — fails the request instead of rendering empty.
12353
12363
  x-celigo-ai-guidance:
12354
12364
  - '**CRITICAL: This MUST be an array of strings, NOT an object.**'
12355
12365
  - |-
@@ -12519,6 +12529,21 @@ components:
12519
12529
  Avoid bare ``{{{jsonSerialize record}}}`` with no wrapper — leave the field undefined instead.
12520
12530
  Also avoid wrapping a single post-mapped scalar field in ``jsonSerialize`` (e.g.
12521
12531
  ``{{{jsonSerialize record.<scalar>}}}``) — that pattern is brittle.
12532
+ - |-
12533
+ Every request context carries two data roots: ``data`` — the list of records in
12534
+ the request, always present (Pattern B) — and ONE shape-specific root that follows
12535
+ the record entering the step. An object record is ``record``; a GROUPED record (an
12536
+ array of rows — a ``groupByFields`` export, file key columns, a NetSuite grouped
12537
+ saved search) is ``rows`` (``{{rows.0.<field>}}``, ``{{#each rows}}``,
12538
+ ``{{{jsonSerialize rows}}}``) and ``record.*`` is undefined on it; when
12539
+ ``batchSize`` exceeds 1 the shape root is ``batch_of_records`` and neither ``record``
12540
+ nor ``rows`` exists at the top level. Inside ``data`` a grouped record is itself an
12541
+ array element (``{{#each data}}{{#each this}}…{{/each}}{{/each}}``). An object record
12542
+ that carries its own ``rows`` field is still ``record`` — ``{{#each record.rows}}``.
12543
+ Here an undefined path renders empty by default (``strictHandlebarEvaluation`` is the
12544
+ documented switch to raise instead); in ``relativeURI`` and ``headers[].value``
12545
+ templates an undefined path always fails the request — a wrong root there is a
12546
+ runtime failure, not a blank.
12522
12547
  - |-
12523
12548
  ## LEAVE UNDEFINED for the most common case
12524
12549
 
@@ -12594,10 +12619,11 @@ components:
12594
12619
  (the default) the root carries ``record`` (an object record —
12595
12620
  or the fanned-out child on a ``oneToMany`` import) or ``rows``
12596
12621
  (a grouped/array record), and ``data`` is the one-element list
12597
- of records in the request; with ``batchSize`` > 1 the root
12598
- carries ``batch_of_records`` (one ``{record: …}`` item per
12599
- record in the request) and ``data`` (the bare records), and
12600
- ``record`` / ``rows`` are ABSENT. ``oneToMany`` does not make
12622
+ of records in the request (a grouped record is that element,
12623
+ itself an array); with ``batchSize`` > 1 the root carries
12624
+ ``batch_of_records`` (one ``{record: …}`` item per object
12625
+ record, ``{rows: […]}`` for a grouped record) and ``data`` (the
12626
+ bare records), and ``record`` / ``rows`` are ABSENT. ``oneToMany`` does not make
12601
12627
  ``batch_of_records`` appear — children are batched after
12602
12628
  fan-out under the same rule.
12603
12629
 
@@ -12879,7 +12905,7 @@ components:
12879
12905
  description: Name of the HTTP header to include with each import request.
12880
12906
  value:
12881
12907
  type: string
12882
- description: Value sent for the header. Supports handlebars expressions rendered against the pre-mapped record.
12908
+ description: Value sent for the header. Supports handlebars expressions rendered against the pre-mapped record, with the same data roots as the body (`record` / `rows` / `batch_of_records`, plus `data`); an undefined path fails the request rather than rendering empty.
12883
12909
  x-celigo-agent:
12884
12910
  - handlebars
12885
12911
  x-celigo-handlebars-context: pre-mapped
@@ -24293,7 +24319,17 @@ components:
24293
24319
  When grouping is used, the export's page size determines the maximum number of groups per page, not individual
24294
24320
  records. Note that effective grouping typically requires that records with the same group field values appear
24295
24321
  together in the export data.
24322
+
24323
+ Not a webhook listener feature: on a `webhook` export the platform applies it only within each page, after
24324
+ the request has been paged, and only to adjacent rows — the field is not offered for listeners in the UI.
24296
24325
  x-celigo-ai-guidance:
24326
+ - |-
24327
+ Never set this on a webhook listener to keep a request's rows together —
24328
+ the listener pages the request's records at ``pageSize`` FIRST and then
24329
+ merges only adjacent same-key rows inside each page, so rows that cross a
24330
+ page boundary still arrive as separate records and unsorted rows are not
24331
+ grouped at all. Keep a listener's request together by having the sender
24332
+ post an object (one record) or by raising the listener's ``pageSize``.
24297
24333
  - |-
24298
24334
  A grouped record's wire shape is a BARE ARRAY of the grouped rows
24299
24335
  (``[{row}, {row}]``) — there is no ``rows`` key on the record
@@ -25418,7 +25454,10 @@ components:
25418
25454
  - csv
25419
25455
  pathToRecords:
25420
25456
  type: string
25421
- description: JSON path into the incoming payload to the array of records to emit; when omitted, the whole payload is emitted as a single record.
25457
+ description: JSON path into an object payload to the array whose elements become the records. When omitted, a top-level JSON array is emitted as one record per element and an object payload is emitted as a single record.
25458
+ x-celigo-ai-guidance:
25459
+ - 'Set this only when the records sit inside an object (`{"data": {"items": [...]}}` → `data.items`). A sender that already posts a top-level array needs nothing here; a sender that posts an object with no path configured delivers exactly one record per request — the whole object — which is also the way to make one request one record on purpose.'
25460
+ - 'Records are paged per request at the export''s `pageSize` (default 20) before any hook, filter, or downstream step runs: a 25-element array is a page of 20 records followed by a page of 5, and a `preSavePage` hook receives one page (up to `pageSize` records) per call. A hook that groups rows by order therefore groups only the rows on the same page — an order whose rows span two pages comes out as two grouped records, the second after the first was already processed. To keep a request''s rows together, have the sender wrap them in an object (one record, rows under `record.<path>`) or raise `pageSize` above the largest request — never `groupByFields`, which the listener applies per page after paging.'
25422
25461
  examples:
25423
25462
  - events
25424
25463
  - data.items
@@ -36136,6 +36175,8 @@ components:
36136
36175
  record as one response, capped at 5 MB in total, so the value does not change how many
36137
36176
  results a lookup returns; a result set larger than that belongs in a standalone export
36138
36177
  step. In a test run or preview the value also caps the records fetched (default 20).
36178
+ On a webhook listener the records of each incoming request are paged separately, before
36179
+ any hook or downstream step runs.
36139
36180
  default: 20
36140
36181
  examples:
36141
36182
  - 100
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@celigo/api-specs",
3
- "version": "0.2.51",
3
+ "version": "0.2.52",
4
4
  "private": false,
5
5
  "description": "Public OpenAPI bundles (dist/) and the celigo-cli lint schema pack (schemas.json).",
6
6
  "keywords": [
package/schemas.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "provenance": {
3
3
  "repo": "celigo/integrator-api-specs",
4
- "iasCommit": "f59fb30",
4
+ "iasCommit": "b5bc8d2",
5
5
  "generatedAt": "2026-09-24"
6
6
  },
7
7
  "roots": {