@backstage/backend-defaults 0.17.3-next.2 → 0.17.4-next.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/CHANGELOG.md +35 -0
- package/config.schema.json +2396 -0
- package/dist/entrypoints/urlReader/lib/AwsS3UrlReader.cjs.js +45 -26
- package/dist/entrypoints/urlReader/lib/AwsS3UrlReader.cjs.js.map +1 -1
- package/dist/package.json.cjs.js +1 -1
- package/package.json +14 -14
- package/config.d.ts +0 -1475
|
@@ -0,0 +1,2396 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"properties": {
|
|
5
|
+
"app": {
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"baseUrl": {
|
|
9
|
+
"type": "string"
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"required": [
|
|
13
|
+
"baseUrl"
|
|
14
|
+
]
|
|
15
|
+
},
|
|
16
|
+
"backend": {
|
|
17
|
+
"type": "object",
|
|
18
|
+
"properties": {
|
|
19
|
+
"baseUrl": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"description": "The full base URL of the backend, as seen from the browser's point of view as it makes calls to the backend."
|
|
22
|
+
},
|
|
23
|
+
"lifecycle": {
|
|
24
|
+
"type": "object",
|
|
25
|
+
"properties": {
|
|
26
|
+
"startupRequestPauseTimeout": {
|
|
27
|
+
"anyOf": [
|
|
28
|
+
{
|
|
29
|
+
"type": "string"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"type": "object",
|
|
33
|
+
"properties": {
|
|
34
|
+
"years": {
|
|
35
|
+
"type": "number"
|
|
36
|
+
},
|
|
37
|
+
"months": {
|
|
38
|
+
"type": "number"
|
|
39
|
+
},
|
|
40
|
+
"weeks": {
|
|
41
|
+
"type": "number"
|
|
42
|
+
},
|
|
43
|
+
"days": {
|
|
44
|
+
"type": "number"
|
|
45
|
+
},
|
|
46
|
+
"hours": {
|
|
47
|
+
"type": "number"
|
|
48
|
+
},
|
|
49
|
+
"minutes": {
|
|
50
|
+
"type": "number"
|
|
51
|
+
},
|
|
52
|
+
"seconds": {
|
|
53
|
+
"type": "number"
|
|
54
|
+
},
|
|
55
|
+
"milliseconds": {
|
|
56
|
+
"type": "number"
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"description": "Human friendly durations object."
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"description": "The maximum time that paused requests will wait for the service to start, before returning an error. Defaults to 5 seconds Supported formats:\n- A string in the format of '1d', '2 seconds' etc. as supported by the `ms` library.\n- A standard ISO formatted duration string, e.g. 'P2DT6H' or 'PT1M'.\n- An object with individual units (in plural) as keys, e.g. `{ days: 2, hours: 6 }`."
|
|
63
|
+
},
|
|
64
|
+
"serverShutdownDelay": {
|
|
65
|
+
"anyOf": [
|
|
66
|
+
{
|
|
67
|
+
"type": "string"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"type": "object",
|
|
71
|
+
"properties": {
|
|
72
|
+
"years": {
|
|
73
|
+
"type": "number"
|
|
74
|
+
},
|
|
75
|
+
"months": {
|
|
76
|
+
"type": "number"
|
|
77
|
+
},
|
|
78
|
+
"weeks": {
|
|
79
|
+
"type": "number"
|
|
80
|
+
},
|
|
81
|
+
"days": {
|
|
82
|
+
"type": "number"
|
|
83
|
+
},
|
|
84
|
+
"hours": {
|
|
85
|
+
"type": "number"
|
|
86
|
+
},
|
|
87
|
+
"minutes": {
|
|
88
|
+
"type": "number"
|
|
89
|
+
},
|
|
90
|
+
"seconds": {
|
|
91
|
+
"type": "number"
|
|
92
|
+
},
|
|
93
|
+
"milliseconds": {
|
|
94
|
+
"type": "number"
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
"description": "Human friendly durations object."
|
|
98
|
+
}
|
|
99
|
+
],
|
|
100
|
+
"description": "The minimum time that the HTTP server will delay the shutdown of the backend. During this delay health checks will be set to failing, allowing traffic to drain. Defaults to 0 seconds. Supported formats:\n- A string in the format of '1d', '2 seconds' etc. as supported by the `ms` library.\n- A standard ISO formatted duration string, e.g. 'P2DT6H' or 'PT1M'.\n- An object with individual units (in plural) as keys, e.g. `{ days: 2, hours: 6 }`."
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
"trustProxy": {
|
|
105
|
+
"anyOf": [
|
|
106
|
+
{
|
|
107
|
+
"type": "boolean"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"type": "number"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"type": "string"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"type": "array",
|
|
117
|
+
"items": {
|
|
118
|
+
"type": "string"
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
],
|
|
122
|
+
"description": "Corresponds to the Express `trust proxy` setting."
|
|
123
|
+
},
|
|
124
|
+
"listen": {
|
|
125
|
+
"anyOf": [
|
|
126
|
+
{
|
|
127
|
+
"type": "string"
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"type": "object",
|
|
131
|
+
"properties": {
|
|
132
|
+
"host": {
|
|
133
|
+
"type": "string",
|
|
134
|
+
"description": "Address of the interface that the backend should bind to."
|
|
135
|
+
},
|
|
136
|
+
"port": {
|
|
137
|
+
"type": [
|
|
138
|
+
"string",
|
|
139
|
+
"number"
|
|
140
|
+
],
|
|
141
|
+
"description": "Port that the backend should listen to."
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
],
|
|
146
|
+
"description": "Address that the backend should listen to."
|
|
147
|
+
},
|
|
148
|
+
"https": {
|
|
149
|
+
"anyOf": [
|
|
150
|
+
{
|
|
151
|
+
"type": "boolean",
|
|
152
|
+
"const": true
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"type": "object",
|
|
156
|
+
"properties": {
|
|
157
|
+
"certificate": {
|
|
158
|
+
"type": "object",
|
|
159
|
+
"properties": {
|
|
160
|
+
"cert": {
|
|
161
|
+
"type": "string",
|
|
162
|
+
"description": "PEM encoded certificate. Use $file to load in a file"
|
|
163
|
+
},
|
|
164
|
+
"key": {
|
|
165
|
+
"type": "string",
|
|
166
|
+
"description": "PEM encoded certificate key. Use $file to load in a file.",
|
|
167
|
+
"visibility": "secret"
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
"required": [
|
|
171
|
+
"cert",
|
|
172
|
+
"key"
|
|
173
|
+
],
|
|
174
|
+
"description": "Certificate configuration"
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
],
|
|
179
|
+
"description": "HTTPS configuration for the backend. If omitted the backend will serve HTTP.\n\nSetting this to `true` will cause self-signed certificates to be generated, which can be useful for local development or other non-production scenarios."
|
|
180
|
+
},
|
|
181
|
+
"server": {
|
|
182
|
+
"type": "object",
|
|
183
|
+
"properties": {
|
|
184
|
+
"headersTimeout": {
|
|
185
|
+
"anyOf": [
|
|
186
|
+
{
|
|
187
|
+
"type": "number"
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"type": "string"
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
"type": "object",
|
|
194
|
+
"properties": {
|
|
195
|
+
"years": {
|
|
196
|
+
"type": "number"
|
|
197
|
+
},
|
|
198
|
+
"months": {
|
|
199
|
+
"type": "number"
|
|
200
|
+
},
|
|
201
|
+
"weeks": {
|
|
202
|
+
"type": "number"
|
|
203
|
+
},
|
|
204
|
+
"days": {
|
|
205
|
+
"type": "number"
|
|
206
|
+
},
|
|
207
|
+
"hours": {
|
|
208
|
+
"type": "number"
|
|
209
|
+
},
|
|
210
|
+
"minutes": {
|
|
211
|
+
"type": "number"
|
|
212
|
+
},
|
|
213
|
+
"seconds": {
|
|
214
|
+
"type": "number"
|
|
215
|
+
},
|
|
216
|
+
"milliseconds": {
|
|
217
|
+
"type": "number"
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
"description": "Human friendly durations object."
|
|
221
|
+
}
|
|
222
|
+
],
|
|
223
|
+
"description": "Sets the timeout value for receiving the complete HTTP headers from the client."
|
|
224
|
+
},
|
|
225
|
+
"requestTimeout": {
|
|
226
|
+
"anyOf": [
|
|
227
|
+
{
|
|
228
|
+
"type": "number"
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
"type": "string"
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
"type": "object",
|
|
235
|
+
"properties": {
|
|
236
|
+
"years": {
|
|
237
|
+
"type": "number"
|
|
238
|
+
},
|
|
239
|
+
"months": {
|
|
240
|
+
"type": "number"
|
|
241
|
+
},
|
|
242
|
+
"weeks": {
|
|
243
|
+
"type": "number"
|
|
244
|
+
},
|
|
245
|
+
"days": {
|
|
246
|
+
"type": "number"
|
|
247
|
+
},
|
|
248
|
+
"hours": {
|
|
249
|
+
"type": "number"
|
|
250
|
+
},
|
|
251
|
+
"minutes": {
|
|
252
|
+
"type": "number"
|
|
253
|
+
},
|
|
254
|
+
"seconds": {
|
|
255
|
+
"type": "number"
|
|
256
|
+
},
|
|
257
|
+
"milliseconds": {
|
|
258
|
+
"type": "number"
|
|
259
|
+
}
|
|
260
|
+
},
|
|
261
|
+
"description": "Human friendly durations object."
|
|
262
|
+
}
|
|
263
|
+
],
|
|
264
|
+
"description": "Sets the timeout value for receiving the entire request (headers and body) from the client."
|
|
265
|
+
},
|
|
266
|
+
"keepAliveTimeout": {
|
|
267
|
+
"anyOf": [
|
|
268
|
+
{
|
|
269
|
+
"type": "number"
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
"type": "string"
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
"type": "object",
|
|
276
|
+
"properties": {
|
|
277
|
+
"years": {
|
|
278
|
+
"type": "number"
|
|
279
|
+
},
|
|
280
|
+
"months": {
|
|
281
|
+
"type": "number"
|
|
282
|
+
},
|
|
283
|
+
"weeks": {
|
|
284
|
+
"type": "number"
|
|
285
|
+
},
|
|
286
|
+
"days": {
|
|
287
|
+
"type": "number"
|
|
288
|
+
},
|
|
289
|
+
"hours": {
|
|
290
|
+
"type": "number"
|
|
291
|
+
},
|
|
292
|
+
"minutes": {
|
|
293
|
+
"type": "number"
|
|
294
|
+
},
|
|
295
|
+
"seconds": {
|
|
296
|
+
"type": "number"
|
|
297
|
+
},
|
|
298
|
+
"milliseconds": {
|
|
299
|
+
"type": "number"
|
|
300
|
+
}
|
|
301
|
+
},
|
|
302
|
+
"description": "Human friendly durations object."
|
|
303
|
+
}
|
|
304
|
+
],
|
|
305
|
+
"description": "Sets the timeout value for inactivity on a socket during keep-alive."
|
|
306
|
+
},
|
|
307
|
+
"timeout": {
|
|
308
|
+
"anyOf": [
|
|
309
|
+
{
|
|
310
|
+
"type": "number"
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
"type": "string"
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
"type": "object",
|
|
317
|
+
"properties": {
|
|
318
|
+
"years": {
|
|
319
|
+
"type": "number"
|
|
320
|
+
},
|
|
321
|
+
"months": {
|
|
322
|
+
"type": "number"
|
|
323
|
+
},
|
|
324
|
+
"weeks": {
|
|
325
|
+
"type": "number"
|
|
326
|
+
},
|
|
327
|
+
"days": {
|
|
328
|
+
"type": "number"
|
|
329
|
+
},
|
|
330
|
+
"hours": {
|
|
331
|
+
"type": "number"
|
|
332
|
+
},
|
|
333
|
+
"minutes": {
|
|
334
|
+
"type": "number"
|
|
335
|
+
},
|
|
336
|
+
"seconds": {
|
|
337
|
+
"type": "number"
|
|
338
|
+
},
|
|
339
|
+
"milliseconds": {
|
|
340
|
+
"type": "number"
|
|
341
|
+
}
|
|
342
|
+
},
|
|
343
|
+
"description": "Human friendly durations object."
|
|
344
|
+
}
|
|
345
|
+
],
|
|
346
|
+
"description": "Sets the timeout value for sockets."
|
|
347
|
+
},
|
|
348
|
+
"maxHeadersCount": {
|
|
349
|
+
"type": "number",
|
|
350
|
+
"description": "Limits maximum incoming headers count."
|
|
351
|
+
},
|
|
352
|
+
"maxRequestsPerSocket": {
|
|
353
|
+
"type": "number",
|
|
354
|
+
"description": "Sets the maximum number of requests socket can handle before closing keep alive connection."
|
|
355
|
+
}
|
|
356
|
+
},
|
|
357
|
+
"description": "Server-level HTTP options configuration for the backend. These options are passed directly to the underlying Node.js HTTP server.\n\nTimeout values support multiple formats:\n- A number in milliseconds\n- A string in the format of '1d', '2 seconds' etc. as supported by the `ms` library\n- A standard ISO formatted duration string, e.g. 'P2DT6H' or 'PT1M'\n- An object with individual units (in plural) as keys, e.g. `{ days: 2, hours: 6 }`"
|
|
358
|
+
},
|
|
359
|
+
"auditor": {
|
|
360
|
+
"type": "object",
|
|
361
|
+
"properties": {
|
|
362
|
+
"severityLogLevelMappings": {
|
|
363
|
+
"type": "object",
|
|
364
|
+
"properties": {
|
|
365
|
+
"low": {
|
|
366
|
+
"type": "string",
|
|
367
|
+
"enum": [
|
|
368
|
+
"debug",
|
|
369
|
+
"info",
|
|
370
|
+
"warn",
|
|
371
|
+
"error"
|
|
372
|
+
]
|
|
373
|
+
},
|
|
374
|
+
"medium": {
|
|
375
|
+
"type": "string",
|
|
376
|
+
"enum": [
|
|
377
|
+
"debug",
|
|
378
|
+
"info",
|
|
379
|
+
"warn",
|
|
380
|
+
"error"
|
|
381
|
+
]
|
|
382
|
+
},
|
|
383
|
+
"high": {
|
|
384
|
+
"type": "string",
|
|
385
|
+
"enum": [
|
|
386
|
+
"debug",
|
|
387
|
+
"info",
|
|
388
|
+
"warn",
|
|
389
|
+
"error"
|
|
390
|
+
]
|
|
391
|
+
},
|
|
392
|
+
"critical": {
|
|
393
|
+
"type": "string",
|
|
394
|
+
"enum": [
|
|
395
|
+
"debug",
|
|
396
|
+
"info",
|
|
397
|
+
"warn",
|
|
398
|
+
"error"
|
|
399
|
+
]
|
|
400
|
+
}
|
|
401
|
+
},
|
|
402
|
+
"description": "Defines how audit event severity levels are mapped to log levels. This allows you to control the verbosity of audit logs based on the severity of the event. For example, you might want to log 'low' severity events as 'debug' messages, while logging 'critical' events as 'error' messages. Each severity level ('low', 'medium', 'high', 'critical') can be mapped to one of the standard log levels ('debug', 'info', 'warn', 'error').\n\nBy default, audit events are mapped to log levels as follows:\n- `low`: `debug`\n- `medium`: `info`\n- `high`: `info`\n- `critical`: `info`"
|
|
403
|
+
}
|
|
404
|
+
},
|
|
405
|
+
"description": "Options used by the default auditor service."
|
|
406
|
+
},
|
|
407
|
+
"actions": {
|
|
408
|
+
"type": "object",
|
|
409
|
+
"properties": {
|
|
410
|
+
"pluginSources": {
|
|
411
|
+
"type": "array",
|
|
412
|
+
"items": {
|
|
413
|
+
"type": "string"
|
|
414
|
+
},
|
|
415
|
+
"description": "List of plugin sources to load actions from."
|
|
416
|
+
},
|
|
417
|
+
"filter": {
|
|
418
|
+
"type": "object",
|
|
419
|
+
"properties": {
|
|
420
|
+
"include": {
|
|
421
|
+
"type": "array",
|
|
422
|
+
"items": {
|
|
423
|
+
"type": "object",
|
|
424
|
+
"properties": {
|
|
425
|
+
"id": {
|
|
426
|
+
"type": "string",
|
|
427
|
+
"description": "Glob pattern for action IDs to match. Action IDs have the format `{pluginId}:{actionName}`.",
|
|
428
|
+
"examples": [
|
|
429
|
+
"catalog:*"
|
|
430
|
+
]
|
|
431
|
+
},
|
|
432
|
+
"attributes": {
|
|
433
|
+
"type": "object",
|
|
434
|
+
"properties": {
|
|
435
|
+
"destructive": {
|
|
436
|
+
"type": "boolean",
|
|
437
|
+
"description": "If specified, only match actions where destructive matches this value. Actions default to destructive: true if not explicitly set."
|
|
438
|
+
},
|
|
439
|
+
"readOnly": {
|
|
440
|
+
"type": "boolean",
|
|
441
|
+
"description": "If specified, only match actions where readOnly matches this value. Actions default to readOnly: false if not explicitly set."
|
|
442
|
+
},
|
|
443
|
+
"idempotent": {
|
|
444
|
+
"type": "boolean",
|
|
445
|
+
"description": "If specified, only match actions where idempotent matches this value. Actions default to idempotent: false if not explicitly set."
|
|
446
|
+
}
|
|
447
|
+
},
|
|
448
|
+
"description": "Attribute constraints. All specified attributes must match. Actions are compared against their resolved attributes (with defaults applied)."
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
},
|
|
452
|
+
"description": "Rules for actions to include. An action must match at least one rule to be included. Each rule can specify an id pattern and/or attribute constraints. If no include rules are specified, all actions are included by default."
|
|
453
|
+
},
|
|
454
|
+
"exclude": {
|
|
455
|
+
"type": "array",
|
|
456
|
+
"items": {
|
|
457
|
+
"type": "object",
|
|
458
|
+
"properties": {
|
|
459
|
+
"id": {
|
|
460
|
+
"type": "string",
|
|
461
|
+
"description": "Glob pattern for action IDs to match. Action IDs have the format `{pluginId}:{actionName}`.",
|
|
462
|
+
"examples": [
|
|
463
|
+
"*:delete-*"
|
|
464
|
+
]
|
|
465
|
+
},
|
|
466
|
+
"attributes": {
|
|
467
|
+
"type": "object",
|
|
468
|
+
"properties": {
|
|
469
|
+
"destructive": {
|
|
470
|
+
"type": "boolean",
|
|
471
|
+
"description": "If specified, only match actions where destructive matches this value. Actions default to destructive: true if not explicitly set."
|
|
472
|
+
},
|
|
473
|
+
"readOnly": {
|
|
474
|
+
"type": "boolean",
|
|
475
|
+
"description": "If specified, only match actions where readOnly matches this value. Actions default to readOnly: false if not explicitly set."
|
|
476
|
+
},
|
|
477
|
+
"idempotent": {
|
|
478
|
+
"type": "boolean",
|
|
479
|
+
"description": "If specified, only match actions where idempotent matches this value. Actions default to idempotent: false if not explicitly set."
|
|
480
|
+
}
|
|
481
|
+
},
|
|
482
|
+
"description": "Attribute constraints. All specified attributes must match. Actions are compared against their resolved attributes (with defaults applied)."
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
},
|
|
486
|
+
"description": "Rules for actions to exclude. Exclusions take precedence over inclusions. Each rule can specify an id pattern and/or attribute constraints."
|
|
487
|
+
}
|
|
488
|
+
},
|
|
489
|
+
"description": "Filter configuration for actions. Allows controlling which actions are exposed to consumers based on patterns and attributes."
|
|
490
|
+
}
|
|
491
|
+
},
|
|
492
|
+
"description": "Options used by the default actions service."
|
|
493
|
+
},
|
|
494
|
+
"auth": {
|
|
495
|
+
"type": "object",
|
|
496
|
+
"properties": {
|
|
497
|
+
"keys": {
|
|
498
|
+
"type": "array",
|
|
499
|
+
"items": {
|
|
500
|
+
"type": "object",
|
|
501
|
+
"properties": {
|
|
502
|
+
"secret": {
|
|
503
|
+
"type": "string",
|
|
504
|
+
"description": "Secret for generating tokens. Should be a base64 string, recommended length is 24 bytes.",
|
|
505
|
+
"visibility": "secret"
|
|
506
|
+
}
|
|
507
|
+
},
|
|
508
|
+
"required": [
|
|
509
|
+
"secret"
|
|
510
|
+
]
|
|
511
|
+
},
|
|
512
|
+
"description": "Keys shared by all backends for signing and validating backend tokens.",
|
|
513
|
+
"deprecated": "this will be removed when the backwards compatibility is no longer needed with backend-common"
|
|
514
|
+
},
|
|
515
|
+
"dangerouslyDisableDefaultAuthPolicy": {
|
|
516
|
+
"type": "boolean",
|
|
517
|
+
"description": "This disables the otherwise default auth policy, which requires all requests to be authenticated with either user or service credentials.\n\nDisabling this check means that the backend will no longer block unauthenticated requests, but instead allow them to pass through to plugins.\n\nIf permissions are enabled, unauthenticated requests will be treated exactly as such, leaving it to the permission policy to determine what permissions should be allowed for an unauthenticated identity. Note that this will also apply to service-to-service calls between plugins unless you configure credentials for service calls."
|
|
518
|
+
},
|
|
519
|
+
"pluginKeyStore": {
|
|
520
|
+
"anyOf": [
|
|
521
|
+
{
|
|
522
|
+
"type": "object",
|
|
523
|
+
"properties": {
|
|
524
|
+
"type": {
|
|
525
|
+
"type": "string",
|
|
526
|
+
"const": "database"
|
|
527
|
+
}
|
|
528
|
+
},
|
|
529
|
+
"required": [
|
|
530
|
+
"type"
|
|
531
|
+
]
|
|
532
|
+
},
|
|
533
|
+
{
|
|
534
|
+
"type": "object",
|
|
535
|
+
"properties": {
|
|
536
|
+
"type": {
|
|
537
|
+
"type": "string",
|
|
538
|
+
"const": "static"
|
|
539
|
+
},
|
|
540
|
+
"static": {
|
|
541
|
+
"type": "object",
|
|
542
|
+
"properties": {
|
|
543
|
+
"keys": {
|
|
544
|
+
"type": "array",
|
|
545
|
+
"items": {
|
|
546
|
+
"type": "object",
|
|
547
|
+
"properties": {
|
|
548
|
+
"publicKeyFile": {
|
|
549
|
+
"type": "string",
|
|
550
|
+
"description": "Path to the public key file in the SPKI format. Should be an absolute path."
|
|
551
|
+
},
|
|
552
|
+
"privateKeyFile": {
|
|
553
|
+
"type": "string",
|
|
554
|
+
"description": "Path to the matching private key file in the PKCS#8 format. Should be an absolute path.\n\nThe first array entry must specify a private key file, the rest must not."
|
|
555
|
+
},
|
|
556
|
+
"keyId": {
|
|
557
|
+
"type": "string",
|
|
558
|
+
"description": "ID to uniquely identify this key within the JWK set."
|
|
559
|
+
},
|
|
560
|
+
"algorithm": {
|
|
561
|
+
"type": "string",
|
|
562
|
+
"description": "JWS \"alg\" (Algorithm) Header Parameter value. Defaults to ES256. Must match the algorithm used to generate the keys in the provided files"
|
|
563
|
+
}
|
|
564
|
+
},
|
|
565
|
+
"required": [
|
|
566
|
+
"publicKeyFile",
|
|
567
|
+
"keyId"
|
|
568
|
+
]
|
|
569
|
+
},
|
|
570
|
+
"description": "Must be declared at least once and the first one will be used for signing."
|
|
571
|
+
}
|
|
572
|
+
},
|
|
573
|
+
"required": [
|
|
574
|
+
"keys"
|
|
575
|
+
]
|
|
576
|
+
}
|
|
577
|
+
},
|
|
578
|
+
"required": [
|
|
579
|
+
"type",
|
|
580
|
+
"static"
|
|
581
|
+
]
|
|
582
|
+
}
|
|
583
|
+
],
|
|
584
|
+
"description": "Controls how to store keys for plugin-to-plugin auth"
|
|
585
|
+
},
|
|
586
|
+
"externalAccess": {
|
|
587
|
+
"type": "array",
|
|
588
|
+
"items": {
|
|
589
|
+
"anyOf": [
|
|
590
|
+
{
|
|
591
|
+
"type": "object",
|
|
592
|
+
"properties": {
|
|
593
|
+
"type": {
|
|
594
|
+
"type": "string",
|
|
595
|
+
"const": "legacy",
|
|
596
|
+
"description": "This is the legacy service-to-service access method, where a set of static keys were shared among plugins and used for symmetric signing and verification. These correspond to the old `backend.auth.keys` set and retain their behavior for backwards compatibility. Please migrate to other access methods when possible.\n\nCallers generate JWT tokens with the following payload:\n\n```json { \"sub\": \"backstage-plugin\", \"exp\": <epoch seconds one hour in the future> } ```\n\nAnd sign them with HS256, using the base64 decoded secret. The tokens are then passed along with requests in the Authorization header:\n\n``` Authorization: Bearer eyJhbGciOiJIUzI... ```"
|
|
597
|
+
},
|
|
598
|
+
"options": {
|
|
599
|
+
"type": "object",
|
|
600
|
+
"properties": {
|
|
601
|
+
"secret": {
|
|
602
|
+
"type": "string",
|
|
603
|
+
"description": "Any set of base64 encoded random bytes to be used as both the signing and verification key. Should be sufficiently long so as not to be easy to guess by brute force.\n\nCan be generated eg using\n\n```sh node -p 'require(\"crypto\").randomBytes(24).toString(\"base64\")' ```",
|
|
604
|
+
"visibility": "secret"
|
|
605
|
+
},
|
|
606
|
+
"subject": {
|
|
607
|
+
"type": "string",
|
|
608
|
+
"description": "Sets the subject of the principal, when matching this token. Useful for debugging and tracking purposes."
|
|
609
|
+
}
|
|
610
|
+
},
|
|
611
|
+
"required": [
|
|
612
|
+
"secret",
|
|
613
|
+
"subject"
|
|
614
|
+
]
|
|
615
|
+
},
|
|
616
|
+
"accessRestrictions": {
|
|
617
|
+
"type": "array",
|
|
618
|
+
"items": {
|
|
619
|
+
"type": "object",
|
|
620
|
+
"properties": {
|
|
621
|
+
"plugin": {
|
|
622
|
+
"type": "string",
|
|
623
|
+
"description": "Permit access to make requests to this plugin.\n\nCan be further refined by setting additional fields below."
|
|
624
|
+
},
|
|
625
|
+
"permission": {
|
|
626
|
+
"anyOf": [
|
|
627
|
+
{
|
|
628
|
+
"type": "string"
|
|
629
|
+
},
|
|
630
|
+
{
|
|
631
|
+
"type": "array",
|
|
632
|
+
"items": {
|
|
633
|
+
"type": "string"
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
],
|
|
637
|
+
"description": "If given, this method is limited to only performing actions with these named permissions in this plugin.\n\nNote that this only applies where permissions checks are enabled in the first place. Endpoints that are not protected by the permissions system at all, are not affected by this setting."
|
|
638
|
+
},
|
|
639
|
+
"permissionAttribute": {
|
|
640
|
+
"type": "object",
|
|
641
|
+
"properties": {
|
|
642
|
+
"action": {
|
|
643
|
+
"anyOf": [
|
|
644
|
+
{
|
|
645
|
+
"type": "string"
|
|
646
|
+
},
|
|
647
|
+
{
|
|
648
|
+
"type": "array",
|
|
649
|
+
"items": {
|
|
650
|
+
"type": "string"
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
],
|
|
654
|
+
"description": "One of more of 'create', 'read', 'update', or 'delete'."
|
|
655
|
+
}
|
|
656
|
+
},
|
|
657
|
+
"description": "If given, this method is limited to only performing actions whose permissions have these attributes.\n\nNote that this only applies where permissions checks are enabled in the first place. Endpoints that are not protected by the permissions system at all, are not affected by this setting."
|
|
658
|
+
}
|
|
659
|
+
},
|
|
660
|
+
"required": [
|
|
661
|
+
"plugin"
|
|
662
|
+
]
|
|
663
|
+
},
|
|
664
|
+
"description": "Restricts what types of access that are permitted for this access method. If no access restrictions are given, it'll have unlimited access. This access restriction applies for the framework level; individual plugins may have their own access control mechanisms on top of this."
|
|
665
|
+
}
|
|
666
|
+
},
|
|
667
|
+
"required": [
|
|
668
|
+
"type",
|
|
669
|
+
"options"
|
|
670
|
+
]
|
|
671
|
+
},
|
|
672
|
+
{
|
|
673
|
+
"type": "object",
|
|
674
|
+
"properties": {
|
|
675
|
+
"type": {
|
|
676
|
+
"type": "string",
|
|
677
|
+
"const": "static",
|
|
678
|
+
"description": "This access method consists of random static tokens that can be handed out to callers.\n\nThe tokens are then passed along verbatim with requests in the Authorization header:\n\n``` Authorization: Bearer eZv5o+fW3KnR3kVabMW4ZcDNLPl8nmMW ```"
|
|
679
|
+
},
|
|
680
|
+
"options": {
|
|
681
|
+
"type": "object",
|
|
682
|
+
"properties": {
|
|
683
|
+
"token": {
|
|
684
|
+
"type": "string",
|
|
685
|
+
"description": "A raw token that can be any string, but for security reasons should be sufficiently long so as not to be easy to guess by brute force.\n\nCan be generated eg using\n\n```sh node -p 'require(\"crypto\").randomBytes(24).toString(\"base64\")' ```\n\nSince the tokens can be any string, you are free to add additional identifying data to them if you like. For example, adding a `freben-local-dev-` prefix for debugging purposes to a token that you know will be handed out for use as a personal access token during development.",
|
|
686
|
+
"visibility": "secret"
|
|
687
|
+
},
|
|
688
|
+
"subject": {
|
|
689
|
+
"type": "string",
|
|
690
|
+
"description": "Sets the subject of the principal, when matching this token. Useful for debugging and tracking purposes."
|
|
691
|
+
}
|
|
692
|
+
},
|
|
693
|
+
"required": [
|
|
694
|
+
"token",
|
|
695
|
+
"subject"
|
|
696
|
+
]
|
|
697
|
+
},
|
|
698
|
+
"accessRestrictions": {
|
|
699
|
+
"type": "array",
|
|
700
|
+
"items": {
|
|
701
|
+
"type": "object",
|
|
702
|
+
"properties": {
|
|
703
|
+
"plugin": {
|
|
704
|
+
"type": "string",
|
|
705
|
+
"description": "Permit access to make requests to this plugin.\n\nCan be further refined by setting additional fields below."
|
|
706
|
+
},
|
|
707
|
+
"permission": {
|
|
708
|
+
"anyOf": [
|
|
709
|
+
{
|
|
710
|
+
"type": "string"
|
|
711
|
+
},
|
|
712
|
+
{
|
|
713
|
+
"type": "array",
|
|
714
|
+
"items": {
|
|
715
|
+
"type": "string"
|
|
716
|
+
}
|
|
717
|
+
}
|
|
718
|
+
],
|
|
719
|
+
"description": "If given, this method is limited to only performing actions with these named permissions in this plugin.\n\nNote that this only applies where permissions checks are enabled in the first place. Endpoints that are not protected by the permissions system at all, are not affected by this setting."
|
|
720
|
+
},
|
|
721
|
+
"permissionAttribute": {
|
|
722
|
+
"type": "object",
|
|
723
|
+
"properties": {
|
|
724
|
+
"action": {
|
|
725
|
+
"anyOf": [
|
|
726
|
+
{
|
|
727
|
+
"type": "string"
|
|
728
|
+
},
|
|
729
|
+
{
|
|
730
|
+
"type": "array",
|
|
731
|
+
"items": {
|
|
732
|
+
"type": "string"
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
],
|
|
736
|
+
"description": "One of more of 'create', 'read', 'update', or 'delete'."
|
|
737
|
+
}
|
|
738
|
+
},
|
|
739
|
+
"description": "If given, this method is limited to only performing actions whose permissions have these attributes.\n\nNote that this only applies where permissions checks are enabled in the first place. Endpoints that are not protected by the permissions system at all, are not affected by this setting."
|
|
740
|
+
}
|
|
741
|
+
},
|
|
742
|
+
"required": [
|
|
743
|
+
"plugin"
|
|
744
|
+
]
|
|
745
|
+
},
|
|
746
|
+
"description": "Restricts what types of access that are permitted for this access method. If no access restrictions are given, it'll have unlimited access. This access restriction applies for the framework level; individual plugins may have their own access control mechanisms on top of this."
|
|
747
|
+
}
|
|
748
|
+
},
|
|
749
|
+
"required": [
|
|
750
|
+
"type",
|
|
751
|
+
"options"
|
|
752
|
+
]
|
|
753
|
+
},
|
|
754
|
+
{
|
|
755
|
+
"type": "object",
|
|
756
|
+
"properties": {
|
|
757
|
+
"type": {
|
|
758
|
+
"type": "string",
|
|
759
|
+
"const": "jwks",
|
|
760
|
+
"description": "This access method consists of a JWKS endpoint that can be used to verify JWT tokens.\n\nCallers generate JWT tokens via 3rd party tooling and pass them in the Authorization header:\n\n``` Authorization: Bearer eZv5o+fW3KnR3kVabMW4ZcDNLPl8nmMW ```"
|
|
761
|
+
},
|
|
762
|
+
"options": {
|
|
763
|
+
"type": "object",
|
|
764
|
+
"properties": {
|
|
765
|
+
"url": {
|
|
766
|
+
"type": "string",
|
|
767
|
+
"description": "The full URL of the JWKS endpoint."
|
|
768
|
+
},
|
|
769
|
+
"algorithm": {
|
|
770
|
+
"anyOf": [
|
|
771
|
+
{
|
|
772
|
+
"type": "string"
|
|
773
|
+
},
|
|
774
|
+
{
|
|
775
|
+
"type": "array",
|
|
776
|
+
"items": {
|
|
777
|
+
"type": "string"
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
],
|
|
781
|
+
"description": "Sets the algorithm(s) that should be used to verify the JWT tokens. The passed JWTs must have been signed using one of the listed algorithms."
|
|
782
|
+
},
|
|
783
|
+
"issuer": {
|
|
784
|
+
"anyOf": [
|
|
785
|
+
{
|
|
786
|
+
"type": "string"
|
|
787
|
+
},
|
|
788
|
+
{
|
|
789
|
+
"type": "array",
|
|
790
|
+
"items": {
|
|
791
|
+
"type": "string"
|
|
792
|
+
}
|
|
793
|
+
}
|
|
794
|
+
],
|
|
795
|
+
"description": "Sets the issuer(s) that should be used to verify the JWT tokens. Passed JWTs must have an `iss` claim which matches one of the specified issuers."
|
|
796
|
+
},
|
|
797
|
+
"audience": {
|
|
798
|
+
"anyOf": [
|
|
799
|
+
{
|
|
800
|
+
"type": "string"
|
|
801
|
+
},
|
|
802
|
+
{
|
|
803
|
+
"type": "array",
|
|
804
|
+
"items": {
|
|
805
|
+
"type": "string"
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
],
|
|
809
|
+
"description": "Sets the audience(s) that should be used to verify the JWT tokens. The passed JWTs must have an \"aud\" claim that matches one of the audiences specified, or have no audience specified."
|
|
810
|
+
},
|
|
811
|
+
"subjectPrefix": {
|
|
812
|
+
"type": "string",
|
|
813
|
+
"description": "Sets an optional subject prefix. Passes the subject to called plugins. Useful for debugging and tracking purposes."
|
|
814
|
+
}
|
|
815
|
+
},
|
|
816
|
+
"required": [
|
|
817
|
+
"url"
|
|
818
|
+
]
|
|
819
|
+
},
|
|
820
|
+
"accessRestrictions": {
|
|
821
|
+
"type": "array",
|
|
822
|
+
"items": {
|
|
823
|
+
"type": "object",
|
|
824
|
+
"properties": {
|
|
825
|
+
"plugin": {
|
|
826
|
+
"type": "string",
|
|
827
|
+
"description": "Permit access to make requests to this plugin.\n\nCan be further refined by setting additional fields below."
|
|
828
|
+
},
|
|
829
|
+
"permission": {
|
|
830
|
+
"anyOf": [
|
|
831
|
+
{
|
|
832
|
+
"type": "string"
|
|
833
|
+
},
|
|
834
|
+
{
|
|
835
|
+
"type": "array",
|
|
836
|
+
"items": {
|
|
837
|
+
"type": "string"
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
],
|
|
841
|
+
"description": "If given, this method is limited to only performing actions with these named permissions in this plugin.\n\nNote that this only applies where permissions checks are enabled in the first place. Endpoints that are not protected by the permissions system at all, are not affected by this setting."
|
|
842
|
+
},
|
|
843
|
+
"permissionAttribute": {
|
|
844
|
+
"type": "object",
|
|
845
|
+
"properties": {
|
|
846
|
+
"action": {
|
|
847
|
+
"anyOf": [
|
|
848
|
+
{
|
|
849
|
+
"type": "string"
|
|
850
|
+
},
|
|
851
|
+
{
|
|
852
|
+
"type": "array",
|
|
853
|
+
"items": {
|
|
854
|
+
"type": "string"
|
|
855
|
+
}
|
|
856
|
+
}
|
|
857
|
+
],
|
|
858
|
+
"description": "One of more of 'create', 'read', 'update', or 'delete'."
|
|
859
|
+
}
|
|
860
|
+
},
|
|
861
|
+
"description": "If given, this method is limited to only performing actions whose permissions have these attributes.\n\nNote that this only applies where permissions checks are enabled in the first place. Endpoints that are not protected by the permissions system at all, are not affected by this setting."
|
|
862
|
+
}
|
|
863
|
+
},
|
|
864
|
+
"required": [
|
|
865
|
+
"plugin"
|
|
866
|
+
]
|
|
867
|
+
},
|
|
868
|
+
"description": "Restricts what types of access that are permitted for this access method. If no access restrictions are given, it'll have unlimited access. This access restriction applies for the framework level; individual plugins may have their own access control mechanisms on top of this."
|
|
869
|
+
}
|
|
870
|
+
},
|
|
871
|
+
"required": [
|
|
872
|
+
"type",
|
|
873
|
+
"options"
|
|
874
|
+
]
|
|
875
|
+
}
|
|
876
|
+
]
|
|
877
|
+
},
|
|
878
|
+
"description": "Configures methods of external access, ie ways for callers outside of the Backstage ecosystem to get authorized for access to APIs that do not permit unauthorized access."
|
|
879
|
+
}
|
|
880
|
+
},
|
|
881
|
+
"description": "Options used by the default auth, httpAuth and userInfo services."
|
|
882
|
+
},
|
|
883
|
+
"database": {
|
|
884
|
+
"type": "object",
|
|
885
|
+
"properties": {
|
|
886
|
+
"client": {
|
|
887
|
+
"type": "string",
|
|
888
|
+
"enum": [
|
|
889
|
+
"better-sqlite3",
|
|
890
|
+
"sqlite3",
|
|
891
|
+
"pg",
|
|
892
|
+
"embedded-postgres"
|
|
893
|
+
],
|
|
894
|
+
"description": "Default database client to use"
|
|
895
|
+
},
|
|
896
|
+
"connection": {
|
|
897
|
+
"anyOf": [
|
|
898
|
+
{
|
|
899
|
+
"type": "string"
|
|
900
|
+
},
|
|
901
|
+
{
|
|
902
|
+
"type": "object",
|
|
903
|
+
"properties": {
|
|
904
|
+
"type": {
|
|
905
|
+
"type": "string",
|
|
906
|
+
"const": "azure",
|
|
907
|
+
"description": "The specific config for Azure database for PostgreSQL connections with Entra authentication"
|
|
908
|
+
},
|
|
909
|
+
"tokenCredential": {
|
|
910
|
+
"type": "object",
|
|
911
|
+
"properties": {
|
|
912
|
+
"tokenRenewableOffsetTime": {
|
|
913
|
+
"anyOf": [
|
|
914
|
+
{
|
|
915
|
+
"type": "string"
|
|
916
|
+
},
|
|
917
|
+
{
|
|
918
|
+
"type": "object",
|
|
919
|
+
"properties": {
|
|
920
|
+
"years": {
|
|
921
|
+
"type": "number"
|
|
922
|
+
},
|
|
923
|
+
"months": {
|
|
924
|
+
"type": "number"
|
|
925
|
+
},
|
|
926
|
+
"weeks": {
|
|
927
|
+
"type": "number"
|
|
928
|
+
},
|
|
929
|
+
"days": {
|
|
930
|
+
"type": "number"
|
|
931
|
+
},
|
|
932
|
+
"hours": {
|
|
933
|
+
"type": "number"
|
|
934
|
+
},
|
|
935
|
+
"minutes": {
|
|
936
|
+
"type": "number"
|
|
937
|
+
},
|
|
938
|
+
"seconds": {
|
|
939
|
+
"type": "number"
|
|
940
|
+
},
|
|
941
|
+
"milliseconds": {
|
|
942
|
+
"type": "number"
|
|
943
|
+
}
|
|
944
|
+
},
|
|
945
|
+
"description": "Human friendly durations object."
|
|
946
|
+
}
|
|
947
|
+
],
|
|
948
|
+
"description": "How early before an access token expires to refresh it with a new one. Defaults to 5 minutes Supported formats:\n- A string in the format of '1d', '2 seconds' etc. as supported by the `ms` library.\n- A standard ISO formatted duration string, e.g. 'P2DT6H' or 'PT1M'.\n- An object with individual units (in plural) as keys, e.g. `{ days: 2, hours: 6 }`."
|
|
949
|
+
},
|
|
950
|
+
"clientId": {
|
|
951
|
+
"type": "string"
|
|
952
|
+
},
|
|
953
|
+
"clientSecret": {
|
|
954
|
+
"type": "string",
|
|
955
|
+
"visibility": "secret"
|
|
956
|
+
},
|
|
957
|
+
"tenantId": {
|
|
958
|
+
"type": "string"
|
|
959
|
+
}
|
|
960
|
+
},
|
|
961
|
+
"description": "Optional Azure token credential configuration"
|
|
962
|
+
}
|
|
963
|
+
},
|
|
964
|
+
"required": [
|
|
965
|
+
"type"
|
|
966
|
+
]
|
|
967
|
+
},
|
|
968
|
+
{
|
|
969
|
+
"type": "object",
|
|
970
|
+
"properties": {
|
|
971
|
+
"type": {
|
|
972
|
+
"type": "string",
|
|
973
|
+
"const": "cloudsql",
|
|
974
|
+
"description": "The specific config for cloudsql connections"
|
|
975
|
+
},
|
|
976
|
+
"instance": {
|
|
977
|
+
"type": "string",
|
|
978
|
+
"description": "The instance connection name for the cloudsql instance, e.g. `project:region:instance`"
|
|
979
|
+
},
|
|
980
|
+
"ipAddressType": {
|
|
981
|
+
"type": "string",
|
|
982
|
+
"enum": [
|
|
983
|
+
"PUBLIC",
|
|
984
|
+
"PRIVATE",
|
|
985
|
+
"PSC"
|
|
986
|
+
],
|
|
987
|
+
"description": "The ip address type to use for the connection. Defaults to 'PUBLIC'"
|
|
988
|
+
}
|
|
989
|
+
},
|
|
990
|
+
"required": [
|
|
991
|
+
"type",
|
|
992
|
+
"instance"
|
|
993
|
+
]
|
|
994
|
+
},
|
|
995
|
+
{
|
|
996
|
+
"type": "object",
|
|
997
|
+
"properties": {
|
|
998
|
+
"type": {
|
|
999
|
+
"type": "string",
|
|
1000
|
+
"const": "rds",
|
|
1001
|
+
"description": "The specific config for AWS RDS connections with IAM authentication. Requires the `@aws-sdk/rds-signer` package to be installed. The IAM role or user must have the `rds-db:connect` permission for the database user."
|
|
1002
|
+
},
|
|
1003
|
+
"host": {
|
|
1004
|
+
"type": "string",
|
|
1005
|
+
"description": "The hostname of the RDS instance."
|
|
1006
|
+
},
|
|
1007
|
+
"port": {
|
|
1008
|
+
"type": "number",
|
|
1009
|
+
"description": "The port number the database is listening on."
|
|
1010
|
+
},
|
|
1011
|
+
"user": {
|
|
1012
|
+
"type": "string",
|
|
1013
|
+
"description": "The database user to authenticate as. This user must have the `rds_iam` role granted."
|
|
1014
|
+
},
|
|
1015
|
+
"region": {
|
|
1016
|
+
"type": "string",
|
|
1017
|
+
"description": "The AWS region where the RDS instance is located. Falls back to the AWS_REGION or AWS_DEFAULT_REGION environment variables if not set."
|
|
1018
|
+
}
|
|
1019
|
+
},
|
|
1020
|
+
"required": [
|
|
1021
|
+
"type",
|
|
1022
|
+
"host",
|
|
1023
|
+
"port",
|
|
1024
|
+
"user"
|
|
1025
|
+
],
|
|
1026
|
+
"additionalProperties": {
|
|
1027
|
+
"description": "Other connection settings"
|
|
1028
|
+
}
|
|
1029
|
+
},
|
|
1030
|
+
{
|
|
1031
|
+
"type": "object",
|
|
1032
|
+
"properties": {
|
|
1033
|
+
"type": {
|
|
1034
|
+
"type": "string",
|
|
1035
|
+
"const": "default",
|
|
1036
|
+
"description": "The rest config for default, regular connections"
|
|
1037
|
+
},
|
|
1038
|
+
"password": {
|
|
1039
|
+
"type": "string",
|
|
1040
|
+
"description": "Password that belongs to the client User",
|
|
1041
|
+
"visibility": "secret"
|
|
1042
|
+
}
|
|
1043
|
+
},
|
|
1044
|
+
"additionalProperties": {
|
|
1045
|
+
"description": "Other connection settings"
|
|
1046
|
+
}
|
|
1047
|
+
}
|
|
1048
|
+
],
|
|
1049
|
+
"description": "Base database connection string, or object with individual connection properties",
|
|
1050
|
+
"visibility": "secret"
|
|
1051
|
+
},
|
|
1052
|
+
"prefix": {
|
|
1053
|
+
"type": "string",
|
|
1054
|
+
"description": "Database name prefix override"
|
|
1055
|
+
},
|
|
1056
|
+
"ensureExists": {
|
|
1057
|
+
"type": "boolean",
|
|
1058
|
+
"description": "Whether to ensure the given database exists by creating it if it does not. Defaults to true if unspecified."
|
|
1059
|
+
},
|
|
1060
|
+
"ensureSchemaExists": {
|
|
1061
|
+
"type": "boolean",
|
|
1062
|
+
"description": "Whether to ensure the given database schema exists by creating it if it does not. Defaults to false if unspecified.\n\nNOTE: Currently only supported by the `pg` client when pluginDivisionMode: schema"
|
|
1063
|
+
},
|
|
1064
|
+
"pluginDivisionMode": {
|
|
1065
|
+
"type": "string",
|
|
1066
|
+
"enum": [
|
|
1067
|
+
"database",
|
|
1068
|
+
"schema"
|
|
1069
|
+
],
|
|
1070
|
+
"description": "How plugins databases are managed/divided in the provided database instance.\n\n`database` -> Plugins are each given their own database to manage their schemas/tables.\n\n`schema` -> Plugins will be given their own schema (in the specified/default database) to manage their tables.\n\nNOTE: Currently only supported by the `pg` client.",
|
|
1071
|
+
"default": "database"
|
|
1072
|
+
},
|
|
1073
|
+
"role": {
|
|
1074
|
+
"type": "string",
|
|
1075
|
+
"description": "Configures the ownership of newly created schemas in pg databases."
|
|
1076
|
+
},
|
|
1077
|
+
"knexConfig": {
|
|
1078
|
+
"type": "object",
|
|
1079
|
+
"description": "Arbitrary config object to pass to knex when initializing (https://knexjs.org/#Installation-client). Most notable is the debug and asyncStackTraces booleans"
|
|
1080
|
+
},
|
|
1081
|
+
"skipMigrations": {
|
|
1082
|
+
"type": "boolean",
|
|
1083
|
+
"description": "Skip running database migrations."
|
|
1084
|
+
},
|
|
1085
|
+
"plugin": {
|
|
1086
|
+
"type": "object",
|
|
1087
|
+
"additionalProperties": {
|
|
1088
|
+
"type": "object",
|
|
1089
|
+
"properties": {
|
|
1090
|
+
"client": {
|
|
1091
|
+
"type": "string",
|
|
1092
|
+
"enum": [
|
|
1093
|
+
"better-sqlite3",
|
|
1094
|
+
"sqlite3",
|
|
1095
|
+
"pg"
|
|
1096
|
+
],
|
|
1097
|
+
"description": "Database client override"
|
|
1098
|
+
},
|
|
1099
|
+
"connection": {
|
|
1100
|
+
"anyOf": [
|
|
1101
|
+
{
|
|
1102
|
+
"type": "string"
|
|
1103
|
+
},
|
|
1104
|
+
{
|
|
1105
|
+
"type": "object",
|
|
1106
|
+
"properties": {
|
|
1107
|
+
"type": {
|
|
1108
|
+
"type": "string",
|
|
1109
|
+
"const": "cloudsql",
|
|
1110
|
+
"description": "The specific config for cloudsql connections"
|
|
1111
|
+
},
|
|
1112
|
+
"instance": {
|
|
1113
|
+
"type": "string",
|
|
1114
|
+
"description": "The instance connection name for the cloudsql instance, e.g. `project:region:instance`"
|
|
1115
|
+
}
|
|
1116
|
+
},
|
|
1117
|
+
"required": [
|
|
1118
|
+
"type",
|
|
1119
|
+
"instance"
|
|
1120
|
+
]
|
|
1121
|
+
},
|
|
1122
|
+
{
|
|
1123
|
+
"type": "object",
|
|
1124
|
+
"properties": {
|
|
1125
|
+
"password": {
|
|
1126
|
+
"type": "string",
|
|
1127
|
+
"description": "Password that belongs to the client User",
|
|
1128
|
+
"visibility": "secret"
|
|
1129
|
+
}
|
|
1130
|
+
},
|
|
1131
|
+
"additionalProperties": {
|
|
1132
|
+
"description": "Other connection settings"
|
|
1133
|
+
}
|
|
1134
|
+
}
|
|
1135
|
+
],
|
|
1136
|
+
"description": "Database connection string or Knex object override",
|
|
1137
|
+
"visibility": "secret"
|
|
1138
|
+
},
|
|
1139
|
+
"ensureExists": {
|
|
1140
|
+
"type": "boolean",
|
|
1141
|
+
"description": "Whether to ensure the given database exists by creating it if it does not. Defaults to base config if unspecified."
|
|
1142
|
+
},
|
|
1143
|
+
"ensureSchemaExists": {
|
|
1144
|
+
"type": "boolean",
|
|
1145
|
+
"description": "Whether to ensure the given database schema exists by creating it if it does not. Defaults to false if unspecified.\n\nNOTE: Currently only supported by the `pg` client when pluginDivisionMode: schema"
|
|
1146
|
+
},
|
|
1147
|
+
"knexConfig": {
|
|
1148
|
+
"type": "object",
|
|
1149
|
+
"description": "Arbitrary config object to pass to knex when initializing (https://knexjs.org/#Installation-client). Most notable is the debug and asyncStackTraces booleans.\n\nThis is merged recursively into the base knexConfig"
|
|
1150
|
+
},
|
|
1151
|
+
"role": {
|
|
1152
|
+
"type": "string",
|
|
1153
|
+
"description": "Configures the ownership of newly created schemas in pg databases."
|
|
1154
|
+
},
|
|
1155
|
+
"skipMigrations": {
|
|
1156
|
+
"type": "boolean",
|
|
1157
|
+
"description": "Skip running database migrations."
|
|
1158
|
+
}
|
|
1159
|
+
}
|
|
1160
|
+
},
|
|
1161
|
+
"description": "Plugin specific database configuration and client override"
|
|
1162
|
+
}
|
|
1163
|
+
},
|
|
1164
|
+
"required": [
|
|
1165
|
+
"client",
|
|
1166
|
+
"connection"
|
|
1167
|
+
],
|
|
1168
|
+
"description": "Database connection configuration, select base database type using the `client` field"
|
|
1169
|
+
},
|
|
1170
|
+
"cache": {
|
|
1171
|
+
"anyOf": [
|
|
1172
|
+
{
|
|
1173
|
+
"type": "object",
|
|
1174
|
+
"properties": {
|
|
1175
|
+
"store": {
|
|
1176
|
+
"type": "string",
|
|
1177
|
+
"const": "memory"
|
|
1178
|
+
},
|
|
1179
|
+
"defaultTtl": {
|
|
1180
|
+
"anyOf": [
|
|
1181
|
+
{
|
|
1182
|
+
"type": "number"
|
|
1183
|
+
},
|
|
1184
|
+
{
|
|
1185
|
+
"type": "object",
|
|
1186
|
+
"properties": {
|
|
1187
|
+
"years": {
|
|
1188
|
+
"type": "number"
|
|
1189
|
+
},
|
|
1190
|
+
"months": {
|
|
1191
|
+
"type": "number"
|
|
1192
|
+
},
|
|
1193
|
+
"weeks": {
|
|
1194
|
+
"type": "number"
|
|
1195
|
+
},
|
|
1196
|
+
"days": {
|
|
1197
|
+
"type": "number"
|
|
1198
|
+
},
|
|
1199
|
+
"hours": {
|
|
1200
|
+
"type": "number"
|
|
1201
|
+
},
|
|
1202
|
+
"minutes": {
|
|
1203
|
+
"type": "number"
|
|
1204
|
+
},
|
|
1205
|
+
"seconds": {
|
|
1206
|
+
"type": "number"
|
|
1207
|
+
},
|
|
1208
|
+
"milliseconds": {
|
|
1209
|
+
"type": "number"
|
|
1210
|
+
}
|
|
1211
|
+
},
|
|
1212
|
+
"description": "Human friendly durations object."
|
|
1213
|
+
},
|
|
1214
|
+
{
|
|
1215
|
+
"type": "string"
|
|
1216
|
+
}
|
|
1217
|
+
],
|
|
1218
|
+
"description": "An optional default TTL (in milliseconds, if given as a number)."
|
|
1219
|
+
}
|
|
1220
|
+
},
|
|
1221
|
+
"required": [
|
|
1222
|
+
"store"
|
|
1223
|
+
]
|
|
1224
|
+
},
|
|
1225
|
+
{
|
|
1226
|
+
"type": "object",
|
|
1227
|
+
"properties": {
|
|
1228
|
+
"store": {
|
|
1229
|
+
"type": "string",
|
|
1230
|
+
"const": "redis"
|
|
1231
|
+
},
|
|
1232
|
+
"connection": {
|
|
1233
|
+
"type": "string",
|
|
1234
|
+
"description": "A redis connection string in the form `redis://user:pass@host:port`.",
|
|
1235
|
+
"visibility": "secret"
|
|
1236
|
+
},
|
|
1237
|
+
"defaultTtl": {
|
|
1238
|
+
"anyOf": [
|
|
1239
|
+
{
|
|
1240
|
+
"type": "number"
|
|
1241
|
+
},
|
|
1242
|
+
{
|
|
1243
|
+
"type": "object",
|
|
1244
|
+
"properties": {
|
|
1245
|
+
"years": {
|
|
1246
|
+
"type": "number"
|
|
1247
|
+
},
|
|
1248
|
+
"months": {
|
|
1249
|
+
"type": "number"
|
|
1250
|
+
},
|
|
1251
|
+
"weeks": {
|
|
1252
|
+
"type": "number"
|
|
1253
|
+
},
|
|
1254
|
+
"days": {
|
|
1255
|
+
"type": "number"
|
|
1256
|
+
},
|
|
1257
|
+
"hours": {
|
|
1258
|
+
"type": "number"
|
|
1259
|
+
},
|
|
1260
|
+
"minutes": {
|
|
1261
|
+
"type": "number"
|
|
1262
|
+
},
|
|
1263
|
+
"seconds": {
|
|
1264
|
+
"type": "number"
|
|
1265
|
+
},
|
|
1266
|
+
"milliseconds": {
|
|
1267
|
+
"type": "number"
|
|
1268
|
+
}
|
|
1269
|
+
},
|
|
1270
|
+
"description": "Human friendly durations object."
|
|
1271
|
+
},
|
|
1272
|
+
{
|
|
1273
|
+
"type": "string"
|
|
1274
|
+
}
|
|
1275
|
+
],
|
|
1276
|
+
"description": "An optional default TTL (in milliseconds, if given as a number)."
|
|
1277
|
+
},
|
|
1278
|
+
"redis": {
|
|
1279
|
+
"type": "object",
|
|
1280
|
+
"properties": {
|
|
1281
|
+
"client": {
|
|
1282
|
+
"type": "object",
|
|
1283
|
+
"properties": {
|
|
1284
|
+
"namespace": {
|
|
1285
|
+
"type": "string",
|
|
1286
|
+
"description": "Namespace for the current instance."
|
|
1287
|
+
},
|
|
1288
|
+
"keyPrefixSeparator": {
|
|
1289
|
+
"type": "string",
|
|
1290
|
+
"description": "Separator to use between namespace and key."
|
|
1291
|
+
},
|
|
1292
|
+
"clearBatchSize": {
|
|
1293
|
+
"type": "number",
|
|
1294
|
+
"description": "Number of keys to delete in a single batch."
|
|
1295
|
+
},
|
|
1296
|
+
"useUnlink": {
|
|
1297
|
+
"type": "boolean",
|
|
1298
|
+
"description": "Enable Unlink instead of using Del for clearing keys. This is more performant but may not be supported by all Redis versions."
|
|
1299
|
+
},
|
|
1300
|
+
"noNamespaceAffectsAll": {
|
|
1301
|
+
"type": "boolean",
|
|
1302
|
+
"description": "Whether to allow clearing all keys when no namespace is set. If set to true and no namespace is set, iterate() will return all keys. Defaults to `false`."
|
|
1303
|
+
}
|
|
1304
|
+
},
|
|
1305
|
+
"description": "An optional Redis client configuration. These options are passed to the `@keyv/redis` client."
|
|
1306
|
+
},
|
|
1307
|
+
"cluster": {
|
|
1308
|
+
"type": "object",
|
|
1309
|
+
"properties": {
|
|
1310
|
+
"rootNodes": {
|
|
1311
|
+
"type": "array",
|
|
1312
|
+
"items": {
|
|
1313
|
+
"type": "object"
|
|
1314
|
+
},
|
|
1315
|
+
"description": "Cluster configuration options to be passed to the `@keyv/redis` client (and node-redis under the hood) https://github.com/redis/node-redis/blob/master/docs/clustering.md",
|
|
1316
|
+
"visibility": "secret"
|
|
1317
|
+
},
|
|
1318
|
+
"defaults": {
|
|
1319
|
+
"type": "object",
|
|
1320
|
+
"description": "Cluster node default configuration options to be passed to the `@keyv/redis` client (and node-redis under the hood) https://github.com/redis/node-redis/blob/master/docs/clustering.md",
|
|
1321
|
+
"visibility": "secret"
|
|
1322
|
+
},
|
|
1323
|
+
"minimizeConnections": {
|
|
1324
|
+
"type": "boolean",
|
|
1325
|
+
"description": "When `true`, `.connect()` will only discover the cluster topology, without actually connecting to all the nodes. Useful for short-term or PubSub-only connections."
|
|
1326
|
+
},
|
|
1327
|
+
"useReplicas": {
|
|
1328
|
+
"type": "boolean",
|
|
1329
|
+
"description": "When `true`, distribute load by executing readonly commands (such as `GET`, `GEOSEARCH`, etc.) across all cluster nodes. When `false`, only use master nodes."
|
|
1330
|
+
},
|
|
1331
|
+
"maxCommandRedirections": {
|
|
1332
|
+
"type": "number",
|
|
1333
|
+
"description": "The maximum number of times a command will be redirected due to `MOVED` or `ASK` errors."
|
|
1334
|
+
}
|
|
1335
|
+
},
|
|
1336
|
+
"required": [
|
|
1337
|
+
"rootNodes"
|
|
1338
|
+
],
|
|
1339
|
+
"description": "An optional Redis cluster configuration."
|
|
1340
|
+
}
|
|
1341
|
+
}
|
|
1342
|
+
}
|
|
1343
|
+
},
|
|
1344
|
+
"required": [
|
|
1345
|
+
"store",
|
|
1346
|
+
"connection"
|
|
1347
|
+
]
|
|
1348
|
+
},
|
|
1349
|
+
{
|
|
1350
|
+
"type": "object",
|
|
1351
|
+
"properties": {
|
|
1352
|
+
"store": {
|
|
1353
|
+
"type": "string",
|
|
1354
|
+
"const": "valkey"
|
|
1355
|
+
},
|
|
1356
|
+
"connection": {
|
|
1357
|
+
"type": "string",
|
|
1358
|
+
"description": "A valkey connection string in the form `redis://user:pass@host:port`.",
|
|
1359
|
+
"visibility": "secret"
|
|
1360
|
+
},
|
|
1361
|
+
"defaultTtl": {
|
|
1362
|
+
"anyOf": [
|
|
1363
|
+
{
|
|
1364
|
+
"type": "number"
|
|
1365
|
+
},
|
|
1366
|
+
{
|
|
1367
|
+
"type": "object",
|
|
1368
|
+
"properties": {
|
|
1369
|
+
"years": {
|
|
1370
|
+
"type": "number"
|
|
1371
|
+
},
|
|
1372
|
+
"months": {
|
|
1373
|
+
"type": "number"
|
|
1374
|
+
},
|
|
1375
|
+
"weeks": {
|
|
1376
|
+
"type": "number"
|
|
1377
|
+
},
|
|
1378
|
+
"days": {
|
|
1379
|
+
"type": "number"
|
|
1380
|
+
},
|
|
1381
|
+
"hours": {
|
|
1382
|
+
"type": "number"
|
|
1383
|
+
},
|
|
1384
|
+
"minutes": {
|
|
1385
|
+
"type": "number"
|
|
1386
|
+
},
|
|
1387
|
+
"seconds": {
|
|
1388
|
+
"type": "number"
|
|
1389
|
+
},
|
|
1390
|
+
"milliseconds": {
|
|
1391
|
+
"type": "number"
|
|
1392
|
+
}
|
|
1393
|
+
},
|
|
1394
|
+
"description": "Human friendly durations object."
|
|
1395
|
+
},
|
|
1396
|
+
{
|
|
1397
|
+
"type": "string"
|
|
1398
|
+
}
|
|
1399
|
+
],
|
|
1400
|
+
"description": "An optional default TTL (in milliseconds, if given as a number)."
|
|
1401
|
+
},
|
|
1402
|
+
"valkey": {
|
|
1403
|
+
"type": "object",
|
|
1404
|
+
"properties": {
|
|
1405
|
+
"client": {
|
|
1406
|
+
"type": "object",
|
|
1407
|
+
"properties": {
|
|
1408
|
+
"keyPrefix": {
|
|
1409
|
+
"type": "string",
|
|
1410
|
+
"description": "Namespace and separator used for prefixing keys."
|
|
1411
|
+
}
|
|
1412
|
+
},
|
|
1413
|
+
"description": "An optional Valkey client configuration. These options are passed to the `@keyv/valkey` client."
|
|
1414
|
+
},
|
|
1415
|
+
"cluster": {
|
|
1416
|
+
"type": "object",
|
|
1417
|
+
"properties": {
|
|
1418
|
+
"rootNodes": {
|
|
1419
|
+
"type": "array",
|
|
1420
|
+
"items": {
|
|
1421
|
+
"type": "object"
|
|
1422
|
+
},
|
|
1423
|
+
"description": "Cluster configuration options to be passed to the `@keyv/valkey` client (and node-redis under the hood) https://github.com/redis/node-redis/blob/master/docs/clustering.md",
|
|
1424
|
+
"visibility": "secret"
|
|
1425
|
+
},
|
|
1426
|
+
"defaults": {
|
|
1427
|
+
"type": "object",
|
|
1428
|
+
"description": "Cluster node default configuration options to be passed to the `@keyv/redis` client (and node-redis under the hood) https://github.com/redis/node-redis/blob/master/docs/clustering.md",
|
|
1429
|
+
"visibility": "secret"
|
|
1430
|
+
},
|
|
1431
|
+
"minimizeConnections": {
|
|
1432
|
+
"type": "boolean",
|
|
1433
|
+
"description": "When `true`, `.connect()` will only discover the cluster topology, without actually connecting to all the nodes. Useful for short-term or PubSub-only connections."
|
|
1434
|
+
},
|
|
1435
|
+
"useReplicas": {
|
|
1436
|
+
"type": "boolean",
|
|
1437
|
+
"description": "When `true`, distribute load by executing readonly commands (such as `GET`, `GEOSEARCH`, etc.) across all cluster nodes. When `false`, only use master nodes."
|
|
1438
|
+
},
|
|
1439
|
+
"maxCommandRedirections": {
|
|
1440
|
+
"type": "number",
|
|
1441
|
+
"description": "The maximum number of times a command will be redirected due to `MOVED` or `ASK` errors."
|
|
1442
|
+
}
|
|
1443
|
+
},
|
|
1444
|
+
"required": [
|
|
1445
|
+
"rootNodes"
|
|
1446
|
+
],
|
|
1447
|
+
"description": "An optional Valkey cluster (redis cluster under the hood) configuration."
|
|
1448
|
+
}
|
|
1449
|
+
}
|
|
1450
|
+
}
|
|
1451
|
+
},
|
|
1452
|
+
"required": [
|
|
1453
|
+
"store",
|
|
1454
|
+
"connection"
|
|
1455
|
+
]
|
|
1456
|
+
},
|
|
1457
|
+
{
|
|
1458
|
+
"type": "object",
|
|
1459
|
+
"properties": {
|
|
1460
|
+
"store": {
|
|
1461
|
+
"type": "string",
|
|
1462
|
+
"const": "memcache"
|
|
1463
|
+
},
|
|
1464
|
+
"connection": {
|
|
1465
|
+
"type": "string",
|
|
1466
|
+
"description": "A memcache connection string in the form `user:pass@host:port`.",
|
|
1467
|
+
"visibility": "secret"
|
|
1468
|
+
},
|
|
1469
|
+
"defaultTtl": {
|
|
1470
|
+
"anyOf": [
|
|
1471
|
+
{
|
|
1472
|
+
"type": "number"
|
|
1473
|
+
},
|
|
1474
|
+
{
|
|
1475
|
+
"type": "object",
|
|
1476
|
+
"properties": {
|
|
1477
|
+
"years": {
|
|
1478
|
+
"type": "number"
|
|
1479
|
+
},
|
|
1480
|
+
"months": {
|
|
1481
|
+
"type": "number"
|
|
1482
|
+
},
|
|
1483
|
+
"weeks": {
|
|
1484
|
+
"type": "number"
|
|
1485
|
+
},
|
|
1486
|
+
"days": {
|
|
1487
|
+
"type": "number"
|
|
1488
|
+
},
|
|
1489
|
+
"hours": {
|
|
1490
|
+
"type": "number"
|
|
1491
|
+
},
|
|
1492
|
+
"minutes": {
|
|
1493
|
+
"type": "number"
|
|
1494
|
+
},
|
|
1495
|
+
"seconds": {
|
|
1496
|
+
"type": "number"
|
|
1497
|
+
},
|
|
1498
|
+
"milliseconds": {
|
|
1499
|
+
"type": "number"
|
|
1500
|
+
}
|
|
1501
|
+
},
|
|
1502
|
+
"description": "Human friendly durations object."
|
|
1503
|
+
},
|
|
1504
|
+
{
|
|
1505
|
+
"type": "string"
|
|
1506
|
+
}
|
|
1507
|
+
],
|
|
1508
|
+
"description": "An optional default TTL (in milliseconds)."
|
|
1509
|
+
}
|
|
1510
|
+
},
|
|
1511
|
+
"required": [
|
|
1512
|
+
"store",
|
|
1513
|
+
"connection"
|
|
1514
|
+
]
|
|
1515
|
+
},
|
|
1516
|
+
{
|
|
1517
|
+
"type": "object",
|
|
1518
|
+
"properties": {
|
|
1519
|
+
"store": {
|
|
1520
|
+
"type": "string",
|
|
1521
|
+
"const": "infinispan",
|
|
1522
|
+
"description": "Infinispan cache store configuration."
|
|
1523
|
+
},
|
|
1524
|
+
"defaultTtl": {
|
|
1525
|
+
"anyOf": [
|
|
1526
|
+
{
|
|
1527
|
+
"type": "number"
|
|
1528
|
+
},
|
|
1529
|
+
{
|
|
1530
|
+
"type": "object",
|
|
1531
|
+
"properties": {
|
|
1532
|
+
"years": {
|
|
1533
|
+
"type": "number"
|
|
1534
|
+
},
|
|
1535
|
+
"months": {
|
|
1536
|
+
"type": "number"
|
|
1537
|
+
},
|
|
1538
|
+
"weeks": {
|
|
1539
|
+
"type": "number"
|
|
1540
|
+
},
|
|
1541
|
+
"days": {
|
|
1542
|
+
"type": "number"
|
|
1543
|
+
},
|
|
1544
|
+
"hours": {
|
|
1545
|
+
"type": "number"
|
|
1546
|
+
},
|
|
1547
|
+
"minutes": {
|
|
1548
|
+
"type": "number"
|
|
1549
|
+
},
|
|
1550
|
+
"seconds": {
|
|
1551
|
+
"type": "number"
|
|
1552
|
+
},
|
|
1553
|
+
"milliseconds": {
|
|
1554
|
+
"type": "number"
|
|
1555
|
+
}
|
|
1556
|
+
},
|
|
1557
|
+
"description": "Human friendly durations object."
|
|
1558
|
+
},
|
|
1559
|
+
{
|
|
1560
|
+
"type": "string"
|
|
1561
|
+
}
|
|
1562
|
+
],
|
|
1563
|
+
"description": "An optional default TTL (in milliseconds)."
|
|
1564
|
+
},
|
|
1565
|
+
"infinispan": {
|
|
1566
|
+
"type": "object",
|
|
1567
|
+
"properties": {
|
|
1568
|
+
"version": {
|
|
1569
|
+
"type": "string",
|
|
1570
|
+
"enum": [
|
|
1571
|
+
"2.9",
|
|
1572
|
+
"2.5",
|
|
1573
|
+
"2.2"
|
|
1574
|
+
],
|
|
1575
|
+
"description": "Version of client/server protocol.",
|
|
1576
|
+
"default": "'2.9' is the latest version."
|
|
1577
|
+
},
|
|
1578
|
+
"cacheName": {
|
|
1579
|
+
"type": "string",
|
|
1580
|
+
"description": "Infinispan Cache Name if not provided default is `cache` recommended to set this."
|
|
1581
|
+
},
|
|
1582
|
+
"maxRetries": {
|
|
1583
|
+
"type": "number",
|
|
1584
|
+
"description": "Optional number of retries for operation. Defaults to 3."
|
|
1585
|
+
},
|
|
1586
|
+
"topologyUpdates": {
|
|
1587
|
+
"type": "boolean",
|
|
1588
|
+
"description": "Optional flag to controls whether the client deals with topology updates or not.",
|
|
1589
|
+
"default": true
|
|
1590
|
+
},
|
|
1591
|
+
"mediaType": {
|
|
1592
|
+
"type": "string",
|
|
1593
|
+
"enum": [
|
|
1594
|
+
"text/plain",
|
|
1595
|
+
"application/json"
|
|
1596
|
+
],
|
|
1597
|
+
"description": "Media type of the cache contents.",
|
|
1598
|
+
"default": "text/plain"
|
|
1599
|
+
},
|
|
1600
|
+
"dataFormat": {
|
|
1601
|
+
"type": "object",
|
|
1602
|
+
"properties": {
|
|
1603
|
+
"keyType": {
|
|
1604
|
+
"type": "string",
|
|
1605
|
+
"enum": [
|
|
1606
|
+
"text/plain",
|
|
1607
|
+
"application/json"
|
|
1608
|
+
],
|
|
1609
|
+
"description": "Type of the key in the cache.",
|
|
1610
|
+
"default": "text/plain"
|
|
1611
|
+
},
|
|
1612
|
+
"valueType": {
|
|
1613
|
+
"type": "string",
|
|
1614
|
+
"enum": [
|
|
1615
|
+
"text/plain",
|
|
1616
|
+
"application/json"
|
|
1617
|
+
],
|
|
1618
|
+
"description": "Type of the value in the cache.",
|
|
1619
|
+
"default": "text/plain"
|
|
1620
|
+
}
|
|
1621
|
+
},
|
|
1622
|
+
"description": "Optional data format configuration. If not provided, defaults to text/plain for both key and value."
|
|
1623
|
+
},
|
|
1624
|
+
"servers": {
|
|
1625
|
+
"anyOf": [
|
|
1626
|
+
{
|
|
1627
|
+
"type": "array",
|
|
1628
|
+
"items": {
|
|
1629
|
+
"type": "object",
|
|
1630
|
+
"properties": {
|
|
1631
|
+
"host": {
|
|
1632
|
+
"type": "string",
|
|
1633
|
+
"description": "Infinispan server host."
|
|
1634
|
+
},
|
|
1635
|
+
"port": {
|
|
1636
|
+
"type": "number",
|
|
1637
|
+
"description": "Infinispan server port (Hot Rod protocol). Defaults to `11222`."
|
|
1638
|
+
}
|
|
1639
|
+
},
|
|
1640
|
+
"required": [
|
|
1641
|
+
"host"
|
|
1642
|
+
]
|
|
1643
|
+
}
|
|
1644
|
+
},
|
|
1645
|
+
{
|
|
1646
|
+
"type": "object",
|
|
1647
|
+
"properties": {
|
|
1648
|
+
"host": {
|
|
1649
|
+
"type": "string",
|
|
1650
|
+
"description": "Infinispan server host. Defaults to `127.0.0.1`."
|
|
1651
|
+
},
|
|
1652
|
+
"port": {
|
|
1653
|
+
"type": "number",
|
|
1654
|
+
"description": "Infinispan server port (Hot Rod protocol). Defaults to `11222`."
|
|
1655
|
+
}
|
|
1656
|
+
}
|
|
1657
|
+
}
|
|
1658
|
+
],
|
|
1659
|
+
"description": "Infinispan server host and port configuration. If this is an array, the client will connect to all servers in the list based on TOPOLOGY_AWARE routing. If this is a single object, it will be used as the default server."
|
|
1660
|
+
},
|
|
1661
|
+
"authentication": {
|
|
1662
|
+
"type": "object",
|
|
1663
|
+
"properties": {
|
|
1664
|
+
"enabled": {
|
|
1665
|
+
"type": "boolean",
|
|
1666
|
+
"description": "Enable authentication. Defaults to `false`."
|
|
1667
|
+
},
|
|
1668
|
+
"saslMechanism": {
|
|
1669
|
+
"type": "string",
|
|
1670
|
+
"description": "Select the SASL mechanism to use. Can be one of PLAIN, DIGEST-MD5, SCRAM-SHA-1, SCRAM-SHA-256, SCRAM-SHA-384, SCRAM-SHA-512, EXTERNAL, OAUTHBEARER"
|
|
1671
|
+
},
|
|
1672
|
+
"userName": {
|
|
1673
|
+
"type": "string",
|
|
1674
|
+
"description": "userName for authentication."
|
|
1675
|
+
},
|
|
1676
|
+
"password": {
|
|
1677
|
+
"type": "string",
|
|
1678
|
+
"description": "Password for authentication.",
|
|
1679
|
+
"visibility": "secret"
|
|
1680
|
+
},
|
|
1681
|
+
"token": {
|
|
1682
|
+
"type": "string",
|
|
1683
|
+
"description": "The OAuth token. Required by the OAUTHBEARER mechanism.",
|
|
1684
|
+
"visibility": "secret"
|
|
1685
|
+
},
|
|
1686
|
+
"authzid": {
|
|
1687
|
+
"type": "string",
|
|
1688
|
+
"description": "The SASL authorization ID."
|
|
1689
|
+
}
|
|
1690
|
+
}
|
|
1691
|
+
},
|
|
1692
|
+
"ssl": {
|
|
1693
|
+
"type": "object",
|
|
1694
|
+
"properties": {
|
|
1695
|
+
"enabled": {
|
|
1696
|
+
"type": "boolean",
|
|
1697
|
+
"description": "Enable ssl connection. Defaults to `false`.",
|
|
1698
|
+
"default": false
|
|
1699
|
+
},
|
|
1700
|
+
"secureProtocol": {
|
|
1701
|
+
"type": "string",
|
|
1702
|
+
"description": "Optional field with secure protocol in use.",
|
|
1703
|
+
"default": "TLSv1_2_method"
|
|
1704
|
+
},
|
|
1705
|
+
"trustCerts": {
|
|
1706
|
+
"type": "array",
|
|
1707
|
+
"items": {
|
|
1708
|
+
"type": "string"
|
|
1709
|
+
},
|
|
1710
|
+
"description": "Optional paths of trusted SSL certificates."
|
|
1711
|
+
},
|
|
1712
|
+
"clientAuth": {
|
|
1713
|
+
"type": "object",
|
|
1714
|
+
"properties": {
|
|
1715
|
+
"key": {
|
|
1716
|
+
"type": "string",
|
|
1717
|
+
"description": "Optional path to client authentication key"
|
|
1718
|
+
},
|
|
1719
|
+
"passphrase": {
|
|
1720
|
+
"type": "string",
|
|
1721
|
+
"description": "Optional password for client key"
|
|
1722
|
+
},
|
|
1723
|
+
"cert": {
|
|
1724
|
+
"type": "string",
|
|
1725
|
+
"description": "Optional client certificate"
|
|
1726
|
+
}
|
|
1727
|
+
}
|
|
1728
|
+
},
|
|
1729
|
+
"sniHostName": {
|
|
1730
|
+
"type": "string",
|
|
1731
|
+
"description": "Optional SNI host name."
|
|
1732
|
+
},
|
|
1733
|
+
"cryptoStore": {
|
|
1734
|
+
"type": "object",
|
|
1735
|
+
"properties": {
|
|
1736
|
+
"path": {
|
|
1737
|
+
"type": "string",
|
|
1738
|
+
"description": "Optional crypto store path."
|
|
1739
|
+
},
|
|
1740
|
+
"passphrase": {
|
|
1741
|
+
"type": "string",
|
|
1742
|
+
"description": "Optional password for crypto store."
|
|
1743
|
+
}
|
|
1744
|
+
},
|
|
1745
|
+
"description": "Optional crypto store configuration."
|
|
1746
|
+
}
|
|
1747
|
+
},
|
|
1748
|
+
"description": "TLS/SSL configuration."
|
|
1749
|
+
},
|
|
1750
|
+
"clusters": {
|
|
1751
|
+
"type": "array",
|
|
1752
|
+
"items": {
|
|
1753
|
+
"type": "object",
|
|
1754
|
+
"properties": {
|
|
1755
|
+
"name": {
|
|
1756
|
+
"type": "string",
|
|
1757
|
+
"description": "Optional Cluster name"
|
|
1758
|
+
},
|
|
1759
|
+
"servers": {
|
|
1760
|
+
"type": "array",
|
|
1761
|
+
"items": {
|
|
1762
|
+
"type": "object",
|
|
1763
|
+
"properties": {
|
|
1764
|
+
"host": {
|
|
1765
|
+
"type": "string",
|
|
1766
|
+
"description": "Infinispan cluster server host."
|
|
1767
|
+
},
|
|
1768
|
+
"port": {
|
|
1769
|
+
"type": "number",
|
|
1770
|
+
"description": "Infinispan server port (Hot Rod protocol). Defaults to `11222`."
|
|
1771
|
+
}
|
|
1772
|
+
},
|
|
1773
|
+
"required": [
|
|
1774
|
+
"host"
|
|
1775
|
+
]
|
|
1776
|
+
},
|
|
1777
|
+
"description": "Cluster servers details. Array.<ServerAddress>"
|
|
1778
|
+
}
|
|
1779
|
+
},
|
|
1780
|
+
"required": [
|
|
1781
|
+
"servers"
|
|
1782
|
+
]
|
|
1783
|
+
},
|
|
1784
|
+
"description": "Optional additional clusters for cross-site failovers. Array.<Cluster>"
|
|
1785
|
+
}
|
|
1786
|
+
},
|
|
1787
|
+
"description": "Configuration for the Infinispan cache store."
|
|
1788
|
+
}
|
|
1789
|
+
},
|
|
1790
|
+
"required": [
|
|
1791
|
+
"store"
|
|
1792
|
+
]
|
|
1793
|
+
}
|
|
1794
|
+
],
|
|
1795
|
+
"description": "Cache connection configuration, select cache type using the `store` field"
|
|
1796
|
+
},
|
|
1797
|
+
"cors": {
|
|
1798
|
+
"type": "object",
|
|
1799
|
+
"properties": {
|
|
1800
|
+
"origin": {
|
|
1801
|
+
"anyOf": [
|
|
1802
|
+
{
|
|
1803
|
+
"type": "string"
|
|
1804
|
+
},
|
|
1805
|
+
{
|
|
1806
|
+
"type": "array",
|
|
1807
|
+
"items": {
|
|
1808
|
+
"type": "string"
|
|
1809
|
+
}
|
|
1810
|
+
}
|
|
1811
|
+
]
|
|
1812
|
+
},
|
|
1813
|
+
"methods": {
|
|
1814
|
+
"anyOf": [
|
|
1815
|
+
{
|
|
1816
|
+
"type": "string"
|
|
1817
|
+
},
|
|
1818
|
+
{
|
|
1819
|
+
"type": "array",
|
|
1820
|
+
"items": {
|
|
1821
|
+
"type": "string"
|
|
1822
|
+
}
|
|
1823
|
+
}
|
|
1824
|
+
]
|
|
1825
|
+
},
|
|
1826
|
+
"allowedHeaders": {
|
|
1827
|
+
"anyOf": [
|
|
1828
|
+
{
|
|
1829
|
+
"type": "string"
|
|
1830
|
+
},
|
|
1831
|
+
{
|
|
1832
|
+
"type": "array",
|
|
1833
|
+
"items": {
|
|
1834
|
+
"type": "string"
|
|
1835
|
+
}
|
|
1836
|
+
}
|
|
1837
|
+
]
|
|
1838
|
+
},
|
|
1839
|
+
"exposedHeaders": {
|
|
1840
|
+
"anyOf": [
|
|
1841
|
+
{
|
|
1842
|
+
"type": "string"
|
|
1843
|
+
},
|
|
1844
|
+
{
|
|
1845
|
+
"type": "array",
|
|
1846
|
+
"items": {
|
|
1847
|
+
"type": "string"
|
|
1848
|
+
}
|
|
1849
|
+
}
|
|
1850
|
+
]
|
|
1851
|
+
},
|
|
1852
|
+
"credentials": {
|
|
1853
|
+
"type": "boolean"
|
|
1854
|
+
},
|
|
1855
|
+
"maxAge": {
|
|
1856
|
+
"type": "number"
|
|
1857
|
+
},
|
|
1858
|
+
"preflightContinue": {
|
|
1859
|
+
"type": "boolean"
|
|
1860
|
+
},
|
|
1861
|
+
"optionsSuccessStatus": {
|
|
1862
|
+
"type": "number"
|
|
1863
|
+
}
|
|
1864
|
+
}
|
|
1865
|
+
},
|
|
1866
|
+
"csp": {
|
|
1867
|
+
"type": "object",
|
|
1868
|
+
"additionalProperties": {
|
|
1869
|
+
"anyOf": [
|
|
1870
|
+
{
|
|
1871
|
+
"type": "array",
|
|
1872
|
+
"items": {
|
|
1873
|
+
"type": "string"
|
|
1874
|
+
}
|
|
1875
|
+
},
|
|
1876
|
+
{
|
|
1877
|
+
"type": "boolean",
|
|
1878
|
+
"const": false
|
|
1879
|
+
}
|
|
1880
|
+
]
|
|
1881
|
+
},
|
|
1882
|
+
"description": "Content Security Policy options.\n\nThe keys are the plain policy ID, e.g. \"upgrade-insecure-requests\". The values are on the format that the helmet library expects them, as an array of strings. There is also the special value false, which means to remove the default value that Backstage puts in place for that policy."
|
|
1883
|
+
},
|
|
1884
|
+
"referrer": {
|
|
1885
|
+
"type": "object",
|
|
1886
|
+
"properties": {
|
|
1887
|
+
"policy": {
|
|
1888
|
+
"type": "array",
|
|
1889
|
+
"items": {
|
|
1890
|
+
"type": "string"
|
|
1891
|
+
}
|
|
1892
|
+
}
|
|
1893
|
+
},
|
|
1894
|
+
"required": [
|
|
1895
|
+
"policy"
|
|
1896
|
+
],
|
|
1897
|
+
"description": "Referrer Policy options"
|
|
1898
|
+
},
|
|
1899
|
+
"health": {
|
|
1900
|
+
"type": "object",
|
|
1901
|
+
"properties": {
|
|
1902
|
+
"headers": {
|
|
1903
|
+
"type": "object",
|
|
1904
|
+
"additionalProperties": {
|
|
1905
|
+
"type": "string"
|
|
1906
|
+
},
|
|
1907
|
+
"description": "Additional headers to always include in the health check response.\n\nIt can be a good idea to set a header that uniquely identifies your service in a multi-service environment. This ensures that the health check that is configured for your service is actually hitting your service and not another.\n\nFor example, if using Envoy you can use the `service_name_matcher` configuration and set the `x-envoy-upstream-healthchecked-cluster` header to a matching value."
|
|
1908
|
+
}
|
|
1909
|
+
},
|
|
1910
|
+
"description": "Options for the health check service and endpoint."
|
|
1911
|
+
},
|
|
1912
|
+
"metrics": {
|
|
1913
|
+
"type": "object",
|
|
1914
|
+
"properties": {
|
|
1915
|
+
"plugin": {
|
|
1916
|
+
"type": "object",
|
|
1917
|
+
"additionalProperties": {
|
|
1918
|
+
"type": "object",
|
|
1919
|
+
"properties": {
|
|
1920
|
+
"meter": {
|
|
1921
|
+
"type": "object",
|
|
1922
|
+
"properties": {
|
|
1923
|
+
"name": {
|
|
1924
|
+
"type": "string",
|
|
1925
|
+
"description": "Custom meter name. If not set, defaults to backstage-plugin-{pluginId}."
|
|
1926
|
+
},
|
|
1927
|
+
"version": {
|
|
1928
|
+
"type": "string",
|
|
1929
|
+
"description": "Version for the meter."
|
|
1930
|
+
},
|
|
1931
|
+
"schemaUrl": {
|
|
1932
|
+
"type": "string",
|
|
1933
|
+
"description": "Schema URL for the meter."
|
|
1934
|
+
}
|
|
1935
|
+
},
|
|
1936
|
+
"description": "Meter configuration for this plugin."
|
|
1937
|
+
}
|
|
1938
|
+
}
|
|
1939
|
+
},
|
|
1940
|
+
"description": "Plugin-specific metrics configuration. Each plugin can override meter metadata."
|
|
1941
|
+
}
|
|
1942
|
+
},
|
|
1943
|
+
"description": "Options for the metrics service."
|
|
1944
|
+
},
|
|
1945
|
+
"tracing": {
|
|
1946
|
+
"type": "object",
|
|
1947
|
+
"properties": {
|
|
1948
|
+
"capture": {
|
|
1949
|
+
"type": "object",
|
|
1950
|
+
"properties": {
|
|
1951
|
+
"endUser": {
|
|
1952
|
+
"type": "boolean",
|
|
1953
|
+
"description": "When true, backend plugins emitting trace spans for authenticated requests SHOULD include the authenticated principal's identity as `enduser.id` (the user entity ref for a user principal, or the service subject for a service principal). Defaults to false."
|
|
1954
|
+
}
|
|
1955
|
+
},
|
|
1956
|
+
"description": "Opt-in capture of attributes that may identify users or contain sensitive data on backend trace spans."
|
|
1957
|
+
},
|
|
1958
|
+
"plugin": {
|
|
1959
|
+
"type": "object",
|
|
1960
|
+
"additionalProperties": {
|
|
1961
|
+
"type": "object",
|
|
1962
|
+
"properties": {
|
|
1963
|
+
"tracer": {
|
|
1964
|
+
"type": "object",
|
|
1965
|
+
"properties": {
|
|
1966
|
+
"name": {
|
|
1967
|
+
"type": "string",
|
|
1968
|
+
"description": "Custom tracer name. If not set, defaults to backstage-plugin-{pluginId}."
|
|
1969
|
+
},
|
|
1970
|
+
"version": {
|
|
1971
|
+
"type": "string",
|
|
1972
|
+
"description": "Version for the tracer."
|
|
1973
|
+
},
|
|
1974
|
+
"schemaUrl": {
|
|
1975
|
+
"type": "string",
|
|
1976
|
+
"description": "Schema URL for the tracer."
|
|
1977
|
+
}
|
|
1978
|
+
},
|
|
1979
|
+
"description": "Tracer configuration for this plugin."
|
|
1980
|
+
}
|
|
1981
|
+
}
|
|
1982
|
+
},
|
|
1983
|
+
"description": "Plugin-specific tracing configuration. Each plugin can override tracer instrumentation scope metadata."
|
|
1984
|
+
}
|
|
1985
|
+
},
|
|
1986
|
+
"description": "Tracing-related backend configuration. Honored by Backstage backend plugins that emit OpenTelemetry trace spans."
|
|
1987
|
+
},
|
|
1988
|
+
"logger": {
|
|
1989
|
+
"type": "object",
|
|
1990
|
+
"properties": {
|
|
1991
|
+
"level": {
|
|
1992
|
+
"type": "string",
|
|
1993
|
+
"enum": [
|
|
1994
|
+
"debug",
|
|
1995
|
+
"info",
|
|
1996
|
+
"warn",
|
|
1997
|
+
"error"
|
|
1998
|
+
],
|
|
1999
|
+
"description": "Configures the global log level for messages.\n\nThis can also be configured using the LOG_LEVEL environment variable, which takes precedence over this configuration.\n\nDefaults to 'info'."
|
|
2000
|
+
},
|
|
2001
|
+
"meta": {
|
|
2002
|
+
"type": "object",
|
|
2003
|
+
"additionalProperties": {
|
|
2004
|
+
"anyOf": [
|
|
2005
|
+
{
|
|
2006
|
+
"$ref": "#/definitions/f4e67549de38e3bbfa5433d80b572a4382883324a245c27305294490129bca53-alias--747-883--0-11512049365262"
|
|
2007
|
+
},
|
|
2008
|
+
{
|
|
2009
|
+
"type": "object",
|
|
2010
|
+
"properties": {
|
|
2011
|
+
"length": {
|
|
2012
|
+
"type": "number"
|
|
2013
|
+
}
|
|
2014
|
+
},
|
|
2015
|
+
"required": [
|
|
2016
|
+
"length"
|
|
2017
|
+
],
|
|
2018
|
+
"description": "A type representing all allowed JSON array values."
|
|
2019
|
+
},
|
|
2020
|
+
{
|
|
2021
|
+
"type": [
|
|
2022
|
+
"number",
|
|
2023
|
+
"string",
|
|
2024
|
+
"boolean",
|
|
2025
|
+
"null"
|
|
2026
|
+
],
|
|
2027
|
+
"description": "A type representing all allowed JSON primitive values."
|
|
2028
|
+
}
|
|
2029
|
+
],
|
|
2030
|
+
"description": "A type representing all allowed JSON values."
|
|
2031
|
+
},
|
|
2032
|
+
"description": "Additional metadata to include with every log entry."
|
|
2033
|
+
},
|
|
2034
|
+
"overrides": {
|
|
2035
|
+
"type": "array",
|
|
2036
|
+
"items": {
|
|
2037
|
+
"type": "object",
|
|
2038
|
+
"properties": {
|
|
2039
|
+
"matchers": {
|
|
2040
|
+
"type": "object",
|
|
2041
|
+
"additionalProperties": {
|
|
2042
|
+
"anyOf": [
|
|
2043
|
+
{
|
|
2044
|
+
"$ref": "#/definitions/f4e67549de38e3bbfa5433d80b572a4382883324a245c27305294490129bca53-alias--747-883--0-11512049365262"
|
|
2045
|
+
},
|
|
2046
|
+
{
|
|
2047
|
+
"type": "object",
|
|
2048
|
+
"properties": {
|
|
2049
|
+
"length": {
|
|
2050
|
+
"type": "number"
|
|
2051
|
+
}
|
|
2052
|
+
},
|
|
2053
|
+
"required": [
|
|
2054
|
+
"length"
|
|
2055
|
+
],
|
|
2056
|
+
"description": "A type representing all allowed JSON array values."
|
|
2057
|
+
},
|
|
2058
|
+
{
|
|
2059
|
+
"type": [
|
|
2060
|
+
"number",
|
|
2061
|
+
"string",
|
|
2062
|
+
"boolean",
|
|
2063
|
+
"null"
|
|
2064
|
+
],
|
|
2065
|
+
"description": "A type representing all allowed JSON primitive values."
|
|
2066
|
+
}
|
|
2067
|
+
],
|
|
2068
|
+
"description": "A type representing all allowed JSON values."
|
|
2069
|
+
},
|
|
2070
|
+
"description": "Conditions that must be met to override the log level.\n\nA matcher can be:\n\n- A string (exact match or regex pattern delimited by slashes, e.g. `/pattern/`)\n- A non-string value (compared by strict equality)\n- An array of matchers (returns true if any matcher matches)"
|
|
2071
|
+
},
|
|
2072
|
+
"level": {
|
|
2073
|
+
"type": "string",
|
|
2074
|
+
"enum": [
|
|
2075
|
+
"debug",
|
|
2076
|
+
"info",
|
|
2077
|
+
"warn",
|
|
2078
|
+
"error"
|
|
2079
|
+
],
|
|
2080
|
+
"description": "Log level to use for matched entries."
|
|
2081
|
+
}
|
|
2082
|
+
},
|
|
2083
|
+
"required": [
|
|
2084
|
+
"matchers",
|
|
2085
|
+
"level"
|
|
2086
|
+
]
|
|
2087
|
+
},
|
|
2088
|
+
"description": "List of logger overrides.\n\nCan be used to configure a different level for logs matching certain criterias. For example, it can be used to ignore 'info' logs of given plugins."
|
|
2089
|
+
}
|
|
2090
|
+
},
|
|
2091
|
+
"description": "Options to configure the default RootLoggerService."
|
|
2092
|
+
},
|
|
2093
|
+
"rateLimit": {
|
|
2094
|
+
"anyOf": [
|
|
2095
|
+
{
|
|
2096
|
+
"type": "boolean",
|
|
2097
|
+
"const": true
|
|
2098
|
+
},
|
|
2099
|
+
{
|
|
2100
|
+
"type": "object",
|
|
2101
|
+
"properties": {
|
|
2102
|
+
"store": {
|
|
2103
|
+
"anyOf": [
|
|
2104
|
+
{
|
|
2105
|
+
"type": "object",
|
|
2106
|
+
"properties": {
|
|
2107
|
+
"type": {
|
|
2108
|
+
"type": "string",
|
|
2109
|
+
"const": "redis"
|
|
2110
|
+
},
|
|
2111
|
+
"connection": {
|
|
2112
|
+
"type": "string"
|
|
2113
|
+
}
|
|
2114
|
+
},
|
|
2115
|
+
"required": [
|
|
2116
|
+
"type",
|
|
2117
|
+
"connection"
|
|
2118
|
+
]
|
|
2119
|
+
},
|
|
2120
|
+
{
|
|
2121
|
+
"type": "object",
|
|
2122
|
+
"properties": {
|
|
2123
|
+
"type": {
|
|
2124
|
+
"type": "string",
|
|
2125
|
+
"const": "memory"
|
|
2126
|
+
}
|
|
2127
|
+
},
|
|
2128
|
+
"required": [
|
|
2129
|
+
"type"
|
|
2130
|
+
]
|
|
2131
|
+
}
|
|
2132
|
+
]
|
|
2133
|
+
},
|
|
2134
|
+
"global": {
|
|
2135
|
+
"type": "boolean",
|
|
2136
|
+
"description": "Enable/disable global rate limiting. If this is disabled, plugin specific rate limiting must be used."
|
|
2137
|
+
},
|
|
2138
|
+
"window": {
|
|
2139
|
+
"anyOf": [
|
|
2140
|
+
{
|
|
2141
|
+
"type": "string"
|
|
2142
|
+
},
|
|
2143
|
+
{
|
|
2144
|
+
"type": "object",
|
|
2145
|
+
"properties": {
|
|
2146
|
+
"years": {
|
|
2147
|
+
"type": "number"
|
|
2148
|
+
},
|
|
2149
|
+
"months": {
|
|
2150
|
+
"type": "number"
|
|
2151
|
+
},
|
|
2152
|
+
"weeks": {
|
|
2153
|
+
"type": "number"
|
|
2154
|
+
},
|
|
2155
|
+
"days": {
|
|
2156
|
+
"type": "number"
|
|
2157
|
+
},
|
|
2158
|
+
"hours": {
|
|
2159
|
+
"type": "number"
|
|
2160
|
+
},
|
|
2161
|
+
"minutes": {
|
|
2162
|
+
"type": "number"
|
|
2163
|
+
},
|
|
2164
|
+
"seconds": {
|
|
2165
|
+
"type": "number"
|
|
2166
|
+
},
|
|
2167
|
+
"milliseconds": {
|
|
2168
|
+
"type": "number"
|
|
2169
|
+
}
|
|
2170
|
+
},
|
|
2171
|
+
"description": "Human friendly durations object."
|
|
2172
|
+
}
|
|
2173
|
+
],
|
|
2174
|
+
"description": "Time frame in milliseconds or as human duration for which requests are checked/remembered. Defaults to one minute."
|
|
2175
|
+
},
|
|
2176
|
+
"incomingRequestLimit": {
|
|
2177
|
+
"type": "number",
|
|
2178
|
+
"description": "The maximum number of connections to allow during the `window` before rate limiting the client. Defaults to 5."
|
|
2179
|
+
},
|
|
2180
|
+
"passOnStoreError": {
|
|
2181
|
+
"type": "boolean",
|
|
2182
|
+
"description": "Whether to pass requests in case of store failure. Defaults to false."
|
|
2183
|
+
},
|
|
2184
|
+
"ipAllowList": {
|
|
2185
|
+
"type": "array",
|
|
2186
|
+
"items": {
|
|
2187
|
+
"type": "string"
|
|
2188
|
+
},
|
|
2189
|
+
"description": "List of allowed IP addresses that are not rate limited. Defaults to [127.0.0.1, 0:0:0:0:0:0:0:1, ::1]."
|
|
2190
|
+
},
|
|
2191
|
+
"skipSuccessfulRequests": {
|
|
2192
|
+
"type": "boolean",
|
|
2193
|
+
"description": "Skip rate limiting for requests that have been successful. Defaults to false."
|
|
2194
|
+
},
|
|
2195
|
+
"skipFailedRequests": {
|
|
2196
|
+
"type": "boolean",
|
|
2197
|
+
"description": "Skip rate limiting for requests that have failed. Defaults to false."
|
|
2198
|
+
},
|
|
2199
|
+
"plugin": {
|
|
2200
|
+
"type": "object",
|
|
2201
|
+
"additionalProperties": {
|
|
2202
|
+
"type": "object",
|
|
2203
|
+
"properties": {
|
|
2204
|
+
"window": {
|
|
2205
|
+
"anyOf": [
|
|
2206
|
+
{
|
|
2207
|
+
"type": "string"
|
|
2208
|
+
},
|
|
2209
|
+
{
|
|
2210
|
+
"type": "object",
|
|
2211
|
+
"properties": {
|
|
2212
|
+
"years": {
|
|
2213
|
+
"type": "number"
|
|
2214
|
+
},
|
|
2215
|
+
"months": {
|
|
2216
|
+
"type": "number"
|
|
2217
|
+
},
|
|
2218
|
+
"weeks": {
|
|
2219
|
+
"type": "number"
|
|
2220
|
+
},
|
|
2221
|
+
"days": {
|
|
2222
|
+
"type": "number"
|
|
2223
|
+
},
|
|
2224
|
+
"hours": {
|
|
2225
|
+
"type": "number"
|
|
2226
|
+
},
|
|
2227
|
+
"minutes": {
|
|
2228
|
+
"type": "number"
|
|
2229
|
+
},
|
|
2230
|
+
"seconds": {
|
|
2231
|
+
"type": "number"
|
|
2232
|
+
},
|
|
2233
|
+
"milliseconds": {
|
|
2234
|
+
"type": "number"
|
|
2235
|
+
}
|
|
2236
|
+
},
|
|
2237
|
+
"description": "Human friendly durations object."
|
|
2238
|
+
}
|
|
2239
|
+
],
|
|
2240
|
+
"description": "Time frame in milliseconds or as human duration for which requests are checked/remembered. Defaults to one minute."
|
|
2241
|
+
},
|
|
2242
|
+
"incomingRequestLimit": {
|
|
2243
|
+
"type": "number",
|
|
2244
|
+
"description": "The maximum number of connections to allow during the `window` before rate limiting the client. Defaults to 5."
|
|
2245
|
+
},
|
|
2246
|
+
"passOnStoreError": {
|
|
2247
|
+
"type": "boolean",
|
|
2248
|
+
"description": "Whether to pass requests in case of store failure. Defaults to false."
|
|
2249
|
+
},
|
|
2250
|
+
"ipAllowList": {
|
|
2251
|
+
"type": "array",
|
|
2252
|
+
"items": {
|
|
2253
|
+
"type": "string"
|
|
2254
|
+
},
|
|
2255
|
+
"description": "List of allowed IP addresses that are not rate limited. Defaults to [127.0.0.1, 0:0:0:0:0:0:0:1, ::1]."
|
|
2256
|
+
},
|
|
2257
|
+
"skipSuccessfulRequests": {
|
|
2258
|
+
"type": "boolean",
|
|
2259
|
+
"description": "Skip rate limiting for requests that have been successful. Defaults to false."
|
|
2260
|
+
},
|
|
2261
|
+
"skipFailedRequests": {
|
|
2262
|
+
"type": "boolean",
|
|
2263
|
+
"description": "Skip rate limiting for requests that have failed. Defaults to false."
|
|
2264
|
+
}
|
|
2265
|
+
}
|
|
2266
|
+
},
|
|
2267
|
+
"description": "Plugin specific rate limiting configuration"
|
|
2268
|
+
}
|
|
2269
|
+
}
|
|
2270
|
+
}
|
|
2271
|
+
],
|
|
2272
|
+
"description": "Rate limiting options. Defining this as `true` will enable rate limiting with default values."
|
|
2273
|
+
},
|
|
2274
|
+
"reading": {
|
|
2275
|
+
"type": "object",
|
|
2276
|
+
"properties": {
|
|
2277
|
+
"allow": {
|
|
2278
|
+
"type": "array",
|
|
2279
|
+
"items": {
|
|
2280
|
+
"type": "object",
|
|
2281
|
+
"properties": {
|
|
2282
|
+
"host": {
|
|
2283
|
+
"type": "string",
|
|
2284
|
+
"description": "A host to allow outgoing requests to, being either a full host or a subdomain wildcard pattern with a leading `*`. For example `example.com` and `*.example.com` are valid values, `prod.*.example.com` is not. The host may also contain a port, for example `example.com:8080`."
|
|
2285
|
+
},
|
|
2286
|
+
"paths": {
|
|
2287
|
+
"type": "array",
|
|
2288
|
+
"items": {
|
|
2289
|
+
"type": "string"
|
|
2290
|
+
},
|
|
2291
|
+
"description": "An optional list of paths. In case they are present only targets matching any of them will are allowed. You can use trailing slashes to make sure only subdirectories are allowed, for example `/mydir/` will allow targets with paths like `/mydir/a` but will block paths like `/mydir2`."
|
|
2292
|
+
}
|
|
2293
|
+
},
|
|
2294
|
+
"required": [
|
|
2295
|
+
"host"
|
|
2296
|
+
]
|
|
2297
|
+
},
|
|
2298
|
+
"description": "A list of targets to allow outgoing requests to. Users will be able to make requests on behalf of the backend to the targets that are allowed by this list."
|
|
2299
|
+
}
|
|
2300
|
+
},
|
|
2301
|
+
"description": "Configuration related to URL reading, used for example for reading catalog info files, scaffolder templates, and techdocs content."
|
|
2302
|
+
}
|
|
2303
|
+
},
|
|
2304
|
+
"required": [
|
|
2305
|
+
"baseUrl",
|
|
2306
|
+
"database"
|
|
2307
|
+
]
|
|
2308
|
+
},
|
|
2309
|
+
"discovery": {
|
|
2310
|
+
"type": "object",
|
|
2311
|
+
"properties": {
|
|
2312
|
+
"endpoints": {
|
|
2313
|
+
"type": "array",
|
|
2314
|
+
"items": {
|
|
2315
|
+
"type": "object",
|
|
2316
|
+
"properties": {
|
|
2317
|
+
"target": {
|
|
2318
|
+
"anyOf": [
|
|
2319
|
+
{
|
|
2320
|
+
"type": "string"
|
|
2321
|
+
},
|
|
2322
|
+
{
|
|
2323
|
+
"type": "object",
|
|
2324
|
+
"properties": {
|
|
2325
|
+
"internal": {
|
|
2326
|
+
"type": "string"
|
|
2327
|
+
},
|
|
2328
|
+
"external": {
|
|
2329
|
+
"type": "string"
|
|
2330
|
+
}
|
|
2331
|
+
}
|
|
2332
|
+
}
|
|
2333
|
+
],
|
|
2334
|
+
"description": "The target base URL to use for the given set of plugins. Note that this needs to be a full URL including the protocol and path parts that fully address the root of a plugin's API endpoints."
|
|
2335
|
+
},
|
|
2336
|
+
"plugins": {
|
|
2337
|
+
"type": "array",
|
|
2338
|
+
"items": {
|
|
2339
|
+
"type": "string"
|
|
2340
|
+
},
|
|
2341
|
+
"description": "Array of plugins which use that target base URL.\n\nThe special value `*` can be used to match all plugins."
|
|
2342
|
+
}
|
|
2343
|
+
},
|
|
2344
|
+
"required": [
|
|
2345
|
+
"target",
|
|
2346
|
+
"plugins"
|
|
2347
|
+
]
|
|
2348
|
+
},
|
|
2349
|
+
"description": "A list of target base URLs and their associated plugins."
|
|
2350
|
+
}
|
|
2351
|
+
},
|
|
2352
|
+
"required": [
|
|
2353
|
+
"endpoints"
|
|
2354
|
+
],
|
|
2355
|
+
"description": "Options used by the default discovery service."
|
|
2356
|
+
}
|
|
2357
|
+
},
|
|
2358
|
+
"required": [
|
|
2359
|
+
"app"
|
|
2360
|
+
],
|
|
2361
|
+
"definitions": {
|
|
2362
|
+
"f4e67549de38e3bbfa5433d80b572a4382883324a245c27305294490129bca53-alias--747-883--0-11512049365262": {
|
|
2363
|
+
"type": "object",
|
|
2364
|
+
"additionalProperties": {
|
|
2365
|
+
"anyOf": [
|
|
2366
|
+
{
|
|
2367
|
+
"$ref": "#/definitions/f4e67549de38e3bbfa5433d80b572a4382883324a245c27305294490129bca53-alias--747-883--0-11512049365262"
|
|
2368
|
+
},
|
|
2369
|
+
{
|
|
2370
|
+
"type": "object",
|
|
2371
|
+
"properties": {
|
|
2372
|
+
"length": {
|
|
2373
|
+
"type": "number"
|
|
2374
|
+
}
|
|
2375
|
+
},
|
|
2376
|
+
"required": [
|
|
2377
|
+
"length"
|
|
2378
|
+
],
|
|
2379
|
+
"description": "A type representing all allowed JSON array values."
|
|
2380
|
+
},
|
|
2381
|
+
{
|
|
2382
|
+
"type": [
|
|
2383
|
+
"number",
|
|
2384
|
+
"string",
|
|
2385
|
+
"boolean",
|
|
2386
|
+
"null"
|
|
2387
|
+
],
|
|
2388
|
+
"description": "A type representing all allowed JSON primitive values."
|
|
2389
|
+
}
|
|
2390
|
+
],
|
|
2391
|
+
"description": "A type representing all allowed JSON values."
|
|
2392
|
+
},
|
|
2393
|
+
"description": "A type representing all allowed JSON object values."
|
|
2394
|
+
}
|
|
2395
|
+
}
|
|
2396
|
+
}
|