feat(clerk-expo): Add expo data to request headers - #2528

Merged
thiskevinwang merged 6 commits into
mainfrom
kevin/core-1401-improve-detection-for-mobile-apps-using-clerk
Jan 10, 2024
Merged

feat(clerk-expo): Add expo data to request headers#2528
thiskevinwang merged 6 commits into
mainfrom
kevin/core-1401-improve-detection-for-mobile-apps-using-clerk

Conversation

@thiskevinwang

@thiskevinwangthiskevinwang commented Jan 9, 2024

Copy link
Copy Markdown
Member

Description

What
Send along x-expo-execution-environment and x-expo-native-application-version headers to help identify the state of a mobile app, calling Clerk.

Why
We want to be able to easily determine if a mobile app is in any of "local development", "test flight", "app store/google play" (aka: dev/staging/production, respectively)

Checklist

  • npm test runs as expected.
  • npm run build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

Packages affected

  • @clerk/backend
  • @clerk/chrome-extension
  • @clerk/clerk-js
  • @clerk/clerk-expo
  • @clerk/fastify
  • gatsby-plugin-clerk
  • @clerk/localizations
  • @clerk/nextjs
  • @clerk/clerk-react
  • @clerk/remix
  • @clerk/clerk-sdk-node
  • @clerk/shared
  • @clerk/themes
  • @clerk/types
  • build/tooling/chore

@changeset-bot

changeset-botBot commented Jan 9, 2024

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 1bf9c09

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
NameType
@clerk/clerk-expoMinor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Comment threadpackages/expo/src/singleton.ts Outdated
Comment on lines +60 to +65
(requestInit.headers as Headers).set('x-expo-application-id', Application.applicationId ?? NULL_VALUE);
(requestInit.headers as Headers).set('x-expo-application-name', Application.applicationName ?? NULL_VALUE);
(requestInit.headers as Headers).set(
'x-expo-native-application-version',
Application.nativeApplicationVersion ?? NULL_VALUE,
);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

What insight might we gain from the app name / id?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

💭 app name == Expo Go is roughly equivalent to request.origin == http://localhost:3000

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

More generally, my thinking here falls mostly under "I don't know what I don't know" regarding insights. But presence of this data should at least enable gaining any insight at all!

@jescalanjescalan left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This looks good to me, but I'm not sure I understand the context behind why it's being done. The PR description is just a screenshot of the result, the name of the branch honestly is the closest to context that we have, but even checking the related linear issue pulled from the branch name, there isn't really a lot of context about why this is important or where it came from.

To be clear, I trust that it's for a good reason, just some feedback on how to make PRs like this easier to understand and review for folks down the line 😁

@thiskevinwang

Copy link
Copy Markdown
MemberAuthor

@brkalow I reduced the number of headers sent to 2.

@jescalan I updated the description.

Comment thread.changeset/sixty-rats-bathe.md Outdated

@brkalowbrkalow left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

👍

@thiskevinwang
thiskevinwang added this pull request to the merge queue Jan 10, 2024
Merged via the queue into main with commit 3399635Jan 10, 2024
@thiskevinwang
thiskevinwang deleted the kevin/core-1401-improve-detection-for-mobile-apps-using-clerk branch January 10, 2024 17:54
thiskevinwang added a commit that referenced this pull request Jan 10, 2024
@thiskevinwangthiskevinwang mentioned this pull request Jan 10, 2024
github-merge-queueBot pushed a commit that referenced this pull request Jan 10, 2024
* chore: cherrypick #2528
* chore(repo): Reset package-lock to release/v4 && npm i
@auropsoft

auropsoft commented Feb 24, 2024

Copy link
Copy Markdown

This change causes issues with the use of clerk/clerk-expo with expo start --web.
The preflight requests get blocked by clerk with the standard message in the browser:
...blocked by CORS policy: Request header field x-expo-native-application-version is not allowed by Access-Control-Allow-Headers in preflight response

Access to fetch at 'https://gorgeous-swift-17.clerk.accounts.dev/v1/environment?_clerk_js_version=4.69.1&_method=PATCH&_is_native=1&__dev_session=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJkZXYiOiJkdmJfMmNwRFhxOVpWNFpZQzhLVk5lSXBSeklmNHhWIn0.awSF7yCL7AB4HTf1PjBpzEi-uIINoVX8n6u6pkBq2lIQ91MXHFdISlEXLX_G28DOGAYqZReu5NJdKn-MejXBXAdy99ohZ4hxhAMwz5bnRUtnZ94OAFEY2jBBHfsTW9YjNipWjOlTbE1FHJ5QM06hS3TiJaVUx9ZqBOHRGcGIj9_lbHdEfSjrX2lULEiV59ggqWEPl7FOlbDGLdyhqv3CnwxmH65EY-TT2G-12Fues1KA3i2zyOppNONC7cNz1eVuFEnQfavIeg31-vgCqN-SjbEG2-QesQvozE_ABMZxvy_ij4-SP7uRjUCYwLoAu5Z05MMY52ULroVojTbI1CnZkA' from origin 'http://localhost:8081' has been blocked by CORS policy: Request header field x-expo-native-application-version is not allowed by Access-Control-Allow-Headers in preflight response.

Adding a bit of code to remove those headers for web platform fixes the issue:

 useEffect(() => {
if(Platform.OS === 'web') {
clerk.__unstable__onBeforeRequest(async (requestInit: RequestInit) => {
(requestInit.headers as Headers).delete("x-expo-execution-environment");
(requestInit.headers as Headers).delete("x-expo-native-application-version");
},[]);
}
})

I assume that web, being the underused platform for RN, wasn't specifically tested, but i'd love to be able to run it with the same code as the other platforms.

Does this have to be a seperate report?
This feels like a server-side issue, not so much a package issue. One would assume the statistics would want to be gathered either way from the description.

@thiskevinwang

Copy link
Copy Markdown
MemberAuthor

Hey @auropsoft,

Does this have to be a seperate report?
This feels like a server-side issue, not so much a package issue. One would assume the statistics would want to be gathered either way from the description.

Currently, the @clerk/expo SDK only supports mobile app output, and not web, so this flow was not tested. This is not necessarily a bug right now, but a helpful breadcrumb for us nonetheless (thanks for using the Expo SDK 😄 ).

Does this sound reasonable?


Tip

You can upvote the addition of Clerk supporting web output here!

thiskevinwang added a commit that referenced this pull request May 10, 2024
* feat(clerk-expo): Remove headers and dev dependencies
- this reverts #2528
@clerk-cookieclerk-cookie mentioned this pull request May 10, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@thiskevinwang@auropsoft@jescalan@brkalow@clerk-cookie
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat(clerk-expo): Add expo data to request headers - #2528

