···427427// Lower-level helper. This is usually invoked as part of [ProcessCallback].
428428func (app *ClientApp) SendInitialTokenRequest(ctx context.Context, authCode string, info AuthRequestData) (*TokenResponse, error) {
429429430430- // TODO: don't re-fetch? caching?
431431- authServerMeta, err := app.Resolver.ResolveAuthServerMetadata(ctx, info.AuthServerURL)
432432- if err != nil {
433433- return nil, err
434434- }
435435-436430 body := InitialTokenRequest{
437431 ClientID: app.Config.ClientID,
438432 RedirectURI: app.Config.CallbackURL,
···465459466460 var resp *http.Response
467461 for range 2 {
468468- dpopJWT, err := NewAuthDPoP("POST", authServerMeta.TokenEndpoint, dpopServerNonce, dpopPrivKey)
462462+ dpopJWT, err := NewAuthDPoP("POST", info.AuthServerTokenEndpoint, dpopServerNonce, dpopPrivKey)
469463 if err != nil {
470464 return nil, err
471465 }
472466473473- req, err := http.NewRequestWithContext(ctx, "POST", authServerMeta.TokenEndpoint, bytes.NewBuffer(bodyBytes))
467467+ req, err := http.NewRequestWithContext(ctx, "POST", info.AuthServerTokenEndpoint, bytes.NewBuffer(bodyBytes))
474468 if err != nil {
475469 return nil, err
476470 }
+3
atproto/auth/oauth/types.go
···336336 // unique token in URI format, which will be used by the client in the auth flow redirect
337337 RequestURI string `json:"request_uri"`
338338339339+ // Full token endpoint URL
340340+ AuthServerTokenEndpoint string `json:"authserver_token_endpoint"`
341341+339342 // The secret token/nonce which a code challenge was generated from
340343 PKCEVerifier string `json:"pkce_verifier"`
341344