# Gatekeeper's report utils
Gatekeeper's pdf/email Utils - shared in NPM

## Set-up
1. Create a `.npmrc` file containing: `//registry.npmjs.org/:_authToken=<publish-npm-token>`. You can find the *publish* `npm-token` on onePassword.

## Updating
1. Put your code changes in `index.js`.
	- If you added a new function, write jest test cases for it.
2. Update the version number in the `package.json`.
3. Describe your changes in the `README.md` changelog.
4. Test your code before publishing:
	- Navigate one directory back
	- Open the terminal.
	- Execute `npm install @gatekeeper_technology/report-utils`.
	- If any error fix them.
	- Navigate back into the `report-utils` directory
    	- Make sure you have jest installed on your machine.
	- run `npm test` to test that all the functions are working correctly.
5. Execute `cd report-utils` and `npm publish` in the terminal.
6. Commit & Push your changes to GitHub.

## Using this package in a JourneyApps CloudCode Task.
- In your CloudCode, open the `package.json` file and make sure you have the following code:
	```
	"dependencies": {
		"@gatekeeper_technology/report-utils": "<current-version-number>"
	}
	```
	, where `<current-version-number>` is the version number saved in this repo's `package.json` file.
- In the JavaScript code add the following line at the top of the page: `const utils = require("@gatekeeper_technology/report-utils");`.
- Create a `.npmrc` file (in the CC task) containing: `//registry.npmjs.org/:_authToken=<read-only-npm-token>`. You can find the *read-only* `npm-token` on 1Password.
- You can check at the top of this repo's `index.js` file to see which functions we export. We should update the list of functionality soon.
- Happy coding!

## Functionality
This package has three parts
 - date_time_utils - Functions that format JavaScript datetime objects to a readable/printable format
 - email_utils - These functions ensure that the specified email addresses do not violate any of the SendGrid v3 requirements and implements whitelisting 
 - photo_attachment_utils - 
## Changelog
### [1.3.1]
#### Removed
- Updated the rollbar-utils version

### [1.2.1]
#### Removed
- `dist` ignore file in `.npmignore`.

### [1.2.0]
#### Added
- Added `postToJourneyBackend` function
- Added `journeyApps` npm packages as dependencies to assist with the reportUtil package.
- Added `sortArrayByField` function
- Added `generateHTML` function
- Added `formatText` function
- Added `getImageContentForPDF` function

#### Changed
- Migrated to TypeScript
- All date functions should now be able to accept `Day` variables.
- `.gitignore` file now ignores compiled files.
- `isAttachment(s)Uploaded` functions no longer reschedules. It now throws an error with the cause = `attachments-uploading`

### [1.1.10]
#### Removed
- Removed `loadBase64` function in a race against time.

### [1.1.9]
#### Added
- Jest Test cases
- formatText, sortArrayByField and generateHTML functions
- .d.ts files.
  
### [1.1.8]
#### Changed
- Added more validation on general utils
  
#### Added
- Unit Tests on General Utils.
  
#### Removed
- console.error() on date Utils.

### [1.1.7]
#### Changed
- Fixed funky way of throwing errors
- Added a new utils folder with small internal utils

### [1.1.6]
#### Changed
- When retrying a task, we don't need to specify the CloudCode task name as we can access it programmatically

### [1.1.5]
#### Added
- isSameDay: Checks if the given two dates falls on the same day (second date value defaults to now).
- compareDates: Checks if the given two dates falls on the same date and time (return 0), date 1 is before date 2 (returns -1), otherwise returns 1 (second date value defaults to now).
#### Removed
- isToday: Can be used via the isSameDay() function
- isPastDate and isFutureDate: Can be user via the compareDates() function
#### Changed
- Improved Test file (WIP)

### [1.1.4]
#### Added
- areEqualDates
- areEqualDateTimes
- isToday
- getStartOfWeek
- getEndOfWeek
- getWeekNumber
- isFutureDate
- isPastDate

### [1.1.3]
#### Fixed
- A bug where you cannot import the `report-utils` package in the `/mobile` side of an App.

### [1.1.2]
#### Changed
- [TESTING] Moved the `loadImageBase64` function to `index.js` to see if the required("fs") problem is fixed.

### [1.1.1]
#### Changed
- [TESTING] Moved the require("fs") out of the function.

### [1.1.0]
#### Changed
 - Refactored the file structure to separate the concerns.
 - Replaced `displayPhoto` with `journeyPhotoToBase64`, it now has a more descriptive name
 - Replaced  `loadPhotoOrSignature` with  `getPhotoOrSignatureData`, it's now up to the developer to load the data into a data hash.
 - Replaced  `loadSignatureBase64` with  `encodeBase64ImagePNG`, renamed function and changed the input parameter to the actual image data.

### [1.00.07]
#### Added
- `index.js`: Added the ability to specify in which environments to enable email whitelisting.

### [1.00.06]
#### Changed
- `index.js`: Emails are first trimmed and toLowerCase'd before checking if it is valid.

### [1.00.05]
#### Changed
- `index.js`: Changed the way `loadAttachments` function receives retry_count value. 

### [1.00.04]
#### Fixed
- `index.js`: a Bug where the `loadPhotoOrSignature` function was out of date.

### [1.00.03]
#### Changed
- `index.js`: Emails check now convert all emails to lowercase before checking for duplicates.

### [1.00.02]
#### Added
- `index.js`: Added function `displayTimeWithSeconds`.
#### Changed
- `index.js`: improved javadocs commenting .

### [1.00.01]
#### Changed
- `Readme.md`: explanation improved.
- `index.js`: Added functions `displayDateTime` and `displayTime`.

### [1.00.00]
#### Added
- `package.json`: Added.
- `index.js`: Added and populated with Gatekeeper's handlebarUtil functions.
- `.npmignore`: Added.
- `.gitignore`: Added.
- `README.md`: Added with description, set-up and change-log.
