/
generatePayload.js
105 lines (94 loc) · 3.04 KB
/
generatePayload.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
'use strict';
const path = require('path');
const _ = require('lodash');
const isStandalone = require('../isStandaloneExecutable');
const userConfig = require('@serverless/utils/config');
const { triggeredDeprecations } = require('../logDeprecation');
const ci = require('ci-info');
const versions = {
'serverless': require('../../../package').version,
'@serverless/enterprise-plugin': require('@serverless/enterprise-plugin/package').version,
};
module.exports = serverless => {
const { service: serviceConfig, config } = serverless;
const { provider: providerConfig } = serviceConfig;
const provider = serverless.getProvider(providerConfig.name);
const isAwsProvider = providerConfig.name === 'aws';
const defaultRuntime = isAwsProvider ? provider.getRuntime() : providerConfig.runtime;
const npmDependencies = (() => {
if (!config.servicePath) return [];
const pkgJson = (() => {
try {
return require(path.resolve(config.servicePath, 'package.json'));
} catch (error) {
return null;
}
})();
if (!pkgJson) return [];
return Array.from(
new Set([
...Object.keys(pkgJson.dependencies || {}),
...Object.keys(pkgJson.optionalDependencies || {}),
...Object.keys(pkgJson.devDependencies || {}),
])
);
})();
let timezone;
try {
timezone = new Intl.DateTimeFormat().resolvedOptions().timeZone;
} catch (err) {
// Pass silently
}
const ciName = (() => {
if (ci.isCI) {
if (ci.name) {
return ci.name;
}
return 'unknown';
}
return null;
})();
const userId = (() => {
// In this situation deployment relies on existence on company-wide access key
// and `userId` from config does not matter
if (process.env.SERVERLESS_ACCESS_KEY) {
return null;
}
return userConfig.get('userId');
})();
return {
cliName: 'serverless',
ciName,
config: {
provider: {
name: providerConfig.name,
runtime: defaultRuntime,
stage: isAwsProvider ? provider.getStage() : providerConfig.stage,
region: isAwsProvider ? provider.getRegion() : providerConfig.region,
},
plugins: serviceConfig.plugins ? serviceConfig.plugins.modules || serviceConfig.plugins : [],
functions: _.values(serviceConfig.functions).map(functionConfig => ({
runtime: functionConfig.runtime || defaultRuntime,
events: functionConfig.events.map(eventConfig => ({
type: Object.keys(eventConfig)[0] || null,
})),
})),
},
dashboard: {
userId,
orgUid: serviceConfig.orgUid,
},
frameworkLocalUserId: userConfig.get('frameworkId'),
installationType: (() => {
if (isStandalone) return 'global:standalone';
if (!serverless.isLocallyInstalled) return 'global:npm';
if (serverless.isInvokedByGlobalInstallation) return 'local:fallback';
return 'local:direct';
})(),
npmDependencies,
timestamp: Date.now(),
timezone,
triggeredDeprecations: Array.from(triggeredDeprecations),
versions,
};
};