@celigo/api-specs 0.2.110 → 0.2.112

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
@@ -7891,8 +7891,8 @@ components:
7891
7891
  - Requires the "soql" object with query configuration
7892
7892
 
7893
7893
  2. **Real-time Event Listeners** (type="distributed")
7894
- - Responds to Salesforce events as they happen
7895
- - Uses Salesforce's streaming API and platform events
7894
+ - Responds to Salesforce record creates, updates, and deletes as they happen
7895
+ - Fires through an Apex trigger on the object in the connected org (see `distributed`)
7896
7896
  - Always appears as a "Listener" in the flow builder UI
7897
7897
  - Requires the "distributed" object with event configuration
7898
7898
 
@@ -7957,7 +7957,7 @@ components:
7957
7957
  - **Use Cases**: Real-time synchronization, event-driven integration
7958
7958
  - **Dependencies**:
7959
7959
  - Only uses REST API (api field is ignored)
7960
- - Automatically configured with trigger logic in Salesforce
7960
+ - Depends on an Apex trigger on the object in the connected org: Integration Apps create it at installation; for a custom flow the customer deploys it from the export page's Required trigger code (see `distributed`)
7961
7961
  - Only compatible with standard export type (ignores delta/test/once)
7962
7962
  - |-
7963
7963
  ## IMPLEMENTATION CONSIDERATIONS
@@ -8421,34 +8421,21 @@ components:
8421
8421
  - SELECT Id, Name, (SELECT Id, FirstName, LastName FROM Contacts) FROM Account
8422
8422
  distributed:
8423
8423
  type: object
8424
- description: Real-time event listener configuration; required when `type` is `distributed` and not used otherwise. The system installs triggers in the connected Salesforce org and delivers records to the flow as create, update, and delete events occur — no scheduling or manual execution is involved.
8424
+ description: Real-time listener configuration; required when `type` is `distributed` and not used otherwise. Records reach the flow only when an Apex trigger on `sObjectType` in the connected org calls the Celigo package (`integrator_da__.RealTimeExporter.processExport()`) — no scheduling or manual execution is involved. Integration Apps create their triggers at installation; for a custom flow the customer deploys the trigger in Salesforce, starting from the code the export page shows under Required trigger.
8425
8425
  x-celigo-ai-guidance:
8426
- - Configuration for real-time Salesforce event-driven exports.
8427
8426
  - |-
8428
- ## FIELD BEHAVIOR
8429
-
8430
- This object defines real-time event listener settings:
8431
-
8432
- - REQUIRED when type="distributed"
8433
- - Not used when type="soql" or for blob exports
8434
- - Creates push-based integration triggered by Salesforce events
8435
- - Implements real-time processing of creates, updates, and deletes
8436
- - |-
8437
- ## IMPLEMENTATION CONTEXT
8438
-
8439
- Distributed exports work fundamentally differently from SOQL exports:
8440
- - No scheduling or manual execution required
8441
- - Triggered automatically when records change in Salesforce
8442
- - Data flows in real-time as events occur
8443
- - Uses Salesforce's platform events and streaming API
8444
- - |-
8445
- ## TECHNICAL ARCHITECTURE
8446
-
8447
- When configured, the system:
8448
- 1. Creates custom triggers in the connected Salesforce org
8449
- 2. Establishes event listeners for the specified objects
8450
- 3. Processes events as they occur (create/update/delete operations)
8451
- 4. Delivers the changed records to the integration flow
8427
+ After creating a listener on a custom flow, relay what the Help Center's "Listen for real-time data
8428
+ from Salesforce" states: an Apex trigger is required per sObject type and, for a custom flow, the
8429
+ customer creates it in Salesforce — copy the export page's Required trigger code, replace `<name>`,
8430
+ and save it under Setup → Object Manager → <object> → Triggers → New; deploying to production also
8431
+ needs a test class with 75% coverage. Integration Apps create their triggers at installation.
8432
+ - |-
8433
+ When a listener on an enabled flow never creates a job for a create, update, or delete, the
8434
+ Celigo-side causes are `distributed.disabled` true, an offline connection, and a qualifier the
8435
+ record does not satisfy — and any qualifier drops delete events (see `qualifier`). Also verify the
8436
+ Help Center's trigger requirement in the connected org: an active Apex trigger on the object whose
8437
+ code calls `integrator_da__.RealTimeExporter`, and the Celigo package reachable through the
8438
+ connection (`GET /v1/connections/{_id}/distributed`, documented in this spec set).
8452
8439
  properties:
8453
8440
  referencedFields:
8454
8441
  type:
package/dist/import.yml CHANGED
@@ -3943,6 +3943,15 @@ components:
3943
3943
  - DO NOT use `jsonSerialize` here — search expressions take
3944
3944
  scalar literals, not serialized JSON. Use `{{{id}}}` or
3945
3945
  `{{{[Field Name]}}}` directly.
3946
+ - |-
3947
+ ## Body-level only
3948
+
3949
+ This lookup identifies the record being imported, so bare
3950
+ body fields are the right paths here. A per-field lookup
3951
+ attached to a sublist row (`lookups[]` referenced from
3952
+ `mapping.lists[].fields[].lookupName`) is different: its
3953
+ expression addresses the current line with
3954
+ `<array>[*].<field>` — see `lookups[].expression`.
3946
3955
  hooks:
3947
3956
  type: object
3948
3957
  description: |
@@ -4288,6 +4297,13 @@ components:
4288
4297
  scalar extracts tag along.
4289
4298
  If no child uses `[*]` and none set `extract` at all (every child is a `hardCodedValue`),
4290
4299
  the sublist renders a single static line.
4300
+ - |-
4301
+ A row that resolves its value through `lookupName`
4302
+ (typically `extract: ""`) is driven by the sibling
4303
+ rows' `[*]` extracts, and the lookup's `expression`
4304
+ addresses the current line with the same
4305
+ `<array>[*].<field>` path — see
4306
+ `netsuite_da.lookups[].expression`.
4291
4307
  generate:
4292
4308
  type: string
4293
4309
  description: NetSuite sublist field ID to write to.
@@ -4524,10 +4540,69 @@ components:
4524
4540
  - internalid
4525
4541
  expression:
4526
4542
  type: string
4543
+ x-celigo-agent:
4544
+ - handlebars
4527
4545
  description: |-
4528
4546
  Optional advanced-search expression (NetSuite saved-search
4529
4547
  DSL) for multi-criterion lookups. When present, supersedes
4530
4548
  `searchField` / `operator` — those fields are ignored.
