@celigo/api-specs 0.2.159 → 0.2.161
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 +40 -2
- package/dist/export.yml +69 -17
- package/dist/flow.yml +18 -10
- package/dist/httpconnector.yml +40 -2
- package/dist/httpconnectorresource.yml +40 -2
- package/dist/import.yml +40 -2
- package/dist/lookupcache.yml +20 -2
- package/dist/processor.yml +5 -1
- package/dist/stack.yml +16 -4
- package/dist/tool.yml +40 -2
- package/dist/tradingpartnerconnector.yml +40 -2
- package/package.json +1 -1
- package/schemas.json +2 -2
package/dist/ai-agent.yml
CHANGED
|
@@ -4589,6 +4589,10 @@ components:
|
|
|
4589
4589
|
- Items that don't match are completely skipped
|
|
4590
4590
|
- No partial processing is performed
|
|
4591
4591
|
|
|
4592
|
+
Send the whole object. A rules array sent alone as the `filter` value is not
|
|
4593
|
+
stored, and a full update of an export that carries one removes the filter the
|
|
4594
|
+
export had, with no error.
|
|
4595
|
+
|
|
4592
4596
|
**Implementation approaches**
|
|
4593
4597
|
|
|
4594
4598
|
There are two distinct filtering mechanisms available:
|
|
@@ -4739,6 +4743,8 @@ components:
|
|
|
4739
4743
|
**Using `extract` to access record fields:**
|
|
4740
4744
|
- Retrieves values from the current record being processed
|
|
4741
4745
|
- Can access nested properties using dot notation (e.g., `"customer.email"`)
|
|
4746
|
+
- Paths are relative to the record itself: `["extract", "record.status"]`
|
|
4747
|
+
matches nothing
|
|
4742
4748
|
- In a record filter, must be wrapped in a type conversion (`string`, `number`,
|
|
4743
4749
|
`boolean` or `epochtime`): a bare `["extract", ...]` operand is refused with 422
|
|
4744
4750
|
"Field operation extract must be called by a Type Conversion Operation but was called
|
|
@@ -4749,9 +4755,17 @@ components:
|
|
|
4749
4755
|
- Retrieves values from the integration's configuration settings
|
|
4750
4756
|
- Supports different scopes with prefix notation:
|
|
4751
4757
|
- `flow.settingName`: Access flow-level settings
|
|
4752
|
-
- `
|
|
4753
|
-
- `
|
|
4758
|
+
- `flowGrouping.settingName`: Access the flow group's settings
|
|
4759
|
+
- `export.settingName`: Access the export's (or lookup's) own settings
|
|
4760
|
+
- `import.settingName`: Access the import's own settings
|
|
4754
4761
|
- `integration.settingName`: Access integration-level settings
|
|
4762
|
+
- `connection.settingName`, `iClient.settingName`: Access the step's
|
|
4763
|
+
connection and iClient settings
|
|
4764
|
+
- A scope whose resource has no settings can be absent; a rule that reads
|
|
4765
|
+
it matches nothing
|
|
4766
|
+
- Must be wrapped in a type conversion like `extract`: a bare
|
|
4767
|
+
`["settings", ...]` operand is refused with 422 "Field operation settings
|
|
4768
|
+
must be called by a Type Conversion Operation"
|
|
4755
4769
|
- Useful for dynamic filtering based on configuration
|
|
4756
4770
|
|
|
4757
4771
|
**Field Transformations**
|
|
@@ -4761,6 +4775,24 @@ components:
|
|
|
4761
4775
|
- `"floor"`: Round number down to the nearest integer
|
|
4762
4776
|
- `"abs"`: Get absolute value of a number
|
|
4763
4777
|
|
|
4778
|
+
**Arithmetic** (number operands)
|
|
4779
|
+
- `"add"`, `"subtract"`, `"multiply"`, `"divide"`, `"modulo"`: for example
|
|
4780
|
+
`["subtract", ["number", ["extract", "total"]], ["number", ["extract", "discount"]]]`.
|
|
4781
|
+
`mod` is not an operator (422 "Invalid operation: mod.").
|
|
4782
|
+
|
|
4783
|
+
**Dates**
|
|
4784
|
+
- `epochtime` reads ISO 8601 strings and epoch-millisecond numbers. An empty
|
|
4785
|
+
string, a string that isn't a date, or epoch milliseconds sent as a string
|
|
4786
|
+
fail it with "Invalid date. Cannot convert given string or number to date
|
|
4787
|
+
time.", followed by `; record=` and the record as JSON: in a run that record fails (`FILTER_EVALUATION_FAILED`, source
|
|
4788
|
+
`output_filter` on an export), and `POST /v1/processors/filter` and an
|
|
4789
|
+
export preview refuse the whole call with 422. `and` and `or` evaluate
|
|
4790
|
+
every operand, so a `notempty` test beside it doesn't prevent the failure.
|
|
4791
|
+
A missing or null field doesn't match.
|
|
4792
|
+
- `datetime`, `date` and `timestamp` are not type conversions: 422
|
|
4793
|
+
"Invalid operation: <name>."
|
|
4794
|
+
- `number` reads a missing or empty field as 0.
|
|
4795
|
+
|
|
4764
4796
|
**Handlebars operands**
|
|
4765
4797
|
- An operand can also be a string holding exactly one Handlebars expression, such as
|
|
4766
4798
|
`"{{record.status}}"` or `"{{lowercase record.code}}"`, on either side of the
|
|
@@ -4772,6 +4804,12 @@ components:
|
|
|
4772
4804
|
with 422 "invalid datetime format".
|
|
4773
4805
|
- A string with text around the expression, or with more than one expression, is
|
|
4774
4806
|
compared as a literal.
|
|
4807
|
+
- `["number", "{{timestamp \"x\"}}"]` is the current time in epoch milliseconds,
|
|
4808
|
+
so `["greaterthanequals", ["epochtime", ["extract", "created"]], ["subtract",
|
|
4809
|
+
["number", "{{timestamp \"x\"}}"], 604800000]]` keeps records created in the
|
|
4810
|
+
last 7 days.
|
|
4811
|
+
- An unknown helper fails the rule with 422 "Failed to evaluate handlebars
|
|
4812
|
+
expression".
|
|
4775
4813
|
|
|
4776
4814
|
Choose the type conversion that matches the comparison — `number` for numeric
|
|
4777
4815
|
comparisons, `epochtime` for dates, `string` for text. For example:
|
package/dist/export.yml
CHANGED
|
@@ -489,9 +489,10 @@ paths:
|
|
|
489
489
|
|
|
490
490
|
Use `test.limit` inside the body to cap the number of records
|
|
491
491
|
returned. Configuration errors in the export doc surface in the
|
|
492
|
-
`errors[]` and `stages[].errors[]` arrays within a 200 response
|
|
493
|
-
|
|
494
|
-
return 4xx
|
|
492
|
+
`errors[]` and `stages[].errors[]` arrays within a 200 response, but
|
|
493
|
+
not every failure does: structural validation failures (e.g. missing
|
|
494
|
+
`_connectionId`) return 4xx, and so does an output filter that can't
|
|
495
|
+
read a record's value (see the 422 response).
|
|
495
496
|
requestBody:
|
|
496
497
|
required: true
|
|
497
498
|
content:
|
|
@@ -522,7 +523,8 @@ paths:
|
|
|
522
523
|
responses:
|
|
523
524
|
'200':
|
|
524
525
|
description: |-
|
|
525
|
-
Preview envelope
|
|
526
|
+
Preview envelope for a preview that ran; a valid body can still answer
|
|
527
|
+
422 (see that response). User-error in
|
|
526
528
|
the export config (handlebars template failures, runtime errors)
|
|
527
529
|
surfaces in `errors[]` and `stages[].errors[]`; inspect those before
|
|
528
530
|
trusting `stages[].data[]`.
|
|
@@ -553,7 +555,11 @@ paths:
|
|
|
553
555
|
description: |-
|
|
554
556
|
Structural validation failed — typically `missing_required_field`
|
|
555
557
|
for fields the preview pipeline needs before it can execute
|
|
556
|
-
(e.g. `_connectionId`).
|
|
558
|
+
(e.g. `_connectionId`). A valid output filter also fails the preview
|
|
559
|
+
with 422 when a record holds a value its type conversion can't read,
|
|
560
|
+
such as an empty or non-date string under `epochtime`: the message is
|
|
561
|
+
"Invalid date. Cannot convert given string or number to date time.",
|
|
562
|
+
followed by `; record=` and that record as JSON.
|
|
557
563
|
content:
|
|
558
564
|
application/json:
|
|
559
565
|
schema:
|
|
@@ -2775,6 +2781,10 @@ components:
|
|
|
2775
2781
|
- Items that don't match are completely skipped
|
|
2776
2782
|
- No partial processing is performed
|
|
2777
2783
|
|
|
2784
|
+
Send the whole object. A rules array sent alone as the `filter` value is not
|
|
2785
|
+
stored, and a full update of an export that carries one removes the filter the
|
|
2786
|
+
export had, with no error.
|
|
2787
|
+
|
|
2778
2788
|
**Implementation approaches**
|
|
2779
2789
|
|
|
2780
2790
|
There are two distinct filtering mechanisms available:
|
|
@@ -2925,6 +2935,8 @@ components:
|
|
|
2925
2935
|
**Using `extract` to access record fields:**
|
|
2926
2936
|
- Retrieves values from the current record being processed
|
|
2927
2937
|
- Can access nested properties using dot notation (e.g., `"customer.email"`)
|
|
2938
|
+
- Paths are relative to the record itself: `["extract", "record.status"]`
|
|
2939
|
+
matches nothing
|
|
2928
2940
|
- In a record filter, must be wrapped in a type conversion (`string`, `number`,
|
|
2929
2941
|
`boolean` or `epochtime`): a bare `["extract", ...]` operand is refused with 422
|
|
2930
2942
|
"Field operation extract must be called by a Type Conversion Operation but was called
|
|
@@ -2935,9 +2947,17 @@ components:
|
|
|
2935
2947
|
- Retrieves values from the integration's configuration settings
|
|
2936
2948
|
- Supports different scopes with prefix notation:
|
|
2937
2949
|
- `flow.settingName`: Access flow-level settings
|
|
2938
|
-
- `
|
|
2939
|
-
- `
|
|
2950
|
+
- `flowGrouping.settingName`: Access the flow group's settings
|
|
2951
|
+
- `export.settingName`: Access the export's (or lookup's) own settings
|
|
2952
|
+
- `import.settingName`: Access the import's own settings
|
|
2940
2953
|
- `integration.settingName`: Access integration-level settings
|
|
2954
|
+
- `connection.settingName`, `iClient.settingName`: Access the step's
|
|
2955
|
+
connection and iClient settings
|
|
2956
|
+
- A scope whose resource has no settings can be absent; a rule that reads
|
|
2957
|
+
it matches nothing
|
|
2958
|
+
- Must be wrapped in a type conversion like `extract`: a bare
|
|
2959
|
+
`["settings", ...]` operand is refused with 422 "Field operation settings
|
|
2960
|
+
must be called by a Type Conversion Operation"
|
|
2941
2961
|
- Useful for dynamic filtering based on configuration
|
|
2942
2962
|
|
|
2943
2963
|
**Field Transformations**
|
|
@@ -2947,6 +2967,24 @@ components:
|
|
|
2947
2967
|
- `"floor"`: Round number down to the nearest integer
|
|
2948
2968
|
- `"abs"`: Get absolute value of a number
|
|
2949
2969
|
|
|
2970
|
+
**Arithmetic** (number operands)
|
|
2971
|
+
- `"add"`, `"subtract"`, `"multiply"`, `"divide"`, `"modulo"`: for example
|
|
2972
|
+
`["subtract", ["number", ["extract", "total"]], ["number", ["extract", "discount"]]]`.
|
|
2973
|
+
`mod` is not an operator (422 "Invalid operation: mod.").
|
|
2974
|
+
|
|
2975
|
+
**Dates**
|
|
2976
|
+
- `epochtime` reads ISO 8601 strings and epoch-millisecond numbers. An empty
|
|
2977
|
+
string, a string that isn't a date, or epoch milliseconds sent as a string
|
|
2978
|
+
fail it with "Invalid date. Cannot convert given string or number to date
|
|
2979
|
+
time.", followed by `; record=` and the record as JSON: in a run that record fails (`FILTER_EVALUATION_FAILED`, source
|
|
2980
|
+
`output_filter` on an export), and `POST /v1/processors/filter` and an
|
|
2981
|
+
export preview refuse the whole call with 422. `and` and `or` evaluate
|
|
2982
|
+
every operand, so a `notempty` test beside it doesn't prevent the failure.
|
|
2983
|
+
A missing or null field doesn't match.
|
|
2984
|
+
- `datetime`, `date` and `timestamp` are not type conversions: 422
|
|
2985
|
+
"Invalid operation: <name>."
|
|
2986
|
+
- `number` reads a missing or empty field as 0.
|
|
2987
|
+
|
|
2950
2988
|
**Handlebars operands**
|
|
2951
2989
|
- An operand can also be a string holding exactly one Handlebars expression, such as
|
|
2952
2990
|
`"{{record.status}}"` or `"{{lowercase record.code}}"`, on either side of the
|
|
@@ -2958,6 +2996,12 @@ components:
|
|
|
2958
2996
|
with 422 "invalid datetime format".
|
|
2959
2997
|
- A string with text around the expression, or with more than one expression, is
|
|
2960
2998
|
compared as a literal.
|
|
2999
|
+
- `["number", "{{timestamp \"x\"}}"]` is the current time in epoch milliseconds,
|
|
3000
|
+
so `["greaterthanequals", ["epochtime", ["extract", "created"]], ["subtract",
|
|
3001
|
+
["number", "{{timestamp \"x\"}}"], 604800000]]` keeps records created in the
|
|
3002
|
+
last 7 days.
|
|
3003
|
+
- An unknown helper fails the rule with 422 "Failed to evaluate handlebars
|
|
3004
|
+
expression".
|
|
2961
3005
|
|
|
2962
3006
|
Choose the type conversion that matches the comparison — `number` for numeric
|
|
2963
3007
|
comparisons, `epochtime` for dates, `string` for text. For example:
|
|
@@ -17329,8 +17373,8 @@ components:
|
|
|
17329
17373
|
type: array
|
|
17330
17374
|
description: |-
|
|
17331
17375
|
Final sampled records produced by the preview — the output of the last
|
|
17332
|
-
stage
|
|
17333
|
-
|
|
17376
|
+
stage, without the wrappers the transform, filter and hook stages put
|
|
17377
|
+
around it, so records the export's output filter dropped are not here.
|
|
17334
17378
|
Absent from the zero-record answers described under `stages`.
|
|
17335
17379
|
items: {}
|
|
17336
17380
|
dataURIs:
|
|
@@ -17351,13 +17395,17 @@ components:
|
|
|
17351
17395
|
type: array
|
|
17352
17396
|
description: |-
|
|
17353
17397
|
Ordered list of pipeline stages the preview traversed. The preview
|
|
17354
|
-
runs
|
|
17355
|
-
|
|
17356
|
-
|
|
17357
|
-
|
|
17358
|
-
|
|
17359
|
-
|
|
17360
|
-
|
|
17398
|
+
runs the export's pipeline, not just the parse: `request` and `raw`
|
|
17399
|
+
for HTTP exports; `parse` for a live read that returned records, and
|
|
17400
|
+
as the only stage when a `mockOutput` in the request body answers;
|
|
17401
|
+
`group` when the export groups records (grouped records are bare
|
|
17402
|
+
arrays of the grouped rows). After a live `parse`, the stages the
|
|
17403
|
+
export configures follow: the transform (`transformTwoDotZero` for
|
|
17404
|
+
Transformation 2.0 rules, `transform` for version 1 rules), the
|
|
17405
|
+
output filter (`outputFilter`, where each record it drops carries
|
|
17406
|
+
`isIgnored: true`) and the preSavePage hook (`preSavePageHook`, which
|
|
17407
|
+
receives only the records the filter kept). Top-level `data` holds
|
|
17408
|
+
the records the last of them kept, unwrapped. Each stage carries its `data[]`
|
|
17361
17409
|
output and any `errors[]` raised at that stage. A live read that
|
|
17362
17410
|
selects no records has been observed without a `parse` stage or
|
|
17363
17411
|
top-level `data` on two adaptors: an HTTP export returns only `request`
|
|
@@ -17369,11 +17417,15 @@ components:
|
|
|
17369
17417
|
properties:
|
|
17370
17418
|
name:
|
|
17371
17419
|
type: string
|
|
17372
|
-
description: Stage identifier (e.g. `parse`, `
|
|
17420
|
+
description: Stage identifier (e.g. `request`, `raw`, `parse`, `transformTwoDotZero`, `outputFilter`, `preSavePageHook`).
|
|
17373
17421
|
data:
|
|
17374
17422
|
description: |-
|
|
17375
17423
|
Stage output. Shape varies — `raw` carries the source
|
|
17376
17424
|
response, `parse` (and `group`) carry the extracted records.
|
|
17425
|
+
The transform and `outputFilter` stages carry one
|
|
17426
|
+
`{data, errors}` entry per record (a dropped record adds
|
|
17427
|
+
`isIgnored: true`), and `preSavePageHook` one entry for the
|
|
17428
|
+
page: the object the hook returned.
|
|
17377
17429
|
oneOf:
|
|
17378
17430
|
- title: Array
|
|
17379
17431
|
type: array
|
package/dist/flow.yml
CHANGED
|
@@ -8355,8 +8355,8 @@ components:
|
|
|
8355
8355
|
type: array
|
|
8356
8356
|
description: |-
|
|
8357
8357
|
Final sampled records produced by the preview — the output of the last
|
|
8358
|
-
stage
|
|
8359
|
-
|
|
8358
|
+
stage, without the wrappers the transform, filter and hook stages put
|
|
8359
|
+
around it, so records the export's output filter dropped are not here.
|
|
8360
8360
|
Absent from the zero-record answers described under `stages`.
|
|
8361
8361
|
items: {}
|
|
8362
8362
|
dataURIs:
|
|
@@ -8377,13 +8377,17 @@ components:
|
|
|
8377
8377
|
type: array
|
|
8378
8378
|
description: |-
|
|
8379
8379
|
Ordered list of pipeline stages the preview traversed. The preview
|
|
8380
|
-
runs
|
|
8381
|
-
|
|
8382
|
-
|
|
8383
|
-
|
|
8384
|
-
|
|
8385
|
-
|
|
8386
|
-
|
|
8380
|
+
runs the export's pipeline, not just the parse: `request` and `raw`
|
|
8381
|
+
for HTTP exports; `parse` for a live read that returned records, and
|
|
8382
|
+
as the only stage when a `mockOutput` in the request body answers;
|
|
8383
|
+
`group` when the export groups records (grouped records are bare
|
|
8384
|
+
arrays of the grouped rows). After a live `parse`, the stages the
|
|
8385
|
+
export configures follow: the transform (`transformTwoDotZero` for
|
|
8386
|
+
Transformation 2.0 rules, `transform` for version 1 rules), the
|
|
8387
|
+
output filter (`outputFilter`, where each record it drops carries
|
|
8388
|
+
`isIgnored: true`) and the preSavePage hook (`preSavePageHook`, which
|
|
8389
|
+
receives only the records the filter kept). Top-level `data` holds
|
|
8390
|
+
the records the last of them kept, unwrapped. Each stage carries its `data[]`
|
|
8387
8391
|
output and any `errors[]` raised at that stage. A live read that
|
|
8388
8392
|
selects no records has been observed without a `parse` stage or
|
|
8389
8393
|
top-level `data` on two adaptors: an HTTP export returns only `request`
|
|
@@ -8395,11 +8399,15 @@ components:
|
|
|
8395
8399
|
properties:
|
|
8396
8400
|
name:
|
|
8397
8401
|
type: string
|
|
8398
|
-
description: Stage identifier (e.g. `parse`, `
|
|
8402
|
+
description: Stage identifier (e.g. `request`, `raw`, `parse`, `transformTwoDotZero`, `outputFilter`, `preSavePageHook`).
|
|
8399
8403
|
data:
|
|
8400
8404
|
description: |-
|
|
8401
8405
|
Stage output. Shape varies — `raw` carries the source
|
|
8402
8406
|
response, `parse` (and `group`) carry the extracted records.
|
|
8407
|
+
The transform and `outputFilter` stages carry one
|
|
8408
|
+
`{data, errors}` entry per record (a dropped record adds
|
|
8409
|
+
`isIgnored: true`), and `preSavePageHook` one entry for the
|
|
8410
|
+
page: the object the hook returned.
|
|
8403
8411
|
oneOf:
|
|
8404
8412
|
- title: Array
|
|
8405
8413
|
type: array
|
package/dist/httpconnector.yml
CHANGED
|
@@ -1174,6 +1174,10 @@ components:
|
|
|
1174
1174
|
- Items that don't match are completely skipped
|
|
1175
1175
|
- No partial processing is performed
|
|
1176
1176
|
|
|
1177
|
+
Send the whole object. A rules array sent alone as the `filter` value is not
|
|
1178
|
+
stored, and a full update of an export that carries one removes the filter the
|
|
1179
|
+
export had, with no error.
|
|
1180
|
+
|
|
1177
1181
|
**Implementation approaches**
|
|
1178
1182
|
|
|
1179
1183
|
There are two distinct filtering mechanisms available:
|
|
@@ -1324,6 +1328,8 @@ components:
|
|
|
1324
1328
|
**Using `extract` to access record fields:**
|
|
1325
1329
|
- Retrieves values from the current record being processed
|
|
1326
1330
|
- Can access nested properties using dot notation (e.g., `"customer.email"`)
|
|
1331
|
+
- Paths are relative to the record itself: `["extract", "record.status"]`
|
|
1332
|
+
matches nothing
|
|
1327
1333
|
- In a record filter, must be wrapped in a type conversion (`string`, `number`,
|
|
1328
1334
|
`boolean` or `epochtime`): a bare `["extract", ...]` operand is refused with 422
|
|
1329
1335
|
"Field operation extract must be called by a Type Conversion Operation but was called
|
|
@@ -1334,9 +1340,17 @@ components:
|
|
|
1334
1340
|
- Retrieves values from the integration's configuration settings
|
|
1335
1341
|
- Supports different scopes with prefix notation:
|
|
1336
1342
|
- `flow.settingName`: Access flow-level settings
|
|
1337
|
-
- `
|
|
1338
|
-
- `
|
|
1343
|
+
- `flowGrouping.settingName`: Access the flow group's settings
|
|
1344
|
+
- `export.settingName`: Access the export's (or lookup's) own settings
|
|
1345
|
+
- `import.settingName`: Access the import's own settings
|
|
1339
1346
|
- `integration.settingName`: Access integration-level settings
|
|
1347
|
+
- `connection.settingName`, `iClient.settingName`: Access the step's
|
|
1348
|
+
connection and iClient settings
|
|
1349
|
+
- A scope whose resource has no settings can be absent; a rule that reads
|
|
1350
|
+
it matches nothing
|
|
1351
|
+
- Must be wrapped in a type conversion like `extract`: a bare
|
|
1352
|
+
`["settings", ...]` operand is refused with 422 "Field operation settings
|
|
1353
|
+
must be called by a Type Conversion Operation"
|
|
1340
1354
|
- Useful for dynamic filtering based on configuration
|
|
1341
1355
|
|
|
1342
1356
|
**Field Transformations**
|
|
@@ -1346,6 +1360,24 @@ components:
|
|
|
1346
1360
|
- `"floor"`: Round number down to the nearest integer
|
|
1347
1361
|
- `"abs"`: Get absolute value of a number
|
|
1348
1362
|
|
|
1363
|
+
**Arithmetic** (number operands)
|
|
1364
|
+
- `"add"`, `"subtract"`, `"multiply"`, `"divide"`, `"modulo"`: for example
|
|
1365
|
+
`["subtract", ["number", ["extract", "total"]], ["number", ["extract", "discount"]]]`.
|
|
1366
|
+
`mod` is not an operator (422 "Invalid operation: mod.").
|
|
1367
|
+
|
|
1368
|
+
**Dates**
|
|
1369
|
+
- `epochtime` reads ISO 8601 strings and epoch-millisecond numbers. An empty
|
|
1370
|
+
string, a string that isn't a date, or epoch milliseconds sent as a string
|
|
1371
|
+
fail it with "Invalid date. Cannot convert given string or number to date
|
|
1372
|
+
time.", followed by `; record=` and the record as JSON: in a run that record fails (`FILTER_EVALUATION_FAILED`, source
|
|
1373
|
+
`output_filter` on an export), and `POST /v1/processors/filter` and an
|
|
1374
|
+
export preview refuse the whole call with 422. `and` and `or` evaluate
|
|
1375
|
+
every operand, so a `notempty` test beside it doesn't prevent the failure.
|
|
1376
|
+
A missing or null field doesn't match.
|
|
1377
|
+
- `datetime`, `date` and `timestamp` are not type conversions: 422
|
|
1378
|
+
"Invalid operation: <name>."
|
|
1379
|
+
- `number` reads a missing or empty field as 0.
|
|
1380
|
+
|
|
1349
1381
|
**Handlebars operands**
|
|
1350
1382
|
- An operand can also be a string holding exactly one Handlebars expression, such as
|
|
1351
1383
|
`"{{record.status}}"` or `"{{lowercase record.code}}"`, on either side of the
|
|
@@ -1357,6 +1389,12 @@ components:
|
|
|
1357
1389
|
with 422 "invalid datetime format".
|
|
1358
1390
|
- A string with text around the expression, or with more than one expression, is
|
|
1359
1391
|
compared as a literal.
|
|
1392
|
+
- `["number", "{{timestamp \"x\"}}"]` is the current time in epoch milliseconds,
|
|
1393
|
+
so `["greaterthanequals", ["epochtime", ["extract", "created"]], ["subtract",
|
|
1394
|
+
["number", "{{timestamp \"x\"}}"], 604800000]]` keeps records created in the
|
|
1395
|
+
last 7 days.
|
|
1396
|
+
- An unknown helper fails the rule with 422 "Failed to evaluate handlebars
|
|
1397
|
+
expression".
|
|
1360
1398
|
|
|
1361
1399
|
Choose the type conversion that matches the comparison — `number` for numeric
|
|
1362
1400
|
comparisons, `epochtime` for dates, `string` for text. For example:
|
|
@@ -620,6 +620,10 @@ components:
|
|
|
620
620
|
- Items that don't match are completely skipped
|
|
621
621
|
- No partial processing is performed
|
|
622
622
|
|
|
623
|
+
Send the whole object. A rules array sent alone as the `filter` value is not
|
|
624
|
+
stored, and a full update of an export that carries one removes the filter the
|
|
625
|
+
export had, with no error.
|
|
626
|
+
|
|
623
627
|
**Implementation approaches**
|
|
624
628
|
|
|
625
629
|
There are two distinct filtering mechanisms available:
|
|
@@ -770,6 +774,8 @@ components:
|
|
|
770
774
|
**Using `extract` to access record fields:**
|
|
771
775
|
- Retrieves values from the current record being processed
|
|
772
776
|
- Can access nested properties using dot notation (e.g., `"customer.email"`)
|
|
777
|
+
- Paths are relative to the record itself: `["extract", "record.status"]`
|
|
778
|
+
matches nothing
|
|
773
779
|
- In a record filter, must be wrapped in a type conversion (`string`, `number`,
|
|
774
780
|
`boolean` or `epochtime`): a bare `["extract", ...]` operand is refused with 422
|
|
775
781
|
"Field operation extract must be called by a Type Conversion Operation but was called
|
|
@@ -780,9 +786,17 @@ components:
|
|
|
780
786
|
- Retrieves values from the integration's configuration settings
|
|
781
787
|
- Supports different scopes with prefix notation:
|
|
782
788
|
- `flow.settingName`: Access flow-level settings
|
|
783
|
-
- `
|
|
784
|
-
- `
|
|
789
|
+
- `flowGrouping.settingName`: Access the flow group's settings
|
|
790
|
+
- `export.settingName`: Access the export's (or lookup's) own settings
|
|
791
|
+
- `import.settingName`: Access the import's own settings
|
|
785
792
|
- `integration.settingName`: Access integration-level settings
|
|
793
|
+
- `connection.settingName`, `iClient.settingName`: Access the step's
|
|
794
|
+
connection and iClient settings
|
|
795
|
+
- A scope whose resource has no settings can be absent; a rule that reads
|
|
796
|
+
it matches nothing
|
|
797
|
+
- Must be wrapped in a type conversion like `extract`: a bare
|
|
798
|
+
`["settings", ...]` operand is refused with 422 "Field operation settings
|
|
799
|
+
must be called by a Type Conversion Operation"
|
|
786
800
|
- Useful for dynamic filtering based on configuration
|
|
787
801
|
|
|
788
802
|
**Field Transformations**
|
|
@@ -792,6 +806,24 @@ components:
|
|
|
792
806
|
- `"floor"`: Round number down to the nearest integer
|
|
793
807
|
- `"abs"`: Get absolute value of a number
|
|
794
808
|
|
|
809
|
+
**Arithmetic** (number operands)
|
|
810
|
+
- `"add"`, `"subtract"`, `"multiply"`, `"divide"`, `"modulo"`: for example
|
|
811
|
+
`["subtract", ["number", ["extract", "total"]], ["number", ["extract", "discount"]]]`.
|
|
812
|
+
`mod` is not an operator (422 "Invalid operation: mod.").
|
|
813
|
+
|
|
814
|
+
**Dates**
|
|
815
|
+
- `epochtime` reads ISO 8601 strings and epoch-millisecond numbers. An empty
|
|
816
|
+
string, a string that isn't a date, or epoch milliseconds sent as a string
|
|
817
|
+
fail it with "Invalid date. Cannot convert given string or number to date
|
|
818
|
+
time.", followed by `; record=` and the record as JSON: in a run that record fails (`FILTER_EVALUATION_FAILED`, source
|
|
819
|
+
`output_filter` on an export), and `POST /v1/processors/filter` and an
|
|
820
|
+
export preview refuse the whole call with 422. `and` and `or` evaluate
|
|
821
|
+
every operand, so a `notempty` test beside it doesn't prevent the failure.
|
|
822
|
+
A missing or null field doesn't match.
|
|
823
|
+
- `datetime`, `date` and `timestamp` are not type conversions: 422
|
|
824
|
+
"Invalid operation: <name>."
|
|
825
|
+
- `number` reads a missing or empty field as 0.
|
|
826
|
+
|
|
795
827
|
**Handlebars operands**
|
|
796
828
|
- An operand can also be a string holding exactly one Handlebars expression, such as
|
|
797
829
|
`"{{record.status}}"` or `"{{lowercase record.code}}"`, on either side of the
|
|
@@ -803,6 +835,12 @@ components:
|
|
|
803
835
|
with 422 "invalid datetime format".
|
|
804
836
|
- A string with text around the expression, or with more than one expression, is
|
|
805
837
|
compared as a literal.
|
|
838
|
+
- `["number", "{{timestamp \"x\"}}"]` is the current time in epoch milliseconds,
|
|
839
|
+
so `["greaterthanequals", ["epochtime", ["extract", "created"]], ["subtract",
|
|
840
|
+
["number", "{{timestamp \"x\"}}"], 604800000]]` keeps records created in the
|
|
841
|
+
last 7 days.
|
|
842
|
+
- An unknown helper fails the rule with 422 "Failed to evaluate handlebars
|
|
843
|
+
expression".
|
|
806
844
|
|
|
807
845
|
Choose the type conversion that matches the comparison — `number` for numeric
|
|
808
846
|
comparisons, `epochtime` for dates, `string` for text. For example:
|
package/dist/import.yml
CHANGED
|
@@ -12091,6 +12091,10 @@ components:
|
|
|
12091
12091
|
- Items that don't match are completely skipped
|
|
12092
12092
|
- No partial processing is performed
|
|
12093
12093
|
|
|
12094
|
+
Send the whole object. A rules array sent alone as the `filter` value is not
|
|
12095
|
+
stored, and a full update of an export that carries one removes the filter the
|
|
12096
|
+
export had, with no error.
|
|
12097
|
+
|
|
12094
12098
|
**Implementation approaches**
|
|
12095
12099
|
|
|
12096
12100
|
There are two distinct filtering mechanisms available:
|
|
@@ -12241,6 +12245,8 @@ components:
|
|
|
12241
12245
|
**Using `extract` to access record fields:**
|
|
12242
12246
|
- Retrieves values from the current record being processed
|
|
12243
12247
|
- Can access nested properties using dot notation (e.g., `"customer.email"`)
|
|
12248
|
+
- Paths are relative to the record itself: `["extract", "record.status"]`
|
|
12249
|
+
matches nothing
|
|
12244
12250
|
- In a record filter, must be wrapped in a type conversion (`string`, `number`,
|
|
12245
12251
|
`boolean` or `epochtime`): a bare `["extract", ...]` operand is refused with 422
|
|
12246
12252
|
"Field operation extract must be called by a Type Conversion Operation but was called
|
|
@@ -12251,9 +12257,17 @@ components:
|
|
|
12251
12257
|
- Retrieves values from the integration's configuration settings
|
|
12252
12258
|
- Supports different scopes with prefix notation:
|
|
12253
12259
|
- `flow.settingName`: Access flow-level settings
|
|
12254
|
-
- `
|
|
12255
|
-
- `
|
|
12260
|
+
- `flowGrouping.settingName`: Access the flow group's settings
|
|
12261
|
+
- `export.settingName`: Access the export's (or lookup's) own settings
|
|
12262
|
+
- `import.settingName`: Access the import's own settings
|
|
12256
12263
|
- `integration.settingName`: Access integration-level settings
|
|
12264
|
+
- `connection.settingName`, `iClient.settingName`: Access the step's
|
|
12265
|
+
connection and iClient settings
|
|
12266
|
+
- A scope whose resource has no settings can be absent; a rule that reads
|
|
12267
|
+
it matches nothing
|
|
12268
|
+
- Must be wrapped in a type conversion like `extract`: a bare
|
|
12269
|
+
`["settings", ...]` operand is refused with 422 "Field operation settings
|
|
12270
|
+
must be called by a Type Conversion Operation"
|
|
12257
12271
|
- Useful for dynamic filtering based on configuration
|
|
12258
12272
|
|
|
12259
12273
|
**Field Transformations**
|
|
@@ -12263,6 +12277,24 @@ components:
|
|
|
12263
12277
|
- `"floor"`: Round number down to the nearest integer
|
|
12264
12278
|
- `"abs"`: Get absolute value of a number
|
|
12265
12279
|
|
|
12280
|
+
**Arithmetic** (number operands)
|
|
12281
|
+
- `"add"`, `"subtract"`, `"multiply"`, `"divide"`, `"modulo"`: for example
|
|
12282
|
+
`["subtract", ["number", ["extract", "total"]], ["number", ["extract", "discount"]]]`.
|
|
12283
|
+
`mod` is not an operator (422 "Invalid operation: mod.").
|
|
12284
|
+
|
|
12285
|
+
**Dates**
|
|
12286
|
+
- `epochtime` reads ISO 8601 strings and epoch-millisecond numbers. An empty
|
|
12287
|
+
string, a string that isn't a date, or epoch milliseconds sent as a string
|
|
12288
|
+
fail it with "Invalid date. Cannot convert given string or number to date
|
|
12289
|
+
time.", followed by `; record=` and the record as JSON: in a run that record fails (`FILTER_EVALUATION_FAILED`, source
|
|
12290
|
+
`output_filter` on an export), and `POST /v1/processors/filter` and an
|
|
12291
|
+
export preview refuse the whole call with 422. `and` and `or` evaluate
|
|
12292
|
+
every operand, so a `notempty` test beside it doesn't prevent the failure.
|
|
12293
|
+
A missing or null field doesn't match.
|
|
12294
|
+
- `datetime`, `date` and `timestamp` are not type conversions: 422
|
|
12295
|
+
"Invalid operation: <name>."
|
|
12296
|
+
- `number` reads a missing or empty field as 0.
|
|
12297
|
+
|
|
12266
12298
|
**Handlebars operands**
|
|
12267
12299
|
- An operand can also be a string holding exactly one Handlebars expression, such as
|
|
12268
12300
|
`"{{record.status}}"` or `"{{lowercase record.code}}"`, on either side of the
|
|
@@ -12274,6 +12306,12 @@ components:
|
|
|
12274
12306
|
with 422 "invalid datetime format".
|
|
12275
12307
|
- A string with text around the expression, or with more than one expression, is
|
|
12276
12308
|
compared as a literal.
|
|
12309
|
+
- `["number", "{{timestamp \"x\"}}"]` is the current time in epoch milliseconds,
|
|
12310
|
+
so `["greaterthanequals", ["epochtime", ["extract", "created"]], ["subtract",
|
|
12311
|
+
["number", "{{timestamp \"x\"}}"], 604800000]]` keeps records created in the
|
|
12312
|
+
last 7 days.
|
|
12313
|
+
- An unknown helper fails the rule with 422 "Failed to evaluate handlebars
|
|
12314
|
+
expression".
|
|
12277
12315
|
|
|
12278
12316
|
Choose the type conversion that matches the comparison — `number` for numeric
|
|
12279
12317
|
comparisons, `epochtime` for dates, `string` for text. For example:
|
package/dist/lookupcache.yml
CHANGED
|
@@ -335,6 +335,11 @@ paths:
|
|
|
335
335
|
Soft-deletes a lookup cache and all its data. Retained for 30 days
|
|
336
336
|
before permanent removal. To clear data without deleting the cache
|
|
337
337
|
itself, use `DELETE /v1/lookupcaches/{_id}/data/purge` instead.
|
|
338
|
+
|
|
339
|
+
A cache that an export's or import's lookup still uses, or that an
|
|
340
|
+
integration's alias points at, can't be deleted (422). The delete also
|
|
341
|
+
removes the cache from every integration's `_registeredLookupCacheIds`,
|
|
342
|
+
and restoring it from the recycle bin doesn't register it again.
|
|
338
343
|
operationId: deleteLookupCache
|
|
339
344
|
tags:
|
|
340
345
|
- Lookup Caches
|
|
@@ -358,13 +363,26 @@ paths:
|
|
|
358
363
|
$ref: '#/components/responses/404-not-found'
|
|
359
364
|
'422':
|
|
360
365
|
description: |-
|
|
361
|
-
An integration's `aliases[]`
|
|
362
|
-
alias, so remove it from that integration's `aliases
|
|
366
|
+
The cache is still in use. An integration's `aliases[]` points at it (checked first):
|
|
367
|
+
registering a cache adds such an alias, so remove it from that integration's `aliases`.
|
|
368
|
+
Or an export's or import's lookup uses it: the message names each such export or import
|
|
369
|
+
("must be deleted before you can delete lookupcache"), and for an export in a flow names
|
|
370
|
+
that flow as well, but removing the lookup from the step is enough. Then delete again.
|
|
363
371
|
content:
|
|
364
372
|
application/json:
|
|
365
373
|
schema:
|
|
366
374
|
$ref: '#/components/schemas/Error'
|
|
367
375
|
examples:
|
|
376
|
+
export_referenced:
|
|
377
|
+
summary: An export in a flow uses the cache in a Transformation 2.0 lookup
|
|
378
|
+
value:
|
|
379
|
+
errors:
|
|
380
|
+
- message: export <exportId> must be deleted before you can delete lookupcache <lookupCacheId>; flow <flowId> must be deleted before you can delete lookupcache <lookupCacheId>
|
|
381
|
+
import_referenced:
|
|
382
|
+
summary: An import in no flow uses the cache in an http.lookups entry
|
|
383
|
+
value:
|
|
384
|
+
errors:
|
|
385
|
+
- message: import <importId> must be deleted before you can delete lookupcache <lookupCacheId>
|
|
368
386
|
alias_referenced:
|
|
369
387
|
value:
|
|
370
388
|
errors:
|
package/dist/processor.yml
CHANGED
|
@@ -1151,7 +1151,11 @@ paths:
|
|
|
1151
1151
|
description: |-
|
|
1152
1152
|
The rules are invalid, for example an unknown operator ("Invalid operation: isnotempty.") or
|
|
1153
1153
|
an `extract` that is not wrapped in a type conversion ("Field operation extract must be called
|
|
1154
|
-
by a Type Conversion Operation but was called by notempty.").
|
|
1154
|
+
by a Type Conversion Operation but was called by notempty."). A valid rule is refused the same
|
|
1155
|
+
way when a record holds a value its type conversion can't read: an `epochtime` operand on an
|
|
1156
|
+
empty string, a string that isn't a date, or epoch milliseconds sent as a string fails the
|
|
1157
|
+
whole call with "Invalid date. Cannot convert given string or number to date time.",
|
|
1158
|
+
followed by `; record=` and that record as JSON.
|
|
1155
1159
|
content:
|
|
1156
1160
|
application/json:
|
|
1157
1161
|
schema:
|
package/dist/stack.yml
CHANGED
|
@@ -223,6 +223,13 @@ paths:
|
|
|
223
223
|
Updates a stack. Omitting the config object clears optional fields
|
|
224
224
|
like `framework`. To rotate a server stack's system token, use
|
|
225
225
|
`DELETE /v1/stacks/{_id}/systemToken` instead.
|
|
226
|
+
|
|
227
|
+
Send the secrets as a GET returned them. On a lambda stack, a
|
|
228
|
+
`lambda.secretAccessKey` of `******` keeps the stored secret, and a
|
|
229
|
+
body without `secretAccessKey` is refused with 422 ("secretAccessKey
|
|
230
|
+
is not provided for the stack of type lambda."). On a server stack, a
|
|
231
|
+
PUT ignores `server.systemToken`, whether the body omits it, masks it
|
|
232
|
+
or carries another value.
|
|
226
233
|
operationId: updateStack
|
|
227
234
|
tags:
|
|
228
235
|
- Stacks
|
|
@@ -289,7 +296,8 @@ paths:
|
|
|
289
296
|
x-celigo-ai-guidance:
|
|
290
297
|
- |-
|
|
291
298
|
- You can update `name`, `framework`, and the config object for the active `type`.
|
|
292
|
-
- Secrets are write-only
|
|
299
|
+
- Secrets are write-only, and responses return them masked. On a lambda stack, send a new `secretAccessKey` to replace the stored one, or the `******` mask a GET returned to keep it; leaving it out is refused with 422.
|
|
300
|
+
- On a server stack, a PUT can't change `server.systemToken`; rotate it with `DELETE /v1/stacks/{_id}/systemToken`.
|
|
293
301
|
delete:
|
|
294
302
|
x-internal: false
|
|
295
303
|
summary: Delete a stack
|
|
@@ -1278,7 +1286,8 @@ components:
|
|
|
1278
1286
|
System token for authenticating with the server stack.
|
|
1279
1287
|
Always masked as "******" in standard responses. Use the
|
|
1280
1288
|
dedicated `/stacks/{_id}/systemToken` endpoint to retrieve
|
|
1281
|
-
the actual value.
|
|
1289
|
+
the actual value. A PUT ignores this field whatever it
|
|
1290
|
+
carries; `DELETE /stacks/{_id}/systemToken` rotates it.
|
|
1282
1291
|
examples:
|
|
1283
1292
|
- '******'
|
|
1284
1293
|
lambda:
|
|
@@ -1483,7 +1492,7 @@ components:
|
|
|
1483
1492
|
x-celigo-ai-guidance:
|
|
1484
1493
|
- |-
|
|
1485
1494
|
Required when `type` is "server".
|
|
1486
|
-
The system token is auto-generated on creation and cannot be set directly.
|
|
1495
|
+
The system token is auto-generated on creation and cannot be set directly: a PUT ignores any `systemToken` it carries.
|
|
1487
1496
|
required:
|
|
1488
1497
|
- hostURI
|
|
1489
1498
|
properties:
|
|
@@ -1513,7 +1522,10 @@ components:
|
|
|
1513
1522
|
secretAccessKey:
|
|
1514
1523
|
type: string
|
|
1515
1524
|
maxLength: 511
|
|
1516
|
-
description:
|
|
1525
|
+
description: |-
|
|
1526
|
+
AWS secret access key. Write-only — responses mask it as "******".
|
|
1527
|
+
On a PUT, the mask sent back keeps the stored secret, and leaving
|
|
1528
|
+
the field out is refused with 422.
|
|
1517
1529
|
examples:
|
|
1518
1530
|
- wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
|
|
1519
1531
|
awsRegion:
|
package/dist/tool.yml
CHANGED
|
@@ -23599,6 +23599,10 @@ components:
|
|
|
23599
23599
|
- Items that don't match are completely skipped
|
|
23600
23600
|
- No partial processing is performed
|
|
23601
23601
|
|
|
23602
|
+
Send the whole object. A rules array sent alone as the `filter` value is not
|
|
23603
|
+
stored, and a full update of an export that carries one removes the filter the
|
|
23604
|
+
export had, with no error.
|
|
23605
|
+
|
|
23602
23606
|
**Implementation approaches**
|
|
23603
23607
|
|
|
23604
23608
|
There are two distinct filtering mechanisms available:
|
|
@@ -23749,6 +23753,8 @@ components:
|
|
|
23749
23753
|
**Using `extract` to access record fields:**
|
|
23750
23754
|
- Retrieves values from the current record being processed
|
|
23751
23755
|
- Can access nested properties using dot notation (e.g., `"customer.email"`)
|
|
23756
|
+
- Paths are relative to the record itself: `["extract", "record.status"]`
|
|
23757
|
+
matches nothing
|
|
23752
23758
|
- In a record filter, must be wrapped in a type conversion (`string`, `number`,
|
|
23753
23759
|
`boolean` or `epochtime`): a bare `["extract", ...]` operand is refused with 422
|
|
23754
23760
|
"Field operation extract must be called by a Type Conversion Operation but was called
|
|
@@ -23759,9 +23765,17 @@ components:
|
|
|
23759
23765
|
- Retrieves values from the integration's configuration settings
|
|
23760
23766
|
- Supports different scopes with prefix notation:
|
|
23761
23767
|
- `flow.settingName`: Access flow-level settings
|
|
23762
|
-
- `
|
|
23763
|
-
- `
|
|
23768
|
+
- `flowGrouping.settingName`: Access the flow group's settings
|
|
23769
|
+
- `export.settingName`: Access the export's (or lookup's) own settings
|
|
23770
|
+
- `import.settingName`: Access the import's own settings
|
|
23764
23771
|
- `integration.settingName`: Access integration-level settings
|
|
23772
|
+
- `connection.settingName`, `iClient.settingName`: Access the step's
|
|
23773
|
+
connection and iClient settings
|
|
23774
|
+
- A scope whose resource has no settings can be absent; a rule that reads
|
|
23775
|
+
it matches nothing
|
|
23776
|
+
- Must be wrapped in a type conversion like `extract`: a bare
|
|
23777
|
+
`["settings", ...]` operand is refused with 422 "Field operation settings
|
|
23778
|
+
must be called by a Type Conversion Operation"
|
|
23765
23779
|
- Useful for dynamic filtering based on configuration
|
|
23766
23780
|
|
|
23767
23781
|
**Field Transformations**
|
|
@@ -23771,6 +23785,24 @@ components:
|
|
|
23771
23785
|
- `"floor"`: Round number down to the nearest integer
|
|
23772
23786
|
- `"abs"`: Get absolute value of a number
|
|
23773
23787
|
|
|
23788
|
+
**Arithmetic** (number operands)
|
|
23789
|
+
- `"add"`, `"subtract"`, `"multiply"`, `"divide"`, `"modulo"`: for example
|
|
23790
|
+
`["subtract", ["number", ["extract", "total"]], ["number", ["extract", "discount"]]]`.
|
|
23791
|
+
`mod` is not an operator (422 "Invalid operation: mod.").
|
|
23792
|
+
|
|
23793
|
+
**Dates**
|
|
23794
|
+
- `epochtime` reads ISO 8601 strings and epoch-millisecond numbers. An empty
|
|
23795
|
+
string, a string that isn't a date, or epoch milliseconds sent as a string
|
|
23796
|
+
fail it with "Invalid date. Cannot convert given string or number to date
|
|
23797
|
+
time.", followed by `; record=` and the record as JSON: in a run that record fails (`FILTER_EVALUATION_FAILED`, source
|
|
23798
|
+
`output_filter` on an export), and `POST /v1/processors/filter` and an
|
|
23799
|
+
export preview refuse the whole call with 422. `and` and `or` evaluate
|
|
23800
|
+
every operand, so a `notempty` test beside it doesn't prevent the failure.
|
|
23801
|
+
A missing or null field doesn't match.
|
|
23802
|
+
- `datetime`, `date` and `timestamp` are not type conversions: 422
|
|
23803
|
+
"Invalid operation: <name>."
|
|
23804
|
+
- `number` reads a missing or empty field as 0.
|
|
23805
|
+
|
|
23774
23806
|
**Handlebars operands**
|
|
23775
23807
|
- An operand can also be a string holding exactly one Handlebars expression, such as
|
|
23776
23808
|
`"{{record.status}}"` or `"{{lowercase record.code}}"`, on either side of the
|
|
@@ -23782,6 +23814,12 @@ components:
|
|
|
23782
23814
|
with 422 "invalid datetime format".
|
|
23783
23815
|
- A string with text around the expression, or with more than one expression, is
|
|
23784
23816
|
compared as a literal.
|
|
23817
|
+
- `["number", "{{timestamp \"x\"}}"]` is the current time in epoch milliseconds,
|
|
23818
|
+
so `["greaterthanequals", ["epochtime", ["extract", "created"]], ["subtract",
|
|
23819
|
+
["number", "{{timestamp \"x\"}}"], 604800000]]` keeps records created in the
|
|
23820
|
+
last 7 days.
|
|
23821
|
+
- An unknown helper fails the rule with 422 "Failed to evaluate handlebars
|
|
23822
|
+
expression".
|
|
23785
23823
|
|
|
23786
23824
|
Choose the type conversion that matches the comparison — `number` for numeric
|
|
23787
23825
|
comparisons, `epochtime` for dates, `string` for text. For example:
|
|
@@ -488,6 +488,10 @@ components:
|
|
|
488
488
|
- Items that don't match are completely skipped
|
|
489
489
|
- No partial processing is performed
|
|
490
490
|
|
|
491
|
+
Send the whole object. A rules array sent alone as the `filter` value is not
|
|
492
|
+
stored, and a full update of an export that carries one removes the filter the
|
|
493
|
+
export had, with no error.
|
|
494
|
+
|
|
491
495
|
**Implementation approaches**
|
|
492
496
|
|
|
493
497
|
There are two distinct filtering mechanisms available:
|
|
@@ -638,6 +642,8 @@ components:
|
|
|
638
642
|
**Using `extract` to access record fields:**
|
|
639
643
|
- Retrieves values from the current record being processed
|
|
640
644
|
- Can access nested properties using dot notation (e.g., `"customer.email"`)
|
|
645
|
+
- Paths are relative to the record itself: `["extract", "record.status"]`
|
|
646
|
+
matches nothing
|
|
641
647
|
- In a record filter, must be wrapped in a type conversion (`string`, `number`,
|
|
642
648
|
`boolean` or `epochtime`): a bare `["extract", ...]` operand is refused with 422
|
|
643
649
|
"Field operation extract must be called by a Type Conversion Operation but was called
|
|
@@ -648,9 +654,17 @@ components:
|
|
|
648
654
|
- Retrieves values from the integration's configuration settings
|
|
649
655
|
- Supports different scopes with prefix notation:
|
|
650
656
|
- `flow.settingName`: Access flow-level settings
|
|
651
|
-
- `
|
|
652
|
-
- `
|
|
657
|
+
- `flowGrouping.settingName`: Access the flow group's settings
|
|
658
|
+
- `export.settingName`: Access the export's (or lookup's) own settings
|
|
659
|
+
- `import.settingName`: Access the import's own settings
|
|
653
660
|
- `integration.settingName`: Access integration-level settings
|
|
661
|
+
- `connection.settingName`, `iClient.settingName`: Access the step's
|
|
662
|
+
connection and iClient settings
|
|
663
|
+
- A scope whose resource has no settings can be absent; a rule that reads
|
|
664
|
+
it matches nothing
|
|
665
|
+
- Must be wrapped in a type conversion like `extract`: a bare
|
|
666
|
+
`["settings", ...]` operand is refused with 422 "Field operation settings
|
|
667
|
+
must be called by a Type Conversion Operation"
|
|
654
668
|
- Useful for dynamic filtering based on configuration
|
|
655
669
|
|
|
656
670
|
**Field Transformations**
|
|
@@ -660,6 +674,24 @@ components:
|
|
|
660
674
|
- `"floor"`: Round number down to the nearest integer
|
|
661
675
|
- `"abs"`: Get absolute value of a number
|
|
662
676
|
|
|
677
|
+
**Arithmetic** (number operands)
|
|
678
|
+
- `"add"`, `"subtract"`, `"multiply"`, `"divide"`, `"modulo"`: for example
|
|
679
|
+
`["subtract", ["number", ["extract", "total"]], ["number", ["extract", "discount"]]]`.
|
|
680
|
+
`mod` is not an operator (422 "Invalid operation: mod.").
|
|
681
|
+
|
|
682
|
+
**Dates**
|
|
683
|
+
- `epochtime` reads ISO 8601 strings and epoch-millisecond numbers. An empty
|
|
684
|
+
string, a string that isn't a date, or epoch milliseconds sent as a string
|
|
685
|
+
fail it with "Invalid date. Cannot convert given string or number to date
|
|
686
|
+
time.", followed by `; record=` and the record as JSON: in a run that record fails (`FILTER_EVALUATION_FAILED`, source
|
|
687
|
+
`output_filter` on an export), and `POST /v1/processors/filter` and an
|
|
688
|
+
export preview refuse the whole call with 422. `and` and `or` evaluate
|
|
689
|
+
every operand, so a `notempty` test beside it doesn't prevent the failure.
|
|
690
|
+
A missing or null field doesn't match.
|
|
691
|
+
- `datetime`, `date` and `timestamp` are not type conversions: 422
|
|
692
|
+
"Invalid operation: <name>."
|
|
693
|
+
- `number` reads a missing or empty field as 0.
|
|
694
|
+
|
|
663
695
|
**Handlebars operands**
|
|
664
696
|
- An operand can also be a string holding exactly one Handlebars expression, such as
|
|
665
697
|
`"{{record.status}}"` or `"{{lowercase record.code}}"`, on either side of the
|
|
@@ -671,6 +703,12 @@ components:
|
|
|
671
703
|
with 422 "invalid datetime format".
|
|
672
704
|
- A string with text around the expression, or with more than one expression, is
|
|
673
705
|
compared as a literal.
|
|
706
|
+
- `["number", "{{timestamp \"x\"}}"]` is the current time in epoch milliseconds,
|
|
707
|
+
so `["greaterthanequals", ["epochtime", ["extract", "created"]], ["subtract",
|
|
708
|
+
["number", "{{timestamp \"x\"}}"], 604800000]]` keeps records created in the
|
|
709
|
+
last 7 days.
|
|
710
|
+
- An unknown helper fails the rule with 422 "Failed to evaluate handlebars
|
|
711
|
+
expression".
|
|
674
712
|
|
|
675
713
|
Choose the type conversion that matches the comparison — `number` for numeric
|
|
676
714
|
comparisons, `epochtime` for dates, `string` for text. For example:
|
package/package.json
CHANGED