Skip to content

Conversation

@alvgaona
Copy link

@alvgaona alvgaona commented Jan 30, 2026

Description

Search researchers and access your ORCID profile directly from Raycast.

Features

  • Copy ORCID - Copy your ORCID iD to clipboard
  • Copy Name - Copy your name from ORCID profile
  • Open My Profile - Open your ORCID profile in browser
  • Find Researchers - Search for researchers by name with affiliation details

Setup

Users need to register for ORCID API credentials at orcid.org/developer-tools and configure their Client ID and Client Secret in extension preferences.

Screencast

2026-01-30 at 18 31 57@2x 2026-01-30 at 18 32 31@2x 2026-01-30 at 18 34 24@2x

Checklist

@raycastbot raycastbot added the new extension Label for PRs with new extensions label Jan 30, 2026
@raycastbot
Copy link
Collaborator

Congratulations on your new Raycast extension! 🚀

We're currently experiencing a high volume of incoming requests. As a result, the initial review may take up to 10-15 business days.

Once the PR is approved and merged, the extension will be available on our Store.

@alvgaona alvgaona marked this pull request as ready for review January 30, 2026 18:39
@greptile-apps
Copy link
Contributor

greptile-apps bot commented Jan 30, 2026

Greptile Overview

Greptile Summary

This PR adds a new ORCID extension enabling researchers to access their ORCID profiles and search for other researchers directly from Raycast. The extension properly removed the manual Preferences interface following previous feedback and now relies on auto-generated types.

Key changes:

  • Implemented OAuth authentication flow with PKCE client
  • Added four commands: Copy ORCID iD, Copy Name, Open Profile, and Find Researchers
  • Search functionality with Lucene query syntax for finding researchers
  • Proper error handling and user feedback throughout
  • Complete documentation with setup instructions

Issues found:

  • OAuth implementation mixes PKCE client with traditional client_secret flow but doesn't include required PKCE code_verifier parameter - needs verification that ORCID API supports this hybrid approach
  • Minor branding inconsistency in action title capitalization

Confidence Score: 3/5

  • This PR has a potential OAuth implementation issue that needs clarification before merging
  • The extension is well-structured with proper error handling, documentation, and follows Raycast conventions. However, the OAuth flow uses OAuth.PKCEClient but implements a traditional OAuth flow with client_secret without including the PKCE code_verifier parameter. This hybrid approach needs verification - if ORCID doesn't support PKCE properly, the implementation may fail or be insecure.
  • Pay close attention to extensions/orcid/src/oauth.ts - verify the OAuth flow works correctly with ORCID's API

Important Files Changed

Filename Overview
extensions/orcid/src/oauth.ts OAuth implementation with PKCE flow and token management, uses auto-generated Preferences type
extensions/orcid/src/types.ts Only contains OrcidTokenResponse interface, manual Preferences interface removed
extensions/orcid/src/search-orcid.tsx Search UI with Lucene query builder and researcher list view

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

3 files reviewed, 3 comments

Edit Code Review Agent Settings | Greptile

- fix: use title-case for action, resize screenshots to 2000x1250
- fix: address review feedback
Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

3 files reviewed, 3 comments

Edit Code Review Agent Settings | Greptile

Comment on lines +62 to +74
const response = await fetch(`${getAuthBaseUrl()}/oauth/token`, {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded",
Accept: "application/json",
},
body: new URLSearchParams({
client_id: prefs.clientId,
client_secret: prefs.clientSecret,
grant_type: "authorization_code",
code: authorizationCode,
}).toString(),
});
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PKCE flow doesn't need client_secret in token exchange - you're using OAuth.PKCEClient which is designed to work without client secrets. Including it here contradicts the PKCE security model.

Suggested change
const response = await fetch(`${getAuthBaseUrl()}/oauth/token`, {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded",
Accept: "application/json",
},
body: new URLSearchParams({
client_id: prefs.clientId,
client_secret: prefs.clientSecret,
grant_type: "authorization_code",
code: authorizationCode,
}).toString(),
});
const response = await fetch(`${getAuthBaseUrl()}/oauth/token`, {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded",
Accept: "application/json",
},
body: new URLSearchParams({
client_id: prefs.clientId,
grant_type: "authorization_code",
code: authorizationCode,
code_verifier: authRequest.codeVerifier,
}).toString(),
});

Comment on lines +54 to +74
const authRequest = await client.authorizationRequest({
endpoint: `${getAuthBaseUrl()}/oauth/authorize`,
clientId: prefs.clientId,
scope: "/authenticate",
});

const { authorizationCode } = await client.authorize(authRequest);

const response = await fetch(`${getAuthBaseUrl()}/oauth/token`, {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded",
Accept: "application/json",
},
body: new URLSearchParams({
client_id: prefs.clientId,
client_secret: prefs.clientSecret,
grant_type: "authorization_code",
code: authorizationCode,
}).toString(),
});
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using OAuth.PKCEClient but not including code_verifier in token exchange. PKCE requires the code verifier to be sent. Check if ORCID API supports PKCE - if not, this flow mixing client_secret with PKCE is incorrect.

If ORCID doesn't support PKCE, remove client_secret from preferences and properly implement PKCE by including:

code_verifier: authRequest.codeVerifier,
redirect_uri: authRequest.redirectURI,

If ORCID doesn't support PKCE at all, consider using a traditional OAuth client instead of PKCEClient.

onAction={() => open(`${getAuthBaseUrl()}/${result.orcidId}`)}
/>
<Action.CopyToClipboard
title="Copy Orcid"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistent capitalization - should be "Copy ORCID iD" to match branding used elsewhere in the extension (see copy-orcid.ts:8)

Suggested change
title="Copy Orcid"
title="Copy ORCID iD"

@0xdhrv 0xdhrv self-assigned this Jan 31, 2026
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue: metadata image style

Could you make sure that the metadata images use the same background/appearance as the rest to maintain the same visual expression?

Reference:

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue: metadata image style

Could you make sure that the metadata images use the same background/appearance as the rest to maintain the same visual expression?

Reference:

Copy link
Contributor

@0xdhrv 0xdhrv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor feedback and comments

@0xdhrv 0xdhrv marked this pull request as draft January 31, 2026 09:32
Co-authored-by: Dhruv Suthar <intelligentjimmy@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

new extension Label for PRs with new extensions

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants