@celigo/api-specs 0.2.28 → 0.2.30

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/tool.yml CHANGED
@@ -2075,9 +2075,11 @@ components:
2075
2075
  This field supports THREE DISTINCT PATTERNS that are easily distinguished:
2076
2076
 
2077
2077
  **1. json Path Syntax**
2078
- - MUST start with '$.' prefix
2078
+ - MUST start with '$' — the record root. An object record is addressed as
2079
+ '$.field'; a grouped (array) record as '$[0].field' / '$[*].field'
2079
2080
  - Used for precisely targeting data in structured JSON objects
2080
- - Examples: '$.customer.firstName', '$.items[0].price', '$.addresses[*].street'
2081
+ - Examples: '$.customer.firstName', '$.items[0].price', '$.addresses[*].street',
2082
+ '$[*].Tax' (every row of a grouped record)
2081
2083
  - Wildcards like [*] extract multiple values/objects
2082
2084
 
2083
2085
  ```json
@@ -2088,7 +2090,8 @@ components:
2088
2090
  - Contains '{{' and '}}' pattern
2089
2091
  - Evaluated by the AFE 2.0 handlebars template engine
2090
2092
  - Can include logic, formatting, and computation
2091
- - Access input record fields with {{record.fieldName}} notation
2093
+ - Access input record fields with {{record.fieldName}} notation; a grouped
2094
+ (array) record binds as `rows` instead — {{rows.0.fieldName}} / {{#each rows}}
2092
2095
  - Examples: "{{record.firstName}} {{record.lastName}}", "{{#if record.isActive}}Active{{else}}Inactive{{/if}}"
2093
2096
  - Valid on `object`, `objectarray`, and primitive-array dataTypes as
2094
2097
  well as scalars — the rendered template output must parse into the
@@ -2099,7 +2102,7 @@ components:
2099
2102
  ```
2100
2103
 
2101
2104
  **3. Hard-Coded Value (literal string)**
2102
- - Does NOT start with '$.'
2105
+ - Does NOT start with '$'
2103
2106
  - Does NOT contain handlebars '{{' syntax
2104
2107
  - System treats it as a literal string value
2105
2108
  - VERY COMMON for setting static/constant values
@@ -2121,10 +2124,38 @@ components:
2121
2124
  - The system maintains this context even in deeply nested mappings
2122
2125
  - For object mappings without child mappings, extract should return a complete object
2123
2126
  - When both extract and mappings are defined for objects, extract is applied first
2127
+ - The root is the record as it arrives: an object record roots at `$.field`; a
2128
+ grouped record (an array of rows — grouped exports, file key columns, NetSuite
2129
+ grouped saved searches) roots at the array, so its rows are addressed as
2130
+ `$[0].field` (one row) or `$[*].field` (every row). A root that contradicts the
2131
+ record's shape resolves to nothing without an error.
2124
2132
 
2125
2133
  For most simple field-to-field mappings, prefer JSON path syntax for its clarity and performance.
2126
2134
  For hard-coded values, simply use the literal string as the extract value.
2127
2135
  x-celigo-ai-guidance:
2136
+ - |-
2137
+ ## GROUPED (ARRAY) RECORDS
2138
+ Decide the JSONPath root from the record's shape before writing
2139
+ any extract. When the record is an array of rows, `$.field`,
2140
+ `$.properties.field` and `$.rows[*].field` all resolve to
2141
+ nothing — the processor still reports success and the request
2142
+ body ships as `{}`. Address rows as `$[0].field` (that row's
2143
+ value, typed) or `$[*].field` (every row: joined with commas
2144
+ into a `string` destination; rejected with
2145
+ `incompatible_destination_conversion` into a `number`
2146
+ destination). Column labels with spaces work as
2147
+ `$[*][Order Number]`, `$[*].[Order Number]`, or
2148
+ `$[*]['Order Number']`. For one destination element per row
2149
+ the two array kinds take different helper forms: a primitive
2150
+ array (`stringarray` / `numberarray`) uses `buildArrayHelper:
2151
+ [{"extract": "$[*].field"}]`; an `objectarray` uses
2152
+ `buildArrayHelper: [{"extract": "$[*]", "mappings": [...]}]`
2153
+ with the children addressing the row relatively (`$.field`,
2154
+ `{{rows.field}}`). An `extract` placed directly on the
2155
+ array-typed field yields nothing. Handlebars
2156
+ extracts bind the array record as `rows` (`{{rows.0.field}}`),
2157
+ an object record as `record`. The reverse holds too: `$[*]` on
2158
+ an object record iterates the object's values, not rows.
2128
2159
  - |-
2129
2160
  ## SIZE LIMIT
2130
2161
  The platform's import save validator caps this field at **1024
