@celigo/api-specs 0.2.111 → 0.2.113

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
@@ -3802,23 +3802,25 @@ components:
3802
3802
  - |-
3803
3803
  Two ways to specify the lookup, picked per import:
3804
3804
 
3805
+ - **Expression form** — the default choice: set `expression` to a
3806
+ NetSuite search-expression literal (the canonical patterns are on
3807
+ the `expression` field — `["internalid","is","{{{id}}}"]` for a
3808
+ record that carries the internal id, `externalid` and `cust*_*`
3809
+ variants, `anyof` for multi-match, AND/OR compounds). When
3810
+ `expression` is set, `searchField` / `operator` / `extract` are
3811
+ ignored.
3805
3812
  - **Simple form** — set `searchField` + `operator` (+ optional
3806
- `extract`). Use for single-criterion lookups against a built-in
3807
- NetSuite field. The platform builds the equivalent search
3808
- expression for you at runtime.
3809
- - **Expression form** — set `expression` to a NetSuite search-
3810
- expression literal. Use for compound (AND/OR) lookups, custom-
3811
- record-field lookups (`custbody_*` / `custrecord_*` /
3812
- `custentity_*`), and the `anyof` operator that the simple form
3813
- doesn't cover. When `expression` is set, `searchField` /
3814
- `operator` / `extract` are ignored. The expression form is the
3815
- common pattern in practice.
3813
+ `extract`) for a single-criterion lookup against a built-in
3814
+ NetSuite field; the platform builds the equivalent search
3815
+ expression at runtime. For the internal id itself the expression
3816
+ form above is the preferred path, and `anyof` is available only
3817
+ through `expression`.
3816
3818
  - |-
3817
3819
  The lookup result is what identifies the target record; on `update` a source
3818
3820
  field mapped to `internalid` is overridden by it. When the incoming record
3819
- already carries the NetSuite internal ID, point the lookup at that field
3820
- (simple form with `extract`, or an expression on the id field) rather than
3821
- removing the lookup.
3821
+ already carries the NetSuite internal ID, point the lookup at that field with
3822
+ the expression form — `["internalid","is","{{{id}}}"]` — rather than removing
3823
+ the lookup.
3822
3824
  properties:
3823
3825
  extract:
3824
3826
  type: string
@@ -3827,7 +3829,7 @@ components:
3827
3829
  - |-
3828
3830
  Path on the incoming source record (NOT the post-mapped record) whose value drives the lookup.
3829
3831
  Used with the simple form (`searchField` + `operator`).
3830
- Common values: `"internalId"`, `"externalId"`, `"id"`.
3832
+ Common values: `"externalId"`, `"id"`.
3831
3833
  Ignored when `expression` is set.
3832
3834
  examples:
3833
3835
  - externalId
@@ -3837,8 +3839,9 @@ components:
3837
3839
  x-celigo-ai-guidance:
3838
3840
  - |-
3839
3841
  NetSuite field the simple-form lookup queries against.
3840
- Common values: `"externalId"`, `"internalId"`, `"email"`, `"tranId"`,
3841
- `"name"`.
3842
+ Common values: `"externalId"`, `"email"`, `"tranId"`, `"name"`.
3843
+ Matching on the record's internal id is the expression form —
3844
+ `["internalid","is","{{{id}}}"]` — not a `searchField`.
3842
3845
  Ignored when `expression` is set.
3843
3846
  examples:
3844
3847
  - externalId
@@ -3848,9 +3851,9 @@ components:
3848
3851
  x-celigo-ai-guidance:
3849
3852
  - |-
3850
3853
  Comparison operator for the simple-form lookup.
3851
- Common values: `"is"` (exact match),
3852
- `"anyof"` (matches any of the given internal-id values), `"contains"`,
3853
- `"startswith"`, `"equalto"`.
3854
+ Common values: `"is"` (exact match), `"contains"`, `"startswith"`,
3855
+ `"equalto"`. Multi-match (`anyof`) is available only through
3856
+ `expression` (`["internalid","anyof","{{{id}}}"]`).
3854
3857
  Ignored when `expression` is set.
3855
3858
  expression:
3856
3859
  type: string