Merged
thiskevinwang merged 6 commits into
mainfrom
kevin/core-1401-improve-detection-for-mobile-apps-using-clerk
Jan 10, 2024
Merged

feat(clerk-expo): Add expo data to request headers#2528
thiskevinwang merged 6 commits into
mainfrom
kevin/core-1401-improve-detection-for-mobile-apps-using-clerk

Conversation

@thiskevinwang

@thiskevinwangthiskevinwang commented Jan 9, 2024

Copy link
Copy Markdown
Member

Description

What
Send along x-expo-execution-environment and x-expo-native-application-version headers to help identify the state of a mobile app, calling Clerk.

Why
We want to be able to easily determine if a mobile app is in any of "local development", "test flight", "app store/google play" (aka: dev/staging/production, respectively)

Checklist

  • npm test runs as expected.
  • npm run build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

Packages affected

  • @clerk/backend
  • @clerk/chrome-extension
  • @clerk/clerk-js
  • @clerk/clerk-expo
  • @clerk/fastify
  • gatsby-plugin-clerk
  • @clerk/localizations
  • @clerk/nextjs
  • @clerk/clerk-react
  • @clerk/remix
  • @clerk/clerk-sdk-node
  • @clerk/shared
  • @clerk/themes
  • @clerk/types
  • build/tooling/chore

@changeset-bot

changeset-botBot commented Jan 9, 2024

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 1bf9c09

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
NameType
@clerk/clerk-expoMinor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Comment threadpackages/expo/src/singleton.ts Outdated
Comment on lines +60 to +65
(requestInit.headers as Headers).set('x-expo-application-id', Application.applicationId ?? NULL_VALUE);
(requestInit.headers as Headers).set('x-expo-application-name', Application.applicationName ?? NULL_VALUE);
(requestInit.headers as Headers).set(
'x-expo-native-application-version',
Application.nativeApplicationVersion ?? NULL_VALUE,
);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

What insight might we gain from the app name / id?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

💭 app name == Expo Go is roughly equivalent to request.origin == http://localhost:3000

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

More generally, my thinking here falls mostly under "I don't know what I don't know" regarding insights. But presence of this data should at least enable gaining any insight at all!

@jescalanjescalan left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This looks good to me, but I'm not sure I understand the context behind why it's being done. The PR description is just a screenshot of the result, the name of the branch honestly is the closest to context that we have, but even checking the related linear issue pulled from the branch name, there isn't really a lot of context about why this is important or where it came from.

To be clear, I trust that it's for a good reason, just some feedback on how to make PRs like this easier to understand and review for folks down the line 😁

@thiskevinwang

Copy link
Copy Markdown
MemberAuthor

@brkalow I reduced the number of headers sent to 2.

@jescalan I updated the description.

Comment thread.changeset/sixty-rats-bathe.md Outdated

@brkalowbrkalow left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

👍

@thiskevinwang
thiskevinwang added this pull request to the merge queue Jan 10, 2024
Merged via the queue into main with commit 3399635Jan 10, 2024
@thiskevinwang
thiskevinwang deleted the kevin/core-1401-improve-detection-for-mobile-apps-using-clerk branch January 10, 2024 17:54
thiskevinwang added a commit that referenced this pull request Jan 10, 2024
@thiskevinwangthiskevinwang mentioned this pull request Jan 10, 2024
github-merge-queueBot pushed a commit that referenced this pull request Jan 10, 2024
* chore: cherrypick #2528
* chore(repo): Reset package-lock to release/v4 && npm i
@auropsoft

auropsoft commented Feb 24, 2024

Copy link
Copy Markdown

This change causes issues with the use of clerk/clerk-expo with expo start --web.
The preflight requests get blocked by clerk with the standard message in the browser:
...blocked by CORS policy: Request header field x-expo-native-application-version is not allowed by Access-Control-Allow-Headers in preflight response

Access to fetch at 'https://gorgeous-swift-17.clerk.accounts.dev/v1/environment?_clerk_js_version=4.69.1&_method=PATCH&_is_native=1&__dev_session=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJkZXYiOiJkdmJfMmNwRFhxOVpWNFpZQzhLVk5lSXBSeklmNHhWIn0.awSF7yCL7AB4HTf1PjBpzEi-uIINoVX8n6u6pkBq2lIQ91MXHFdISlEXLX_G28DOGAYqZReu5NJdKn-MejXBXAdy99ohZ4hxhAMwz5bnRUtnZ94OAFEY2jBBHfsTW9YjNipWjOlTbE1FHJ5QM06hS3TiJaVUx9ZqBOHRGcGIj9_lbHdEfSjrX2lULEiV59ggqWEPl7FOlbDGLdyhqv3CnwxmH65EY-TT2G-12Fues1KA3i2zyOppNONC7cNz1eVuFEnQfavIeg31-vgCqN-SjbEG2-QesQvozE_ABMZxvy_ij4-SP7uRjUCYwLoAu5Z05MMY52ULroVojTbI1CnZkA' from origin 'http://localhost:8081' has been blocked by CORS policy: Request header field x-expo-native-application-version is not allowed by Access-Control-Allow-Headers in preflight response.

Adding a bit of code to remove those headers for web platform fixes the issue:

 useEffect(() => {
if(Platform.OS === 'web') {
clerk.__unstable__onBeforeRequest(async (requestInit: RequestInit) => {
(requestInit.headers as Headers).delete("x-expo-execution-environment");
(requestInit.headers as Headers).delete("x-expo-native-application-version");
},[]);
}
})

I assume that web, being the underused platform for RN, wasn't specifically tested, but i'd love to be able to run it with the same code as the other platforms.

Does this have to be a seperate report?
This feels like a server-side issue, not so much a package issue. One would assume the statistics would want to be gathered either way from the description.

@thiskevinwang

Copy link
Copy Markdown
MemberAuthor

Hey @auropsoft,

Does this have to be a seperate report?
This feels like a server-side issue, not so much a package issue. One would assume the statistics would want to be gathered either way from the description.

Currently, the @clerk/expo SDK only supports mobile app output, and not web, so this flow was not tested. This is not necessarily a bug right now, but a helpful breadcrumb for us nonetheless (thanks for using the Expo SDK 😄 ).

Does this sound reasonable?


Tip

You can upvote the addition of Clerk supporting web output here!

thiskevinwang added a commit that referenced this pull request May 10, 2024
* feat(clerk-expo): Remove headers and dev dependencies
- this reverts #2528
@clerk-cookieclerk-cookie mentioned this pull request May 10, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@thiskevinwang@auropsoft@jescalan@brkalow@clerk-cookie
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(clerk-expo): Add expo data to request headers - #2528

