# Swot 🍎
[![Node.js CI](https://github.com/marvinschopf/swot-node/workflows/Node.js%20CI/badge.svg?branch=main&style=flat-square)](https://github.com/marvinschopf/swot-node/actions/workflows/node.js.yml) [![Package Quality](https://packagequality.com/shield/swot-node.svg?style=flat-square)](https://packagequality.com/#?package=swot-node) [![Dependencies](https://img.shields.io/david/marvinschopf/swot-node?style=flat-square)](https://github.com/marvinschopf/swot-node/network/dependencies) [![Downloads](https://img.shields.io/npm/dt/swot-node?style=flat-square)](https://www.npmjs.com/package/swot-node) [![Last commit](https://img.shields.io/github/last-commit/marvinschopf/swot-node?style=flat-square)](https://github.com/marvinschopf/swot-node/commits/main)

If you have a product or service and offer **academic discounts**, there's a good chance there's some manual component to the approval process. Perhaps `.edu` email addresses are automatically approved because, for the most part at least, they're associated with American post-secondary educational institutions. Perhaps `.ac.uk` email addresses are automatically approved because they're guaranteed to belong to British universities and colleges. Unfortunately, not every country has an education-specific TLD (Top Level Domain) and plenty of schools use `.com` or `.net`.

Swot is a community-driven or crowdsourced library for verifying that domain names and email addresses are tied to a legitimate university of college - more specifically, an academic institution providing higher education in tertiary, quaternary or any other kind of post-secondary education in any country in the world.

If you would like to add your school/educational institution, please create a pull request in [this repository](https://github.com/JetBrains/swot). `Jetbrains/swot` does not provide source code to this library, but is included as the dataset as it contains thousands of schools and the team at Jetbrains is verifying and adding many schools every day. A new version of [`swot-node`](https://www.npmjs.com/package/swot-node) with an updated dataset is automatically published to NPM every 24 hours.

### Installation

Add `swot-node` like other NPM packages, simply run:

`yarn add swot-node`

or

`npm install swot-node`

### Usage

#### Verify Email Addresses

```javascript
const swot = require("swot-node")

await swot.isAcademic('lreilly@stanford.edu')           // true
await swot.isAcademic('lreilly@strath.ac.uk')           // true
await swot.isAcademic('lreilly@soft-eng.strath.ac.uk')  // true
await swot.isAcademic('pedro@ugr.es')                   // true
await swot.isAcademic('lee@uottawa.ca')                 // true
await swot.isAcademic('lee@leerilly.net')               // false
```

#### Verify Domain Names

```javascript
const swot = require("swot-node")

await swot.isAcademic('harvard.edu')              // true
await swot.isAcademic('www.harvard.edu')          // true
await swot.isAcademic('http://www.harvard.edu')   // true
await swot.isAcademic('http://www.github.com')    // false
await swot.isAcademic('http://www.rangers.co.uk') // false
```

#### Get all the different names of a school

```javascript
const swot = require("swot-node")

await swot.getSchoolNames('www.bbs1-gifhorn.de')
// => [ "BBS1 Gifhorn", "Berufsbildene Schule 1 Gifhorn" ]

await swot.getSchoolNames('stanford.edu')
// => [ "Stanford University" ]
```

#### Find School Name

```javascript
const swot = require("swot-node")

await swot.getSchoolName('lreilly@cs.strath.ac.uk')
// => "University of Strathclyde"

await swot.getSchoolName('http://www.stanford.edu')
// => "Stanford University"

await swot.getSchoolName('https://www.github.com')
// => false

await swot.getSchoolName('QaPk59GZ9Zv8.edu')
// => true
```

### License
**Apache 2.0**

Copyright (c) 2021 Marvin Schopf

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


### See Also

* [swot](https://github.com/leereilly/swot) - original ruby version of swot
* [gman](https://github.com/benbalter/gman) - like swot, but for government emails
* [swotphp](https://github.com/mdwheele/swotphp) - PHP port of Swot
* [swot-clj](https://github.com/ipavl/swot-clj) - Clojure port of Swot
* [swot](https://github.com/abadojack/swot) - Go port of Swot