@@ -3943,6 +3946,15 @@ components:
3943
3946
  - DO NOT use `jsonSerialize` here — search expressions take
3944
3947
  scalar literals, not serialized JSON. Use `{{{id}}}` or
3945
3948
  `{{{[Field Name]}}}` directly.
3949
+ - |-
3950
+ ## Body-level only
3951
+
3952
+ This lookup identifies the record being imported, so bare
3953
+ body fields are the right paths here. A per-field lookup
3954
+ attached to a sublist row (`lookups[]` referenced from
3955
+ `mapping.lists[].fields[].lookupName`) is different: its
3956
+ expression addresses the current line with
3957
+ `<array>[*].<field>` — see `lookups[].expression`.
3946
3958
  hooks:
3947
3959
  type: object
3948
3960
  description: |
@@ -4288,6 +4300,13 @@ components:
4288
4300
  scalar extracts tag along.
4289
4301
  If no child uses `[*]` and none set `extract` at all (every child is a `hardCodedValue`),
4290
4302
  the sublist renders a single static line.
4303
+ - |-
4304
+ A row that resolves its value through `lookupName`
4305
+ (typically `extract: ""`) is driven by the sibling
4306
+ rows' `[*]` extracts, and the lookup's `expression`
4307
+ addresses the current line with the same
4308
+ `<array>[*].<field>` path — see
4309
+ `netsuite_da.lookups[].expression`.
4291
4310
  generate:
4292
4311
  type: string
4293
4312
  description: NetSuite sublist field ID to write to.
@@ -4524,10 +4543,69 @@ components:
4524
4543
  - internalid
4525
4544
  expression:
4526
4545
  type: string
4546
+ x-celigo-agent:
4547
+ - handlebars
4527
4548
  description: |-
4528
4549
  Optional advanced-search expression (NetSuite saved-search
4529
4550
  DSL) for multi-criterion lookups. When present, supersedes
4530
4551
  `searchField` / `operator` — those fields are ignored.