Merged
thiskevinwang merged 6 commits into
mainfrom
kevin/core-1401-improve-detection-for-mobile-apps-using-clerk
Jan 10, 2024
Merged

feat(clerk-expo): Add expo data to request headers#2528
thiskevinwang merged 6 commits into
mainfrom
kevin/core-1401-improve-detection-for-mobile-apps-using-clerk

Conversation

@thiskevinwang

@thiskevinwangthiskevinwang commented Jan 9, 2024

Copy link
Copy Markdown
Member

Description

What
Send along x-expo-execution-environment and x-expo-native-application-version headers to help identify the state of a mobile app, calling Clerk.

Why
We want to be able to easily determine if a mobile app is in any of "local development", "test flight", "app store/google play" (aka: dev/staging/production, respectively)

Checklist

  • npm test runs as expected.
  • npm run build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

Packages affected

  • @clerk/backend
  • @clerk/chrome-extension
  • @clerk/clerk-js
  • @clerk/clerk-expo
  • @clerk/fastify
  • gatsby-plugin-clerk
  • @clerk/localizations
  • @clerk/nextjs
  • @clerk/clerk-react
  • @clerk/remix
  • @clerk/clerk-sdk-node
  • @clerk/shared
  • @clerk/themes
  • @clerk/types
  • build/tooling/chore

@changeset-bot

changeset-botBot commented Jan 9, 2024

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 1bf9c09

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
NameType
@clerk/clerk-expoMinor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Comment threadpackages/expo/src/singleton.ts Outdated
Comment on lines +60 to +65
(requestInit.headers as Headers).set('x-expo-application-id', Application.applicationId ?? NULL_VALUE);
(requestInit.headers as Headers).set('x-expo-application-name', Application.applicationName ?? NULL_VALUE);
(requestInit.headers as Headers).set(
'x-expo-native-application-version',
Application.nativeApplicationVersion ?? NULL_VALUE,
);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

What insight might we gain from the app name / id?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

💭 app name == Expo Go is roughly equivalent to request.origin == http://localhost:3000

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

More generally, my thinking here falls mostly under "I don't know what I don't know" regarding insights. But presence of this data should at least enable gaining any insight at all!

@jescalanjescalan left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This looks good to me, but I'm not sure I understand the context behind why it's being done. The PR description is just a screenshot of the result, the name of the branch honestly is the closest to context that we have, but even checking the related linear issue pulled from the branch name, there isn't really a lot of context about why this is important or where it came from.

To be clear, I trust that it's for a good reason, just some feedback on how to make PRs like this easier to understand and review for folks down the line 😁

@thiskevinwang

Copy link
Copy Markdown
MemberAuthor

@brkalow I reduced the number of headers sent to 2.

@jescalan I updated the description.

Comment thread.changeset/sixty-rats-bathe.md Outdated

@brkalowbrkalow left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

👍

@thiskevinwang
thiskevinwang added this pull request to the merge queue Jan 10, 2024
Merged via the queue into main with commit 3399635Jan 10, 2024
@thiskevinwang
thiskevinwang deleted the kevin/core-1401-improve-detection-for-mobile-apps-using-clerk branch January 10, 2024 17:54
thiskevinwang added a commit that referenced this pull request Jan 10, 2024
@thiskevinwangthiskevinwang mentioned this pull request Jan 10, 2024
github-merge-queueBot pushed a commit that referenced this pull request Jan 10, 2024
* chore: cherrypick #2528
* chore(repo): Reset package-lock to release/v4 && npm i
@auropsoft

auropsoft commented Feb 24, 2024

Copy link
Copy Markdown

This change causes issues with the use of clerk/clerk-expo with expo start --web.
The preflight requests get blocked by clerk with the standard message in the browser:
...blocked by CORS policy: Request header field x-expo-native-application-version is not allowed by Access-Control-Allow-Headers in preflight response

Access to fetch at 'https://gorgeous-swift-17.clerk.accounts.dev/v1/environment?_clerk_js_version=4.69.1&_method=PATCH&_is_native=1&__dev_session=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJkZXYiOiJkdmJfMmNwRFhxOVpWNFpZQzhLVk5lSXBSeklmNHhWIn0.awSF7yCL7AB4HTf1PjBpzEi-uIINoVX8n6u6pkBq2lIQ91MXHFdISlEXLX_G28DOGAYqZReu5NJdKn-MejXBXAdy99ohZ4hxhAMwz5bnRUtnZ94OAFEY2jBBHfsTW9YjNipWjOlTbE1FHJ5QM06hS3TiJaVUx9ZqBOHRGcGIj9_lbHdEfSjrX2lULEiV59ggqWEPl7FOlbDGLdyhqv3CnwxmH65EY-TT2G-12Fues1KA3i2zyOppNONC7cNz1eVuFEnQfavIeg31-vgCqN-SjbEG2-QesQvozE_ABMZxvy_ij4-SP7uRjUCYwLoAu5Z05MMY52ULroVojTbI1CnZkA' from origin 'http://localhost:8081' has been blocked by CORS policy: Request header field x-expo-native-application-version is not allowed by Access-Control-Allow-Headers in preflight response.

Adding a bit of code to remove those headers for web platform fixes the issue:

 useEffect(() => {
if(Platform.OS === 'web') {
clerk.__unstable__onBeforeRequest(async (requestInit: RequestInit) => {
(requestInit.headers as Headers).delete("x-expo-execution-environment");
(requestInit.headers as Headers).delete("x-expo-native-application-version");
},[]);
}
})

I assume that web, being the underused platform for RN, wasn't specifically tested, but i'd love to be able to run it with the same code as the other platforms.

Does this have to be a seperate report?
This feels like a server-side issue, not so much a package issue. One would assume the statistics would want to be gathered either way from the description.

@thiskevinwang

Copy link
Copy Markdown
MemberAuthor

Hey @auropsoft,

Does this have to be a seperate report?
This feels like a server-side issue, not so much a package issue. One would assume the statistics would want to be gathered either way from the description.

Currently, the @clerk/expo SDK only supports mobile app output, and not web, so this flow was not tested. This is not necessarily a bug right now, but a helpful breadcrumb for us nonetheless (thanks for using the Expo SDK 😄 ).

Does this sound reasonable?


Tip

You can upvote the addition of Clerk supporting web output here!

thiskevinwang added a commit that referenced this pull request May 10, 2024
* feat(clerk-expo): Remove headers and dev dependencies
- this reverts #2528
@clerk-cookieclerk-cookie mentioned this pull request May 10, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@thiskevinwang@auropsoft@jescalan@brkalow@clerk-cookie
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(clerk-expo): Add expo data to request headers - #2528

