serverless/lib/plugins/aws/info/get-api-key-values.js
Max Marze e0d6a8acbb
fix: remove bluebird and set concurrency limits for packaging (#12658)
* fix: remove bluebird from zip-service

* fix: remove bluebird and set concurrency limits for packaging
2024-07-02 14:26:28 -04:00

68 lines
2.1 KiB
JavaScript

import _ from 'lodash'
export default {
async getApiKeyValues() {
const info = this.gatheredData.info
info.apiKeys = []
// check if the user has set api keys
const apiKeyDefinitions =
_.get(this.serverless.service.provider.apiGateway, 'apiKeys') ||
this.serverless.service.provider.apiKeys
const apiKeyNames = []
if (Array.isArray(apiKeyDefinitions) && apiKeyDefinitions.length) {
apiKeyDefinitions.forEach((definition) => {
// different API key types are nested in separate arrays
if (_.isObject(definition)) {
const keyTypeName = Object.keys(definition)[0]
if (Array.isArray(definition[keyTypeName])) {
definition[keyTypeName].forEach((keyName) =>
apiKeyNames.push(keyName),
)
} else if (definition.name) {
apiKeyNames.push(definition.name)
}
} else if (typeof definition === 'string') {
// plain strings are simple, non-nested API keys
apiKeyNames.push(definition)
}
})
}
if (apiKeyNames.length) {
return this.provider
.request('CloudFormation', 'describeStackResources', {
StackName: this.provider.naming.getStackName(),
})
.then((resources) => {
const apiKeys = _(resources.StackResources)
.filter(
(resource) => resource.ResourceType === 'AWS::ApiGateway::ApiKey',
)
.map((resource) => resource.PhysicalResourceId)
.value()
return Promise.all(
apiKeys.map((apiKey) =>
this.provider.request('APIGateway', 'getApiKey', {
apiKey,
includeValue: true,
}),
),
)
})
.then((apiKeys) => {
if (apiKeys && apiKeys.length) {
info.apiKeys = apiKeys.map((apiKey) => ({
name: apiKey.name,
value: apiKey.value,
description: apiKey.description,
customerId: apiKey.customerId,
}))
}
return Promise.resolve()
})
}
return Promise.resolve()
},
}