mirror of
https://github.com/hatchet-dev/hatchet.git
synced 2026-04-21 09:19:32 -05:00
[Go] Feat: Webhooks feature client for the Go SDK (#2792)
* feat: webhooks feature client * feat: add webhook client * feat: add v1 webhook client * feat: example * fix: webhook client impl * fix: example + error handling + other client * fix: missing webhook resources * chore: gen
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
V1WebhookGetDeleteReceiveUpdate:
|
||||
get:
|
||||
x-resources: ["tenant", "v1-webhook"]
|
||||
description: Get a webhook by its name
|
||||
operationId: v1-webhook:get
|
||||
x-enable-rate-limiting: true
|
||||
|
||||
@@ -50,7 +50,7 @@ func (w *V1WebhooksService) V1WebhookCreate(ctx echo.Context, request gen.V1Webh
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to create webhook")
|
||||
return nil, fmt.Errorf("failed to create webhook: %w", err)
|
||||
}
|
||||
|
||||
transformed := transformers.ToV1Webhook(webhook)
|
||||
|
||||
@@ -16282,108 +16282,108 @@ var swaggerSpec = []string{
|
||||
"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",
|
||||
"ZJ5kXB4ksd950+k8f33+/wEAAP//8rXzVA0wAwA=",
|
||||
"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",
|
||||
}
|
||||
|
||||
// GetSwagger returns the content of the embedded swagger specification file
|
||||
|
||||
@@ -0,0 +1,141 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
"github.com/google/uuid"
|
||||
|
||||
"github.com/hatchet-dev/hatchet/pkg/client/rest"
|
||||
hatchet "github.com/hatchet-dev/hatchet/sdks/go"
|
||||
"github.com/hatchet-dev/hatchet/sdks/go/features"
|
||||
)
|
||||
|
||||
func main() {
|
||||
client, err := hatchet.NewClient()
|
||||
if err != nil {
|
||||
log.Fatalf("failed to create hatchet client: %v", err)
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
// Generate a unique suffix for webhook names
|
||||
suffix := uuid.New().String()[:8]
|
||||
|
||||
// List existing webhooks
|
||||
fmt.Println("Listing existing webhooks...")
|
||||
webhooks, err := client.Webhooks().List(ctx, rest.V1WebhookListParams{})
|
||||
if err != nil {
|
||||
log.Fatalf("failed to list webhooks: %v", err)
|
||||
}
|
||||
if webhooks.Rows != nil {
|
||||
fmt.Printf("Found %d existing webhooks\n", len(*webhooks.Rows))
|
||||
}
|
||||
|
||||
// Create a webhook with Basic Auth
|
||||
fmt.Println("\nCreating webhook with Basic Auth...")
|
||||
basicWebhook, err := client.Webhooks().Create(ctx, features.CreateWebhookOpts{
|
||||
Name: fmt.Sprintf("test-basic-webhook-%s", suffix),
|
||||
SourceName: rest.GENERIC,
|
||||
EventKeyExpression: "body.event_type",
|
||||
Auth: features.BasicAuth{
|
||||
Username: "testuser",
|
||||
Password: "testpass",
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatalf("failed to create basic auth webhook: %v", err)
|
||||
}
|
||||
fmt.Printf("Created webhook: %s\n", basicWebhook.Name)
|
||||
|
||||
// Get the webhook
|
||||
fmt.Println("\nGetting webhook...")
|
||||
retrieved, err := client.Webhooks().Get(ctx, basicWebhook.Name)
|
||||
if err != nil {
|
||||
log.Fatalf("failed to get webhook: %v", err)
|
||||
}
|
||||
fmt.Printf("Retrieved webhook: %s, AuthType: %s\n", retrieved.Name, retrieved.AuthType)
|
||||
|
||||
// Update the webhook
|
||||
fmt.Println("\nUpdating webhook...")
|
||||
updated, err := client.Webhooks().Update(ctx, basicWebhook.Name, features.UpdateWebhookOpts{
|
||||
EventKeyExpression: "body.type",
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatalf("failed to update webhook: %v", err)
|
||||
}
|
||||
fmt.Printf("Updated webhook expression to: %s\n", updated.EventKeyExpression)
|
||||
|
||||
// Create a webhook with API Key Auth
|
||||
fmt.Println("\nCreating webhook with API Key Auth...")
|
||||
apiKeyWebhook, err := client.Webhooks().Create(ctx, features.CreateWebhookOpts{
|
||||
Name: fmt.Sprintf("test-apikey-webhook-%s", suffix),
|
||||
SourceName: rest.STRIPE,
|
||||
EventKeyExpression: "body.type",
|
||||
Auth: features.APIKeyAuth{
|
||||
HeaderName: "X-API-Key",
|
||||
APIKey: "sk_test_123",
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatalf("failed to create api key webhook: %v", err)
|
||||
}
|
||||
fmt.Printf("Created webhook: %s\n", apiKeyWebhook.Name)
|
||||
|
||||
// Create a webhook with HMAC Auth
|
||||
fmt.Println("\nCreating webhook with HMAC Auth...")
|
||||
hmacWebhook, err := client.Webhooks().Create(ctx, features.CreateWebhookOpts{
|
||||
Name: fmt.Sprintf("test-hmac-webhook-%s", suffix),
|
||||
SourceName: rest.GITHUB,
|
||||
EventKeyExpression: "headers['X-GitHub-Event']",
|
||||
Auth: features.HMACAuth{
|
||||
SigningSecret: "whsec_test123",
|
||||
SignatureHeaderName: "X-Hub-Signature-256",
|
||||
Algorithm: rest.SHA256,
|
||||
Encoding: rest.HEX,
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatalf("failed to create hmac webhook: %v", err)
|
||||
}
|
||||
fmt.Printf("Created webhook: %s\n", hmacWebhook.Name)
|
||||
|
||||
// List webhooks again to see our new ones
|
||||
fmt.Println("\nListing all webhooks...")
|
||||
webhooks, err = client.Webhooks().List(ctx, rest.V1WebhookListParams{})
|
||||
if err != nil {
|
||||
log.Fatalf("failed to list webhooks: %v", err)
|
||||
}
|
||||
if webhooks.Rows != nil {
|
||||
for _, w := range *webhooks.Rows {
|
||||
fmt.Printf(" - %s (source: %s, auth: %s)\n", w.Name, w.SourceName, w.AuthType)
|
||||
}
|
||||
}
|
||||
|
||||
// Clean up - delete the webhooks we created
|
||||
fmt.Println("\nCleaning up - deleting test webhooks...")
|
||||
|
||||
err = client.Webhooks().Delete(ctx, basicWebhook.Name)
|
||||
if err != nil {
|
||||
log.Printf("failed to delete basic webhook: %v", err)
|
||||
} else {
|
||||
fmt.Printf("Deleted webhook: %s\n", basicWebhook.Name)
|
||||
}
|
||||
|
||||
err = client.Webhooks().Delete(ctx, apiKeyWebhook.Name)
|
||||
if err != nil {
|
||||
log.Printf("failed to delete apikey webhook: %v", err)
|
||||
} else {
|
||||
fmt.Printf("Deleted webhook: %s\n", apiKeyWebhook.Name)
|
||||
}
|
||||
|
||||
err = client.Webhooks().Delete(ctx, hmacWebhook.Name)
|
||||
if err != nil {
|
||||
log.Printf("failed to delete hmac webhook: %v", err)
|
||||
} else {
|
||||
fmt.Printf("Deleted webhook: %s\n", hmacWebhook.Name)
|
||||
}
|
||||
|
||||
fmt.Println("\nDone!")
|
||||
}
|
||||
@@ -38,6 +38,7 @@ type HatchetClient interface {
|
||||
Schedules() features.SchedulesClient
|
||||
Events() v0Client.EventClient
|
||||
Filters() features.FiltersClient
|
||||
Webhooks() features.WebhooksClient
|
||||
|
||||
// TODO Run, RunNoWait, bulk
|
||||
}
|
||||
@@ -55,6 +56,7 @@ type v1HatchetClientImpl struct {
|
||||
crons features.CronsClient
|
||||
schedules features.SchedulesClient
|
||||
filters features.FiltersClient
|
||||
webhooks features.WebhooksClient
|
||||
}
|
||||
|
||||
// NewHatchetClient creates a new V1 Hatchet client with the provided configuration.
|
||||
@@ -185,3 +187,12 @@ func (c *v1HatchetClientImpl) CEL() features.CELClient {
|
||||
}
|
||||
return c.cel
|
||||
}
|
||||
|
||||
func (c *v1HatchetClientImpl) Webhooks() features.WebhooksClient {
|
||||
if c.webhooks == nil {
|
||||
api := c.V0().API()
|
||||
tenantID := c.V0().TenantId()
|
||||
c.webhooks = features.NewWebhooksClient(api, &tenantID)
|
||||
}
|
||||
return c.webhooks
|
||||
}
|
||||
|
||||
@@ -0,0 +1,198 @@
|
||||
package features
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/google/uuid"
|
||||
|
||||
"github.com/hatchet-dev/hatchet/pkg/client/rest"
|
||||
)
|
||||
|
||||
type WebhookAuth interface {
|
||||
toCreateRequest(opts CreateWebhookOpts) (rest.V1CreateWebhookRequest, error)
|
||||
}
|
||||
|
||||
type BasicAuth struct {
|
||||
Username string
|
||||
Password string
|
||||
}
|
||||
|
||||
func (a BasicAuth) toCreateRequest(opts CreateWebhookOpts) (rest.V1CreateWebhookRequest, error) {
|
||||
var req rest.V1CreateWebhookRequest
|
||||
err := req.FromV1CreateWebhookRequestBasicAuth(rest.V1CreateWebhookRequestBasicAuth{
|
||||
Name: opts.Name,
|
||||
SourceName: opts.SourceName,
|
||||
EventKeyExpression: opts.EventKeyExpression,
|
||||
AuthType: rest.V1CreateWebhookRequestBasicAuthAuthType("BASIC"),
|
||||
Auth: rest.V1WebhookBasicAuth{
|
||||
Username: a.Username,
|
||||
Password: a.Password,
|
||||
},
|
||||
})
|
||||
return req, err
|
||||
}
|
||||
|
||||
type APIKeyAuth struct {
|
||||
HeaderName string
|
||||
APIKey string
|
||||
}
|
||||
|
||||
func (a APIKeyAuth) toCreateRequest(opts CreateWebhookOpts) (rest.V1CreateWebhookRequest, error) {
|
||||
var req rest.V1CreateWebhookRequest
|
||||
err := req.FromV1CreateWebhookRequestAPIKey(rest.V1CreateWebhookRequestAPIKey{
|
||||
Name: opts.Name,
|
||||
SourceName: opts.SourceName,
|
||||
EventKeyExpression: opts.EventKeyExpression,
|
||||
AuthType: rest.V1CreateWebhookRequestAPIKeyAuthType("API_KEY"),
|
||||
Auth: rest.V1WebhookAPIKeyAuth{
|
||||
HeaderName: a.HeaderName,
|
||||
ApiKey: a.APIKey,
|
||||
},
|
||||
})
|
||||
return req, err
|
||||
}
|
||||
|
||||
type HMACAuth struct {
|
||||
SigningSecret string
|
||||
SignatureHeaderName string
|
||||
Algorithm rest.V1WebhookHMACAlgorithm
|
||||
Encoding rest.V1WebhookHMACEncoding
|
||||
}
|
||||
|
||||
func (a HMACAuth) toCreateRequest(opts CreateWebhookOpts) (rest.V1CreateWebhookRequest, error) {
|
||||
var req rest.V1CreateWebhookRequest
|
||||
err := req.FromV1CreateWebhookRequestHMAC(rest.V1CreateWebhookRequestHMAC{
|
||||
Name: opts.Name,
|
||||
SourceName: opts.SourceName,
|
||||
EventKeyExpression: opts.EventKeyExpression,
|
||||
AuthType: rest.V1CreateWebhookRequestHMACAuthType("HMAC"),
|
||||
Auth: rest.V1WebhookHMACAuth{
|
||||
SigningSecret: a.SigningSecret,
|
||||
SignatureHeaderName: a.SignatureHeaderName,
|
||||
Algorithm: a.Algorithm,
|
||||
Encoding: a.Encoding,
|
||||
},
|
||||
})
|
||||
return req, err
|
||||
}
|
||||
|
||||
type CreateWebhookOpts struct {
|
||||
Name string
|
||||
SourceName rest.V1WebhookSourceName
|
||||
EventKeyExpression string
|
||||
Auth WebhookAuth
|
||||
}
|
||||
|
||||
type UpdateWebhookOpts struct {
|
||||
EventKeyExpression string
|
||||
}
|
||||
|
||||
// WebhooksClient provides methods for managing webhook configurations.
|
||||
type WebhooksClient interface {
|
||||
// List retrieves a collection of webhooks based on the provided parameters.
|
||||
List(ctx context.Context, opts rest.V1WebhookListParams) (*rest.V1WebhookList, error)
|
||||
|
||||
// Get retrieves a specific webhook by its name.
|
||||
Get(ctx context.Context, webhookName string) (*rest.V1Webhook, error)
|
||||
|
||||
// Create creates a new webhook configuration.
|
||||
Create(ctx context.Context, opts CreateWebhookOpts) (*rest.V1Webhook, error)
|
||||
|
||||
// Update updates an existing webhook configuration.
|
||||
Update(ctx context.Context, webhookName string, opts UpdateWebhookOpts) (*rest.V1Webhook, error)
|
||||
|
||||
// Delete removes a webhook configuration.
|
||||
Delete(ctx context.Context, webhookName string) error
|
||||
}
|
||||
|
||||
type webhooksClientImpl struct {
|
||||
api *rest.ClientWithResponses
|
||||
tenantId uuid.UUID
|
||||
}
|
||||
|
||||
// NewWebhooksClient creates a new client for managing webhook configurations.
|
||||
func NewWebhooksClient(
|
||||
api *rest.ClientWithResponses,
|
||||
tenantId *string,
|
||||
) WebhooksClient {
|
||||
tenantIdUUID := uuid.MustParse(*tenantId)
|
||||
|
||||
return &webhooksClientImpl{
|
||||
api: api,
|
||||
tenantId: tenantIdUUID,
|
||||
}
|
||||
}
|
||||
|
||||
func (c *webhooksClientImpl) List(ctx context.Context, opts rest.V1WebhookListParams) (*rest.V1WebhookList, error) {
|
||||
resp, err := c.api.V1WebhookListWithResponse(
|
||||
ctx,
|
||||
c.tenantId,
|
||||
&opts,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp.JSON200, nil
|
||||
}
|
||||
|
||||
func (c *webhooksClientImpl) Get(ctx context.Context, webhookName string) (*rest.V1Webhook, error) {
|
||||
resp, err := c.api.V1WebhookGetWithResponse(
|
||||
ctx,
|
||||
c.tenantId,
|
||||
webhookName,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp.JSON200, nil
|
||||
}
|
||||
|
||||
func (c *webhooksClientImpl) Create(ctx context.Context, opts CreateWebhookOpts) (*rest.V1Webhook, error) {
|
||||
if opts.Auth == nil {
|
||||
return nil, fmt.Errorf("auth is required")
|
||||
}
|
||||
|
||||
req, err := opts.Auth.toCreateRequest(opts)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp, err := c.api.V1WebhookCreateWithResponse(
|
||||
ctx,
|
||||
c.tenantId,
|
||||
req,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp.JSON200, nil
|
||||
}
|
||||
|
||||
func (c *webhooksClientImpl) Update(ctx context.Context, webhookName string, opts UpdateWebhookOpts) (*rest.V1Webhook, error) {
|
||||
resp, err := c.api.V1WebhookUpdateWithResponse(
|
||||
ctx,
|
||||
c.tenantId,
|
||||
webhookName,
|
||||
rest.V1UpdateWebhookRequest{
|
||||
EventKeyExpression: opts.EventKeyExpression,
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp.JSON200, nil
|
||||
}
|
||||
|
||||
func (c *webhooksClientImpl) Delete(ctx context.Context, webhookName string) error {
|
||||
_, err := c.api.V1WebhookDeleteWithResponse(
|
||||
ctx,
|
||||
c.tenantId,
|
||||
webhookName,
|
||||
)
|
||||
return err
|
||||
}
|
||||
@@ -31,6 +31,7 @@ type Client struct {
|
||||
workers *features.WorkersClient
|
||||
workflows *features.WorkflowsClient
|
||||
logs *features.LogsClient
|
||||
webhooks *features.WebhooksClient
|
||||
}
|
||||
|
||||
// NewClient creates a new Hatchet client.
|
||||
@@ -709,3 +710,13 @@ func (c *Client) Logs() *features.LogsClient {
|
||||
|
||||
return c.logs
|
||||
}
|
||||
|
||||
// Webhooks returns a client for managing webhooks.
|
||||
func (c *Client) Webhooks() *features.WebhooksClient {
|
||||
if c.webhooks == nil {
|
||||
tenantId := c.legacyClient.TenantId()
|
||||
c.webhooks = features.NewWebhooksClient(c.legacyClient.API(), tenantId)
|
||||
}
|
||||
|
||||
return c.webhooks
|
||||
}
|
||||
|
||||
@@ -0,0 +1,210 @@
|
||||
package features
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/cockroachdb/errors"
|
||||
"github.com/google/uuid"
|
||||
|
||||
"github.com/hatchet-dev/hatchet/pkg/client/rest"
|
||||
)
|
||||
|
||||
type WebhookAuth interface {
|
||||
toCreateRequest(opts CreateWebhookOpts) (rest.V1CreateWebhookRequest, error)
|
||||
}
|
||||
|
||||
type BasicAuth struct {
|
||||
Username string
|
||||
Password string
|
||||
}
|
||||
|
||||
func (a BasicAuth) toCreateRequest(opts CreateWebhookOpts) (rest.V1CreateWebhookRequest, error) {
|
||||
var req rest.V1CreateWebhookRequest
|
||||
err := req.FromV1CreateWebhookRequestBasicAuth(rest.V1CreateWebhookRequestBasicAuth{
|
||||
Name: opts.Name,
|
||||
SourceName: opts.SourceName,
|
||||
EventKeyExpression: opts.EventKeyExpression,
|
||||
AuthType: rest.V1CreateWebhookRequestBasicAuthAuthType("BASIC"),
|
||||
Auth: rest.V1WebhookBasicAuth{
|
||||
Username: a.Username,
|
||||
Password: a.Password,
|
||||
},
|
||||
})
|
||||
return req, err
|
||||
}
|
||||
|
||||
type APIKeyAuth struct {
|
||||
HeaderName string
|
||||
APIKey string
|
||||
}
|
||||
|
||||
func (a APIKeyAuth) toCreateRequest(opts CreateWebhookOpts) (rest.V1CreateWebhookRequest, error) {
|
||||
var req rest.V1CreateWebhookRequest
|
||||
err := req.FromV1CreateWebhookRequestAPIKey(rest.V1CreateWebhookRequestAPIKey{
|
||||
Name: opts.Name,
|
||||
SourceName: opts.SourceName,
|
||||
EventKeyExpression: opts.EventKeyExpression,
|
||||
AuthType: rest.V1CreateWebhookRequestAPIKeyAuthType("API_KEY"),
|
||||
Auth: rest.V1WebhookAPIKeyAuth{
|
||||
HeaderName: a.HeaderName,
|
||||
ApiKey: a.APIKey,
|
||||
},
|
||||
})
|
||||
return req, err
|
||||
}
|
||||
|
||||
type HMACAuth struct {
|
||||
SigningSecret string
|
||||
SignatureHeaderName string
|
||||
Algorithm rest.V1WebhookHMACAlgorithm
|
||||
Encoding rest.V1WebhookHMACEncoding
|
||||
}
|
||||
|
||||
func (a HMACAuth) toCreateRequest(opts CreateWebhookOpts) (rest.V1CreateWebhookRequest, error) {
|
||||
var req rest.V1CreateWebhookRequest
|
||||
err := req.FromV1CreateWebhookRequestHMAC(rest.V1CreateWebhookRequestHMAC{
|
||||
Name: opts.Name,
|
||||
SourceName: opts.SourceName,
|
||||
EventKeyExpression: opts.EventKeyExpression,
|
||||
AuthType: rest.V1CreateWebhookRequestHMACAuthType("HMAC"),
|
||||
Auth: rest.V1WebhookHMACAuth{
|
||||
SigningSecret: a.SigningSecret,
|
||||
SignatureHeaderName: a.SignatureHeaderName,
|
||||
Algorithm: a.Algorithm,
|
||||
Encoding: a.Encoding,
|
||||
},
|
||||
})
|
||||
return req, err
|
||||
}
|
||||
|
||||
type CreateWebhookOpts struct {
|
||||
Name string
|
||||
SourceName rest.V1WebhookSourceName
|
||||
EventKeyExpression string
|
||||
Auth WebhookAuth
|
||||
}
|
||||
|
||||
type UpdateWebhookOpts struct {
|
||||
EventKeyExpression string
|
||||
}
|
||||
|
||||
// WebhooksClient provides methods for managing webhook configurations
|
||||
type WebhooksClient struct {
|
||||
api *rest.ClientWithResponses
|
||||
tenantId uuid.UUID
|
||||
}
|
||||
|
||||
// NewWebhooksClient creates a new WebhooksClient
|
||||
func NewWebhooksClient(
|
||||
api *rest.ClientWithResponses,
|
||||
tenantId string,
|
||||
) *WebhooksClient {
|
||||
tenantIdUUID := uuid.MustParse(tenantId)
|
||||
|
||||
return &WebhooksClient{
|
||||
api: api,
|
||||
tenantId: tenantIdUUID,
|
||||
}
|
||||
}
|
||||
|
||||
// List retrieves a collection of webhooks based on the provided parameters.
|
||||
func (c *WebhooksClient) List(ctx context.Context, opts rest.V1WebhookListParams) (*rest.V1WebhookList, error) {
|
||||
resp, err := c.api.V1WebhookListWithResponse(
|
||||
ctx,
|
||||
c.tenantId,
|
||||
&opts,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to list webhooks")
|
||||
}
|
||||
|
||||
if err := validateJSON200Response(resp.StatusCode(), resp.Body, resp.JSON200); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp.JSON200, nil
|
||||
}
|
||||
|
||||
// Get retrieves a specific webhook by its name.
|
||||
func (c *WebhooksClient) Get(ctx context.Context, webhookName string) (*rest.V1Webhook, error) {
|
||||
resp, err := c.api.V1WebhookGetWithResponse(
|
||||
ctx,
|
||||
c.tenantId,
|
||||
webhookName,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to get webhook")
|
||||
}
|
||||
|
||||
if err := validateJSON200Response(resp.StatusCode(), resp.Body, resp.JSON200); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp.JSON200, nil
|
||||
}
|
||||
|
||||
// Create creates a new webhook configuration.
|
||||
func (c *WebhooksClient) Create(ctx context.Context, opts CreateWebhookOpts) (*rest.V1Webhook, error) {
|
||||
if opts.Auth == nil {
|
||||
return nil, errors.New("auth is required")
|
||||
}
|
||||
|
||||
req, err := opts.Auth.toCreateRequest(opts)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to create webhook request")
|
||||
}
|
||||
|
||||
resp, err := c.api.V1WebhookCreateWithResponse(
|
||||
ctx,
|
||||
c.tenantId,
|
||||
req,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to create webhook")
|
||||
}
|
||||
|
||||
if err := validateJSON200Response(resp.StatusCode(), resp.Body, resp.JSON200); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp.JSON200, nil
|
||||
}
|
||||
|
||||
// Update updates an existing webhook configuration.
|
||||
func (c *WebhooksClient) Update(ctx context.Context, webhookName string, opts UpdateWebhookOpts) (*rest.V1Webhook, error) {
|
||||
resp, err := c.api.V1WebhookUpdateWithResponse(
|
||||
ctx,
|
||||
c.tenantId,
|
||||
webhookName,
|
||||
rest.V1UpdateWebhookRequest{
|
||||
EventKeyExpression: opts.EventKeyExpression,
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to update webhook")
|
||||
}
|
||||
|
||||
if err := validateJSON200Response(resp.StatusCode(), resp.Body, resp.JSON200); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp.JSON200, nil
|
||||
}
|
||||
|
||||
// Delete removes a webhook configuration.
|
||||
func (c *WebhooksClient) Delete(ctx context.Context, webhookName string) error {
|
||||
resp, err := c.api.V1WebhookDeleteWithResponse(
|
||||
ctx,
|
||||
c.tenantId,
|
||||
webhookName,
|
||||
)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to delete webhook")
|
||||
}
|
||||
|
||||
if err := validateStatusCodeResponse(resp.StatusCode(), resp.Body); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user