Merged
thiskevinwang merged 6 commits into
mainfrom
kevin/core-1401-improve-detection-for-mobile-apps-using-clerk
Jan 10, 2024
Merged

feat(clerk-expo): Add expo data to request headers#2528
thiskevinwang merged 6 commits into
mainfrom
kevin/core-1401-improve-detection-for-mobile-apps-using-clerk

Conversation

@thiskevinwang

@thiskevinwangthiskevinwang commented Jan 9, 2024

Copy link
Copy Markdown
Member

Description

What
Send along x-expo-execution-environment and x-expo-native-application-version headers to help identify the state of a mobile app, calling Clerk.

Why
We want to be able to easily determine if a mobile app is in any of "local development", "test flight", "app store/google play" (aka: dev/staging/production, respectively)

Checklist

  • npm test runs as expected.
  • npm run build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

Packages affected

  • @clerk/backend
  • @clerk/chrome-extension
  • @clerk/clerk-js
  • @clerk/clerk-expo
  • @clerk/fastify
  • gatsby-plugin-clerk
  • @clerk/localizations
  • @clerk/nextjs
  • @clerk/clerk-react
  • @clerk/remix
  • @clerk/clerk-sdk-node
  • @clerk/shared
  • @clerk/themes
  • @clerk/types
  • build/tooling/chore

@changeset-bot

changeset-botBot commented Jan 9, 2024

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 1bf9c09

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
NameType
@clerk/clerk-expoMinor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Comment threadpackages/expo/src/singleton.ts Outdated
Comment on lines +60 to +65
(requestInit.headers as Headers).set('x-expo-application-id', Application.applicationId ?? NULL_VALUE);
(requestInit.headers as Headers).set('x-expo-application-name', Application.applicationName ?? NULL_VALUE);
(requestInit.headers as Headers).set(
'x-expo-native-application-version',
Application.nativeApplicationVersion ?? NULL_VALUE,
);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

What insight might we gain from the app name / id?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

💭 app name == Expo Go is roughly equivalent to request.origin == http://localhost:3000

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

More generally, my thinking here falls mostly under "I don't know what I don't know" regarding insights. But presence of this data should at least enable gaining any insight at all!

@jescalanjescalan left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This looks good to me, but I'm not sure I understand the context behind why it's being done. The PR description is just a screenshot of the result, the name of the branch honestly is the closest to context that we have, but even checking the related linear issue pulled from the branch name, there isn't really a lot of context about why this is important or where it came from.

To be clear, I trust that it's for a good reason, just some feedback on how to make PRs like this easier to understand and review for folks down the line 😁

@thiskevinwang

Copy link
Copy Markdown
MemberAuthor

@brkalow I reduced the number of headers sent to 2.

@jescalan I updated the description.

Comment thread.changeset/sixty-rats-bathe.md Outdated

@brkalowbrkalow left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

👍

@thiskevinwang
thiskevinwang added this pull request to the merge queue Jan 10, 2024
Merged via the queue into main with commit 3399635Jan 10, 2024
@thiskevinwang
thiskevinwang deleted the kevin/core-1401-improve-detection-for-mobile-apps-using-clerk branch January 10, 2024 17:54
thiskevinwang added a commit that referenced this pull request Jan 10, 2024
@thiskevinwangthiskevinwang mentioned this pull request Jan 10, 2024
github-merge-queueBot pushed a commit that referenced this pull request Jan 10, 2024
* chore: cherrypick #2528
* chore(repo): Reset package-lock to release/v4 && npm i
@auropsoft

auropsoft commented Feb 24, 2024

Copy link
Copy Markdown

This change causes issues with the use of clerk/clerk-expo with expo start --web.
The preflight requests get blocked by clerk with the standard message in the browser:
...blocked by CORS policy: Request header field x-expo-native-application-version is not allowed by Access-Control-Allow-Headers in preflight response

Access to fetch at 'https://gorgeous-swift-17.clerk.accounts.dev/v1/environment?_clerk_js_version=4.69.1&_method=PATCH&_is_native=1&__dev_session=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJkZXYiOiJkdmJfMmNwRFhxOVpWNFpZQzhLVk5lSXBSeklmNHhWIn0.awSF7yCL7AB4HTf1PjBpzEi-uIINoVX8n6u6pkBq2lIQ91MXHFdISlEXLX_G28DOGAYqZReu5NJdKn-MejXBXAdy99ohZ4hxhAMwz5bnRUtnZ94OAFEY2jBBHfsTW9YjNipWjOlTbE1FHJ5QM06hS3TiJaVUx9ZqBOHRGcGIj9_lbHdEfSjrX2lULEiV59ggqWEPl7FOlbDGLdyhqv3CnwxmH65EY-TT2G-12Fues1KA3i2zyOppNONC7cNz1eVuFEnQfavIeg31-vgCqN-SjbEG2-QesQvozE_ABMZxvy_ij4-SP7uRjUCYwLoAu5Z05MMY52ULroVojTbI1CnZkA' from origin 'http://localhost:8081' has been blocked by CORS policy: Request header field x-expo-native-application-version is not allowed by Access-Control-Allow-Headers in preflight response.

Adding a bit of code to remove those headers for web platform fixes the issue:

 useEffect(() => {
if(Platform.OS === 'web') {
clerk.__unstable__onBeforeRequest(async (requestInit: RequestInit) => {
(requestInit.headers as Headers).delete("x-expo-execution-environment");
(requestInit.headers as Headers).delete("x-expo-native-application-version");
},[]);
}
})

I assume that web, being the underused platform for RN, wasn't specifically tested, but i'd love to be able to run it with the same code as the other platforms.

Does this have to be a seperate report?
This feels like a server-side issue, not so much a package issue. One would assume the statistics would want to be gathered either way from the description.

@thiskevinwang

Copy link
Copy Markdown
MemberAuthor

Hey @auropsoft,

Does this have to be a seperate report?
This feels like a server-side issue, not so much a package issue. One would assume the statistics would want to be gathered either way from the description.

Currently, the @clerk/expo SDK only supports mobile app output, and not web, so this flow was not tested. This is not necessarily a bug right now, but a helpful breadcrumb for us nonetheless (thanks for using the Expo SDK 😄 ).

Does this sound reasonable?


Tip

You can upvote the addition of Clerk supporting web output here!

thiskevinwang added a commit that referenced this pull request May 10, 2024
* feat(clerk-expo): Remove headers and dev dependencies
- this reverts #2528
@clerk-cookieclerk-cookie mentioned this pull request May 10, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@thiskevinwang@auropsoft@jescalan@brkalow@clerk-cookie
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat(clerk-expo): Add expo data to request headers - #2528