4552
+ Handlebars inside the expression is rendered against the
4553
+ whole source record before the search runs; a lookup on a
4554
+ sublist row reaches the current line through
4555
+ `<array>[*].<field>` (for example `line_items[*].sku`).
4556
+ x-celigo-ai-guidance:
4557
+ - |-
4558
+ ## Evaluation context — the whole source record, no `record.` prefix
4559
+
4560
+ The expression's Handlebars renders against the incoming
4561
+ source record as the context root (the record is NOT
4562
+ wrapped under `record`), then the rendered JSON array is
4563
+ sent to NetSuite as the search criteria. Body-level fields
4564
+ are addressed bare: `{{{id}}}`, `{{{email}}}`.
4565
+ - |-
4566
+ ## Sublist-row lookups address the line with `<array>[*].<field>`
4567
+
4568
+ A lookup referenced from a sublist mapping row
4569
+ (`mapping.lists[].fields[].lookupName`) still receives the
4570
+ whole record; the current line's fields are reached with the
4571
+ same bracket-star path the sublist extracts use —
4572
+ `{{{line_items[*].sku}}}` resolves the line's item (one line
4573
+ per sublist row). A bare line field (`{{sku}}`,
4574
+ `{{#contains sku "_"}}`) is undefined at the record root: a
4575
+ helper that receives it fails every record with
4576
+ `INVALID_HANDLE_BAR_EXPRESSION` — `Could not compile handle
4577
+ bar "<expression>" because "Cannot call method "indexOf" of
4578
+ undefined"` — before anything reaches NetSuite. When an
4579
+ audit diff shows `<array>[*].` removed from the expression
4580
+ right before such errors began, that edit is the cause; do
4581
+ not look for a line missing the field.
4582
+ - |-
4583
+ ## Rendered unmatched
4584
+
4585
+ A rendered value NetSuite does not match fails the record
4586
+ with `VALUE_LOOKUP_FAILED` — `Could not find a match for
4587
+ "<rendered criteria>" for the record type "<recordType>"`
4588
+ — quoting the criteria exactly as rendered, so the message
4589
+ shows what the expression produced for that line. With
4590
+ `allowFailures: true` the `default` value is used instead
4591
+ and no error is raised. Give every branch an output.
4592
+ - |-
4593
+ ## The mapping preview cannot evaluate `[*]` inside a block-helper argument
4594
+
4595
+ `PUT /v1/netsuiteDA/previewImportMappingFields` (the mapping
4596
+ editor's Preview) evaluates lookups for real — resolved
4597
+ internal ids appear in `nlobjSublistIds`, misses and
4598
+ compile errors in `data.mappingErrors[]` — and handles
4599
+ `[*]` in plain substitutions and inside a branch's output.
4600
+ It does NOT apply the per-line evaluation to `[*]` used as a
4601
+ block-helper ARGUMENT (`{{#if line_items[*].x}}`,
4602
+ `{{#contains line_items[*].sku "_"}}`): the sublist comes
4603
+ back EMPTY with no error, whatever the expression would do
4604
+ in a run. An empty preview is therefore no evidence about
4605
+ such an expression — never report it as "renders nothing"
4606
+ or as invalid on that basis; validate it with a run.
4607
+ `<array>.@index.<field>` is likewise not evaluable in the
4608
+ preview (the record is dropped with no error).
4531
4609
  operator:
4532
4610
  type: string
4533
4611
  description: |-
@@ -4585,6 +4663,14 @@ components:
4585
4663
  TWO locations: `netsuite_da.lookups` and top-level `lookups`.
4586
4664
  Both arrays must hold byte-for-byte identical content — the
4587
4665
  MappingsAgent writes both on every save.
4666
+ - |-
4667
+ ## One context for body and sublist lookups
4668
+ Every lookup's `expression` renders against the whole source
4669
+ record. A lookup referenced from a sublist row
4670
+ (`mapping.lists[].fields[].lookupName`) is evaluated once per
4671
+ line and addresses the current line with `<array>[*].<field>`
4672
+ — never a bare line field. See `expression` for the failure
4673
+ modes and the preview caveat.
4588
4674
  x-celigo-agent:
4589
4675
  - lookup
4590
4676
  rawOverride:
package/dist/tool.yml CHANGED
@@ -15381,23 +15381,25 @@ components:
15381
15381
  - |-
15382
15382
  Two ways to specify the lookup, picked per import:
15383
15383
 
15384
+ - **Expression form** — the default choice: set `expression` to a
15385
+ NetSuite search-expression literal (the canonical patterns are on
15386
+ the `expression` field — `["internalid","is","{{{id}}}"]` for a
15387
+ record that carries the internal id, `externalid` and `cust*_*`
15388
+ variants, `anyof` for multi-match, AND/OR compounds). When
15389
+ `expression` is set, `searchField` / `operator` / `extract` are
15390
+ ignored.
15384
15391
  - **Simple form** — set `searchField` + `operator` (+ optional
15385
- `extract`). Use for single-criterion lookups against a built-in
15386
- NetSuite field. The platform builds the equivalent search
15387
- expression for you at runtime.
15388
- - **Expression form** — set `expression` to a NetSuite search-
15389
- expression literal. Use for compound (AND/OR) lookups, custom-
15390
- record-field lookups (`custbody_*` / `custrecord_*` /
15391
- `custentity_*`), and the `anyof` operator that the simple form
15392
- doesn't cover. When `expression` is set, `searchField` /
15393
- `operator` / `extract` are ignored. The expression form is the
15394
- common pattern in practice.
15392
+ `extract`) for a single-criterion lookup against a built-in
15393
+ NetSuite field; the platform builds the equivalent search
15394
+ expression at runtime. For the internal id itself the expression
15395
+ form above is the preferred path, and `anyof` is available only
15396
+ through `expression`.
15395
15397
  - |-
15396
15398
  The lookup result is what identifies the target record; on `update` a source
15397
15399
  field mapped to `internalid` is overridden by it. When the incoming record
15398
- already carries the NetSuite internal ID, point the lookup at that field
15399
- (simple form with `extract`, or an expression on the id field) rather than
15400
- removing the lookup.
15400
+ already carries the NetSuite internal ID, point the lookup at that field with
15401
+ the expression form — `["internalid","is","{{{id}}}"]` — rather than removing
15402
+ the lookup.
15401
15403
  properties:
15402
15404
  extract:
15403
15405
  type: string