4549
+ Handlebars inside the expression is rendered against the
4550
+ whole source record before the search runs; a lookup on a
4551
+ sublist row reaches the current line through
4552
+ `<array>[*].<field>` (for example `line_items[*].sku`).
4553
+ x-celigo-ai-guidance:
4554
+ - |-
4555
+ ## Evaluation context — the whole source record, no `record.` prefix
4556
+
4557
+ The expression's Handlebars renders against the incoming
4558
+ source record as the context root (the record is NOT
4559
+ wrapped under `record`), then the rendered JSON array is
4560
+ sent to NetSuite as the search criteria. Body-level fields
4561
+ are addressed bare: `{{{id}}}`, `{{{email}}}`.
4562
+ - |-
4563
+ ## Sublist-row lookups address the line with `<array>[*].<field>`
4564
+
4565
+ A lookup referenced from a sublist mapping row
4566
+ (`mapping.lists[].fields[].lookupName`) still receives the
4567
+ whole record; the current line's fields are reached with the
4568
+ same bracket-star path the sublist extracts use —
4569
+ `{{{line_items[*].sku}}}` resolves the line's item (one line
4570
+ per sublist row). A bare line field (`{{sku}}`,
4571
+ `{{#contains sku "_"}}`) is undefined at the record root: a
4572
+ helper that receives it fails every record with
4573
+ `INVALID_HANDLE_BAR_EXPRESSION` — `Could not compile handle
4574
+ bar "<expression>" because "Cannot call method "indexOf" of
4575
+ undefined"` — before anything reaches NetSuite. When an
4576
+ audit diff shows `<array>[*].` removed from the expression
4577
+ right before such errors began, that edit is the cause; do
4578
+ not look for a line missing the field.
4579
+ - |-
4580
+ ## Rendered unmatched
4581
+
4582
+ A rendered value NetSuite does not match fails the record
4583
+ with `VALUE_LOOKUP_FAILED` — `Could not find a match for
4584
+ "<rendered criteria>" for the record type "<recordType>"`
4585
+ — quoting the criteria exactly as rendered, so the message
4586
+ shows what the expression produced for that line. With
4587
+ `allowFailures: true` the `default` value is used instead
4588
+ and no error is raised. Give every branch an output.
4589
+ - |-
4590
+ ## The mapping preview cannot evaluate `[*]` inside a block-helper argument
4591
+
4592
+ `PUT /v1/netsuiteDA/previewImportMappingFields` (the mapping
4593
+ editor's Preview) evaluates lookups for real — resolved
4594
+ internal ids appear in `nlobjSublistIds`, misses and
4595
+ compile errors in `data.mappingErrors[]` — and handles
4596
+ `[*]` in plain substitutions and inside a branch's output.
4597
+ It does NOT apply the per-line evaluation to `[*]` used as a
4598
+ block-helper ARGUMENT (`{{#if line_items[*].x}}`,
4599
+ `{{#contains line_items[*].sku "_"}}`): the sublist comes
4600
+ back EMPTY with no error, whatever the expression would do
4601
+ in a run. An empty preview is therefore no evidence about
4602
+ such an expression — never report it as "renders nothing"
4603
+ or as invalid on that basis; validate it with a run.
4604
+ `<array>.@index.<field>` is likewise not evaluable in the
4605
+ preview (the record is dropped with no error).
4531
4606
  operator:
4532
4607
  type: string
4533
4608
  description: |-
@@ -4585,6 +4660,14 @@ components:
4585
4660
  TWO locations: `netsuite_da.lookups` and top-level `lookups`.
4586
4661
  Both arrays must hold byte-for-byte identical content — the
4587
4662
  MappingsAgent writes both on every save.
4663
+ - |-
4664
+ ## One context for body and sublist lookups
4665
+ Every lookup's `expression` renders against the whole source
4666
+ record. A lookup referenced from a sublist row
4667
+ (`mapping.lists[].fields[].lookupName`) is evaluated once per
4668
+ line and addresses the current line with `<array>[*].<field>`
4669
+ — never a bare line field. See `expression` for the failure
4670
+ modes and the preview caveat.
4588
4671
  x-celigo-agent:
4589
4672
  - lookup
4590
4673
  rawOverride:
package/dist/tool.yml CHANGED
@@ -15522,6 +15522,15 @@ components:
15522
15522
  - DO NOT use `jsonSerialize` here — search expressions take
15523
15523
  scalar literals, not serialized JSON. Use `{{{id}}}` or
15524
15524
  `{{{[Field Name]}}}` directly.
15525
+ - |-
15526
+ ## Body-level only
15527
+
15528
+ This lookup identifies the record being imported, so bare
15529
+ body fields are the right paths here. A per-field lookup
15530
+ attached to a sublist row (`lookups[]` referenced from
15531
+ `mapping.lists[].fields[].lookupName`) is different: its
15532
+ expression addresses the current line with
15533
+ `<array>[*].<field>` — see `lookups[].expression`.
15525
15534
  hooks:
15526
15535
  type: object
15527
15536
  description: |
@@ -15867,6 +15876,13 @@ components:
15867
15876
  scalar extracts tag along.
15868
15877
  If no child uses `[*]` and none set `extract` at all (every child is a `hardCodedValue`),
15869
15878
  the sublist renders a single static line.
15879
+ - |-
15880
+ A row that resolves its value through `lookupName`
15881
+ (typically `extract: ""`) is driven by the sibling
15882
+ rows' `[*]` extracts, and the lookup's `expression`
15883
+ addresses the current line with the same
15884
+ `<array>[*].<field>` path — see
15885
+ `netsuite_da.lookups[].expression`.
15870
15886
  generate:
15871
15887
  type: string
15872
15888
  description: NetSuite sublist field ID to write to.
@@ -16103,10 +16119,69 @@ components:
16103
16119
  - internalid
16104
16120
  expression:
16105
16121
  type: string
16122
+ x-celigo-agent:
16123
+ - handlebars
16106
16124
  description: |-
16107
16125
  Optional advanced-search expression (NetSuite saved-search
16108
16126
  DSL) for multi-criterion lookups. When present, supersedes
16109
16127
  `searchField` / `operator` — those fields are ignored.
16128
+ Handlebars inside the expression is rendered against the
16129
+ whole source record before the search runs; a lookup on a
16130
+ sublist row reaches the current line through
16131
+ `<array>[*].<field>` (for example `line_items[*].sku`).
16132
+ x-celigo-ai-guidance:
16133
+ - |-
16134
+ ## Evaluation context — the whole source record, no `record.` prefix
16135
+
16136
+ The expression's Handlebars renders against the incoming
16137
+ source record as the context root (the record is NOT
16138
+ wrapped under `record`), then the rendered JSON array is
16139
+ sent to NetSuite as the search criteria. Body-level fields
16140
+ are addressed bare: `{{{id}}}`, `{{{email}}}`.
16141
+ - |-
16142
+ ## Sublist-row lookups address the line with `<array>[*].<field>`
16143
+
16144
+ A lookup referenced from a sublist mapping row
16145
+ (`mapping.lists[].fields[].lookupName`) still receives the
16146
+ whole record; the current line's fields are reached with the
16147
+ same bracket-star path the sublist extracts use —
16148
+ `{{{line_items[*].sku}}}` resolves the line's item (one line
16149
+ per sublist row). A bare line field (`{{sku}}`,
16150
+ `{{#contains sku "_"}}`) is undefined at the record root: a
16151
+ helper that receives it fails every record with
16152
+ `INVALID_HANDLE_BAR_EXPRESSION` — `Could not compile handle
16153
+ bar "<expression>" because "Cannot call method "indexOf" of
16154
+ undefined"` — before anything reaches NetSuite. When an
16155
+ audit diff shows `<array>[*].` removed from the expression
16156
+ right before such errors began, that edit is the cause; do
16157
+ not look for a line missing the field.
16158
+ - |-
16159
+ ## Rendered unmatched
16160
+
16161
+ A rendered value NetSuite does not match fails the record
16162
+ with `VALUE_LOOKUP_FAILED` — `Could not find a match for
16163
+ "<rendered criteria>" for the record type "<recordType>"`
16164
+ — quoting the criteria exactly as rendered, so the message
16165
+ shows what the expression produced for that line. With
16166
+ `allowFailures: true` the `default` value is used instead
16167
+ and no error is raised. Give every branch an output.
16168
+ - |-
16169
+ ## The mapping preview cannot evaluate `[*]` inside a block-helper argument
16170
+
16171
+ `PUT /v1/netsuiteDA/previewImportMappingFields` (the mapping
16172
+ editor's Preview) evaluates lookups for real — resolved
16173
+ internal ids appear in `nlobjSublistIds`, misses and
16174
+ compile errors in `data.mappingErrors[]` — and handles
16175
+ `[*]` in plain substitutions and inside a branch's output.
16176
+ It does NOT apply the per-line evaluation to `[*]` used as a
16177
+ block-helper ARGUMENT (`{{#if line_items[*].x}}`,
16178
+ `{{#contains line_items[*].sku "_"}}`): the sublist comes
16179
+ back EMPTY with no error, whatever the expression would do
16180
+ in a run. An empty preview is therefore no evidence about
16181
+ such an expression — never report it as "renders nothing"
16182
+ or as invalid on that basis; validate it with a run.
16183
+ `<array>.@index.<field>` is likewise not evaluable in the
16184
+ preview (the record is dropped with no error).
16110
16185
  operator:
16111
16186
  type: string
16112
16187
  description: |-
@@ -16164,6 +16239,14 @@ components:
16164
16239
  TWO locations: `netsuite_da.lookups` and top-level `lookups`.
16165
16240
  Both arrays must hold byte-for-byte identical content — the
16166
16241
  MappingsAgent writes both on every save.
16242
+ - |-
16243
+ ## One context for body and sublist lookups
16244
+ Every lookup's `expression` renders against the whole source
16245
+ record. A lookup referenced from a sublist row
16246
+ (`mapping.lists[].fields[].lookupName`) is evaluated once per
16247
+ line and addresses the current line with `<array>[*].<field>`
16248
+ — never a bare line field. See `expression` for the failure
16249
+ modes and the preview caveat.
16167
16250
  x-celigo-agent:
16168
16251
  - lookup
16169
16252
  rawOverride:
@@ -31996,8 +32079,8 @@ components:
31996
32079
  - Requires the "soql" object with query configuration
31997
32080
 
31998
32081
  2. **Real-time Event Listeners** (type="distributed")
31999
- - Responds to Salesforce events as they happen
32000
- - Uses Salesforce's streaming API and platform events
32082
+ - Responds to Salesforce record creates, updates, and deletes as they happen
32083
+ - Fires through an Apex trigger on the object in the connected org (see `distributed`)
32001
32084
  - Always appears as a "Listener" in the flow builder UI
32002
32085
  - Requires the "distributed" object with event configuration
32003
32086
 
@@ -32062,7 +32145,7 @@ components:
32062
32145
  - **Use Cases**: Real-time synchronization, event-driven integration
32063
32146
  - **Dependencies**:
32064
32147
  - Only uses REST API (api field is ignored)
32065
- - Automatically configured with trigger logic in Salesforce
32148
+ - Depends on an Apex trigger on the object in the connected org: Integration Apps create it at installation; for a custom flow the customer deploys it from the export page's Required trigger code (see `distributed`)
32066
32149
  - Only compatible with standard export type (ignores delta/test/once)
32067
32150
  - |-
32068
32151
  ## IMPLEMENTATION CONSIDERATIONS
@@ -32526,34 +32609,21 @@ components:
32526
32609
  - SELECT Id, Name, (SELECT Id, FirstName, LastName FROM Contacts) FROM Account
32527
32610
  distributed:
32528
32611
  type: object
32529
- description: Real-time event listener configuration; required when `type` is `distributed` and not used otherwise. The system installs triggers in the connected Salesforce org and delivers records to the flow as create, update, and delete events occur — no scheduling or manual execution is involved.
32612
+ description: Real-time listener configuration; required when `type` is `distributed` and not used otherwise. Records reach the flow only when an Apex trigger on `sObjectType` in the connected org calls the Celigo package (`integrator_da__.RealTimeExporter.processExport()`) — no scheduling or manual execution is involved. Integration Apps create their triggers at installation; for a custom flow the customer deploys the trigger in Salesforce, starting from the code the export page shows under Required trigger.
32530
32613
  x-celigo-ai-guidance:
32531
- - Configuration for real-time Salesforce event-driven exports.
32532
32614
  - |-
32533
- ## FIELD BEHAVIOR
32534
-
32535
- This object defines real-time event listener settings:
32536
-
32537
- - REQUIRED when type="distributed"
32538
- - Not used when type="soql" or for blob exports
32539
- - Creates push-based integration triggered by Salesforce events
32540
- - Implements real-time processing of creates, updates, and deletes
32615
+ After creating a listener on a custom flow, relay what the Help Center's "Listen for real-time data
32616
+ from Salesforce" states: an Apex trigger is required per sObject type and, for a custom flow, the
32617
+ customer creates it in Salesforce — copy the export page's Required trigger code, replace `<name>`,
32618
+ and save it under Setup → Object Manager → <object> → Triggers → New; deploying to production also
32619
+ needs a test class with 75% coverage. Integration Apps create their triggers at installation.
32541
32620
  - |-
32542
- ## IMPLEMENTATION CONTEXT
32543
-
32544
- Distributed exports work fundamentally differently from SOQL exports:
32545
- - No scheduling or manual execution required
32546
- - Triggered automatically when records change in Salesforce
32547
- - Data flows in real-time as events occur
32548
- - Uses Salesforce's platform events and streaming API
32549
- - |-
32550
- ## TECHNICAL ARCHITECTURE
32551
-
32552
- When configured, the system:
32553
- 1. Creates custom triggers in the connected Salesforce org
32554
- 2. Establishes event listeners for the specified objects
32555
- 3. Processes events as they occur (create/update/delete operations)
32556
- 4. Delivers the changed records to the integration flow
32621
+ When a listener on an enabled flow never creates a job for a create, update, or delete, the
32622
+ Celigo-side causes are `distributed.disabled` true, an offline connection, and a qualifier the
32623
+ record does not satisfy — and any qualifier drops delete events (see `qualifier`). Also verify the
32624
+ Help Center's trigger requirement in the connected org: an active Apex trigger on the object whose
32625
+ code calls `integrator_da__.RealTimeExporter`, and the Celigo package reachable through the
32626
+ connection (`GET /v1/connections/{_id}/distributed`, documented in this spec set).
32557
32627
  properties:
32558
32628
  referencedFields:
32559
32629
  type:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@celigo/api-specs",
3
- "version": "0.2.110",
3
+ "version": "0.2.112",
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,8 +1,8 @@
1
1
  {
2
2
  "provenance": {
3
3
  "repo": "celigo/integrator-api-specs",
4
- "iasCommit": "155f6181",
5
- "generatedAt": "2026-10-14"
4
+ "iasCommit": "290f7bc1",
5
+ "generatedAt": "2026-10-15"
6
6
  },
7
7
  "roots": {
8
8
  "aiagent": 133,