@celigo/api-specs 0.2.127 → 0.2.129
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/ai-agent.yml +8 -9
- package/dist/alert.yml +2 -2
- package/dist/asynchelper.yml +5 -6
- package/dist/audit.yml +6 -6
- package/dist/editransaction.yml +2 -2
- package/dist/eventreport.yml +2 -2
- package/dist/export.yml +14 -16
- package/dist/filedefinitionrules.yml +1 -1
- package/dist/flow.yml +3 -3
- package/dist/import.yml +154 -148
- package/dist/job.yml +2 -2
- package/dist/notification.yml +6 -6
- package/dist/script.yml +2 -2
- package/dist/stack.yml +2 -2
- package/dist/subscription.yml +6 -5
- package/dist/sync.yml +12 -12
- package/dist/tool.yml +156 -151
- package/package.json +1 -1
- package/schemas.json +1 -1
package/dist/import.yml
CHANGED
|
@@ -849,12 +849,12 @@ paths:
|
|
|
849
849
|
value:
|
|
850
850
|
data:
|
|
851
851
|
- _id: 5d67ab3992080024596e0d8f
|
|
852
|
-
email:
|
|
852
|
+
email: jane@example.com
|
|
853
853
|
verified: true
|
|
854
854
|
developer: true
|
|
855
|
-
name:
|
|
856
|
-
role:
|
|
857
|
-
company:
|
|
855
|
+
name: Jane Doe
|
|
856
|
+
role: Engineer
|
|
857
|
+
company: acme
|
|
858
858
|
createdAt: '2019-08-29T10:38:50.396Z'
|
|
859
859
|
lastModified: '2024-09-25T14:17:50.802Z'
|
|
860
860
|
importConfig:
|
|
@@ -903,8 +903,8 @@ paths:
|
|
|
903
903
|
data:
|
|
904
904
|
nlobjFieldIds:
|
|
905
905
|
custrecord_user_id: 5d67ab3992080024596e0d8f
|
|
906
|
-
custrecord_user_email:
|
|
907
|
-
custrecord_user_name:
|
|
906
|
+
custrecord_user_email: jane@example.com
|
|
907
|
+
custrecord_user_name: Jane Doe
|
|
908
908
|
custrecord_user_onboarded: 'true'
|
|
909
909
|
nlobjSublistIds: {}
|
|
910
910
|
originalSize: 1
|
|
@@ -1998,30 +1998,19 @@ components:
|
|
|
1998
1998
|
would be bare ``{{{jsonSerialize record}}}`` with nothing
|
|
1999
1999
|
around it, you don't need a template at all.
|
|
2000
2000
|
|
|
2001
|
-
Production frequency: roughly 1 in 3 active HTTPImports leaves
|
|
2002
|
-
this field empty (~35% null / empty array); closer to 1 in 2
|
|
2003
|
-
once you count the additional ~12% of body entries that are
|
|
2004
|
-
blank strings. The dominant case is "no body template".
|
|
2005
|
-
|
|
2006
2001
|
Leave undefined for:
|
|
2007
2002
|
- REST APIs accepting JSON CRUD payloads (the destination
|
|
2008
2003
|
already wants exactly the post-mapped record shape).
|
|
2009
|
-
- GraphQL destinations — do NOT author the body template here.
|
|
2010
|
-
The dedicated GraphQL specialist owns the
|
|
2011
|
-
``{query, operationName, variables}`` shape and routes the
|
|
2012
|
-
post-mapped record into ``variables`` automatically. Roughly
|
|
2013
|
-
96% of all wrapped-``jsonSerialize record`` uses in production
|
|
2014
|
-
are GraphQL mutations; every one of those should go through
|
|
2015
|
-
the GraphQL specialist, not through this body template.
|
|
2016
2004
|
- Any case where the destination wants the mapped record as-is.
|
|
2005
|
+
|
|
2006
|
+
GraphQL destinations are different: the body is the stringified
|
|
2007
|
+
``{query, operationName, variables}`` envelope described under
|
|
2008
|
+
``formType``, with the post-mapped record passed in
|
|
2009
|
+
``variables``.
|
|
2017
2010
|
- |-
|
|
2018
|
-
## SET THIS FIELD when one of the
|
|
2011
|
+
## SET THIS FIELD when one of the patterns below applies
|
|
2019
2012
|
|
|
2020
|
-
|
|
2021
|
-
across HTTPImports in the last 30 days (Celigo-internal users
|
|
2022
|
-
excluded). Choose the pattern that fits the destination's
|
|
2023
|
-
shape, then write marker ``instructions`` describing intent
|
|
2024
|
-
(let the Handlebars specialist produce the literal template).
|
|
2013
|
+
Choose the pattern that fits the destination's shape.
|
|
2025
2014
|
|
|
2026
2015
|
### Pattern A — ``{{{jsonSerialize record}}}`` inside a static wrapper
|
|
2027
2016
|
|
|
@@ -2033,13 +2022,12 @@ components:
|
|
|
2033
2022
|
destination's field shape; the body owns the transport-level
|
|
2034
2023
|
scaffolding.
|
|
2035
2024
|
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
|
|
2040
|
-
"add a batch header with timestamp + interface name", etc.).
|
|
2025
|
+
Rare for non-GraphQL destinations, but real; the use cases
|
|
2026
|
+
that fit are obvious when the user describes them ("wrap each
|
|
2027
|
+
request in a SQS-style message envelope", "add a batch header
|
|
2028
|
+
with timestamp + interface name", etc.).
|
|
2041
2029
|
|
|
2042
|
-
|
|
2030
|
+
Typical shapes:
|
|
2043
2031
|
- Message-bus envelope:
|
|
2044
2032
|
``{"MessageBody": {"class": "EntityUpdate", "payload": {{{jsonSerialize record}}}}}``
|
|
2045
2033
|
- Metadata wrap:
|
|
@@ -2050,8 +2038,7 @@ components:
|
|
|
2050
2038
|
NEVER emit BARE ``{{{jsonSerialize record}}}`` with no wrapper.
|
|
2051
2039
|
The platform sends the post-mapped record as JSON automatically
|
|
2052
2040
|
when body is undefined; bare ``jsonSerialize record`` produces
|
|
2053
|
-
identical wire output
|
|
2054
|
-
entries — every one of those is redundant config the user has
|
|
2041
|
+
identical wire output, so it is redundant config the user has
|
|
2055
2042
|
to maintain for zero benefit.
|
|
2056
2043
|
|
|
2057
2044
|
### Pattern B — Batch / page wrapper around mapped records
|
|
@@ -2098,15 +2085,14 @@ components:
|
|
|
2098
2085
|
anti-pattern is the ``jsonSerialize`` wrap, not any particular
|
|
2099
2086
|
path shape.
|
|
2100
2087
|
|
|
2101
|
-
-
|
|
2088
|
+
- Essentially never needed.
|
|
2102
2089
|
- Failure mode: the body validator sees the PRE-mapped sample
|
|
2103
2090
|
shape, can't resolve the post-mapped path during validation,
|
|
2104
2091
|
and ``jsonSerialize`` on an unresolved path raises
|
|
2105
2092
|
``Helper {{jsonSerialize}} expects an argument`` — the
|
|
2106
2093
|
template fails validation even when it would render at
|
|
2107
|
-
runtime.
|
|
2108
|
-
|
|
2109
|
-
failure.
|
|
2094
|
+
runtime. Variations (``getValue`` wrappers, alternate paths)
|
|
2095
|
+
fail the same way.
|
|
2110
2096
|
|
|
2111
2097
|
If you find yourself wanting to reference a per-field
|
|
2112
2098
|
post-mapped scalar wrapped in ``jsonSerialize``, your situation
|
|
@@ -2169,16 +2155,6 @@ components:
|
|
|
2169
2155
|
before choosing: form-data APIs get the parts array above;
|
|
2170
2156
|
multipart/related APIs get the hand-authored document. Never
|
|
2171
2157
|
mix the two shapes in one body.
|
|
2172
|
-
- |-
|
|
2173
|
-
## Marker instructions style
|
|
2174
|
-
|
|
2175
|
-
When emitting a ``$agent: handlebars`` marker at this field,
|
|
2176
|
-
write the ``instructions`` as INTENT (what the body should
|
|
2177
|
-
produce: destination fields, shape, encoding), not as literal
|
|
2178
|
-
Handlebars syntax. Embedding literal ``{{{jsonSerialize record.X}}}``
|
|
2179
|
-
in the instructions risks the specialist following it verbatim
|
|
2180
|
-
even when a simpler template would work — one of the ways the
|
|
2181
|
-
per-field anti-pattern above gets introduced.
|
|
2182
2158
|
examples:
|
|
2183
2159
|
- - '{"name": "{{record.name}}", "email": "{{record.email}}"}'
|
|
2184
2160
|
- - '{"requestData": {{{jsonSerialize record}}}}'
|
|
@@ -2270,9 +2246,7 @@ components:
|
|
|
2270
2246
|
- |-
|
|
2271
2247
|
The value MUST match the ``name`` of a lookup entry in ``http.lookups``.
|
|
2272
2248
|
The lookup config itself (HTTP path, method, extract,
|
|
2273
|
-
fallback chain) is
|
|
2274
|
-
specialist via a ``$agent:
|
|
2275
|
-
lookup`` marker.
|
|
2249
|
+
fallback chain) is defined separately, in that entry.
|
|
2276
2250
|
- |-
|
|
2277
2251
|
## Mutually exclusive with ``existingExtract``
|
|
2278
2252
|
|
|
@@ -2752,9 +2726,8 @@ components:
|
|
|
2752
2726
|
|
|
2753
2727
|
The Celigo platform persists lookups in TWO locations on an HTTP
|
|
2754
2728
|
import: top-level ``lookups`` and ``http.lookups``. Both arrays
|
|
2755
|
-
MUST hold byte-for-byte identical content
|
|
2756
|
-
|
|
2757
|
-
callers never have to write both manually.
|
|
2729
|
+
MUST hold byte-for-byte identical content, so write both on
|
|
2730
|
+
every save.
|
|
2758
2731
|
- |-
|
|
2759
2732
|
## Static vs dynamic vs cached
|
|
2760
2733
|
|
|
@@ -3030,7 +3003,7 @@ components:
|
|
|
3030
3003
|
computedObject.fileName." — an error the platform labels source `internal` although the
|
|
3031
3004
|
template is the cause. The run-time-proven way to keep the source file's name on a
|
|
3032
3005
|
`blob: true` import is `{{record.fileMeta.fileName}}` on `file.fileName` with this field
|
|
3033
|
-
omitted (
|
|
3006
|
+
omitted (recorded runs of an FTP blob import set exactly that); the same template
|
|
3034
3007
|
on this field has not been run. The field's editor preview (data version 1, its default)
|
|
3035
3008
|
exposes the record as `data` —
|
|
3036
3009
|
the `{blobKey, fileMeta}` record on a blob import, the page's record array otherwise —
|
|
@@ -3410,8 +3383,8 @@ components:
|
|
|
3410
3383
|
## Mirror invariant
|
|
3411
3384
|
The Celigo platform persists lookups in TWO locations on a JDBC
|
|
3412
3385
|
import: top-level `lookups` and `jdbc.lookups`. Both arrays
|
|
3413
|
-
must hold byte-for-byte identical content
|
|
3414
|
-
|
|
3386
|
+
must hold byte-for-byte identical content, so write both on every
|
|
3387
|
+
save.
|
|
3415
3388
|
x-celigo-agent:
|
|
3416
3389
|
- lookup
|
|
3417
3390
|
Mongodb:
|
|
@@ -3890,25 +3863,22 @@ components:
|
|
|
3890
3863
|
substitutions FIRST against the incoming source record (pre-mapped),
|
|
3891
3864
|
then the substituted expression is sent to NetSuite as a saved-search query.
|
|
3892
3865
|
- |-
|
|
3893
|
-
## Handlebars conventions
|
|
3866
|
+
## Handlebars conventions
|
|
3894
3867
|
|
|
3895
3868
|
- **No `record.` prefix** — substitutions reference top-level
|
|
3896
3869
|
source-record fields directly. `{{{id}}}` / `{{{Id}}}` /
|
|
3897
3870
|
`{{{externalid}}}` / `{{{[Internal ID]}}}` — NOT
|
|
3898
|
-
`{{{record.id}}}`.
|
|
3899
|
-
|
|
3900
|
-
|
|
3901
|
-
|
|
3902
|
-
|
|
3903
|
-
where you want the platform's default HTML-escape (rare in
|
|
3904
|
-
this field).
|
|
3871
|
+
`{{{record.id}}}`. Top-level paths are the established
|
|
3872
|
+
convention.
|
|
3873
|
+
- **Triple braces `{{{...}}}`** are the preferred form;
|
|
3874
|
+
double-brace `{{...}}` also works for cases where you want
|
|
3875
|
+
the platform's default HTML-escape (rare in this field).
|
|
3905
3876
|
- **Bracket notation for field names with spaces or special
|
|
3906
3877
|
chars**: `{{{[Field With Spaces]}}}`, `{{{[Internal ID]}}}`.
|
|
3907
|
-
Anchored to ~10% of production expressions.
|
|
3908
3878
|
- |-
|
|
3909
3879
|
## Canonical patterns
|
|
3910
3880
|
|
|
3911
|
-
### Simple lookup by internal ID (most common
|
|
3881
|
+
### Simple lookup by internal ID (most common)
|
|
3912
3882
|
|
|
3913
3883
|
`["internalid","is","{{{id}}}"]`
|
|
3914
3884
|
|
|
@@ -3979,8 +3949,8 @@ components:
|
|
|
3979
3949
|
`is` / `equalto` / `internalid anyof` value to `isempty` before the
|
|
3980
3950
|
search. On `restletVersion: suiteapp2.0` that search is not treated as
|
|
3981
3951
|
"no match": it can return existing records, and `addupdate` then
|
|
3982
|
-
updates one of them — an unrelated record receives the mapping (
|
|
3983
|
-
|
|
3952
|
+
updates one of them — an unrelated record receives the mapping (for
|
|
3953
|
+
example, a `cant_modify_sub` error on a customer the record never
|
|
3984
3954
|
named). SuiteBundle and SuiteApp 1.0 discard a blank `internalid`
|
|
3985
3955
|
match and create. Design so the operational lookup never renders
|
|
3986
3956
|
empty: key it on a value every record carries (the source id stored
|
|
@@ -4067,10 +4037,6 @@ components:
|
|
|
4067
4037
|
- |-
|
|
4068
4038
|
Validated via the dedicated `PUT /v1/netsuiteDA/previewImportMappingFields`
|
|
4069
4039
|
endpoint (NOT `/v1/processors/mapperProcessor`).
|
|
4070
|
-
- |-
|
|
4071
|
-
Managed by the MappingsAgent (`$agent: mapping`) — resource-authoring
|
|
4072
|
-
agents must emit a specialist marker at this field rather than
|
|
4073
|
-
generating the mapping inline.
|
|
4074
4040
|
properties:
|
|
4075
4041
|
fields:
|
|
4076
4042
|
type: array
|
|
@@ -4147,8 +4113,8 @@ components:
|
|
|
4147
4113
|
this block ONLY when the destination record type genuinely requires the
|
|
4148
4114
|
subrecord.
|
|
4149
4115
|
- |-
|
|
4150
|
-
**
|
|
4151
|
-
|
|
4116
|
+
**Common `recordType` values** (most common
|
|
4117
|
+
first):
|
|
4152
4118
|
* `inventorydetail` — by far the most common.
|
|
4153
4119
|
Serial / lot / bin assignments on sales-order,
|
|
4154
4120
|
item-fulfillment, purchase-order, and inventory-
|
|
@@ -4218,8 +4184,8 @@ components:
|
|
|
4218
4184
|
type: string
|
|
4219
4185
|
description: |
|
|
4220
4186
|
Secondary reference-field identifier used on a
|
|
4221
|
-
small fraction of subrecord blocks
|
|
4222
|
-
|
|
4187
|
+
small fraction of subrecord blocks. Exact
|
|
4188
|
+
semantics are not publicly
|
|
4223
4189
|
documented by Celigo — match the value on
|
|
4224
4190
|
existing resources when present; do NOT
|
|
4225
4191
|
synthesize one. Leave unset unless a template
|
|
@@ -4248,6 +4214,22 @@ components:
|
|
|
4248
4214
|
existing record: on an `add`-only operation every record fails with
|
|
4249
4215
|
`The mapping condition:"record_updated" not supported for the
|
|
4250
4216
|
operation`. It works on `addupdate` and `update`.
|
|
4217
|
+
- |-
|
|
4218
|
+
The condition is one of the fixed `when` values — there is no
|
|
4219
|
+
predicate over a source field ("when `customer.id` is not empty",
|
|
4220
|
+
"when `channel.name` is Point of Sale" cannot be written here).
|
|
4221
|
+
`extract_not_empty` is the only source-driven gate: on a lookup row
|
|
4222
|
+
it reads the row's `extract`, and when that is empty the row is
|
|
4223
|
+
skipped and the field is left unset — nothing substitutes a value.
|
|
4224
|
+
Value-dependent behaviour (a fallback record when the key is
|
|
4225
|
+
missing) belongs inside the lookup's `expression` (see
|
|
4226
|
+
`lookups[].expression`).
|
|
4227
|
+
- |-
|
|
4228
|
+
Two rows with the same `generate` are not a fallback pair: the
|
|
4229
|
+
last row for a destination decides it alone — when its condition
|
|
4230
|
+
skips it the field stays empty even if an earlier row produced a
|
|
4231
|
+
value, and when it applies it overwrites the earlier row's value
|
|
4232
|
+
(`ignore_if_set` reads the target record, not an earlier row).
|
|
4251
4233
|
properties:
|
|
4252
4234
|
lookupName:
|
|
4253
4235
|
type: string
|
|
@@ -4402,9 +4384,8 @@ components:
|
|
|
4402
4384
|
this block ONLY when the destination record type genuinely requires the
|
|
4403
4385
|
subrecord.
|
|
4404
4386
|
- |-
|
|
4405
|
-
**
|
|
4406
|
-
|
|
4407
|
-
imports):
|
|
4387
|
+
**Common `recordType` values** (most
|
|
4388
|
+
common first):
|
|
4408
4389
|
* `inventorydetail` — by far the most
|
|
4409
4390
|
common. Serial / lot / bin assignments on
|
|
4410
4391
|
sales-order, item-fulfillment, purchase-
|
|
@@ -4472,9 +4453,9 @@ components:
|
|
|
4472
4453
|
type: string
|
|
4473
4454
|
description: |
|
|
4474
4455
|
Secondary reference-field identifier used
|
|
4475
|
-
on a small fraction of subrecord blocks
|
|
4476
|
-
|
|
4477
|
-
|
|
4456
|
+
on a small fraction of subrecord blocks.
|
|
4457
|
+
Exact semantics are not publicly
|
|
4458
|
+
documented by Celigo — match
|
|
4478
4459
|
the value on existing resources when
|
|
4479
4460
|
present; do NOT synthesize one. Leave
|
|
4480
4461
|
unset unless a template clearly requires
|
|
@@ -4503,6 +4484,18 @@ components:
|
|
|
4503
4484
|
rows in live verification. Do not rely on that tolerance — use
|
|
4504
4485
|
`when: record_updated` only on operations that can update
|
|
4505
4486
|
records (`addupdate` / `update`).
|
|
4487
|
+
- |-
|
|
4488
|
+
The condition is one of the fixed `when` values — the same
|
|
4489
|
+
closed set as body rows, with no predicate over a source
|
|
4490
|
+
field; `extract_not_empty` skips the row on the lines whose
|
|
4491
|
+
extract is empty and leaves that line's field unset. Two
|
|
4492
|
+
sublist rows with the same `generate` are not a fallback
|
|
4493
|
+
pair either, and the order rule is not the body rows': among
|
|
4494
|
+
extract rows the last row decides each line alone (a skipped
|
|
4495
|
+
last row leaves the line's field unset even when an earlier
|
|
4496
|
+
row produced a value), while a hard-coded row's value lands
|
|
4497
|
+
on every line whatever its position — a later conditional
|
|
4498
|
+
extract row does not override it.
|
|
4506
4499
|
properties:
|
|
4507
4500
|
lookupName:
|
|
4508
4501
|
type: string
|
|
@@ -4629,6 +4622,32 @@ components:
|
|
|
4629
4622
|
shows what the expression produced for that line. With
|
|
4630
4623
|
`allowFailures: true` the `default` value is used instead
|
|
4631
4624
|
and no error is raised. Give every branch an output.
|
|
4625
|
+
- |-
|
|
4626
|
+
## An empty substitution searches `isempty`
|
|
4627
|
+
|
|
4628
|
+
When the source path a criterion reads is null or absent
|
|
4629
|
+
(`["custentity_celigo_etail_cust_id","is","{{{customer.id}}}"]`
|
|
4630
|
+
on an order with no customer), the engine does not fail on
|
|
4631
|
+
the missing input: it searches the field with an `isempty`
|
|
4632
|
+
criterion, so the lookup now matches every target record
|
|
4633
|
+
whose field is BLANK. Two or more such records fail the
|
|
4634
|
+
record with `VALUE_LOOKUP_FAILED` — `More than one match
|
|
4635
|
+
for "[<field>,"isempty"]" for the record type "<recordType>"`
|
|
4636
|
+
(the message quotes the search field, never the empty
|
|
4637
|
+
source path); none fail it as `Could not find a match`;
|
|
4638
|
+
exactly one silently resolves to that record. Keep an empty
|
|
4639
|
+
key out of the search inside the expression — branch on
|
|
4640
|
+
the key: `{{#if customer.id}}[["custentity_celigo_etail_cust_id",
|
|
4641
|
+
"is","{{{customer.id}}}"]]{{else}}[["internalid","anyof",
|
|
4642
|
+
"<fallback internal id>"]]{{/if}}` routes records without a
|
|
4643
|
+
key to a fallback record while records with a key keep
|
|
4644
|
+
fail-on-miss; or render a value that can never match in the
|
|
4645
|
+
else branch and set `allowFailures: true` with `default`.
|
|
4646
|
+
A `searchField` / `operator` lookup (no `expression`) never
|
|
4647
|
+
reaches this state: an empty extract fails the record with
|
|
4648
|
+
`STATIC_MAPPING_ERROR` — `Exported value is empty/undefined
|
|
4649
|
+
for the field: $.<path>` — and resolves to `default` when
|
|
4650
|
+
`allowFailures` is true.
|
|
4632
4651
|
- |-
|
|
4633
4652
|
## The mapping preview cannot evaluate `[*]` inside a block-helper argument
|
|
4634
4653
|
|
|
@@ -4662,19 +4681,34 @@ components:
|
|
|
4662
4681
|
useDefaultOnMultipleMatches:
|
|
4663
4682
|
type: boolean
|
|
4664
4683
|
description: |-
|
|
4665
|
-
|
|
4666
|
-
record
|
|
4667
|
-
of
|
|
4668
|
-
|
|
4684
|
+
When true and `allowFailures` is also true, a search that
|
|
4685
|
+
matches more than one record resolves to `default` instead
|
|
4686
|
+
of failing the record. Has no effect while `allowFailures`
|
|
4687
|
+
is false — an ambiguous match then fails the record whatever
|
|
4688
|
+
this flag says.
|
|
4689
|
+
x-celigo-ai-guidance:
|
|
4690
|
+
- |-
|
|
4691
|
+
Set it together with `allowFailures: true` whenever the
|
|
4692
|
+
search value can be empty or duplicated: with
|
|
4693
|
+
`allowFailures: true` alone an ambiguous match resolves to
|
|
4694
|
+
ONE of the matching records with no error, and with this
|
|
4695
|
+
flag alone the record still fails `More than one match`.
|
|
4696
|
+
Every ambiguous match then becomes `default`, a genuinely
|
|
4697
|
+
duplicated key included — when that must still fail, keep
|
|
4698
|
+
`allowFailures` false and handle the empty key in the
|
|
4699
|
+
`expression` instead (see `expression`).
|
|
4669
4700
|
allowFailures:
|
|
4670
4701
|
type:
|
|
4671
4702
|
- boolean
|
|
4672
4703
|
- 'null'
|
|
4673
4704
|
description: |-
|
|
4674
4705
|
When true, a lookup miss (no matching record and no
|
|
4675
|
-
`default`) resolves to `null` and the import continues
|
|
4676
|
-
|
|
4677
|
-
|
|
4706
|
+
`default`) resolves to `null` and the import continues, and
|
|
4707
|
+
a search matching more than one record resolves to one of
|
|
4708
|
+
them unless `useDefaultOnMultipleMatches` routes it to
|
|
4709
|
+
`default`. When false (default), a miss and an ambiguous
|
|
4710
|
+
match both halt the record. May be stored as null (treated
|
|
4711
|
+
as unset).
|
|
4678
4712
|
map:
|
|
4679
4713
|
type:
|
|
4680
4714
|
- object
|
|
@@ -4701,8 +4735,8 @@ components:
|
|
|
4701
4735
|
## Mirror invariant
|
|
4702
4736
|
The Celigo platform persists NetSuite Distributed Import lookups in
|
|
4703
4737
|
TWO locations: `netsuite_da.lookups` and top-level `lookups`.
|
|
4704
|
-
Both arrays must hold byte-for-byte identical content
|
|
4705
|
-
|
|
4738
|
+
Both arrays must hold byte-for-byte identical content, so write
|
|
4739
|
+
both on every save.
|
|
4706
4740
|
- |-
|
|
4707
4741
|
## One context for body and sublist lookups
|
|
4708
4742
|
Every lookup's `expression` renders against the whole source
|
|
@@ -5100,8 +5134,8 @@ components:
|
|
|
5100
5134
|
**Mirror invariant**
|
|
5101
5135
|
The Celigo platform persists lookups in TWO locations on an RDBMS
|
|
5102
5136
|
import: top-level `lookups` and `rdbms.lookups`. Both arrays
|
|
5103
|
-
must hold byte-for-byte identical content
|
|
5104
|
-
|
|
5137
|
+
must hold byte-for-byte identical content, so write both on every
|
|
5138
|
+
save.
|
|
5105
5139
|
items:
|
|
5106
5140
|
type: object
|
|
5107
5141
|
properties:
|
|
@@ -5226,7 +5260,7 @@ components:
|
|
|
5226
5260
|
- **Nested fields**: `{{record.properties.email}}` (auto-quoted)
|
|
5227
5261
|
or `{{{record.properties.email}}}` (raw).
|
|
5228
5262
|
- |-
|
|
5229
|
-
## EXAMPLES
|
|
5263
|
+
## EXAMPLES
|
|
5230
5264
|
|
|
5231
5265
|
- INSERT (string columns, auto-quoted): `["INSERT INTO customers (name, email) VALUES ({{record.name}}, {{record.email}})"]`
|
|
5232
5266
|
- INSERT (mixed numeric + string): `["INSERT INTO orders (qty, sku) VALUES ({{{record.qty}}}, {{record.sku}})"]`
|
|
@@ -6087,8 +6121,7 @@ components:
|
|
|
6087
6121
|
"wrapper" JavaScript module that invokes a custom function (typically to
|
|
6088
6122
|
integrate with a system Celigo doesn't have a first-class connector for).
|
|
6089
6123
|
- |-
|
|
6090
|
-
Wrapper imports use Mapper 1.0 for field mappings and the generic Celigo lookup shape
|
|
6091
|
-
The MappingsAgent operates in `v1_standard` mode for this adaptor type —
|
|
6124
|
+
Wrapper imports use Mapper 1.0 for field mappings and the generic Celigo lookup shape:
|
|
6092
6125
|
mappings live in `resource.mapping` (fields/lists) and lookups mirror at
|
|
6093
6126
|
`resource.lookups` and `resource.wrapper.lookups`.
|
|
6094
6127
|
properties:
|
|
@@ -6136,8 +6169,8 @@ components:
|
|
|
6136
6169
|
## Mirror invariant
|
|
6137
6170
|
The Celigo platform persists lookups in TWO locations on a
|
|
6138
6171
|
Wrapper import: top-level `lookups` and `wrapper.lookups`.
|
|
6139
|
-
Both arrays must hold byte-for-byte identical content
|
|
6140
|
-
|
|
6172
|
+
Both arrays must hold byte-for-byte identical content, so write
|
|
6173
|
+
both on every save.
|
|
6141
6174
|
if:
|
|
6142
6175
|
not:
|
|
6143
6176
|
propertyNames:
|
|
@@ -6172,8 +6205,8 @@ components:
|
|
|
6172
6205
|
**Mirror invariant**
|
|
6173
6206
|
The Celigo platform stores lookups in TWO locations on a Salesforce
|
|
6174
6207
|
import resource: top-level ``lookups`` and ``salesforce.lookups``.
|
|
6175
|
-
Both arrays must hold byte-for-byte identical content
|
|
6176
|
-
|
|
6208
|
+
Both arrays must hold byte-for-byte identical content, so write
|
|
6209
|
+
both on every save.
|
|
6177
6210
|
|
|
6178
6211
|
**Static vs dynamic lookups**
|
|
6179
6212
|
- **Static** — only ``map`` + optional ``default``. No Salesforce
|
|
@@ -8339,10 +8372,8 @@ components:
|
|
|
8339
8372
|
update this field — the wrapper itself stays the same shape,
|
|
8340
8373
|
just points at a different Tool.
|
|
8341
8374
|
- |-
|
|
8342
|
-
|
|
8343
|
-
|
|
8344
|
-
when invoked from a flow / API / Tool dispatch path,
|
|
8345
|
-
through the Tool Builder which delegates to the Tool engine's brief-based entry point).
|
|
8375
|
+
Writing the wrapper does not create or change the Tool itself;
|
|
8376
|
+
author the Tool as its own resource through `/v1/tools`.
|
|
8346
8377
|
examples:
|
|
8347
8378
|
- 69ce8ae7cbbb51405ae42ae5
|
|
8348
8379
|
overrides:
|
|
@@ -13305,7 +13336,7 @@ components:
|
|
|
13305
13336
|
no message text) and never cascades or promotes on its own; `Draft`
|
|
13306
13337
|
descendants are kept as they are, and a `Draft` parent does not gate
|
|
13307
13338
|
its children. The UI's Set inactive on a parent marks the parent and
|
|
13308
|
-
every child `Inactive
|
|
13339
|
+
every child `Inactive`. Re-enabling a child
|
|
13309
13340
|
means re-enabling its ancestors in the same payload. Edits that keep
|
|
13310
13341
|
existing rows must carry their stored status forward — rewriting a
|
|
13311
13342
|
`Draft` or `Inactive` row to `Active` turns a row the user parked
|
|
@@ -14344,7 +14375,7 @@ components:
|
|
|
14344
14375
|
no message text) and never cascades or promotes on its own; `Draft`
|
|
14345
14376
|
descendants are kept as they are, and a `Draft` parent does not gate
|
|
14346
14377
|
its children. The UI's Set inactive on a parent marks the parent and
|
|
14347
|
-
every child `Inactive
|
|
14378
|
+
every child `Inactive`. Re-enabling a child
|
|
14348
14379
|
means re-enabling its ancestors in the same payload. Edits that keep
|
|
14349
14380
|
existing rows must carry their stored status forward — rewriting a
|
|
14350
14381
|
`Draft` or `Inactive` row to `Active` turns a row the user parked
|
|
@@ -14783,7 +14814,7 @@ components:
|
|
|
14783
14814
|
``{record: {...}, settings: ..., job: ...}`` (plus
|
|
14784
14815
|
``fileMeta`` on file-provider steps) — the
|
|
14785
14816
|
same runtime-context envelope Handlebars / SQL /
|
|
14786
|
-
GraphQL
|
|
14817
|
+
GraphQL templates render against. ``mappings[].extract``
|
|
14787
14818
|
JSONPath values MUST include the ``record.`` segment
|
|
14788
14819
|
— for example ``"$.record.orderId"`` or
|
|
14789
14820
|
``"$.record.customer.email"``. PLACEHOLDER extracts
|
|
@@ -14811,9 +14842,8 @@ components:
|
|
|
14811
14842
|
``inputContext: record`` makes the contract
|
|
14812
14843
|
self-documenting and prevents the transform from
|
|
14813
14844
|
drifting into envelope mode if an upstream change ever
|
|
14814
|
-
changes the platform default.
|
|
14815
|
-
|
|
14816
|
-
it into the generator's prompt so the JSONPath form
|
|
14845
|
+
changes the platform default. Read this value before
|
|
14846
|
+
writing ``mappings[].extract`` so the JSONPath form
|
|
14817
14847
|
matches the runtime root.
|
|
14818
14848
|
- |-
|
|
14819
14849
|
## fileMeta on file-provider steps
|
|
@@ -16081,7 +16111,7 @@ components:
|
|
|
16081
16111
|
Optional on a `blob: true` file-provider import: when omitted the platform reads the
|
|
16082
16112
|
record's root `blobKey` — the field a blob export emits on its `{blobKey, fileMeta}`
|
|
16083
16113
|
record — so a file-transfer flow needs no `blobKeyPath`. Observed on an FTP import
|
|
16084
|
-
(
|
|
16114
|
+
(recorded runs writing files with no `blobKeyPath`) and on a Google Drive folder
|
|
16085
16115
|
upload (`http.type: file`, the marketplace file-transfer template's shape); other
|
|
16086
16116
|
file providers were not probed. Set it only when a response mapping placed the key
|
|
16087
16117
|
elsewhere; on those two providers its absence is not a cause of upload failures.
|
|
@@ -16263,13 +16293,9 @@ components:
|
|
|
16263
16293
|
- |-
|
|
16264
16294
|
JavaScript hook references attached to lifecycle stages of the import.
|
|
16265
16295
|
Engage hooks ONLY when the user explicitly wants scripting OR a requirement
|
|
16266
|
-
cannot be expressed through declarative
|
|
16296
|
+
cannot be expressed through declarative configuration (mappings / filters /
|
|
16267
16297
|
responseTransform).
|
|
16268
16298
|
Hooks bypass the platform's declarative validation, so use them sparingly.
|
|
16269
|
-
- |-
|
|
16270
|
-
Phase A authoring scope: ``preMap`` and ``postMap`` only.
|
|
16271
|
-
``postSubmit`` and ``postAggregate`` are Phase B's territory (they author
|
|
16272
|
-
against the real destination response).
|
|
16273
16299
|
properties:
|
|
16274
16300
|
preMap:
|
|
16275
16301
|
type: object
|
|
@@ -16286,7 +16312,7 @@ components:
|
|
|
16286
16312
|
before the mapping sees them (drop archived records,
|
|
16287
16313
|
normalize date strings, split a record into many). Don't
|
|
16288
16314
|
engage for static value substitution or simple field
|
|
16289
|
-
renames —
|
|
16315
|
+
renames — mappings handle those.
|
|
16290
16316
|
|
|
16291
16317
|
Runtime contract: ``options.data[]`` (the page of upstream
|
|
16292
16318
|
records) → array of the same length.
|
|
@@ -16328,11 +16354,6 @@ components:
|
|
|
16328
16354
|
Post-submit JavaScript hook — runs AFTER each batch of
|
|
16329
16355
|
destination writes, on the destination's response.
|
|
16330
16356
|
|
|
16331
|
-
**Phase B owns this slot.** Phase A must NOT emit a
|
|
16332
|
-
``$agent`` marker here (see "Phase A vs Phase B ownership"
|
|
16333
|
-
in the engine prompt). Phase B authors this against the
|
|
16334
|
-
real probe response.
|
|
16335
|
-
|
|
16336
16357
|
Runtime contract: ``options.responseData[]`` (one per
|
|
16337
16358
|
submitted record; ``{statusCode, errors, _json, ...}`` —
|
|
16338
16359
|
``id`` is present on real runs but absent from the
|
|
@@ -16357,11 +16378,6 @@ components:
|
|
|
16357
16378
|
``invalid_hook`` ("unsupported postAggregate hook") —
|
|
16358
16379
|
never emit it for non-file adaptors.
|
|
16359
16380
|
|
|
16360
|
-
**Phase B owns this slot.** Phase A must NOT emit a
|
|
16361
|
-
``$agent`` marker here (see "Phase A vs Phase B ownership"
|
|
16362
|
-
in the engine prompt). Phase B authors this against the
|
|
16363
|
-
real probe response.
|
|
16364
|
-
|
|
16365
16381
|
Runtime contract: ``options.postAggregateData``
|
|
16366
16382
|
(``{success, _json, code, message, source}``) → no return
|
|
16367
16383
|
value; side effects only (logging, notifying, downstream
|
|
@@ -16413,8 +16429,7 @@ components:
|
|
|
16413
16429
|
|
|
16414
16430
|
REQUIRED for ``SalesforceImport`` and ``WrapperImport``: these
|
|
16415
16431
|
adaptors must use Mapper 1.0; Mapper 2.0 is not supported for
|
|
16416
|
-
them.
|
|
16417
|
-
automatically. ``NetSuiteDistributedImport`` is also V1-required
|
|
16432
|
+
them. ``NetSuiteDistributedImport`` is also V1-required
|
|
16418
16433
|
but uses a NetSuite-specific variant at its adaptor-scoped copy
|
|
16419
16434
|
``netsuite_da.mapping`` (richer sublist / subRecord vocabulary) —
|
|
16420
16435
|
not this field.
|
|
@@ -16423,17 +16438,9 @@ components:
|
|
|
16423
16438
|
``FTPImport``, ``JDBCImport``, etc.) when the user explicitly asks
|
|
16424
16439
|
for Mapper 1.0 — e.g. when the import wraps a legacy v1 connector
|
|
16425
16440
|
or is being migrated from an older integration. Those adaptors
|
|
16426
|
-
default to Mapper 2.0 at the top-level ``mappings`` (plural) field
|
|
16427
|
-
|
|
16428
|
-
|
|
16429
|
-
unsolicited; the v2 default produces better output for modern
|
|
16430
|
-
connectors.
|
|
16431
|
-
- |-
|
|
16432
|
-
## Specialist marker
|
|
16433
|
-
|
|
16434
|
-
Managed by the MappingsAgent (``$agent: mapping``) — resource-
|
|
16435
|
-
authoring agents must emit a specialist marker at this field
|
|
16436
|
-
rather than generating mapping content inline.
|
|
16441
|
+
default to Mapper 2.0 at the top-level ``mappings`` (plural) field.
|
|
16442
|
+
Do not set this field unsolicited; the v2 default produces better
|
|
16443
|
+
output for modern connectors.
|
|
16437
16444
|
- |-
|
|
16438
16445
|
Allowed (but not the default) on other import adaptors such as
|
|
16439
16446
|
``HTTPImport``, ``RDBMSImport``, ``FTPImport``, and
|
|
@@ -16450,8 +16457,8 @@ components:
|
|
|
16450
16457
|
|
|
16451
16458
|
Lookups referenced by ``lookupName`` live on the top-level
|
|
16452
16459
|
``resource.lookups`` array (mirrored under the adaptor key for
|
|
16453
|
-
adaptors that maintain their own copy — see the mirror
|
|
16454
|
-
|
|
16460
|
+
adaptors that maintain their own copy — see the mirror invariant
|
|
16461
|
+
on ``lookups``). Lookups are independent of this
|
|
16455
16462
|
mapping: they are neither created nor cleared automatically when
|
|
16456
16463
|
this mapping changes.
|
|
16457
16464
|
properties:
|
|
@@ -16566,9 +16573,8 @@ components:
|
|
|
16566
16573
|
- |-
|
|
16567
16574
|
## Mirror invariant
|
|
16568
16575
|
|
|
16569
|
-
Both arrays MUST hold byte-for-byte identical content
|
|
16570
|
-
|
|
16571
|
-
single logical field.
|
|
16576
|
+
Both arrays MUST hold byte-for-byte identical content: write
|
|
16577
|
+
both on every save and treat them as a single logical field.
|
|
16572
16578
|
- |-
|
|
16573
16579
|
## Shape
|
|
16574
16580
|
|
|
@@ -16629,7 +16635,7 @@ components:
|
|
|
16629
16635
|
- ``envelope``: the mapper sees a wrapped object of the shape
|
|
16630
16636
|
``{record: {...}, settings: ..., job: ...}`` — the same
|
|
16631
16637
|
runtime-context envelope Handlebars / SQL / GraphQL
|
|
16632
|
-
|
|
16638
|
+
templates render against. ``mappings[].extract`` JSONPath values
|
|
16633
16639
|
MUST include the ``record.`` segment — for example
|
|
16634
16640
|
``"$.record.orderId"`` or ``"$.record.customer.email"``.
|
|
16635
16641
|
PLACEHOLDER extracts use ``"$.record.PLACEHOLDER_<field>"``.
|
|
@@ -16654,9 +16660,9 @@ components:
|
|
|
16654
16660
|
platform, but emitting ``inputContext: record`` makes the
|
|
16655
16661
|
contract self-documenting and prevents the mapper from drifting
|
|
16656
16662
|
into envelope mode if an upstream change ever changes the
|
|
16657
|
-
platform default.
|
|
16658
|
-
|
|
16659
|
-
|
|
16663
|
+
platform default. Read this value before writing
|
|
16664
|
+
``mappings[].extract`` so the JSONPath form matches the runtime
|
|
16665
|
+
root.
|
|
16660
16666
|
settingsForm:
|
|
16661
16667
|
x-celigo-agent:
|
|
16662
16668
|
- settings_form
|
package/dist/job.yml
CHANGED
|
@@ -424,8 +424,8 @@ paths:
|
|
|
424
424
|
- |-
|
|
425
425
|
Returns a paged collection of currently running jobs for the dashboard.
|
|
426
426
|
The request body supports filtering by integration, flow, status, and
|
|
427
|
-
application.
|
|
428
|
-
|
|
427
|
+
application. ``sandbox`` is deprecated; when a caller still sends it,
|
|
428
|
+
``false`` selects production.
|
|
429
429
|
- |-
|
|
430
430
|
Do not send time_gt or time_lte; they are not on this request. To find jobs
|
|
431
431
|
stuck for longer than a threshold, compare each job's createdAt or startedAt
|