From 2c45c7325ebf374e65c202e4eac5b03bd35c22eb Mon Sep 17 00:00:00 2001 From: Joshua Date: Sun, 7 Aug 2022 20:21:37 +0200 Subject: [PATCH] Functioning Module --- .gitignore | 5 ++ .npmignore | 3 ++ README.md | 7 +++ package.json | 22 ++++++++ pnpm-lock.yaml | 116 +++++++++++++++++++++++++++++++++++++++++++ src/index.ts | 46 +++++++++++++++++ src/utils/typings.ts | 5 ++ tsconfig.json | 18 +++++++ 8 files changed, 222 insertions(+) create mode 100644 .gitignore create mode 100644 .npmignore create mode 100644 README.md create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 src/index.ts create mode 100644 src/utils/typings.ts create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8c58e31 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules/ +build/ + +test.* +image.png \ No newline at end of file diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..e519755 --- /dev/null +++ b/.npmignore @@ -0,0 +1,3 @@ +test.* +node_modules/ +image.png \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..4c4ba5b --- /dev/null +++ b/README.md @@ -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 \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..99f46ae --- /dev/null +++ b/package.json @@ -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" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..5ef872e --- /dev/null +++ b/pnpm-lock.yaml @@ -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 diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..b6305bd --- /dev/null +++ b/src/index.ts @@ -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 diff --git a/src/utils/typings.ts b/src/utils/typings.ts new file mode 100644 index 0000000..6b2ae59 --- /dev/null +++ b/src/utils/typings.ts @@ -0,0 +1,5 @@ +export type ConstructorOptions = { + apibase?: string + useragent?: string + apikey: string +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..fd7c496 --- /dev/null +++ b/tsconfig.json @@ -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"] + } \ No newline at end of file