Functioning Module

This commit is contained in:
Joshua 2022-08-07 20:21:37 +02:00
commit 2c45c7325e
8 changed files with 222 additions and 0 deletions

5
.gitignore vendored Normal file
View file

@ -0,0 +1,5 @@
node_modules/
build/
test.*
image.png

3
.npmignore Normal file
View file

@ -0,0 +1,3 @@
test.*
node_modules/
image.png

7
README.md Normal file
View file

@ -0,0 +1,7 @@
# Fuzzysearch
API Wrapper for the [Fuzzysearch API], making it easier to programatically request the sources of an Image.
[fuzzysearch API]:https://api.fuzzysearch.net

22
package.json Normal file
View file

@ -0,0 +1,22 @@
{
"name": "@thaldrin/fuzzysearch",
"version": "0.0.3",
"description": "API Wrapper for the Fuzzysearch API",
"main": "build/src/index.js",
"scripts": {
"build": "rm -rf build && tsc && echo Build Finished",
"test": "pnpm build && node test.js",
"prepublishOnly": "pnpm test"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"axios": "^0.27.2",
"form-data": "^4.0.0",
"node-fetch": "3.1.1"
},
"devDependencies": {
"@types/node": "^18.0.6"
}
}

116
pnpm-lock.yaml generated Normal file
View file

@ -0,0 +1,116 @@
lockfileVersion: 5.4
specifiers:
'@types/node': ^18.0.6
axios: ^0.27.2
form-data: ^4.0.0
node-fetch: 3.1.1
dependencies:
axios: 0.27.2
form-data: 4.0.0
node-fetch: 3.1.1
devDependencies:
'@types/node': 18.0.6
packages:
/@types/node/18.0.6:
resolution: {integrity: sha512-/xUq6H2aQm261exT6iZTMifUySEt4GR5KX8eYyY+C4MSNPqSh9oNIP7tz2GLKTlFaiBbgZNxffoR3CVRG+cljw==}
dev: true
/asynckit/0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
dev: false
/axios/0.27.2:
resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==}
dependencies:
follow-redirects: 1.15.1
form-data: 4.0.0
transitivePeerDependencies:
- debug
dev: false
/combined-stream/1.0.8:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
engines: {node: '>= 0.8'}
dependencies:
delayed-stream: 1.0.0
dev: false
/data-uri-to-buffer/4.0.0:
resolution: {integrity: sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==}
engines: {node: '>= 12'}
dev: false
/delayed-stream/1.0.0:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'}
dev: false
/fetch-blob/3.2.0:
resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==}
engines: {node: ^12.20 || >= 14.13}
dependencies:
node-domexception: 1.0.0
web-streams-polyfill: 3.2.1
dev: false
/follow-redirects/1.15.1:
resolution: {integrity: sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==}
engines: {node: '>=4.0'}
peerDependencies:
debug: '*'
peerDependenciesMeta:
debug:
optional: true
dev: false
/form-data/4.0.0:
resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
engines: {node: '>= 6'}
dependencies:
asynckit: 0.4.0
combined-stream: 1.0.8
mime-types: 2.1.35
dev: false
/formdata-polyfill/4.0.10:
resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
engines: {node: '>=12.20.0'}
dependencies:
fetch-blob: 3.2.0
dev: false
/mime-db/1.52.0:
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
engines: {node: '>= 0.6'}
dev: false
/mime-types/2.1.35:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines: {node: '>= 0.6'}
dependencies:
mime-db: 1.52.0
dev: false
/node-domexception/1.0.0:
resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
engines: {node: '>=10.5.0'}
dev: false
/node-fetch/3.1.1:
resolution: {integrity: sha512-SMk+vKgU77PYotRdWzqZGTZeuFKlsJ0hu4KPviQKkfY+N3vn2MIzr0rvpnYpR8MtB3IEuhlEcuOLbGvLRlA+yg==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dependencies:
data-uri-to-buffer: 4.0.0
fetch-blob: 3.2.0
formdata-polyfill: 4.0.10
dev: false
/web-streams-polyfill/3.2.1:
resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==}
engines: {node: '>= 8'}
dev: false

46
src/index.ts Normal file
View file

@ -0,0 +1,46 @@
import * as pkg from "../package.json";
import { ConstructorOptions } from "./utils/typings";
import axios from 'axios'
import FormData from 'form-data'
function useragent(ua?) {
return `${ua ? ua : ""} ${pkg.name}/v${pkg.version}`.trim();
}
function apibase(api) {
if (api !== undefined) return api;
else return "https://api.fuzzysearch.net";
}
class Fuzzysearch {
private api: string;
private ua: string;
private key: string;
constructor(options: ConstructorOptions) {
this.api = apibase(options.apibase);
this.key = options.apikey;
this.ua = useragent(options.useragent);
}
async find(image: Buffer, type: "close" | "exact" | "force" = "close") {
try {
let data = new FormData()
data.append("image",image, "probably_porn.png")
let req = await axios.post(`${this.api}/image?${type}`,data, {
headers: {
'accept': 'application/json',
'Content-Type': `multipart/form-data; boundary=${data.getBoundary()}`,
"X-API-KEY": this.key
},
})
return req.data;
} catch (error) {
throw new Error(error);
}
}
}
export default Fuzzysearch;
module.exports = Fuzzysearch

5
src/utils/typings.ts Normal file
View file

@ -0,0 +1,5 @@
export type ConstructorOptions = {
apibase?: string
useragent?: string
apikey: string
}

18
tsconfig.json Normal file
View file

@ -0,0 +1,18 @@
{
"$schema": "http://json.schemastore.org/tsconfig",
"compilerOptions": {
"outDir": "./build",
"target": "ESNext",
"baseUrl": "src",
"resolveJsonModule": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"moduleResolution": "node",
"module": "commonjs",
"paths": {},
"declaration": true,
"experimentalDecorators": true
},
"include": ["**/*"],
"exclude": ["node_modules", "build", "out", "test*", "tmp", "logs"]
}