mirror of
https://github.com/uetchy/namae.git
synced 2025-08-20 01:48:12 +09:00
chore: split app into api and web
This commit is contained in:
10
api/package.json
Normal file
10
api/package.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"name": "@namae/availability",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"isomorphic-unfetch": "^3.0.0",
|
||||
"npm-name": "^5.5.0",
|
||||
"whois-json": "^2.0.4"
|
||||
}
|
||||
}
|
23
api/services/cratesio.js
Normal file
23
api/services/cratesio.js
Normal file
@@ -0,0 +1,23 @@
|
||||
const fetch = require('isomorphic-unfetch')
|
||||
|
||||
async function getAvailability(name) {
|
||||
const response = await fetch(
|
||||
`https://crates.io/api/v1/crates/${encodeURIComponent(name)}`
|
||||
)
|
||||
return response.status !== 200
|
||||
}
|
||||
|
||||
module.exports = async (req, res) => {
|
||||
const name = req.query.name
|
||||
|
||||
if (!name) {
|
||||
return res.status(400).json({ error: 'no query given' })
|
||||
}
|
||||
|
||||
try {
|
||||
const availability = await getAvailability(name)
|
||||
res.json({ availability })
|
||||
} catch (err) {
|
||||
res.status(400).json({ error: err.message })
|
||||
}
|
||||
}
|
30
api/services/dns.js
Normal file
30
api/services/dns.js
Normal file
@@ -0,0 +1,30 @@
|
||||
var dns = require('dns')
|
||||
|
||||
function resolvePromise(hostname) {
|
||||
return new Promise((resolve, reject) => {
|
||||
dns.resolve4(hostname, function(err, addresses) {
|
||||
if (err) return reject(err)
|
||||
resolve(addresses)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
module.exports = async (req, res) => {
|
||||
const name = req.query.name
|
||||
|
||||
if (!name) {
|
||||
return res.status(400).json({ error: 'no query given' })
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await resolvePromise(name)
|
||||
const availability = response && response.length > 0 ? false : true
|
||||
|
||||
res.json({ availability })
|
||||
} catch (err) {
|
||||
if (err.code === 'ENODATA') {
|
||||
return res.status(200).json({ availability: true })
|
||||
}
|
||||
res.status(400).json({ error: err.message })
|
||||
}
|
||||
}
|
18
api/services/domain.js
Normal file
18
api/services/domain.js
Normal file
@@ -0,0 +1,18 @@
|
||||
import whois from 'whois-json'
|
||||
|
||||
module.exports = async (req, res) => {
|
||||
const name = req.query.name
|
||||
|
||||
if (!name) {
|
||||
return res.status(400).json({ error: 'no query given' })
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await whois(name, { follow: 3, verbose: true })
|
||||
const availability = response[0].data.domainName ? false : true
|
||||
|
||||
res.json({ availability })
|
||||
} catch (err) {
|
||||
res.status(400).json({ error: err.message })
|
||||
}
|
||||
}
|
21
api/services/github.js
Normal file
21
api/services/github.js
Normal file
@@ -0,0 +1,21 @@
|
||||
const fetch = require('isomorphic-unfetch')
|
||||
|
||||
async function getAvailability(name) {
|
||||
const response = await fetch(`https://github.com/${encodeURIComponent(name)}`)
|
||||
return response.status !== 200
|
||||
}
|
||||
|
||||
module.exports = async (req, res) => {
|
||||
const name = req.query.name
|
||||
|
||||
if (!name) {
|
||||
return res.status(400).json({ error: 'no query given' })
|
||||
}
|
||||
|
||||
try {
|
||||
const availability = await getAvailability(name)
|
||||
res.json({ availability })
|
||||
} catch (err) {
|
||||
res.status(400).json({ error: err.message })
|
||||
}
|
||||
}
|
16
api/services/npm-org.js
Normal file
16
api/services/npm-org.js
Normal file
@@ -0,0 +1,16 @@
|
||||
const npmName = require('npm-name')
|
||||
|
||||
module.exports = async (req, res) => {
|
||||
const name = req.query.name
|
||||
|
||||
if (!name) {
|
||||
return res.status(400).json({ error: 'no query given' })
|
||||
}
|
||||
|
||||
try {
|
||||
const availability = await npmName(`@${name}`)
|
||||
res.json({ availability })
|
||||
} catch (err) {
|
||||
res.status(400).json({ error: err.message })
|
||||
}
|
||||
}
|
16
api/services/npm.js
Normal file
16
api/services/npm.js
Normal file
@@ -0,0 +1,16 @@
|
||||
const npmName = require('npm-name')
|
||||
|
||||
module.exports = async (req, res) => {
|
||||
const name = req.query.name
|
||||
|
||||
if (!name) {
|
||||
return res.status(400).json({ error: 'no query given' })
|
||||
}
|
||||
|
||||
try {
|
||||
const availability = await npmName(name)
|
||||
res.json({ availability })
|
||||
} catch (err) {
|
||||
res.status(400).json({ error: err.message })
|
||||
}
|
||||
}
|
23
api/services/pypi.js
Normal file
23
api/services/pypi.js
Normal file
@@ -0,0 +1,23 @@
|
||||
const fetch = require('isomorphic-unfetch')
|
||||
|
||||
async function getAvailability(name) {
|
||||
const response = await fetch(
|
||||
`https://pypi.org/pypi/${encodeURIComponent(name)}/json`
|
||||
)
|
||||
return response.status !== 200
|
||||
}
|
||||
|
||||
module.exports = async (req, res) => {
|
||||
const name = req.query.name
|
||||
|
||||
if (!name) {
|
||||
return res.status(400).json({ error: 'no query given' })
|
||||
}
|
||||
|
||||
try {
|
||||
const availability = await getAvailability(name)
|
||||
res.json({ availability })
|
||||
} catch (err) {
|
||||
res.status(400).json({ error: err.message })
|
||||
}
|
||||
}
|
23
api/services/s3.js
Normal file
23
api/services/s3.js
Normal file
@@ -0,0 +1,23 @@
|
||||
const fetch = require('isomorphic-unfetch')
|
||||
|
||||
async function getAvailability(name) {
|
||||
const response = await fetch(
|
||||
`https://${encodeURIComponent(name)}.s3.amazonaws.com`
|
||||
)
|
||||
return response.status !== 200
|
||||
}
|
||||
|
||||
module.exports = async (req, res) => {
|
||||
const name = req.query.name
|
||||
|
||||
if (!name) {
|
||||
return res.status(400).json({ error: 'no query given' })
|
||||
}
|
||||
|
||||
try {
|
||||
const availability = await getAvailability(name)
|
||||
res.json({ availability })
|
||||
} catch (err) {
|
||||
res.status(400).json({ error: err.message })
|
||||
}
|
||||
}
|
31
api/services/slack.js
Normal file
31
api/services/slack.js
Normal file
@@ -0,0 +1,31 @@
|
||||
const fetch = require('isomorphic-unfetch')
|
||||
|
||||
async function getAvailability(name) {
|
||||
try {
|
||||
const response = await fetch(
|
||||
`https://${encodeURIComponent(name)}.slack.com`
|
||||
)
|
||||
return response.status !== 200
|
||||
} catch (err) {
|
||||
if (err.code === 'ENOTFOUND') {
|
||||
return true
|
||||
} else {
|
||||
throw new Error(err.message)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = async (req, res) => {
|
||||
const name = req.query.name
|
||||
|
||||
if (!name) {
|
||||
return res.status(400).json({ error: 'no query given' })
|
||||
}
|
||||
|
||||
try {
|
||||
const availability = await getAvailability(name)
|
||||
res.json({ availability })
|
||||
} catch (err) {
|
||||
res.status(400).json({ error: err.message })
|
||||
}
|
||||
}
|
23
api/services/twitter.js
Normal file
23
api/services/twitter.js
Normal file
@@ -0,0 +1,23 @@
|
||||
const fetch = require('isomorphic-unfetch')
|
||||
|
||||
async function getAvailability(name) {
|
||||
const response = await fetch(
|
||||
`https://twitter.com/${encodeURIComponent(name)}`
|
||||
)
|
||||
return response.status !== 200
|
||||
}
|
||||
|
||||
module.exports = async (req, res) => {
|
||||
const name = req.query.name
|
||||
|
||||
if (!name) {
|
||||
return res.status(400).json({ error: 'no query given' })
|
||||
}
|
||||
|
||||
try {
|
||||
const availability = await getAvailability(name)
|
||||
res.json({ availability })
|
||||
} catch (err) {
|
||||
res.status(400).json({ error: err.message })
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user