Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/app/src/cli/services/generate/extension.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,7 @@ describe('initialize a extension', async () => {
name,
handle: slugify(name),
flavor,
uid: 'ba7c20a9-578d-6fee-8cd2-044af992dabd92d8bbfe',
uid: '37e88e17-2d38-e2a3-4753-3e3066cf549c78f8da9bd0582e899b84617a9c4f5b6e',
})
})
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ describe.each(tokenExchangeMethods)(
({tokenExchangeMethod, expectedScopes, expectedApi, expectedErrorName}) => {
const automationToken = 'customToken'
// Generated from `customToken` using `nonRandomUUID()`
const userId = 'eab16ac4-0690-5fed-9d00-71bd202a3c2b37259a8f'
const userId = '9d5342f1-beb2-14c1-9f5d-deee6b83513ca1cb10bbedbc9f98fb0a0e2544a48032'

const grantType = 'urn:ietf:params:oauth:grant-type:token-exchange'
const accessTokenType = 'urn:ietf:params:oauth:token-type:access_token'
Expand Down
27 changes: 27 additions & 0 deletions packages/cli-kit/src/public/node/context/local.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {
analyticsDisabled,
cloudEnvironment,
macAddress,
_resetMacAddress,
getThemeKitAccessDomain,
opentelemetryDomain,
} from './local.js'
Expand Down Expand Up @@ -207,13 +208,39 @@ describe('analitycsDisabled', () => {
})

describe('macAddress', () => {
afterEach(() => {
_resetMacAddress()
})

test('returns any mac address value', async () => {
// When
const got = await macAddress()

// Then
expect(got).not.toBeUndefined()
})

test('memoizes the mac address', async () => {
// When
const got1 = macAddress()
const got2 = macAddress()

// Then
expect(got1).toBe(got2)
await expect(got1).resolves.toBe(await got2)
})

test('resets the memoized mac address', async () => {
// Given
const got1 = macAddress()
_resetMacAddress()

// When
const got2 = macAddress()

// Then
expect(got1).not.toBe(got2)
})
})

describe('cloudEnvironment', () => {
Expand Down
15 changes: 14 additions & 1 deletion packages/cli-kit/src/public/node/context/local.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,11 @@ let memoizedIsVerbose: boolean | undefined
*/
let memoizedIsUnitTest: boolean | undefined

/**
* Memoized value for the mac address.
*/
let memoizedMacAddress: Promise<string> | undefined

/**
* Returns true if the CLI is running in debug mode.
*
Expand Down Expand Up @@ -292,7 +297,15 @@ export function ciPlatform(
* @returns Mac address.
*/
export function macAddress(): Promise<string> {
return macaddress.one()
return (memoizedMacAddress ??= macaddress.one())
}

/**
* Resets the memoized mac address.
* This is only used for testing purposes.
*/
export function _resetMacAddress(): void {
memoizedMacAddress = undefined
}

/**
Expand Down
2 changes: 1 addition & 1 deletion packages/cli-kit/src/public/node/crypto.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ describe('hashString', () => {
const hash1 = hashString('hello')
const hash2 = hashString('hello')
expect(hash1).toEqual(hash2)
expect(hash1).toMatch(/[a-f0-9]{40}/)
expect(hash1).toMatch(/[a-f0-9]{64}/)
})
})

Expand Down
8 changes: 4 additions & 4 deletions packages/cli-kit/src/public/node/crypto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,13 @@ export function sha256(str: string): Buffer {
}

/**
* Generate the SHA1 hash of a string.
* Generate the SHA256 hash of a string.
*
* @param str - The string to hash.
* @returns The SHA1 hash of the string.
* @returns The SHA256 hash of the string.
*/
export function hashString(str: string): string {
return crypto.createHash('sha1').update(str).digest('hex')
return crypto.createHash('sha256').update(str).digest('hex')
}

/**
Expand Down Expand Up @@ -81,7 +81,7 @@ export function nonRandomUUID(subject: string): string {
// A fixed namespace UUID
const namespace = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'
return crypto
.createHash('sha1')
.createHash('sha256')
.update(Buffer.from(namespace.replace(/-/g, ''), 'hex'))
.update(subject)
.digest()
Expand Down
16 changes: 12 additions & 4 deletions packages/cli-kit/src/public/node/session.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,9 @@ describe('ensureAuthenticatedStorefront', () => {
// Then
expect(got).toEqual('theme_access_password')
expect(setLastSeenAuthMethod).toBeCalledWith('custom_app_token')
expect(setLastSeenUserIdAfterAuth).toBeCalledWith('dd5e7850-e2de-d283-9c5f-79c8190a19d18b52e0ce')
expect(setLastSeenUserIdAfterAuth).toBeCalledWith(
'21534e73-fdc5-9bd3-8c9f-3f45815510a727d0dc9422919e2331006b44fe1777d5',
)
})

test('returns the password if provided, and auth method is theme_access_token', async () => {
Expand All @@ -73,7 +75,9 @@ describe('ensureAuthenticatedStorefront', () => {
// Then
expect(got).toEqual('shptka_theme_access_password')
expect(setLastSeenAuthMethod).toBeCalledWith('theme_access_token')
expect(setLastSeenUserIdAfterAuth).toBeCalledWith('730a64df-ab2c-3d92-8b11-76a66aadee947aa5c1ce')
expect(setLastSeenUserIdAfterAuth).toBeCalledWith(
'b7d6d99f-3f60-301f-71b8-3108eacc993ecc1ed720b54a20e766c21df6688e35e6',
)
})

test('throws error if there is no storefront token', async () => {
Expand Down Expand Up @@ -190,7 +194,9 @@ describe('ensureAuthenticatedTheme', () => {
// Then
expect(got).toEqual({token: 'password', storeFqdn: 'mystore.myshopify.com'})
expect(setLastSeenAuthMethod).toBeCalledWith('custom_app_token')
expect(setLastSeenUserIdAfterAuth).toBeCalledWith('f5c7086f-320b-3b93-bcdc-a2296adbec02d71eb733')
expect(setLastSeenUserIdAfterAuth).toBeCalledWith(
'18a8698d-f12b-f2db-4737-cecd09bb2c1eee00fef518e9b94bb14925ecaf132466',
)
})

test('returns the password when is provided and theme_access_token', async () => {
Expand All @@ -200,7 +206,9 @@ describe('ensureAuthenticatedTheme', () => {
// Then
expect(got).toEqual({token: 'shptka_password', storeFqdn: 'mystore.myshopify.com'})
expect(setLastSeenAuthMethod).toBeCalledWith('theme_access_token')
expect(setLastSeenUserIdAfterAuth).toBeCalledWith('e3d08cca-4e68-504a-00ec-23e2cea12a6340bb257b')
expect(setLastSeenUserIdAfterAuth).toBeCalledWith(
'aea5e074-48e7-cb2a-4b3b-6cebbb5d6f26899d8d41455e975048162bcf45a4d4bf',
)
})
})

Expand Down
Loading