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
51 changes: 49 additions & 2 deletions packages/cli-kit/src/public/node/context/local.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,17 @@ import {
analyticsDisabled,
cloudEnvironment,
macAddress,
_resetMacAddressCache,
getThemeKitAccessDomain,
opentelemetryDomain,
} from './local.js'
import {fileExists} from '../fs.js'
import {exec} from '../system.js'

import {afterEach, expect, describe, vi, test} from 'vitest'
import macaddress from 'macaddress'
import {afterEach, expect, describe, vi, test, beforeEach} from 'vitest'

vi.mock('macaddress')
vi.mock('../fs.js')
vi.mock('../system.js')
vi.mock('../environment.js')
Expand Down Expand Up @@ -207,12 +210,56 @@ describe('analitycsDisabled', () => {
})

describe('macAddress', () => {
beforeEach(() => {
_resetMacAddressCache()
})

test('returns any mac address value', async () => {
// Given
vi.mocked(macaddress.one).mockImplementation(((iface?: any, callback?: any) => {
if (typeof iface === 'function') return iface(null, 'macAddress')
if (callback) return callback(null, 'macAddress')
return Promise.resolve('macAddress')
}) as any)

// When
const got = await macAddress()

// Then
expect(got).not.toBeUndefined()
expect(got).toBe('macAddress')
})

test('memoizes the mac address', async () => {
// Given
vi.mocked(macaddress.one).mockImplementation(((iface?: any, callback?: any) => {
if (typeof iface === 'function') return iface(null, 'macAddress')
if (callback) return callback(null, 'macAddress')
return Promise.resolve('macAddress')
}) as any)

// When
await macAddress()
await macAddress()

// Then
expect(macaddress.one).toHaveBeenCalledTimes(1)
})

test('resets the cache when _resetMacAddressCache is called', async () => {
// Given
vi.mocked(macaddress.one).mockImplementation(((iface?: any, callback?: any) => {
if (typeof iface === 'function') return iface(null, 'macAddress')
if (callback) return callback(null, 'macAddress')
return Promise.resolve('macAddress')
}) as any)

// When
await macAddress()
_resetMacAddressCache()
await macAddress()

// Then
expect(macaddress.one).toHaveBeenCalledTimes(2)
})
})

Expand Down
16 changes: 14 additions & 2 deletions 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 macAddressPromise: Promise<string> | undefined

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

/**
* Resets the memoized mac address.
*/
export function _resetMacAddressCache(): void {
macAddressPromise = 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
Loading