Merged
thiskevinwang merged 6 commits into
mainfrom
kevin/core-1401-improve-detection-for-mobile-apps-using-clerk
Jan 10, 2024
Merged

feat(clerk-expo): Add expo data to request headers#2528
thiskevinwang merged 6 commits into
mainfrom
kevin/core-1401-improve-detection-for-mobile-apps-using-clerk

Conversation

@thiskevinwang

@thiskevinwangthiskevinwang commented Jan 9, 2024

Copy link
Copy Markdown
Member

Description

What
Send along x-expo-execution-environment and x-expo-native-application-version headers to help identify the state of a mobile app, calling Clerk.

Why
We want to be able to easily determine if a mobile app is in any of "local development", "test flight", "app store/google play" (aka: dev/staging/production, respectively)

Checklist

  • npm test runs as expected.
  • npm run build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

Packages affected

  • @clerk/backend
  • @clerk/chrome-extension
  • @clerk/clerk-js
  • @clerk/clerk-expo
  • @clerk/fastify
  • gatsby-plugin-clerk
  • @clerk/localizations
  • @clerk/nextjs
  • @clerk/clerk-react
  • @clerk/remix
  • @clerk/clerk-sdk-node
  • @clerk/shared
  • @clerk/themes
  • @clerk/types
  • build/tooling/chore

@changeset-bot

changeset-botBot commented Jan 9, 2024

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 1bf9c09

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
NameType
@clerk/clerk-expoMinor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Comment threadpackages/expo/src/singleton.ts Outdated
Comment on lines +60 to +65
(requestInit.headers as Headers).set('x-expo-application-id', Application.applicationId ?? NULL_VALUE);
(requestInit.headers as Headers).set('x-expo-application-name', Application.applicationName ?? NULL_VALUE);
(requestInit.headers as Headers).set(
'x-expo-native-application-version',
Application.nativeApplicationVersion ?? NULL_VALUE,
);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

What insight might we gain from the app name / id?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

💭 app name == Expo Go is roughly equivalent to request.origin == http://localhost:3000

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

More generally, my thinking here falls mostly under "I don't know what I don't know" regarding insights. But presence of this data should at least enable gaining any insight at all!

@jescalanjescalan left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This looks good to me, but I'm not sure I understand the context behind why it's being done. The PR description is just a screenshot of the result, the name of the branch honestly is the closest to context that we have, but even checking the related linear issue pulled from the branch name, there isn't really a lot of context about why this is important or where it came from.

To be clear, I trust that it's for a good reason, just some feedback on how to make PRs like this easier to understand and review for folks down the line 😁

@thiskevinwang

Copy link
Copy Markdown
MemberAuthor

@brkalow I reduced the number of headers sent to 2.

@jescalan I updated the description.

Comment thread.changeset/sixty-rats-bathe.md Outdated

@brkalowbrkalow left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

👍

@thiskevinwang
thiskevinwang added this pull request to the merge queue Jan 10, 2024
Merged via the queue into main with commit 3399635Jan 10, 2024
@thiskevinwang
thiskevinwang deleted the kevin/core-1401-improve-detection-for-mobile-apps-using-clerk branch January 10, 2024 17:54
thiskevinwang added a commit that referenced this pull request Jan 10, 2024
@thiskevinwangthiskevinwang mentioned this pull request Jan 10, 2024
github-merge-queueBot pushed a commit that referenced this pull request Jan 10, 2024
* chore: cherrypick #2528
* chore(repo): Reset package-lock to release/v4 && npm i
@auropsoft

auropsoft commented Feb 24, 2024

Copy link
Copy Markdown

This change causes issues with the use of clerk/clerk-expo with expo start --web.
The preflight requests get blocked by clerk with the standard message in the browser:
...blocked by CORS policy: Request header field x-expo-native-application-version is not allowed by Access-Control-Allow-Headers in preflight response

Access to fetch at 'https://gorgeous-swift-17.clerk.accounts.dev/v1/environment?_clerk_js_version=4.69.1&_method=PATCH&_is_native=1&__dev_session=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJkZXYiOiJkdmJfMmNwRFhxOVpWNFpZQzhLVk5lSXBSeklmNHhWIn0.awSF7yCL7AB4HTf1PjBpzEi-uIINoVX8n6u6pkBq2lIQ91MXHFdISlEXLX_G28DOGAYqZReu5NJdKn-MejXBXAdy99ohZ4hxhAMwz5bnRUtnZ94OAFEY2jBBHfsTW9YjNipWjOlTbE1FHJ5QM06hS3TiJaVUx9ZqBOHRGcGIj9_lbHdEfSjrX2lULEiV59ggqWEPl7FOlbDGLdyhqv3CnwxmH65EY-TT2G-12Fues1KA3i2zyOppNONC7cNz1eVuFEnQfavIeg31-vgCqN-SjbEG2-QesQvozE_ABMZxvy_ij4-SP7uRjUCYwLoAu5Z05MMY52ULroVojTbI1CnZkA' from origin 'http://localhost:8081' has been blocked by CORS policy: Request header field x-expo-native-application-version is not allowed by Access-Control-Allow-Headers in preflight response.

Adding a bit of code to remove those headers for web platform fixes the issue:

 useEffect(() => {
if(Platform.OS === 'web') {
clerk.__unstable__onBeforeRequest(async (requestInit: RequestInit) => {
(requestInit.headers as Headers).delete("x-expo-execution-environment");
(requestInit.headers as Headers).delete("x-expo-native-application-version");
},[]);
}
})

I assume that web, being the underused platform for RN, wasn't specifically tested, but i'd love to be able to run it with the same code as the other platforms.

Does this have to be a seperate report?
This feels like a server-side issue, not so much a package issue. One would assume the statistics would want to be gathered either way from the description.

@thiskevinwang

Copy link
Copy Markdown
MemberAuthor

Hey @auropsoft,

Does this have to be a seperate report?
This feels like a server-side issue, not so much a package issue. One would assume the statistics would want to be gathered either way from the description.

Currently, the @clerk/expo SDK only supports mobile app output, and not web, so this flow was not tested. This is not necessarily a bug right now, but a helpful breadcrumb for us nonetheless (thanks for using the Expo SDK 😄 ).

Does this sound reasonable?


Tip

You can upvote the addition of Clerk supporting web output here!

thiskevinwang added a commit that referenced this pull request May 10, 2024
* feat(clerk-expo): Remove headers and dev dependencies
- this reverts #2528
@clerk-cookieclerk-cookie mentioned this pull request May 10, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@thiskevinwang@auropsoft@jescalan@brkalow@clerk-cookie
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(clerk-expo): Add expo data to request headers - #2528

