From 4a94e9c8ae9c13720939de1461af1b5fe267f5cd Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Mon, 12 Oct 2026 19:00:13 +0100 Subject: [PATCH] fix: add the passkey auth method and policy for version 28.3.1 --- CHANGELOG.md | 5 +++ appwrite.gemspec | 2 +- lib/appwrite.rb | 1 + lib/appwrite/client.rb | 2 +- lib/appwrite/enums/project_auth_method_id.rb | 1 + lib/appwrite/enums/project_policy_id.rb | 1 + lib/appwrite/models/policy_passkey.rb | 37 ++++++++++++++++++++ lib/appwrite/models/project_auth_method.rb | 1 + lib/appwrite/services/project.rb | 7 +++- 9 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 lib/appwrite/models/policy_passkey.rb diff --git a/CHANGELOG.md b/CHANGELOG.md index 71bf869..b672bc1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Change Log +## 28.3.1 + +* Fixed: added `ProjectAuthMethodId::PASSKEY`, so `project.updateAuthMethod` can enable passkeys +* Fixed: added `ProjectPolicyId::PASSKEY` and the `PolicyPasskey` model, so `getPolicy` and `listPolicies` return the passkey policy + ## 28.3.0 * Added: `account` passkey methods `listPasskeys`, `createPasskey`, `getPasskey`, `updatePasskey`, `deletePasskey` and `updatePasskeyVerification` diff --git a/appwrite.gemspec b/appwrite.gemspec index 6a7b78c..d9e63fd 100644 --- a/appwrite.gemspec +++ b/appwrite.gemspec @@ -1,6 +1,6 @@ Gem::Specification.new do |spec| spec.name = 'appwrite' - spec.version = '28.3.0' + spec.version = '28.3.1' spec.license = 'BSD-3-Clause' spec.summary = 'Appwrite is an open-source self-hosted backend server that abstracts and simplifies complex and repetitive development tasks behind a very simple REST API' spec.author = 'Appwrite Team' diff --git a/lib/appwrite.rb b/lib/appwrite.rb index d0f0af0..69ee856 100644 --- a/lib/appwrite.rb +++ b/lib/appwrite.rb @@ -204,6 +204,7 @@ require_relative 'appwrite/models/policy_user_limit' require_relative 'appwrite/models/policy_membership_privacy' require_relative 'appwrite/models/policy_mfa_factors' +require_relative 'appwrite/models/policy_passkey' require_relative 'appwrite/models/platform_web' require_relative 'appwrite/models/platform_apple' require_relative 'appwrite/models/platform_android' diff --git a/lib/appwrite/client.rb b/lib/appwrite/client.rb index 095947c..8cd60b9 100644 --- a/lib/appwrite/client.rb +++ b/lib/appwrite/client.rb @@ -14,7 +14,7 @@ def initialize 'x-sdk-name' => 'Ruby', 'x-sdk-platform' => 'server', 'x-sdk-language' => 'ruby', - 'x-sdk-version' => '28.3.0', + 'x-sdk-version' => '28.3.1', 'X-Appwrite-Response-Format' => '2.0.0' } @endpoint = 'https://cloud.appwrite.io/v1' diff --git a/lib/appwrite/enums/project_auth_method_id.rb b/lib/appwrite/enums/project_auth_method_id.rb index da27cbb..6256d8f 100644 --- a/lib/appwrite/enums/project_auth_method_id.rb +++ b/lib/appwrite/enums/project_auth_method_id.rb @@ -8,6 +8,7 @@ module ProjectAuthMethodId INVITES = 'invites' JWT = 'jwt' PHONE = 'phone' + PASSKEY = 'passkey' end end end diff --git a/lib/appwrite/enums/project_policy_id.rb b/lib/appwrite/enums/project_policy_id.rb index a844aaf..ecc9f45 100644 --- a/lib/appwrite/enums/project_policy_id.rb +++ b/lib/appwrite/enums/project_policy_id.rb @@ -16,6 +16,7 @@ module ProjectPolicyId DENY_DISPOSABLE_EMAIL = 'deny-disposable-email' DENY_FREE_EMAIL = 'deny-free-email' DENY_CORPORATE_EMAIL = 'deny-corporate-email' + PASSKEY = 'passkey' end end end diff --git a/lib/appwrite/models/policy_passkey.rb b/lib/appwrite/models/policy_passkey.rb new file mode 100644 index 0000000..f9cb670 --- /dev/null +++ b/lib/appwrite/models/policy_passkey.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +module Appwrite + module Models + class PolicyPasskey + attr_reader :id + attr_reader :rp_id + attr_reader :origins + + def initialize( + id:, + rp_id:, + origins: + ) + @id = id + @rp_id = rp_id + @origins = origins + end + + def self.from(map:) + PolicyPasskey.new( + id: map["$id"], + rp_id: map["rpId"], + origins: map["origins"] + ) + end + + def to_map + { + "$id": @id, + "rpId": @rp_id, + "origins": @origins + } + end + end + end +end diff --git a/lib/appwrite/models/project_auth_method.rb b/lib/appwrite/models/project_auth_method.rb index 8aa6481..98c6715 100644 --- a/lib/appwrite/models/project_auth_method.rb +++ b/lib/appwrite/models/project_auth_method.rb @@ -39,6 +39,7 @@ def validate_id(id) Appwrite::Enums::ProjectAuthMethodId::INVITES, Appwrite::Enums::ProjectAuthMethodId::JWT, Appwrite::Enums::ProjectAuthMethodId::PHONE, + Appwrite::Enums::ProjectAuthMethodId::PASSKEY, ] unless valid_id.include?(id) diff --git a/lib/appwrite/services/project.rb b/lib/appwrite/services/project.rb index 0d4f9f5..82389a7 100644 --- a/lib/appwrite/services/project.rb +++ b/lib/appwrite/services/project.rb @@ -3757,7 +3757,7 @@ def update_user_limit_policy( # # @param [ProjectPolicyId] policy_id Policy ID. Can be one of: password-dictionary, password-history, password-strength, password-personal-data, session-alert, session-duration, session-invalidation, session-limit, user-limit, membership-privacy, mfa-factors, deny-aliased-email, deny-disposable-email, deny-free-email, deny-corporate-email. # - # @return [PolicyPasswordDictionary, PolicyPasswordHistory, PolicyPasswordStrength, PolicyPasswordPersonalData, PolicySessionAlert, PolicySessionDuration, PolicySessionInvalidation, PolicySessionLimit, PolicyUserLimit, PolicyMembershipPrivacy, PolicyMfaFactors, PolicyDenyAliasedEmail, PolicyDenyDisposableEmail, PolicyDenyFreeEmail, PolicyDenyCorporateEmail] + # @return [PolicyPasswordDictionary, PolicyPasswordHistory, PolicyPasswordStrength, PolicyPasswordPersonalData, PolicySessionAlert, PolicySessionDuration, PolicySessionInvalidation, PolicySessionLimit, PolicyUserLimit, PolicyMembershipPrivacy, PolicyMfaFactors, PolicyDenyAliasedEmail, PolicyDenyDisposableEmail, PolicyDenyFreeEmail, PolicyDenyCorporateEmail, PolicyPasskey] def get_policy( policy_id: ) @@ -3861,6 +3861,11 @@ def get_policy( return Models::PolicyDenyCorporateEmail.from(map: response) end + if response['$id'] == 'passkey' + + return Models::PolicyPasskey.from(map: response) + end + raise Exception, "Unable to match response to any expected response model" end