@boomerang-io/webapp-spa-server 1.0.2-beta.2 → 1.1.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -4
- package/index.js +73 -65
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -10,6 +10,9 @@ Provide a consistent way to deploy Boomerang React SPAs with client-side routing
|
|
|
10
10
|
- Logging with [@boomerang-io/logger-middleware](https://github.com/boomerang-io/webapp-packages/src/packages/logger-middleware)
|
|
11
11
|
- Cloud native health checking with [Cloud Native Health Connect](@cloudnative/health-connect)
|
|
12
12
|
- New Relic monitoring
|
|
13
|
+
- Instana monitoring
|
|
14
|
+
- Google Analytics
|
|
15
|
+
- BeeHeard survey
|
|
13
16
|
|
|
14
17
|
## Design
|
|
15
18
|
|
|
@@ -60,15 +63,19 @@ The following env variables are assumed to exist either from a local `.env` file
|
|
|
60
63
|
| :--------------------------: | :-----------------------------------------------------------------------: | :------------------: |
|
|
61
64
|
| APP_ROOT | Root context of the application | string |
|
|
62
65
|
| BUILD_DIR | directory relative to the exeuction where app files are located | string |
|
|
66
|
+
| PORT | Port for server to run on | number |
|
|
63
67
|
| HTML_HEAD_INJECTED_DATA_KEYS | Environment variables to inject into the HTML document | comma delimited list |
|
|
64
68
|
| HTML_HEAD_INJECTED_SCRIPTS | Scripts to inject into HTML document. Files need to be in the `BUILD_DIR` | comma delimited list |
|
|
65
|
-
| NEW_RELIC_APP_NAME |
|
|
66
|
-
| NEW_RELIC_LICENSE_KEY |
|
|
67
|
-
|
|
|
69
|
+
| NEW_RELIC_APP_NAME | App name for New Relic monitoring | string |
|
|
70
|
+
| NEW_RELIC_LICENSE_KEY | License key for New Relic monitoring | string |
|
|
71
|
+
| INSTANA_REPORTING_URL | Reporting URL for Instana monitoring | string |
|
|
72
|
+
| INSTANA_KEY | License key for Instana monitoring | string |
|
|
73
|
+
| GA_SITE_ID | Site ID for Goolge Analytics | string |
|
|
74
|
+
| ENABLE_BEEHEARD_SURVEY | Enable BeeHeard survey | boolean |
|
|
68
75
|
|
|
69
76
|
## Defaults
|
|
70
77
|
|
|
71
|
-
Some of the values, both config and environment variables have defaults in the server
|
|
78
|
+
Some of the values, both config and environment variables have defaults in the server for deploying to the IBM Consulting Essentials platform.
|
|
72
79
|
|
|
73
80
|
APP_ROOT
|
|
74
81
|
|
package/index.js
CHANGED
|
@@ -36,8 +36,6 @@ function createBoomerangServer({
|
|
|
36
36
|
NEW_RELIC_LICENSE_KEY,
|
|
37
37
|
HTML_HEAD_INJECTED_SCRIPTS,
|
|
38
38
|
BUILD_DIR = "build",
|
|
39
|
-
GA_SITE_ID,
|
|
40
|
-
ENABLE_BEEHEARD_SURVEY,
|
|
41
39
|
} = process.env;
|
|
42
40
|
|
|
43
41
|
// Monitoring
|
|
@@ -64,6 +62,9 @@ function createBoomerangServer({
|
|
|
64
62
|
helmet({
|
|
65
63
|
referrerPolicy: { policy: "strict-origin-when-cross-origin" },
|
|
66
64
|
contentSecurityPolicy: false,
|
|
65
|
+
crossOriginEmbedderPolicy: false,
|
|
66
|
+
crossOriginOpenerPolicy: false,
|
|
67
|
+
crossOriginResourcePolicy: false,
|
|
67
68
|
})
|
|
68
69
|
);
|
|
69
70
|
app.disable("x-powered-by");
|
|
@@ -95,15 +96,13 @@ function createBoomerangServer({
|
|
|
95
96
|
})
|
|
96
97
|
);
|
|
97
98
|
appRouter.get("/*", (req, res) =>
|
|
98
|
-
injectEnvDataAndScriptsIntoHTML(
|
|
99
|
+
injectEnvDataAndScriptsIntoHTML({
|
|
99
100
|
res,
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
ENABLE_BEEHEARD_SURVEY
|
|
106
|
-
)
|
|
101
|
+
appRoot: APP_ROOT,
|
|
102
|
+
buildDir: BUILD_DIR,
|
|
103
|
+
injectedDataKeys: HTML_HEAD_INJECTED_DATA_KEYS,
|
|
104
|
+
injectedScripts: HTML_HEAD_INJECTED_SCRIPTS,
|
|
105
|
+
})
|
|
107
106
|
);
|
|
108
107
|
} else {
|
|
109
108
|
appRouter.use("/", express.static(path.join(process.cwd(), BUILD_DIR)));
|
|
@@ -134,58 +133,8 @@ function createBoomerangServer({
|
|
|
134
133
|
* @param {string} buildDir - build directory for building up path to index.html file
|
|
135
134
|
* @param {string} injectedDataKeys - string of comma delimited values
|
|
136
135
|
* @param {string} injectedScripts - string of comma delimited values
|
|
137
|
-
* @param {string} appRoot - root context off app. Used for script injection
|
|
138
|
-
* @param {string} gaSiteId - siteID to be injected on scripts to support GA
|
|
139
|
-
* @param {string} baseLaunchUrl - base url to determine GA primaryCategory
|
|
140
|
-
* @param {boolean} enableBeeheardSurvey - true/false value configured at helm to decide to insert survey script
|
|
141
136
|
*/
|
|
142
|
-
function injectEnvDataAndScriptsIntoHTML(
|
|
143
|
-
res,
|
|
144
|
-
buildDir,
|
|
145
|
-
injectedDataKeys,
|
|
146
|
-
injectedScripts,
|
|
147
|
-
appRoot,
|
|
148
|
-
gaSiteId,
|
|
149
|
-
enableBeeheardSurvey
|
|
150
|
-
) {
|
|
151
|
-
/**
|
|
152
|
-
* Create objects to be injected into application via the HEAD tag
|
|
153
|
-
*/
|
|
154
|
-
// Build script for GA integration
|
|
155
|
-
const headScripstGA = Boolean(gaSiteId)
|
|
156
|
-
? `<script type="text/javascript">
|
|
157
|
-
window.idaPageIsSPA = true;
|
|
158
|
-
window._ibmAnalytics = {
|
|
159
|
-
settings: {
|
|
160
|
-
name: "IBM_Services_Essentials",
|
|
161
|
-
isSpa: true,
|
|
162
|
-
tealiumProfileName: "ibm-web-app",
|
|
163
|
-
},
|
|
164
|
-
trustarc: {
|
|
165
|
-
isCookiePreferencesButtonAlwaysOn: false,
|
|
166
|
-
},
|
|
167
|
-
};
|
|
168
|
-
digitalData = {
|
|
169
|
-
page: {
|
|
170
|
-
pageInfo: {
|
|
171
|
-
ibm: {
|
|
172
|
-
siteID: '${gaSiteId}',
|
|
173
|
-
}
|
|
174
|
-
},
|
|
175
|
-
category: {
|
|
176
|
-
primaryCategory: 'PC100'
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
};
|
|
180
|
-
</script>
|
|
181
|
-
<script src="https://1.www.s81c.com/common/stats/ibm-common.js" type="text/javascript" crossorigin></script>
|
|
182
|
-
`
|
|
183
|
-
: "";
|
|
184
|
-
|
|
185
|
-
const headScriptBeeheardSurvey = Boolean(enableBeeheardSurvey)
|
|
186
|
-
? '<script async src="https://beeheard.dal1a.cirrus.ibm.com/survey/preconfig/HHPxpQgN.js" crossorigin></script>'
|
|
187
|
-
: "";
|
|
188
|
-
|
|
137
|
+
function injectEnvDataAndScriptsIntoHTML({ res, buildDir, appRoot, injectedDataKeys, injectedScripts }) {
|
|
189
138
|
// Build up object of external data to append
|
|
190
139
|
const headInjectedData = injectedDataKeys.split(",").reduce((acc, key) => {
|
|
191
140
|
acc[key] = process.env[key];
|
|
@@ -193,7 +142,7 @@ function injectEnvDataAndScriptsIntoHTML(
|
|
|
193
142
|
}, {});
|
|
194
143
|
|
|
195
144
|
// Build up string of scripts to append, absolute path
|
|
196
|
-
const
|
|
145
|
+
const localScriptTags = injectedScripts
|
|
197
146
|
? injectedScripts
|
|
198
147
|
.split(",")
|
|
199
148
|
.reduce((acc, currentValue) => `${acc}<script src="${appRoot}/${currentValue}"></script>`, "")
|
|
@@ -224,12 +173,71 @@ function injectEnvDataAndScriptsIntoHTML(
|
|
|
224
173
|
isJSON: true,
|
|
225
174
|
})};
|
|
226
175
|
</script>
|
|
227
|
-
${
|
|
228
|
-
${
|
|
229
|
-
${
|
|
176
|
+
${getBeeheardSurveyScripts()}
|
|
177
|
+
${getGAScripts()}
|
|
178
|
+
${getInstanaScripts()}
|
|
179
|
+
${localScriptTags}
|
|
230
180
|
</head>`
|
|
231
181
|
);
|
|
232
182
|
}
|
|
233
183
|
}
|
|
234
184
|
|
|
185
|
+
// Include BeeHeard survey based on env var
|
|
186
|
+
function getBeeheardSurveyScripts() {
|
|
187
|
+
const enableBeeheardSurvey = process.env.ENABLE_BEEHEARD_SURVEY;
|
|
188
|
+
return Boolean(enableBeeheardSurvey)
|
|
189
|
+
? '<script async src="https://beeheard.dal1a.cirrus.ibm.com/survey/preconfig/HHPxpQgN.js" crossorigin></script>'
|
|
190
|
+
: "";
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Include Google Analytics based on env var
|
|
194
|
+
function getGAScripts() {
|
|
195
|
+
const gaSiteId = process.env.GA_SITE_ID;
|
|
196
|
+
return Boolean(gaSiteId)
|
|
197
|
+
? `<script type="text/javascript">
|
|
198
|
+
window.idaPageIsSPA = true;
|
|
199
|
+
window._ibmAnalytics = {
|
|
200
|
+
settings: {
|
|
201
|
+
name: "IBM_Services_Essentials",
|
|
202
|
+
isSpa: true,
|
|
203
|
+
tealiumProfileName: "ibm-web-app",
|
|
204
|
+
},
|
|
205
|
+
trustarc: {
|
|
206
|
+
isCookiePreferencesButtonAlwaysOn: false,
|
|
207
|
+
},
|
|
208
|
+
};
|
|
209
|
+
digitalData = {
|
|
210
|
+
page: {
|
|
211
|
+
pageInfo: {
|
|
212
|
+
ibm: {
|
|
213
|
+
siteID: '${gaSiteId}',
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
category: {
|
|
217
|
+
primaryCategory: 'PC100'
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
</script>
|
|
222
|
+
<script src="https://1.www.s81c.com/common/stats/ibm-common.js" type="text/javascript" crossorigin></script>`
|
|
223
|
+
: "";
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// Include Instana monitoring based on env var
|
|
227
|
+
function getInstanaScripts() {
|
|
228
|
+
const instanaReportingUrl = process.env.INSTANA_REPORTING_URL;
|
|
229
|
+
const instanaKey = process.env.INSTANA_KEY;
|
|
230
|
+
|
|
231
|
+
return Boolean(instanaReportingUrl) && Boolean(instanaKey)
|
|
232
|
+
? `<script type="text/javascript">
|
|
233
|
+
(function(s,t,a,n){s[t]||(s[t]=a,n=s[a]=function(){n.q.push(arguments)},
|
|
234
|
+
n.q=[],n.v=2,n.l=1*new Date)})(window,"InstanaEumObject","ineum");
|
|
235
|
+
ineum('reportingUrl', '${instanaReportingUrl}');
|
|
236
|
+
ineum('key', '${instanaKey}');
|
|
237
|
+
ineum('trackSessions');
|
|
238
|
+
</script>
|
|
239
|
+
<script defer crossorigin="anonymous" src="https://eum.instana.io/eum.min.js"></script>`
|
|
240
|
+
: "";
|
|
241
|
+
}
|
|
242
|
+
|
|
235
243
|
module.exports = createBoomerangServer;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@boomerang-io/webapp-spa-server",
|
|
3
3
|
"description": "Webapp Server for React-based SPA w/ client-side routing",
|
|
4
|
-
"version": "1.0
|
|
4
|
+
"version": "1.1.0-beta.1",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Tim Bula",
|
|
7
7
|
"email": "timrbula@gmail.com"
|
|
@@ -31,8 +31,8 @@
|
|
|
31
31
|
"compression": "^1.7.4",
|
|
32
32
|
"cors": "^2.8.5",
|
|
33
33
|
"dotenv": "^14.2.0",
|
|
34
|
-
"express": "^4.17.
|
|
35
|
-
"helmet": "^5.0.
|
|
34
|
+
"express": "^4.17.3",
|
|
35
|
+
"helmet": "^5.0.2",
|
|
36
36
|
"newrelic": "^8.7.1",
|
|
37
37
|
"serialize-javascript": "^6.0.0",
|
|
38
38
|
"yargs": "^17.3.1"
|