Merged
thiskevinwang merged 6 commits into
mainfrom
kevin/core-1401-improve-detection-for-mobile-apps-using-clerk
Jan 10, 2024
Merged

feat(clerk-expo): Add expo data to request headers#2528
thiskevinwang merged 6 commits into
mainfrom
kevin/core-1401-improve-detection-for-mobile-apps-using-clerk

Conversation

@thiskevinwang

@thiskevinwangthiskevinwang commented Jan 9, 2024

Copy link
Copy Markdown
Member

Description

What
Send along x-expo-execution-environment and x-expo-native-application-version headers to help identify the state of a mobile app, calling Clerk.

Why
We want to be able to easily determine if a mobile app is in any of "local development", "test flight", "app store/google play" (aka: dev/staging/production, respectively)

Checklist

  • npm test runs as expected.
  • npm run build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

Packages affected

  • @clerk/backend
  • @clerk/chrome-extension
  • @clerk/clerk-js
  • @clerk/clerk-expo
  • @clerk/fastify
  • gatsby-plugin-clerk
  • @clerk/localizations
  • @clerk/nextjs
  • @clerk/clerk-react
  • @clerk/remix
  • @clerk/clerk-sdk-node
  • @clerk/shared
  • @clerk/themes
  • @clerk/types
  • build/tooling/chore

@changeset-bot

changeset-botBot commented Jan 9, 2024

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 1bf9c09

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
NameType
@clerk/clerk-expoMinor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Comment threadpackages/expo/src/singleton.ts Outdated
Comment on lines +60 to +65
(requestInit.headers as Headers).set('x-expo-application-id', Application.applicationId ?? NULL_VALUE);
(requestInit.headers as Headers).set('x-expo-application-name', Application.applicationName ?? NULL_VALUE);
(requestInit.headers as Headers).set(
'x-expo-native-application-version',
Application.nativeApplicationVersion ?? NULL_VALUE,
);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

What insight might we gain from the app name / id?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

💭 app name == Expo Go is roughly equivalent to request.origin == http://localhost:3000

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

More generally, my thinking here falls mostly under "I don't know what I don't know" regarding insights. But presence of this data should at least enable gaining any insight at all!

@jescalanjescalan left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This looks good to me, but I'm not sure I understand the context behind why it's being done. The PR description is just a screenshot of the result, the name of the branch honestly is the closest to context that we have, but even checking the related linear issue pulled from the branch name, there isn't really a lot of context about why this is important or where it came from.

To be clear, I trust that it's for a good reason, just some feedback on how to make PRs like this easier to understand and review for folks down the line 😁

@thiskevinwang

Copy link
Copy Markdown
MemberAuthor

@brkalow I reduced the number of headers sent to 2.

@jescalan I updated the description.

Comment thread.changeset/sixty-rats-bathe.md Outdated

@brkalowbrkalow left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

👍

@thiskevinwang
thiskevinwang added this pull request to the merge queue Jan 10, 2024
Merged via the queue into main with commit 3399635Jan 10, 2024
@thiskevinwang
thiskevinwang deleted the kevin/core-1401-improve-detection-for-mobile-apps-using-clerk branch January 10, 2024 17:54
thiskevinwang added a commit that referenced this pull request Jan 10, 2024
@thiskevinwangthiskevinwang mentioned this pull request Jan 10, 2024
github-merge-queueBot pushed a commit that referenced this pull request Jan 10, 2024
* chore: cherrypick #2528
* chore(repo): Reset package-lock to release/v4 && npm i
@auropsoft

auropsoft commented Feb 24, 2024

Copy link
Copy Markdown

This change causes issues with the use of clerk/clerk-expo with expo start --web.
The preflight requests get blocked by clerk with the standard message in the browser:
...blocked by CORS policy: Request header field x-expo-native-application-version is not allowed by Access-Control-Allow-Headers in preflight response

Access to fetch at 'https://gorgeous-swift-17.clerk.accounts.dev/v1/environment?_clerk_js_version=4.69.1&_method=PATCH&_is_native=1&__dev_session=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJkZXYiOiJkdmJfMmNwRFhxOVpWNFpZQzhLVk5lSXBSeklmNHhWIn0.awSF7yCL7AB4HTf1PjBpzEi-uIINoVX8n6u6pkBq2lIQ91MXHFdISlEXLX_G28DOGAYqZReu5NJdKn-MejXBXAdy99ohZ4hxhAMwz5bnRUtnZ94OAFEY2jBBHfsTW9YjNipWjOlTbE1FHJ5QM06hS3TiJaVUx9ZqBOHRGcGIj9_lbHdEfSjrX2lULEiV59ggqWEPl7FOlbDGLdyhqv3CnwxmH65EY-TT2G-12Fues1KA3i2zyOppNONC7cNz1eVuFEnQfavIeg31-vgCqN-SjbEG2-QesQvozE_ABMZxvy_ij4-SP7uRjUCYwLoAu5Z05MMY52ULroVojTbI1CnZkA' from origin 'http://localhost:8081' has been blocked by CORS policy: Request header field x-expo-native-application-version is not allowed by Access-Control-Allow-Headers in preflight response.

Adding a bit of code to remove those headers for web platform fixes the issue:

 useEffect(() => {
if(Platform.OS === 'web') {
clerk.__unstable__onBeforeRequest(async (requestInit: RequestInit) => {
(requestInit.headers as Headers).delete("x-expo-execution-environment");
(requestInit.headers as Headers).delete("x-expo-native-application-version");
},[]);
}
})

I assume that web, being the underused platform for RN, wasn't specifically tested, but i'd love to be able to run it with the same code as the other platforms.

Does this have to be a seperate report?
This feels like a server-side issue, not so much a package issue. One would assume the statistics would want to be gathered either way from the description.

@thiskevinwang

Copy link
Copy Markdown
MemberAuthor

Hey @auropsoft,

Does this have to be a seperate report?
This feels like a server-side issue, not so much a package issue. One would assume the statistics would want to be gathered either way from the description.

Currently, the @clerk/expo SDK only supports mobile app output, and not web, so this flow was not tested. This is not necessarily a bug right now, but a helpful breadcrumb for us nonetheless (thanks for using the Expo SDK 😄 ).

Does this sound reasonable?


Tip

You can upvote the addition of Clerk supporting web output here!

thiskevinwang added a commit that referenced this pull request May 10, 2024
* feat(clerk-expo): Remove headers and dev dependencies
- this reverts #2528
@clerk-cookieclerk-cookie mentioned this pull request May 10, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@thiskevinwang@auropsoft@jescalan@brkalow@clerk-cookie
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(clerk-expo): Add expo data to request headers - #2528