@@ -2382,7 +2413,11 @@ components:
2382
2413
  (`$.items[*]`), `"$"` (the record root), or omission — a
2383
2414
  constructed entry (child `mappings` with the extract omitted or
2384
2415
  `"$"`; the two spellings are equivalent) contributes exactly one
2385
- element, and entries append in order. Indexed or comma-joined
2416
+ element, and entries append in order. On a grouped (array)
2417
+ record the record itself is the array to iterate: `"$[*]"`
2418
+ yields one `objectarray` element per row (children address the
2419
+ row as `$.field`), and `"$[*].field"` yields one primitive-array
2420
+ value per row. Indexed or comma-joined
2386
2421
  entry extracts (`"$[0]"`, `"$[0],$[0]"`) are not valid: the
2387
2422
  processor renders the entire destination array as null with no
2388
2423
  validation error. To emit a fixed number of static elements, add
@@ -2403,7 +2438,9 @@ components:
2403
2438
 
2404
2439
  **For Simple Arrays (stringarray, numberarray, booleanarray)**
2405
2440
  - Only the 'extract' field is used to pull values
2406
- - JSON path with wildcards (e.g., $.items[*].name) returns multiple values
2441
+ - JSON path with wildcards (e.g., $.items[*].name) returns multiple values;
2442
+ on a grouped (array) record the record itself is the array, so the
2443
+ path roots at it ($[*].name — one value per row)
2407
2444
  - Each result is converted to the appropriate primitive type
2408
2445
  ```json
2409
2446
  {
@@ -2505,11 +2542,13 @@ components:
2505
2542
  - When both extract and mappings are provided, the system creates special composite objects
2506
2543
  that maintain hierarchical context during processing
2507
2544
  - This enables accessing both the current array element AND its parent context
2508
- - An ITERATING entry's extract MUST use JSON path syntax starting with '$.'
2509
- (e.g. '$.items[*]'). A CONSTRUCTED entry (child mappings building one element)
2510
- instead omits extract or sets it to exactly "$" — never rewrite "$" into a
2511
- '$.'-prefixed, indexed, or comma-joined form ('$[0]', '$[0],$[0]'): those render
2512
- the entire destination array as null without raising a validation error
2545
+ - An ITERATING entry's extract MUST be a JSON path that iterates an array:
2546
+ '$.items[*]' when the array is a field of an object record, or '$[*]'
2547
+ (objectarray) / '$[*].field' (primitive arrays) when the record itself is a
2548
+ grouped array of rows. A CONSTRUCTED entry (child mappings building one
2549
+ element) instead omits extract or sets it to exactly "$" — never rewrite "$"
2550
+ into an indexed or comma-joined form ('$[0]', '$[0],$[0]'): those render the
2551
+ entire destination array as null without raising a validation error
2513
2552
  - Each array helper entry acts independently, potentially adding multiple elements
2514
2553
 
2515
2554
  The buildArrayHelper is the most complex part of the mappings system - always analyze the
@@ -2923,9 +2962,11 @@ components:
2923
2962
  This field supports THREE DISTINCT PATTERNS that are easily distinguished:
2924
2963
 
2925
2964
  **1. json Path Syntax**
2926
- - MUST start with '$.' prefix
2965
+ - MUST start with '$' — the record root. An object record is addressed as
2966
+ '$.field'; a grouped (array) record as '$[0].field' / '$[*].field'
2927
2967
  - Used for precisely targeting data in structured JSON objects
2928
- - Examples: '$.customer.firstName', '$.items[0].price', '$.addresses[*].street'
2968
+ - Examples: '$.customer.firstName', '$.items[0].price', '$.addresses[*].street',
2969
+ '$[*].Tax' (every row of a grouped record)
2929
2970
  - Wildcards like [*] extract multiple values/objects
2930
2971
 
2931
2972
  ```json
@@ -2936,7 +2977,8 @@ components:
2936
2977
  - Contains '{{' and '}}' pattern
2937
2978
  - Evaluated by the AFE 2.0 handlebars template engine
2938
2979
  - Can include logic, formatting, and computation
