diff --git a/access_codes.go b/access_codes.go index 4bce1da..6ce5abb 100644 --- a/access_codes.go +++ b/access_codes.go @@ -30,6 +30,7 @@ type AccessCodesCreateRequest struct { type AccessCodesCreateMultipleRequest struct { DeviceIds []string `json:"device_ids,omitempty"` BehaviorWhenCodeCannotBeShared *AccessCodesCreateMultipleRequestBehaviorWhenCodeCannotBeShared `json:"behavior_when_code_cannot_be_shared,omitempty"` + PreferredCodeLength *float64 `json:"preferred_code_length,omitempty"` Name *string `json:"name,omitempty"` StartsAt *string `json:"starts_at,omitempty"` EndsAt *string `json:"ends_at,omitempty"` diff --git a/acs/types.go b/acs/types.go index 65384ba..d93d026 100644 --- a/acs/types.go +++ b/acs/types.go @@ -99,6 +99,7 @@ type CredentialsAssignResponseAcsCredential struct { AcsUserId *string `json:"acs_user_id,omitempty"` AcsCredentialPoolId *string `json:"acs_credential_pool_id,omitempty"` AcsSystemId string `json:"acs_system_id"` + ParentAcsCredentialId *string `json:"parent_acs_credential_id,omitempty"` DisplayName string `json:"display_name"` Code *string `json:"code,omitempty"` AccessMethod CredentialsAssignResponseAcsCredentialAccessMethod `json:"access_method,omitempty"` @@ -192,6 +193,8 @@ func (c CredentialsAssignResponseAcsCredentialExternalType) Ptr() *CredentialsAs type CredentialsAssignResponseAcsCredentialVisionlineMetadata struct { JoinerAcsCredentialIds []string `json:"joiner_acs_credential_ids,omitempty"` + GuestAcsEntranceIds []string `json:"guest_acs_entrance_ids,omitempty"` + CommonAcsEntranceIds []string `json:"common_acs_entrance_ids,omitempty"` _rawJSON json.RawMessage } @@ -246,6 +249,7 @@ type CredentialsCreateResponseAcsCredential struct { AcsUserId *string `json:"acs_user_id,omitempty"` AcsCredentialPoolId *string `json:"acs_credential_pool_id,omitempty"` AcsSystemId string `json:"acs_system_id"` + ParentAcsCredentialId *string `json:"parent_acs_credential_id,omitempty"` DisplayName string `json:"display_name"` Code *string `json:"code,omitempty"` AccessMethod CredentialsCreateResponseAcsCredentialAccessMethod `json:"access_method,omitempty"` @@ -339,6 +343,8 @@ func (c CredentialsCreateResponseAcsCredentialExternalType) Ptr() *CredentialsCr type CredentialsCreateResponseAcsCredentialVisionlineMetadata struct { JoinerAcsCredentialIds []string `json:"joiner_acs_credential_ids,omitempty"` + GuestAcsEntranceIds []string `json:"guest_acs_entrance_ids,omitempty"` + CommonAcsEntranceIds []string `json:"common_acs_entrance_ids,omitempty"` _rawJSON json.RawMessage } @@ -371,6 +377,7 @@ type CredentialsGetResponseAcsCredential struct { AcsUserId *string `json:"acs_user_id,omitempty"` AcsCredentialPoolId *string `json:"acs_credential_pool_id,omitempty"` AcsSystemId string `json:"acs_system_id"` + ParentAcsCredentialId *string `json:"parent_acs_credential_id,omitempty"` DisplayName string `json:"display_name"` Code *string `json:"code,omitempty"` AccessMethod CredentialsGetResponseAcsCredentialAccessMethod `json:"access_method,omitempty"` @@ -464,6 +471,8 @@ func (c CredentialsGetResponseAcsCredentialExternalType) Ptr() *CredentialsGetRe type CredentialsGetResponseAcsCredentialVisionlineMetadata struct { JoinerAcsCredentialIds []string `json:"joiner_acs_credential_ids,omitempty"` + GuestAcsEntranceIds []string `json:"guest_acs_entrance_ids,omitempty"` + CommonAcsEntranceIds []string `json:"common_acs_entrance_ids,omitempty"` _rawJSON json.RawMessage } @@ -613,6 +622,7 @@ type CredentialsListResponseAcsCredentialsItem struct { AcsUserId *string `json:"acs_user_id,omitempty"` AcsCredentialPoolId *string `json:"acs_credential_pool_id,omitempty"` AcsSystemId string `json:"acs_system_id"` + ParentAcsCredentialId *string `json:"parent_acs_credential_id,omitempty"` DisplayName string `json:"display_name"` Code *string `json:"code,omitempty"` AccessMethod CredentialsListResponseAcsCredentialsItemAccessMethod `json:"access_method,omitempty"` @@ -706,6 +716,8 @@ func (c CredentialsListResponseAcsCredentialsItemExternalType) Ptr() *Credential type CredentialsListResponseAcsCredentialsItemVisionlineMetadata struct { JoinerAcsCredentialIds []string `json:"joiner_acs_credential_ids,omitempty"` + GuestAcsEntranceIds []string `json:"guest_acs_entrance_ids,omitempty"` + CommonAcsEntranceIds []string `json:"common_acs_entrance_ids,omitempty"` _rawJSON json.RawMessage } @@ -738,6 +750,7 @@ type CredentialsUnassignResponseAcsCredential struct { AcsUserId *string `json:"acs_user_id,omitempty"` AcsCredentialPoolId *string `json:"acs_credential_pool_id,omitempty"` AcsSystemId string `json:"acs_system_id"` + ParentAcsCredentialId *string `json:"parent_acs_credential_id,omitempty"` DisplayName string `json:"display_name"` Code *string `json:"code,omitempty"` AccessMethod CredentialsUnassignResponseAcsCredentialAccessMethod `json:"access_method,omitempty"` @@ -831,6 +844,8 @@ func (c CredentialsUnassignResponseAcsCredentialExternalType) Ptr() *Credentials type CredentialsUnassignResponseAcsCredentialVisionlineMetadata struct { JoinerAcsCredentialIds []string `json:"joiner_acs_credential_ids,omitempty"` + GuestAcsEntranceIds []string `json:"guest_acs_entrance_ids,omitempty"` + CommonAcsEntranceIds []string `json:"common_acs_entrance_ids,omitempty"` _rawJSON json.RawMessage } @@ -863,6 +878,7 @@ type CredentialsUpdateResponseAcsCredential struct { AcsUserId *string `json:"acs_user_id,omitempty"` AcsCredentialPoolId *string `json:"acs_credential_pool_id,omitempty"` AcsSystemId string `json:"acs_system_id"` + ParentAcsCredentialId *string `json:"parent_acs_credential_id,omitempty"` DisplayName string `json:"display_name"` Code *string `json:"code,omitempty"` AccessMethod CredentialsUpdateResponseAcsCredentialAccessMethod `json:"access_method,omitempty"` @@ -956,6 +972,8 @@ func (c CredentialsUpdateResponseAcsCredentialExternalType) Ptr() *CredentialsUp type CredentialsUpdateResponseAcsCredentialVisionlineMetadata struct { JoinerAcsCredentialIds []string `json:"joiner_acs_credential_ids,omitempty"` + GuestAcsEntranceIds []string `json:"guest_acs_entrance_ids,omitempty"` + CommonAcsEntranceIds []string `json:"common_acs_entrance_ids,omitempty"` _rawJSON json.RawMessage } @@ -1106,6 +1124,7 @@ type EntrancesListCredentialsWithAccessResponseAcsCredentialsItem struct { AcsUserId *string `json:"acs_user_id,omitempty"` AcsCredentialPoolId *string `json:"acs_credential_pool_id,omitempty"` AcsSystemId string `json:"acs_system_id"` + ParentAcsCredentialId *string `json:"parent_acs_credential_id,omitempty"` DisplayName string `json:"display_name"` Code *string `json:"code,omitempty"` AccessMethod EntrancesListCredentialsWithAccessResponseAcsCredentialsItemAccessMethod `json:"access_method,omitempty"` @@ -1199,6 +1218,8 @@ func (e EntrancesListCredentialsWithAccessResponseAcsCredentialsItemExternalType type EntrancesListCredentialsWithAccessResponseAcsCredentialsItemVisionlineMetadata struct { JoinerAcsCredentialIds []string `json:"joiner_acs_credential_ids,omitempty"` + GuestAcsEntranceIds []string `json:"guest_acs_entrance_ids,omitempty"` + CommonAcsEntranceIds []string `json:"common_acs_entrance_ids,omitempty"` _rawJSON json.RawMessage } diff --git a/acs/users.go b/acs/users.go index b845d14..5f397a1 100644 --- a/acs/users.go +++ b/acs/users.go @@ -51,6 +51,10 @@ type UsersRemoveFromAccessGroupRequest struct { AcsAccessGroupId string `json:"acs_access_group_id"` } +type UsersRevokeAccessToAllEntrancesRequest struct { + AcsUserId string `json:"acs_user_id"` +} + type UsersSuspendRequest struct { AcsUserId string `json:"acs_user_id"` } @@ -234,6 +238,35 @@ func (u *UsersListResponse) String() string { return fmt.Sprintf("%#v", u) } +type UsersRevokeAccessToAllEntrancesResponse struct { + Ok bool `json:"ok"` + + _rawJSON json.RawMessage +} + +func (u *UsersRevokeAccessToAllEntrancesResponse) UnmarshalJSON(data []byte) error { + type unmarshaler UsersRevokeAccessToAllEntrancesResponse + var value unmarshaler + if err := json.Unmarshal(data, &value); err != nil { + return err + } + *u = UsersRevokeAccessToAllEntrancesResponse(value) + u._rawJSON = json.RawMessage(data) + return nil +} + +func (u *UsersRevokeAccessToAllEntrancesResponse) String() string { + if len(u._rawJSON) > 0 { + if value, err := core.StringifyJSON(u._rawJSON); err == nil { + return value + } + } + if value, err := core.StringifyJSON(u); err == nil { + return value + } + return fmt.Sprintf("%#v", u) +} + type UsersSuspendResponse struct { Ok bool `json:"ok"` diff --git a/acs/users/client.go b/acs/users/client.go index 1af2850..5020f46 100644 --- a/acs/users/client.go +++ b/acs/users/client.go @@ -378,6 +378,56 @@ func (c *Client) RemoveFromAccessGroup(ctx context.Context, request *acs.UsersRe return nil } +func (c *Client) RevokeAccessToAllEntrances(ctx context.Context, request *acs.UsersRevokeAccessToAllEntrancesRequest) (*acs.UsersRevokeAccessToAllEntrancesResponse, error) { + baseURL := "https://connect.getseam.com" + if c.baseURL != "" { + baseURL = c.baseURL + } + endpointURL := baseURL + "/" + "acs/users/revoke_access_to_all_entrances" + + errorDecoder := func(statusCode int, body io.Reader) error { + raw, err := io.ReadAll(body) + if err != nil { + return err + } + apiError := core.NewAPIError(statusCode, errors.New(string(raw))) + decoder := json.NewDecoder(bytes.NewReader(raw)) + switch statusCode { + case 400: + value := new(seamapigo.BadRequestError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + case 401: + value := new(seamapigo.UnauthorizedError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + } + return apiError + } + + var response *acs.UsersRevokeAccessToAllEntrancesResponse + if err := c.caller.Call( + ctx, + &core.CallParams{ + URL: endpointURL, + Method: http.MethodPost, + Headers: c.header, + Request: request, + Response: &response, + ErrorDecoder: errorDecoder, + }, + ); err != nil { + return nil, err + } + return response, nil +} + func (c *Client) Suspend(ctx context.Context, request *acs.UsersSuspendRequest) (*acs.UsersSuspendResponse, error) { baseURL := "https://connect.getseam.com" if c.baseURL != "" { diff --git a/connect_webviews.go b/connect_webviews.go index 8458e85..daaf216 100644 --- a/connect_webviews.go +++ b/connect_webviews.go @@ -71,6 +71,7 @@ const ( AcceptedProviderAssaAbloyCredentialService AcceptedProvider = "assa_abloy_credential_service" AcceptedProviderSeamBridge AcceptedProvider = "seam_bridge" AcceptedProviderTedee AcceptedProvider = "tedee" + AcceptedProviderHoneywell AcceptedProvider = "honeywell" AcceptedProviderYaleAccess AcceptedProvider = "yale_access" AcceptedProviderHidCm AcceptedProvider = "hid_cm" AcceptedProviderGoogleNest AcceptedProvider = "google_nest" @@ -148,6 +149,8 @@ func NewAcceptedProviderFromString(s string) (AcceptedProvider, error) { return AcceptedProviderSeamBridge, nil case "tedee": return AcceptedProviderTedee, nil + case "honeywell": + return AcceptedProviderHoneywell, nil case "yale_access": return AcceptedProviderYaleAccess, nil case "hid_cm": diff --git a/core/client_option.go b/core/client_option.go index 035900e..def41c8 100644 --- a/core/client_option.go +++ b/core/client_option.go @@ -50,6 +50,6 @@ func (c *ClientOptions) cloneHeader() http.Header { headers := c.HTTPHeader.Clone() headers.Set("X-Fern-Language", "Go") headers.Set("X-Fern-SDK-Name", "github.com/seamapi/go") - headers.Set("X-Fern-SDK-Version", "v0.4.4") + headers.Set("X-Fern-SDK-Version", "v0.2.8") return headers } diff --git a/types.go b/types.go index cb7e09f..4b047a4 100644 --- a/types.go +++ b/types.go @@ -1364,6 +1364,7 @@ type DeviceProperties struct { HubitatMetadata *DevicePropertiesHubitatMetadata `json:"hubitat_metadata,omitempty"` DormakabaOracodeMetadata *DevicePropertiesDormakabaOracodeMetadata `json:"dormakaba_oracode_metadata,omitempty"` WyzeMetadata *DevicePropertiesWyzeMetadata `json:"wyze_metadata,omitempty"` + TedeeMetadata *DevicePropertiesTedeeMetadata `json:"tedee_metadata,omitempty"` ExperimentalSupportedCodeFromAccessCodesLengths []float64 `json:"_experimental_supported_code_from_access_codes_lengths,omitempty"` CodeConstraints []*DevicePropertiesCodeConstraintsItem `json:"code_constraints,omitempty"` SupportedCodeLengths []float64 `json:"supported_code_lengths,omitempty"` @@ -1754,12 +1755,14 @@ func (d *DevicePropertiesCodeConstraintsItemZero) String() string { type DevicePropertiesCodeConstraintsItemZeroConstraintType string const ( - DevicePropertiesCodeConstraintsItemZeroConstraintTypeNoZeros DevicePropertiesCodeConstraintsItemZeroConstraintType = "no_zeros" - DevicePropertiesCodeConstraintsItemZeroConstraintTypeCannotStartWith12 DevicePropertiesCodeConstraintsItemZeroConstraintType = "cannot_start_with_12" - DevicePropertiesCodeConstraintsItemZeroConstraintTypeNoTripleConsecutiveInts DevicePropertiesCodeConstraintsItemZeroConstraintType = "no_triple_consecutive_ints" - DevicePropertiesCodeConstraintsItemZeroConstraintTypeCannotSpecifyPinCode DevicePropertiesCodeConstraintsItemZeroConstraintType = "cannot_specify_pin_code" - DevicePropertiesCodeConstraintsItemZeroConstraintTypePinCodeMatchesExistingSet DevicePropertiesCodeConstraintsItemZeroConstraintType = "pin_code_matches_existing_set" - DevicePropertiesCodeConstraintsItemZeroConstraintTypeStartDateInFuture DevicePropertiesCodeConstraintsItemZeroConstraintType = "start_date_in_future" + DevicePropertiesCodeConstraintsItemZeroConstraintTypeNoZeros DevicePropertiesCodeConstraintsItemZeroConstraintType = "no_zeros" + DevicePropertiesCodeConstraintsItemZeroConstraintTypeCannotStartWith12 DevicePropertiesCodeConstraintsItemZeroConstraintType = "cannot_start_with_12" + DevicePropertiesCodeConstraintsItemZeroConstraintTypeNoTripleConsecutiveInts DevicePropertiesCodeConstraintsItemZeroConstraintType = "no_triple_consecutive_ints" + DevicePropertiesCodeConstraintsItemZeroConstraintTypeCannotSpecifyPinCode DevicePropertiesCodeConstraintsItemZeroConstraintType = "cannot_specify_pin_code" + DevicePropertiesCodeConstraintsItemZeroConstraintTypePinCodeMatchesExistingSet DevicePropertiesCodeConstraintsItemZeroConstraintType = "pin_code_matches_existing_set" + DevicePropertiesCodeConstraintsItemZeroConstraintTypeStartDateInFuture DevicePropertiesCodeConstraintsItemZeroConstraintType = "start_date_in_future" + DevicePropertiesCodeConstraintsItemZeroConstraintTypeNoAscendingOrDescendingSequence DevicePropertiesCodeConstraintsItemZeroConstraintType = "no_ascending_or_descending_sequence" + DevicePropertiesCodeConstraintsItemZeroConstraintTypeAtLeastThreeUniqueDigits DevicePropertiesCodeConstraintsItemZeroConstraintType = "at_least_three_unique_digits" ) func NewDevicePropertiesCodeConstraintsItemZeroConstraintTypeFromString(s string) (DevicePropertiesCodeConstraintsItemZeroConstraintType, error) { @@ -1776,6 +1779,10 @@ func NewDevicePropertiesCodeConstraintsItemZeroConstraintTypeFromString(s string return DevicePropertiesCodeConstraintsItemZeroConstraintTypePinCodeMatchesExistingSet, nil case "start_date_in_future": return DevicePropertiesCodeConstraintsItemZeroConstraintTypeStartDateInFuture, nil + case "no_ascending_or_descending_sequence": + return DevicePropertiesCodeConstraintsItemZeroConstraintTypeNoAscendingOrDescendingSequence, nil + case "at_least_three_unique_digits": + return DevicePropertiesCodeConstraintsItemZeroConstraintTypeAtLeastThreeUniqueDigits, nil } var t DevicePropertiesCodeConstraintsItemZeroConstraintType return "", fmt.Errorf("%s is not a valid %T", s, t) @@ -2685,6 +2692,40 @@ func (d *DevicePropertiesSmartthingsMetadata) String() string { return fmt.Sprintf("%#v", d) } +type DevicePropertiesTedeeMetadata struct { + DeviceId float64 `json:"device_id"` + SerialNumber string `json:"serial_number"` + DeviceName string `json:"device_name"` + DeviceModel string `json:"device_model"` + BridgeId float64 `json:"bridge_id"` + BridgeName string `json:"bridge_name"` + + _rawJSON json.RawMessage +} + +func (d *DevicePropertiesTedeeMetadata) UnmarshalJSON(data []byte) error { + type unmarshaler DevicePropertiesTedeeMetadata + var value unmarshaler + if err := json.Unmarshal(data, &value); err != nil { + return err + } + *d = DevicePropertiesTedeeMetadata(value) + d._rawJSON = json.RawMessage(data) + return nil +} + +func (d *DevicePropertiesTedeeMetadata) String() string { + if len(d._rawJSON) > 0 { + if value, err := core.StringifyJSON(d._rawJSON); err == nil { + return value + } + } + if value, err := core.StringifyJSON(d); err == nil { + return value + } + return fmt.Sprintf("%#v", d) +} + type DevicePropertiesTtlockMetadata struct { LockId float64 `json:"lock_id"` LockAlias string `json:"lock_alias"` diff --git a/webhooks.go b/webhooks.go index bb088b2..e588a98 100644 --- a/webhooks.go +++ b/webhooks.go @@ -139,3 +139,37 @@ func (w *WebhooksListResponse) String() string { } return fmt.Sprintf("%#v", w) } + +type WebhooksUpdateResponse struct { + Ok bool `json:"ok"` + + _rawJSON json.RawMessage +} + +func (w *WebhooksUpdateResponse) UnmarshalJSON(data []byte) error { + type unmarshaler WebhooksUpdateResponse + var value unmarshaler + if err := json.Unmarshal(data, &value); err != nil { + return err + } + *w = WebhooksUpdateResponse(value) + w._rawJSON = json.RawMessage(data) + return nil +} + +func (w *WebhooksUpdateResponse) String() string { + if len(w._rawJSON) > 0 { + if value, err := core.StringifyJSON(w._rawJSON); err == nil { + return value + } + } + if value, err := core.StringifyJSON(w); err == nil { + return value + } + return fmt.Sprintf("%#v", w) +} + +type WebhooksUpdateRequest struct { + WebhookId string `json:"webhook_id"` + EventTypes []string `json:"event_types,omitempty"` +} diff --git a/webhooks/client.go b/webhooks/client.go index 39f4653..c7add51 100644 --- a/webhooks/client.go +++ b/webhooks/client.go @@ -229,3 +229,53 @@ func (c *Client) List(ctx context.Context) ([]*seamapigo.Webhook, error) { } return response.Webhooks, nil } + +func (c *Client) Update(ctx context.Context, request *seamapigo.WebhooksUpdateRequest) (*seamapigo.WebhooksUpdateResponse, error) { + baseURL := "https://connect.getseam.com" + if c.baseURL != "" { + baseURL = c.baseURL + } + endpointURL := baseURL + "/" + "webhooks/update" + + errorDecoder := func(statusCode int, body io.Reader) error { + raw, err := io.ReadAll(body) + if err != nil { + return err + } + apiError := core.NewAPIError(statusCode, errors.New(string(raw))) + decoder := json.NewDecoder(bytes.NewReader(raw)) + switch statusCode { + case 400: + value := new(seamapigo.BadRequestError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + case 401: + value := new(seamapigo.UnauthorizedError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + } + return apiError + } + + var response *seamapigo.WebhooksUpdateResponse + if err := c.caller.Call( + ctx, + &core.CallParams{ + URL: endpointURL, + Method: http.MethodPost, + Headers: c.header, + Request: request, + Response: &response, + ErrorDecoder: errorDecoder, + }, + ); err != nil { + return nil, err + } + return response, nil +}