@faable/deploy-sdk 2.12.0 → 2.13.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/spec/openapi.json CHANGED
@@ -146,24 +146,6 @@
146
146
  },
147
147
  "additionalProperties": false
148
148
  },
149
- "ProjectModerationResult": {
150
- "type": "object",
151
- "required": [
152
- "count",
153
- "app_ids"
154
- ],
155
- "properties": {
156
- "count": {
157
- "type": "integer"
158
- },
159
- "app_ids": {
160
- "type": "array",
161
- "items": {
162
- "type": "string"
163
- }
164
- }
165
- }
166
- },
167
149
  "Project": {
168
150
  "type": "object",
169
151
  "required": [
@@ -537,6 +519,56 @@
537
519
  }
538
520
  ],
539
521
  "description": "Runtime resource-pressure flag (admin/owner-facing upgrade prompt)"
522
+ },
523
+ "runtime_health": {
524
+ "anyOf": [
525
+ {
526
+ "type": "object",
527
+ "required": [
528
+ "state",
529
+ "deployment",
530
+ "at"
531
+ ],
532
+ "properties": {
533
+ "state": {
534
+ "type": "string",
535
+ "description": "The container keeps exiting and being restarted (CrashLoopBackOff)",
536
+ "enum": [
537
+ "crash_loop"
538
+ ]
539
+ },
540
+ "deployment": {
541
+ "type": "string",
542
+ "description": "Deployment whose pod is crash-looping"
543
+ },
544
+ "at": {
545
+ "type": "string",
546
+ "description": "ISO time the crash loop was last observed"
547
+ },
548
+ "container": {
549
+ "type": "string",
550
+ "description": "Container that is crash-looping"
551
+ },
552
+ "restarts": {
553
+ "type": "integer",
554
+ "description": "Restart count when observed"
555
+ },
556
+ "exit_code": {
557
+ "type": "integer",
558
+ "description": "Last exit code, when reported"
559
+ },
560
+ "reason": {
561
+ "type": "string",
562
+ "description": "K8s waiting/terminated reason"
563
+ }
564
+ },
565
+ "description": "Runtime crash loop observed on the live version"
566
+ },
567
+ {
568
+ "type": "null"
569
+ }
570
+ ],
571
+ "description": "Runtime health flag for the promoted deployment (owner-facing outage signal)"
540
572
  }
541
573
  }
542
574
  },
@@ -630,7 +662,18 @@
630
662
  "description": "Reason the app was administratively disabled. Null when the app is active."
631
663
  },
632
664
  "runtime": {
633
- "$ref": "#/components/schemas/AppRuntime"
665
+ "anyOf": [
666
+ {
667
+ "enum": [
668
+ "node",
669
+ "php",
670
+ "python"
671
+ ]
672
+ },
673
+ {
674
+ "type": "null"
675
+ }
676
+ ]
634
677
  },
635
678
  "runtime_strategy": {
636
679
  "anyOf": [
@@ -1091,6 +1134,36 @@
1091
1134
  }
1092
1135
  }
1093
1136
  },
1137
+ "RepoDirectories": {
1138
+ "type": "object",
1139
+ "required": [
1140
+ "directories",
1141
+ "truncated"
1142
+ ],
1143
+ "properties": {
1144
+ "directories": {
1145
+ "type": "array",
1146
+ "items": {
1147
+ "type": "object",
1148
+ "required": [
1149
+ "path",
1150
+ "buildable"
1151
+ ],
1152
+ "properties": {
1153
+ "path": {
1154
+ "type": "string"
1155
+ },
1156
+ "buildable": {
1157
+ "type": "boolean"
1158
+ }
1159
+ }
1160
+ }
1161
+ },
1162
+ "truncated": {
1163
+ "type": "boolean"
1164
+ }
1165
+ }
1166
+ },
1094
1167
  "DeployNowResult": {
1095
1168
  "type": "object",
1096
1169
  "required": [
@@ -1113,6 +1186,79 @@
1113
1186
  }
1114
1187
  }
1115
1188
  },
1189
+ "AppWafView": {
1190
+ "type": "object",
1191
+ "required": [
1192
+ "enabled",
1193
+ "platform_profiles",
1194
+ "rules"
1195
+ ],
1196
+ "properties": {
1197
+ "enabled": {
1198
+ "type": "boolean"
1199
+ },
1200
+ "platform_profiles": {
1201
+ "type": "array",
1202
+ "items": {
1203
+ "type": "object",
1204
+ "required": [
1205
+ "name",
1206
+ "action",
1207
+ "rule_count"
1208
+ ],
1209
+ "properties": {
1210
+ "name": {
1211
+ "type": "string"
1212
+ },
1213
+ "action": {
1214
+ "type": "string"
1215
+ },
1216
+ "rule_count": {
1217
+ "type": "integer"
1218
+ },
1219
+ "rules": {
1220
+ "type": "array",
1221
+ "items": {
1222
+ "type": "object",
1223
+ "required": [
1224
+ "pattern"
1225
+ ],
1226
+ "properties": {
1227
+ "pattern": {
1228
+ "type": "string"
1229
+ },
1230
+ "description": {
1231
+ "type": "string"
1232
+ }
1233
+ }
1234
+ }
1235
+ }
1236
+ }
1237
+ }
1238
+ },
1239
+ "rules": {
1240
+ "type": "array",
1241
+ "items": {
1242
+ "type": "object",
1243
+ "required": [
1244
+ "pattern",
1245
+ "action"
1246
+ ],
1247
+ "properties": {
1248
+ "pattern": {
1249
+ "type": "string"
1250
+ },
1251
+ "action": {
1252
+ "type": "string"
1253
+ },
1254
+ "description": {
1255
+ "type": "string"
1256
+ }
1257
+ }
1258
+ }
1259
+ }
1260
+ }
1261
+ },
1116
1262
  "DeploymentStatus": {
1117
1263
  "type": "object",
1118
1264
  "required": [
@@ -1171,7 +1317,15 @@
1171
1317
  },
1172
1318
  "runtime_image": {
1173
1319
  "type": "string",
1174
- "description": "Digest-pinned runtime image stamped at first materialization (artifact deploys)"
1320
+ "description": "Runtime image (immutable version tag) this artifact deployment runs"
1321
+ },
1322
+ "fetcher_image": {
1323
+ "type": "string",
1324
+ "description": "Fetcher image (immutable version tag) of the artifact-prepare initContainer"
1325
+ },
1326
+ "builder_image": {
1327
+ "type": "string",
1328
+ "description": "Builder image (immutable version tag) that built this deployment"
1175
1329
  }
1176
1330
  },
1177
1331
  "additionalProperties": false
@@ -1403,6 +1557,13 @@
1403
1557
  "type": "string",
1404
1558
  "format": "date-time"
1405
1559
  },
1560
+ "build_started_at": {
1561
+ "type": "string",
1562
+ "format": "date-time"
1563
+ },
1564
+ "build_ms": {
1565
+ "type": "integer"
1566
+ },
1406
1567
  "redeploy_of": {
1407
1568
  "type": "string"
1408
1569
  },
@@ -1881,6 +2042,12 @@
1881
2042
  "deny"
1882
2043
  ]
1883
2044
  },
2045
+ {
2046
+ "type": "string",
2047
+ "enum": [
2048
+ "sink"
2049
+ ]
2050
+ },
1884
2051
  {
1885
2052
  "type": "string",
1886
2053
  "enum": [
@@ -1939,6 +2106,38 @@
1939
2106
  }
1940
2107
  ]
1941
2108
  },
2109
+ "except": {
2110
+ "type": "array",
2111
+ "items": {
2112
+ "anyOf": [
2113
+ {
2114
+ "type": "string",
2115
+ "enum": [
2116
+ "all"
2117
+ ]
2118
+ },
2119
+ {
2120
+ "type": "string",
2121
+ "enum": [
2122
+ "node"
2123
+ ]
2124
+ },
2125
+ {
2126
+ "type": "string",
2127
+ "enum": [
2128
+ "php"
2129
+ ]
2130
+ },
2131
+ {
2132
+ "type": "string",
2133
+ "enum": [
2134
+ "manual"
2135
+ ]
2136
+ }
2137
+ ]
2138
+ },
2139
+ "description": "Runtimes excluded from `apply` (e.g. [\"php\"])"
2140
+ },
1942
2141
  "rules": {
1943
2142
  "type": "array",
1944
2143
  "items": {
@@ -2127,6 +2326,12 @@
2127
2326
  "deny"
2128
2327
  ]
2129
2328
  },
2329
+ {
2330
+ "type": "string",
2331
+ "enum": [
2332
+ "sink"
2333
+ ]
2334
+ },
2130
2335
  {
2131
2336
  "type": "string",
2132
2337
  "enum": [
@@ -2232,6 +2437,12 @@
2232
2437
  "deny"
2233
2438
  ]
2234
2439
  },
2440
+ {
2441
+ "type": "string",
2442
+ "enum": [
2443
+ "sink"
2444
+ ]
2445
+ },
2235
2446
  {
2236
2447
  "type": "string",
2237
2448
  "enum": [
@@ -3115,70 +3326,160 @@
3115
3326
  }
3116
3327
  }
3117
3328
  },
