diff --git a/codegen.toml b/codegen.toml index a02c19b58..dfc01ee95 100644 --- a/codegen.toml +++ b/codegen.toml @@ -116,6 +116,7 @@ output_dir = "java/lib/src/main/java/com/svix/models" template_dir = "openapi-templates/go" extra_shell_commands = [ "rm go/health.go", + "sed -i 's/package svix/package internalapi/g' go/internalapi/management*" ] [[go.task]] template = "openapi-templates/go/api_resource.go.jinja" @@ -126,6 +127,34 @@ output_dir = "go" [[go.task]] template = "openapi-templates/go/component_type.go.jinja" output_dir = "go/models" +[[go.task]] +template = "openapi-templates/go/api_resource.go.jinja" +output_dir = "go/internalapi" +extra_codegen_args = [ + # This is a limited list of operations required by terraform + "--include-mode=only-specified", + "--include-op-id=v1.management.environment.list", + "--include-op-id=v1.management.environment.create", + "--include-op-id=v1.management.environment.get", + "--include-op-id=v1.management.environment.update", + "--include-op-id=v1.management.environment.delete", + "--include-op-id=v1.management.environment-settings.get", + "--include-op-id=v1.management.environment-settings.update" +] +[[go.task]] +template = "openapi-templates/go/component_type.go.jinja" +output_dir = "go/models" +extra_codegen_args = [ + # This is a limited list of operations required by terraform + "--include-mode=only-specified", + "--include-op-id=v1.management.environment.list", + "--include-op-id=v1.management.environment.create", + "--include-op-id=v1.management.environment.get", + "--include-op-id=v1.management.environment.update", + "--include-op-id=v1.management.environment.delete", + "--include-op-id=v1.management.environment-settings.get", + "--include-op-id=v1.management.environment-settings.update" +] [kotlin] diff --git a/go/internalapi/internalapi.go b/go/internalapi/internalapi.go new file mode 100644 index 000000000..1f3b55bcc --- /dev/null +++ b/go/internalapi/internalapi.go @@ -0,0 +1,29 @@ +// Package internalapi, DO NOT USE THIS FILE, THE API WILL CHANGE WITHOUT WARNING!!!! +package internalapi + +import ( + "fmt" + "net/url" + + svix "github.com/svix/svix-webhooks/go" + "github.com/svix/svix-webhooks/go/internal" +) + +type ( + // THIS TYPE CAN AND WILL CHANGE WITHOUT WARNING + InternalSvix struct { + Management *Management + } +) + +func New(token string, serverUrl *url.URL, debug bool) (*InternalSvix, error) { + svixHttpClient := internal.DefaultSvixHttpClient(serverUrl.String()) + + svixHttpClient.DefaultHeaders["Authorization"] = fmt.Sprintf("Bearer %s", token) + svixHttpClient.DefaultHeaders["User-Agent"] = fmt.Sprintf("svix-libs/%s/go", svix.Version) + + svx := InternalSvix{ + Management: newManagement(&svixHttpClient), + } + return &svx, nil +} diff --git a/go/internalapi/management.go b/go/internalapi/management.go new file mode 100644 index 000000000..035d0b8e5 --- /dev/null +++ b/go/internalapi/management.go @@ -0,0 +1,18 @@ +// Package svix this file is @generated DO NOT EDIT +package internalapi + +import ( + "github.com/svix/svix-webhooks/go/internal" +) + +type Management struct { + Environment *ManagementEnvironment + EnvironmentSettings *ManagementEnvironmentSettings +} + +func newManagement(client *internal.SvixHttpClient) *Management { + return &Management{ + Environment: newManagementEnvironment(client), + EnvironmentSettings: newManagementEnvironmentSettings(client), + } +} diff --git a/go/internalapi/management_environment.go b/go/internalapi/management_environment.go new file mode 100644 index 000000000..49aa8efae --- /dev/null +++ b/go/internalapi/management_environment.go @@ -0,0 +1,148 @@ +// Package svix this file is @generated DO NOT EDIT +package internalapi + +import ( + "context" + + "github.com/svix/svix-webhooks/go/internal" + "github.com/svix/svix-webhooks/go/models" +) + +type ManagementEnvironment struct { + client *internal.SvixHttpClient +} + +func newManagementEnvironment(client *internal.SvixHttpClient) *ManagementEnvironment { + return &ManagementEnvironment{ + client: client, + } +} + +type ManagementEnvironmentListOptions struct { + // Limit the number of returned items + Limit *uint64 + // The iterator returned from a prior invocation + Iterator *string + + // The sorting order of the returned items + Order *models.Ordering +} + +type ManagementEnvironmentCreateOptions struct { + IdempotencyKey *string +} + +// List all environments. +func (managementEnvironment *ManagementEnvironment) List( + ctx context.Context, + o *ManagementEnvironmentListOptions, +) (*models.ListResponseEnvironmentModelOut, error) { + queryMap := map[string]string{} + var err error + if o != nil { + internal.SerializeParamToMap("limit", o.Limit, queryMap, &err) + internal.SerializeParamToMap("iterator", o.Iterator, queryMap, &err) + internal.SerializeParamToMap("order", o.Order, queryMap, &err) + if err != nil { + return nil, err + } + } + return internal.ExecuteRequest[any, models.ListResponseEnvironmentModelOut]( + ctx, + managementEnvironment.client, + "GET", + "/api/v1/management/environment", + nil, + queryMap, + nil, + nil, + ) +} + +// Create a new environment. +func (managementEnvironment *ManagementEnvironment) Create( + ctx context.Context, + environmentModelIn models.EnvironmentModelIn, + o *ManagementEnvironmentCreateOptions, +) (*models.EnvironmentModelOut, error) { + headerMap := map[string]string{} + var err error + if o != nil { + internal.SerializeParamToMap("idempotency-key", o.IdempotencyKey, headerMap, &err) + if err != nil { + return nil, err + } + } + return internal.ExecuteRequest[models.EnvironmentModelIn, models.EnvironmentModelOut]( + ctx, + managementEnvironment.client, + "POST", + "/api/v1/management/environment", + nil, + nil, + headerMap, + &environmentModelIn, + ) +} + +// Get an environment. +func (managementEnvironment *ManagementEnvironment) Get( + ctx context.Context, + envId string, +) (*models.EnvironmentModelOut, error) { + pathMap := map[string]string{ + "env_id": envId, + } + return internal.ExecuteRequest[any, models.EnvironmentModelOut]( + ctx, + managementEnvironment.client, + "GET", + "/api/v1/management/environment/{env_id}", + pathMap, + nil, + nil, + nil, + ) +} + +// Update an environment. +func (managementEnvironment *ManagementEnvironment) Update( + ctx context.Context, + envId string, + environmentModelUpdate models.EnvironmentModelUpdate, +) (*models.EnvironmentModelOut, error) { + pathMap := map[string]string{ + "env_id": envId, + } + return internal.ExecuteRequest[models.EnvironmentModelUpdate, models.EnvironmentModelOut]( + ctx, + managementEnvironment.client, + "PUT", + "/api/v1/management/environment/{env_id}", + pathMap, + nil, + nil, + &environmentModelUpdate, + ) +} + +// Delete an environment. +func (managementEnvironment *ManagementEnvironment) Delete( + ctx context.Context, + envId string, +) error { + pathMap := map[string]string{ + "env_id": envId, + } + _, err := internal.ExecuteRequest[any, any]( + ctx, + managementEnvironment.client, + "DELETE", + "/api/v1/management/environment/{env_id}", + pathMap, + nil, + nil, + nil, + ) + return err +} diff --git a/go/internalapi/management_environment_settings.go b/go/internalapi/management_environment_settings.go new file mode 100644 index 000000000..299415934 --- /dev/null +++ b/go/internalapi/management_environment_settings.go @@ -0,0 +1,52 @@ +// Package svix this file is @generated DO NOT EDIT +package internalapi + +import ( + "context" + + "github.com/svix/svix-webhooks/go/internal" + "github.com/svix/svix-webhooks/go/models" +) + +type ManagementEnvironmentSettings struct { + client *internal.SvixHttpClient +} + +func newManagementEnvironmentSettings(client *internal.SvixHttpClient) *ManagementEnvironmentSettings { + return &ManagementEnvironmentSettings{ + client: client, + } +} + +// Get the environments's settings +func (managementEnvironmentSettings *ManagementEnvironmentSettings) Get( + ctx context.Context, +) (*models.SettingsInternalOut, error) { + return internal.ExecuteRequest[any, models.SettingsInternalOut]( + ctx, + managementEnvironmentSettings.client, + "GET", + "/api/v1/management/environment-settings", + nil, + nil, + nil, + nil, + ) +} + +// Update the environment's settings +func (managementEnvironmentSettings *ManagementEnvironmentSettings) Update( + ctx context.Context, + settingsInternalIn models.SettingsInternalIn, +) (*models.SettingsInternalOut, error) { + return internal.ExecuteRequest[models.SettingsInternalIn, models.SettingsInternalOut]( + ctx, + managementEnvironmentSettings.client, + "PUT", + "/api/v1/management/environment-settings", + nil, + nil, + nil, + &settingsInternalIn, + ) +} diff --git a/go/models/border_radius_config.go b/go/models/border_radius_config.go new file mode 100644 index 000000000..2c77045c7 --- /dev/null +++ b/go/models/border_radius_config.go @@ -0,0 +1,8 @@ +// Package svix this file is @generated DO NOT EDIT +package models + +type BorderRadiusConfig struct { + Button *BorderRadiusEnum `json:"button,omitempty"` + Card *BorderRadiusEnum `json:"card,omitempty"` + Input *BorderRadiusEnum `json:"input,omitempty"` +} diff --git a/go/models/border_radius_enum.go b/go/models/border_radius_enum.go new file mode 100644 index 000000000..79dd358ca --- /dev/null +++ b/go/models/border_radius_enum.go @@ -0,0 +1,41 @@ +// Package svix this file is @generated DO NOT EDIT +package models + +import ( + "encoding/json" + "fmt" + "slices" +) + +type BorderRadiusEnum string + +const ( + BORDERRADIUSENUM_NONE BorderRadiusEnum = "none" + BORDERRADIUSENUM_LG BorderRadiusEnum = "lg" + BORDERRADIUSENUM_MD BorderRadiusEnum = "md" + BORDERRADIUSENUM_SM BorderRadiusEnum = "sm" + BORDERRADIUSENUM_FULL BorderRadiusEnum = "full" +) + +var allowedBorderRadiusEnum = []BorderRadiusEnum{ + "none", + "lg", + "md", + "sm", + "full", +} + +func (v *BorderRadiusEnum) UnmarshalJSON(src []byte) error { + var value string + err := json.Unmarshal(src, &value) + if err != nil { + return err + } + enumVal := BorderRadiusEnum(value) + if slices.Contains(allowedBorderRadiusEnum, enumVal) { + *v = enumVal + return nil + } + return fmt.Errorf("`%+v` is not a valid BorderRadiusEnum", value) + +} diff --git a/go/models/custom_color_palette.go b/go/models/custom_color_palette.go new file mode 100644 index 000000000..2ce1e655e --- /dev/null +++ b/go/models/custom_color_palette.go @@ -0,0 +1,14 @@ +// Package svix this file is @generated DO NOT EDIT +package models + +type CustomColorPalette struct { + BackgroundHover *string `json:"backgroundHover,omitempty"` + BackgroundPrimary *string `json:"backgroundPrimary,omitempty"` + BackgroundSecondary *string `json:"backgroundSecondary,omitempty"` + ButtonPrimary *string `json:"buttonPrimary,omitempty"` + InteractiveAccent *string `json:"interactiveAccent,omitempty"` + NavigationAccent *string `json:"navigationAccent,omitempty"` + Primary *string `json:"primary,omitempty"` + TextDanger *string `json:"textDanger,omitempty"` + TextPrimary *string `json:"textPrimary,omitempty"` +} diff --git a/go/models/custom_strings_override.go b/go/models/custom_strings_override.go new file mode 100644 index 000000000..14176295c --- /dev/null +++ b/go/models/custom_strings_override.go @@ -0,0 +1,8 @@ +// Package svix this file is @generated DO NOT EDIT +package models + +type CustomStringsOverride struct { + ChannelsHelp *string `json:"channelsHelp,omitempty"` + ChannelsMany *string `json:"channelsMany,omitempty"` + ChannelsOne *string `json:"channelsOne,omitempty"` +} diff --git a/go/models/custom_theme_override.go b/go/models/custom_theme_override.go new file mode 100644 index 000000000..649cfe402 --- /dev/null +++ b/go/models/custom_theme_override.go @@ -0,0 +1,7 @@ +// Package svix this file is @generated DO NOT EDIT +package models + +type CustomThemeOverride struct { + BorderRadius *BorderRadiusConfig `json:"borderRadius,omitempty"` + FontSize *FontSizeConfig `json:"fontSize,omitempty"` +} diff --git a/go/models/environment_model_in.go b/go/models/environment_model_in.go new file mode 100644 index 000000000..7ba563024 --- /dev/null +++ b/go/models/environment_model_in.go @@ -0,0 +1,7 @@ +// Package svix this file is @generated DO NOT EDIT +package models + +type EnvironmentModelIn struct { + Name string `json:"name"` + Type EnvironmentType `json:"type"` +} diff --git a/go/models/environment_model_out.go b/go/models/environment_model_out.go new file mode 100644 index 000000000..d343a67ff --- /dev/null +++ b/go/models/environment_model_out.go @@ -0,0 +1,13 @@ +// Package svix this file is @generated DO NOT EDIT +package models + +import "time" + +type EnvironmentModelOut struct { + CreatedAt time.Time `json:"createdAt"` + Id string `json:"id"` // The Environment's ID. + Name string `json:"name"` + Region EnvironmentRegion `json:"region"` + Type EnvironmentType `json:"type"` + UpdatedAt time.Time `json:"updatedAt"` +} diff --git a/go/models/environment_model_update.go b/go/models/environment_model_update.go new file mode 100644 index 000000000..c30378295 --- /dev/null +++ b/go/models/environment_model_update.go @@ -0,0 +1,6 @@ +// Package svix this file is @generated DO NOT EDIT +package models + +type EnvironmentModelUpdate struct { + Name string `json:"name"` +} diff --git a/go/models/environment_region.go b/go/models/environment_region.go new file mode 100644 index 000000000..c55b87a15 --- /dev/null +++ b/go/models/environment_region.go @@ -0,0 +1,43 @@ +// Package svix this file is @generated DO NOT EDIT +package models + +import ( + "encoding/json" + "fmt" + "slices" +) + +type EnvironmentRegion string + +const ( + ENVIRONMENTREGION_EU EnvironmentRegion = "eu" + ENVIRONMENTREGION_US EnvironmentRegion = "us" + ENVIRONMENTREGION_IN EnvironmentRegion = "in" + ENVIRONMENTREGION_AU EnvironmentRegion = "au" + ENVIRONMENTREGION_CA EnvironmentRegion = "ca" + ENVIRONMENTREGION_SELF_HOSTED EnvironmentRegion = "self-hosted" +) + +var allowedEnvironmentRegion = []EnvironmentRegion{ + "eu", + "us", + "in", + "au", + "ca", + "self-hosted", +} + +func (v *EnvironmentRegion) UnmarshalJSON(src []byte) error { + var value string + err := json.Unmarshal(src, &value) + if err != nil { + return err + } + enumVal := EnvironmentRegion(value) + if slices.Contains(allowedEnvironmentRegion, enumVal) { + *v = enumVal + return nil + } + return fmt.Errorf("`%+v` is not a valid EnvironmentRegion", value) + +} diff --git a/go/models/environment_type.go b/go/models/environment_type.go new file mode 100644 index 000000000..2fa115177 --- /dev/null +++ b/go/models/environment_type.go @@ -0,0 +1,35 @@ +// Package svix this file is @generated DO NOT EDIT +package models + +import ( + "encoding/json" + "fmt" + "slices" +) + +type EnvironmentType string + +const ( + ENVIRONMENTTYPE_DEVELOPMENT EnvironmentType = "development" + ENVIRONMENTTYPE_PRODUCTION EnvironmentType = "production" +) + +var allowedEnvironmentType = []EnvironmentType{ + "development", + "production", +} + +func (v *EnvironmentType) UnmarshalJSON(src []byte) error { + var value string + err := json.Unmarshal(src, &value) + if err != nil { + return err + } + enumVal := EnvironmentType(value) + if slices.Contains(allowedEnvironmentType, enumVal) { + *v = enumVal + return nil + } + return fmt.Errorf("`%+v` is not a valid EnvironmentType", value) + +} diff --git a/go/models/font_size_config.go b/go/models/font_size_config.go new file mode 100644 index 000000000..55e82b6d2 --- /dev/null +++ b/go/models/font_size_config.go @@ -0,0 +1,6 @@ +// Package svix this file is @generated DO NOT EDIT +package models + +type FontSizeConfig struct { + Base *uint16 `json:"base,omitempty"` +} diff --git a/go/models/list_response_environment_model_out.go b/go/models/list_response_environment_model_out.go new file mode 100644 index 000000000..551567cf4 --- /dev/null +++ b/go/models/list_response_environment_model_out.go @@ -0,0 +1,9 @@ +// Package svix this file is @generated DO NOT EDIT +package models + +type ListResponseEnvironmentModelOut struct { + Data []EnvironmentModelOut `json:"data"` + Done bool `json:"done"` + Iterator *string `json:"iterator,omitempty"` + PrevIterator *string `json:"prevIterator,omitempty"` +} diff --git a/go/models/settings_internal_in.go b/go/models/settings_internal_in.go new file mode 100644 index 000000000..0303ee4d9 --- /dev/null +++ b/go/models/settings_internal_in.go @@ -0,0 +1,32 @@ +// Package svix this file is @generated DO NOT EDIT +package models + +type SettingsInternalIn struct { + ColorPaletteDark *CustomColorPalette `json:"colorPaletteDark,omitempty"` + ColorPaletteLight *CustomColorPalette `json:"colorPaletteLight,omitempty"` + CustomBaseFontSize *int64 `json:"customBaseFontSize,omitempty"` + CustomColor *string `json:"customColor,omitempty"` + CustomFontFamily *string `json:"customFontFamily,omitempty"` + CustomFontFamilyUrl *string `json:"customFontFamilyUrl,omitempty"` + CustomLogoUrl *string `json:"customLogoUrl,omitempty"` + CustomStringsOverride *CustomStringsOverride `json:"customStringsOverride,omitempty"` + CustomThemeOverride *CustomThemeOverride `json:"customThemeOverride,omitempty"` + DisableEndpointOnFailure *bool `json:"disableEndpointOnFailure,omitempty"` + DisplayName *string `json:"displayName,omitempty"` + EnableChannels *bool `json:"enableChannels,omitempty"` + EnableEndpointMtlsConfig *bool `json:"enableEndpointMtlsConfig,omitempty"` + EnableEndpointOauthConfig *bool `json:"enableEndpointOauthConfig,omitempty"` + EnableIntegrationManagement *bool `json:"enableIntegrationManagement,omitempty"` + EnableMessageStream *bool `json:"enableMessageStream,omitempty"` + EnableMsgAtmptLog *bool `json:"enableMsgAtmptLog,omitempty"` + EnableOtlp *bool `json:"enableOtlp,omitempty"` + EnableTransformations *bool `json:"enableTransformations,omitempty"` + EnforceHttps *bool `json:"enforceHttps,omitempty"` + EventCatalogPublished *bool `json:"eventCatalogPublished,omitempty"` + ReadOnly *bool `json:"readOnly,omitempty"` + RequireEndpointChannel *bool `json:"requireEndpointChannel,omitempty"` + RetryPolicy []int32 `json:"retryPolicy,omitempty"` + ShowUseSvixPlay *bool `json:"showUseSvixPlay,omitempty"` + WhitelabelHeaders *bool `json:"whitelabelHeaders,omitempty"` + WipeSuccessfulPayload *bool `json:"wipeSuccessfulPayload,omitempty"` +} diff --git a/go/models/settings_internal_out.go b/go/models/settings_internal_out.go new file mode 100644 index 000000000..a8efc0f8e --- /dev/null +++ b/go/models/settings_internal_out.go @@ -0,0 +1,32 @@ +// Package svix this file is @generated DO NOT EDIT +package models + +type SettingsInternalOut struct { + ColorPaletteDark *CustomColorPalette `json:"colorPaletteDark,omitempty"` + ColorPaletteLight *CustomColorPalette `json:"colorPaletteLight,omitempty"` + CustomBaseFontSize *int64 `json:"customBaseFontSize,omitempty"` + CustomColor *string `json:"customColor,omitempty"` + CustomFontFamily *string `json:"customFontFamily,omitempty"` + CustomFontFamilyUrl *string `json:"customFontFamilyUrl,omitempty"` + CustomLogoUrl *string `json:"customLogoUrl,omitempty"` + CustomStringsOverride *CustomStringsOverride `json:"customStringsOverride,omitempty"` + CustomThemeOverride *CustomThemeOverride `json:"customThemeOverride,omitempty"` + DisableEndpointOnFailure *bool `json:"disableEndpointOnFailure,omitempty"` + DisplayName *string `json:"displayName,omitempty"` + EnableChannels *bool `json:"enableChannels,omitempty"` + EnableEndpointMtlsConfig *bool `json:"enableEndpointMtlsConfig,omitempty"` + EnableEndpointOauthConfig *bool `json:"enableEndpointOauthConfig,omitempty"` + EnableIntegrationManagement *bool `json:"enableIntegrationManagement,omitempty"` + EnableMessageStream *bool `json:"enableMessageStream,omitempty"` + EnableMsgAtmptLog *bool `json:"enableMsgAtmptLog,omitempty"` + EnableOtlp *bool `json:"enableOtlp,omitempty"` + EnableTransformations *bool `json:"enableTransformations,omitempty"` + EnforceHttps *bool `json:"enforceHttps,omitempty"` + EventCatalogPublished *bool `json:"eventCatalogPublished,omitempty"` + ReadOnly *bool `json:"readOnly,omitempty"` + RequireEndpointChannel *bool `json:"requireEndpointChannel,omitempty"` + RetryPolicy []int32 `json:"retryPolicy,omitempty"` + ShowUseSvixPlay *bool `json:"showUseSvixPlay,omitempty"` + WhitelabelHeaders *bool `json:"whitelabelHeaders,omitempty"` + WipeSuccessfulPayload *bool `json:"wipeSuccessfulPayload,omitempty"` +} diff --git a/regen_openapi.py b/regen_openapi.py index 151e5b33a..e552a489c 100755 --- a/regen_openapi.py +++ b/regen_openapi.py @@ -15,7 +15,7 @@ print("Python 3.11 or greater is required to run the codegen") exit(1) -OPENAPI_CODEGEN_IMAGE = "ghcr.io/svix/openapi-codegen:20250331-292" +OPENAPI_CODEGEN_IMAGE = "ghcr.io/svix/openapi-codegen:20250414-293" REPO_ROOT = pathlib.Path(__file__).parent.resolve() DEBUG = os.getenv("DEBUG") is not None GREEN = "\033[92m"