-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
128 lines (110 loc) · 3.88 KB
/
index.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
117
118
119
120
121
122
123
124
125
126
127
128
const sdk = require('api')('@requestly/v1.0#2dp5to2dlm1spg1x');
sdk.auth(process.env.TEAT1_WORKSPACE_API_KEY);
async function fetchAllRules() {
console.log('Fetching all rules...');
let allRules = null;
try {
const apiResponse = await sdk.getRules();
allRules = apiResponse.data;
console.log('Number of rules 👉👉👉👉', allRules.data.length);
} catch(e) {
console.error(e);
}
return allRules;
}
async function createNewRedirectRule(ruleName, ruleDesc, requestURL, destinationURL) {
try {
const postRulesAPIRresponse = await sdk.postRules({
objectType: 'rule',
ruleType: 'Redirect',
status: 'Active',
name: ruleName,
description: ruleDesc,
pairs: [
{
source: {
key: 'Url',
operator: 'Equals',
value: requestURL
},
destination: destinationURL,
destinationType: 'url'
}
]
});
if (postRulesAPIRresponse.data.success) {
console.log('👉 Rule created successfully!!');
}
return postRulesAPIRresponse.data;
} catch (e) {
console.error(e);
}
}
async function updateRedirectRule(ruleId, ruleName, ruleDesc, requestURL, destinationURL) {
console.log(`👉 Updating a rule with Id=${ruleId} And name=${ruleName}`);
try {
const updateRulesAPIResponse = await sdk.putRulesRuleid({
objectType: 'rule',
ruleType: 'Redirect',
status: 'Active',
name: ruleName,
description: ruleDesc,
pairs: [
{
source: {
key: 'Url',
operator: 'Equals',
value: requestURL
},
destination: destinationURL,
destinationType: 'url'
}
]
}, {ruleId: ruleId})
if (updateRulesAPIResponse.data.success) {
console.log('👉 Rule updated successfully!!', updateRulesAPIResponse.data.data);
}
return updateRulesAPIResponse.data;
} catch (e) {
console.error(e);
}
}
function getRuleWithName(allRules, ruleName) {
const rulesList = allRules.data;
return rulesList.filter(ruleObject => ruleObject.name === ruleName)[0];
}
async function deleteRule(ruleId) {
try {
deleteRuleAPIResponse = sdk.deleteRulesRuleid({ ruleId });
} catch (e) {
console.error(e);
}
}
// Make this code below explicitly under async so as to leverage the async-await functionality
(async() => {
const ruleName = 'PR-1234';
// Get All the rules
let rules = await fetchAllRules();
console.log(`Printing names for all the ${rules.data.length} rules 👇`, rules.data.map(ruleObject => ruleObject.name));
//Create a new rule
console.log(`Creating a rule with name ${ruleName}`);
await createNewRedirectRule(
ruleName,
ruleDesc = 'github.com/requestly/requestly/pulls/753 Testing API access',
requestURL = 'https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js',
destinationURL = 'https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js'
)
// Test the total number of rules now
rules = await fetchAllRules();
// Find the rule with RuleName & Update the description
const ruleObject = getRuleWithName(rules, ruleName);
await updateRedirectRule(
ruleObject.id,
ruleName,
'Updated description',
requestURL = 'https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js',
destinationURL = 'https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js?a=1'
)
// Test the total number of rules now
rules = await fetchAllRules();
})()