Repository: cloudflare/cloudflare-go
Pull request #1510 (2024-03-01 11:03:14)

DLP-1479: made DLP ContextAwareness a pointer
<!-- 
Provide a general summary of your changes in the title above. You should
remove this overview, any sections and any section descriptions you
don't need below before submitting. There isn't a strict requirement to
use this template if you can structure your description and still cover
these points. 
-->

## Description

This is to allow for easier optionality checks with == nil

The parent context_awareness property is optional, if it is defined then all of the children are required.

https://developers.cloudflare.com/api/operations/dlp-profiles-update-predefined-profile

<!--
Describe your changes in detail through motivation and context. Why is
this change required? What problem does it solve? If it fixes an open
issue, link to the issue using GitHub's closing issues keywords[1].
-->
## Has your change been tested?

Yes. Changed unit test to account for ContextAwareness being optional.

<!--
Explain how the change has been tested and what you ran to confirm your
change affects other parts of the code. Automated tests are generally
expected and changes without tests should explain why they aren't
required.
-->

## Types of changes

What sort of change does your code introduce/modify?

- [x] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to change)

## Checklist:

- [x] My code follows the code style of this project.
- [ ] My change requires a change to the documentation.
- [ ] I have updated the documentation accordingly.
- [x] I have added tests to cover my changes.
- [x] All new and existing tests passed.
- [x] This change is using publicly documented in [cloudflare/api-schemas](https://github.com/cloudflare/api-schemas) 
      and relies on stable APIs.

[1]: https://help.github.com/articles/closing-issues-using-keywords/


github-actions[bot]: Oops! It looks like no changelog entry is attached to this PR. Please include a release note as described in https://github.com/cloudflare/cloudflare-go/blob/master/docs/changelog-process.md.

Example: 

~~~
```release-note:TYPE
Release note
```
~~~

If you do not require a release note to be included, please add the `workflow/skip-changelog-entry` label.

Patch:
diff --git a/.changelog/1490.txt b/.changelog/1490.txt
deleted file mode 100644
index 20f833089..000000000
--- a/.changelog/1490.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-```release-note:note
-zaraz: replace deprecated neoEvents with Actions on Zaraz Config tools schema
-```
diff --git a/.changelog/1494.txt b/.changelog/1494.txt
deleted file mode 100644
index ad6abdd66..000000000
--- a/.changelog/1494.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-```release-note:enhancement
-images_variants: Add support for Images Variants CRUD operations
-```
diff --git a/.changelog/1496.txt b/.changelog/1496.txt
deleted file mode 100644
index 5d3ea2857..000000000
--- a/.changelog/1496.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-```release-note:enhancement
-access_application: Add support for `allow_authenticate_via_warp`
-```
-
-```release-note:enhancement
-access_organization: Add support for `allow_authenticate_via_warp` and `warp_auth_session_duration`
-```
diff --git a/.changelog/1499.txt b/.changelog/1499.txt
deleted file mode 100644
index 8272eb845..000000000
--- a/.changelog/1499.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-```release-note:enhancement
-teams_rules: `AntiVirus` settings includes notification settings
-```
diff --git a/.changelog/1500.txt b/.changelog/1500.txt
deleted file mode 100644
index af3eba15b..000000000
--- a/.changelog/1500.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-```release-note:enhancement
-access_application: Add support for OIDC SaaS Applications 
-```
diff --git a/.changelog/1501.txt b/.changelog/1501.txt
deleted file mode 100644
index 91b8d37a4..000000000
--- a/.changelog/1501.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-```release-note:bug
-hyperdrive: password should be nested in origin
-```
diff --git a/.changelog/1502.txt b/.changelog/1502.txt
deleted file mode 100644
index 09eb13b85..000000000
--- a/.changelog/1502.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-```release-note:dependency
-deps: bumps golang.org/x/net from 0.20.0 to 0.21.0
-```
diff --git a/.changelog/1503.txt b/.changelog/1503.txt
deleted file mode 100644
index 4798139e0..000000000
--- a/.changelog/1503.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-```release-note:enhancement
-magic-transit: Adds IPsec tunnel healthcheck direction & rate parameters
-```
diff --git a/.changelog/1504.txt b/.changelog/1504.txt
deleted file mode 100644
index c7a53d1b2..000000000
--- a/.changelog/1504.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-```release-note:dependency
-deps: bumps golangci/golangci-lint-action from 3 to 4
-```
diff --git a/.changelog/1505.txt b/.changelog/1505.txt
deleted file mode 100644
index 4e307037a..000000000
--- a/.changelog/1505.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-```release-note:enhancement
-access_application: add support for `name_id_transform_jsonata` in saas apps
-```
diff --git a/.changelog/1506.txt b/.changelog/1506.txt
deleted file mode 100644
index cafcb8de1..000000000
--- a/.changelog/1506.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-```release-note:bug
-registrar: Fix request method to call domain list endpoint from POST to GET
-```
diff --git a/.changelog/1509.txt b/.changelog/1509.txt
deleted file mode 100644
index ce5c97d10..000000000
--- a/.changelog/1509.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-```release-note:enhancement
-device_posture_rule: support last_seen and state for crowdstrike_s2s posture rule
-```
\ No newline at end of file
diff --git a/.changelog/1510.txt b/.changelog/1510.txt
new file mode 100644
index 000000000..7f3d44bb1
--- /dev/null
+++ b/.changelog/1510.txt
@@ -0,0 +1,3 @@
+```release-note:bug
+dlp: added optional ContextAwareness support
+```
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 074cad6e2..4aa338070 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -17,7 +17,7 @@ jobs:
           path: ~/go/pkg/mod
           key: ${{ runner.os }}-go${{ matrix.go-version }}-${{ hashFiles('**/go.mod') }}-${{ hashFiles('**/go.sum') }}
       - name: golangci-lint
-        uses: golangci/golangci-lint-action@v4
+        uses: golangci/golangci-lint-action@v3
         with:
           version: latest
           args: "--config .golintci.yaml"
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c5bb0fec4..932ae1fa2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,44 +1,8 @@
-## 0.90.0 (Unreleased)
+## 0.88.0 (Unreleased)
 
 ENHANCEMENTS:
 
-* device_posture_rule: support last_seen and state for crowdstrike_s2s posture rule ([#1509](https://github.com/cloudflare/cloudflare-go/issues/1509))
-* dlp: add support for Context Awareness in DLP profiles ([#1497](https://github.com/cloudflare/cloudflare-go/issues/1497))
-
-## 0.89.0 (February 28th, 2024)
-
-NOTES:
-
-* zaraz: replace deprecated neoEvents with Actions on Zaraz Config tools schema ([#1490](https://github.com/cloudflare/cloudflare-go/issues/1490))
-
-ENHANCEMENTS:
-
-* magic-transit: Adds IPsec tunnel healthcheck direction & rate parameters ([#1503](https://github.com/cloudflare/cloudflare-go/issues/1503))
-
-BUG FIXES:
-
-* registrar: Fix request method to call domain list endpoint from POST to GET ([#1506](https://github.com/cloudflare/cloudflare-go/issues/1506))
-
-## 0.88.0 (February 14th, 2024)
-
-ENHANCEMENTS:
-
-* access_application: Add support for OIDC SaaS Applications ([#1500](https://github.com/cloudflare/cloudflare-go/issues/1500))
-* access_application: Add support for `allow_authenticate_via_warp` ([#1496](https://github.com/cloudflare/cloudflare-go/issues/1496))
-* access_application: add support for `name_id_transform_jsonata` in saas apps ([#1505](https://github.com/cloudflare/cloudflare-go/issues/1505))
-* access_organization: Add support for `allow_authenticate_via_warp` and `warp_auth_session_duration` ([#1496](https://github.com/cloudflare/cloudflare-go/issues/1496))
 * hyperdrive: Add support for hyperdrive CRUD operations ([#1492](https://github.com/cloudflare/cloudflare-go/issues/1492))
-* images_variants: Add support for Images Variants CRUD operations ([#1494](https://github.com/cloudflare/cloudflare-go/issues/1494))
-* teams_rules: `AntiVirus` settings includes notification settings ([#1499](https://github.com/cloudflare/cloudflare-go/issues/1499))
-
-BUG FIXES:
-
-* hyperdrive: password should be nested in origin ([#1501](https://github.com/cloudflare/cloudflare-go/issues/1501))
-
-DEPENDENCIES:
-
-* deps: bumps golang.org/x/net from 0.20.0 to 0.21.0 ([#1502](https://github.com/cloudflare/cloudflare-go/issues/1502))
-* deps: bumps golangci/golangci-lint-action from 3 to 4 ([#1504](https://github.com/cloudflare/cloudflare-go/issues/1504))
 
 ## 0.87.0 (January 31st, 2024)
 
diff --git a/access_application.go b/access_application.go
index 53ab80957..98b240ae7 100644
--- a/access_application.go
+++ b/access_application.go
@@ -52,7 +52,6 @@ type AccessApplication struct {
 	HttpOnlyCookieAttribute  *bool                          `json:"http_only_cookie_attribute,omitempty"`
 	ServiceAuth401Redirect   *bool                          `json:"service_auth_401_redirect,omitempty"`
 	PathCookieAttribute      *bool                          `json:"path_cookie_attribute,omitempty"`
-	AllowAuthenticateViaWarp *bool                          `json:"allow_authenticate_via_warp,omitempty"`
 	CustomPages              []string                       `json:"custom_pages,omitempty"`
 	Tags                     []string                       `json:"tags,omitempty"`
 	AccessAppLauncherCustomization
@@ -106,31 +105,17 @@ type SAMLAttributeConfig struct {
 }
 
 type SaasApplication struct {
-	// Items common to both SAML and OIDC
-	AppID     string     `json:"app_id,omitempty"`
-	UpdatedAt *time.Time `json:"updated_at,omitempty"`
-	CreatedAt *time.Time `json:"created_at,omitempty"`
-	PublicKey string     `json:"public_key,omitempty"`
-	AuthType  string     `json:"auth_type,omitempty"`
-
-	// SAML saas app
-	ConsumerServiceUrl     string                `json:"consumer_service_url,omitempty"`
-	SPEntityID             string                `json:"sp_entity_id,omitempty"`
-	IDPEntityID            string                `json:"idp_entity_id,omitempty"`
-	NameIDFormat           string                `json:"name_id_format,omitempty"`
-	SSOEndpoint            string                `json:"sso_endpoint,omitempty"`
-	DefaultRelayState      string                `json:"default_relay_state,omitempty"`
-	CustomAttributes       []SAMLAttributeConfig `json:"custom_attributes,omitempty"`
-	NameIDTransformJsonata string                `json:"name_id_transform_jsonata,omitempty"`
-
-	// OIDC saas app
-	ClientID         string   `json:"client_id,omitempty"`
-	ClientSecret     string   `json:"client_secret,omitempty"`
-	RedirectURIs     []string `json:"redirect_uris,omitempty"`
-	GrantTypes       []string `json:"grant_types,omitempty"`
-	Scopes           []string `json:"scopes,omitempty"`
-	AppLauncherURL   string   `json:"app_launcher_url,omitempty"`
-	GroupFilterRegex string   `json:"group_filter_regex,omitempty"`
+	AppID              string                `json:"app_id,omitempty"`
+	ConsumerServiceUrl string                `json:"consumer_service_url,omitempty"`
+	SPEntityID         string                `json:"sp_entity_id,omitempty"`
+	PublicKey          string                `json:"public_key,omitempty"`
+	IDPEntityID        string                `json:"idp_entity_id,omitempty"`
+	NameIDFormat       string                `json:"name_id_format,omitempty"`
+	SSOEndpoint        string                `json:"sso_endpoint,omitempty"`
+	DefaultRelayState  string                `json:"default_relay_state,omitempty"`
+	UpdatedAt          *time.Time            `json:"updated_at,omitempty"`
+	CreatedAt          *time.Time            `json:"created_at,omitempty"`
+	CustomAttributes   []SAMLAttributeConfig `json:"custom_attributes,omitempty"`
 }
 
 type AccessAppLauncherCustomization struct {
@@ -181,7 +166,6 @@ type CreateAccessApplicationParams struct {
 	SessionDuration          string                         `json:"session_duration,omitempty"`
 	SkipInterstitial         *bool                          `json:"skip_interstitial,omitempty"`
 	Type                     AccessApplicationType          `json:"type,omitempty"`
-	AllowAuthenticateViaWarp *bool                          `json:"allow_authenticate_via_warp,omitempty"`
 	CustomPages              []string                       `json:"custom_pages,omitempty"`
 	Tags                     []string                       `json:"tags,omitempty"`
 	AccessAppLauncherCustomization
@@ -212,7 +196,6 @@ type UpdateAccessApplicationParams struct {
 	SessionDuration          string                         `json:"session_duration,omitempty"`
 	SkipInterstitial         *bool                          `json:"skip_interstitial,omitempty"`
 	Type                     AccessApplicationType          `json:"type,omitempty"`
-	AllowAuthenticateViaWarp *bool                          `json:"allow_authenticate_via_warp,omitempty"`
 	CustomPages              []string                       `json:"custom_pages,omitempty"`
 	Tags                     []string                       `json:"tags,omitempty"`
 	AccessAppLauncherCustomization
diff --git a/access_organization.go b/access_organization.go
index f7eea16af..bb02b1ca4 100644
--- a/access_organization.go
+++ b/access_organization.go
@@ -22,8 +22,6 @@ type AccessOrganization struct {
 	AutoRedirectToIdentity         *bool                         `json:"auto_redirect_to_identity,omitempty"`
 	SessionDuration                *string                       `json:"session_duration,omitempty"`
 	CustomPages                    AccessOrganizationCustomPages `json:"custom_pages,omitempty"`
-	WarpAuthSessionDuration        *string                       `json:"warp_auth_session_duration,omitempty"`
-	AllowAuthenticateViaWarp       *bool                         `json:"allow_authenticate_via_warp,omitempty"`
 }
 
 // AccessOrganizationLoginDesign represents the login design options.
@@ -69,8 +67,6 @@ type CreateAccessOrganizationParams struct {
 	AutoRedirectToIdentity         *bool                         `json:"auto_redirect_to_identity,omitempty"`
 	SessionDuration                *string                       `json:"session_duration,omitempty"`
 	CustomPages                    AccessOrganizationCustomPages `json:"custom_pages,omitempty"`
-	WarpAuthSessionDuration        *string                       `json:"warp_auth_session_duration,omitempty"`
-	AllowAuthenticateViaWarp       *bool                         `json:"allow_authenticate_via_warp,omitempty"`
 }
 
 type UpdateAccessOrganizationParams struct {
@@ -83,8 +79,6 @@ type UpdateAccessOrganizationParams struct {
 	AutoRedirectToIdentity         *bool                         `json:"auto_redirect_to_identity,omitempty"`
 	SessionDuration                *string                       `json:"session_duration,omitempty"`
 	CustomPages                    AccessOrganizationCustomPages `json:"custom_pages,omitempty"`
-	WarpAuthSessionDuration        *string                       `json:"warp_auth_session_duration,omitempty"`
-	AllowAuthenticateViaWarp       *bool                         `json:"allow_authenticate_via_warp,omitempty"`
 }
 
 func (api *API) GetAccessOrganization(ctx context.Context, rc *ResourceContainer, params GetAccessOrganizationParams) (AccessOrganization, ResultInfo, error) {
diff --git a/device_posture_rule.go b/device_posture_rule.go
index 4768b7704..02c0cfe46 100644
--- a/device_posture_rule.go
+++ b/device_posture_rule.go
@@ -198,8 +198,6 @@ type DevicePostureRuleInput struct {
 	IsActive         bool     `json:"is_active,omitempty"`
 	EidLastSeen      string   `json:"eid_last_seen,omitempty"`
 	RiskLevel        string   `json:"risk_level,omitempty"`
-	State            string   `json:"state,omitempty"`
-	LastSeen         string   `json:"last_seen,omitempty"`
 }
 
 // DevicePostureRuleListResponse represents the response from the list
diff --git a/dlp_profile.go b/dlp_profile.go
index b53f84adb..2a0c405da 100644
--- a/dlp_profile.go
+++ b/dlp_profile.go
@@ -50,12 +50,13 @@ type DLPContextAwareness struct {
 // DLPProfile represents a DLP Profile, which contains a set
 // of entries.
 type DLPProfile struct {
-	ID                string              `json:"id,omitempty"`
-	Name              string              `json:"name,omitempty"`
-	Type              string              `json:"type,omitempty"`
-	Description       string              `json:"description,omitempty"`
-	AllowedMatchCount int                 `json:"allowed_match_count"`
-	ContextAwareness  DLPContextAwareness `json:"context_awareness,omitempty"`
+	ID                string `json:"id,omitempty"`
+	Name              string `json:"name,omitempty"`
+	Type              string `json:"type,omitempty"`
+	Description       string `json:"description,omitempty"`
+	AllowedMatchCount int    `json:"allowed_match_count"`
+
+	ContextAwareness *DLPContextAwareness `json:"context_awareness,omitempty"`
 
 	// The following fields are omitted for predefined DLP
 	// profiles.
diff --git a/go.mod b/go.mod
index 9a99bfffd..9d9d7f8ec 100644
--- a/go.mod
+++ b/go.mod
@@ -9,7 +9,7 @@ require (
 	github.com/olekukonko/tablewriter v0.0.5
 	github.com/stretchr/testify v1.8.4
 	github.com/urfave/cli/v2 v2.27.1
-	golang.org/x/net v0.21.0
+	golang.org/x/net v0.20.0
 	golang.org/x/time v0.5.0
 )
 
diff --git a/go.sum b/go.sum
index e93bfe8b7..d3961c923 100644
--- a/go.sum
+++ b/go.sum
@@ -59,15 +59,15 @@ github.com/urfave/cli/v2 v2.27.1 h1:8xSQ6szndafKVRmfyeUMxkNUJQMjL1F2zmsZ+qHpfho=
 github.com/urfave/cli/v2 v2.27.1/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ=
 github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU=
 github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8=
-golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4=
-golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
+golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo=
+golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
 golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y=
+golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU=
 golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
 golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
 golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
diff --git a/hyperdrive.go b/hyperdrive.go
index c1ddbc9a5..346eb1ccb 100644
--- a/hyperdrive.go
+++ b/hyperdrive.go
@@ -10,13 +10,9 @@ import (
 )
 
 var (
-	ErrMissingHyperdriveConfigID             = errors.New("required hyperdrive config id is missing")
-	ErrMissingHyperdriveConfigName           = errors.New("required hyperdrive config name is missing")
-	ErrMissingHyperdriveConfigOriginDatabase = errors.New("required hyperdrive config origin database is missing")
-	ErrMissingHyperdriveConfigOriginPassword = errors.New("required hyperdrive config origin password is missing")
-	ErrMissingHyperdriveConfigOriginHost     = errors.New("required hyperdrive config origin host is missing")
-	ErrMissingHyperdriveConfigOriginScheme   = errors.New("required hyperdrive config origin scheme is missing")
-	ErrMissingHyperdriveConfigOriginUser     = errors.New("required hyperdrive config origin user is missing")
+	ErrMissingHyperdriveConfigID       = errors.New("required hyperdrive config id is missing")
+	ErrMissingHyperdriveConfigName     = errors.New("required hyperdrive config name is missing")
+	ErrMissingHyperdriveConfigPassword = errors.New("required hyperdrive config password is missing")
 )
 
 type HyperdriveConfig struct {
@@ -28,7 +24,6 @@ type HyperdriveConfig struct {
 
 type HyperdriveConfigOrigin struct {
 	Database string `json:"database,omitempty"`
-	Password string `json:"password"`
 	Host     string `json:"host,omitempty"`
 	Port     int    `json:"port,omitempty"`
 	Scheme   string `json:"scheme,omitempty"`
@@ -47,9 +42,10 @@ type HyperdriveConfigListResponse struct {
 }
 
 type CreateHyperdriveConfigParams struct {
-	Name    string                  `json:"name"`
-	Origin  HyperdriveConfigOrigin  `json:"origin"`
-	Caching HyperdriveConfigCaching `json:"caching,omitempty"`
+	Name     string                  `json:"name"`
+	Password string                  `json:"password"`
+	Origin   HyperdriveConfigOrigin  `json:"origin"`
+	Caching  HyperdriveConfigCaching `json:"caching,omitempty"`
 }
 
 type HyperdriveConfigResponse struct {
@@ -60,6 +56,7 @@ type HyperdriveConfigResponse struct {
 type UpdateHyperdriveConfigParams struct {
 	HyperdriveID string                  `json:"-"`
 	Name         string                  `json:"name"`
+	Password     string                  `json:"password"`
 	Origin       HyperdriveConfigOrigin  `json:"origin"`
 	Caching      HyperdriveConfigCaching `json:"caching,omitempty"`
 }
@@ -102,6 +99,10 @@ func (api *API) CreateHyperdriveConfig(ctx context.Context, rc *ResourceContaine
 		return HyperdriveConfig{}, ErrMissingHyperdriveConfigName
 	}
 
+	if params.Password == "" {
+		return HyperdriveConfig{}, ErrMissingHyperdriveConfigPassword
+	}
+
 	uri := fmt.Sprintf("/accounts/%s/hyperdrive/configs", rc.Identifier)
 
 	res, err := api.makeRequestContext(ctx, http.MethodPost, uri, params)
@@ -177,26 +178,6 @@ func (api *API) UpdateHyperdriveConfig(ctx context.Context, rc *ResourceContaine
 		return HyperdriveConfig{}, ErrMissingHyperdriveConfigID
 	}
 
-	if params.Origin.Database == "" {
-		return HyperdriveConfig{}, ErrMissingHyperdriveConfigOriginDatabase
-	}
-
-	if params.Origin.Password == "" {
-		return HyperdriveConfig{}, ErrMissingHyperdriveConfigOriginPassword
-	}
-
-	if params.Origin.Host == "" {
-		return HyperdriveConfig{}, ErrMissingHyperdriveConfigOriginHost
-	}
-
-	if params.Origin.Scheme == "" {
-		return HyperdriveConfig{}, ErrMissingHyperdriveConfigOriginScheme
-	}
-
-	if params.Origin.User == "" {
-		return HyperdriveConfig{}, ErrMissingHyperdriveConfigOriginUser
-	}
-
 	uri := fmt.Sprintf("/accounts/%s/hyperdrive/configs/%s", rc.Identifier, params.HyperdriveID)
 
 	res, err := api.makeRequestContext(ctx, http.MethodPut, uri, params)
diff --git a/images_variants.go b/images_variants.go
deleted file mode 100644
index 294955116..000000000
--- a/images_variants.go
+++ /dev/null
@@ -1,163 +0,0 @@
-package cloudflare
-
-import (
-	"context"
-	"fmt"
-	"net/http"
-
-	"github.com/goccy/go-json"
-)
-
-type ImagesVariant struct {
-	ID                     string                `json:"id,omitempty"`
-	NeverRequireSignedURLs *bool                 `json:"neverRequireSignedURLs,omitempty"`
-	Options                ImagesVariantsOptions `json:"options,omitempty"`
-}
-
-type ImagesVariantsOptions struct {
-	Fit      string `json:"fit,omitempty"`
-	Height   int    `json:"height,omitempty"`
-	Metadata string `json:"metadata,omitempty"`
-	Width    int    `json:"width,omitempty"`
-}
-
-type ListImageVariantsParams struct{}
-
-type ListImagesVariantsResponse struct {
-	Result ListImageVariantsResult `json:"result,omitempty"`
-	Response
-}
-
-type ListImageVariantsResult struct {
-	ImagesVariants map[string]ImagesVariant `json:"variants,omitempty"`
-}
-
-type CreateImagesVariantParams struct {
-	ID                     string                `json:"id,omitempty"`
-	NeverRequireSignedURLs *bool                 `json:"neverRequireSignedURLs,omitempty"`
-	Options                ImagesVariantsOptions `json:"options,omitempty"`
-}
-
-type UpdateImagesVariantParams struct {
-	ID                     string                `json:"-"`
-	NeverRequireSignedURLs *bool                 `json:"neverRequireSignedURLs,omitempty"`
-	Options                ImagesVariantsOptions `json:"options,omitempty"`
-}
-
-type ImagesVariantResult struct {
-	Variant ImagesVariant `json:"variant,omitempty"`
-}
-
-type ImagesVariantResponse struct {
-	Result ImagesVariantResult `json:"result,omitempty"`
-	Response
-}
-
-// Lists existing variants.
-//
-// API Reference: https://developers.cloudflare.com/api/operations/cloudflare-images-variants-list-variants
-func (api *API) ListImagesVariants(ctx context.Context, rc *ResourceContainer, params ListImageVariantsParams) (ListImageVariantsResult, error) {
-	if rc.Identifier == "" {
-		return ListImageVariantsResult{}, ErrMissingAccountID
-	}
-
-	baseURL := fmt.Sprintf("/accounts/%s/images/v1/variants", rc.Identifier)
-	res, err := api.makeRequestContext(ctx, http.MethodGet, baseURL, nil)
-	if err != nil {
-		return ListImageVariantsResult{}, err
-	}
-
-	var listImageVariantsResponse ListImagesVariantsResponse
-	err = json.Unmarshal(res, &listImageVariantsResponse)
-	if err != nil {
-		return ListImageVariantsResult{}, fmt.Errorf("%s: %w", errUnmarshalError, err)
-	}
-
-	return listImageVariantsResponse.Result, nil
-}
-
-// Fetch details for a single variant.
-//
-// API Reference: https://developers.cloudflare.com/api/operations/cloudflare-images-variants-variant-details
-func (api *API) GetImagesVariant(ctx context.Context, rc *ResourceContainer, variantID string) (ImagesVariant, error) {
-	if rc.Identifier == "" {
-		return ImagesVariant{}, ErrMissingAccountID
-	}
-
-	baseURL := fmt.Sprintf("/accounts/%s/images/v1/variants/%s", rc.Identifier, variantID)
-	res, err := api.makeRequestContext(ctx, http.MethodGet, baseURL, nil)
-	if err != nil {
-		return ImagesVariant{}, err
-	}
-
-	var imagesVariantDetailResponse ImagesVariantResponse
-	err = json.Unmarshal(res, &imagesVariantDetailResponse)
-	if err != nil {
-		return ImagesVariant{}, fmt.Errorf("%s: %w", errUnmarshalError, err)
-	}
-
-	return imagesVariantDetailResponse.Result.Variant, nil
-}
-
-// Specify variants that allow you to resize images for different use cases.
-//
-// API Reference: https://developers.cloudflare.com/api/operations/cloudflare-images-variants-create-a-variant
-func (api *API) CreateImagesVariant(ctx context.Context, rc *ResourceContainer, params CreateImagesVariantParams) (ImagesVariant, error) {
-	if rc.Identifier == "" {
-		return ImagesVariant{}, ErrMissingAccountID
-	}
-
-	baseURL := fmt.Sprintf("/accounts/%s/images/v1/variants", rc.Identifier)
-	res, err := api.makeRequestContext(ctx, http.MethodPost, baseURL, params)
-	if err != nil {
-		return ImagesVariant{}, err
-	}
-
-	var createImagesVariantResponse ImagesVariantResponse
-	err = json.Unmarshal(res, &createImagesVariantResponse)
-	if err != nil {
-		return ImagesVariant{}, fmt.Errorf("%s: %w", errUnmarshalError, err)
-	}
-
-	return createImagesVariantResponse.Result.Variant, nil
-}
-
-// Deleting a variant purges the cache for all images associated with the variant.
-//
-// API Reference: https://developers.cloudflare.com/api/operations/cloudflare-images-variants-variant-details
-func (api *API) DeleteImagesVariant(ctx context.Context, rc *ResourceContainer, variantID string) error {
-	if rc.Identifier == "" {
-		return ErrMissingAccountID
-	}
-
-	baseURL := fmt.Sprintf("/accounts/%s/images/v1/variants/%s", rc.Identifier, variantID)
-	_, err := api.makeRequestContext(ctx, http.MethodDelete, baseURL, nil)
-	if err != nil {
-		return fmt.Errorf("%s: %w", errMakeRequestError, err)
-	}
-
-	return nil
-}
-
-// Updating a variant purges the cache for all images associated with the variant.
-//
-// API Reference: https://developers.cloudflare.com/api/operations/cloudflare-images-variants-variant-details
-func (api *API) UpdateImagesVariant(ctx context.Context, rc *ResourceContainer, params UpdateImagesVariantParams) (ImagesVariant, error) {
-	if rc.Identifier == "" {
-		return ImagesVariant{}, ErrMissingAccountID
-	}
-
-	baseURL := fmt.Sprintf("/accounts/%s/images/v1/variants/%s", rc.Identifier, params.ID)
-	res, err := api.makeRequestContext(ctx, http.MethodPatch, baseURL, params)
-	if err != nil {
-		return ImagesVariant{}, err
-	}
-
-	var imagesVariantDetailResponse ImagesVariantResponse
-	err = json.Unmarshal(res, &imagesVariantDetailResponse)
-	if err != nil {
-		return ImagesVariant{}, fmt.Errorf("%s: %w", errUnmarshalError, err)
-	}
-
-	return imagesVariantDetailResponse.Result.Variant, nil
-}
diff --git a/magic_transit_tunnel_healthcheck.go b/magic_transit_tunnel_healthcheck.go
index ced8a40f4..f79761e19 100644
--- a/magic_transit_tunnel_healthcheck.go
+++ b/magic_transit_tunnel_healthcheck.go
@@ -2,9 +2,7 @@ package cloudflare
 
 // MagicTransitTunnelHealthcheck contains information about a tunnel health check.
 type MagicTransitTunnelHealthcheck struct {
-	Enabled   bool   `json:"enabled"`
-	Target    string `json:"target,omitempty"`
-	Type      string `json:"type,omitempty"`
-	Rate      string `json:"rate,omitempty"`
-	Direction string `json:"direction,omitempty"`
+	Enabled bool   `json:"enabled"`
+	Target  string `json:"target,omitempty"`
+	Type    string `json:"type,omitempty"`
 }
diff --git a/registrar.go b/registrar.go
index 68144ac4a..2be3ca8bf 100644
--- a/registrar.go
+++ b/registrar.go
@@ -104,7 +104,7 @@ func (api *API) RegistrarDomain(ctx context.Context, accountID, domainName strin
 func (api *API) RegistrarDomains(ctx context.Context, accountID string) ([]RegistrarDomain, error) {
 	uri := fmt.Sprintf("/accounts/%s/registrar/domains", accountID)
 
-	res, err := api.makeRequestContext(ctx, http.MethodGet, uri, nil)
+	res, err := api.makeRequestContext(ctx, http.MethodPost, uri, nil)
 	if err != nil {
 		return []RegistrarDomain{}, err
 	}
diff --git a/teams_accounts.go b/teams_accounts.go
index fc8fbb984..90ae7d347 100644
--- a/teams_accounts.go
+++ b/teams_accounts.go
@@ -54,10 +54,9 @@ type BrowserIsolation struct {
 }
 
 type TeamsAntivirus struct {
-	EnabledDownloadPhase bool                       `json:"enabled_download_phase"`
-	EnabledUploadPhase   bool                       `json:"enabled_upload_phase"`
-	FailClosed           bool                       `json:"fail_closed"`
-	NotificationSettings *TeamsNotificationSettings `json:"notification_settings"`
+	EnabledDownloadPhase bool `json:"enabled_download_phase"`
+	EnabledUploadPhase   bool `json:"enabled_upload_phase"`
+	FailClosed           bool `json:"fail_closed"`
 }
 
 type TeamsFIPS struct {
diff --git a/zaraz.go b/zaraz.go
index 3ffc4f5ed..dedfdc4c9 100644
--- a/zaraz.go
+++ b/zaraz.go
@@ -44,7 +44,6 @@ type ZarazConfigSettings struct {
 	ContextEnricher     ZarazWorker `json:"contextEnricher,omitempty"`
 }
 
-// Deprecated: To be removed pending migration of existing configs.
 type ZarazNeoEvent struct {
 	BlockingTriggers []string       `json:"blockingTriggers"`
 	FiringTriggers   []string       `json:"firingTriggers"`
@@ -52,13 +51,6 @@ type ZarazNeoEvent struct {
 	ActionType       string         `json:"actionType,omitempty"`
 }
 
-type ZarazAction struct {
-	BlockingTriggers []string       `json:"blockingTriggers"`
-	FiringTriggers   []string       `json:"firingTriggers"`
-	Data             map[string]any `json:"data"`
-	ActionType       string         `json:"actionType,omitempty"`
-}
-
 type ZarazToolType string
 
 const (
@@ -68,19 +60,18 @@ const (
 )
 
 type ZarazTool struct {
-	BlockingTriggers []string               `json:"blockingTriggers"`
-	Enabled          *bool                  `json:"enabled"`
-	DefaultFields    map[string]any         `json:"defaultFields"`
-	Name             string                 `json:"name"`
-	NeoEvents        []ZarazNeoEvent        `json:"neoEvents"`
-	Actions          map[string]ZarazAction `json:"actions"`
-	Type             ZarazToolType          `json:"type"`
-	DefaultPurpose   string                 `json:"defaultPurpose,omitempty"`
-	Library          string                 `json:"library,omitempty"`
-	Component        string                 `json:"component,omitempty"`
-	Permissions      []string               `json:"permissions"`
-	Settings         map[string]any         `json:"settings"`
-	Worker           ZarazWorker            `json:"worker,omitempty"`
+	BlockingTriggers []string        `json:"blockingTriggers"`
+	Enabled          *bool           `json:"enabled"`
+	DefaultFields    map[string]any  `json:"defaultFields"`
+	Name             string          `json:"name"`
+	NeoEvents        []ZarazNeoEvent `json:"neoEvents"`
+	Type             ZarazToolType   `json:"type"`
+	DefaultPurpose   string          `json:"defaultPurpose,omitempty"`
+	Library          string          `json:"library,omitempty"`
+	Component        string          `json:"component,omitempty"`
+	Permissions      []string        `json:"permissions,omitempty"`
+	Settings         map[string]any  `json:"settings,omitempty"`
+	Worker           ZarazWorker     `json:"worker,omitempty"`
 }
 
 type ZarazTriggerSystem string


Test patch:
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 1405737f7..bf1fe45a3 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -4,7 +4,7 @@ jobs:
   test:
     strategy:
       matrix:
-        go-version: ["1.20", "1.21", "1.22"]
+        go-version: ["1.19", "1.20", "1.21"]
     runs-on: ubuntu-latest
     steps:
       - uses: actions/setup-go@v5
diff --git a/access_application_test.go b/access_application_test.go
index 67be75e94..ed0916e03 100644
--- a/access_application_test.go
+++ b/access_application_test.go
@@ -49,8 +49,7 @@ func TestAccessApplications(t *testing.T) {
 					"service_auth_401_redirect": true,
 					"path_cookie_attribute": true,
 					"custom_pages": ["480f4f69-1a28-4fdd-9240-1ed29f0ac1dc"],
-					"tags": ["engineers"],
-					"allow_authenticate_via_warp": true
+					"tags": ["engineers"]
 				}
 			],
 			"result_info": {
@@ -90,7 +89,6 @@ func TestAccessApplications(t *testing.T) {
 		CustomPages:              []string{"480f4f69-1a28-4fdd-9240-1ed29f0ac1dc"},
 		Tags:                     []string{"engineers"},
 		CustomNonIdentityDenyURL: "https://blocked.com",
-		AllowAuthenticateViaWarp: BoolPtr(true),
 	}}
 
 	mux.HandleFunc("/accounts/"+testAccountID+"/access/apps", handler)
@@ -142,8 +140,7 @@ func TestAccessApplication(t *testing.T) {
 				"app_launcher_visible": true,
 				"service_auth_401_redirect": true,
 				"http_only_cookie_attribute": false,
-				"path_cookie_attribute": false,
-				"allow_authenticate_via_warp": false
+				"path_cookie_attribute": false
 			}
 		}
 		`)
@@ -174,7 +171,6 @@ func TestAccessApplication(t *testing.T) {
 		HttpOnlyCookieAttribute:  BoolPtr(false),
 		PathCookieAttribute:      BoolPtr(false),
 		CustomNonIdentityDenyURL: "https://blocked.com",
-		AllowAuthenticateViaWarp: BoolPtr(false),
 	}
 
 	mux.HandleFunc("/accounts/"+testAccountID+"/access/apps/480f4f69-1a28-4fdd-9240-1ed29f0ac1db", handler)
@@ -225,8 +221,7 @@ func TestCreateAccessApplications(t *testing.T) {
 				"skip_interstitial": true,
 				"app_launcher_visible": true,
 				"service_auth_401_redirect": true,
-				"tags": ["engineers"],
-				"allow_authenticate_via_warp": false
+				"tags": ["engineers"]
 			}
 		}
 		`)
@@ -255,7 +250,6 @@ func TestCreateAccessApplications(t *testing.T) {
 		UpdatedAt:                &updatedAt,
 		CustomNonIdentityDenyURL: "https://blocked.com",
 		Tags:                     []string{"engineers"},
-		AllowAuthenticateViaWarp: BoolPtr(false),
 	}
 
 	mux.HandleFunc("/accounts/"+testAccountID+"/access/apps", handler)
@@ -314,8 +308,7 @@ func TestUpdateAccessApplication(t *testing.T) {
 				"skip_interstitial": true,
 				"app_launcher_visible": true,
 				"service_auth_401_redirect": true,
-				"tags": ["engineers"],
-				"allow_authenticate_via_warp": true
+				"tags": ["engineers"]
 			}
 		}
 		`)
@@ -340,7 +333,6 @@ func TestUpdateAccessApplication(t *testing.T) {
 		CustomNonIdentityDenyURL: "https://blocked.com",
 		Tags:                     []string{"engineers"},
 		SkipInterstitial:         BoolPtr(true),
-		AllowAuthenticateViaWarp: BoolPtr(true),
 		CreatedAt:                &createdAt,
 		UpdatedAt:                &updatedAt,
 	}
@@ -364,7 +356,6 @@ func TestUpdateAccessApplication(t *testing.T) {
 		SkipInterstitial:         BoolPtr(true),
 		CustomNonIdentityDenyURL: "https://blocked.com",
 		Tags:                     []string{"engineers"},
-		AllowAuthenticateViaWarp: BoolPtr(true),
 	}
 
 	mux.HandleFunc("/accounts/"+testAccountID+"/access/apps/480f4f69-1a28-4fdd-9240-1ed29f0ac1db", handler)
@@ -620,7 +611,7 @@ func TestCreatePrivateAccessApplication(t *testing.T) {
 	}
 }
 
-func TestCreateSAMLSaasAccessApplications(t *testing.T) {
+func TestCreateSaasAccessApplications(t *testing.T) {
 	setup()
 	defer teardown()
 
@@ -678,8 +669,7 @@ func TestCreateSAMLSaasAccessApplications(t *testing.T) {
 								"name": "test3"
 							}
 						}
-					],
-					"name_id_transform_jsonata": "$substringBefore(email, '@') & '+sandbox@' & $substringAfter(email, '@')"
+					]
 				}
 			}
 		}
@@ -732,7 +722,6 @@ func TestCreateSAMLSaasAccessApplications(t *testing.T) {
 					},
 				},
 			},
-			NameIDTransformJsonata: "$substringBefore(email, '@') & '+sandbox@' & $substringAfter(email, '@')",
 		},
 		CreatedAt:                &createdAt,
 		UpdatedAt:                &updatedAt,
@@ -773,121 +762,6 @@ func TestCreateSAMLSaasAccessApplications(t *testing.T) {
 	}
 }
 
-func TestCreateOIDCSaasAccessApplications(t *testing.T) {
-	setup()
-	defer teardown()
-
-	handler := func(w http.ResponseWriter, r *http.Request) {
-		assert.Equal(t, http.MethodPost, r.Method, "Expected method 'POST', got %s", r.Method)
-		w.Header().Set("content-type", "application/json")
-		fmt.Fprintf(w, `{
-			"success": true,
-			"errors": [],
-			"messages": [],
-			"result": {
-				"id": "480f4f69-1a28-4fdd-9240-1ed29f0ac1db",
-				"created_at": "2014-01-01T05:20:00.12345Z",
-				"updated_at": "2014-01-01T05:20:00.12345Z",
-				"aud": "737646a56ab1df6ec9bddc7e5ca84eaf3b0768850f3ffb5d74f1534911fe3893",
-				"name": "Admin OIDC Saas App",
-				"domain": "example.cloudflareaccess.com/cdn-cgi/access/sso/oidc/737646a56ab1df6ec9bddc7e5ca84eaf3b0768850f3ffb5d74f1534911fe3893",
-				"type": "saas",
-				"session_duration": "24h",
-				"allowed_idps": [],
-				"auto_redirect_to_identity": false,
-				"enable_binding_cookie": false,
-				"custom_deny_url": "https://www.example.com",
-				"custom_deny_message": "denied!",
-				"logo_url": "https://www.example.com/example.png",
-				"skip_interstitial": true,
-				"app_launcher_visible": true,
-				"service_auth_401_redirect": true,
-				"custom_non_identity_deny_url": "https://blocked.com",
-				"tags": ["engineers"],
-				"saas_app": {
-					"auth_type": "oidc",
-					"client_id": "737646a56ab1df6ec9bddc7e5ca84eaf3b0768850f3ffb5d74f1534911fe3893",
-					"client_secret": "secret",
-					"redirect_uris": ["https://saas.example.com"],
-					"grant_types": ["authorization_code"],
-					"scopes": ["openid", "email", "profile", "groups"],
-					"app_launcher_url": "https://saas.example.com",
-					"group_filter_regex": ".*"
-				}
-			}
-		}
-		`)
-	}
-
-	createdAt, _ := time.Parse(time.RFC3339, "2014-01-01T05:20:00.12345Z")
-	updatedAt, _ := time.Parse(time.RFC3339, "2014-01-01T05:20:00.12345Z")
-	fullAccessApplication := AccessApplication{
-		ID:                     "480f4f69-1a28-4fdd-9240-1ed29f0ac1db",
-		Name:                   "Admin OIDC Saas App",
-		Domain:                 "example.cloudflareaccess.com/cdn-cgi/access/sso/oidc/737646a56ab1df6ec9bddc7e5ca84eaf3b0768850f3ffb5d74f1534911fe3893",
-		Type:                   "saas",
-		SessionDuration:        "24h",
-		AUD:                    "737646a56ab1df6ec9bddc7e5ca84eaf3b0768850f3ffb5d74f1534911fe3893",
-		AllowedIdps:            []string{},
-		AutoRedirectToIdentity: BoolPtr(false),
-		EnableBindingCookie:    BoolPtr(false),
-		AppLauncherVisible:     BoolPtr(true),
-		ServiceAuth401Redirect: BoolPtr(true),
-		CustomDenyMessage:      "denied!",
-		CustomDenyURL:          "https://www.example.com",
-		LogoURL:                "https://www.example.com/example.png",
-		SkipInterstitial:       BoolPtr(true),
-		SaasApplication: &SaasApplication{
-			AuthType:         "oidc",
-			ClientID:         "737646a56ab1df6ec9bddc7e5ca84eaf3b0768850f3ffb5d74f1534911fe3893",
-			ClientSecret:     "secret",
-			RedirectURIs:     []string{"https://saas.example.com"},
-			GrantTypes:       []string{"authorization_code"},
-			Scopes:           []string{"openid", "email", "profile", "groups"},
-			AppLauncherURL:   "https://saas.example.com",
-			GroupFilterRegex: ".*",
-		},
-		CreatedAt:                &createdAt,
-		UpdatedAt:                &updatedAt,
-		CustomNonIdentityDenyURL: "https://blocked.com",
-		Tags:                     []string{"engineers"},
-	}
-
-	mux.HandleFunc("/accounts/"+testAccountID+"/access/apps", handler)
-
-	actual, err := client.CreateAccessApplication(context.Background(), AccountIdentifier(testAccountID), CreateAccessApplicationParams{
-		Name: "Admin Saas Site",
-		SaasApplication: &SaasApplication{
-			AuthType:         "oidc",
-			RedirectURIs:     []string{"https://saas.example.com"},
-			AppLauncherURL:   "https://saas.example.com",
-			GroupFilterRegex: ".*",
-		},
-		SessionDuration: "24h",
-	})
-
-	if assert.NoError(t, err) {
-		assert.Equal(t, fullAccessApplication, actual)
-	}
-
-	mux.HandleFunc("/zones/"+testZoneID+"/access/apps", handler)
-
-	actual, err = client.CreateAccessApplication(context.Background(), ZoneIdentifier(testZoneID), CreateAccessApplicationParams{
-		Name: "Admin Saas Site",
-		SaasApplication: &SaasApplication{
-			AuthType:         "oidc",
-			RedirectURIs:     []string{"https://saas.example.com"},
-			AppLauncherURL:   "https://saas.example.com",
-			GroupFilterRegex: ".*",
-		},
-		SessionDuration: "24h",
-	})
-
-	if assert.NoError(t, err) {
-		assert.Equal(t, fullAccessApplication, actual)
-	}
-}
-
 func TestCreateApplicationWithAccessAppLauncherCustomization(t *testing.T) {
 	setup()
 	defer teardown()
diff --git a/access_organization_test.go b/access_organization_test.go
index fc9cfb4bf..295a7f7d8 100644
--- a/access_organization_test.go
+++ b/access_organization_test.go
@@ -29,8 +29,6 @@ func TestAccessOrganization(t *testing.T) {
 				"is_ui_read_only": false,
 				"user_seat_expiration_inactive_time": "720h",
 				"auto_redirect_to_identity": true,
-				"allow_authenticate_via_warp": true,
-				"warp_auth_session_duration": "24h",
 				"session_duration": "12h",
 				"login_design": {
 					"background_color": "#c5ed1b",
@@ -48,12 +46,10 @@ func TestAccessOrganization(t *testing.T) {
 	updatedAt, _ := time.Parse(time.RFC3339, "2014-01-01T05:20:00.12345Z")
 
 	want := AccessOrganization{
-		Name:                     "Widget Corps Internal Applications",
-		CreatedAt:                &createdAt,
-		UpdatedAt:                &updatedAt,
-		AuthDomain:               "test.cloudflareaccess.com",
-		AllowAuthenticateViaWarp: BoolPtr(true),
-		WarpAuthSessionDuration:  StringPtr("24h"),
+		Name:       "Widget Corps Internal Applications",
+		CreatedAt:  &createdAt,
+		UpdatedAt:  &updatedAt,
+		AuthDomain: "test.cloudflareaccess.com",
 		LoginDesign: AccessOrganizationLoginDesign{
 			BackgroundColor: "#c5ed1b",
 			LogoPath:        "https://example.com/logo.png",
@@ -100,8 +96,6 @@ func TestCreateAccessOrganization(t *testing.T) {
 				"updated_at": "2014-01-01T05:20:00.12345Z",
 				"name": "Widget Corps Internal Applications",
 				"auth_domain": "test.cloudflareaccess.com",
-				"allow_authenticate_via_warp": true,
-				"warp_auth_session_duration": "24h",
 				"is_ui_read_only": true,
 				"session_duration": "12h",
 				"login_design": {
@@ -120,12 +114,10 @@ func TestCreateAccessOrganization(t *testing.T) {
 	updatedAt, _ := time.Parse(time.RFC3339, "2014-01-01T05:20:00.12345Z")
 
 	want := AccessOrganization{
-		CreatedAt:                &createdAt,
-		UpdatedAt:                &updatedAt,
-		Name:                     "Widget Corps Internal Applications",
-		AuthDomain:               "test.cloudflareaccess.com",
-		AllowAuthenticateViaWarp: BoolPtr(true),
-		WarpAuthSessionDuration:  StringPtr("24h"),
+		CreatedAt:  &createdAt,
+		UpdatedAt:  &updatedAt,
+		Name:       "Widget Corps Internal Applications",
+		AuthDomain: "test.cloudflareaccess.com",
 		LoginDesign: AccessOrganizationLoginDesign{
 			BackgroundColor: "#c5ed1b",
 			LogoPath:        "https://example.com/logo.png",
@@ -194,8 +186,6 @@ func TestUpdateAccessOrganization(t *testing.T) {
 				"updated_at": "2014-01-01T05:20:00.12345Z",
 				"name": "Widget Corps Internal Applications",
 				"auth_domain": "test.cloudflareaccess.com",
-				"allow_authenticate_via_warp": false,
-				"warp_auth_session_duration": "18h",
 				"login_design": {
 					"background_color": "#c5ed1b",
 					"logo_path": "https://example.com/logo.png",
@@ -215,12 +205,10 @@ func TestUpdateAccessOrganization(t *testing.T) {
 	updatedAt, _ := time.Parse(time.RFC3339, "2014-01-01T05:20:00.12345Z")
 
 	want := AccessOrganization{
-		CreatedAt:                &createdAt,
-		UpdatedAt:                &updatedAt,
-		Name:                     "Widget Corps Internal Applications",
-		AuthDomain:               "test.cloudflareaccess.com",
-		WarpAuthSessionDuration:  StringPtr("18h"),
-		AllowAuthenticateViaWarp: BoolPtr(false),
+		CreatedAt:  &createdAt,
+		UpdatedAt:  &updatedAt,
+		Name:       "Widget Corps Internal Applications",
+		AuthDomain: "test.cloudflareaccess.com",
 		LoginDesign: AccessOrganizationLoginDesign{
 			BackgroundColor: "#c5ed1b",
 			LogoPath:        "https://example.com/logo.png",
@@ -245,11 +233,9 @@ func TestUpdateAccessOrganization(t *testing.T) {
 			HeaderText:      "Widget Corp",
 			FooterText:      "© Widget Corp",
 		},
-		WarpAuthSessionDuration:  StringPtr("18h"),
-		AllowAuthenticateViaWarp: BoolPtr(false),
-		IsUIReadOnly:             BoolPtr(false),
-		SessionDuration:          StringPtr("12h"),
-		UIReadOnlyToggleReason:   "this is my reason",
+		IsUIReadOnly:           BoolPtr(false),
+		SessionDuration:        StringPtr("12h"),
+		UIReadOnlyToggleReason: "this is my reason",
 	})
 
 	if assert.NoError(t, err) {
@@ -268,11 +254,9 @@ func TestUpdateAccessOrganization(t *testing.T) {
 			HeaderText:      "Widget Corp",
 			FooterText:      "© Widget Corp",
 		},
-		WarpAuthSessionDuration:  StringPtr("18h"),
-		AllowAuthenticateViaWarp: BoolPtr(false),
-		IsUIReadOnly:             BoolPtr(false),
-		UIReadOnlyToggleReason:   "this is my reason",
-		SessionDuration:          StringPtr("12h"),
+		IsUIReadOnly:           BoolPtr(false),
+		UIReadOnlyToggleReason: "this is my reason",
+		SessionDuration:        StringPtr("12h"),
 	})
 
 	if assert.NoError(t, err) {
diff --git a/dlp_profile_test.go b/dlp_profile_test.go
index 9a12c24a6..67f014d5a 100644
--- a/dlp_profile_test.go
+++ b/dlp_profile_test.go
@@ -75,13 +75,7 @@ func TestDLPProfiles(t *testing.T) {
 					"updated_at": "2022-10-18T08:00:57Z",
 					"type": "custom",
 					"description": "just a custom profile example",
-					"allowed_match_count": 1,
-					"context_awareness": {
-						"enabled": false,
-						"skip": {
-							"files": false
-						}
-					}
+					"allowed_match_count": 1
 				}
 			]
 		}
@@ -98,7 +92,7 @@ func TestDLPProfiles(t *testing.T) {
 			Type:              "predefined",
 			Description:       "",
 			AllowedMatchCount: 0,
-			ContextAwareness: DLPContextAwareness{
+			ContextAwareness: &DLPContextAwareness{
 				Enabled: BoolPtr(true),
 				Skip: DLPContextAwarenessSkip{
 					Files: BoolPtr(true),
@@ -126,12 +120,7 @@ func TestDLPProfiles(t *testing.T) {
 			Type:              "custom",
 			Description:       "just a custom profile example",
 			AllowedMatchCount: 1,
-			ContextAwareness: DLPContextAwareness{
-				Enabled: BoolPtr(false),
-				Skip: DLPContextAwarenessSkip{
-					Files: BoolPtr(false),
-				},
-			},
+			// Omit ContextAwareness to test ContextAwareness optionality
 			Entries: []DLPEntry{
 				{
 					ID:        "ef79b054-12d4-4067-bb30-b85f6267b91c",
@@ -211,7 +200,7 @@ func TestGetDLPProfile(t *testing.T) {
 		Type:              "custom",
 		Description:       "just a custom profile example",
 		AllowedMatchCount: 42,
-		ContextAwareness: DLPContextAwareness{
+		ContextAwareness: &DLPContextAwareness{
 			Enabled: BoolPtr(false),
 			Skip: DLPContextAwarenessSkip{
 				Files: BoolPtr(false),
@@ -586,7 +575,7 @@ func TestUpdateDLPPredefinedProfile(t *testing.T) {
 		Type:              "predefined",
 		Description:       "example predefined profile",
 		AllowedMatchCount: 0,
-		ContextAwareness: DLPContextAwareness{
+		ContextAwareness: &DLPContextAwareness{
 			Enabled: BoolPtr(true),
 			Skip: DLPContextAwarenessSkip{
 				Files: BoolPtr(true),
diff --git a/hyperdrive_test.go b/hyperdrive_test.go
index c19378f14..633ce9cbb 100644
--- a/hyperdrive_test.go
+++ b/hyperdrive_test.go
@@ -164,11 +164,16 @@ func TestHyperdriveConfig_Create(t *testing.T) {
 		assert.Equal(t, ErrMissingHyperdriveConfigName, err)
 	}
 
+	_, err = client.CreateHyperdriveConfig(context.Background(), AccountIdentifier(testAccountID), CreateHyperdriveConfigParams{Name: "example-hyperdrive"})
+	if assert.Error(t, err) {
+		assert.Equal(t, ErrMissingHyperdriveConfigPassword, err)
+	}
+
 	result, err := client.CreateHyperdriveConfig(context.Background(), AccountIdentifier(testAccountID), CreateHyperdriveConfigParams{
-		Name: "example-hyperdrive",
+		Name:     "example-hyperdrive",
+		Password: "password",
 		Origin: HyperdriveConfigOrigin{
 			Database: "postgres",
-			Password: "password",
 			Host:     "database.example.com",
 			Port:     5432,
 			Scheme:   "postgres",
@@ -259,9 +264,9 @@ func TestHyperdriveConfig_Update(t *testing.T) {
 	result, err := client.UpdateHyperdriveConfig(context.Background(), AccountIdentifier(testAccountID), UpdateHyperdriveConfigParams{
 		HyperdriveID: "6b7efc370ea34ded8327fa20698dfe3a",
 		Name:         "example-hyperdrive",
+		Password:     "password",
 		Origin: HyperdriveConfigOrigin{
 			Database: "postgres",
-			Password: "password",
 			Host:     "database.example.com",
 			Port:     5432,
 			Scheme:   "postgres",
diff --git a/images_variants_test.go b/images_variants_test.go
deleted file mode 100644
index 994eaad2c..000000000
--- a/images_variants_test.go
+++ /dev/null
@@ -1,195 +0,0 @@
-package cloudflare
-
-import (
-	"context"
-	"fmt"
-	"net/http"
-	"testing"
-
-	"github.com/stretchr/testify/assert"
-)
-
-const (
-	testImagesVariantID = "hero"
-)
-
-func TestImageVariants_List(t *testing.T) {
-	setup()
-	defer teardown()
-
-	handler := func(w http.ResponseWriter, r *http.Request) {
-		assert.Equal(t, http.MethodGet, r.Method, "Expected method 'GET', got %s", r.Method)
-		w.Header().Set("Content-Type", "application/json")
-		fmt.Fprint(w, loadFixture("images_variants", "single_list"))
-	}
-
-	mux.HandleFunc("/accounts/"+testAccountID+"/images/v1/variants", handler)
-
-	want := ListImageVariantsResult{
-		ImagesVariants: map[string]ImagesVariant{
-			"hero": {
-				ID:                     "hero",
-				NeverRequireSignedURLs: BoolPtr(true),
-				Options: ImagesVariantsOptions{
-					Fit:      "scale-down",
-					Height:   768,
-					Width:    1366,
-					Metadata: "none",
-				},
-			},
-		},
-	}
-
-	got, err := client.ListImagesVariants(context.Background(), AccountIdentifier(testAccountID), ListImageVariantsParams{})
-	if assert.NoError(t, err) {
-		assert.Equal(t, want, got)
-	}
-}
-
-func TestImageVariants_Delete(t *testing.T) {
-	setup()
-	defer teardown()
-
-	handler := func(w http.ResponseWriter, r *http.Request) {
-		assert.Equal(t, http.MethodDelete, r.Method, "Expected method '%s', got %s", http.MethodDelete, r.Method)
-		w.Header().Set("content-type", "application/json")
-		fmt.Fprint(w, `{
-			"success": true,
-			"errors": [],
-			"messages": [],
-			"result": {}
-		}`)
-	}
-
-	url := fmt.Sprintf("/accounts/%s/images/v1/variants/%s", testAccountID, testImagesVariantID)
-	mux.HandleFunc(url, handler)
-
-	err := client.DeleteImagesVariant(context.Background(), AccountIdentifier(testAccountID), testImagesVariantID)
-	assert.NoError(t, err)
-}
-
-func TestImagesVariants_Get(t *testing.T) {
-	setup()
-	defer teardown()
-
-	handler := func(w http.ResponseWriter, r *http.Request) {
-		assert.Equal(t, http.MethodGet, r.Method, "Expected method '%s', got %s", http.MethodGet, r.Method)
-		w.Header().Set("content-type", "application/json")
-		fmt.Fprint(w, loadFixture("images_variants", "single_full"))
-	}
-
-	url := fmt.Sprintf("/accounts/%s/images/v1/variants/%s", testAccountID, testImagesVariantID)
-	mux.HandleFunc(url, handler)
-
-	want := ImagesVariant{
-		ID:                     "hero",
-		NeverRequireSignedURLs: BoolPtr(true),
-		Options: ImagesVariantsOptions{
-			Fit:      "scale-down",
-			Height:   768,
-			Width:    1366,
-			Metadata: "none",
-		},
-	}
-
-	got, err := client.GetImagesVariant(context.Background(), AccountIdentifier(testAccountID), testImagesVariantID)
-	if assert.NoError(t, err) {
-		assert.Equal(t, want, got)
-	}
-}
-
-func TestImagesVariants_Create(t *testing.T) {
-	setup()
-	defer teardown()
-
-	handler := func(w http.ResponseWriter, r *http.Request) {
-		assert.Equal(t, http.MethodPost, r.Method, "Expected method '%s', got %s", http.MethodPost, r.Method)
-		w.Header().Set("content-type", "application/json")
-		fmt.Fprint(w, loadFixture("images_variants", "single_full"))
-	}
-
-	url := fmt.Sprintf("/accounts/%s/images/v1/variants", testAccountID)
-	mux.HandleFunc(url, handler)
-
-	want := ImagesVariant{
-		ID:                     "hero",
-		NeverRequireSignedURLs: BoolPtr(true),
-		Options: ImagesVariantsOptions{
-			Fit:      "scale-down",
-			Height:   768,
-			Width:    1366,
-			Metadata: "none",
-		},
-	}
-
-	got, err := client.CreateImagesVariant(context.Background(), AccountIdentifier(testAccountID), CreateImagesVariantParams{
-		ID:                     testImagesVariantID,
-		NeverRequireSignedURLs: BoolPtr(true),
-		Options: ImagesVariantsOptions{
-			Fit:      "scale-down",
-			Height:   768,
-			Width:    1366,
-			Metadata: "none",
-		},
-	})
-	if assert.NoError(t, err) {
-		assert.Equal(t, want, got)
-	}
-}
-
-func TestImagesVariants_Update(t *testing.T) {
-	setup()
-	defer teardown()
-
-	handler := func(w http.ResponseWriter, r *http.Request) {
-		assert.Equal(t, http.MethodPatch, r.Method, "Expected method '%s', got %s", http.MethodPatch, r.Method)
-		w.Header().Set("content-type", "application/json")
-		fmt.Fprint(w, loadFixture("images_variants", "single_full"))
-	}
-
-	url := fmt.Sprintf("/accounts/%s/images/v1/variants/%s", testAccountID, testImagesVariantID)
-	mux.HandleFunc(url, handler)
-
-	want := ImagesVariant{
-		ID:                     "hero",
-		NeverRequireSignedURLs: BoolPtr(true),
-		Options: ImagesVariantsOptions{
-			Fit:      "scale-down",
-			Height:   768,
-			Width:    1366,
-			Metadata: "none",
-		},
-	}
-
-	got, err := client.UpdateImagesVariant(context.Background(), AccountIdentifier(testAccountID), UpdateImagesVariantParams{
-		ID:                     "hero",
-		NeverRequireSignedURLs: BoolPtr(true),
-		Options: ImagesVariantsOptions{
-			Fit:      "scale-down",
-			Height:   768,
-			Width:    1366,
-			Metadata: "none",
-		},
-	})
-
-	if assert.NoError(t, err) {
-		assert.Equal(t, want, got)
-	}
-}
-
-func TestImageVariants_MissingAccountId(t *testing.T) {
-	_, err := client.ListImagesVariants(context.Background(), AccountIdentifier(""), ListImageVariantsParams{})
-	assert.Equal(t, ErrMissingAccountID, err)
-
-	_, err = client.GetImagesVariant(context.Background(), AccountIdentifier(""), testImagesVariantID)
-	assert.Equal(t, ErrMissingAccountID, err)
-
-	_, err = client.CreateImagesVariant(context.Background(), AccountIdentifier(""), CreateImagesVariantParams{})
-	assert.Equal(t, ErrMissingAccountID, err)
-
-	err = client.DeleteImagesVariant(context.Background(), AccountIdentifier(""), testImagesVariantID)
-	assert.Equal(t, ErrMissingAccountID, err)
-
-	_, err = client.UpdateImagesVariant(context.Background(), AccountIdentifier(""), UpdateImagesVariantParams{})
-	assert.Equal(t, ErrMissingAccountID, err)
-}
diff --git a/magic_transit_ipsec_tunnel_test.go b/magic_transit_ipsec_tunnel_test.go
index 65f896da3..ef7a0624a 100644
--- a/magic_transit_ipsec_tunnel_test.go
+++ b/magic_transit_ipsec_tunnel_test.go
@@ -162,68 +162,6 @@ func TestCreateMagicTransitIPsecTunnels(t *testing.T) {
 	}
 }
 
-func TestCreateMagicTransitIPsecTunnelsWithHealthcheck(t *testing.T) {
-	setup()
-	defer teardown()
-
-	handler := func(w http.ResponseWriter, r *http.Request) {
-		assert.Equal(t, http.MethodPost, r.Method, "Expected method 'POST', got %s", r.Method)
-		w.Header().Set("content-type", "application/json")
-		fmt.Fprint(w, `{
-      "success": true,
-      "errors": [],
-      "messages": [],
-      "result": {
-        "ipsec_tunnels": [
-          {
-            "id": "c4a7362d577a6c3019a474fd6f485821",
-            "created_on": "2017-06-14T00:00:00Z",
-            "modified_on": "2017-06-14T05:20:00Z",
-            "name": "IPsec_1",
-            "customer_endpoint": "203.0.113.1",
-            "cloudflare_endpoint": "203.0.113.2",
-            "interface_address": "192.0.2.0/31",
-            "description": "Tunnel for ISP X",
-            "health_check": {
-              "enabled": true,
-              "type": "reply",
-              "rate": "mid",
-              "direction": "bidirectional"
-            }
-          }
-        ]
-      }
-    }`)
-	}
-
-	mux.HandleFunc("/accounts/"+testAccountID+"/magic/ipsec_tunnels", handler)
-
-	createdOn, _ := time.Parse(time.RFC3339, "2017-06-14T00:00:00Z")
-	modifiedOn, _ := time.Parse(time.RFC3339, "2017-06-14T05:20:00Z")
-
-	want := []MagicTransitIPsecTunnel{{
-		ID:                 "c4a7362d577a6c3019a474fd6f485821",
-		CreatedOn:          &createdOn,
-		ModifiedOn:         &modifiedOn,
-		Name:               "IPsec_1",
-		CustomerEndpoint:   "203.0.113.1",
-		CloudflareEndpoint: "203.0.113.2",
-		InterfaceAddress:   "192.0.2.0/31",
-		Description:        "Tunnel for ISP X",
-		HealthCheck: &MagicTransitTunnelHealthcheck{
-			Enabled:   true,
-			Type:      "reply",
-			Rate:      "mid",
-			Direction: "bidirectional",
-		},
-	}}
-
-	actual, err := client.CreateMagicTransitIPsecTunnels(context.Background(), testAccountID, want)
-	if assert.NoError(t, err) {
-		assert.Equal(t, want, actual)
-	}
-}
-
 func TestUpdateMagicTransitIPsecTunnel(t *testing.T) {
 	setup()
 	defer teardown()
diff --git a/registrar_test.go b/registrar_test.go
index 98590ac45..c1007a6cc 100644
--- a/registrar_test.go
+++ b/registrar_test.go
@@ -116,7 +116,7 @@ func TestRegistrarDomains(t *testing.T) {
 	defer teardown()
 
 	handler := func(w http.ResponseWriter, r *http.Request) {
-		assert.Equal(t, http.MethodGet, r.Method, "Expected method 'GET', got %s", r.Method)
+		assert.Equal(t, http.MethodPost, r.Method, "Expected method 'POST', got %s", r.Method)
 		w.Header().Set("content-type", "application/json")
 		fmt.Fprintf(w, `{
 			"success": true,
diff --git a/teams_accounts_test.go b/teams_accounts_test.go
index a7d096d1c..010e0059e 100644
--- a/teams_accounts_test.go
+++ b/teams_accounts_test.go
@@ -54,13 +54,8 @@ func TestTeamsAccountConfiguration(t *testing.T) {
 			"result": {
 				"settings": {
 					"antivirus": {
-					"enabled_download_phase": true,
-						"notification_settings": {
-					  		"enabled":true,
-					   		"msg":"msg",
-					   		"support_url":"https://hi.com"
-						}
-				 	},
+						"enabled_download_phase": true
+					},
 					"tls_decrypt": {
 						"enabled": true
 					},
@@ -87,7 +82,7 @@ func TestTeamsAccountConfiguration(t *testing.T) {
 					"browser_isolation": {
 						"url_browser_isolation_enabled": true,
 						"non_identity_enabled": true
-					},
+          				},
 					"body_scanning": {
 						"inspection_mode": "deep"
 					},
@@ -106,14 +101,7 @@ func TestTeamsAccountConfiguration(t *testing.T) {
 
 	if assert.NoError(t, err) {
 		assert.Equal(t, actual.Settings, TeamsAccountSettings{
-			Antivirus: &TeamsAntivirus{
-				EnabledDownloadPhase: true,
-				NotificationSettings: &TeamsNotificationSettings{
-					Enabled:    &trueValue,
-					Message:    "msg",
-					SupportURL: "https://hi.com",
-				},
-			},
+			Antivirus:         &TeamsAntivirus{EnabledDownloadPhase: true},
 			ActivityLog:       &TeamsActivityLog{Enabled: true},
 			TLSDecrypt:        &TeamsTLSDecrypt{Enabled: true},
 			ProtocolDetection: &TeamsProtocolDetection{Enabled: true},
diff --git a/testdata/fixtures/images_variants/single_full.json b/testdata/fixtures/images_variants/single_full.json
deleted file mode 100644
index f8bc039b5..000000000
--- a/testdata/fixtures/images_variants/single_full.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-  "errors": [],
-  "messages": [],
-  "result": {
-    "variant": {
-      "id": "hero",
-      "neverRequireSignedURLs": true,
-      "options": {
-        "fit": "scale-down",
-        "height": 768,
-        "metadata": "none",
-        "width": 1366
-      }
-    }
-  },
-  "success": true
-}
diff --git a/testdata/fixtures/images_variants/single_list.json b/testdata/fixtures/images_variants/single_list.json
deleted file mode 100644
index 1838aa6ce..000000000
--- a/testdata/fixtures/images_variants/single_list.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
-  "errors": [],
-  "messages": [],
-  "result": {
-    "variants": {
-      "hero": {
-        "id": "hero",
-        "neverRequireSignedURLs": true,
-        "options": {
-          "fit": "scale-down",
-          "height": 768,
-          "metadata": "none",
-          "width": 1366
-        }
-      }
-    }
-  },
-  "success": true
-}
diff --git a/zaraz_test.go b/zaraz_test.go
index 0087c9334..a59115e3e 100644
--- a/zaraz_test.go
+++ b/zaraz_test.go
@@ -30,8 +30,8 @@ var expectedConfig ZarazConfig = ZarazConfig{
 			Enabled:          &trueValue,
 			DefaultFields:    map[string]any{},
 			Name:             "Custom HTML",
-			Actions: map[string]ZarazAction{
-				"7ccae28d-5e00-4f0b-a491-519ecde998c8": {
+			NeoEvents: []ZarazNeoEvent{
+				{
 					ActionType:       "event",
 					BlockingTriggers: []string{},
 					Data: map[string]any{
@@ -179,19 +179,19 @@ func TestGetZarazConfig(t *testing.T) {
 					  "trigger": "pageload"
 					},
 					"name": "Custom HTML",
-					"actions": {
-					  "7ccae28d-5e00-4f0b-a491-519ecde998c8": {
-							"actionType": "event",
-							"blockingTriggers": [],
-							"data": {
-								"__zaraz_setting_name": "pageview1",
-								"htmlCode": "<script>console.log('pageview')</script>"
-							},
-							"firingTriggers": [
-								"Pageview"
-							]
+					"neoEvents": [
+					  {
+						"actionType": "event",
+						"blockingTriggers": [],
+						"data": {
+						  "__zaraz_setting_name": "pageview1",
+						  "htmlCode": "<script>console.log('pageview')</script>"
+						},
+						"firingTriggers": [
+						  "Pageview"
+						]
 					  }
-					},
+					],
 					"permissions": [
 					  "execute_unsafe_scripts"
 					],
@@ -340,274 +340,19 @@ func TestUpdateZarazConfig(t *testing.T) {
 					  "trigger": "pageload"
 					},
 					"name": "Custom HTML",
-					"actions": {
-					  "7ccae28d-5e00-4f0b-a491-519ecde998c8": {
-							"actionType": "event",
-							"blockingTriggers": [],
-							"data": {
-								"__zaraz_setting_name": "pageview1",
-								"htmlCode": "<script>console.log('pageview')</script>"
-							},
-							"firingTriggers": [
-								"Pageview"
-							]
-					  }
-					},
-					"permissions": [
-					  "execute_unsafe_scripts"
-					],
-					"settings": {},
-					"type": "component"
-				  }
-				},
-				"triggers": {
-				  "Pageview": {
-					"clientRules": [],
-					"description": "All page loads",
-					"excludeRules": [],
-					"loadRules": [
-					  {
-						"match": "{{ client.__zarazTrack }}",
-						"op": "EQUALS",
-						"value": "Pageview"
-					  }
-					],
-					"name": "Pageview",
-					"system": "pageload"
-				  },
-				  "TFOl": {
-					"description": "",
-					"excludeRules": [],
-					"loadRules": [
-					  {
-						"id": "Kqsc",
-						"match": "test",
-						"op": "CONTAINS",
-						"value": "test"
-					  },
+					"neoEvents": [
 					  {
-						"action": "clickListener",
-						"id": "EDnV",
-						"settings": {
-						  "selector": "test",
-						  "type": "css",
-						  "waitForTags": 0
-						}
-					  }
-					],
-					"name": "test"
-				  }
-				},
-				"variables": {
-				  "jwIx": {
-					"name": "test",
-					"type": "string",
-					"value": "sss"
-				  },
-				  "pAuL": {
-					"name": "test-worker-var",
-					"type": "worker",
-					"value": {
-					  "escapedWorkerName": "worker-var-example",
-					  "mutableId": "m.zpt3q__WyW-61WM2qwgGoBl4Nxg-sfBsaMhu9NayjwU",
-					  "workerTag": "68aba570db9d4ec5b159624e2f7ad8bf"
-					}
-				  }
-				},
-				"zarazVersion": 44
-			  }
-		}`)
-	}
-
-	mux.HandleFunc("/zones/"+testZoneID+"/settings/zaraz/v2/config", handler)
-	payload := UpdateZarazConfigParams{
-		DebugKey:      "cheese",
-		ZarazVersion:  44,
-		DataLayer:     &trueValue,
-		Dlp:           []any{},
-		HistoryChange: &trueValue,
-		Settings: ZarazConfigSettings{
-			AutoInjectScript: &trueValue,
-		},
-		Tools: map[string]ZarazTool{
-			"PBQr": {
-				BlockingTriggers: []string{},
-				Enabled:          &trueValue,
-				DefaultFields:    map[string]any{},
-				Name:             "Custom HTML",
-				Actions: map[string]ZarazAction{
-					"7ccae28d-5e00-4f0b-a491-519ecde998c8": {
-						ActionType:       "event",
-						BlockingTriggers: []string{},
-						Data: map[string]any{
-							"__zaraz_setting_name": "pageview1",
-							"htmlCode":             "<script>console.log('pageview')</script>",
+						"actionType": "event",
+						"blockingTriggers": [],
+						"data": {
+						  "__zaraz_setting_name": "pageview1",
+						  "htmlCode": "<script>console.log('pageview')</script>"
 						},
-						FiringTriggers: []string{"Pageview"},
-					},
-				},
-				Type:           ZarazToolComponent,
-				DefaultPurpose: "rJJC",
-				Component:      "html",
-				Permissions:    []string{"execute_unsafe_scripts"},
-				Settings:       map[string]any{},
-			},
-		},
-		Triggers: map[string]ZarazTrigger{
-			"Pageview": {
-				Name:         "Pageview",
-				Description:  "All page loads",
-				LoadRules:    []ZarazTriggerRule{{Match: "{{ client.__zarazTrack }}", Op: "EQUALS", Value: "Pageview"}},
-				ExcludeRules: []ZarazTriggerRule{},
-				ClientRules:  []any{},
-				System:       ZarazPageload,
-			},
-			"TFOl": {
-				Name:         "test",
-				Description:  "",
-				LoadRules:    []ZarazTriggerRule{{Id: "Kqsc", Match: "test", Op: "CONTAINS", Value: "test"}, {Id: "EDnV", Action: ZarazClickListener, Settings: ZarazRuleSettings{Selector: "test", Type: ZarazCSS}}},
-				ExcludeRules: []ZarazTriggerRule{},
-			},
-		},
-		Variables: map[string]ZarazVariable{
-			"jwIx": {
-				Name:  "test",
-				Type:  ZarazVarString,
-				Value: "sss",
-			},
-			"pAuL": {
-				Name: "test-worker-var",
-				Type: ZarazVarWorker,
-				Value: map[string]interface{}{
-					"escapedWorkerName": "worker-var-example",
-					"mutableId":         "m.zpt3q__WyW-61WM2qwgGoBl4Nxg-sfBsaMhu9NayjwU",
-					"workerTag":         "68aba570db9d4ec5b159624e2f7ad8bf",
-				},
-			},
-		},
-		Consent: ZarazConsent{
-			Enabled: &trueValue,
-			ButtonTextTranslations: ZarazButtonTextTranslations{
-				AcceptAll:        map[string]string{"en": "Accept ALL"},
-				ConfirmMyChoices: map[string]string{"en": "YES!"},
-				RejectAll:        map[string]string{"en": "Reject ALL"},
-			},
-			CompanyEmail:                          "email@example.com",
-			ConsentModalIntroHTMLWithTranslations: map[string]string{"en": "Lorem ipsum dolar set Amet?"},
-			CookieName:                            "zaraz-consent",
-			CustomCSS:                             ".test {\n    color: red;\n}",
-			CustomIntroDisclaimerDismissed:        &trueValue,
-			DefaultLanguage:                       "en",
-			HideModal:                             &falseValue,
-			PurposesWithTranslations: map[string]ZarazPurposeWithTranslations{
-				"rJJC": {
-					Description: map[string]string{"en": "Blah blah"},
-					Name:        map[string]string{"en": "Analytics"},
-					Order:       0,
-				},
-			},
-		},
-	}
-	payload.DebugKey = "butter" // Updating config
-	modifiedConfig := expectedConfig
-	modifiedConfig.DebugKey = "butter" // Updating config
-	expected := ZarazConfigResponse{
-		Result: modifiedConfig,
-	}
-
-	actual, err := client.UpdateZarazConfig(context.Background(), ZoneIdentifier(testZoneID), payload)
-	require.NoError(t, err)
-
-	assert.Equal(t, expected.Result, actual.Result)
-}
-
-func TestUpdateDeprecatedZarazConfig(t *testing.T) {
-	setup()
-	defer teardown()
-
-	handler := func(w http.ResponseWriter, r *http.Request) {
-		assert.Equal(t, http.MethodPut, r.Method, "Expected method 'PUT', got %s", r.Method)
-
-		w.Header().Set("content-type", "application/json")
-		fmt.Fprint(w, `{
-			"errors": [],
-			"messages": [],
-			"success": true,
-			"result": {
-				"consent": {
-				  "buttonTextTranslations": {
-					"accept_all": {
-					  "en": "Accept ALL"
-					},
-					"confirm_my_choices": {
-					  "en": "YES!"
-					},
-					"reject_all": {
-					  "en": "Reject ALL"
-					}
-				  },
-				  "companyEmail": "email@example.com",
-				  "consentModalIntroHTMLWithTranslations": {
-					"en": "Lorem ipsum dolar set Amet?"
-				  },
-				  "cookieName": "zaraz-consent",
-				  "customCSS": ".test {\n    color: red;\n}",
-				  "customIntroDisclaimerDismissed": true,
-				  "defaultLanguage": "en",
-				  "enabled": true,
-				  "hideModal": false,
-				  "purposesWithTranslations": {
-					"rJJC": {
-					  "description": {
-						"en": "Blah blah"
-					  },
-					  "name": {
-						"en": "Analytics"
-					  },
-					  "order": 0
-					}
-				  }
-				},
-				"dataLayer": true,
-				"debugKey": "butter",
-				"dlp": [],
-				"historyChange": true,
-				"invalidKey": "cheese",
-				"settings": {
-				  "autoInjectScript": true
-				},
-				"tools": {
-				  "PBQr": {
-					"blockingTriggers": [],
-					"component": "html",
-					"defaultFields": {},
-					"defaultPurpose": "rJJC",
-					"enabled": true,
-					"mode": {
-					  "cloud": false,
-					  "ignoreSPA": true,
-					  "light": false,
-					  "sample": false,
-					  "segment": {
-						"end": 100,
-						"start": 0
-					  },
-					  "trigger": "pageload"
-					},
-					"name": "Custom HTML",
-					"actions": {
-					  "7ccae28d-5e00-4f0b-a491-519ecde998c8": {
-							"actionType": "event",
-							"blockingTriggers": [],
-							"data": {
-								"__zaraz_setting_name": "pageview1",
-								"htmlCode": "<script>console.log('pageview')</script>"
-							},
-							"firingTriggers": [
-								"Pageview"
-							]
+						"firingTriggers": [
+						  "Pageview"
+						]
 					  }
-					},
+					],
 					"permissions": [
 					  "execute_unsafe_scripts"
 					],
@@ -690,8 +435,8 @@ func TestUpdateDeprecatedZarazConfig(t *testing.T) {
 				Enabled:          &trueValue,
 				DefaultFields:    map[string]any{},
 				Name:             "Custom HTML",
-				Actions: map[string]ZarazAction{
-					"7ccae28d-5e00-4f0b-a491-519ecde998c8": {
+				NeoEvents: []ZarazNeoEvent{
+					{
 						ActionType:       "event",
 						BlockingTriggers: []string{},
 						Data: map[string]any{