Module: BetterAuth::Passkey::Routes

Defined in:
lib/better_auth/passkey/routes.rb,
lib/better_auth/passkey/routes/management.rb,
lib/better_auth/passkey/routes/registration.rb,
lib/better_auth/passkey/routes/authentication.rb

Defined Under Namespace

Modules: Authentication, Management, Registration

Class Method Summary collapse

Class Method Details

.delete_passkey_openapiObject



105
106
107
108
109
110
111
112
113
114
115
# File 'lib/better_auth/passkey/routes.rb', line 105

def delete_passkey_openapi
  {
    openapi: {
      description: "Delete a specific passkey",
      requestBody: BetterAuth::OpenAPI.json_request_body(passkey_id_body_schema),
      responses: {
        "200" => BetterAuth::OpenAPI.json_response("Passkey deleted successfully", BetterAuth::OpenAPI.status_response_schema)
      }
    }
  }
end

.generate_authentication_options_openapiObject



59
60
61
62
63
64
65
66
67
68
69
# File 'lib/better_auth/passkey/routes.rb', line 59

def generate_authentication_options_openapi
  {
    openapi: {
      operationId: "passkeyGenerateAuthenticateOptions",
      description: "Generate authentication options for a passkey",
      responses: {
        "200" => BetterAuth::OpenAPI.json_response("Success", passkey_options_schema)
      }
    }
  }
end

.generate_registration_options_openapiObject



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/better_auth/passkey/routes.rb', line 20

def generate_registration_options_openapi
  {
    openapi: {
      operationId: "generatePasskeyRegistrationOptions",
      description: "Generate registration options for a new passkey",
      parameters: [
        BetterAuth::OpenAPI.query_parameter("authenticatorAttachment", schema: {type: "string", enum: ["platform", "cross-platform"]}, description: "Type of authenticator to use for registration"),
        BetterAuth::OpenAPI.query_parameter("name", description: "Optional custom name for the passkey"),
        BetterAuth::OpenAPI.query_parameter("context", description: "Optional context for passkey-first registration flows")
      ],
      responses: {
        "200" => BetterAuth::OpenAPI.json_response("Success", passkey_options_schema)
      }
    }
  }
end

.list_passkeys_openapiObject



91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/better_auth/passkey/routes.rb', line 91

def list_passkeys_openapi
  {
    openapi: {
      description: "List all passkeys for the authenticated user",
      responses: {
        "200" => BetterAuth::OpenAPI.json_response(
          "Passkeys retrieved successfully",
          BetterAuth::OpenAPI.array_schema(BetterAuth::OpenAPI.ref_schema("Passkey"))
        )
      }
    }
  }
end

.openapi_for(route) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
# File 'lib/better_auth/passkey/routes.rb', line 8

def openapi_for(route)
  {
    generate_registration_options: generate_registration_options_openapi,
    verify_registration: verify_registration_openapi,
    generate_authentication_options: generate_authentication_options_openapi,
    verify_authentication: verify_authentication_openapi,
    list_passkeys: list_passkeys_openapi,
    delete_passkey: delete_passkey_openapi,
    update_passkey: update_passkey_openapi
  }.fetch(route)
end

.passkey_id_body_schemaObject



145
146
147
148
149
150
151
152
# File 'lib/better_auth/passkey/routes.rb', line 145

def passkey_id_body_schema
  BetterAuth::OpenAPI.object_schema(
    {
      id: {type: "string", description: "The ID of the passkey"}
    },
    required: ["id"]
  )
end

.passkey_options_schemaObject



154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
# File 'lib/better_auth/passkey/routes.rb', line 154

def passkey_options_schema
  BetterAuth::OpenAPI.object_schema(
    {
      challenge: {type: "string"},
      rp: {
        type: "object",
        properties: {
          name: {type: "string"},
          id: {type: "string"}
        }
      },
      user: {type: "object", additionalProperties: true},
      timeout: {type: "number"},
      attestation: {type: "string"},
      excludeCredentials: {type: "array", items: {type: "object", additionalProperties: true}},
      allowCredentials: {type: "array", items: {type: "object", additionalProperties: true}},
      userVerification: {type: "string"},
      extensions: {type: "object", additionalProperties: true}
    }
  )
end

.update_passkey_openapiObject



117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# File 'lib/better_auth/passkey/routes.rb', line 117

def update_passkey_openapi
  {
    openapi: {
      description: "Update a specific passkey's name",
      requestBody: BetterAuth::OpenAPI.json_request_body(
        BetterAuth::OpenAPI.object_schema(
          {
            id: {type: "string", description: "The ID of the passkey which will be updated"},
            name: {type: "string", description: "The new passkey name"}
          },
          required: ["id", "name"]
        )
      ),
      responses: {
        "200" => BetterAuth::OpenAPI.json_response(
          "Passkey updated successfully",
          BetterAuth::OpenAPI.object_schema(
            {
              passkey: BetterAuth::OpenAPI.ref_schema("Passkey")
            },
            required: ["passkey"]
          )
        )
      }
    }
  }
end

.verify_authentication_openapiObject



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/better_auth/passkey/routes.rb', line 71

def verify_authentication_openapi
  {
    openapi: {
      operationId: "passkeyVerifyAuthentication",
      description: "Verify authentication of a passkey",
      requestBody: BetterAuth::OpenAPI.json_request_body(
        BetterAuth::OpenAPI.object_schema(
          {
            response: {type: "object", additionalProperties: true, description: "WebAuthn authentication response"}
          },
          required: ["response"]
        )
      ),
      responses: {
        "200" => BetterAuth::OpenAPI.json_response("Success", BetterAuth::OpenAPI.session_response_schema_pair)
      }
    }
  }
end

.verify_registration_openapiObject



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/better_auth/passkey/routes.rb', line 37

def verify_registration_openapi
  {
    openapi: {
      operationId: "passkeyVerifyRegistration",
      description: "Verify registration of a new passkey",
      requestBody: BetterAuth::OpenAPI.json_request_body(
        BetterAuth::OpenAPI.object_schema(
          {
            response: {type: "object", additionalProperties: true, description: "WebAuthn registration response"},
            name: {type: "string", description: "Name of the passkey"}
          },
          required: ["response"]
        )
      ),
      responses: {
        "200" => BetterAuth::OpenAPI.json_response("Success", BetterAuth::OpenAPI.ref_schema("Passkey")),
        "400" => {description: "Bad request"}
      }
    }
  }
end