-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(auth): add a default deviceName when remembering device
- Loading branch information
Ashwin Kumar
committed
Feb 17, 2024
1 parent
5255143
commit fad7499
Showing
6 changed files
with
78 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
15 changes: 15 additions & 0 deletions
15
packages/core/src/utils/deviceName/getDeviceName.native.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
import { getDeviceName as getDeviceNameNative } from '@aws-amplify/react-native'; | ||
|
||
/** | ||
* Retrieves the device name using name in ios and model in android, | ||
* | ||
* @returns {Promise<string>} A promise that resolves with a string representing the device name. | ||
* | ||
* Example Output: | ||
* ios: 'iPhone' / 'user's iPhone' | ||
* android: 'sdk_gphone64_arm64' | ||
*/ | ||
export const getDeviceName = async (): Promise<string> => getDeviceNameNative(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
/** | ||
* Retrieves the device name using the User-Agent Client Hints API if available, | ||
* falling back to the traditional userAgent string if not. | ||
* | ||
* @returns {Promise<string>} A promise that resolves with a string representing the device name. | ||
* | ||
* Example Output: | ||
* navigator.userAgentData: | ||
* 'macOS 14.2.1 arm macOS Not A(Brand/99.0.0.0;Google Chrome/121.0.6167.160;Chromium/121.0.6167.160' | ||
* navigator.userAgent: | ||
* 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/115.0' | ||
*/ | ||
export const getDeviceName = async (): Promise<string> => { | ||
// userAgentData is an experimental API and hence isn't typed | ||
// @ts-expect-error | ||
Check failure on line 18 in packages/core/src/utils/deviceName/getDeviceName.ts GitHub Actions / unit-tests / Unit Test - @aws-amplify/core
|
||
if (navigator.userAgentData) { | ||
const { | ||
platform = '', | ||
platformVersion = '', | ||
architecture = '', | ||
model = '', | ||
fullVersionList = '', | ||
// @ts-expect-error | ||
Check failure on line 26 in packages/core/src/utils/deviceName/getDeviceName.ts GitHub Actions / unit-tests / Unit Test - @aws-amplify/core
|
||
} = await navigator.userAgentData.getHighEntropyValues([ | ||
'platform', | ||
'platformVersion', | ||
'architecture', | ||
'model', | ||
'fullVersionList', | ||
]); | ||
|
||
const versionList = fullVersionList | ||
.filter((v: { brand: string }) => v.brand !== 'Not_A Brand') | ||
.map((v: { brand: string; version: string }) => `${v.brand}/${v.version}`) | ||
.join(';'); | ||
|
||
const deviceName = [ | ||
platform, | ||
platformVersion, | ||
architecture, | ||
model, | ||
platform, | ||
versionList, | ||
] | ||
.filter(value => value) | ||
.join(' '); | ||
return deviceName; | ||
} | ||
return navigator.userAgent; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
export { getDeviceName } from './getDeviceName'; |