3118
- "AppChecknameResponse": {
3329
+ "PlatformImage": {
3119
3330
  "type": "object",
3120
3331
  "required": [
3121
- "name",
3122
- "slug",
3123
- "availiable"
3332
+ "id",
3333
+ "team",
3334
+ "kind",
3335
+ "key",
3336
+ "repository",
3337
+ "current",
3338
+ "min_version",
3339
+ "auto_promote",
3340
+ "versions",
3341
+ "metadata",
3342
+ "createdAt"
3124
3343
  ],
3125
3344
  "properties": {
3126
- "name": {
3127
- "type": "string"
3345
+ "id": {
3346
+ "type": "string",
3347
+ "description": "PlatformImage ID"
3128
3348
  },
3129
- "slug": {
3349
+ "team": {
3130
3350
  "type": "string"
3131
3351
  },
3132
- "url": {
3133
- "type": "string"
3352
+ "kind": {
3353
+ "anyOf": [
3354
+ {
3355
+ "type": "string",
3356
+ "enum": [
3357
+ "runtime"
3358
+ ]
3359
+ },
3360
+ {
3361
+ "type": "string",
3362
+ "enum": [
3363
+ "builder"
3364
+ ]
3365
+ },
3366
+ {
3367
+ "type": "string",
3368
+ "enum": [
3369
+ "fetcher"
3370
+ ]
3371
+ },
3372
+ {
3373
+ "type": "string",
3374
+ "enum": [
3375
+ "buildkit"
3376
+ ]
3377
+ }
3378
+ ]
3134
3379
  },
3135
- "availiable": {
3136
- "type": "boolean",
3137
- "description": "check if slug is availiable"
3380
+ "key": {
3381
+ "type": "string",
3382
+ "description": "Canonical key: node:22, python:3.11, static, fetcher, buildkit"
3138
3383
  },
3139
- "error": {
3140
- "type": "string"
3141
- }
3142
- }
3143
- },
3144
- "EventAppStatus": {
3145
- "type": "object",
3146
- "required": [
3147
- "type",
3148
- "produced_at",
3149
- "payload"
3150
- ],
3151
- "properties": {
3152
- "type": {
3384
+ "repository": {
3153
3385
  "type": "string",
3154
- "enum": [
3155
- "app.status"
3156
- ]
3386
+ "description": "Repository ref without tag"
3157
3387
  },
3158
- "produced_at": {
3159
- "type": "number",
3160
- "description": "Timestamp"
3388
+ "current": {
3389
+ "type": "string",
3390
+ "description": "Version served to NEW deployments/builds"
3161
3391
  },
3162
- "payload": {
3163
- "type": "object",
3164
- "required": [
3165
- "id",
3166
- "status"
3167
- ],
3168
- "properties": {
3169
- "id": {
3170
- "type": "string"
3171
- },
3172
- "status": {
3173
- "$ref": "#/components/schemas/AppStatus"
3392
+ "min_version": {
3393
+ "type": "string",
3394
+ "description": "Floor: deployments stamped below it are rolled to current (mandatory update)"
3395
+ },
3396
+ "auto_promote": {
3397
+ "type": "boolean",
3398
+ "description": "A CI registration of a newer release moves current"
3399
+ },
3400
+ "versions": {
3401
+ "type": "array",
3402
+ "items": {
3403
+ "type": "object",
3404
+ "required": [
3405
+ "version",
3406
+ "tag",
3407
+ "digest",
3408
+ "registered_at",
3409
+ "source"
3410
+ ],
3411
+ "properties": {
3412
+ "version": {
3413
+ "type": "string",
3414
+ "description": "Buildpacks release, X.Y.Z"
3415
+ },
3416
+ "tag": {
3417
+ "type": "string",
3418
+ "description": "Immutable image tag, e.g. 22-v1.20.1"
3419
+ },
3420
+ "digest": {
3421
+ "type": "string",
3422
+ "description": "sha256 the tag resolved to in ECR"
3423
+ },
3424
+ "size": {
3425
+ "type": "number",
3426
+ "nullable": true,
3427
+ "default": null
3428
+ },
3429
+ "registered_at": {
3430
+ "type": "string",
3431
+ "format": "date-time"
3432
+ },
3433
+ "source": {
3434
+ "anyOf": [
3435
+ {
3436
+ "type": "string",
3437
+ "enum": [
3438
+ "ci"
3439
+ ]
3440
+ },
3441
+ {
3442
+ "type": "string",
3443
+ "enum": [
3444
+ "seed"
3445
+ ]
3446
+ },
3447
+ {
3448
+ "type": "string",
3449
+ "enum": [
3450
+ "manual"
3451
+ ]
3452
+ }
3453
+ ]
3454
+ }
3174
3455
  }
3175
3456
  }
3457
+ },
3458
+ "updated_at": {
3459
+ "type": "string",
3460
+ "format": "date-time",
3461
+ "nullable": true,
3462
+ "default": null
3463
+ },
3464
+ "metadata": {
3465
+ "type": "object",
3466
+ "properties": {},
3467
+ "additionalProperties": true,
3468
+ "default": {}
3469
+ },
3470
+ "createdAt": {
3471
+ "type": "string",
3472
+ "description": "PlatformImage creation date"
3473
+ },
3474
+ "updatedAt": {
3475
+ "type": "string",
3476
+ "description": "PlatformImage updated date"
3176
3477
  }
3177
3478
  },
3178
- "description": "Event App Status",
3479
+ "description": "PlatformImage",
3179
3480
  "additionalProperties": false
3180
3481
  },
3181
- "EventDeploymentStatus": {
3482
+ "EventPlatformimageCreate": {
3182
3483
  "type": "object",
3183
3484
  "required": [
3184
3485
  "type",
@@ -3189,7 +3490,7 @@
3189
3490
  "type": {
3190
3491
  "type": "string",
3191
3492
  "enum": [
3192
- "deployment.status"
3493
+ "platformimage.create"
3193
3494
  ]
3194
3495
  },
3195
3496
  "produced_at": {
@@ -3197,25 +3498,13 @@
3197
3498
  "description": "Timestamp"
3198
3499
  },
3199
3500
  "payload": {
3200
- "type": "object",
3201
- "required": [
3202
- "id",
3203
- "status"
3204
- ],
3205
- "properties": {
3206
- "id": {
3207
- "type": "string"
3208
- },
3209
- "status": {
3210
- "$ref": "#/components/schemas/DeploymentStatus"
3211
- }
3212
- }
3501
+ "$ref": "#/components/schemas/PlatformImage"
3213
3502
  }
3214
3503
  },
3215
- "description": "Event Deployment Status",
3504
+ "description": "Event Platformimage Create",
3216
3505
  "additionalProperties": false
3217
3506
  },
3218
- "EventDomainStatus": {
3507
+ "EventPlatformimageUpdate": {
3219
3508
  "type": "object",
3220
3509
  "required": [
3221
3510
  "type",
@@ -3226,7 +3515,7 @@
3226
3515
  "type": {
3227
3516
  "type": "string",
3228
3517
  "enum": [
3229
- "domain.status"
3518
+ "platformimage.update"
3230
3519
  ]
3231
3520
  },
3232
3521
  "produced_at": {
@@ -3234,157 +3523,319 @@
3234
3523
  "description": "Timestamp"
3235
3524
  },
3236
3525
  "payload": {
3237
- "type": "object",
3238
- "required": [
3239
- "id",
3240
- "status"
3241
- ],
3242
- "properties": {
3243
- "id": {
3244
- "type": "string"
3245
- },
3246
- "status": {
3247
- "$ref": "#/components/schemas/DomainStatus"
3248
- }
3249
- }
3526
+ "$ref": "#/components/schemas/PlatformImage"
3250
3527
  }
3251
3528
  },
3252
- "description": "Event Domain Status",
3529
+ "description": "Event Platformimage Update",
3253
3530
  "additionalProperties": false
3254
- }
3255
- }
3256
- },
3257
- "paths": {
3258
- "/project/{id}/invite": {
3259
- "post": {
3260
- "operationId": "project/invite",
3261
- "summary": "Invite collaborators to project",
3262
- "tags": [
3263
- "projects"
3531
+ },
3532
+ "EventPlatformimageDelete": {
3533
+ "type": "object",
3534
+ "required": [
3535
+ "type",
3536
+ "produced_at",
3537
+ "payload"
3264
3538
  ],
3265
- "description": "Invite collaborators to project",
3266
- "requestBody": {
3267
- "required": true,
3268
- "content": {
3269
- "application/json": {
3270
- "schema": {
3271
- "$ref": "#/components/schemas/ProjectInvite"
3272
- }
3273
- }
3539
+ "properties": {
3540
+ "type": {
3541
+ "type": "string",
3542
+ "enum": [
3543
+ "platformimage.delete"
3544
+ ]
3545
+ },
3546
+ "produced_at": {
3547
+ "type": "number",
3548
+ "description": "Timestamp"
3549
+ },
3550
+ "payload": {
3551
+ "$ref": "#/components/schemas/PlatformImage"
3274
3552
  }
3275
3553
  },
3276
- "parameters": [
3277
- {
3278
- "schema": {
3279
- "type": "string"
3280
- },
3281
- "in": "path",
3282
- "name": "id",
3283
- "required": true
3284
- }
3554
+ "description": "Event Platformimage Delete",
3555
+ "additionalProperties": false
3556
+ },
3557
+ "PlatformImageCreate": {
3558
+ "type": "object",
3559
+ "required": [
3560
+ "kind",
3561
+ "key",
3562
+ "repository",
3563
+ "current",
3564
+ "min_version"
3285
3565
  ],
3286
- "security": [
3287
- {
3288
- "faable_user": []
3566
+ "properties": {
3567
+ "kind": {
3568
+ "anyOf": [
3569
+ {
3570
+ "type": "string",
3571
+ "enum": [
3572
+ "runtime"
3573
+ ]
3574
+ },
3575
+ {
3576
+ "type": "string",
3577
+ "enum": [
3578
+ "builder"
3579
+ ]
3580
+ },
3581
+ {
3582
+ "type": "string",
3583
+ "enum": [
3584
+ "fetcher"
3585
+ ]
3586
+ },
3587
+ {
3588
+ "type": "string",
3589
+ "enum": [
3590
+ "buildkit"
3591
+ ]
3592
+ }
3593
+ ]
3289
3594
  },
3290
- {
3291
- "faable_cli": []
3595
+ "key": {
3596
+ "type": "string"
3292
3597
  },
3293
- {
3294
- "faable_m2m": []
3598
+ "repository": {
3599
+ "type": "string"
3295
3600
  },
3296
- {
3297
- "faable_machine": []
3601
+ "current": {
3602
+ "type": "string"
3298
3603
  },
3299
- {
3300
- "apikey_basic": []
3604
+ "min_version": {
3605
+ "type": "string"
3301
3606
  },
3302
- {
3303
- "apikey": []
3304
- }
3305
- ],
3306
- "responses": {
3307
- "200": {
3308
- "description": "Default Response",
3309
- "content": {
3310
- "application/json": {
3311
- "schema": {
3312
- "$ref": "#/components/schemas/ProjectInviteResult"
3607
+ "auto_promote": {
3608
+ "type": "boolean"
3609
+ },
3610
+ "versions": {
3611
+ "type": "array",
3612
+ "items": {
3613
+ "type": "object",
3614
+ "required": [
3615
+ "version",
3616
+ "tag",
3617
+ "digest",
3618
+ "registered_at",
3619
+ "source"
3620
+ ],
3621
+ "properties": {
3622
+ "version": {
3623
+ "type": "string",
3624
+ "description": "Buildpacks release, X.Y.Z"
3625
+ },
3626
+ "tag": {
3627
+ "type": "string",
3628
+ "description": "Immutable image tag, e.g. 22-v1.20.1"
3629
+ },
3630
+ "digest": {
3631
+ "type": "string",
3632
+ "description": "sha256 the tag resolved to in ECR"
3633
+ },
3634
+ "size": {
3635
+ "type": "number",
3636
+ "nullable": true,
3637
+ "default": null
3638
+ },
3639
+ "registered_at": {
3640
+ "type": "string",
3641
+ "format": "date-time"
3642
+ },
3643
+ "source": {
3644
+ "anyOf": [
3645
+ {
3646
+ "type": "string",
3647
+ "enum": [
3648
+ "ci"
3649
+ ]
3650
+ },
3651
+ {
3652
+ "type": "string",
3653
+ "enum": [
3654
+ "seed"
3655
+ ]
3656
+ },
3657
+ {
3658
+ "type": "string",
3659
+ "enum": [
3660
+ "manual"
3661
+ ]
3662
+ }
3663
+ ]
3313
3664
  }
3314
3665
  }
3315
3666
  }
3316
3667
  }
3317
3668
  }
3318
- }
3319
- },
3320
- "/project/{id}/collaborator/{user_id}": {
3321
- "delete": {
3322
- "operationId": "project/removeCollaborator",
3323
- "summary": "Remove a collaborator from a project",
3324
- "tags": [
3325
- "projects"
3326
- ],
3327
- "description": "Remove a collaborator from a project",
3328
- "parameters": [
3329
- {
3330
- "schema": {
3331
- "type": "string"
3332
- },
3333
- "in": "path",
3334
- "name": "id",
3335
- "required": true
3669
+ },
3670
+ "PlatformImageUpdate": {
3671
+ "type": "object",
3672
+ "properties": {
3673
+ "auto_promote": {
3674
+ "type": "boolean"
3336
3675
  },
3337
- {
3338
- "schema": {
3339
- "type": "string"
3340
- },
3341
- "in": "path",
3342
- "name": "user_id",
3343
- "required": true
3676
+ "repository": {
3677
+ "type": "string"
3344
3678
  }
3679
+ }
3680
+ },
3681
+ "AppChecknameResponse": {
3682
+ "type": "object",
3683
+ "required": [
3684
+ "name",
3685
+ "slug",
3686
+ "availiable"
3345
3687
  ],
3346
- "security": [
3347
- {
3348
- "faable_user": []
3688
+ "properties": {
3689
+ "name": {
3690
+ "type": "string"
3349
3691
  },
3350
- {
3351
- "faable_cli": []
3692
+ "slug": {
3693
+ "type": "string"
3352
3694
  },
3353
- {
3354
- "faable_m2m": []
3695
+ "url": {
3696
+ "type": "string"
3355
3697
  },
3356
- {
3357
- "faable_machine": []
3698
+ "availiable": {
3699
+ "type": "boolean",
3700
+ "description": "check if slug is availiable"
3358
3701
  },
3359
- {
3360
- "apikey_basic": []
3702
+ "error": {
3703
+ "type": "string"
3704
+ }
3705
+ }
3706
+ },
3707
+ "EventAppStatus": {
3708
+ "type": "object",
3709
+ "required": [
3710
+ "type",
3711
+ "produced_at",
3712
+ "payload"
3713
+ ],
3714
+ "properties": {
3715
+ "type": {
3716
+ "type": "string",
3717
+ "enum": [
3718
+ "app.status"
3719
+ ]
3361
3720
  },
3362
- {
3363
- "apikey": []
3721
+ "produced_at": {
3722
+ "type": "number",
3723
+ "description": "Timestamp"
3724
+ },
3725
+ "payload": {
3726
+ "type": "object",
3727
+ "required": [
3728
+ "id",
3729
+ "status"
3730
+ ],
3731
+ "properties": {
3732
+ "id": {
3733
+ "type": "string"
3734
+ },
3735
+ "status": {
3736
+ "$ref": "#/components/schemas/AppStatus"
3737
+ }
3738
+ }
3364
3739
  }
3740
+ },
3741
+ "description": "Event App Status",
3742
+ "additionalProperties": false
3743
+ },
3744
+ "EventDeploymentStatus": {
3745
+ "type": "object",
3746
+ "required": [
3747
+ "type",
3748
+ "produced_at",
3749
+ "payload"
3365
3750
  ],
3366
- "responses": {
3367
- "200": {
3368
- "description": "Project",
3369
- "content": {
3370
- "application/json": {
3371
- "schema": {
3372
- "$ref": "#/components/schemas/Project"
3373
- }
3751
+ "properties": {
3752
+ "type": {
3753
+ "type": "string",
3754
+ "enum": [
3755
+ "deployment.status"
3756
+ ]
3757
+ },
3758
+ "produced_at": {
3759
+ "type": "number",
3760
+ "description": "Timestamp"
3761
+ },
3762
+ "payload": {
3763
+ "type": "object",
3764
+ "required": [
3765
+ "id",
3766
+ "status"
3767
+ ],
3768
+ "properties": {
3769
+ "id": {
3770
+ "type": "string"
3771
+ },
3772
+ "status": {
3773
+ "$ref": "#/components/schemas/DeploymentStatus"
3374
3774
  }
3375
3775
  }
3376
3776
  }
3377
- }
3777
+ },
3778
+ "description": "Event Deployment Status",
3779
+ "additionalProperties": false
3780
+ },
3781
+ "EventDomainStatus": {
3782
+ "type": "object",
3783
+ "required": [
3784
+ "type",
3785
+ "produced_at",
3786
+ "payload"
3787
+ ],
3788
+ "properties": {
3789
+ "type": {
3790
+ "type": "string",
3791
+ "enum": [
3792
+ "domain.status"
3793
+ ]
3794
+ },
3795
+ "produced_at": {
3796
+ "type": "number",
3797
+ "description": "Timestamp"
3798
+ },
3799
+ "payload": {
3800
+ "type": "object",
3801
+ "required": [
3802
+ "id",
3803
+ "status"
3804
+ ],
3805
+ "properties": {
3806
+ "id": {
3807
+ "type": "string"
3808
+ },
3809
+ "status": {
3810
+ "$ref": "#/components/schemas/DomainStatus"
3811
+ }
3812
+ }
3813
+ }
3814
+ },
3815
+ "description": "Event Domain Status",
3816
+ "additionalProperties": false
3378
3817
  }
3379
- },
3380
- "/project/{id}/suspend": {
3818
+ }
3819
+ },
3820
+ "paths": {
3821
+ "/project/{id}/invite": {
3381
3822
  "post": {
3382
- "operationId": "project/suspend",
3383
- "summary": "Suspend a project",
3823
+ "operationId": "project/invite",
3824
+ "summary": "Invite collaborators to project",
3384
3825
  "tags": [
3385
3826
  "projects"
3386
3827
  ],
3387
- "description": "Take down every app in a project (superadmin)",
3828
+ "description": "Invite collaborators to project",
3829
+ "requestBody": {
3830
+ "required": true,
3831
+ "content": {
3832
+ "application/json": {
3833
+ "schema": {
3834
+ "$ref": "#/components/schemas/ProjectInvite"
3835
+ }
3836
+ }
3837
+ }
3838
+ },
3388
3839
  "parameters": [
3389
3840
  {
3390
3841
  "schema": {
@@ -3421,7 +3872,7 @@
3421
3872
  "content": {
3422
3873
  "application/json": {
3423
3874
  "schema": {
3424
- "$ref": "#/components/schemas/ProjectModerationResult"
3875
+ "$ref": "#/components/schemas/ProjectInviteResult"
3425
3876
  }
3426
3877
  }
3427
3878
  }
@@ -3429,14 +3880,14 @@
3429
3880
  }
3430
3881
  }
3431
3882
  },
3432
- "/project/{id}/restore": {
3433
- "post": {
3434
- "operationId": "project/restore",
3435
- "summary": "Restore a project",
3883
+ "/project/{id}/collaborator/{user_id}": {
3884
+ "delete": {
3885
+ "operationId": "project/removeCollaborator",
3886
+ "summary": "Remove a collaborator from a project",
3436
3887
  "tags": [
3437
3888
  "projects"
3438
3889
  ],
3439
- "description": "Re-enable every app in a project (superadmin)",
3890
+ "description": "Remove a collaborator from a project",
3440
3891
  "parameters": [
3441
3892
  {
3442
3893
  "schema": {
@@ -3445,6 +3896,14 @@
3445
3896
  "in": "path",
3446
3897
  "name": "id",
3447
3898
  "required": true
3899
+ },
3900
+ {
3901
+ "schema": {
3902
+ "type": "string"
3903
+ },
3904
+ "in": "path",
3905
+ "name": "user_id",
3906
+ "required": true
3448
3907
  }
3449
3908
  ],
3450
3909
  "security": [
@@ -3469,11 +3928,11 @@
3469
3928
  ],
3470
3929
  "responses": {
3471
3930
  "200": {
3472
- "description": "Default Response",
3931
+ "description": "Project",
3473
3932
  "content": {
3474
3933
  "application/json": {
3475
3934
  "schema": {
3476
- "$ref": "#/components/schemas/ProjectModerationResult"
3935
+ "$ref": "#/components/schemas/Project"
3477
3936
  }
3478
3937
  }
3479
3938
  }
@@ -4283,7 +4742,18 @@
4283
4742
  "description": "Reason the app was administratively disabled. Null when the app is active."
4284
4743
  },
4285
4744
  "runtime": {
4286
- "$ref": "#/components/schemas/AppRuntime"
4745
+ "anyOf": [
4746
+ {
4747
+ "enum": [
4748
+ "node",
4749
+ "php",
4750
+ "python"
4751
+ ]
4752
+ },
4753
+ {
4754
+ "type": "null"
4755
+ }
4756
+ ]
4287
4757
  },
4288
4758
  "runtime_strategy": {
4289
4759
  "anyOf": [
@@ -4636,7 +5106,18 @@
4636
5106
  "description": "Reason the app was administratively disabled. Null when the app is active."
4637
5107
  },
4638
5108
  "runtime": {
4639
- "$ref": "#/components/schemas/AppRuntime"
5109
+ "anyOf": [
5110
+ {
5111
+ "enum": [
5112
+ "node",
5113
+ "php",
5114
+ "python"
5115
+ ]
5116
+ },
5117
+ {
5118
+ "type": "null"
5119
+ }
5120
+ ]
4640
5121
  },
4641
5122
  "runtime_strategy": {
4642
5123
  "anyOf": [
@@ -5008,7 +5489,18 @@
5008
5489
  "description": "Reason the app was administratively disabled. Null when the app is active."
5009
5490
  },
5010
5491
  "runtime": {
5011
- "$ref": "#/components/schemas/AppRuntime"
5492
+ "anyOf": [
5493
+ {
5494
+ "enum": [
5495
+ "node",
5496
+ "php",
5497
+ "python"
5498
+ ]
5499
+ },
5500
+ {
5501
+ "type": "null"
5502
+ }
5503
+ ]
5012
5504
  },
5013
5505
  "runtime_strategy": {
5014
5506
  "anyOf": [
@@ -5341,7 +5833,18 @@
5341
5833
  "description": "Reason the app was administratively disabled. Null when the app is active."
5342
5834
  },
5343
5835
  "runtime": {
5344
- "$ref": "#/components/schemas/AppRuntime"
5836
+ "anyOf": [
5837
+ {
5838
+ "enum": [
5839
+ "node",
5840
+ "php",
5841
+ "python"
5842
+ ]
5843
+ },
5844
+ {
5845
+ "type": "null"
5846
+ }
5847
+ ]
5345
5848
  },
5346
5849
  "runtime_strategy": {
5347
5850
  "anyOf": [
@@ -6147,36 +6650,407 @@
6147
6650
  "items": {
6148
6651
  "type": "object",
6149
6652
  "required": [
6150
- "referer",
6151
- "requests"
6653
+ "referer",
6654
+ "requests"
6655
+ ],
6656
+ "properties": {
6657
+ "referer": {
6658
+ "type": "string"
6659
+ },
6660
+ "requests": {
6661
+ "type": "integer"
6662
+ }
6663
+ }
6664
+ }
6665
+ },
6666
+ "top_user_agents": {
6667
+ "type": "array",
6668
+ "items": {
6669
+ "type": "object",
6670
+ "required": [
6671
+ "user_agent",
6672
+ "requests"
6673
+ ],
6674
+ "properties": {
6675
+ "user_agent": {
6676
+ "type": "string"
6677
+ },
6678
+ "requests": {
6679
+ "type": "integer"
6680
+ }
6681
+ }
6682
+ }
6683
+ }
6684
+ }
6685
+ }
6686
+ }
6687
+ }
6688
+ }
6689
+ }
6690
+ }
6691
+ },
6692
+ "/app/{id}/link-repository": {
6693
+ "post": {
6694
+ "operationId": "app/link_repository",
6695
+ "summary": "Link a GitHub repository to an app",
6696
+ "tags": [
6697
+ "apps",
6698
+ "github"
6699
+ ],
6700
+ "description": "Link a GitHub repository to an app after verifying the user has a connected GitHub identity with access to the repository.",
6701
+ "requestBody": {
6702
+ "required": true,
6703
+ "content": {
6704
+ "application/json": {
6705
+ "schema": {
6706
+ "type": "object",
6707
+ "required": [
6708
+ "repository"
6709
+ ],
6710
+ "properties": {
6711
+ "repository": {
6712
+ "type": "string",
6713
+ "description": "GitHub repository in \"owner/repo\" form"
6714
+ },
6715
+ "github_branch": {
6716
+ "type": "string",
6717
+ "description": "Branch to deploy from. Defaults to the repo default."
6718
+ },
6719
+ "github_installation_id": {
6720
+ "type": "string",
6721
+ "description": "Installation the repo belongs to. When provided, verification is scoped to it (faster) instead of scanning every installation."
6722
+ }
6723
+ },
6724
+ "additionalProperties": false
6725
+ }
6726
+ }
6727
+ }
6728
+ },
6729
+ "parameters": [
6730
+ {
6731
+ "schema": {
6732
+ "type": "string"
6733
+ },
6734
+ "in": "path",
6735
+ "name": "id",
6736
+ "required": true
6737
+ }
6738
+ ],
6739
+ "security": [
6740
+ {
6741
+ "faable_user": []
6742
+ },
6743
+ {
6744
+ "faable_cli": []
6745
+ },
6746
+ {
6747
+ "faable_m2m": []
6748
+ },
6749
+ {
6750
+ "faable_machine": []
6751
+ },
6752
+ {
6753
+ "apikey_basic": []
6754
+ },
6755
+ {
6756
+ "apikey": []
6757
+ }
6758
+ ],
6759
+ "responses": {
6760
+ "200": {
6761
+ "description": "App",
6762
+ "content": {
6763
+ "application/json": {
6764
+ "schema": {
6765
+ "$ref": "#/components/schemas/App"
6766
+ }
6767
+ }
6768
+ }
6769
+ }
6770
+ }
6771
+ }
6772
+ },
6773
+ "/app/{id}/unlink-repository": {
6774
+ "post": {
6775
+ "operationId": "app/unlink_repository",
6776
+ "summary": "Unlink the GitHub repository from an app",
6777
+ "tags": [
6778
+ "apps",
6779
+ "github"
6780
+ ],
6781
+ "description": "Unlink the GitHub repository from an app.",
6782
+ "parameters": [
6783
+ {
6784
+ "schema": {
6785
+ "type": "string"
6786
+ },
6787
+ "in": "path",
6788
+ "name": "id",
6789
+ "required": true
6790
+ }
6791
+ ],
6792
+ "security": [
6793
+ {
6794
+ "faable_user": []
6795
+ },
6796
+ {
6797
+ "faable_cli": []
6798
+ },
6799
+ {
6800
+ "faable_m2m": []
6801
+ },
6802
+ {
6803
+ "faable_machine": []
6804
+ },
6805
+ {
6806
+ "apikey_basic": []
6807
+ },
6808
+ {
6809
+ "apikey": []
6810
+ }
6811
+ ],
6812
+ "responses": {
6813
+ "200": {
6814
+ "description": "App",
6815
+ "content": {
6816
+ "application/json": {
6817
+ "schema": {
6818
+ "$ref": "#/components/schemas/App"
6819
+ }
6820
+ }
6821
+ }
6822
+ }
6823
+ }
6824
+ }
6825
+ },
6826
+ "/app/{id}/deploy-branch": {
6827
+ "post": {
6828
+ "operationId": "app/set_deploy_branch",
6829
+ "summary": "Change the deploy branch",
6830
+ "tags": [
6831
+ "apps",
6832
+ "github"
6833
+ ],
6834
+ "description": "Change the branch the app deploys from. Apps deploying from their own GitHub Actions workflow must update the branch trigger in the workflow file themselves.",
6835
+ "requestBody": {
6836
+ "required": true,
6837
+ "content": {
6838
+ "application/json": {
6839
+ "schema": {
6840
+ "type": "object",
6841
+ "required": [
6842
+ "github_branch"
6843
+ ],
6844
+ "properties": {
6845
+ "github_branch": {
6846
+ "type": "string",
6847
+ "minLength": 1,
6848
+ "maxLength": 250
6849
+ }
6850
+ },
6851
+ "additionalProperties": false
6852
+ }
6853
+ }
6854
+ }
6855
+ },
6856
+ "parameters": [
6857
+ {
6858
+ "schema": {
6859
+ "type": "string"
6860
+ },
6861
+ "in": "path",
6862
+ "name": "id",
6863
+ "required": true
6864
+ }
6865
+ ],
6866
+ "security": [
6867
+ {
6868
+ "faable_user": []
6869
+ },
6870
+ {
6871
+ "faable_cli": []
6872
+ },
6873
+ {
6874
+ "faable_m2m": []
6875
+ },
6876
+ {
6877
+ "faable_machine": []
6878
+ },
6879
+ {
6880
+ "apikey_basic": []
6881
+ },
6882
+ {
6883
+ "apikey": []
6884
+ }
6885
+ ],
6886
+ "responses": {
6887
+ "200": {
6888
+ "description": "Default Response",
6889
+ "content": {
6890
+ "application/json": {
6891
+ "schema": {
6892
+ "type": "object",
6893
+ "required": [
6894
+ "github_branch",
6895
+ "workflow_synced"
6896
+ ],
6897
+ "properties": {
6898
+ "github_branch": {
6899
+ "type": "string"
6900
+ },
6901
+ "workflow_synced": {
6902
+ "type": "boolean"
6903
+ }
6904
+ }
6905
+ }
6906
+ }
6907
+ }
6908
+ }
6909
+ }
6910
+ }
6911
+ },
6912
+ "/app/{id}/repo/branches": {
6913
+ "get": {
6914
+ "operationId": "app/repo_branches",
6915
+ "summary": "List repository branches",
6916
+ "tags": [
6917
+ "apps",
6918
+ "github"
6919
+ ],
6920
+ "description": "Branch names of the linked repository.",
6921
+ "parameters": [
6922
+ {
6923
+ "schema": {
6924
+ "type": "string"
6925
+ },
6926
+ "in": "path",
6927
+ "name": "id",
6928
+ "required": true
6929
+ }
6930
+ ],
6931
+ "security": [
6932
+ {
6933
+ "faable_user": []
6934
+ },
6935
+ {
6936
+ "faable_cli": []
6937
+ },
6938
+ {
6939
+ "faable_m2m": []
6940
+ },
6941
+ {
6942
+ "faable_machine": []
6943
+ },
6944
+ {
6945
+ "apikey_basic": []
6946
+ },
6947
+ {
6948
+ "apikey": []
6949
+ }
6950
+ ],
6951
+ "responses": {
6952
+ "200": {
6953
+ "description": "Default Response",
6954
+ "content": {
6955
+ "application/json": {
6956
+ "schema": {
6957
+ "type": "object",
6958
+ "required": [
6959
+ "branches"
6960
+ ],
6961
+ "properties": {
6962
+ "branches": {
6963
+ "type": "array",
6964
+ "items": {
6965
+ "type": "string"
6966
+ }
6967
+ }
6968
+ }
6969
+ }
6970
+ }
6971
+ }
6972
+ }
6973
+ }
6974
+ }
6975
+ },
6976
+ "/app/{id}/repo/workflows": {
6977
+ "get": {
6978
+ "operationId": "app/repo_workflows",
6979
+ "summary": "List repository workflow files",
6980
+ "tags": [
6981
+ "apps",
6982
+ "github"
6983
+ ],
6984
+ "description": "GitHub Actions workflow files present on the linked repository (deploy branch).",
6985
+ "parameters": [
6986
+ {
6987
+ "schema": {
6988
+ "type": "string"
6989
+ },
6990
+ "in": "path",
6991
+ "name": "id",
6992
+ "required": true
6993
+ }
6994
+ ],
6995
+ "security": [
6996
+ {
6997
+ "faable_user": []
6998
+ },
6999
+ {
7000
+ "faable_cli": []
7001
+ },
7002
+ {
7003
+ "faable_m2m": []
7004
+ },
7005
+ {
7006
+ "faable_machine": []
7007
+ },
7008
+ {
7009
+ "apikey_basic": []
7010
+ },
7011
+ {
7012
+ "apikey": []
7013
+ }
7014
+ ],
7015
+ "responses": {
7016
+ "200": {
7017
+ "description": "Default Response",
7018
+ "content": {
7019
+ "application/json": {
7020
+ "schema": {
7021
+ "type": "object",
7022
+ "required": [
7023
+ "workflows",
7024
+ "deploy_workflow"
7025
+ ],
7026
+ "properties": {
7027
+ "workflows": {
7028
+ "type": "array",
7029
+ "items": {
7030
+ "type": "object",
7031
+ "required": [
7032
+ "name",
7033
+ "path"
6152
7034
  ],
6153
7035
  "properties": {
6154
- "referer": {
7036
+ "name": {
6155
7037
  "type": "string"
6156
7038
  },
6157
- "requests": {
6158
- "type": "integer"
7039
+ "path": {
7040
+ "type": "string"
6159
7041
  }
6160
7042
  }
6161
7043
  }
6162
7044
  },
6163
- "top_user_agents": {
6164
- "type": "array",
6165
- "items": {
6166
- "type": "object",
6167
- "required": [
6168
- "user_agent",
6169
- "requests"
6170
- ],
6171
- "properties": {
6172
- "user_agent": {
6173
- "type": "string"
6174
- },
6175
- "requests": {
6176
- "type": "integer"
6177
- }
7045
+ "deploy_workflow": {
7046
+ "anyOf": [
7047
+ {
7048
+ "type": "string"
7049
+ },
7050
+ {
7051
+ "type": "null"
6178
7052
  }
6179
- }
7053
+ ]
6180
7054
  }
6181
7055
  }
6182
7056
  }
@@ -6186,43 +7060,103 @@
6186
7060
  }
6187
7061
  }
6188
7062
  },
6189
- "/app/{id}/link-repository": {
6190
- "post": {
6191
- "operationId": "app/link_repository",
6192
- "summary": "Link a GitHub repository to an app",
7063
+ "/app/{id}/repo/config": {
7064
+ "get": {
7065
+ "operationId": "app/repo_config",
7066
+ "summary": "Get effective repository build config",
6193
7067
  "tags": [
6194
7068
  "apps",
6195
7069
  "github"
6196
7070
  ],
6197
- "description": "Link a GitHub repository to an app after verifying the user has a connected GitHub identity with access to the repository.",
6198
- "requestBody": {
6199
- "required": true,
6200
- "content": {
6201
- "application/json": {
6202
- "schema": {
6203
- "type": "object",
6204
- "required": [
6205
- "repository"
6206
- ],
6207
- "properties": {
6208
- "repository": {
6209
- "type": "string",
6210
- "description": "GitHub repository in \"owner/repo\" form"
6211
- },
6212
- "github_branch": {
6213
- "type": "string",
6214
- "description": "Branch to deploy from. Defaults to the repo default."
6215
- },
6216
- "github_installation_id": {
6217
- "type": "string",
6218
- "description": "Installation the repo belongs to. When provided, verification is scoped to it (faster) instead of scanning every installation."
7071
+ "description": "Effective build configuration read from the repository: the monorepo Root Directory and its source (platform override or the repo's faable.json).",
7072
+ "parameters": [
7073
+ {
7074
+ "schema": {
7075
+ "type": "string"
7076
+ },
7077
+ "in": "path",
7078
+ "name": "id",
7079
+ "required": true
7080
+ }
7081
+ ],
7082
+ "security": [
7083
+ {
7084
+ "faable_user": []
7085
+ },
7086
+ {
7087
+ "faable_cli": []
7088
+ },
7089
+ {
7090
+ "faable_m2m": []
7091
+ },
7092
+ {
7093
+ "faable_machine": []
7094
+ },
7095
+ {
7096
+ "apikey_basic": []
7097
+ },
7098
+ {
7099
+ "apikey": []
7100
+ }
7101
+ ],
7102
+ "responses": {
7103
+ "200": {
7104
+ "description": "Default Response",
7105
+ "content": {
7106
+ "application/json": {
7107
+ "schema": {
7108
+ "type": "object",
7109
+ "required": [
7110
+ "root_dir",
7111
+ "root_dir_source"
7112
+ ],
7113
+ "properties": {
7114
+ "root_dir": {
7115
+ "anyOf": [
7116
+ {
7117
+ "type": "string"
7118
+ },
7119
+ {
7120
+ "type": "null"
7121
+ }
7122
+ ]
7123
+ },
7124
+ "root_dir_source": {
7125
+ "anyOf": [
7126
+ {
7127
+ "type": "string",
7128
+ "enum": [
7129
+ "platform"
7130
+ ]
7131
+ },
7132
+ {
7133
+ "type": "string",
7134
+ "enum": [
7135
+ "faable.json"
7136
+ ]
7137
+ },
7138
+ {
7139
+ "type": "null"
7140
+ }
7141
+ ]
7142
+ }
6219
7143
  }
6220
- },
6221
- "additionalProperties": false
7144
+ }
6222
7145
  }
6223
7146
  }
6224
7147
  }
6225
- },
7148
+ }
7149
+ }
7150
+ },
7151
+ "/app/{id}/repo/directories": {
7152
+ "get": {
7153
+ "operationId": "app/repo_directories",
7154
+ "summary": "List repository directories",
7155
+ "tags": [
7156
+ "apps",
7157
+ "github"
7158
+ ],
7159
+ "description": "Directories of the linked repository on the deploy branch, flagged with whether each one holds a buildable manifest. Feeds the Root Directory picker so a monorepo is configured from what the repository actually contains. Limited to three levels deep; dotted directories and node_modules are excluded.",
6226
7160
  "parameters": [
6227
7161
  {
6228
7162
  "schema": {
@@ -6255,11 +7189,38 @@
6255
7189
  ],
6256
7190
  "responses": {
6257
7191
  "200": {
6258
- "description": "App",
7192
+ "description": "Default Response",
6259
7193
  "content": {
6260
7194
  "application/json": {
6261
7195
  "schema": {
6262
- "$ref": "#/components/schemas/App"
7196
+ "type": "object",
7197
+ "required": [
7198
+ "directories",
7199
+ "truncated"
7200
+ ],
7201
+ "properties": {
7202
+ "directories": {
7203
+ "type": "array",
7204
+ "items": {
7205
+ "type": "object",
7206
+ "required": [
7207
+ "path",
7208
+ "buildable"
7209
+ ],
7210
+ "properties": {
7211
+ "path": {
7212
+ "type": "string"
7213
+ },
7214
+ "buildable": {
7215
+ "type": "boolean"
7216
+ }
7217
+ }
7218
+ }
7219
+ },
7220
+ "truncated": {
7221
+ "type": "boolean"
7222
+ }
7223
+ }
6263
7224
  }
6264
7225
  }
6265
7226
  }
@@ -6267,15 +7228,42 @@
6267
7228
  }
6268
7229
  }
6269
7230
  },
6270
- "/app/{id}/unlink-repository": {
7231
+ "/app/{id}/root-dir": {
6271
7232
  "post": {
6272
- "operationId": "app/unlink_repository",
6273
- "summary": "Unlink the GitHub repository from an app",
7233
+ "operationId": "app/set_root_dir",
7234
+ "summary": "Set the Root Directory",
6274
7235
  "tags": [
6275
7236
  "apps",
6276
7237
  "github"
6277
7238
  ],
6278
- "description": "Unlink the GitHub repository from an app.",
7239
+ "description": "Set the platform Root Directory: the subdirectory of the repository the build runs from. Takes precedence over the repo's faable.json `rootDir`; `null` clears it and hands precedence back. The path must exist on the deploy branch.",
7240
+ "requestBody": {
7241
+ "required": true,
7242
+ "content": {
7243
+ "application/json": {
7244
+ "schema": {
7245
+ "type": "object",
7246
+ "required": [
7247
+ "root_dir"
7248
+ ],
7249
+ "properties": {
7250
+ "root_dir": {
7251
+ "anyOf": [
7252
+ {
7253
+ "type": "string",
7254
+ "maxLength": 255
7255
+ },
7256
+ {
7257
+ "type": "null"
7258
+ }
7259
+ ]
7260
+ }
7261
+ },
7262
+ "additionalProperties": false
7263
+ }
7264
+ }
7265
+ }
7266
+ },
6279
7267
  "parameters": [
6280
7268
  {
6281
7269
  "schema": {
@@ -6320,15 +7308,15 @@
6320
7308
  }
6321
7309
  }
6322
7310
  },
6323
- "/app/{id}/deploy-branch": {
7311
+ "/app/{id}/deploy-mode": {
6324
7312
  "post": {
6325
- "operationId": "app/set_deploy_branch",
6326
- "summary": "Change the deploy branch",
7313
+ "operationId": "app/set_deploy_mode",
7314
+ "summary": "Set the deploy mode",
6327
7315
  "tags": [
6328
7316
  "apps",
6329
7317
  "github"
6330
7318
  ],
6331
- "description": "Change the branch the app deploys from. Apps deploying from their own GitHub Actions workflow must update the branch trigger in the workflow file themselves.",
7319
+ "description": "Choose how pushes deploy: 'push' = every push deploys directly; 'ci' = deploy once the commit's CI checks pass. Both are platform-managed (webhook) triggers.",
6332
7320
  "requestBody": {
6333
7321
  "required": true,
6334
7322
  "content": {
@@ -6336,13 +7324,30 @@
6336
7324
  "schema": {
6337
7325
  "type": "object",
6338
7326
  "required": [
6339
- "github_branch"
7327
+ "mode"
6340
7328
  ],
6341
7329
  "properties": {
6342
- "github_branch": {
6343
- "type": "string",
6344
- "minLength": 1,
6345
- "maxLength": 250
7330
+ "mode": {
7331
+ "anyOf": [
7332
+ {
7333
+ "type": "string",
7334
+ "enum": [
7335
+ "push"
7336
+ ]
7337
+ },
7338
+ {
7339
+ "type": "string",
7340
+ "enum": [
7341
+ "ci"
7342
+ ]
7343
+ },
7344
+ {
7345
+ "type": "string",
7346
+ "enum": [
7347
+ "workflow"
7348
+ ]
7349
+ }
7350
+ ]
6346
7351
  }
6347
7352
  },
6348
7353
  "additionalProperties": false
@@ -6382,23 +7387,11 @@
6382
7387
  ],
6383
7388
  "responses": {
6384
7389
  "200": {
6385
- "description": "Default Response",
7390
+ "description": "App",
6386
7391
  "content": {
6387
7392
  "application/json": {
6388
7393
  "schema": {
6389
- "type": "object",
6390
- "required": [
6391
- "github_branch",
6392
- "workflow_synced"
6393
- ],
6394
- "properties": {
6395
- "github_branch": {
6396
- "type": "string"
6397
- },
6398
- "workflow_synced": {
6399
- "type": "boolean"
6400
- }
6401
- }
7394
+ "$ref": "#/components/schemas/App"
6402
7395
  }
6403
7396
  }
6404
7397
  }
@@ -6406,15 +7399,15 @@
6406
7399
  }
6407
7400
  }
6408
7401
  },
6409
- "/app/{id}/repo/branches": {
6410
- "get": {
6411
- "operationId": "app/repo_branches",
6412
- "summary": "List repository branches",
7402
+ "/app/{id}/deploy": {
7403
+ "post": {
7404
+ "operationId": "app/deploy_now",
7405
+ "summary": "Deploy the latest commit now",
6413
7406
  "tags": [
6414
7407
  "apps",
6415
- "github"
7408
+ "deployments"
6416
7409
  ],
6417
- "description": "Branch names of the linked repository.",
7410
+ "description": "Build and deploy the current head of the deploy branch, without waiting for a push. Same path as a push webhook, including the same-commit dedupe.",
6418
7411
  "parameters": [
6419
7412
  {
6420
7413
  "schema": {
@@ -6453,14 +7446,22 @@
6453
7446
  "schema": {
6454
7447
  "type": "object",
6455
7448
  "required": [
6456
- "branches"
7449
+ "status",
7450
+ "commit",
7451
+ "branch"
6457
7452
  ],
6458
7453
  "properties": {
6459
- "branches": {
6460
- "type": "array",
6461
- "items": {
6462
- "type": "string"
6463
- }
7454
+ "status": {
7455
+ "type": "string",
7456
+ "enum": [
7457
+ "created"
7458
+ ]
7459
+ },
7460
+ "commit": {
7461
+ "type": "string"
7462
+ },
7463
+ "branch": {
7464
+ "type": "string"
6464
7465
  }
6465
7466
  }
6466
7467
  }
@@ -6470,22 +7471,21 @@
6470
7471
  }
6471
7472
  }
6472
7473
  },
6473
- "/app/{id}/repo/workflows": {
7474
+ "/app/{app_id}/waf": {
6474
7475
  "get": {
6475
- "operationId": "app/repo_workflows",
6476
- "summary": "List repository workflow files",
7476
+ "operationId": "app/waf",
7477
+ "summary": "Get App WAF",
6477
7478
  "tags": [
6478
- "apps",
6479
- "github"
7479
+ "apps"
6480
7480
  ],
6481
- "description": "GitHub Actions workflow files present on the linked repository (deploy branch).",
7481
+ "description": "Get the WAF rules in effect for an App",
6482
7482
  "parameters": [
6483
7483
  {
6484
7484
  "schema": {
6485
7485
  "type": "string"
6486
7486
  },
6487
7487
  "in": "path",
6488
- "name": "id",
7488
+ "name": "app_id",
6489
7489
  "required": true
6490
7490
  }
6491
7491
  ],
@@ -6517,37 +7517,73 @@
6517
7517
  "schema": {
6518
7518
  "type": "object",
6519
7519
  "required": [
6520
- "workflows",
6521
- "deploy_workflow"
7520
+ "enabled",
7521
+ "platform_profiles",
7522
+ "rules"
6522
7523
  ],
6523
7524
  "properties": {
6524
- "workflows": {
7525
+ "enabled": {
7526
+ "type": "boolean"
7527
+ },
7528
+ "platform_profiles": {
6525
7529
  "type": "array",
6526
7530
  "items": {
6527
7531
  "type": "object",
6528
7532
  "required": [
6529
7533
  "name",
6530
- "path"
7534
+ "action",
7535
+ "rule_count"
6531
7536
  ],
6532
7537
  "properties": {
6533
7538
  "name": {
6534
7539
  "type": "string"
6535
7540
  },
6536
- "path": {
7541
+ "action": {
6537
7542
  "type": "string"
7543
+ },
7544
+ "rule_count": {
7545
+ "type": "integer"
7546
+ },
7547
+ "rules": {
7548
+ "type": "array",
7549
+ "items": {
7550
+ "type": "object",
7551
+ "required": [
7552
+ "pattern"
7553
+ ],
7554
+ "properties": {
7555
+ "pattern": {
7556
+ "type": "string"
7557
+ },
7558
+ "description": {
7559
+ "type": "string"
7560
+ }
7561
+ }
7562
+ }
6538
7563
  }
6539
7564
  }
6540
7565
  }
6541
7566
  },
6542
- "deploy_workflow": {
6543
- "anyOf": [
6544
- {
6545
- "type": "string"
6546
- },
6547
- {
6548
- "type": "null"
7567
+ "rules": {
7568
+ "type": "array",
7569
+ "items": {
7570
+ "type": "object",
7571
+ "required": [
7572
+ "pattern",
7573
+ "action"
7574
+ ],
7575
+ "properties": {
7576
+ "pattern": {
7577
+ "type": "string"
7578
+ },
7579
+ "action": {
7580
+ "type": "string"
7581
+ },
7582
+ "description": {
7583
+ "type": "string"
7584
+ }
6549
7585
  }
6550
- ]
7586
+ }
6551
7587
  }
6552
7588
  }
6553
7589
  }
@@ -6557,22 +7593,62 @@
6557
7593
  }
6558
7594
  }
6559
7595
  },
6560
- "/app/{id}/repo/config": {
6561
- "get": {
6562
- "operationId": "app/repo_config",
6563
- "summary": "Get effective repository build config",
7596
+ "/app/{app_id}/waf/rules": {
7597
+ "post": {
7598
+ "operationId": "app/waf/addRule",
7599
+ "summary": "Add App WAF Rule",
6564
7600
  "tags": [
6565
- "apps",
6566
- "github"
7601
+ "apps"
6567
7602
  ],
6568
- "description": "Effective build configuration read from the repository: the monorepo Root Directory and its source (platform override or the repo's faable.json).",
7603
+ "description": "Add a WAF rule to an App",
7604
+ "requestBody": {
7605
+ "required": true,
7606
+ "content": {
7607
+ "application/json": {
7608
+ "schema": {
7609
+ "type": "object",
7610
+ "required": [
7611
+ "pattern",
7612
+ "action"
7613
+ ],
7614
+ "properties": {
7615
+ "pattern": {
7616
+ "type": "string",
7617
+ "description": "RE2 path-regex fragment, e.g. ^/robots\\.txt$"
7618
+ },
7619
+ "action": {
7620
+ "anyOf": [
7621
+ {
7622
+ "type": "string",
7623
+ "enum": [
7624
+ "deny"
7625
+ ]
7626
+ },
7627
+ {
7628
+ "type": "string",
7629
+ "enum": [
7630
+ "sink"
7631
+ ]
7632
+ }
7633
+ ],
7634
+ "description": "deny → 403 at the edge; sink → synthetic 404 from the platform (the app is never woken)"
7635
+ },
7636
+ "description": {
7637
+ "type": "string",
7638
+ "maxLength": 500
7639
+ }
7640
+ }
7641
+ }
7642
+ }
7643
+ }
7644
+ },
6569
7645
  "parameters": [
6570
7646
  {
6571
7647
  "schema": {
6572
7648
  "type": "string"
6573
7649
  },
6574
7650
  "in": "path",
6575
- "name": "id",
7651
+ "name": "app_id",
6576
7652
  "required": true
6577
7653
  }
6578
7654
  ],
@@ -6597,45 +7673,80 @@
6597
7673
  }
6598
7674
  ],
6599
7675
  "responses": {
6600
- "200": {
7676
+ "201": {
6601
7677
  "description": "Default Response",
6602
7678
  "content": {
6603
7679
  "application/json": {
6604
7680
  "schema": {
6605
7681
  "type": "object",
6606
7682
  "required": [
6607
- "root_dir",
6608
- "root_dir_source"
7683
+ "enabled",
7684
+ "platform_profiles",
7685
+ "rules"
6609
7686
  ],
6610
7687
  "properties": {
6611
- "root_dir": {
6612
- "anyOf": [
6613
- {
6614
- "type": "string"
6615
- },
6616
- {
6617
- "type": "null"
7688
+ "enabled": {
7689
+ "type": "boolean"
7690
+ },
7691
+ "platform_profiles": {
7692
+ "type": "array",
7693
+ "items": {
7694
+ "type": "object",
7695
+ "required": [
7696
+ "name",
7697
+ "action",
7698
+ "rule_count"
7699
+ ],
7700
+ "properties": {
7701
+ "name": {
7702
+ "type": "string"
7703
+ },
7704
+ "action": {
7705
+ "type": "string"
7706
+ },
7707
+ "rule_count": {
7708
+ "type": "integer"
7709
+ },
7710
+ "rules": {
7711
+ "type": "array",
7712
+ "items": {
7713
+ "type": "object",
7714
+ "required": [
7715
+ "pattern"
7716
+ ],
7717
+ "properties": {
7718
+ "pattern": {
7719
+ "type": "string"
7720
+ },
7721
+ "description": {
7722
+ "type": "string"
7723
+ }
7724
+ }
7725
+ }
7726
+ }
6618
7727
  }
6619
- ]
7728
+ }
6620
7729
  },
6621
- "root_dir_source": {
6622
- "anyOf": [
6623
- {
6624
- "type": "string",
6625
- "enum": [
6626
- "platform"
6627
- ]
6628
- },
6629
- {
6630
- "type": "string",
6631
- "enum": [
6632
- "faable.json"
6633
- ]
6634
- },
6635
- {
6636
- "type": "null"
7730
+ "rules": {
7731
+ "type": "array",
7732
+ "items": {
7733
+ "type": "object",
7734
+ "required": [
7735
+ "pattern",
7736
+ "action"
7737
+ ],
7738
+ "properties": {
7739
+ "pattern": {
7740
+ "type": "string"
7741
+ },
7742
+ "action": {
7743
+ "type": "string"
7744
+ },
7745
+ "description": {
7746
+ "type": "string"
7747
+ }
6637
7748
  }
6638
- ]
7749
+ }
6639
7750
  }
6640
7751
  }
6641
7752
  }
@@ -6643,17 +7754,14 @@
6643
7754
  }
6644
7755
  }
6645
7756
  }
6646
- }
6647
- },
6648
- "/app/{id}/deploy-mode": {
6649
- "post": {
6650
- "operationId": "app/set_deploy_mode",
6651
- "summary": "Set the deploy mode",
6652
- "tags": [
6653
- "apps",
6654
- "github"
7757
+ },
7758
+ "delete": {
7759
+ "operationId": "app/waf/removeRule",
7760
+ "summary": "Remove App WAF Rule",
7761
+ "tags": [
7762
+ "apps"
6655
7763
  ],
6656
- "description": "Choose how pushes deploy: 'push' = every push deploys directly; 'ci' = deploy once the commit's CI checks pass. Both are platform-managed (webhook) triggers.",
7764
+ "description": "Remove a WAF rule from an App",
6657
7765
  "requestBody": {
6658
7766
  "required": true,
6659
7767
  "content": {
@@ -6661,97 +7769,24 @@
6661
7769
  "schema": {
6662
7770
  "type": "object",
6663
7771
  "required": [
6664
- "mode"
7772
+ "pattern"
6665
7773
  ],
6666
7774
  "properties": {
6667
- "mode": {
6668
- "anyOf": [
6669
- {
6670
- "type": "string",
6671
- "enum": [
6672
- "push"
6673
- ]
6674
- },
6675
- {
6676
- "type": "string",
6677
- "enum": [
6678
- "ci"
6679
- ]
6680
- },
6681
- {
6682
- "type": "string",
6683
- "enum": [
6684
- "workflow"
6685
- ]
6686
- }
6687
- ]
7775
+ "pattern": {
7776
+ "type": "string"
6688
7777
  }
6689
- },
6690
- "additionalProperties": false
6691
- }
6692
- }
6693
- }
6694
- },
6695
- "parameters": [
6696
- {
6697
- "schema": {
6698
- "type": "string"
6699
- },
6700
- "in": "path",
6701
- "name": "id",
6702
- "required": true
6703
- }
6704
- ],
6705
- "security": [
6706
- {
6707
- "faable_user": []
6708
- },
6709
- {
6710
- "faable_cli": []
6711
- },
6712
- {
6713
- "faable_m2m": []
6714
- },
6715
- {
6716
- "faable_machine": []
6717
- },
6718
- {
6719
- "apikey_basic": []
6720
- },
6721
- {
6722
- "apikey": []
6723
- }
6724
- ],
6725
- "responses": {
6726
- "200": {
6727
- "description": "App",
6728
- "content": {
6729
- "application/json": {
6730
- "schema": {
6731
- "$ref": "#/components/schemas/App"
6732
7778
  }
6733
7779
  }
6734
7780
  }
6735
7781
  }
6736
- }
6737
- }
6738
- },
6739
- "/app/{id}/deploy": {
6740
- "post": {
6741
- "operationId": "app/deploy_now",
6742
- "summary": "Deploy the latest commit now",
6743
- "tags": [
6744
- "apps",
6745
- "deployments"
6746
- ],
6747
- "description": "Build and deploy the current head of the deploy branch, without waiting for a push. Same path as a push webhook, including the same-commit dedupe.",
7782
+ },
6748
7783
  "parameters": [
6749
7784
  {
6750
7785
  "schema": {
6751
7786
  "type": "string"
6752
7787
  },
6753
7788
  "in": "path",
6754
- "name": "id",
7789
+ "name": "app_id",
6755
7790
  "required": true
6756
7791
  }
6757
7792
  ],
@@ -6783,22 +7818,73 @@
6783
7818
  "schema": {
6784
7819
  "type": "object",
6785
7820
  "required": [
6786
- "status",
6787
- "commit",
6788
- "branch"
7821
+ "enabled",
7822
+ "platform_profiles",
7823
+ "rules"
6789
7824
  ],
6790
7825
  "properties": {
6791
- "status": {
6792
- "type": "string",
6793
- "enum": [
6794
- "created"
6795
- ]
7826
+ "enabled": {
7827
+ "type": "boolean"
6796
7828
  },
6797
- "commit": {
6798
- "type": "string"
7829
+ "platform_profiles": {
7830
+ "type": "array",
7831
+ "items": {
7832
+ "type": "object",
7833
+ "required": [
7834
+ "name",
7835
+ "action",
7836
+ "rule_count"
7837
+ ],
7838
+ "properties": {
7839
+ "name": {
7840
+ "type": "string"
7841
+ },
7842
+ "action": {
7843
+ "type": "string"
7844
+ },
7845
+ "rule_count": {
7846
+ "type": "integer"
7847
+ },
7848
+ "rules": {
7849
+ "type": "array",
7850
+ "items": {
7851
+ "type": "object",
7852
+ "required": [
7853
+ "pattern"
7854
+ ],
7855
+ "properties": {
7856
+ "pattern": {
7857
+ "type": "string"
7858
+ },
7859
+ "description": {
7860
+ "type": "string"
7861
+ }
7862
+ }
7863
+ }
7864
+ }
7865
+ }
7866
+ }
6799
7867
  },
6800
- "branch": {
6801
- "type": "string"
7868
+ "rules": {
7869
+ "type": "array",
7870
+ "items": {
7871
+ "type": "object",
7872
+ "required": [
7873
+ "pattern",
7874
+ "action"
7875
+ ],
7876
+ "properties": {
7877
+ "pattern": {
7878
+ "type": "string"
7879
+ },
7880
+ "action": {
7881
+ "type": "string"
7882
+ },
7883
+ "description": {
7884
+ "type": "string"
7885
+ }
7886
+ }
7887
+ }
6802
7888
  }
6803
7889
  }
6804
7890
  }
@@ -7033,6 +8119,13 @@
7033
8119
  "type": "string",
7034
8120
  "format": "date-time"
7035
8121
  },
8122
+ "build_started_at": {
8123
+ "type": "string",
8124
+ "format": "date-time"
8125
+ },
8126
+ "build_ms": {
8127
+ "type": "integer"
8128
+ },
7036
8129
  "redeploy_of": {
7037
8130
  "type": "string"
7038
8131
  },
@@ -7169,6 +8262,13 @@
7169
8262
  "type": "string",
7170
8263
  "format": "date-time"
7171
8264
  },
8265
+ "build_started_at": {
8266
+ "type": "string",
8267
+ "format": "date-time"
8268
+ },
8269
+ "build_ms": {
8270
+ "type": "integer"
8271
+ },
7172
8272
  "redeploy_of": {
7173
8273
  "type": "string"
7174
8274
  },
@@ -7327,6 +8427,13 @@
7327
8427
  "type": "string",
7328
8428
  "format": "date-time"
7329
8429
  },
8430
+ "build_started_at": {
8431
+ "type": "string",
8432
+ "format": "date-time"
8433
+ },
8434
+ "build_ms": {
8435
+ "type": "integer"
8436
+ },
7330
8437
  "redeploy_of": {
7331
8438
  "type": "string"
7332
8439
  },
@@ -7461,6 +8568,13 @@
7461
8568
  "type": "string",
7462
8569
  "format": "date-time"
7463
8570
  },
8571
+ "build_started_at": {
8572
+ "type": "string",
8573
+ "format": "date-time"
8574
+ },
8575
+ "build_ms": {
8576
+ "type": "integer"
8577
+ },
7464
8578
  "redeploy_of": {
7465
8579
  "type": "string"
7466
8580
  },
@@ -7498,9 +8612,105 @@
7498
8612
  "type": "string",
7499
8613
  "description": "Deployment updated date"
7500
8614
  }
7501
- },
7502
- "description": "Deployment",
7503
- "additionalProperties": false
8615
+ },
8616
+ "description": "Deployment",
8617
+ "additionalProperties": false
8618
+ }
8619
+ }
8620
+ }
8621
+ }
8622
+ }
8623
+ }
8624
+ },
8625
+ "/deployment/{deployment_id}/logs": {
8626
+ "get": {
8627
+ "operationId": "deployment/get_logs",
8628
+ "summary": "Get deployment build logs",
8629
+ "tags": [
8630
+ "deployments"
8631
+ ],
8632
+ "description": "Get the CLI build/deploy output attached to a deployment",
8633
+ "parameters": [
8634
+ {
8635
+ "schema": {
8636
+ "type": "string"
8637
+ },
8638
+ "in": "path",
8639
+ "name": "deployment_id",
8640
+ "required": true
8641
+ }
8642
+ ],
8643
+ "security": [
8644
+ {
8645
+ "faable_user": []
8646
+ },
8647
+ {
8648
+ "faable_cli": []
8649
+ },
8650
+ {
8651
+ "faable_m2m": []
8652
+ },
8653
+ {
8654
+ "faable_machine": []
8655
+ },
8656
+ {
8657
+ "apikey_basic": []
8658
+ },
8659
+ {
8660
+ "apikey": []
8661
+ }
8662
+ ],
8663
+ "responses": {
8664
+ "200": {
8665
+ "description": "Default Response",
8666
+ "content": {
8667
+ "application/json": {
8668
+ "schema": {
8669
+ "type": "object",
8670
+ "required": [
8671
+ "id",
8672
+ "deployment_id",
8673
+ "app_id",
8674
+ "team"
8675
+ ],
8676
+ "properties": {
8677
+ "id": {
8678
+ "type": "string"
8679
+ },
8680
+ "deployment_id": {
8681
+ "type": "string"
8682
+ },
8683
+ "app_id": {
8684
+ "type": "string"
8685
+ },
8686
+ "team": {
8687
+ "type": "string"
8688
+ },
8689
+ "content": {
8690
+ "type": "string"
8691
+ },
8692
+ "truncated": {
8693
+ "type": "boolean"
8694
+ },
8695
+ "size": {
8696
+ "type": "number"
8697
+ },
8698
+ "runtime_content": {
8699
+ "type": "string"
8700
+ },
8701
+ "runtime_truncated": {
8702
+ "type": "boolean"
8703
+ },
8704
+ "runtime_size": {
8705
+ "type": "number"
8706
+ },
8707
+ "createdAt": {
8708
+ "type": "string"
8709
+ },
8710
+ "updatedAt": {
8711
+ "type": "string"
8712
+ }
8713
+ }
7504
8714
  }
7505
8715
  }
7506
8716
  }
@@ -7508,14 +8718,14 @@
7508
8718
  }
7509
8719
  }
7510
8720
  },
7511
- "/deployment/{deployment_id}/logs": {
7512
- "get": {
7513
- "operationId": "deployment/get_logs",
7514
- "summary": "Get deployment build logs",
8721
+ "/deployment/{deployment_id}/cancel": {
8722
+ "post": {
8723
+ "operationId": "deployment/cancel",
8724
+ "summary": "Cancel a queued or building deployment",
7515
8725
  "tags": [
7516
8726
  "deployments"
7517
8727
  ],
7518
- "description": "Get the CLI build/deploy output attached to a deployment",
8728
+ "description": "Cancel a deployment that has not been handed over to the controller yet (QUEUED or BUILDING)",
7519
8729
  "parameters": [
7520
8730
  {
7521
8731
  "schema": {
@@ -7548,55 +8758,102 @@
7548
8758
  ],
7549
8759
  "responses": {
7550
8760
  "200": {
7551
- "description": "Default Response",
8761
+ "description": "Deployment",
7552
8762
  "content": {
7553
8763
  "application/json": {
7554
8764
  "schema": {
7555
8765
  "type": "object",
7556
8766
  "required": [
7557
8767
  "id",
7558
- "deployment_id",
8768
+ "team",
7559
8769
  "app_id",
7560
- "team"
8770
+ "status",
8771
+ "metadata",
8772
+ "createdAt"
7561
8773
  ],
7562
8774
  "properties": {
7563
8775
  "id": {
7564
- "type": "string"
8776
+ "type": "string",
8777
+ "description": "Deployment ID"
7565
8778
  },
7566
- "deployment_id": {
8779
+ "team": {
7567
8780
  "type": "string"
7568
8781
  },
7569
8782
  "app_id": {
7570
8783
  "type": "string"
7571
8784
  },
7572
- "team": {
8785
+ "image": {
7573
8786
  "type": "string"
7574
8787
  },
7575
- "content": {
8788
+ "release": {
7576
8789
  "type": "string"
7577
8790
  },
7578
- "truncated": {
7579
- "type": "boolean"
8791
+ "github_commit": {
8792
+ "type": "string"
7580
8793
  },
7581
- "size": {
7582
- "type": "number"
8794
+ "github_ref": {
8795
+ "type": "string"
7583
8796
  },
7584
- "runtime_content": {
8797
+ "github_actor": {
7585
8798
  "type": "string"
7586
8799
  },
7587
- "runtime_truncated": {
7588
- "type": "boolean"
8800
+ "github_commit_message": {
8801
+ "type": "string"
7589
8802
  },
7590
- "runtime_size": {
7591
- "type": "number"
8803
+ "artifact_id": {
8804
+ "type": "string"
7592
8805
  },
7593
- "createdAt": {
8806
+ "artifact_ready_at": {
8807
+ "type": "string",
8808
+ "format": "date-time"
8809
+ },
8810
+ "build_started_at": {
8811
+ "type": "string",
8812
+ "format": "date-time"
8813
+ },
8814
+ "build_ms": {
8815
+ "type": "integer"
8816
+ },
8817
+ "redeploy_of": {
7594
8818
  "type": "string"
7595
8819
  },
8820
+ "quota_released_at": {
8821
+ "type": "string",
8822
+ "format": "date-time"
8823
+ },
8824
+ "trigger": {
8825
+ "anyOf": [
8826
+ {
8827
+ "type": "string"
8828
+ },
8829
+ {
8830
+ "type": "null"
8831
+ }
8832
+ ]
8833
+ },
8834
+ "detected": {
8835
+ "$ref": "#/components/schemas/DeploymentDetected"
8836
+ },
8837
+ "status": {
8838
+ "$ref": "#/components/schemas/DeploymentStatus"
8839
+ },
8840
+ "metadata": {
8841
+ "type": "object",
8842
+ "properties": {},
8843
+ "additionalProperties": true,
8844
+ "default": {}
8845
+ },
8846
+ "createdAt": {
8847
+ "type": "string",
8848
+ "description": "Deployment creation date"
8849
+ },
7596
8850
  "updatedAt": {
7597
- "type": "string"
8851
+ "type": "string",
8852
+ "description": "Deployment updated date"
7598
8853
  }
7599
- }
8854
+ },
8855
+ "description": "Deployment",
8856
+ "additionalProperties": false
7600
8857
  }
7601
8858
  }
7602
8859
  }
@@ -8532,190 +9789,6 @@
8532
9789
  }
8533
9790
  }
8534
9791
  },
8535
- "/analyzer/scan": {
8536
- "get": {
8537
- "operationId": "analyzer/listScans",
8538
- "summary": "List analyzer scans",
8539
- "tags": [
8540
- "analyzer"
8541
- ],
8542
- "description": "List analyzer scan results, newest first (superadmin). The abuse-detection corpus + takedown audit trail.",
8543
- "parameters": [
8544
- {
8545
- "schema": {
8546
- "anyOf": [
8547
- {
8548
- "type": "string",
8549
- "enum": [
8550
- "clean"
8551
- ]
8552
- },
8553
- {
8554
- "type": "string",
8555
- "enum": [
8556
- "review"
8557
- ]
8558
- },
8559
- {
8560
- "type": "string",
8561
- "enum": [
8562
- "quarantine"
8563
- ]
8564
- },
8565
- {
8566
- "type": "string",
8567
- "enum": [
8568
- "skipped"
8569
- ]
8570
- }
8571
- ]
8572
- },
8573
- "in": "query",
8574
- "name": "verdict",
8575
- "required": false
8576
- },
8577
- {
8578
- "schema": {
8579
- "type": "string"
8580
- },
8581
- "in": "query",
8582
- "name": "app_id",
8583
- "required": false
8584
- },
8585
- {
8586
- "schema": {
8587
- "type": "string"
8588
- },
8589
- "in": "query",
8590
- "name": "user_id",
8591
- "required": false
8592
- },
8593
- {
8594
- "schema": {
8595
- "type": "integer",
8596
- "minimum": 1,
8597
- "maximum": 200
8598
- },
8599
- "in": "query",
8600
- "name": "limit",
8601
- "required": false
8602
- }
8603
- ],
8604
- "security": [
8605
- {
8606
- "faable_user": []
8607
- },
8608
- {
8609
- "faable_cli": []
8610
- },
8611
- {
8612
- "faable_m2m": []
8613
- },
8614
- {
8615
- "faable_machine": []
8616
- },
8617
- {
8618
- "apikey_basic": []
8619
- },
8620
- {
8621
- "apikey": []
8622
- }
8623
- ],
8624
- "responses": {
8625
- "200": {
8626
- "description": "Default Response"
8627
- }
8628
- }
8629
- }
8630
- },
8631
- "/analyzer/stats": {
8632
- "get": {
8633
- "operationId": "analyzer/stats",
8634
- "summary": "Analyzer stats",
8635
- "tags": [
8636
- "analyzer"
8637
- ],
8638
- "description": "Analyzer detection stats: counts per verdict + top signatures (superadmin).",
8639
- "security": [
8640
- {
8641
- "faable_user": []
8642
- },
8643
- {
8644
- "faable_cli": []
8645
- },
8646
- {
8647
- "faable_m2m": []
8648
- },
8649
- {
8650
- "faable_machine": []
8651
- },
8652
- {
8653
- "apikey_basic": []
8654
- },
8655
- {
8656
- "apikey": []
8657
- }
8658
- ],
8659
- "responses": {
8660
- "200": {
8661
- "description": "Default Response"
8662
- }
8663
- }
8664
- }
8665
- },
8666
- "/analyzer/rescan/{app_id}": {
8667
- "post": {
8668
- "operationId": "analyzer/rescan",
8669
- "summary": "Rescan a deployment",
8670
- "tags": [
8671
- "analyzer"
8672
- ],
8673
- "description": "Re-scan an app's promoted deployment (or ?deployment_id=…). Forces a fresh scan + enforcement; use after a signature update. Superadmin.",
8674
- "parameters": [
8675
- {
8676
- "schema": {
8677
- "type": "string"
8678
- },
8679
- "in": "query",
8680
- "name": "deployment_id",
8681
- "required": false
8682
- },
8683
- {
8684
- "schema": {
8685
- "type": "string"
8686
- },
8687
- "in": "path",
8688
- "name": "app_id",
8689
- "required": true
8690
- }
8691
- ],
8692
- "security": [
8693
- {
8694
- "faable_user": []
8695
- },
8696
- {
8697
- "faable_cli": []
8698
- },
8699
- {
8700
- "faable_m2m": []
8701
- },
8702
- {
8703
- "faable_machine": []
8704
- },
8705
- {
8706
- "apikey_basic": []
8707
- },
8708
- {
8709
- "apikey": []
8710
- }
8711
- ],
8712
- "responses": {
8713
- "200": {
8714
- "description": "Default Response"
8715
- }
8716
- }
8717
- }
8718
- },
8719
9792
  "/usage/summary": {
8720
9793
  "get": {
8721
9794
  "operationId": "usage/summary",