diff --git a/src/events/http/lambda-events/LambdaProxyIntegrationEvent.js b/src/events/http/lambda-events/LambdaProxyIntegrationEvent.js index 838790a4b..f5f42b4d8 100644 --- a/src/events/http/lambda-events/LambdaProxyIntegrationEvent.js +++ b/src/events/http/lambda-events/LambdaProxyIntegrationEvent.js @@ -1,9 +1,9 @@ import { Buffer } from 'node:buffer' +import { randomUUID } from 'node:crypto' import { env } from 'node:process' import { log } from '@serverless/utils/log.js' import { decodeJwt } from 'jose' import { - createUniqueId, formatToClfTime, nullIfEmpty, parseHeaders, @@ -181,7 +181,7 @@ export default class LambdaProxyIntegrationEvent { }), domainName: 'offlineContext_domainName', domainPrefix: 'offlineContext_domainPrefix', - extendedRequestId: createUniqueId(), + extendedRequestId: randomUUID(), httpMethod, identity: { accessKey: null, @@ -212,7 +212,7 @@ export default class LambdaProxyIntegrationEvent { operationName: this.#additionalRequestContext.operationName, path: this.#path, protocol: 'HTTP/1.1', - requestId: createUniqueId(), + requestId: randomUUID(), requestTime, requestTimeEpoch, resourceId: 'offlineContext_resourceId', diff --git a/src/events/http/lambda-events/VelocityContext.js b/src/events/http/lambda-events/VelocityContext.js index f693239fc..83f2f3717 100644 --- a/src/events/http/lambda-events/VelocityContext.js +++ b/src/events/http/lambda-events/VelocityContext.js @@ -1,13 +1,9 @@ import { Buffer } from 'node:buffer' +import { randomUUID } from 'node:crypto' import { env } from 'node:process' import jsEscapeString from 'js-string-escape' import { decodeJwt } from 'jose' -import { - createUniqueId, - isPlainObject, - jsonPath, - parseHeaders, -} from '../../../utils/index.js' +import { isPlainObject, jsonPath, parseHeaders } from '../../../utils/index.js' const { parse, stringify } = JSON const { assign, entries, fromEntries } = Object @@ -107,7 +103,7 @@ export default class VelocityContext { userAgent: this.#request.headers['user-agent'] || '', userArn: 'offlineContext_userArn', }, - requestId: createUniqueId(), + requestId: randomUUID(), resourceId: 'offlineContext_resourceId', resourcePath: this.#path, stage: this.#stage, diff --git a/src/events/schedule/ScheduleEvent.js b/src/events/schedule/ScheduleEvent.js index 82cd90756..50f444031 100644 --- a/src/events/schedule/ScheduleEvent.js +++ b/src/events/schedule/ScheduleEvent.js @@ -1,13 +1,13 @@ -import { createUniqueId } from '../../utils/index.js' +import { randomUUID } from 'node:crypto' export default class ScheduleEvent { - account = createUniqueId() + account = randomUUID() detail = {}; ['detail-type'] = 'Scheduled Event' - id = createUniqueId() + id = randomUUID() region = null diff --git a/src/events/websocket/WebSocketServer.js b/src/events/websocket/WebSocketServer.js index c2c22e2b8..20be7665b 100644 --- a/src/events/websocket/WebSocketServer.js +++ b/src/events/websocket/WebSocketServer.js @@ -1,6 +1,6 @@ +import { randomUUID } from 'node:crypto' import { log } from '@serverless/utils/log.js' import { WebSocketServer as WsWebSocketServer } from 'ws' -import { createUniqueId } from '../../utils/index.js' export default class WebSocketServer { #connectionIds = new Map() @@ -21,7 +21,7 @@ export default class WebSocketServer { const server = new WsWebSocketServer({ server: this.#sharedServer, verifyClient: async ({ req }, cb) => { - const connectionId = createUniqueId() + const connectionId = randomUUID() const key = req.headers['sec-websocket-key'] log.debug(`verifyClient:${key} ${connectionId}`) diff --git a/src/events/websocket/lambda-events/WebSocketConnectEvent.js b/src/events/websocket/lambda-events/WebSocketConnectEvent.js index 37315bd6f..20302d432 100644 --- a/src/events/websocket/lambda-events/WebSocketConnectEvent.js +++ b/src/events/websocket/lambda-events/WebSocketConnectEvent.js @@ -1,3 +1,4 @@ +// import { randomUUID } from 'node:crypto' import WebSocketRequestContext from './WebSocketRequestContext.js' import { parseHeaders, @@ -32,9 +33,9 @@ export default class WebSocketConnectEvent { // const headers = { // Host: 'localhost', // 'Sec-WebSocket-Extensions': 'permessage-deflate; client_max_window_bits', - // 'Sec-WebSocket-Key': createUniqueId(), + // 'Sec-WebSocket-Key': randomUUID(), // 'Sec-WebSocket-Version': '13', - // 'X-Amzn-Trace-Id': `Root=${createUniqueId()}`, + // 'X-Amzn-Trace-Id': `Root=${randomUUID()}`, // 'X-Forwarded-For': '127.0.0.1', // 'X-Forwarded-Port': String(this.#websocketPort), // 'X-Forwarded-Proto': ${httpsProtocol ? 'https' : 'http'}, diff --git a/src/events/websocket/lambda-events/WebSocketRequestContext.js b/src/events/websocket/lambda-events/WebSocketRequestContext.js index ee4e132e5..b552ae794 100644 --- a/src/events/websocket/lambda-events/WebSocketRequestContext.js +++ b/src/events/websocket/lambda-events/WebSocketRequestContext.js @@ -1,4 +1,5 @@ -import { createUniqueId, formatToClfTime } from '../../../utils/index.js' +import { randomUUID } from 'node:crypto' +import { formatToClfTime } from '../../../utils/index.js' const { now } = Date @@ -38,7 +39,7 @@ export default class WebSocketRequestContext { connectionId: this.#connectionId, domainName: 'localhost', eventType: this.#eventType, - extendedRequestId: createUniqueId(), + extendedRequestId: randomUUID(), identity: { accessKey: null, accountId: null, @@ -54,8 +55,8 @@ export default class WebSocketRequestContext { userArn: null, }, messageDirection: 'IN', - messageId: createUniqueId(), - requestId: createUniqueId(), + messageId: randomUUID(), + requestId: randomUUID(), requestTime: formatToClfTime(timeEpoch), requestTimeEpoch: timeEpoch, routeKey: this.#route, diff --git a/src/lambda/LambdaFunction.js b/src/lambda/LambdaFunction.js index 94479dc08..fe107e535 100644 --- a/src/lambda/LambdaFunction.js +++ b/src/lambda/LambdaFunction.js @@ -1,3 +1,4 @@ +import { randomUUID } from 'node:crypto' import { readFile, writeFile } from 'node:fs/promises' import { dirname, join, resolve } from 'node:path' import process from 'node:process' @@ -15,7 +16,6 @@ import { supportedRuntimes, } from '../config/index.js' import { LambdaTimeoutError } from '../errors/index.js' -import { createUniqueId } from '../utils/index.js' const { ceil } = Math const { entries, fromEntries } = Object @@ -126,7 +126,7 @@ export default class LambdaFunction { 'services', service.service, functionKey, - createUniqueId(), + randomUUID(), ) } @@ -286,7 +286,7 @@ export default class LambdaFunction { await this.#initialize() } - const requestId = createUniqueId() + const requestId = randomUUID() this.#lambdaContext.setRequestId(requestId) this.#lambdaContext.setClientContext(this.#clientContext) diff --git a/src/utils/__tests__/createUniqueId.test.js b/src/utils/__tests__/createUniqueId.test.js deleted file mode 100644 index bdeeb89af..000000000 --- a/src/utils/__tests__/createUniqueId.test.js +++ /dev/null @@ -1,18 +0,0 @@ -import assert from 'node:assert' -import createUniqueId from '../createUniqueId.js' - -describe('createUniqueId', () => { - it('should be unique', () => { - const items = 100_000 - const set = new Set(Array.from(new Array(items)).map(createUniqueId)) - - assert.equal(set.size, items) - }) - - it('should be a 36 character string', () => { - const id = createUniqueId() - - assert.equal(typeof id, 'string') - assert.equal(id.length, 36) - }) -}) diff --git a/src/utils/createUniqueId.js b/src/utils/createUniqueId.js deleted file mode 100644 index a65cf6386..000000000 --- a/src/utils/createUniqueId.js +++ /dev/null @@ -1,5 +0,0 @@ -import { randomUUID } from 'node:crypto' - -export default function createUniqueId() { - return randomUUID() -} diff --git a/src/utils/index.js b/src/utils/index.js index 24941a7d5..8a86d3ba4 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -1,7 +1,6 @@ export { default as checkDockerDaemon } from './checkDockerDaemon.js' export { default as checkGoVersion } from './checkGoVersion.js' export { default as createApiKey } from './createApiKey.js' -export { default as createUniqueId } from './createUniqueId.js' export { default as detectExecutable } from './detectExecutable.js' export { default as formatToClfTime } from './formatToClfTime.js' export { default as generateHapiPath } from './generateHapiPath.js'