Feat triggers v0.2.2 (#6)
All checks were successful
All checks were successful
Co-authored-by: Jeffrey Smith <jasafpro@gmail.com> Co-committed-by: Jeffrey Smith <jasafpro@gmail.com>
This commit was merged in pull request #6.
This commit is contained in:
@@ -59,6 +59,10 @@ tags:
|
||||
- name: 'Admin: Packages'
|
||||
- name: 'Admin: System'
|
||||
- name: 'Admin: Workflows'
|
||||
- name: Triggers
|
||||
- name: Schedules
|
||||
- name: 'Admin: Triggers'
|
||||
- name: 'Admin: Schedules'
|
||||
|
||||
security:
|
||||
- BearerAuth: []
|
||||
@@ -82,6 +86,56 @@ components:
|
||||
type: string
|
||||
required: [error]
|
||||
|
||||
Trigger:
|
||||
type: object
|
||||
properties:
|
||||
id: { type: string, format: uuid }
|
||||
package_id: { type: string }
|
||||
type: { type: string, enum: [webhook, event] }
|
||||
enabled: { type: boolean }
|
||||
slug: { type: string }
|
||||
event_pattern: { type: string }
|
||||
entry_point: { type: string }
|
||||
config: { type: object }
|
||||
fire_count: { type: integer }
|
||||
last_fire_at: { type: string, format: date-time, nullable: true }
|
||||
last_error: { type: string }
|
||||
created_at: { type: string, format: date-time }
|
||||
updated_at: { type: string, format: date-time }
|
||||
|
||||
ScheduledTask:
|
||||
type: object
|
||||
properties:
|
||||
id: { type: string, format: uuid }
|
||||
name: { type: string }
|
||||
description: { type: string }
|
||||
creator_id: { type: string, format: uuid }
|
||||
run_as: { type: string, enum: [creator, system] }
|
||||
cron_expr: { type: string }
|
||||
next_fire_at: { type: string, format: date-time, nullable: true }
|
||||
last_fire_at: { type: string, format: date-time, nullable: true }
|
||||
enabled: { type: boolean }
|
||||
script: { type: string }
|
||||
template_id: { type: string, nullable: true }
|
||||
template_params: { type: object }
|
||||
fire_count: { type: integer }
|
||||
last_error: { type: string }
|
||||
last_duration_ms: { type: integer, nullable: true }
|
||||
created_at: { type: string, format: date-time }
|
||||
updated_at: { type: string, format: date-time }
|
||||
|
||||
TriggerLog:
|
||||
type: object
|
||||
properties:
|
||||
id: { type: string, format: uuid }
|
||||
trigger_id: { type: string, format: uuid, nullable: true }
|
||||
scheduled_task_id: { type: string, format: uuid, nullable: true }
|
||||
fired_at: { type: string, format: date-time }
|
||||
duration_ms: { type: integer, nullable: true }
|
||||
success: { type: boolean }
|
||||
error: { type: string }
|
||||
output: { type: string }
|
||||
|
||||
TokenResponse:
|
||||
type: object
|
||||
properties:
|
||||
@@ -4205,3 +4259,347 @@ paths:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ErrorResponse'
|
||||
|
||||
# ──────────────────────────────────────────────
|
||||
# Webhook Inbound (v0.2.2)
|
||||
# ──────────────────────────────────────────────
|
||||
/api/v1/hooks/{package_id}/{slug}:
|
||||
post:
|
||||
summary: Inbound webhook trigger
|
||||
description: Public endpoint. HMAC-SHA256 verified via X-Switchboard-Signature header.
|
||||
operationId: webhookInbound
|
||||
tags: [Triggers]
|
||||
security: []
|
||||
parameters:
|
||||
- name: package_id
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: string }
|
||||
- name: slug
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: string }
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema: { type: object }
|
||||
responses:
|
||||
'200':
|
||||
description: Webhook processed
|
||||
content:
|
||||
application/json:
|
||||
schema: { type: object }
|
||||
'401':
|
||||
description: Invalid signature
|
||||
'404':
|
||||
description: Webhook not found
|
||||
|
||||
# ──────────────────────────────────────────────
|
||||
# Scheduled Tasks — User (v0.2.2)
|
||||
# ──────────────────────────────────────────────
|
||||
/api/v1/schedules:
|
||||
get:
|
||||
summary: List my scheduled tasks
|
||||
operationId: listMySchedules
|
||||
tags: [Schedules]
|
||||
responses:
|
||||
'200':
|
||||
description: Schedules list
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
schedules:
|
||||
type: array
|
||||
items: { $ref: '#/components/schemas/ScheduledTask' }
|
||||
post:
|
||||
summary: Create a scheduled task
|
||||
operationId: createSchedule
|
||||
tags: [Schedules]
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
required: [name, cron_expr]
|
||||
properties:
|
||||
name: { type: string }
|
||||
description: { type: string }
|
||||
cron_expr: { type: string, example: '0 9 * * 1-5' }
|
||||
script: { type: string }
|
||||
template_id: { type: string }
|
||||
template_params: { type: object }
|
||||
responses:
|
||||
'201':
|
||||
description: Created
|
||||
content:
|
||||
application/json:
|
||||
schema: { $ref: '#/components/schemas/ScheduledTask' }
|
||||
|
||||
/api/v1/schedules/{id}:
|
||||
get:
|
||||
summary: Get a scheduled task
|
||||
operationId: getSchedule
|
||||
tags: [Schedules]
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/idPath'
|
||||
responses:
|
||||
'200':
|
||||
description: Schedule details
|
||||
content:
|
||||
application/json:
|
||||
schema: { $ref: '#/components/schemas/ScheduledTask' }
|
||||
put:
|
||||
summary: Update a scheduled task
|
||||
operationId: updateSchedule
|
||||
tags: [Schedules]
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/idPath'
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
name: { type: string }
|
||||
description: { type: string }
|
||||
cron_expr: { type: string }
|
||||
script: { type: string }
|
||||
enabled: { type: boolean }
|
||||
responses:
|
||||
'200':
|
||||
description: Updated
|
||||
delete:
|
||||
summary: Delete a scheduled task
|
||||
operationId: deleteSchedule
|
||||
tags: [Schedules]
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/idPath'
|
||||
responses:
|
||||
'200':
|
||||
description: Deleted
|
||||
|
||||
/api/v1/schedules/{id}/run:
|
||||
post:
|
||||
summary: Manually trigger a scheduled task
|
||||
operationId: runSchedule
|
||||
tags: [Schedules]
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/idPath'
|
||||
responses:
|
||||
'202':
|
||||
description: Task queued
|
||||
|
||||
/api/v1/schedules/{id}/logs:
|
||||
get:
|
||||
summary: List execution logs for a scheduled task
|
||||
operationId: listScheduleLogs
|
||||
tags: [Schedules]
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/idPath'
|
||||
- name: limit
|
||||
in: query
|
||||
schema: { type: integer, default: 50 }
|
||||
responses:
|
||||
'200':
|
||||
description: Execution logs
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
logs:
|
||||
type: array
|
||||
items: { $ref: '#/components/schemas/TriggerLog' }
|
||||
|
||||
# ──────────────────────────────────────────────
|
||||
# Admin: Triggers (v0.2.2)
|
||||
# ──────────────────────────────────────────────
|
||||
/api/v1/admin/triggers:
|
||||
get:
|
||||
summary: List all extension triggers
|
||||
operationId: adminListTriggers
|
||||
tags: ['Admin: Triggers']
|
||||
parameters:
|
||||
- name: package_id
|
||||
in: query
|
||||
schema: { type: string }
|
||||
- name: type
|
||||
in: query
|
||||
schema: { type: string, enum: [webhook, event] }
|
||||
- name: enabled
|
||||
in: query
|
||||
schema: { type: string, enum: ['true', 'false'] }
|
||||
- name: limit
|
||||
in: query
|
||||
schema: { type: integer, default: 50 }
|
||||
- name: offset
|
||||
in: query
|
||||
schema: { type: integer, default: 0 }
|
||||
responses:
|
||||
'200':
|
||||
description: Trigger list
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
triggers:
|
||||
type: array
|
||||
items: { $ref: '#/components/schemas/Trigger' }
|
||||
total: { type: integer }
|
||||
|
||||
/api/v1/admin/triggers/{id}:
|
||||
get:
|
||||
summary: Get a single trigger
|
||||
operationId: adminGetTrigger
|
||||
tags: ['Admin: Triggers']
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/idPath'
|
||||
responses:
|
||||
'200':
|
||||
description: Trigger details
|
||||
content:
|
||||
application/json:
|
||||
schema: { $ref: '#/components/schemas/Trigger' }
|
||||
delete:
|
||||
summary: Delete a trigger
|
||||
operationId: adminDeleteTrigger
|
||||
tags: ['Admin: Triggers']
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/idPath'
|
||||
responses:
|
||||
'200':
|
||||
description: Deleted
|
||||
|
||||
/api/v1/admin/triggers/{id}/enable:
|
||||
put:
|
||||
summary: Enable a trigger
|
||||
operationId: adminEnableTrigger
|
||||
tags: ['Admin: Triggers']
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/idPath'
|
||||
responses:
|
||||
'200':
|
||||
description: Enabled
|
||||
|
||||
/api/v1/admin/triggers/{id}/disable:
|
||||
put:
|
||||
summary: Disable a trigger
|
||||
operationId: adminDisableTrigger
|
||||
tags: ['Admin: Triggers']
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/idPath'
|
||||
responses:
|
||||
'200':
|
||||
description: Disabled
|
||||
|
||||
/api/v1/admin/triggers/{id}/logs:
|
||||
get:
|
||||
summary: List trigger execution logs
|
||||
operationId: adminListTriggerLogs
|
||||
tags: ['Admin: Triggers']
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/idPath'
|
||||
- name: limit
|
||||
in: query
|
||||
schema: { type: integer, default: 50 }
|
||||
responses:
|
||||
'200':
|
||||
description: Execution logs
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
logs:
|
||||
type: array
|
||||
items: { $ref: '#/components/schemas/TriggerLog' }
|
||||
|
||||
/api/v1/admin/packages/{id}/triggers:
|
||||
get:
|
||||
summary: List triggers for a package
|
||||
operationId: adminListPackageTriggers
|
||||
tags: ['Admin: Triggers']
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/idPath'
|
||||
responses:
|
||||
'200':
|
||||
description: Package triggers
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
triggers:
|
||||
type: array
|
||||
items: { $ref: '#/components/schemas/Trigger' }
|
||||
|
||||
# ──────────────────────────────────────────────
|
||||
# Admin: Schedules (v0.2.2)
|
||||
# ──────────────────────────────────────────────
|
||||
/api/v1/admin/schedules:
|
||||
get:
|
||||
summary: List all scheduled tasks (admin view)
|
||||
operationId: adminListSchedules
|
||||
tags: ['Admin: Schedules']
|
||||
parameters:
|
||||
- name: creator_id
|
||||
in: query
|
||||
schema: { type: string }
|
||||
- name: enabled
|
||||
in: query
|
||||
schema: { type: string, enum: ['true', 'false'] }
|
||||
- name: limit
|
||||
in: query
|
||||
schema: { type: integer, default: 50 }
|
||||
- name: offset
|
||||
in: query
|
||||
schema: { type: integer, default: 0 }
|
||||
responses:
|
||||
'200':
|
||||
description: Schedules list
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
schedules:
|
||||
type: array
|
||||
items: { $ref: '#/components/schemas/ScheduledTask' }
|
||||
total: { type: integer }
|
||||
|
||||
/api/v1/admin/schedules/{id}/enable:
|
||||
put:
|
||||
summary: Enable a scheduled task
|
||||
operationId: adminEnableSchedule
|
||||
tags: ['Admin: Schedules']
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/idPath'
|
||||
responses:
|
||||
'200':
|
||||
description: Enabled
|
||||
|
||||
/api/v1/admin/schedules/{id}/disable:
|
||||
put:
|
||||
summary: Disable a scheduled task
|
||||
operationId: adminDisableSchedule
|
||||
tags: ['Admin: Schedules']
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/idPath'
|
||||
responses:
|
||||
'200':
|
||||
description: Disabled
|
||||
|
||||
/api/v1/admin/schedules/{id}:
|
||||
delete:
|
||||
summary: Delete a scheduled task
|
||||
operationId: adminDeleteSchedule
|
||||
tags: ['Admin: Schedules']
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/idPath'
|
||||
responses:
|
||||
'200':
|
||||
description: Deleted
|
||||
|
||||
Reference in New Issue
Block a user