@faable/deploy-sdk 2.13.1 → 2.15.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/dist/FaableDeployApi.d.ts.map +1 -1
- package/dist/api/api-types.d.ts +2 -0
- package/dist/api/api-types.d.ts.map +1 -1
- package/dist/api/generated-client.d.ts +105 -3
- package/dist/api/generated-client.d.ts.map +1 -1
- package/dist/api/generated-client.js +58 -0
- package/dist/api/types.d.ts +218 -12
- package/dist/api/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/scripts/gen-client.mjs +48 -2
- package/spec/openapi.json +788 -27
package/dist/api/types.d.ts
CHANGED
|
@@ -3,6 +3,26 @@
|
|
|
3
3
|
* Do not make direct changes to the file.
|
|
4
4
|
*/
|
|
5
5
|
export interface paths {
|
|
6
|
+
"/project/limits": {
|
|
7
|
+
parameters: {
|
|
8
|
+
query?: never;
|
|
9
|
+
header?: never;
|
|
10
|
+
path?: never;
|
|
11
|
+
cookie?: never;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Project creation limits for the caller
|
|
15
|
+
* @description Whether the caller can create another project, and why not
|
|
16
|
+
*/
|
|
17
|
+
get: operations["project/limits"];
|
|
18
|
+
put?: never;
|
|
19
|
+
post?: never;
|
|
20
|
+
delete?: never;
|
|
21
|
+
options?: never;
|
|
22
|
+
head?: never;
|
|
23
|
+
patch?: never;
|
|
24
|
+
trace?: never;
|
|
25
|
+
};
|
|
6
26
|
"/project/{id}/invite": {
|
|
7
27
|
parameters: {
|
|
8
28
|
query?: never;
|
|
@@ -187,6 +207,26 @@ export interface paths {
|
|
|
187
207
|
patch?: never;
|
|
188
208
|
trace?: never;
|
|
189
209
|
};
|
|
210
|
+
"/app/repo-linkable": {
|
|
211
|
+
parameters: {
|
|
212
|
+
query?: never;
|
|
213
|
+
header?: never;
|
|
214
|
+
path?: never;
|
|
215
|
+
cookie?: never;
|
|
216
|
+
};
|
|
217
|
+
/**
|
|
218
|
+
* Check whether a repository can be linked to a new app
|
|
219
|
+
* @description Runs the free-plan "one repository, one app" guard before the app exists. Always 200: `linkable:false` names the app that already has the repository (and its project when it is another one of yours), with the same message the link would refuse with.
|
|
220
|
+
*/
|
|
221
|
+
get: operations["app/repo_linkable"];
|
|
222
|
+
put?: never;
|
|
223
|
+
post?: never;
|
|
224
|
+
delete?: never;
|
|
225
|
+
options?: never;
|
|
226
|
+
head?: never;
|
|
227
|
+
patch?: never;
|
|
228
|
+
trace?: never;
|
|
229
|
+
};
|
|
190
230
|
"/app/{app_id}/registry": {
|
|
191
231
|
parameters: {
|
|
192
232
|
query?: never;
|
|
@@ -833,6 +873,19 @@ export interface paths {
|
|
|
833
873
|
export type webhooks = Record<string, never>;
|
|
834
874
|
export interface components {
|
|
835
875
|
schemas: {
|
|
876
|
+
ProjectLimits: {
|
|
877
|
+
can_create: boolean;
|
|
878
|
+
reason: "free_project_limit" | "new_account_window" | null;
|
|
879
|
+
message: string | null;
|
|
880
|
+
free_projects: number | null;
|
|
881
|
+
max_free_projects: number | null;
|
|
882
|
+
upgradable_projects: {
|
|
883
|
+
id: string;
|
|
884
|
+
name: string;
|
|
885
|
+
}[];
|
|
886
|
+
new_account_window_ends_at: string | null;
|
|
887
|
+
resolved: boolean;
|
|
888
|
+
};
|
|
836
889
|
ProjectInvite: {
|
|
837
890
|
emails: string[];
|
|
838
891
|
};
|
|
@@ -854,6 +907,7 @@ export interface components {
|
|
|
854
907
|
team: string;
|
|
855
908
|
user_id?: string;
|
|
856
909
|
collaborators: string[];
|
|
910
|
+
product_intent?: "deploy" | "auth" | "undecided";
|
|
857
911
|
owner_suspended?: boolean;
|
|
858
912
|
owner_email?: string;
|
|
859
913
|
/** @description Project creation date */
|
|
@@ -889,6 +943,7 @@ export interface components {
|
|
|
889
943
|
name: string;
|
|
890
944
|
description?: string;
|
|
891
945
|
collaborators?: string[];
|
|
946
|
+
product_intent?: "deploy" | "auth" | "undecided";
|
|
892
947
|
};
|
|
893
948
|
ProjectUpdate: {
|
|
894
949
|
name?: string;
|
|
@@ -1096,6 +1151,18 @@ export interface components {
|
|
|
1096
1151
|
instance_type?: string;
|
|
1097
1152
|
notify_deploy_success?: boolean | null;
|
|
1098
1153
|
};
|
|
1154
|
+
/** @description Repository link pre-check */
|
|
1155
|
+
AppRepoLinkable: {
|
|
1156
|
+
linkable: boolean;
|
|
1157
|
+
/** @enum {string} */
|
|
1158
|
+
code?: "repository_already_linked";
|
|
1159
|
+
message?: string;
|
|
1160
|
+
details?: {
|
|
1161
|
+
app_id: string;
|
|
1162
|
+
app_name?: string;
|
|
1163
|
+
project?: string;
|
|
1164
|
+
};
|
|
1165
|
+
};
|
|
1099
1166
|
DeployBranchResult: {
|
|
1100
1167
|
github_branch: string;
|
|
1101
1168
|
workflow_synced: boolean;
|
|
@@ -1132,15 +1199,21 @@ export interface components {
|
|
|
1132
1199
|
platform_profiles: {
|
|
1133
1200
|
name: string;
|
|
1134
1201
|
action: string;
|
|
1202
|
+
match: string;
|
|
1135
1203
|
rule_count: number;
|
|
1136
1204
|
rules?: {
|
|
1137
1205
|
pattern: string;
|
|
1206
|
+
user_agent?: string;
|
|
1207
|
+
query?: string;
|
|
1138
1208
|
description?: string;
|
|
1139
1209
|
}[];
|
|
1140
1210
|
}[];
|
|
1141
1211
|
rules: {
|
|
1142
|
-
pattern
|
|
1212
|
+
pattern?: string;
|
|
1213
|
+
user_agent?: string;
|
|
1214
|
+
query?: string;
|
|
1143
1215
|
action: string;
|
|
1216
|
+
match: string;
|
|
1144
1217
|
description?: string;
|
|
1145
1218
|
}[];
|
|
1146
1219
|
};
|
|
@@ -1160,6 +1233,12 @@ export interface components {
|
|
|
1160
1233
|
controlled_by?: string;
|
|
1161
1234
|
/** @description Why the deployment failed (shown to the user on ERROR) */
|
|
1162
1235
|
reason?: string;
|
|
1236
|
+
/** @description Producer's own name for what failed (e.g. detect_no_buildpack). Not the fault taxonomy. */
|
|
1237
|
+
failure_code?: string;
|
|
1238
|
+
/** @description Structured context the producer had before writing `reason` (found_files, subdir_hits, workdir, root_dir…). Never free build output: it must carry no repository paths beyond the entry names detection already lists. */
|
|
1239
|
+
failure_detail?: {
|
|
1240
|
+
[key: string]: unknown;
|
|
1241
|
+
};
|
|
1163
1242
|
/** @description Scale-to-zero sub-state (admin-only): asleep, waking or null */
|
|
1164
1243
|
cold_state?: "asleep" | "waking" | null;
|
|
1165
1244
|
/** @description Runtime image (immutable version tag) this artifact deployment runs */
|
|
@@ -1311,6 +1390,11 @@ export interface components {
|
|
|
1311
1390
|
* @default null
|
|
1312
1391
|
*/
|
|
1313
1392
|
dns_message: string | null;
|
|
1393
|
+
/**
|
|
1394
|
+
* @description Advisory for a verified domain whose DNS is functional but not the record we publish
|
|
1395
|
+
* @default null
|
|
1396
|
+
*/
|
|
1397
|
+
dns_warning: string | null;
|
|
1314
1398
|
};
|
|
1315
1399
|
/** @description Domain */
|
|
1316
1400
|
Domain: {
|
|
@@ -1398,13 +1482,17 @@ export interface components {
|
|
|
1398
1482
|
app_id: string | null;
|
|
1399
1483
|
source: "builtin" | "manual" | "auto";
|
|
1400
1484
|
action: "deny" | "sink" | "ratelimit" | "probe";
|
|
1401
|
-
match: "path" | "user_agent";
|
|
1485
|
+
match: "path" | "user_agent" | "path_user_agent" | "query" | "path_query";
|
|
1402
1486
|
apply: "all" | "node" | "php" | "manual";
|
|
1403
1487
|
/** @description Runtimes excluded from `apply` (e.g. ["php"]) */
|
|
1404
1488
|
except?: ("all" | "node" | "php" | "manual")[];
|
|
1405
1489
|
rules: {
|
|
1406
|
-
/** @description RE2
|
|
1490
|
+
/** @description RE2 fragment; see the profile `match` */
|
|
1407
1491
|
pattern: string;
|
|
1492
|
+
/** @description RE2 fragment matched against User-Agent. Only in `path_user_agent` profiles, where BOTH must match. */
|
|
1493
|
+
user_agent?: string;
|
|
1494
|
+
/** @description LITERAL query parameter name (never a regex). Only in `path_query` profiles, where BOTH must match. */
|
|
1495
|
+
query?: string;
|
|
1408
1496
|
/** @description What this rule blocks (human annotation) */
|
|
1409
1497
|
description?: string;
|
|
1410
1498
|
}[];
|
|
@@ -1455,11 +1543,15 @@ export interface components {
|
|
|
1455
1543
|
app_id?: string;
|
|
1456
1544
|
source?: "builtin" | "manual" | "auto";
|
|
1457
1545
|
action?: "deny" | "sink" | "ratelimit" | "probe";
|
|
1458
|
-
match?: "path" | "user_agent";
|
|
1546
|
+
match?: "path" | "user_agent" | "path_user_agent" | "query" | "path_query";
|
|
1459
1547
|
apply?: "all" | "node" | "php" | "manual";
|
|
1460
1548
|
rules?: {
|
|
1461
|
-
/** @description RE2
|
|
1549
|
+
/** @description RE2 fragment; see the profile `match` */
|
|
1462
1550
|
pattern: string;
|
|
1551
|
+
/** @description RE2 fragment matched against User-Agent. Only in `path_user_agent` profiles, where BOTH must match. */
|
|
1552
|
+
user_agent?: string;
|
|
1553
|
+
/** @description LITERAL query parameter name (never a regex). Only in `path_query` profiles, where BOTH must match. */
|
|
1554
|
+
query?: string;
|
|
1463
1555
|
/** @description What this rule blocks (human annotation) */
|
|
1464
1556
|
description?: string;
|
|
1465
1557
|
}[];
|
|
@@ -1471,11 +1563,15 @@ export interface components {
|
|
|
1471
1563
|
WafProfileUpdate: {
|
|
1472
1564
|
name?: string;
|
|
1473
1565
|
action?: "deny" | "sink" | "ratelimit" | "probe";
|
|
1474
|
-
match?: "path" | "user_agent";
|
|
1566
|
+
match?: "path" | "user_agent" | "path_user_agent" | "query" | "path_query";
|
|
1475
1567
|
apply?: "all" | "node" | "php" | "manual";
|
|
1476
1568
|
rules?: {
|
|
1477
|
-
/** @description RE2
|
|
1569
|
+
/** @description RE2 fragment; see the profile `match` */
|
|
1478
1570
|
pattern: string;
|
|
1571
|
+
/** @description RE2 fragment matched against User-Agent. Only in `path_user_agent` profiles, where BOTH must match. */
|
|
1572
|
+
user_agent?: string;
|
|
1573
|
+
/** @description LITERAL query parameter name (never a regex). Only in `path_query` profiles, where BOTH must match. */
|
|
1574
|
+
query?: string;
|
|
1479
1575
|
/** @description What this rule blocks (human annotation) */
|
|
1480
1576
|
description?: string;
|
|
1481
1577
|
}[];
|
|
@@ -1742,6 +1838,7 @@ export interface components {
|
|
|
1742
1838
|
id: string;
|
|
1743
1839
|
team: string;
|
|
1744
1840
|
kind: "runtime" | "builder" | "fetcher" | "buildkit";
|
|
1841
|
+
role: "workload" | "cluster";
|
|
1745
1842
|
/** @description Canonical key: node:22, python:3.11, static, fetcher, buildkit */
|
|
1746
1843
|
key: string;
|
|
1747
1844
|
/** @description Repository ref without tag */
|
|
@@ -1752,6 +1849,36 @@ export interface components {
|
|
|
1752
1849
|
min_version: string;
|
|
1753
1850
|
/** @description A CI registration of a newer release moves current */
|
|
1754
1851
|
auto_promote: boolean;
|
|
1852
|
+
rollout: {
|
|
1853
|
+
mode: "manual" | "auto";
|
|
1854
|
+
/** @default null */
|
|
1855
|
+
target: string | null;
|
|
1856
|
+
/** @default null */
|
|
1857
|
+
previous: string | null;
|
|
1858
|
+
state: "idle" | "running" | "reverting" | "halted" | "done" | "stalled";
|
|
1859
|
+
/**
|
|
1860
|
+
* Format: date-time
|
|
1861
|
+
* @default null
|
|
1862
|
+
*/
|
|
1863
|
+
started_at: string | null;
|
|
1864
|
+
/**
|
|
1865
|
+
* Format: date-time
|
|
1866
|
+
* @default null
|
|
1867
|
+
*/
|
|
1868
|
+
updated_at: string | null;
|
|
1869
|
+
/**
|
|
1870
|
+
* Format: date-time
|
|
1871
|
+
* @default null
|
|
1872
|
+
*/
|
|
1873
|
+
deadline_at: string | null;
|
|
1874
|
+
failures: number;
|
|
1875
|
+
/** @default null */
|
|
1876
|
+
halted_reason: string | null;
|
|
1877
|
+
/** @default null */
|
|
1878
|
+
failed_version: string | null;
|
|
1879
|
+
/** @default null */
|
|
1880
|
+
gate: string | null;
|
|
1881
|
+
};
|
|
1755
1882
|
versions: {
|
|
1756
1883
|
/** @description Buildpacks release, X.Y.Z */
|
|
1757
1884
|
version: string;
|
|
@@ -1809,6 +1936,7 @@ export interface components {
|
|
|
1809
1936
|
repository: string;
|
|
1810
1937
|
current: string;
|
|
1811
1938
|
min_version: string;
|
|
1939
|
+
role?: "workload" | "cluster";
|
|
1812
1940
|
auto_promote?: boolean;
|
|
1813
1941
|
versions?: {
|
|
1814
1942
|
/** @description Buildpacks release, X.Y.Z */
|
|
@@ -1881,6 +2009,26 @@ export interface components {
|
|
|
1881
2009
|
}
|
|
1882
2010
|
export type $defs = Record<string, never>;
|
|
1883
2011
|
export interface operations {
|
|
2012
|
+
"project/limits": {
|
|
2013
|
+
parameters: {
|
|
2014
|
+
query?: never;
|
|
2015
|
+
header?: never;
|
|
2016
|
+
path?: never;
|
|
2017
|
+
cookie?: never;
|
|
2018
|
+
};
|
|
2019
|
+
requestBody?: never;
|
|
2020
|
+
responses: {
|
|
2021
|
+
/** @description Default Response */
|
|
2022
|
+
200: {
|
|
2023
|
+
headers: {
|
|
2024
|
+
[name: string]: unknown;
|
|
2025
|
+
};
|
|
2026
|
+
content: {
|
|
2027
|
+
"application/json": components["schemas"]["ProjectLimits"];
|
|
2028
|
+
};
|
|
2029
|
+
};
|
|
2030
|
+
};
|
|
2031
|
+
};
|
|
1884
2032
|
"project/invite": {
|
|
1885
2033
|
parameters: {
|
|
1886
2034
|
query?: never;
|
|
@@ -1977,6 +2125,7 @@ export interface operations {
|
|
|
1977
2125
|
name: string;
|
|
1978
2126
|
description?: string;
|
|
1979
2127
|
collaborators?: string[];
|
|
2128
|
+
product_intent?: "deploy" | "auth" | "undecided";
|
|
1980
2129
|
};
|
|
1981
2130
|
};
|
|
1982
2131
|
};
|
|
@@ -1996,6 +2145,7 @@ export interface operations {
|
|
|
1996
2145
|
team: string;
|
|
1997
2146
|
user_id?: string;
|
|
1998
2147
|
collaborators: string[];
|
|
2148
|
+
product_intent?: "deploy" | "auth" | "undecided";
|
|
1999
2149
|
owner_suspended?: boolean;
|
|
2000
2150
|
owner_email?: string;
|
|
2001
2151
|
/** @description Project creation date */
|
|
@@ -2033,6 +2183,7 @@ export interface operations {
|
|
|
2033
2183
|
team: string;
|
|
2034
2184
|
user_id?: string;
|
|
2035
2185
|
collaborators: string[];
|
|
2186
|
+
product_intent?: "deploy" | "auth" | "undecided";
|
|
2036
2187
|
owner_suspended?: boolean;
|
|
2037
2188
|
owner_email?: string;
|
|
2038
2189
|
/** @description Project creation date */
|
|
@@ -2077,6 +2228,7 @@ export interface operations {
|
|
|
2077
2228
|
team: string;
|
|
2078
2229
|
user_id?: string;
|
|
2079
2230
|
collaborators: string[];
|
|
2231
|
+
product_intent?: "deploy" | "auth" | "undecided";
|
|
2080
2232
|
owner_suspended?: boolean;
|
|
2081
2233
|
owner_email?: string;
|
|
2082
2234
|
/** @description Project creation date */
|
|
@@ -2114,6 +2266,7 @@ export interface operations {
|
|
|
2114
2266
|
team: string;
|
|
2115
2267
|
user_id?: string;
|
|
2116
2268
|
collaborators: string[];
|
|
2269
|
+
product_intent?: "deploy" | "auth" | "undecided";
|
|
2117
2270
|
owner_suspended?: boolean;
|
|
2118
2271
|
owner_email?: string;
|
|
2119
2272
|
/** @description Project creation date */
|
|
@@ -2552,6 +2705,31 @@ export interface operations {
|
|
|
2552
2705
|
};
|
|
2553
2706
|
};
|
|
2554
2707
|
};
|
|
2708
|
+
"app/repo_linkable": {
|
|
2709
|
+
parameters: {
|
|
2710
|
+
query: {
|
|
2711
|
+
/** @description GitHub repository full name, e.g. acme/api */
|
|
2712
|
+
repository: string;
|
|
2713
|
+
/** @description GitHub App installation the repo belongs to */
|
|
2714
|
+
github_installation_id?: string;
|
|
2715
|
+
};
|
|
2716
|
+
header?: never;
|
|
2717
|
+
path?: never;
|
|
2718
|
+
cookie?: never;
|
|
2719
|
+
};
|
|
2720
|
+
requestBody?: never;
|
|
2721
|
+
responses: {
|
|
2722
|
+
/** @description Repository link pre-check */
|
|
2723
|
+
200: {
|
|
2724
|
+
headers: {
|
|
2725
|
+
[name: string]: unknown;
|
|
2726
|
+
};
|
|
2727
|
+
content: {
|
|
2728
|
+
"application/json": components["schemas"]["AppRepoLinkable"];
|
|
2729
|
+
};
|
|
2730
|
+
};
|
|
2731
|
+
};
|
|
2732
|
+
};
|
|
2555
2733
|
"app/get_registry": {
|
|
2556
2734
|
parameters: {
|
|
2557
2735
|
query?: never;
|
|
@@ -2681,6 +2859,7 @@ export interface operations {
|
|
|
2681
2859
|
user_agent: string;
|
|
2682
2860
|
requests: number;
|
|
2683
2861
|
}[];
|
|
2862
|
+
degraded: string[];
|
|
2684
2863
|
};
|
|
2685
2864
|
};
|
|
2686
2865
|
};
|
|
@@ -2982,15 +3161,21 @@ export interface operations {
|
|
|
2982
3161
|
platform_profiles: {
|
|
2983
3162
|
name: string;
|
|
2984
3163
|
action: string;
|
|
3164
|
+
match: string;
|
|
2985
3165
|
rule_count: number;
|
|
2986
3166
|
rules?: {
|
|
2987
3167
|
pattern: string;
|
|
3168
|
+
user_agent?: string;
|
|
3169
|
+
query?: string;
|
|
2988
3170
|
description?: string;
|
|
2989
3171
|
}[];
|
|
2990
3172
|
}[];
|
|
2991
3173
|
rules: {
|
|
2992
|
-
pattern
|
|
3174
|
+
pattern?: string;
|
|
3175
|
+
user_agent?: string;
|
|
3176
|
+
query?: string;
|
|
2993
3177
|
action: string;
|
|
3178
|
+
match: string;
|
|
2994
3179
|
description?: string;
|
|
2995
3180
|
}[];
|
|
2996
3181
|
};
|
|
@@ -3011,10 +3196,16 @@ export interface operations {
|
|
|
3011
3196
|
content: {
|
|
3012
3197
|
"application/json": {
|
|
3013
3198
|
/** @description RE2 path-regex fragment, e.g. ^/robots\.txt$ */
|
|
3014
|
-
pattern
|
|
3199
|
+
pattern?: string;
|
|
3200
|
+
/** @description RE2 fragment matched against User-Agent. With `pattern`, BOTH must match. */
|
|
3201
|
+
user_agent?: string;
|
|
3202
|
+
/** @description LITERAL query parameter name, e.g. rest_route (never a regex). With `pattern`, BOTH must match. */
|
|
3203
|
+
query?: string;
|
|
3015
3204
|
/** @description deny → 403 at the edge; sink → synthetic 404 from the platform (the app is never woken) */
|
|
3016
3205
|
action: "deny" | "sink";
|
|
3017
3206
|
description?: string;
|
|
3207
|
+
/** @description Accept a user-agent pattern that also matches a known search/AI crawler or uptime monitor, or a query parameter that carries an auth flow */
|
|
3208
|
+
force?: boolean;
|
|
3018
3209
|
};
|
|
3019
3210
|
};
|
|
3020
3211
|
};
|
|
@@ -3030,15 +3221,21 @@ export interface operations {
|
|
|
3030
3221
|
platform_profiles: {
|
|
3031
3222
|
name: string;
|
|
3032
3223
|
action: string;
|
|
3224
|
+
match: string;
|
|
3033
3225
|
rule_count: number;
|
|
3034
3226
|
rules?: {
|
|
3035
3227
|
pattern: string;
|
|
3228
|
+
user_agent?: string;
|
|
3229
|
+
query?: string;
|
|
3036
3230
|
description?: string;
|
|
3037
3231
|
}[];
|
|
3038
3232
|
}[];
|
|
3039
3233
|
rules: {
|
|
3040
|
-
pattern
|
|
3234
|
+
pattern?: string;
|
|
3235
|
+
user_agent?: string;
|
|
3236
|
+
query?: string;
|
|
3041
3237
|
action: string;
|
|
3238
|
+
match: string;
|
|
3042
3239
|
description?: string;
|
|
3043
3240
|
}[];
|
|
3044
3241
|
};
|
|
@@ -3058,7 +3255,10 @@ export interface operations {
|
|
|
3058
3255
|
requestBody: {
|
|
3059
3256
|
content: {
|
|
3060
3257
|
"application/json": {
|
|
3061
|
-
pattern
|
|
3258
|
+
pattern?: string;
|
|
3259
|
+
user_agent?: string;
|
|
3260
|
+
query?: string;
|
|
3261
|
+
action?: "deny" | "sink";
|
|
3062
3262
|
};
|
|
3063
3263
|
};
|
|
3064
3264
|
};
|
|
@@ -3074,15 +3274,21 @@ export interface operations {
|
|
|
3074
3274
|
platform_profiles: {
|
|
3075
3275
|
name: string;
|
|
3076
3276
|
action: string;
|
|
3277
|
+
match: string;
|
|
3077
3278
|
rule_count: number;
|
|
3078
3279
|
rules?: {
|
|
3079
3280
|
pattern: string;
|
|
3281
|
+
user_agent?: string;
|
|
3282
|
+
query?: string;
|
|
3080
3283
|
description?: string;
|
|
3081
3284
|
}[];
|
|
3082
3285
|
}[];
|
|
3083
3286
|
rules: {
|
|
3084
|
-
pattern
|
|
3287
|
+
pattern?: string;
|
|
3288
|
+
user_agent?: string;
|
|
3289
|
+
query?: string;
|
|
3085
3290
|
action: string;
|
|
3291
|
+
match: string;
|
|
3086
3292
|
description?: string;
|
|
3087
3293
|
}[];
|
|
3088
3294
|
};
|