@@ -15406,7 +15408,7 @@ components:
15406
15408
  - |-
15407
15409
  Path on the incoming source record (NOT the post-mapped record) whose value drives the lookup.
15408
15410
  Used with the simple form (`searchField` + `operator`).
15409
- Common values: `"internalId"`, `"externalId"`, `"id"`.
15411
+ Common values: `"externalId"`, `"id"`.
15410
15412
  Ignored when `expression` is set.
15411
15413
  examples:
15412
15414
  - externalId
@@ -15416,8 +15418,9 @@ components:
15416
15418
  x-celigo-ai-guidance:
15417
15419
  - |-
15418
15420
  NetSuite field the simple-form lookup queries against.
15419
- Common values: `"externalId"`, `"internalId"`, `"email"`, `"tranId"`,
15420
- `"name"`.
15421
+ Common values: `"externalId"`, `"email"`, `"tranId"`, `"name"`.
15422
+ Matching on the record's internal id is the expression form —
15423
+ `["internalid","is","{{{id}}}"]` — not a `searchField`.
15421
15424
  Ignored when `expression` is set.
15422
15425
  examples:
15423
15426
  - externalId
@@ -15427,9 +15430,9 @@ components:
15427
15430
  x-celigo-ai-guidance:
15428
15431
  - |-
15429
15432
  Comparison operator for the simple-form lookup.
15430
- Common values: `"is"` (exact match),
15431
- `"anyof"` (matches any of the given internal-id values), `"contains"`,
15432
- `"startswith"`, `"equalto"`.
15433
+ Common values: `"is"` (exact match), `"contains"`, `"startswith"`,
15434
+ `"equalto"`. Multi-match (`anyof`) is available only through
15435
+ `expression` (`["internalid","anyof","{{{id}}}"]`).
15433
15436
  Ignored when `expression` is set.
15434
15437
  expression:
15435
15438
  type: string
@@ -15522,6 +15525,15 @@ components:
15522
15525
  - DO NOT use `jsonSerialize` here — search expressions take
15523
15526
  scalar literals, not serialized JSON. Use `{{{id}}}` or
15524
15527
  `{{{[Field Name]}}}` directly.
15528
+ - |-
15529
+ ## Body-level only
15530
+
15531
+ This lookup identifies the record being imported, so bare
15532
+ body fields are the right paths here. A per-field lookup
15533
+ attached to a sublist row (`lookups[]` referenced from
15534
+ `mapping.lists[].fields[].lookupName`) is different: its
15535
+ expression addresses the current line with
15536
+ `<array>[*].<field>` — see `lookups[].expression`.
15525
15537
  hooks:
15526
15538
  type: object
15527
15539
  description: |
@@ -15867,6 +15879,13 @@ components:
15867
15879
  scalar extracts tag along.
15868
15880
  If no child uses `[*]` and none set `extract` at all (every child is a `hardCodedValue`),
15869
15881
  the sublist renders a single static line.
15882
+ - |-
15883
+ A row that resolves its value through `lookupName`
15884
+ (typically `extract: ""`) is driven by the sibling
15885
+ rows' `[*]` extracts, and the lookup's `expression`
15886
+ addresses the current line with the same
15887
+ `<array>[*].<field>` path — see
15888
+ `netsuite_da.lookups[].expression`.
15870
15889
  generate:
15871
15890
  type: string
15872
15891
  description: NetSuite sublist field ID to write to.
@@ -16103,10 +16122,69 @@ components:
16103
16122
  - internalid
16104
16123
  expression:
16105
16124
  type: string
16125
+ x-celigo-agent:
16126
+ - handlebars
16106
16127
  description: |-
16107
16128
  Optional advanced-search expression (NetSuite saved-search
16108
16129
  DSL) for multi-criterion lookups. When present, supersedes
16109
16130
  `searchField` / `operator` — those fields are ignored.
