slicetest 0.7.0 → 0.9.0
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/README.md +83 -17
- package/dist/cli-run.d.ts +13 -0
- package/dist/cli-run.js +15 -0
- package/dist/cli.js +32 -2
- package/dist/config.d.ts +6 -0
- package/dist/config.js +48 -0
- package/dist/db.d.ts +12 -1
- package/dist/db.js +33 -6
- package/dist/form.d.ts +8 -2
- package/dist/form.js +85 -11
- package/dist/global-setup.d.ts +5 -0
- package/dist/global-setup.js +32 -11
- package/dist/har.js +3 -3
- package/dist/http.d.ts +40 -4
- package/dist/http.js +126 -13
- package/dist/index.d.ts +4 -3
- package/dist/init.js +53 -8
- package/dist/list.d.ts +26 -0
- package/dist/list.js +71 -0
- package/dist/matchers.d.ts +21 -3
- package/dist/matchers.js +91 -2
- package/dist/openapi.d.ts +0 -5
- package/dist/openapi.js +13 -6
- package/dist/record.d.ts +1 -1
- package/dist/record.js +3 -1
- package/dist/recording.d.ts +7 -0
- package/dist/recording.js +38 -4
- package/dist/runtime.js +13 -0
- package/dist/scenario.d.ts +14 -4
- package/dist/scenario.js +36 -20
- package/dist/sql-migrations.d.ts +11 -0
- package/dist/sql-migrations.js +38 -0
- package/dist/stub.d.ts +32 -3
- package/dist/stub.js +148 -8
- package/dist/webhook.d.ts +16 -7
- package/dist/webhook.js +47 -7
- package/dist/yaml-runtime.d.ts +3 -2
- package/dist/yaml-runtime.js +287 -36
- package/dist/yaml.d.ts +51 -4
- package/dist/yaml.js +105 -14
- package/package.json +1 -1
- package/schema/scenario.schema.json +431 -6
|
@@ -86,6 +86,14 @@
|
|
|
86
86
|
"items": {
|
|
87
87
|
"$ref": "#/$defs/step"
|
|
88
88
|
}
|
|
89
|
+
},
|
|
90
|
+
"tags": {
|
|
91
|
+
"type": "array",
|
|
92
|
+
"items": {
|
|
93
|
+
"type": "string",
|
|
94
|
+
"pattern": "^[^\\s,!]+$"
|
|
95
|
+
},
|
|
96
|
+
"description": "Labels to select scenarios by: npx slicetest --tag smoke (or !slow to leave some out)"
|
|
89
97
|
}
|
|
90
98
|
}
|
|
91
99
|
}
|
|
@@ -127,6 +135,10 @@
|
|
|
127
135
|
"json": {
|
|
128
136
|
"description": "Subset of the request JSON"
|
|
129
137
|
},
|
|
138
|
+
"form": {
|
|
139
|
+
"type": "object",
|
|
140
|
+
"description": "Subset of a form-encoded body's fields; bracket keys are nested (metadata[order] → metadata: { order })"
|
|
141
|
+
},
|
|
130
142
|
"body": {},
|
|
131
143
|
"variables": {
|
|
132
144
|
"description": "Subset of the GraphQL variables (with `graphql`)"
|
|
@@ -149,6 +161,10 @@
|
|
|
149
161
|
"body": {
|
|
150
162
|
"description": "String, or anything else to send as JSON. May use {{call.params.x}}, {{call.json.x}}, {{call.query.x}}"
|
|
151
163
|
},
|
|
164
|
+
"file": {
|
|
165
|
+
"type": "string",
|
|
166
|
+
"description": "Answer with this file's content, relative to the scenario file: .json and .yaml are sent as JSON (and may use {{call.*}}), other files as they are, with a content type from the extension"
|
|
167
|
+
},
|
|
152
168
|
"sse": {
|
|
153
169
|
"type": "array",
|
|
154
170
|
"description": "A streamed reply (Server-Sent Events), instead of body: a list of { event, data, id }. Data that isn't a string is sent as JSON",
|
|
@@ -221,6 +237,30 @@
|
|
|
221
237
|
"sse",
|
|
222
238
|
"errors"
|
|
223
239
|
]
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
"required": [
|
|
243
|
+
"file",
|
|
244
|
+
"body"
|
|
245
|
+
]
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"required": [
|
|
249
|
+
"file",
|
|
250
|
+
"sse"
|
|
251
|
+
]
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
"required": [
|
|
255
|
+
"file",
|
|
256
|
+
"data"
|
|
257
|
+
]
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
"required": [
|
|
261
|
+
"file",
|
|
262
|
+
"errors"
|
|
263
|
+
]
|
|
224
264
|
}
|
|
225
265
|
]
|
|
226
266
|
}
|
|
@@ -243,6 +283,10 @@
|
|
|
243
283
|
"body": {
|
|
244
284
|
"description": "String, or anything else to send as JSON. May use {{call.params.x}}, {{call.json.x}}, {{call.query.x}}"
|
|
245
285
|
},
|
|
286
|
+
"file": {
|
|
287
|
+
"type": "string",
|
|
288
|
+
"description": "Answer with this file's content, relative to the scenario file: .json and .yaml are sent as JSON (and may use {{call.*}}), other files as they are, with a content type from the extension"
|
|
289
|
+
},
|
|
246
290
|
"sse": {
|
|
247
291
|
"type": "array",
|
|
248
292
|
"description": "A streamed reply (Server-Sent Events), instead of body: a list of { event, data, id }. Data that isn't a string is sent as JSON",
|
|
@@ -315,6 +359,30 @@
|
|
|
315
359
|
"sse",
|
|
316
360
|
"errors"
|
|
317
361
|
]
|
|
362
|
+
},
|
|
363
|
+
{
|
|
364
|
+
"required": [
|
|
365
|
+
"file",
|
|
366
|
+
"body"
|
|
367
|
+
]
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
"required": [
|
|
371
|
+
"file",
|
|
372
|
+
"sse"
|
|
373
|
+
]
|
|
374
|
+
},
|
|
375
|
+
{
|
|
376
|
+
"required": [
|
|
377
|
+
"file",
|
|
378
|
+
"data"
|
|
379
|
+
]
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
"required": [
|
|
383
|
+
"file",
|
|
384
|
+
"errors"
|
|
385
|
+
]
|
|
318
386
|
}
|
|
319
387
|
]
|
|
320
388
|
}
|
|
@@ -389,6 +457,103 @@
|
|
|
389
457
|
"form": {
|
|
390
458
|
"type": "object"
|
|
391
459
|
},
|
|
460
|
+
"multipart": {
|
|
461
|
+
"type": "object",
|
|
462
|
+
"description": "A multipart/form-data body: fields, and files as { file: avatar.png } (relative to the scenario file) or { content, filename, type }",
|
|
463
|
+
"additionalProperties": {
|
|
464
|
+
"oneOf": [
|
|
465
|
+
{
|
|
466
|
+
"oneOf": [
|
|
467
|
+
{
|
|
468
|
+
"type": [
|
|
469
|
+
"string",
|
|
470
|
+
"number",
|
|
471
|
+
"boolean"
|
|
472
|
+
]
|
|
473
|
+
},
|
|
474
|
+
{
|
|
475
|
+
"type": "object",
|
|
476
|
+
"additionalProperties": false,
|
|
477
|
+
"properties": {
|
|
478
|
+
"file": {
|
|
479
|
+
"type": "string",
|
|
480
|
+
"description": "Path relative to the scenario file"
|
|
481
|
+
},
|
|
482
|
+
"content": {
|
|
483
|
+
"description": "Inline file content; objects are sent as JSON"
|
|
484
|
+
},
|
|
485
|
+
"filename": {
|
|
486
|
+
"type": "string"
|
|
487
|
+
},
|
|
488
|
+
"type": {
|
|
489
|
+
"type": "string",
|
|
490
|
+
"description": "Content type; from the file extension by default"
|
|
491
|
+
}
|
|
492
|
+
},
|
|
493
|
+
"oneOf": [
|
|
494
|
+
{
|
|
495
|
+
"required": [
|
|
496
|
+
"file"
|
|
497
|
+
]
|
|
498
|
+
},
|
|
499
|
+
{
|
|
500
|
+
"required": [
|
|
501
|
+
"content"
|
|
502
|
+
]
|
|
503
|
+
}
|
|
504
|
+
]
|
|
505
|
+
}
|
|
506
|
+
]
|
|
507
|
+
},
|
|
508
|
+
{
|
|
509
|
+
"type": "array",
|
|
510
|
+
"items": {
|
|
511
|
+
"oneOf": [
|
|
512
|
+
{
|
|
513
|
+
"type": [
|
|
514
|
+
"string",
|
|
515
|
+
"number",
|
|
516
|
+
"boolean"
|
|
517
|
+
]
|
|
518
|
+
},
|
|
519
|
+
{
|
|
520
|
+
"type": "object",
|
|
521
|
+
"additionalProperties": false,
|
|
522
|
+
"properties": {
|
|
523
|
+
"file": {
|
|
524
|
+
"type": "string",
|
|
525
|
+
"description": "Path relative to the scenario file"
|
|
526
|
+
},
|
|
527
|
+
"content": {
|
|
528
|
+
"description": "Inline file content; objects are sent as JSON"
|
|
529
|
+
},
|
|
530
|
+
"filename": {
|
|
531
|
+
"type": "string"
|
|
532
|
+
},
|
|
533
|
+
"type": {
|
|
534
|
+
"type": "string",
|
|
535
|
+
"description": "Content type; from the file extension by default"
|
|
536
|
+
}
|
|
537
|
+
},
|
|
538
|
+
"oneOf": [
|
|
539
|
+
{
|
|
540
|
+
"required": [
|
|
541
|
+
"file"
|
|
542
|
+
]
|
|
543
|
+
},
|
|
544
|
+
{
|
|
545
|
+
"required": [
|
|
546
|
+
"content"
|
|
547
|
+
]
|
|
548
|
+
}
|
|
549
|
+
]
|
|
550
|
+
}
|
|
551
|
+
]
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
]
|
|
555
|
+
}
|
|
556
|
+
},
|
|
392
557
|
"body": {
|
|
393
558
|
"type": "string"
|
|
394
559
|
},
|
|
@@ -423,7 +588,14 @@
|
|
|
423
588
|
"github",
|
|
424
589
|
"slack",
|
|
425
590
|
"shopify",
|
|
426
|
-
"standard"
|
|
591
|
+
"standard",
|
|
592
|
+
"line",
|
|
593
|
+
"paddle",
|
|
594
|
+
"linear",
|
|
595
|
+
"gitlab",
|
|
596
|
+
"zoom",
|
|
597
|
+
"twitch",
|
|
598
|
+
"twilio"
|
|
427
599
|
]
|
|
428
600
|
},
|
|
429
601
|
{
|
|
@@ -467,6 +639,10 @@
|
|
|
467
639
|
"invalidSignature": {
|
|
468
640
|
"type": "boolean",
|
|
469
641
|
"description": "Signed with a different secret"
|
|
642
|
+
},
|
|
643
|
+
"url": {
|
|
644
|
+
"type": "string",
|
|
645
|
+
"description": "The URL the app validates against, for providers that sign it (twilio). Default: the app's address and the request path"
|
|
470
646
|
}
|
|
471
647
|
}
|
|
472
648
|
},
|
|
@@ -480,10 +656,18 @@
|
|
|
480
656
|
"additionalProperties": false,
|
|
481
657
|
"properties": {
|
|
482
658
|
"status": {
|
|
659
|
+
"description": "A code (201), a class (\"2xx\") or a list of them ([200, 204]).",
|
|
483
660
|
"type": [
|
|
484
661
|
"integer",
|
|
485
|
-
"string"
|
|
486
|
-
|
|
662
|
+
"string",
|
|
663
|
+
"array"
|
|
664
|
+
],
|
|
665
|
+
"items": {
|
|
666
|
+
"type": [
|
|
667
|
+
"integer",
|
|
668
|
+
"string"
|
|
669
|
+
]
|
|
670
|
+
}
|
|
487
671
|
},
|
|
488
672
|
"headers": {
|
|
489
673
|
"type": "object"
|
|
@@ -492,6 +676,31 @@
|
|
|
492
676
|
"description": "Subset of the response JSON"
|
|
493
677
|
},
|
|
494
678
|
"text": {},
|
|
679
|
+
"events": {
|
|
680
|
+
"type": "array",
|
|
681
|
+
"items": {
|
|
682
|
+
"type": "object"
|
|
683
|
+
},
|
|
684
|
+
"description": "Server-sent events of a text/event-stream response that must come in this order, others allowed between: [{ event: message_start }, { data: \"[DONE]\" }]. Each is a subset of { event, data, id }"
|
|
685
|
+
},
|
|
686
|
+
"cookies": {
|
|
687
|
+
"type": "object",
|
|
688
|
+
"description": "Cookies the response sets, by name: attributes as a subset ({ httpOnly: true, sameSite: Lax, value: ... }), or null for one it must not set",
|
|
689
|
+
"additionalProperties": {
|
|
690
|
+
"type": [
|
|
691
|
+
"object",
|
|
692
|
+
"null"
|
|
693
|
+
]
|
|
694
|
+
}
|
|
695
|
+
},
|
|
696
|
+
"duration": {
|
|
697
|
+
"description": "The response arrived within this many milliseconds, or a matcher on the time: { $lt: 200 }",
|
|
698
|
+
"type": [
|
|
699
|
+
"integer",
|
|
700
|
+
"object"
|
|
701
|
+
],
|
|
702
|
+
"minimum": 1
|
|
703
|
+
},
|
|
495
704
|
"statuses": {
|
|
496
705
|
"type": "object",
|
|
497
706
|
"propertyNames": {
|
|
@@ -553,6 +762,21 @@
|
|
|
553
762
|
}
|
|
554
763
|
}
|
|
555
764
|
]
|
|
765
|
+
},
|
|
766
|
+
"within": {
|
|
767
|
+
"type": "integer",
|
|
768
|
+
"minimum": 1,
|
|
769
|
+
"description": "Repeat the request until `expect` passes, for up to this many milliseconds (polling a job the app finishes later)"
|
|
770
|
+
},
|
|
771
|
+
"every": {
|
|
772
|
+
"type": "integer",
|
|
773
|
+
"minimum": 1,
|
|
774
|
+
"description": "With `within`: milliseconds between attempts. Default 200"
|
|
775
|
+
},
|
|
776
|
+
"timeout": {
|
|
777
|
+
"type": "integer",
|
|
778
|
+
"minimum": 1,
|
|
779
|
+
"description": "Fail when the app hasn't answered within this many milliseconds (overrides http.timeout)"
|
|
556
780
|
}
|
|
557
781
|
},
|
|
558
782
|
"not": {
|
|
@@ -574,8 +798,43 @@
|
|
|
574
798
|
"graphql",
|
|
575
799
|
"body"
|
|
576
800
|
]
|
|
801
|
+
},
|
|
802
|
+
{
|
|
803
|
+
"required": [
|
|
804
|
+
"multipart",
|
|
805
|
+
"json"
|
|
806
|
+
]
|
|
807
|
+
},
|
|
808
|
+
{
|
|
809
|
+
"required": [
|
|
810
|
+
"multipart",
|
|
811
|
+
"form"
|
|
812
|
+
]
|
|
813
|
+
},
|
|
814
|
+
{
|
|
815
|
+
"required": [
|
|
816
|
+
"multipart",
|
|
817
|
+
"body"
|
|
818
|
+
]
|
|
819
|
+
},
|
|
820
|
+
{
|
|
821
|
+
"required": [
|
|
822
|
+
"multipart",
|
|
823
|
+
"graphql"
|
|
824
|
+
]
|
|
825
|
+
},
|
|
826
|
+
{
|
|
827
|
+
"required": [
|
|
828
|
+
"within",
|
|
829
|
+
"concurrency"
|
|
830
|
+
]
|
|
577
831
|
}
|
|
578
832
|
]
|
|
833
|
+
},
|
|
834
|
+
"dependentRequired": {
|
|
835
|
+
"every": [
|
|
836
|
+
"within"
|
|
837
|
+
]
|
|
579
838
|
}
|
|
580
839
|
},
|
|
581
840
|
{
|
|
@@ -610,7 +869,7 @@
|
|
|
610
869
|
},
|
|
611
870
|
"fields": {
|
|
612
871
|
"type": "object",
|
|
613
|
-
"description": "Values typed into the form by field name; true / false / a list of values check checkboxes and radios",
|
|
872
|
+
"description": "Values typed into the form by field name; true / false / a list of values check checkboxes and radios; { file: path } uploads a file through a file input",
|
|
614
873
|
"additionalProperties": {
|
|
615
874
|
"oneOf": [
|
|
616
875
|
{
|
|
@@ -628,6 +887,36 @@
|
|
|
628
887
|
"number"
|
|
629
888
|
]
|
|
630
889
|
}
|
|
890
|
+
},
|
|
891
|
+
{
|
|
892
|
+
"type": "object",
|
|
893
|
+
"additionalProperties": false,
|
|
894
|
+
"properties": {
|
|
895
|
+
"file": {
|
|
896
|
+
"type": "string",
|
|
897
|
+
"description": "Path relative to the scenario file"
|
|
898
|
+
},
|
|
899
|
+
"content": {},
|
|
900
|
+
"filename": {
|
|
901
|
+
"type": "string"
|
|
902
|
+
},
|
|
903
|
+
"type": {
|
|
904
|
+
"type": "string"
|
|
905
|
+
}
|
|
906
|
+
},
|
|
907
|
+
"oneOf": [
|
|
908
|
+
{
|
|
909
|
+
"required": [
|
|
910
|
+
"file"
|
|
911
|
+
]
|
|
912
|
+
},
|
|
913
|
+
{
|
|
914
|
+
"required": [
|
|
915
|
+
"content"
|
|
916
|
+
]
|
|
917
|
+
}
|
|
918
|
+
],
|
|
919
|
+
"description": "A file for a file input"
|
|
631
920
|
}
|
|
632
921
|
]
|
|
633
922
|
}
|
|
@@ -643,10 +932,18 @@
|
|
|
643
932
|
"additionalProperties": false,
|
|
644
933
|
"properties": {
|
|
645
934
|
"status": {
|
|
935
|
+
"description": "A code (201), a class (\"2xx\") or a list of them ([200, 204]).",
|
|
646
936
|
"type": [
|
|
647
937
|
"integer",
|
|
648
|
-
"string"
|
|
649
|
-
|
|
938
|
+
"string",
|
|
939
|
+
"array"
|
|
940
|
+
],
|
|
941
|
+
"items": {
|
|
942
|
+
"type": [
|
|
943
|
+
"integer",
|
|
944
|
+
"string"
|
|
945
|
+
]
|
|
946
|
+
}
|
|
650
947
|
},
|
|
651
948
|
"headers": {
|
|
652
949
|
"type": "object"
|
|
@@ -655,6 +952,31 @@
|
|
|
655
952
|
"description": "Subset of the response JSON"
|
|
656
953
|
},
|
|
657
954
|
"text": {},
|
|
955
|
+
"events": {
|
|
956
|
+
"type": "array",
|
|
957
|
+
"items": {
|
|
958
|
+
"type": "object"
|
|
959
|
+
},
|
|
960
|
+
"description": "Server-sent events of a text/event-stream response that must come in this order, others allowed between: [{ event: message_start }, { data: \"[DONE]\" }]. Each is a subset of { event, data, id }"
|
|
961
|
+
},
|
|
962
|
+
"cookies": {
|
|
963
|
+
"type": "object",
|
|
964
|
+
"description": "Cookies the response sets, by name: attributes as a subset ({ httpOnly: true, sameSite: Lax, value: ... }), or null for one it must not set",
|
|
965
|
+
"additionalProperties": {
|
|
966
|
+
"type": [
|
|
967
|
+
"object",
|
|
968
|
+
"null"
|
|
969
|
+
]
|
|
970
|
+
}
|
|
971
|
+
},
|
|
972
|
+
"duration": {
|
|
973
|
+
"description": "The response arrived within this many milliseconds, or a matcher on the time: { $lt: 200 }",
|
|
974
|
+
"type": [
|
|
975
|
+
"integer",
|
|
976
|
+
"object"
|
|
977
|
+
],
|
|
978
|
+
"minimum": 1
|
|
979
|
+
},
|
|
658
980
|
"schema": {
|
|
659
981
|
"description": "A JSON Schema the response JSON must match: inline, or a file relative to this one with an optional pointer, e.g. ../openapi.yaml#/components/schemas/Poll",
|
|
660
982
|
"oneOf": [
|
|
@@ -940,6 +1262,10 @@
|
|
|
940
1262
|
"json": {
|
|
941
1263
|
"description": "Subset of the request JSON"
|
|
942
1264
|
},
|
|
1265
|
+
"form": {
|
|
1266
|
+
"type": "object",
|
|
1267
|
+
"description": "Subset of a form-encoded body's fields; bracket keys are nested (metadata[order] → metadata: { order })"
|
|
1268
|
+
},
|
|
943
1269
|
"body": {},
|
|
944
1270
|
"variables": {
|
|
945
1271
|
"description": "Subset of the GraphQL variables (with `graphql`)"
|
|
@@ -1038,6 +1364,105 @@
|
|
|
1038
1364
|
"type": "integer",
|
|
1039
1365
|
"minimum": 1,
|
|
1040
1366
|
"description": "Retry this step for up to this many milliseconds, for effects the app applies asynchronously"
|
|
1367
|
+
},
|
|
1368
|
+
"ignore": {
|
|
1369
|
+
"type": "array",
|
|
1370
|
+
"items": {
|
|
1371
|
+
"type": "string"
|
|
1372
|
+
},
|
|
1373
|
+
"description": "Columns or tables to leave out: updated_at (in every table), orders.synced_at, sessions.*"
|
|
1374
|
+
}
|
|
1375
|
+
}
|
|
1376
|
+
},
|
|
1377
|
+
{
|
|
1378
|
+
"type": "object",
|
|
1379
|
+
"required": [
|
|
1380
|
+
"set"
|
|
1381
|
+
],
|
|
1382
|
+
"additionalProperties": false,
|
|
1383
|
+
"properties": {
|
|
1384
|
+
"set": {
|
|
1385
|
+
"type": "object",
|
|
1386
|
+
"minProperties": 1,
|
|
1387
|
+
"propertyNames": {
|
|
1388
|
+
"pattern": "^[A-Za-z_]\\w*$"
|
|
1389
|
+
},
|
|
1390
|
+
"description": "Variables for later steps, e.g. { orderId: \"{{$uuid}}\", expires: \"{{$now+1d}}\" }"
|
|
1391
|
+
},
|
|
1392
|
+
"name": {
|
|
1393
|
+
"type": "string",
|
|
1394
|
+
"description": "Label shown when this step fails"
|
|
1395
|
+
}
|
|
1396
|
+
}
|
|
1397
|
+
},
|
|
1398
|
+
{
|
|
1399
|
+
"type": "object",
|
|
1400
|
+
"required": [
|
|
1401
|
+
"order"
|
|
1402
|
+
],
|
|
1403
|
+
"additionalProperties": false,
|
|
1404
|
+
"properties": {
|
|
1405
|
+
"order": {
|
|
1406
|
+
"type": "array",
|
|
1407
|
+
"minItems": 2,
|
|
1408
|
+
"description": "Calls to stubs in the order they must have happened (others may come in between): \"<stub> METHOD /path\" or { stub, call, when }",
|
|
1409
|
+
"items": {
|
|
1410
|
+
"oneOf": [
|
|
1411
|
+
{
|
|
1412
|
+
"type": "string",
|
|
1413
|
+
"pattern": "^\\S+\\s+([A-Za-z]+|\\*)\\s+/\\S*$"
|
|
1414
|
+
},
|
|
1415
|
+
{
|
|
1416
|
+
"type": "object",
|
|
1417
|
+
"additionalProperties": false,
|
|
1418
|
+
"required": [
|
|
1419
|
+
"stub",
|
|
1420
|
+
"call"
|
|
1421
|
+
],
|
|
1422
|
+
"properties": {
|
|
1423
|
+
"stub": {
|
|
1424
|
+
"type": "string"
|
|
1425
|
+
},
|
|
1426
|
+
"call": {
|
|
1427
|
+
"type": "string",
|
|
1428
|
+
"pattern": "^([A-Za-z]+|\\*)\\s+/\\S*$"
|
|
1429
|
+
},
|
|
1430
|
+
"when": {
|
|
1431
|
+
"type": "object",
|
|
1432
|
+
"additionalProperties": false,
|
|
1433
|
+
"properties": {
|
|
1434
|
+
"query": {
|
|
1435
|
+
"type": "object"
|
|
1436
|
+
},
|
|
1437
|
+
"headers": {
|
|
1438
|
+
"type": "object"
|
|
1439
|
+
},
|
|
1440
|
+
"json": {
|
|
1441
|
+
"description": "Subset of the request JSON"
|
|
1442
|
+
},
|
|
1443
|
+
"form": {
|
|
1444
|
+
"type": "object",
|
|
1445
|
+
"description": "Subset of a form-encoded body's fields; bracket keys are nested (metadata[order] → metadata: { order })"
|
|
1446
|
+
},
|
|
1447
|
+
"body": {},
|
|
1448
|
+
"variables": {
|
|
1449
|
+
"description": "Subset of the GraphQL variables (with `graphql`)"
|
|
1450
|
+
}
|
|
1451
|
+
}
|
|
1452
|
+
}
|
|
1453
|
+
}
|
|
1454
|
+
}
|
|
1455
|
+
]
|
|
1456
|
+
}
|
|
1457
|
+
},
|
|
1458
|
+
"within": {
|
|
1459
|
+
"type": "integer",
|
|
1460
|
+
"minimum": 1,
|
|
1461
|
+
"description": "Retry this step for up to this many milliseconds, for effects the app applies asynchronously"
|
|
1462
|
+
},
|
|
1463
|
+
"name": {
|
|
1464
|
+
"type": "string",
|
|
1465
|
+
"description": "Label shown when this step fails"
|
|
1041
1466
|
}
|
|
1042
1467
|
}
|
|
1043
1468
|
},
|