Merged
thiskevinwang merged 6 commits into
mainfrom
kevin/core-1401-improve-detection-for-mobile-apps-using-clerk
Jan 10, 2024
Merged

feat(clerk-expo): Add expo data to request headers#2528
thiskevinwang merged 6 commits into
mainfrom
kevin/core-1401-improve-detection-for-mobile-apps-using-clerk

Conversation

@thiskevinwang

@thiskevinwangthiskevinwang commented Jan 9, 2024

Copy link
Copy Markdown
Member

Description

What
Send along x-expo-execution-environment and x-expo-native-application-version headers to help identify the state of a mobile app, calling Clerk.

Why
We want to be able to easily determine if a mobile app is in any of "local development", "test flight", "app store/google play" (aka: dev/staging/production, respectively)

Checklist

  • npm test runs as expected.
  • npm run build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

Packages affected

  • @clerk/backend
  • @clerk/chrome-extension
  • @clerk/clerk-js
  • @clerk/clerk-expo
  • @clerk/fastify
  • gatsby-plugin-clerk
  • @clerk/localizations
  • @clerk/nextjs
  • @clerk/clerk-react
  • @clerk/remix
  • @clerk/clerk-sdk-node
  • @clerk/shared
  • @clerk/themes
  • @clerk/types
  • build/tooling/chore

@changeset-bot

changeset-botBot commented Jan 9, 2024

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 1bf9c09

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
NameType
@clerk/clerk-expoMinor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Comment threadpackages/expo/src/singleton.ts Outdated
Comment on lines +60 to +65
(requestInit.headers as Headers).set('x-expo-application-id', Application.applicationId ?? NULL_VALUE);
(requestInit.headers as Headers).set('x-expo-application-name', Application.applicationName ?? NULL_VALUE);
(requestInit.headers as Headers).set(
'x-expo-native-application-version',
Application.nativeApplicationVersion ?? NULL_VALUE,
);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

What insight might we gain from the app name / id?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

💭 app name == Expo Go is roughly equivalent to request.origin == http://localhost:3000

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

More generally, my thinking here falls mostly under "I don't know what I don't know" regarding insights. But presence of this data should at least enable gaining any insight at all!

@jescalanjescalan left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This looks good to me, but I'm not sure I understand the context behind why it's being done. The PR description is just a screenshot of the result, the name of the branch honestly is the closest to context that we have, but even checking the related linear issue pulled from the branch name, there isn't really a lot of context about why this is important or where it came from.

To be clear, I trust that it's for a good reason, just some feedback on how to make PRs like this easier to understand and review for folks down the line 😁

@thiskevinwang

Copy link
Copy Markdown
MemberAuthor

@brkalow I reduced the number of headers sent to 2.

@jescalan I updated the description.

Comment thread.changeset/sixty-rats-bathe.md Outdated

@brkalowbrkalow left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

👍

@thiskevinwang
thiskevinwang added this pull request to the merge queue Jan 10, 2024
Merged via the queue into main with commit 3399635Jan 10, 2024
@thiskevinwang
thiskevinwang deleted the kevin/core-1401-improve-detection-for-mobile-apps-using-clerk branch January 10, 2024 17:54
thiskevinwang added a commit that referenced this pull request Jan 10, 2024
@thiskevinwangthiskevinwang mentioned this pull request Jan 10, 2024
github-merge-queueBot pushed a commit that referenced this pull request Jan 10, 2024
* chore: cherrypick #2528
* chore(repo): Reset package-lock to release/v4 && npm i
@auropsoft

auropsoft commented Feb 24, 2024

Copy link
Copy Markdown

This change causes issues with the use of clerk/clerk-expo with expo start --web.
The preflight requests get blocked by clerk with the standard message in the browser:
...blocked by CORS policy: Request header field x-expo-native-application-version is not allowed by Access-Control-Allow-Headers in preflight response

Access to fetch at 'https://gorgeous-swift-17.clerk.accounts.dev/v1/environment?_clerk_js_version=4.69.1&_method=PATCH&_is_native=1&__dev_session=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJkZXYiOiJkdmJfMmNwRFhxOVpWNFpZQzhLVk5lSXBSeklmNHhWIn0.awSF7yCL7AB4HTf1PjBpzEi-uIINoVX8n6u6pkBq2lIQ91MXHFdISlEXLX_G28DOGAYqZReu5NJdKn-MejXBXAdy99ohZ4hxhAMwz5bnRUtnZ94OAFEY2jBBHfsTW9YjNipWjOlTbE1FHJ5QM06hS3TiJaVUx9ZqBOHRGcGIj9_lbHdEfSjrX2lULEiV59ggqWEPl7FOlbDGLdyhqv3CnwxmH65EY-TT2G-12Fues1KA3i2zyOppNONC7cNz1eVuFEnQfavIeg31-vgCqN-SjbEG2-QesQvozE_ABMZxvy_ij4-SP7uRjUCYwLoAu5Z05MMY52ULroVojTbI1CnZkA' from origin 'http://localhost:8081' has been blocked by CORS policy: Request header field x-expo-native-application-version is not allowed by Access-Control-Allow-Headers in preflight response.

Adding a bit of code to remove those headers for web platform fixes the issue:

 useEffect(() => {
if(Platform.OS === 'web') {
clerk.__unstable__onBeforeRequest(async (requestInit: RequestInit) => {
(requestInit.headers as Headers).delete("x-expo-execution-environment");
(requestInit.headers as Headers).delete("x-expo-native-application-version");
},[]);
}
})

I assume that web, being the underused platform for RN, wasn't specifically tested, but i'd love to be able to run it with the same code as the other platforms.

Does this have to be a seperate report?
This feels like a server-side issue, not so much a package issue. One would assume the statistics would want to be gathered either way from the description.

@thiskevinwang

Copy link
Copy Markdown
MemberAuthor

Hey @auropsoft,

Does this have to be a seperate report?
This feels like a server-side issue, not so much a package issue. One would assume the statistics would want to be gathered either way from the description.

Currently, the @clerk/expo SDK only supports mobile app output, and not web, so this flow was not tested. This is not necessarily a bug right now, but a helpful breadcrumb for us nonetheless (thanks for using the Expo SDK 😄 ).

Does this sound reasonable?


Tip

You can upvote the addition of Clerk supporting web output here!

thiskevinwang added a commit that referenced this pull request May 10, 2024
* feat(clerk-expo): Remove headers and dev dependencies
- this reverts #2528
@clerk-cookieclerk-cookie mentioned this pull request May 10, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@thiskevinwang@auropsoft@jescalan@brkalow@clerk-cookie
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat(clerk-expo): Add expo data to request headers - #2528