16131
+ Handlebars inside the expression is rendered against the
16132
+ whole source record before the search runs; a lookup on a
16133
+ sublist row reaches the current line through
16134
+ `<array>[*].<field>` (for example `line_items[*].sku`).
16135
+ x-celigo-ai-guidance:
16136
+ - |-
16137
+ ## Evaluation context — the whole source record, no `record.` prefix
16138
+
16139
+ The expression's Handlebars renders against the incoming
16140
+ source record as the context root (the record is NOT
16141
+ wrapped under `record`), then the rendered JSON array is
16142
+ sent to NetSuite as the search criteria. Body-level fields
16143
+ are addressed bare: `{{{id}}}`, `{{{email}}}`.
16144
+ - |-
16145
+ ## Sublist-row lookups address the line with `<array>[*].<field>`
16146
+
16147
+ A lookup referenced from a sublist mapping row
16148
+ (`mapping.lists[].fields[].lookupName`) still receives the
16149
+ whole record; the current line's fields are reached with the
16150
+ same bracket-star path the sublist extracts use —
16151
+ `{{{line_items[*].sku}}}` resolves the line's item (one line
16152
+ per sublist row). A bare line field (`{{sku}}`,
16153
+ `{{#contains sku "_"}}`) is undefined at the record root: a
16154
+ helper that receives it fails every record with
16155
+ `INVALID_HANDLE_BAR_EXPRESSION` — `Could not compile handle
16156
+ bar "<expression>" because "Cannot call method "indexOf" of
16157
+ undefined"` — before anything reaches NetSuite. When an
16158
+ audit diff shows `<array>[*].` removed from the expression
16159
+ right before such errors began, that edit is the cause; do
16160
+ not look for a line missing the field.
16161
+ - |-
16162
+ ## Rendered unmatched
16163
+
16164
+ A rendered value NetSuite does not match fails the record
16165
+ with `VALUE_LOOKUP_FAILED` — `Could not find a match for
16166
+ "<rendered criteria>" for the record type "<recordType>"`
16167
+ — quoting the criteria exactly as rendered, so the message
16168
+ shows what the expression produced for that line. With
16169
+ `allowFailures: true` the `default` value is used instead
16170
+ and no error is raised. Give every branch an output.
16171
+ - |-
16172
+ ## The mapping preview cannot evaluate `[*]` inside a block-helper argument
16173
+
16174
+ `PUT /v1/netsuiteDA/previewImportMappingFields` (the mapping
16175
+ editor's Preview) evaluates lookups for real — resolved
16176
+ internal ids appear in `nlobjSublistIds`, misses and
16177
+ compile errors in `data.mappingErrors[]` — and handles
16178
+ `[*]` in plain substitutions and inside a branch's output.
16179
+ It does NOT apply the per-line evaluation to `[*]` used as a
16180
+ block-helper ARGUMENT (`{{#if line_items[*].x}}`,
16181
+ `{{#contains line_items[*].sku "_"}}`): the sublist comes
16182
+ back EMPTY with no error, whatever the expression would do
16183
+ in a run. An empty preview is therefore no evidence about
16184
+ such an expression — never report it as "renders nothing"
16185
+ or as invalid on that basis; validate it with a run.
16186
+ `<array>.@index.<field>` is likewise not evaluable in the
16187
+ preview (the record is dropped with no error).
16110
16188
  operator:
16111
16189
  type: string
16112
16190
  description: |-
@@ -16164,6 +16242,14 @@ components:
16164
16242
  TWO locations: `netsuite_da.lookups` and top-level `lookups`.
16165
16243
  Both arrays must hold byte-for-byte identical content — the
16166
16244
  MappingsAgent writes both on every save.
16245
+ - |-
16246
+ ## One context for body and sublist lookups
16247
+ Every lookup's `expression` renders against the whole source
16248
+ record. A lookup referenced from a sublist row
16249
+ (`mapping.lists[].fields[].lookupName`) is evaluated once per
16250
+ line and addresses the current line with `<array>[*].<field>`
16251
+ — never a bare line field. See `expression` for the failure
16252
+ modes and the preview caveat.
16167
16253
  x-celigo-agent:
16168
16254
  - lookup
16169
16255
  rawOverride:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@celigo/api-specs",
3
- "version": "0.2.111",
3
+ "version": "0.2.113",
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": "5353c280",
5
- "generatedAt": "2026-10-14"
4
+ "iasCommit": "af39c6bc",
5
+ "generatedAt": "2026-10-15"
6
6
  },
7
7
  "roots": {
8
8
  "aiagent": 133,