-
Notifications
You must be signed in to change notification settings - Fork 4
/
gettingStarted.js
116 lines (99 loc) · 4.58 KB
/
gettingStarted.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
106
107
108
109
110
111
112
113
114
115
116
/* *********************************************************************
* This Original Work is copyright of 51 Degrees Mobile Experts Limited.
* Copyright 2023 51 Degrees Mobile Experts Limited, Davidson House,
* Forbury Square, Reading, Berkshire, United Kingdom RG1 3EU.
*
* This Original Work is licensed under the European Union Public Licence
* (EUPL) v.1.2 and is subject to its terms as set out below.
*
* If a copy of the EUPL was not distributed with this file, You can obtain
* one at https://opensource.org/licenses/EUPL-1.2.
*
* The 'Compatible Licences' set out in the Appendix to the EUPL (as may be
* amended by the European Commission) shall be deemed incompatible for
* the purposes of the Work and the provisions of the compatibility
* clause in Article 5 of the EUPL shall not apply.
*
* If using the Work as, or as part of, a network application, by
* including the attribution notice(s) required under Article 5 of the EUPL
* in the end user terms of the application under an appropriate heading,
* such notice(s) shall fulfill the requirements of that article.
* ********************************************************************* */
/**
* @example gettingStarted.js
*
* This shows how to use DeviceDetectionPipelineBuilder instead of specific
* DeviceDetectionCloudPipelineBuilder.
*
* This example is available in full on [GitHub](https://github.com/51Degrees/device-detection-node/blob/main/fiftyone.devicedetection/examples/gettingStarted.js).
*
* Expected output:
*
* ```
* Is user agent 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_2 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Mobile/15C114' a mobile?
* true
*
* Is user agent 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36' a mobile?
* false
* ```
*
*/
const path = require('path');
const require51 = (requestedPackage) => {
try {
return require(path.join(__dirname, '/../node_modules/', requestedPackage));
} catch (e) {
return require(path.join(__dirname, '/../../', requestedPackage));
}
};
const DeviceDetectionPipelineBuilder = require51('fiftyone.devicedetection').DeviceDetectionPipelineBuilder;
// Create the device detection pipeline with the desired settings.
// You need to create a resource key at https://configure.51degrees.com
// and paste it into the code, replacing !!YOUR_RESOURCE_KEY!! below.
const myResourceKey = process.env.RESOURCE_KEY || '!!YOUR_RESOURCE_KEY!!';
if (myResourceKey === '!!YOUR_RESOURCE_KEY!!') {
console.log('You need to create a resource key at ' +
'https://configure.51degrees.com and paste it into the code, ' +
'replacing !!YOUR_RESOURCE_KEY!!');
console.log('Make sure to include the ismobile property ' +
'as it is used by this example.');
} else {
// Construct the device detection pipeline using the
// DeviceDetectionCloudPipelineBuilder, passing in your resourceKey.
// The build method completes the pipeline
const pipeline = new DeviceDetectionPipelineBuilder({
resourceKey: myResourceKey
}).build();
// To monitor the pipeline we can put in listeners for various log events.
// Valid types are info, debug, warn, error
pipeline.on('error', console.error);
// Here we make a function that gets a userAgent as evidence and uses the
// Device Detection Engine to detect if it is a mobile or not
const checkIfMobile = async function (userAgent) {
// Create a FlowData element
// This is used to add evidence and process it through the
// FlowElements in the Pipeline.
const flowData = pipeline.createFlowData();
// Add the User-Agent as evidence
flowData.evidence.add('header.user-agent', userAgent);
// Run process on the flowData (this returns a promise)
await flowData.process();
// Check the ismobile property
// this returns an AspectPropertyValue wrapper
// letting you check if a value is set and if not why not
const ismobile = flowData.device.ismobile;
console.log(`Is user agent '${userAgent}' a mobile?`);
// Check if the result has a meaningful value and output it
if (ismobile.hasValue) {
console.log(ismobile.value);
} else {
// Output why the value isn't meaningful
console.log(ismobile.noValueMessage);
}
console.log(' ');
};
const desktopUA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36';
const iPhoneUA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_2 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Mobile/15C114';
checkIfMobile(desktopUA);
checkIfMobile(iPhoneUA);
}