Merged
thiskevinwang merged 6 commits into
mainfrom
kevin/core-1401-improve-detection-for-mobile-apps-using-clerk
Jan 10, 2024
Merged

feat(clerk-expo): Add expo data to request headers#2528
thiskevinwang merged 6 commits into
mainfrom
kevin/core-1401-improve-detection-for-mobile-apps-using-clerk

Conversation

@thiskevinwang

@thiskevinwangthiskevinwang commented Jan 9, 2024

Copy link
Copy Markdown
Member

Description

What
Send along x-expo-execution-environment and x-expo-native-application-version headers to help identify the state of a mobile app, calling Clerk.

Why
We want to be able to easily determine if a mobile app is in any of "local development", "test flight", "app store/google play" (aka: dev/staging/production, respectively)

Checklist

  • npm test runs as expected.
  • npm run build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

Packages affected

  • @clerk/backend
  • @clerk/chrome-extension
  • @clerk/clerk-js
  • @clerk/clerk-expo
  • @clerk/fastify
  • gatsby-plugin-clerk
  • @clerk/localizations
  • @clerk/nextjs
  • @clerk/clerk-react
  • @clerk/remix
  • @clerk/clerk-sdk-node
  • @clerk/shared
  • @clerk/themes
  • @clerk/types
  • build/tooling/chore

@changeset-bot

changeset-botBot commented Jan 9, 2024

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 1bf9c09

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
NameType
@clerk/clerk-expoMinor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Comment threadpackages/expo/src/singleton.ts Outdated
Comment on lines +60 to +65
(requestInit.headers as Headers).set('x-expo-application-id', Application.applicationId ?? NULL_VALUE);
(requestInit.headers as Headers).set('x-expo-application-name', Application.applicationName ?? NULL_VALUE);
(requestInit.headers as Headers).set(
'x-expo-native-application-version',
Application.nativeApplicationVersion ?? NULL_VALUE,
);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

What insight might we gain from the app name / id?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

💭 app name == Expo Go is roughly equivalent to request.origin == http://localhost:3000

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

More generally, my thinking here falls mostly under "I don't know what I don't know" regarding insights. But presence of this data should at least enable gaining any insight at all!

@jescalanjescalan left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This looks good to me, but I'm not sure I understand the context behind why it's being done. The PR description is just a screenshot of the result, the name of the branch honestly is the closest to context that we have, but even checking the related linear issue pulled from the branch name, there isn't really a lot of context about why this is important or where it came from.

To be clear, I trust that it's for a good reason, just some feedback on how to make PRs like this easier to understand and review for folks down the line 😁

@thiskevinwang

Copy link
Copy Markdown
MemberAuthor

@brkalow I reduced the number of headers sent to 2.

@jescalan I updated the description.

Comment thread.changeset/sixty-rats-bathe.md Outdated

@brkalowbrkalow left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

👍

@thiskevinwang
thiskevinwang added this pull request to the merge queue Jan 10, 2024
Merged via the queue into main with commit 3399635Jan 10, 2024
@thiskevinwang
thiskevinwang deleted the kevin/core-1401-improve-detection-for-mobile-apps-using-clerk branch January 10, 2024 17:54
thiskevinwang added a commit that referenced this pull request Jan 10, 2024
@thiskevinwangthiskevinwang mentioned this pull request Jan 10, 2024
github-merge-queueBot pushed a commit that referenced this pull request Jan 10, 2024
* chore: cherrypick #2528
* chore(repo): Reset package-lock to release/v4 && npm i
@auropsoft

auropsoft commented Feb 24, 2024

Copy link
Copy Markdown

This change causes issues with the use of clerk/clerk-expo with expo start --web.
The preflight requests get blocked by clerk with the standard message in the browser:
...blocked by CORS policy: Request header field x-expo-native-application-version is not allowed by Access-Control-Allow-Headers in preflight response

Access to fetch at 'https://gorgeous-swift-17.clerk.accounts.dev/v1/environment?_clerk_js_version=4.69.1&_method=PATCH&_is_native=1&__dev_session=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJkZXYiOiJkdmJfMmNwRFhxOVpWNFpZQzhLVk5lSXBSeklmNHhWIn0.awSF7yCL7AB4HTf1PjBpzEi-uIINoVX8n6u6pkBq2lIQ91MXHFdISlEXLX_G28DOGAYqZReu5NJdKn-MejXBXAdy99ohZ4hxhAMwz5bnRUtnZ94OAFEY2jBBHfsTW9YjNipWjOlTbE1FHJ5QM06hS3TiJaVUx9ZqBOHRGcGIj9_lbHdEfSjrX2lULEiV59ggqWEPl7FOlbDGLdyhqv3CnwxmH65EY-TT2G-12Fues1KA3i2zyOppNONC7cNz1eVuFEnQfavIeg31-vgCqN-SjbEG2-QesQvozE_ABMZxvy_ij4-SP7uRjUCYwLoAu5Z05MMY52ULroVojTbI1CnZkA' from origin 'http://localhost:8081' has been blocked by CORS policy: Request header field x-expo-native-application-version is not allowed by Access-Control-Allow-Headers in preflight response.

Adding a bit of code to remove those headers for web platform fixes the issue:

 useEffect(() => {
if(Platform.OS === 'web') {
clerk.__unstable__onBeforeRequest(async (requestInit: RequestInit) => {
(requestInit.headers as Headers).delete("x-expo-execution-environment");
(requestInit.headers as Headers).delete("x-expo-native-application-version");
},[]);
}
})

I assume that web, being the underused platform for RN, wasn't specifically tested, but i'd love to be able to run it with the same code as the other platforms.

Does this have to be a seperate report?
This feels like a server-side issue, not so much a package issue. One would assume the statistics would want to be gathered either way from the description.

@thiskevinwang

Copy link
Copy Markdown
MemberAuthor

Hey @auropsoft,

Does this have to be a seperate report?
This feels like a server-side issue, not so much a package issue. One would assume the statistics would want to be gathered either way from the description.

Currently, the @clerk/expo SDK only supports mobile app output, and not web, so this flow was not tested. This is not necessarily a bug right now, but a helpful breadcrumb for us nonetheless (thanks for using the Expo SDK 😄 ).

Does this sound reasonable?


Tip

You can upvote the addition of Clerk supporting web output here!

thiskevinwang added a commit that referenced this pull request May 10, 2024
* feat(clerk-expo): Remove headers and dev dependencies
- this reverts #2528
@clerk-cookieclerk-cookie mentioned this pull request May 10, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@thiskevinwang@auropsoft@jescalan@brkalow@clerk-cookie