steroids-cli 0.4.47
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/LICENSE +21 -0
- package/README.md +640 -0
- package/dist/cli/colors.d.ts +110 -0
- package/dist/cli/colors.d.ts.map +1 -0
- package/dist/cli/colors.js +228 -0
- package/dist/cli/colors.js.map +1 -0
- package/dist/cli/env.d.ts +159 -0
- package/dist/cli/env.d.ts.map +1 -0
- package/dist/cli/env.js +227 -0
- package/dist/cli/env.js.map +1 -0
- package/dist/cli/errors.d.ts +166 -0
- package/dist/cli/errors.d.ts.map +1 -0
- package/dist/cli/errors.js +244 -0
- package/dist/cli/errors.js.map +1 -0
- package/dist/cli/flags.d.ts +75 -0
- package/dist/cli/flags.d.ts.map +1 -0
- package/dist/cli/flags.js +232 -0
- package/dist/cli/flags.js.map +1 -0
- package/dist/cli/help.d.ts +97 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +275 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/index.d.ts +13 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +29 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/interactive.d.ts +58 -0
- package/dist/cli/interactive.d.ts.map +1 -0
- package/dist/cli/interactive.js +127 -0
- package/dist/cli/interactive.js.map +1 -0
- package/dist/cli/output.d.ts +116 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +178 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/commands/about.d.ts +7 -0
- package/dist/commands/about.d.ts.map +1 -0
- package/dist/commands/about.js +259 -0
- package/dist/commands/about.js.map +1 -0
- package/dist/commands/ai.d.ts +6 -0
- package/dist/commands/ai.d.ts.map +1 -0
- package/dist/commands/ai.js +382 -0
- package/dist/commands/ai.js.map +1 -0
- package/dist/commands/backup.d.ts +3 -0
- package/dist/commands/backup.d.ts.map +1 -0
- package/dist/commands/backup.js +528 -0
- package/dist/commands/backup.js.map +1 -0
- package/dist/commands/completion.d.ts +3 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +405 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +665 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/disputes.d.ts +3 -0
- package/dist/commands/disputes.d.ts.map +1 -0
- package/dist/commands/disputes.js +499 -0
- package/dist/commands/disputes.js.map +1 -0
- package/dist/commands/gc.d.ts +3 -0
- package/dist/commands/gc.d.ts.map +1 -0
- package/dist/commands/gc.js +300 -0
- package/dist/commands/gc.js.map +1 -0
- package/dist/commands/git.d.ts +3 -0
- package/dist/commands/git.d.ts.map +1 -0
- package/dist/commands/git.js +458 -0
- package/dist/commands/git.js.map +1 -0
- package/dist/commands/health.d.ts +3 -0
- package/dist/commands/health.d.ts.map +1 -0
- package/dist/commands/health.js +604 -0
- package/dist/commands/health.js.map +1 -0
- package/dist/commands/hooks.d.ts +6 -0
- package/dist/commands/hooks.d.ts.map +1 -0
- package/dist/commands/hooks.js +529 -0
- package/dist/commands/hooks.js.map +1 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +200 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/llm.d.ts +7 -0
- package/dist/commands/llm.d.ts.map +1 -0
- package/dist/commands/llm.js +285 -0
- package/dist/commands/llm.js.map +1 -0
- package/dist/commands/locks.d.ts +3 -0
- package/dist/commands/locks.d.ts.map +1 -0
- package/dist/commands/locks.js +431 -0
- package/dist/commands/locks.js.map +1 -0
- package/dist/commands/logs.d.ts +3 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +487 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/loop-phases.d.ts +11 -0
- package/dist/commands/loop-phases.d.ts.map +1 -0
- package/dist/commands/loop-phases.js +204 -0
- package/dist/commands/loop-phases.js.map +1 -0
- package/dist/commands/loop.d.ts +3 -0
- package/dist/commands/loop.d.ts.map +1 -0
- package/dist/commands/loop.js +396 -0
- package/dist/commands/loop.js.map +1 -0
- package/dist/commands/projects.d.ts +6 -0
- package/dist/commands/projects.d.ts.map +1 -0
- package/dist/commands/projects.js +362 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/purge.d.ts +3 -0
- package/dist/commands/purge.d.ts.map +1 -0
- package/dist/commands/purge.js +516 -0
- package/dist/commands/purge.js.map +1 -0
- package/dist/commands/runners.d.ts +3 -0
- package/dist/commands/runners.d.ts.map +1 -0
- package/dist/commands/runners.js +1076 -0
- package/dist/commands/runners.js.map +1 -0
- package/dist/commands/scan.d.ts +3 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +291 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/sections-commands.d.ts +9 -0
- package/dist/commands/sections-commands.d.ts.map +1 -0
- package/dist/commands/sections-commands.js +282 -0
- package/dist/commands/sections-commands.js.map +1 -0
- package/dist/commands/sections-graph.d.ts +25 -0
- package/dist/commands/sections-graph.d.ts.map +1 -0
- package/dist/commands/sections-graph.js +180 -0
- package/dist/commands/sections-graph.js.map +1 -0
- package/dist/commands/sections.d.ts +3 -0
- package/dist/commands/sections.d.ts.map +1 -0
- package/dist/commands/sections.js +376 -0
- package/dist/commands/sections.js.map +1 -0
- package/dist/commands/stats.d.ts +6 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +324 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/tasks.d.ts +3 -0
- package/dist/commands/tasks.d.ts.map +1 -0
- package/dist/commands/tasks.js +1115 -0
- package/dist/commands/tasks.js.map +1 -0
- package/dist/commands/web.d.ts +7 -0
- package/dist/commands/web.d.ts.map +1 -0
- package/dist/commands/web.js +204 -0
- package/dist/commands/web.js.map +1 -0
- package/dist/config/ai-setup.d.ts +27 -0
- package/dist/config/ai-setup.d.ts.map +1 -0
- package/dist/config/ai-setup.js +432 -0
- package/dist/config/ai-setup.js.map +1 -0
- package/dist/config/browser.d.ts +9 -0
- package/dist/config/browser.d.ts.map +1 -0
- package/dist/config/browser.js +200 -0
- package/dist/config/browser.js.map +1 -0
- package/dist/config/json-schema.d.ts +28 -0
- package/dist/config/json-schema.d.ts.map +1 -0
- package/dist/config/json-schema.js +84 -0
- package/dist/config/json-schema.js.map +1 -0
- package/dist/config/loader.d.ts +152 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +270 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +34 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +437 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/validator.d.ts +32 -0
- package/dist/config/validator.d.ts.map +1 -0
- package/dist/config/validator.js +187 -0
- package/dist/config/validator.js.map +1 -0
- package/dist/database/connection.d.ts +35 -0
- package/dist/database/connection.d.ts.map +1 -0
- package/dist/database/connection.js +208 -0
- package/dist/database/connection.js.map +1 -0
- package/dist/database/queries.d.ts +218 -0
- package/dist/database/queries.d.ts.map +1 -0
- package/dist/database/queries.js +613 -0
- package/dist/database/queries.js.map +1 -0
- package/dist/database/schema.d.ts +8 -0
- package/dist/database/schema.d.ts.map +1 -0
- package/dist/database/schema.js +160 -0
- package/dist/database/schema.js.map +1 -0
- package/dist/disputes/behavior.d.ts +106 -0
- package/dist/disputes/behavior.d.ts.map +1 -0
- package/dist/disputes/behavior.js +150 -0
- package/dist/disputes/behavior.js.map +1 -0
- package/dist/disputes/create.d.ts +59 -0
- package/dist/disputes/create.d.ts.map +1 -0
- package/dist/disputes/create.js +222 -0
- package/dist/disputes/create.js.map +1 -0
- package/dist/disputes/index.d.ts +21 -0
- package/dist/disputes/index.d.ts.map +1 -0
- package/dist/disputes/index.js +76 -0
- package/dist/disputes/index.js.map +1 -0
- package/dist/disputes/markdown.d.ts +41 -0
- package/dist/disputes/markdown.d.ts.map +1 -0
- package/dist/disputes/markdown.js +261 -0
- package/dist/disputes/markdown.js.map +1 -0
- package/dist/disputes/queries.d.ts +83 -0
- package/dist/disputes/queries.d.ts.map +1 -0
- package/dist/disputes/queries.js +180 -0
- package/dist/disputes/queries.js.map +1 -0
- package/dist/disputes/resolve.d.ts +57 -0
- package/dist/disputes/resolve.d.ts.map +1 -0
- package/dist/disputes/resolve.js +171 -0
- package/dist/disputes/resolve.js.map +1 -0
- package/dist/disputes/stale.d.ts +98 -0
- package/dist/disputes/stale.d.ts.map +1 -0
- package/dist/disputes/stale.js +205 -0
- package/dist/disputes/stale.js.map +1 -0
- package/dist/disputes/types.d.ts +92 -0
- package/dist/disputes/types.d.ts.map +1 -0
- package/dist/disputes/types.js +100 -0
- package/dist/disputes/types.js.map +1 -0
- package/dist/git/push.d.ts +26 -0
- package/dist/git/push.d.ts.map +1 -0
- package/dist/git/push.js +97 -0
- package/dist/git/push.js.map +1 -0
- package/dist/git/status.d.ts +61 -0
- package/dist/git/status.d.ts.map +1 -0
- package/dist/git/status.js +251 -0
- package/dist/git/status.js.map +1 -0
- package/dist/hooks/events.d.ts +72 -0
- package/dist/hooks/events.d.ts.map +1 -0
- package/dist/hooks/events.js +120 -0
- package/dist/hooks/events.js.map +1 -0
- package/dist/hooks/index.d.ts +19 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +48 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/integration.d.ts +69 -0
- package/dist/hooks/integration.d.ts.map +1 -0
- package/dist/hooks/integration.js +179 -0
- package/dist/hooks/integration.js.map +1 -0
- package/dist/hooks/merge.d.ts +115 -0
- package/dist/hooks/merge.d.ts.map +1 -0
- package/dist/hooks/merge.js +161 -0
- package/dist/hooks/merge.js.map +1 -0
- package/dist/hooks/orchestrator.d.ts +115 -0
- package/dist/hooks/orchestrator.d.ts.map +1 -0
- package/dist/hooks/orchestrator.js +226 -0
- package/dist/hooks/orchestrator.js.map +1 -0
- package/dist/hooks/payload.d.ts +294 -0
- package/dist/hooks/payload.d.ts.map +1 -0
- package/dist/hooks/payload.js +267 -0
- package/dist/hooks/payload.js.map +1 -0
- package/dist/hooks/script-runner.d.ts +63 -0
- package/dist/hooks/script-runner.d.ts.map +1 -0
- package/dist/hooks/script-runner.js +221 -0
- package/dist/hooks/script-runner.js.map +1 -0
- package/dist/hooks/templates.d.ts +104 -0
- package/dist/hooks/templates.d.ts.map +1 -0
- package/dist/hooks/templates.js +327 -0
- package/dist/hooks/templates.js.map +1 -0
- package/dist/hooks/webhook-runner.d.ts +69 -0
- package/dist/hooks/webhook-runner.d.ts.map +1 -0
- package/dist/hooks/webhook-runner.js +208 -0
- package/dist/hooks/webhook-runner.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +281 -0
- package/dist/index.js.map +1 -0
- package/dist/locking/cleanup.d.ts +70 -0
- package/dist/locking/cleanup.d.ts.map +1 -0
- package/dist/locking/cleanup.js +157 -0
- package/dist/locking/cleanup.js.map +1 -0
- package/dist/locking/queries.d.ts +116 -0
- package/dist/locking/queries.d.ts.map +1 -0
- package/dist/locking/queries.js +255 -0
- package/dist/locking/queries.js.map +1 -0
- package/dist/locking/section-lock.d.ts +74 -0
- package/dist/locking/section-lock.d.ts.map +1 -0
- package/dist/locking/section-lock.js +207 -0
- package/dist/locking/section-lock.js.map +1 -0
- package/dist/locking/task-lock.d.ts +92 -0
- package/dist/locking/task-lock.d.ts.map +1 -0
- package/dist/locking/task-lock.js +246 -0
- package/dist/locking/task-lock.js.map +1 -0
- package/dist/migrations/index.d.ts +7 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +37 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/migrations/manifest.d.ts +92 -0
- package/dist/migrations/manifest.d.ts.map +1 -0
- package/dist/migrations/manifest.js +270 -0
- package/dist/migrations/manifest.js.map +1 -0
- package/dist/migrations/runner.d.ts +84 -0
- package/dist/migrations/runner.d.ts.map +1 -0
- package/dist/migrations/runner.js +351 -0
- package/dist/migrations/runner.js.map +1 -0
- package/dist/orchestrator/coder.d.ts +32 -0
- package/dist/orchestrator/coder.d.ts.map +1 -0
- package/dist/orchestrator/coder.js +174 -0
- package/dist/orchestrator/coder.js.map +1 -0
- package/dist/orchestrator/coordinator.d.ts +28 -0
- package/dist/orchestrator/coordinator.d.ts.map +1 -0
- package/dist/orchestrator/coordinator.js +256 -0
- package/dist/orchestrator/coordinator.js.map +1 -0
- package/dist/orchestrator/reviewer.d.ts +35 -0
- package/dist/orchestrator/reviewer.d.ts.map +1 -0
- package/dist/orchestrator/reviewer.js +241 -0
- package/dist/orchestrator/reviewer.js.map +1 -0
- package/dist/orchestrator/task-selector.d.ts +102 -0
- package/dist/orchestrator/task-selector.d.ts.map +1 -0
- package/dist/orchestrator/task-selector.js +341 -0
- package/dist/orchestrator/task-selector.js.map +1 -0
- package/dist/prompts/coder.d.ts +36 -0
- package/dist/prompts/coder.d.ts.map +1 -0
- package/dist/prompts/coder.js +315 -0
- package/dist/prompts/coder.js.map +1 -0
- package/dist/prompts/prompt-helpers.d.ts +51 -0
- package/dist/prompts/prompt-helpers.d.ts.map +1 -0
- package/dist/prompts/prompt-helpers.js +312 -0
- package/dist/prompts/prompt-helpers.js.map +1 -0
- package/dist/prompts/reviewer.d.ts +40 -0
- package/dist/prompts/reviewer.d.ts.map +1 -0
- package/dist/prompts/reviewer.js +438 -0
- package/dist/prompts/reviewer.js.map +1 -0
- package/dist/providers/api-models.d.ts +65 -0
- package/dist/providers/api-models.d.ts.map +1 -0
- package/dist/providers/api-models.js +323 -0
- package/dist/providers/api-models.js.map +1 -0
- package/dist/providers/claude.d.ts +53 -0
- package/dist/providers/claude.d.ts.map +1 -0
- package/dist/providers/claude.js +229 -0
- package/dist/providers/claude.js.map +1 -0
- package/dist/providers/codex.d.ts +53 -0
- package/dist/providers/codex.d.ts.map +1 -0
- package/dist/providers/codex.js +214 -0
- package/dist/providers/codex.js.map +1 -0
- package/dist/providers/gemini.d.ts +58 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +242 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/index.d.ts +13 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +49 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/interface.d.ts +173 -0
- package/dist/providers/interface.d.ts.map +1 -0
- package/dist/providers/interface.js +96 -0
- package/dist/providers/interface.js.map +1 -0
- package/dist/providers/invocation-logger.d.ts +114 -0
- package/dist/providers/invocation-logger.d.ts.map +1 -0
- package/dist/providers/invocation-logger.js +298 -0
- package/dist/providers/invocation-logger.js.map +1 -0
- package/dist/providers/openai.d.ts +53 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +232 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/registry.d.ts +100 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +178 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/runners/activity-log.d.ts +65 -0
- package/dist/runners/activity-log.d.ts.map +1 -0
- package/dist/runners/activity-log.js +148 -0
- package/dist/runners/activity-log.js.map +1 -0
- package/dist/runners/cron.d.ts +26 -0
- package/dist/runners/cron.d.ts.map +1 -0
- package/dist/runners/cron.js +176 -0
- package/dist/runners/cron.js.map +1 -0
- package/dist/runners/daemon.d.ts +71 -0
- package/dist/runners/daemon.d.ts.map +1 -0
- package/dist/runners/daemon.js +245 -0
- package/dist/runners/daemon.js.map +1 -0
- package/dist/runners/global-db.d.ts +31 -0
- package/dist/runners/global-db.d.ts.map +1 -0
- package/dist/runners/global-db.js +230 -0
- package/dist/runners/global-db.js.map +1 -0
- package/dist/runners/hang-detector.d.ts +38 -0
- package/dist/runners/hang-detector.d.ts.map +1 -0
- package/dist/runners/hang-detector.js +136 -0
- package/dist/runners/hang-detector.js.map +1 -0
- package/dist/runners/heartbeat.d.ts +39 -0
- package/dist/runners/heartbeat.d.ts.map +1 -0
- package/dist/runners/heartbeat.js +79 -0
- package/dist/runners/heartbeat.js.map +1 -0
- package/dist/runners/lock.d.ts +47 -0
- package/dist/runners/lock.d.ts.map +1 -0
- package/dist/runners/lock.js +150 -0
- package/dist/runners/lock.js.map +1 -0
- package/dist/runners/orchestrator-loop.d.ts +20 -0
- package/dist/runners/orchestrator-loop.d.ts.map +1 -0
- package/dist/runners/orchestrator-loop.js +285 -0
- package/dist/runners/orchestrator-loop.js.map +1 -0
- package/dist/runners/projects.d.ts +96 -0
- package/dist/runners/projects.d.ts.map +1 -0
- package/dist/runners/projects.js +255 -0
- package/dist/runners/projects.js.map +1 -0
- package/dist/runners/wakeup.d.ts +34 -0
- package/dist/runners/wakeup.d.ts.map +1 -0
- package/dist/runners/wakeup.js +291 -0
- package/dist/runners/wakeup.js.map +1 -0
- package/migrations/001_initial_schema.sql +106 -0
- package/migrations/002_add_commit_sha.sql +12 -0
- package/migrations/003_add_section_priority.sql +13 -0
- package/migrations/004_add_section_dependencies.sql +18 -0
- package/migrations/005_add_audit_actor_model.sql +10 -0
- package/migrations/006_add_task_invocations.sql +33 -0
- package/migrations/007_add_file_anchor.sql +14 -0
- package/migrations/manifest.json +62 -0
- package/package.json +49 -0
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Template Variable Parser
|
|
4
|
+
*
|
|
5
|
+
* Parses and resolves template variables in hook configurations.
|
|
6
|
+
* Supports {{variable}} syntax for hook payloads and ${VAR} for environment variables.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.parseTemplate = parseTemplate;
|
|
10
|
+
exports.parseTemplateObject = parseTemplateObject;
|
|
11
|
+
exports.resolveEnvVars = resolveEnvVars;
|
|
12
|
+
exports.resolveVariable = resolveVariable;
|
|
13
|
+
exports.createTemplateContext = createTemplateContext;
|
|
14
|
+
exports.getAvailableVariables = getAvailableVariables;
|
|
15
|
+
exports.validateTemplate = validateTemplate;
|
|
16
|
+
/**
|
|
17
|
+
* Template variable pattern: {{variable.name}}
|
|
18
|
+
*/
|
|
19
|
+
const TEMPLATE_VAR_PATTERN = /\{\{([^}]+)\}\}/g;
|
|
20
|
+
/**
|
|
21
|
+
* Environment variable pattern: ${VAR_NAME}
|
|
22
|
+
*/
|
|
23
|
+
const ENV_VAR_PATTERN = /\$\{([^}]+)\}/g;
|
|
24
|
+
/**
|
|
25
|
+
* Parse template variables in a string
|
|
26
|
+
*
|
|
27
|
+
* @param template - String containing {{variable}} placeholders
|
|
28
|
+
* @param context - Context for variable resolution
|
|
29
|
+
* @returns Parsed string with variables replaced
|
|
30
|
+
*/
|
|
31
|
+
function parseTemplate(template, context) {
|
|
32
|
+
// First, resolve environment variables
|
|
33
|
+
let result = resolveEnvVars(template);
|
|
34
|
+
// Then resolve template variables
|
|
35
|
+
result = result.replace(TEMPLATE_VAR_PATTERN, (match, varPath) => {
|
|
36
|
+
const value = resolveVariable(varPath.trim(), context);
|
|
37
|
+
return value !== undefined ? String(value) : match;
|
|
38
|
+
});
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Parse template variables in an object (recursively)
|
|
43
|
+
*
|
|
44
|
+
* @param obj - Object containing template strings
|
|
45
|
+
* @param context - Context for variable resolution
|
|
46
|
+
* @returns New object with templates parsed
|
|
47
|
+
*/
|
|
48
|
+
function parseTemplateObject(obj, context) {
|
|
49
|
+
if (typeof obj === 'string') {
|
|
50
|
+
return parseTemplate(obj, context);
|
|
51
|
+
}
|
|
52
|
+
if (Array.isArray(obj)) {
|
|
53
|
+
return obj.map((item) => parseTemplateObject(item, context));
|
|
54
|
+
}
|
|
55
|
+
if (obj && typeof obj === 'object') {
|
|
56
|
+
const result = {};
|
|
57
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
58
|
+
result[key] = parseTemplateObject(value, context);
|
|
59
|
+
}
|
|
60
|
+
return result;
|
|
61
|
+
}
|
|
62
|
+
return obj;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Resolve environment variables (${VAR_NAME})
|
|
66
|
+
*
|
|
67
|
+
* @param text - String containing ${VAR} placeholders
|
|
68
|
+
* @returns String with env vars replaced
|
|
69
|
+
*/
|
|
70
|
+
function resolveEnvVars(text) {
|
|
71
|
+
return text.replace(ENV_VAR_PATTERN, (match, varName) => {
|
|
72
|
+
const envValue = process.env[varName.trim()];
|
|
73
|
+
return envValue !== undefined ? envValue : match;
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Resolve a single template variable path
|
|
78
|
+
*
|
|
79
|
+
* @param path - Variable path (e.g., "task.title", "project.name")
|
|
80
|
+
* @param context - Template context
|
|
81
|
+
* @returns Resolved value or undefined
|
|
82
|
+
*/
|
|
83
|
+
function resolveVariable(path, context) {
|
|
84
|
+
const parts = path.split('.');
|
|
85
|
+
// Meta variables (top-level)
|
|
86
|
+
if (parts.length === 1) {
|
|
87
|
+
switch (parts[0]) {
|
|
88
|
+
case 'event':
|
|
89
|
+
return context.event;
|
|
90
|
+
case 'timestamp':
|
|
91
|
+
return context.timestamp;
|
|
92
|
+
default:
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// Nested variables
|
|
97
|
+
const [category, ...rest] = parts;
|
|
98
|
+
switch (category) {
|
|
99
|
+
case 'task':
|
|
100
|
+
return resolveTaskVariable(rest, context.task);
|
|
101
|
+
case 'section':
|
|
102
|
+
return resolveSectionVariable(rest, context.section);
|
|
103
|
+
case 'project':
|
|
104
|
+
return resolveProjectVariable(rest, context.project);
|
|
105
|
+
case 'health':
|
|
106
|
+
return resolveHealthVariable(rest, context.health);
|
|
107
|
+
case 'dispute':
|
|
108
|
+
return resolveDisputeVariable(rest, context.dispute);
|
|
109
|
+
default:
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Resolve task.* variables
|
|
115
|
+
*/
|
|
116
|
+
function resolveTaskVariable(path, task) {
|
|
117
|
+
if (!task)
|
|
118
|
+
return undefined;
|
|
119
|
+
const key = path[0];
|
|
120
|
+
switch (key) {
|
|
121
|
+
case 'id':
|
|
122
|
+
return task.id;
|
|
123
|
+
case 'title':
|
|
124
|
+
return task.title;
|
|
125
|
+
case 'status':
|
|
126
|
+
return task.status;
|
|
127
|
+
case 'section':
|
|
128
|
+
return task.section ?? undefined;
|
|
129
|
+
case 'sectionId':
|
|
130
|
+
return task.sectionId ?? undefined;
|
|
131
|
+
default:
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Resolve section.* variables
|
|
137
|
+
*/
|
|
138
|
+
function resolveSectionVariable(path, section) {
|
|
139
|
+
if (!section)
|
|
140
|
+
return undefined;
|
|
141
|
+
const key = path[0];
|
|
142
|
+
switch (key) {
|
|
143
|
+
case 'id':
|
|
144
|
+
return section.id;
|
|
145
|
+
case 'name':
|
|
146
|
+
return section.name;
|
|
147
|
+
default:
|
|
148
|
+
return undefined;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Resolve project.* variables
|
|
153
|
+
*/
|
|
154
|
+
function resolveProjectVariable(path, project) {
|
|
155
|
+
if (!project)
|
|
156
|
+
return undefined;
|
|
157
|
+
const key = path[0];
|
|
158
|
+
switch (key) {
|
|
159
|
+
case 'name':
|
|
160
|
+
return project.name;
|
|
161
|
+
case 'path':
|
|
162
|
+
return project.path;
|
|
163
|
+
default:
|
|
164
|
+
return undefined;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Resolve health.* variables
|
|
169
|
+
*/
|
|
170
|
+
function resolveHealthVariable(path, health) {
|
|
171
|
+
if (!health)
|
|
172
|
+
return undefined;
|
|
173
|
+
const key = path[0];
|
|
174
|
+
switch (key) {
|
|
175
|
+
case 'score':
|
|
176
|
+
return health.score;
|
|
177
|
+
case 'previousScore':
|
|
178
|
+
return health.previousScore;
|
|
179
|
+
case 'status':
|
|
180
|
+
return health.status;
|
|
181
|
+
default:
|
|
182
|
+
return undefined;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Resolve dispute.* variables
|
|
187
|
+
*/
|
|
188
|
+
function resolveDisputeVariable(path, dispute) {
|
|
189
|
+
if (!dispute)
|
|
190
|
+
return undefined;
|
|
191
|
+
const key = path[0];
|
|
192
|
+
switch (key) {
|
|
193
|
+
case 'id':
|
|
194
|
+
return dispute.id;
|
|
195
|
+
case 'taskId':
|
|
196
|
+
return dispute.taskId;
|
|
197
|
+
case 'type':
|
|
198
|
+
return dispute.type;
|
|
199
|
+
case 'status':
|
|
200
|
+
return dispute.status;
|
|
201
|
+
default:
|
|
202
|
+
return undefined;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Create template context from hook payload
|
|
207
|
+
*
|
|
208
|
+
* @param payload - Hook event payload
|
|
209
|
+
* @returns Template context for variable resolution
|
|
210
|
+
*/
|
|
211
|
+
function createTemplateContext(payload) {
|
|
212
|
+
const context = {
|
|
213
|
+
event: payload.event,
|
|
214
|
+
timestamp: payload.timestamp,
|
|
215
|
+
project: payload.project,
|
|
216
|
+
};
|
|
217
|
+
// Add event-specific data
|
|
218
|
+
switch (payload.event) {
|
|
219
|
+
case 'task.created':
|
|
220
|
+
case 'task.updated':
|
|
221
|
+
case 'task.completed':
|
|
222
|
+
case 'task.failed':
|
|
223
|
+
context.task = {
|
|
224
|
+
id: payload.task.id,
|
|
225
|
+
title: payload.task.title,
|
|
226
|
+
status: payload.task.status,
|
|
227
|
+
section: payload.task.section,
|
|
228
|
+
sectionId: payload.task.sectionId,
|
|
229
|
+
};
|
|
230
|
+
break;
|
|
231
|
+
case 'section.completed':
|
|
232
|
+
context.section = {
|
|
233
|
+
id: payload.section.id,
|
|
234
|
+
name: payload.section.name,
|
|
235
|
+
};
|
|
236
|
+
break;
|
|
237
|
+
case 'health.changed':
|
|
238
|
+
case 'health.critical':
|
|
239
|
+
context.health = {
|
|
240
|
+
score: payload.health.score,
|
|
241
|
+
previousScore: payload.health.previousScore,
|
|
242
|
+
status: payload.health.status,
|
|
243
|
+
};
|
|
244
|
+
break;
|
|
245
|
+
case 'dispute.created':
|
|
246
|
+
case 'dispute.resolved':
|
|
247
|
+
context.dispute = {
|
|
248
|
+
id: payload.dispute.id,
|
|
249
|
+
taskId: payload.dispute.taskId,
|
|
250
|
+
type: payload.dispute.type,
|
|
251
|
+
status: payload.dispute.status,
|
|
252
|
+
};
|
|
253
|
+
context.task = {
|
|
254
|
+
id: payload.task.id,
|
|
255
|
+
title: payload.task.title,
|
|
256
|
+
status: payload.task.status,
|
|
257
|
+
section: payload.task.section,
|
|
258
|
+
sectionId: payload.task.sectionId,
|
|
259
|
+
};
|
|
260
|
+
break;
|
|
261
|
+
}
|
|
262
|
+
return context;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Get all available variables for a given event type
|
|
266
|
+
*
|
|
267
|
+
* @param event - Event name
|
|
268
|
+
* @returns List of available variable paths
|
|
269
|
+
*/
|
|
270
|
+
function getAvailableVariables(event) {
|
|
271
|
+
const baseVars = ['event', 'timestamp', 'project.name', 'project.path'];
|
|
272
|
+
if (event.startsWith('task.')) {
|
|
273
|
+
return [
|
|
274
|
+
...baseVars,
|
|
275
|
+
'task.id',
|
|
276
|
+
'task.title',
|
|
277
|
+
'task.status',
|
|
278
|
+
'task.section',
|
|
279
|
+
'task.sectionId',
|
|
280
|
+
];
|
|
281
|
+
}
|
|
282
|
+
if (event === 'section.completed') {
|
|
283
|
+
return [...baseVars, 'section.id', 'section.name'];
|
|
284
|
+
}
|
|
285
|
+
if (event === 'project.completed') {
|
|
286
|
+
return baseVars;
|
|
287
|
+
}
|
|
288
|
+
if (event.startsWith('health.')) {
|
|
289
|
+
return [...baseVars, 'health.score', 'health.previousScore', 'health.status'];
|
|
290
|
+
}
|
|
291
|
+
if (event.startsWith('dispute.')) {
|
|
292
|
+
return [
|
|
293
|
+
...baseVars,
|
|
294
|
+
'dispute.id',
|
|
295
|
+
'dispute.taskId',
|
|
296
|
+
'dispute.type',
|
|
297
|
+
'dispute.status',
|
|
298
|
+
'task.id',
|
|
299
|
+
'task.title',
|
|
300
|
+
'task.status',
|
|
301
|
+
];
|
|
302
|
+
}
|
|
303
|
+
return baseVars;
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Validate that all template variables in a string are valid for the event
|
|
307
|
+
*
|
|
308
|
+
* @param template - Template string
|
|
309
|
+
* @param event - Event name
|
|
310
|
+
* @returns Validation result with invalid variables
|
|
311
|
+
*/
|
|
312
|
+
function validateTemplate(template, event) {
|
|
313
|
+
const availableVars = getAvailableVariables(event);
|
|
314
|
+
const invalidVars = [];
|
|
315
|
+
const matches = template.matchAll(TEMPLATE_VAR_PATTERN);
|
|
316
|
+
for (const match of matches) {
|
|
317
|
+
const varPath = match[1].trim();
|
|
318
|
+
if (!availableVars.includes(varPath)) {
|
|
319
|
+
invalidVars.push(varPath);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
return {
|
|
323
|
+
valid: invalidVars.length === 0,
|
|
324
|
+
invalidVars,
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/hooks/templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Webhook Hook Runner
|
|
3
|
+
*
|
|
4
|
+
* Sends HTTP requests as hooks with retry support.
|
|
5
|
+
* Handles templated URLs, headers, and body content.
|
|
6
|
+
*/
|
|
7
|
+
import type { HookPayload } from './payload.js';
|
|
8
|
+
/**
|
|
9
|
+
* HTTP methods supported by webhooks
|
|
10
|
+
*/
|
|
11
|
+
export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
|
|
12
|
+
/**
|
|
13
|
+
* Webhook hook configuration
|
|
14
|
+
*/
|
|
15
|
+
export interface WebhookHookConfig {
|
|
16
|
+
/** Hook name (for logging) */
|
|
17
|
+
name: string;
|
|
18
|
+
/** Webhook URL (supports templates) */
|
|
19
|
+
url: string;
|
|
20
|
+
/** HTTP method (default POST) */
|
|
21
|
+
method?: HttpMethod;
|
|
22
|
+
/** HTTP headers (supports templates and env vars) */
|
|
23
|
+
headers?: Record<string, string>;
|
|
24
|
+
/** Request body (supports templates and env vars) */
|
|
25
|
+
body?: Record<string, unknown> | string;
|
|
26
|
+
/** Timeout in seconds (default 30) */
|
|
27
|
+
timeout?: number;
|
|
28
|
+
/** Number of retries on failure (default 0) */
|
|
29
|
+
retry?: number;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Webhook execution result
|
|
33
|
+
*/
|
|
34
|
+
export interface WebhookResult {
|
|
35
|
+
/** Whether execution was successful */
|
|
36
|
+
success: boolean;
|
|
37
|
+
/** HTTP status code */
|
|
38
|
+
statusCode: number | null;
|
|
39
|
+
/** Response body */
|
|
40
|
+
responseBody: string;
|
|
41
|
+
/** Execution time in milliseconds */
|
|
42
|
+
duration: number;
|
|
43
|
+
/** Number of retry attempts made */
|
|
44
|
+
retries: number;
|
|
45
|
+
/** Error message if failed */
|
|
46
|
+
error?: string;
|
|
47
|
+
/** Whether request timed out */
|
|
48
|
+
timedOut?: boolean;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Parse timeout string (e.g., "30s", "5m") to milliseconds
|
|
52
|
+
*/
|
|
53
|
+
export declare function parseTimeout(timeout: string | number | undefined): number;
|
|
54
|
+
/**
|
|
55
|
+
* Execute a webhook hook
|
|
56
|
+
*
|
|
57
|
+
* @param config - Webhook hook configuration
|
|
58
|
+
* @param payload - Hook event payload for template resolution
|
|
59
|
+
* @returns Promise resolving to webhook result
|
|
60
|
+
*/
|
|
61
|
+
export declare function executeWebhook(config: WebhookHookConfig, payload: HookPayload): Promise<WebhookResult>;
|
|
62
|
+
/**
|
|
63
|
+
* Validate webhook hook configuration
|
|
64
|
+
*/
|
|
65
|
+
export declare function validateWebhookConfig(config: WebhookHookConfig): {
|
|
66
|
+
valid: boolean;
|
|
67
|
+
errors: string[];
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=webhook-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-runner.d.ts","sourceRoot":"","sources":["../../src/hooks/webhook-runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,iCAAiC;IACjC,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;IACxC,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,uBAAuB;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,oBAAoB;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CA2BzE;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,aAAa,CAAC,CA6CxB;AAyGD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,GAAG;IAChE,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAkCA"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Webhook Hook Runner
|
|
4
|
+
*
|
|
5
|
+
* Sends HTTP requests as hooks with retry support.
|
|
6
|
+
* Handles templated URLs, headers, and body content.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.parseTimeout = parseTimeout;
|
|
10
|
+
exports.executeWebhook = executeWebhook;
|
|
11
|
+
exports.validateWebhookConfig = validateWebhookConfig;
|
|
12
|
+
const templates_js_1 = require("./templates.js");
|
|
13
|
+
/**
|
|
14
|
+
* Parse timeout string (e.g., "30s", "5m") to milliseconds
|
|
15
|
+
*/
|
|
16
|
+
function parseTimeout(timeout) {
|
|
17
|
+
if (timeout === undefined) {
|
|
18
|
+
return 30000; // 30 seconds default
|
|
19
|
+
}
|
|
20
|
+
if (typeof timeout === 'number') {
|
|
21
|
+
return timeout * 1000; // Convert seconds to ms
|
|
22
|
+
}
|
|
23
|
+
const match = timeout.match(/^(\d+)(s|m|h)?$/);
|
|
24
|
+
if (!match) {
|
|
25
|
+
throw new Error(`Invalid timeout format: ${timeout}. Use format like "30s", "5m", "1h"`);
|
|
26
|
+
}
|
|
27
|
+
const value = parseInt(match[1], 10);
|
|
28
|
+
const unit = match[2] || 's';
|
|
29
|
+
switch (unit) {
|
|
30
|
+
case 's':
|
|
31
|
+
return value * 1000;
|
|
32
|
+
case 'm':
|
|
33
|
+
return value * 60 * 1000;
|
|
34
|
+
case 'h':
|
|
35
|
+
return value * 60 * 60 * 1000;
|
|
36
|
+
default:
|
|
37
|
+
return 30000;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Execute a webhook hook
|
|
42
|
+
*
|
|
43
|
+
* @param config - Webhook hook configuration
|
|
44
|
+
* @param payload - Hook event payload for template resolution
|
|
45
|
+
* @returns Promise resolving to webhook result
|
|
46
|
+
*/
|
|
47
|
+
async function executeWebhook(config, payload) {
|
|
48
|
+
const startTime = Date.now();
|
|
49
|
+
const maxRetries = config.retry ?? 0;
|
|
50
|
+
let lastError;
|
|
51
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
52
|
+
try {
|
|
53
|
+
const result = await executeWebhookOnce(config, payload, startTime);
|
|
54
|
+
// Success - return result
|
|
55
|
+
if (result.success) {
|
|
56
|
+
return { ...result, retries: attempt };
|
|
57
|
+
}
|
|
58
|
+
// Failed but might retry
|
|
59
|
+
lastError = result.error;
|
|
60
|
+
// Don't retry on client errors (4xx)
|
|
61
|
+
if (result.statusCode && result.statusCode >= 400 && result.statusCode < 500) {
|
|
62
|
+
return { ...result, retries: attempt };
|
|
63
|
+
}
|
|
64
|
+
// Wait before retry (exponential backoff)
|
|
65
|
+
if (attempt < maxRetries) {
|
|
66
|
+
await sleep(Math.min(1000 * Math.pow(2, attempt), 10000));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
lastError = error instanceof Error ? error.message : String(error);
|
|
71
|
+
// Wait before retry
|
|
72
|
+
if (attempt < maxRetries) {
|
|
73
|
+
await sleep(Math.min(1000 * Math.pow(2, attempt), 10000));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// All retries exhausted
|
|
78
|
+
return {
|
|
79
|
+
success: false,
|
|
80
|
+
statusCode: null,
|
|
81
|
+
responseBody: '',
|
|
82
|
+
duration: Date.now() - startTime,
|
|
83
|
+
retries: maxRetries,
|
|
84
|
+
error: lastError || 'Unknown error',
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Execute webhook once (single attempt)
|
|
89
|
+
*/
|
|
90
|
+
async function executeWebhookOnce(config, payload, startTime) {
|
|
91
|
+
try {
|
|
92
|
+
// Create template context from payload
|
|
93
|
+
const context = (0, templates_js_1.createTemplateContext)(payload);
|
|
94
|
+
// Parse URL (resolve templates and env vars)
|
|
95
|
+
const url = (0, templates_js_1.parseTemplate)(config.url, context);
|
|
96
|
+
// Parse headers
|
|
97
|
+
const headers = config.headers
|
|
98
|
+
? (0, templates_js_1.parseTemplateObject)(config.headers, context)
|
|
99
|
+
: {};
|
|
100
|
+
// Parse body
|
|
101
|
+
let body;
|
|
102
|
+
if (config.body) {
|
|
103
|
+
if (typeof config.body === 'string') {
|
|
104
|
+
body = (0, templates_js_1.parseTemplate)(config.body, context);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
const parsedBody = (0, templates_js_1.parseTemplateObject)(config.body, context);
|
|
108
|
+
body = JSON.stringify(parsedBody);
|
|
109
|
+
// Add content-type header if not present
|
|
110
|
+
if (!headers['Content-Type'] && !headers['content-type']) {
|
|
111
|
+
headers['Content-Type'] = 'application/json';
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Parse timeout
|
|
116
|
+
const timeoutMs = parseTimeout(config.timeout);
|
|
117
|
+
// Make request with timeout
|
|
118
|
+
const controller = new AbortController();
|
|
119
|
+
const timeoutHandle = setTimeout(() => controller.abort(), timeoutMs);
|
|
120
|
+
try {
|
|
121
|
+
const response = await fetch(url, {
|
|
122
|
+
method: config.method || 'POST',
|
|
123
|
+
headers,
|
|
124
|
+
body,
|
|
125
|
+
signal: controller.signal,
|
|
126
|
+
});
|
|
127
|
+
clearTimeout(timeoutHandle);
|
|
128
|
+
const responseBody = await response.text();
|
|
129
|
+
const success = response.ok; // 2xx status codes
|
|
130
|
+
return {
|
|
131
|
+
success,
|
|
132
|
+
statusCode: response.status,
|
|
133
|
+
responseBody,
|
|
134
|
+
duration: Date.now() - startTime,
|
|
135
|
+
retries: 0,
|
|
136
|
+
error: !success ? `HTTP ${response.status}: ${response.statusText}` : undefined,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
clearTimeout(timeoutHandle);
|
|
141
|
+
// Check if it was a timeout
|
|
142
|
+
const timedOut = error instanceof Error && error.name === 'AbortError';
|
|
143
|
+
return {
|
|
144
|
+
success: false,
|
|
145
|
+
statusCode: null,
|
|
146
|
+
responseBody: '',
|
|
147
|
+
duration: Date.now() - startTime,
|
|
148
|
+
retries: 0,
|
|
149
|
+
timedOut,
|
|
150
|
+
error: timedOut
|
|
151
|
+
? `Request timed out after ${timeoutMs}ms`
|
|
152
|
+
: error instanceof Error
|
|
153
|
+
? error.message
|
|
154
|
+
: String(error),
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
return {
|
|
160
|
+
success: false,
|
|
161
|
+
statusCode: null,
|
|
162
|
+
responseBody: '',
|
|
163
|
+
duration: Date.now() - startTime,
|
|
164
|
+
retries: 0,
|
|
165
|
+
error: error instanceof Error ? error.message : String(error),
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Sleep for specified milliseconds
|
|
171
|
+
*/
|
|
172
|
+
function sleep(ms) {
|
|
173
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Validate webhook hook configuration
|
|
177
|
+
*/
|
|
178
|
+
function validateWebhookConfig(config) {
|
|
179
|
+
const errors = [];
|
|
180
|
+
if (!config.name) {
|
|
181
|
+
errors.push('Missing required field: name');
|
|
182
|
+
}
|
|
183
|
+
if (!config.url) {
|
|
184
|
+
errors.push('Missing required field: url');
|
|
185
|
+
}
|
|
186
|
+
if (config.method) {
|
|
187
|
+
const validMethods = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'];
|
|
188
|
+
if (!validMethods.includes(config.method)) {
|
|
189
|
+
errors.push(`Invalid HTTP method: ${config.method}. Must be one of: ${validMethods.join(', ')}`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
if (config.timeout !== undefined) {
|
|
193
|
+
try {
|
|
194
|
+
parseTimeout(config.timeout);
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
errors.push(error instanceof Error ? error.message : String(error));
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
if (config.retry !== undefined && (config.retry < 0 || config.retry > 10)) {
|
|
201
|
+
errors.push('Retry count must be between 0 and 10');
|
|
202
|
+
}
|
|
203
|
+
return {
|
|
204
|
+
valid: errors.length === 0,
|
|
205
|
+
errors,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=webhook-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-runner.js","sourceRoot":"","sources":["../../src/hooks/webhook-runner.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG"}
|