2939
- - Access input record fields with {{record.fieldName}} notation
2980
+ - Access input record fields with {{record.fieldName}} notation; a grouped
2981
+ (array) record binds as `rows` instead — {{rows.0.fieldName}} / {{#each rows}}
2940
2982
  - Examples: "{{record.firstName}} {{record.lastName}}", "{{#if record.isActive}}Active{{else}}Inactive{{/if}}"
2941
2983
  - Valid on `object`, `objectarray`, and primitive-array dataTypes as
2942
2984
  well as scalars — the rendered template output must parse into the
@@ -2947,7 +2989,7 @@ components:
2947
2989
  ```
2948
2990
 
2949
2991
  **3. Hard-Coded Value (literal string)**
2950
- - Does NOT start with '$.'
2992
+ - Does NOT start with '$'
2951
2993
  - Does NOT contain handlebars '{{' syntax
2952
2994
  - System treats it as a literal string value
2953
2995
  - VERY COMMON for setting static/constant values
@@ -2969,10 +3011,38 @@ components:
2969
3011
  - The system maintains this context even in deeply nested mappings
2970
3012
  - For object mappings without child mappings, extract should return a complete object
2971
3013
  - When both extract and mappings are defined for objects, extract is applied first
3014
+ - The root is the record as it arrives: an object record roots at `$.field`; a
3015
+ grouped record (an array of rows — grouped exports, file key columns, NetSuite
3016
+ grouped saved searches) roots at the array, so its rows are addressed as
3017
+ `$[0].field` (one row) or `$[*].field` (every row). A root that contradicts the
3018
+ record's shape resolves to nothing without an error.
2972
3019
 
2973
3020
  For most simple field-to-field mappings, prefer JSON path syntax for its clarity and performance.
2974
3021
  For hard-coded values, simply use the literal string as the extract value.
2975
3022
  x-celigo-ai-guidance:
3023
+ - |-
3024
+ ## GROUPED (ARRAY) RECORDS
3025
+ Decide the JSONPath root from the record's shape before writing
3026
+ any extract. When the record is an array of rows, `$.field`,
3027
+ `$.properties.field` and `$.rows[*].field` all resolve to
3028
+ nothing — the processor still reports success and the request
3029
+ body ships as `{}`. Address rows as `$[0].field` (that row's
3030
+ value, typed) or `$[*].field` (every row: joined with commas
3031
+ into a `string` destination; rejected with
3032
+ `incompatible_destination_conversion` into a `number`
3033
+ destination). Column labels with spaces work as
3034
+ `$[*][Order Number]`, `$[*].[Order Number]`, or
3035
+ `$[*]['Order Number']`. For one destination element per row
3036
+ the two array kinds take different helper forms: a primitive
3037
+ array (`stringarray` / `numberarray`) uses `buildArrayHelper:
3038
+ [{"extract": "$[*].field"}]`; an `objectarray` uses
3039
+ `buildArrayHelper: [{"extract": "$[*]", "mappings": [...]}]`
3040
+ with the children addressing the row relatively (`$.field`,
3041
+ `{{rows.field}}`). An `extract` placed directly on the
3042
+ array-typed field yields nothing. Handlebars
3043
+ extracts bind the array record as `rows` (`{{rows.0.field}}`),
3044
+ an object record as `record`. The reverse holds too: `$[*]` on
3045
+ an object record iterates the object's values, not rows.
2976
3046
  - |-
2977
3047
  ## SIZE LIMIT
2978
3048
  The platform's import save validator caps this field at **1024
@@ -3230,7 +3300,11 @@ components:
3230
3300
  (`$.items[*]`), `"$"` (the record root), or omission — a
3231
3301
  constructed entry (child `mappings` with the extract omitted or
3232
3302
  `"$"`; the two spellings are equivalent) contributes exactly one
3233
- element, and entries append in order. Indexed or comma-joined
3303
+ element, and entries append in order. On a grouped (array)
3304
+ record the record itself is the array to iterate: `"$[*]"`
3305
+ yields one `objectarray` element per row (children address the
3306
+ row as `$.field`), and `"$[*].field"` yields one primitive-array
3307
+ value per row. Indexed or comma-joined
3234
3308
  entry extracts (`"$[0]"`, `"$[0],$[0]"`) are not valid: the
3235
3309
  processor renders the entire destination array as null with no
3236
3310
  validation error. To emit a fixed number of static elements, add
@@ -3251,7 +3325,9 @@ components:
3251
3325
 
3252
3326
  **For Simple Arrays (stringarray, numberarray, booleanarray)**
3253
3327
  - Only the 'extract' field is used to pull values
3254
- - JSON path with wildcards (e.g., $.items[*].name) returns multiple values
3328
+ - JSON path with wildcards (e.g., $.items[*].name) returns multiple values;
3329
+ on a grouped (array) record the record itself is the array, so the
3330
+ path roots at it ($[*].name — one value per row)
3255
3331
  - Each result is converted to the appropriate primitive type
3256
3332
  ```json
3257
3333
  {
@@ -3353,11 +3429,13 @@ components:
3353
3429
  - When both extract and mappings are provided, the system creates special composite objects
3354
3430
  that maintain hierarchical context during processing
3355
3431
  - This enables accessing both the current array element AND its parent context
3356
- - An ITERATING entry's extract MUST use JSON path syntax starting with '$.'
3357
- (e.g. '$.items[*]'). A CONSTRUCTED entry (child mappings building one element)
3358
- instead omits extract or sets it to exactly "$" — never rewrite "$" into a
3359
- '$.'-prefixed, indexed, or comma-joined form ('$[0]', '$[0],$[0]'): those render
3360
- the entire destination array as null without raising a validation error
3432
+ - An ITERATING entry's extract MUST be a JSON path that iterates an array:
3433
+ '$.items[*]' when the array is a field of an object record, or '$[*]'
3434
+ (objectarray) / '$[*].field' (primitive arrays) when the record itself is a
3435
+ grouped array of rows. A CONSTRUCTED entry (child mappings building one
3436
+ element) instead omits extract or sets it to exactly "$" — never rewrite "$"
3437
+ into an indexed or comma-joined form ('$[0]', '$[0],$[0]'): those render the
3438
+ entire destination array as null without raising a validation error
3361
3439
  - Each array helper entry acts independently, potentially adding multiple elements
3362
3440
 
3363
3441
  The buildArrayHelper is the most complex part of the mappings system - always analyze the
@@ -4083,6 +4161,16 @@ components:
4083
4161
  x-enumDescriptions:
4084
4162
  create: Builds entirely new output records from inputs, ignoring unmapped fields.
4085
4163
  modify: Makes targeted edits to existing records, preserving unmapped fields.
4164
+ x-celigo-ai-guidance:
4165
+ - |-
4166
+ On a grouped record (the export groups rows, so the record is an
4167
+ array) only `create` can author output — build it from the rows with
4168
+ `$[0].field`, `$[*].field`, or a `buildArrayHelper` over `$[*]`.
4169
+ `modify` has no object to overlay onto an array: the record passes
4170
+ through untouched and the processor reports success. Either mode
4171
+ reshapes the inside of one record; neither changes how many records
4172
+ the page carries (that is the export's `preSavePage` hook) or whether
4173
+ the export groups at all (that is its grouping setting).
4086
4174
  examples:
4087
4175
  - create
4088
4176
  - modify
@@ -9948,7 +10036,11 @@ components:
9948
10036
  suiteAppInstalled:
9949
10037
  type: boolean
9950
10038
  readOnly: true
9951
- description: When true, the Celigo SuiteApp bundle is installed in the connected NetSuite account. Detected by the server when the connection authenticates to NetSuite.
10039
+ description: |-
10040
+ When true, the Celigo integrator.io SuiteApp (SuiteScript 2.x) was detected in
10041
+ the connected NetSuite account the last time the connection authenticated. It
10042
+ says nothing about the legacy Celigo bundle; for a live check of both, use
10043
+ `GET /v1/connections/{_id}/distributedApps`.
9952
10044
  salesforce:
9953
10045
  description: Present when `type` is `salesforce`.
9954
10046
  allOf:
@@ -10687,7 +10779,9 @@ components:
10687
10779
  type: object
10688
10780
  description: |-
10689
10781
  Configuration for HTTP imports.
10690
- Required whenever the connection referenced by _connectionId has type http.
10782
+ Required whenever the connection referenced by _connectionId has type http, and on
10783
+ `NetSuiteHTTPImport` (NetSuite's REST APIs on a `netsuite` connection, where `nsDomainType`
10784
+ supplies the host).
10691
10785
  x-celigo-ai-guidance:
10692
10786
  - |-
10693
10787
  IMPORTANT:
@@ -10695,6 +10789,11 @@ components:
10695
10789
  this object MUST be populated for the import to function properly.
10696
10790
  This is a required configuration for all HTTP based imports,
10697
10791
  as determined by the connection associated with the import.
10792
+ - |-
10793
+ A `NetSuiteHTTPImport` uses this same object on a netsuite connection: each `relativeURI`
10794
+ entry carries the full path from `/services/rest/record/v1/<type>` (SuiteTalk) or
10795
+ `/app/site/hosting/restlet.nl?script=<id>&deploy=<n>` (custom RESTlet); the host and the
10796
+ token signature come from the connection.
10698
10797
  properties:
10699
10798
  sendPostMappedData:
10700
10799
  type: boolean
@@ -20776,6 +20875,7 @@ components:
20776
20875
  description: |-
20777
20876
  Connection this import uses to reach the destination system. The connection's type must
20778
20877
  be compatible with the import's `adaptorType` (e.g. an `HTTPImport` needs an `http`
20878
+ connection; `NetSuiteDistributedImport` and `NetSuiteHTTPImport` both need a `netsuite`
20779
20879
  connection). Server-required — POST without it fails with 422 "Expected field:
20780
20880
  _connectionId to be present" — except for the connection-less flavors (`ToolImport`,
20781
20881
  `AiAgentImport`, `GuardrailImport`), which the server creates without one.
@@ -20808,9 +20908,15 @@ components:
20808
20908
  Use HTTPImport for all REST/SOAP APIs unless a specialized adaptor exists for the
20809
20909
  target system; always pair the adaptorType with its matching configuration object.
20810
20910
  - |-
20811
- For NetSuite, always use NetSuiteDistributedImport (with the netsuite_da object).
20812
- NetSuiteImport is a legacy adaptor for accounts without the Celigo SuiteApp 2.0 — do
20813
- not use it unless explicitly requested.
20911
+ For NetSuite, use NetSuiteDistributedImport (with the netsuite_da object) when the
20912
+ Celigo SuiteApp or bundle is installed in the account — check with
20913
+ `GET /v1/connections/{_id}/distributedApps` (`suiteapp.success` / `bundle.success`).
20914
+ Use NetSuiteHTTPImport (with `nsDomainType` and the http object) when neither is
20915
+ installed or the user asks for NetSuite's REST APIs; the platform's SuiteTalk connector
20916
+ catalogs `POST /services/rest/record/v1/<type>` for inserts and
20917
+ `PATCH /services/rest/record/v1/<type>/{id}` for updates, and saving links the step to
20918
+ them. NetSuiteImport is a legacy adaptor for accounts without the Celigo SuiteApp 2.0 —
20919
+ do not use it unless explicitly requested.
20814
20920
  - |-
20815
20921
  Use RDBMSImport (with the rdbms object) for built-in database types such as SQL Server,
20816
20922
  MySQL, PostgreSQL, Snowflake, Oracle, and MariaDB. Use JDBCImport (with the jdbc
@@ -20822,6 +20928,7 @@ components:
20822
20928
  - S3Import
20823
20929
  - NetSuiteImport
20824
20930
  - NetSuiteDistributedImport
20931
+ - NetSuiteHTTPImport
20825
20932
  - SalesforceImport
20826
20933
  - JDBCImport
20827
20934
  - RDBMSImport
@@ -20839,7 +20946,8 @@ components:
20839
20946
  AS2Import: File import via AS2 (Applicability Statement 2) protocol.
20840
20947
  S3Import: File import to Amazon S3 storage.
20841
20948
  NetSuiteImport: Legacy NetSuite import for accounts without the Celigo SuiteApp 2.0.
20842
- NetSuiteDistributedImport: NetSuite import using the distributed SuiteApp 2.0 adaptor (default for NetSuite).
20949
+ NetSuiteDistributedImport: NetSuite import using the distributed SuiteApp 2.0 adaptor (default for NetSuite when the SuiteApp or bundle is installed).
20950
+ NetSuiteHTTPImport: NetSuite import over its REST APIs — SuiteTalk REST record endpoints or a custom RESTlet — on a netsuite connection, without the Celigo SuiteApp or bundle.
20843
20951
  SalesforceImport: Salesforce-specific import using SOAP, REST, Metadata, or Composite APIs.
20844
20952
  JDBCImport: Database import via a generic JDBC connection (not for built-in RDBMS types).
20845
20953
  RDBMSImport: Database import for built-in RDBMS types such as SQL Server, MySQL, PostgreSQL, Snowflake, and Oracle.
@@ -20854,10 +20962,38 @@ components:
20854
20962
  examples:
20855
20963
  - HTTPImport
20856
20964
  - NetSuiteDistributedImport
20965
+ - NetSuiteHTTPImport
20857
20966
  - SalesforceImport
20858
20967
  - FTPImport
20859
20968
  - AiAgentImport
20860
20969
  - GuardrailImport
20970
+ nsDomainType:
20971
+ type: string
20972
+ enum:
20973
+ - suitetalk
20974
+ - restlet
20975
+ x-lowercase: true
20976
+ x-enumDescriptions:
20977
+ suitetalk: NetSuite SuiteTalk REST web services — record endpoints under /services/rest/record/v1
20978
+ restlet: A custom RESTlet script deployed in the NetSuite account, called at /app/site/hosting/restlet.nl?script=<id>&deploy=<n>
20979
+ description: |-
20980
+ Selects which NetSuite REST host a `NetSuiteHTTPImport` calls. The server derives the
20981
+ full base URL from the connection's NetSuite account
20982
+ (`https://<account>.suitetalk.api.netsuite.com` or `https://<account>.restlets.api.netsuite.com`)
20983
+ and signs each request with the connection's token-based credentials, so each
20984
+ `http.relativeURI` entry carries the complete path starting at `/services/rest/...` or
20985
+ `/app/site/hosting/restlet.nl`. Ignored on other adaptor types.
20986
+ x-celigo-ai-guidance:
20987
+ - |-
20988
+ Required on `NetSuiteHTTPImport`: omitting it fails the save with 422 "Path `nsDomainType`
20989
+ is required." The import's `_connectionId` must be a netsuite connection — an http
20990
+ connection fails with 422 invalid_connection_type.
20991
+ - |-
20992
+ With `suitetalk`, saving links `http._httpConnectorVersionId`, `_httpConnectorResourceId`
20993
+ and `_httpConnectorEndpointIds` to the platform's SuiteTalk connector from each
20994
+ `http.method` + `http.relativeURI` pair (for example `POST /services/rest/record/v1/customer`
20995
+ links to that record type's insert endpoint), so the UI's Simple view renders an
20996
+ API-authored step; `restlet` steps are not linked.
20861
20997
  externalId:
20862
20998
  type:
20863
20999
  - string
@@ -21724,10 +21860,15 @@ components:
21724
21860
  iterate ``{{#each rows}}``); hook code sees the array as the
21725
21861
  record element and must not assume object shape.
21726
21862
  - |-
21727
- Transform 2.0 cannot reshape a grouped record at the array root —
21728
- ``mode: "modify"`` passes the array through untouched and
21729
- ``mode: "create"`` yields an empty object. Reshape grouped data in
21730
- a preSavePage hook (or downstream postResponseMap) instead.
21863
+ A grouped record is ONE record: Mapper 2.0 and Transform 2.0 root
21864
+ JSONPath at the array (``$[0].<field>`` / ``$[*].<field>``;
21865
+ ``$.<field>`` resolves nothing), and a Transform 2.0 in ``mode:
21866
+ "create"`` reshapes it in place — header fields from ``$[0]``, a
21867
+ lines array from a ``buildArrayHelper`` over ``$[*]`` (``mode:
21868
+ "modify"`` has no object to overlay and passes the array through
21869
+ untouched). Changing how many records the page carries — each
21870
+ row becoming its own record for every downstream step — is the
21871
+ ``preSavePage`` hook's job alone.
21731
21872
  items:
21732
21873
  type: string
21733
21874
  examples:
@@ -26309,7 +26450,10 @@ components:
26309
26450
  - \\NAS\Accounting\AP
26310
26451
  Http-2:
26311
26452
  type: object
26312
- description: Configuration for HTTP exports. Required when the export's `_connectionId` references a connection of type `http`.
26453
+ description: |-
26454
+ Configuration for HTTP exports. Required when the export's `_connectionId` references a
26455
+ connection of type `http`, and on `NetSuiteHTTPExport` (NetSuite's REST APIs on a `netsuite`
26456
+ connection, where `nsDomainType` supplies the host).
26313
26457
  x-celigo-ai-guidance:
26314
26458
  - |-
26315
26459
  IMPORTANT:
@@ -26317,6 +26461,12 @@ components:
26317
26461
  this object MUST be populated for the export to function properly.
26318
26462
  This is a required configuration for all HTTP based exports,
26319
26463
  as determined by the connection associated with the export.
26464
+ - |-
26465
+ A `NetSuiteHTTPExport` uses this same object on a netsuite connection: `relativeURI`
26466
+ carries the full path from `/services/rest/...` (SuiteTalk) or
26467
+ `/app/site/hosting/restlet.nl?script=<id>&deploy=<n>` (custom RESTlet), the host and the
26468
+ token signature come from the connection, and `type` must stay unset (file, blob and
26469
+ csvstream are rejected with 422 unsupported_type).
26320
26470
  properties:
26321
26471
  type:
26322
26472
  type: string
@@ -26466,7 +26616,7 @@ components:
26466
26616
  x-celigo-agent:
26467
26617
  - handlebars
26468
26618
  x-celigo-handlebars-context: pre-mapped
26469
- description: 'Resource path appended to the connection''s `baseURI` to form the complete request URL. Path segments, query parameters, or the entire value can be built with handlebars expressions for endpoints determined at runtime. For lookup exports (`isLookup: true`) with mappings configured, handlebars always render against the original pre-mapped input record, so fields removed or renamed by mappings remain available for URI construction.'
26619
+ description: 'Resource path appended to the connection''s `baseURI` to form the complete request URL. Path segments, query parameters, or the entire value can be built with handlebars expressions for endpoints determined at runtime. For lookup exports (`isLookup: true`) with mappings configured, handlebars always render against the original pre-mapped input record, so fields removed or renamed by mappings remain available for URI construction. On `NetSuiteHTTPExport` the base URL is derived from the NetSuite connection and `nsDomainType`, so the path starts at `/services/rest/...` or `/app/site/hosting/restlet.nl`.'
26470
26620
  x-celigo-ai-guidance:
26471
26621
  - The resource path portion of the API endpoint used for this export.
26472
26622
  - |-
@@ -33216,7 +33366,8 @@ components:
33216
33366
  - 'null'
33217
33367
  description: |-
33218
33368
  Connection this export uses to reach the source system. The connection's type must be
33219
- compatible with the export's `adaptorType` (e.g. an `HTTPExport` needs an `http` connection).
33369
+ compatible with the export's `adaptorType` (e.g. an `HTTPExport` needs an `http` connection;
33370
+ `NetSuiteExport` and `NetSuiteHTTPExport` both need a `netsuite` connection).
33220
33371
  Server-required unless `type` is `webhook` or `simple` (those receive data instead of fetching it).
33221
33372
  examples:
33222
33373
  - 60a2c4e6f321d800129a1a3c
@@ -33232,6 +33383,7 @@ components:
33232
33383
  - AS2Export
33233
33384
  - S3Export
33234
33385
  - NetSuiteExport
33386
+ - NetSuiteHTTPExport
33235
33387
  - SalesforceExport
33236
33388
  - JDBCExport
33237
33389
  - RDBMSExport
@@ -33247,7 +33399,8 @@ components:
33247
33399
  FTPExport: Exports files from FTP or SFTP servers.
33248
33400
  AS2Export: Exports data using the AS2 (Applicability Statement 2) secure file transfer protocol.
33249
33401
  S3Export: Exports files from Amazon S3 cloud storage buckets.
33250
- NetSuiteExport: Exports data from Oracle NetSuite using saved searches, RESTlets, or SuiteApp.
33402
+ NetSuiteExport: Exports data from Oracle NetSuite through the Celigo SuiteApp/bundle RESTlets (saved searches or search criteria), SOAP web services, real-time listeners, or the file cabinet.
33403
+ NetSuiteHTTPExport: Exports records from Oracle NetSuite over its REST APIs — SuiteTalk REST record endpoints and SuiteQL, or a custom RESTlet — on a netsuite connection, with no saved search and no Celigo SuiteApp involved.
33251
33404
  SalesforceExport: Exports data from Salesforce using SOQL queries or real-time events.
33252
33405
  JDBCExport: Exports data from databases using JDBC connections.
33253
33406
  RDBMSExport: Exports data from relational databases using SQL queries.
@@ -33261,7 +33414,71 @@ components:
33261
33414
  examples:
33262
33415
  - HTTPExport
33263
33416
  - NetSuiteExport
33417
+ - NetSuiteHTTPExport
33264
33418
  - SalesforceExport
33419
+ x-celigo-ai-guidance:
33420
+ - |-
33421
+ On a netsuite connection, default to `NetSuiteHTTPExport` (with `nsDomainType` and an
33422
+ `http` object) for exports and lookups: it reads records over NetSuite's REST APIs with
33423
+ nothing to create in NetSuite first — SuiteQL for filtered or multi-table extracts, the
33424
+ record endpoint `GET /services/rest/record/v1/<type>/{id}` for one record. Choose
33425
+ `NetSuiteExport` when the user names an existing saved search or asks for one, for
33426
+ real-time listeners (`type: distributed`), and for file-cabinet exports; never convert an
33427
+ existing `NetSuiteExport` to `NetSuiteHTTPExport` unless asked.
33428
+ - |-
33429
+ When authoring a NetSuite REST export, send `adaptorType: "NetSuiteHTTPExport"` explicitly:
33430
+ on a netsuite connection the server otherwise infers `NetSuiteExport` and rejects the
33431
+ document with 422 "netsuite subschema not defined", even though `nsDomainType` and `http`
33432
+ are present.
33433
+ nsDomainType:
33434
+ type: string
33435
+ enum:
33436
+ - suitetalk
33437
+ - restlet
33438
+ x-lowercase: true
33439
+ x-enumDescriptions:
33440
+ suitetalk: NetSuite SuiteTalk REST web services — record endpoints under /services/rest/record/v1 and SuiteQL under /services/rest/query/v1
33441
+ restlet: A custom RESTlet script deployed in the NetSuite account, called at /app/site/hosting/restlet.nl?script=<id>&deploy=<n>
33442
+ description: |-
33443
+ Selects which NetSuite REST host a `NetSuiteHTTPExport` calls. The server derives the
33444
+ full base URL from the connection's NetSuite account
33445
+ (`https://<account>.suitetalk.api.netsuite.com` or `https://<account>.restlets.api.netsuite.com`)
33446
+ and signs each request with the connection's token-based credentials, so `http.relativeURI`
33447
+ carries the complete path starting at `/services/rest/...` or `/app/site/hosting/restlet.nl`.
33448
+ Ignored on other adaptor types.
33449
+ x-celigo-ai-guidance:
33450
+ - |-
33451
+ Required on `NetSuiteHTTPExport`: omitting it fails the save with 422 "Path `nsDomainType`
33452
+ is required." and any other value fails with 422 "is not a valid enum value for path
33453
+ `nsDomainType`". The export's `_connectionId` must be a netsuite connection — an http
33454
+ connection fails with 422 invalid_connection_type.
33455
+ - |-
33456
+ With `suitetalk`, saving links `http._httpConnectorVersionId`, `_httpConnectorResourceId`
33457
+ and `_httpConnectorEndpointId` to the platform's SuiteTalk connector from `http.method` +
33458
+ `http.relativeURI`, so the UI's Simple view renders an API-authored step; `restlet` steps
33459
+ are not linked.
33460
+ - |-
33461
+ The record list endpoint (`GET /services/rest/record/v1/<type>?limit=<n>&offset={{{export.http.paging.skip}}}`)
33462
+ returns only `{id, links}` per item, so it yields no business fields on its own. For
33463
+ records with fields use SuiteQL: `POST /services/rest/query/v1/suiteql?limit=<n>&offset={{{export.http.paging.skip}}}`,
33464
+ header `Prefer: transient`, `http.body` `{"q": "<SuiteQL>"}`, `http.paging.method: skip`,
33465
+ `http.response.resourcePath: items`; the response envelope carries `hasMore` and
33466
+ `totalResults`. SuiteQL column names are the Records Catalog names (lowercase, e.g.
33467
+ `entityid`, `lastmodifieddate`), not the REST record field names.
33468
+ - |-
33469
+ For incremental runs set `type: delta`, embed `{{lastExportDateTime}}` in the SuiteQL
33470
+ `WHERE` clause (or the record endpoint's `q` parameter) and set `delta.dateFormat` to the
33471
+ format the query compares against, e.g. `to_char(lastmodifieddate,'YYYY-MM-DD HH24:MI:SS') >= '{{lastExportDateTime}}'`
33472
+ with `delta.dateFormat: "YYYY-MM-DD HH:mm:ss"`. In a preview the placeholder renders
33473
+ empty, so preview results do not reflect the delta window.
33474
+ - |-
33475
+ NetSuite must have the REST Web Services feature enabled (Setup > Company > Enable
33476
+ Features > SuiteCloud); otherwise every SuiteTalk call fails with NetSuite 403
33477
+ FEATURE_DISABLED "The 'REST Web Services' feature is not enabled". Custom RESTlets do
33478
+ not need it.
33479
+ - |-
33480
+ `http.type` file, blob, and csvstream are each rejected with 422 unsupported_type
33481
+ ("NetSuiteHTTPExport does not support type: <value>") — REST steps are record-based only.
33265
33482
  type:
33266
33483
  type:
33267
33484
  - string
@@ -33533,8 +33750,8 @@ components:
33533
33750
  description: |-
33534
33751
  Field mappings applied to each incoming record before a lookup HTTP request is made,
33535
33752
  reshaping the upstream record into the structure the lookup target API expects. Only
33536
- supported when `isLookup` is true and `adaptorType` is `HTTPExport`; do not set it on
33537
- source exports or non-HTTP lookups.
33753
+ supported when `isLookup` is true and `adaptorType` is `HTTPExport` or
33754
+ `NetSuiteHTTPExport`; do not set it on source exports or other lookup adaptors.
33538
33755
  allOf:
33539
33756
  - $ref: '#/components/schemas/Mappings'
33540
33757
  x-celigo-ai-guidance:
@@ -33547,8 +33764,9 @@ components:
33547
33764
  1. ``isLookup`` is ``true`` (the export is being used as a
33548
33765
  lookup step, not a source export), AND
33549
33766
  2. ``adaptorType`` is ``"HTTPExport"`` (generic REST/SOAP
33550
- HTTP lookup — not NetSuite, Salesforce, RDBMS, file-based,
33551
- or any other adaptor).
33767
+ HTTP lookup) or ``"NetSuiteHTTPExport"`` (NetSuite REST
33768
+ APIs) — not the saved-search NetSuite adaptor, Salesforce,
33769
+ RDBMS, file-based, or any other adaptor.
33552
33770
 
33553
33771
  For any other combination (source exports, non-HTTP lookup
33554
33772
  exports), do **not** emit this field. Explain the constraint
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@celigo/api-specs",
3
- "version": "0.2.28",
3
+ "version": "0.2.30",
4
4
  "private": false,
5
5
  "description": "Public OpenAPI bundles (dist/) and the celigo-cli lint schema pack (schemas.json).",
6
6
  "keywords": [