mirror of
https://github.com/System-End/ip.git
synced 2026-04-19 20:55:06 +00:00
Initial commit
This commit is contained in:
commit
499af1a6dd
2 changed files with 97 additions and 0 deletions
39
Dockerfile
Normal file
39
Dockerfile
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
# use the official Bun image
|
||||
# see all versions at https://hub.docker.com/r/oven/bun/tags
|
||||
FROM oven/bun:1 AS base
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
# install dependencies into temp directory
|
||||
# this will cache them and speed up future builds
|
||||
FROM base AS install
|
||||
RUN mkdir -p /temp/dev
|
||||
COPY package.json bun.lock /temp/dev/
|
||||
RUN cd /temp/dev && bun install --frozen-lockfile
|
||||
|
||||
# install with --production (exclude devDependencies)
|
||||
RUN mkdir -p /temp/prod
|
||||
COPY package.json bun.lock /temp/prod/
|
||||
RUN cd /temp/prod && bun install --frozen-lockfile --production
|
||||
|
||||
# copy node_modules from temp directory
|
||||
# then copy all (non-ignored) project files into the image
|
||||
FROM base AS prerelease
|
||||
COPY --from=install /temp/dev/node_modules node_modules
|
||||
COPY . .
|
||||
|
||||
# [optional] tests & build
|
||||
ENV NODE_ENV=production
|
||||
RUN bun test
|
||||
RUN bun run build
|
||||
|
||||
# copy production dependencies and source code into final image
|
||||
FROM base AS release
|
||||
COPY --from=install /temp/prod/node_modules node_modules
|
||||
COPY --from=prerelease /usr/src/app/index.ts .
|
||||
COPY --from=prerelease /usr/src/app/package.json .
|
||||
|
||||
# run the app
|
||||
USER bun
|
||||
EXPOSE 3000/tcp
|
||||
ENTRYPOINT [ "bun", "run", "index.ts" ]
|
||||
|
||||
58
index.ts
Normal file
58
index.ts
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
import { sql } from "bun";
|
||||
|
||||
async function q(ip: string) {
|
||||
return await sql`
|
||||
select
|
||||
net.network,
|
||||
is_anonymous_proxy,
|
||||
is_satellite_provider,
|
||||
postal_code,
|
||||
latitude,
|
||||
longitude,
|
||||
accuracy_radius,
|
||||
is_anycast,
|
||||
locale_code,
|
||||
continent_code,
|
||||
continent_name,
|
||||
country_iso_code,
|
||||
country_name,
|
||||
subdivision_1_iso_code,
|
||||
subdivision_1_name,
|
||||
subdivision_2_iso_code,
|
||||
subdivision_2_name,
|
||||
city_name,
|
||||
metro_code,
|
||||
time_zone,
|
||||
is_in_european_union,
|
||||
autonomous_system_organization as isp_name
|
||||
from geoip2_network net
|
||||
left join geoip2_location location on (
|
||||
net.geoname_id = location.geoname_id
|
||||
)
|
||||
left join geoip2_asn asn on (
|
||||
asn.network >>= net.network
|
||||
)
|
||||
where net.network >>= ${ip};`
|
||||
|
||||
}
|
||||
|
||||
Bun.serve({
|
||||
routes: {
|
||||
"/ip": async (req, server) => {
|
||||
const start = performance.now()
|
||||
const ip = server.requestIP(req)
|
||||
console.log({ip})
|
||||
const [ipRes] = await q(ip.address)
|
||||
console.log(Math.round(performance.now() - start) + " ms")
|
||||
return Response.json(ipRes)
|
||||
|
||||
},
|
||||
"/ip/:ip": async ({ params }) => {
|
||||
const start = performance.now()
|
||||
const [ipRes] = await q(params.ip)
|
||||
console.log(Math.round(performance.now() - start) + " ms")
|
||||
return Response.json(ipRes)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
Loading…
Add table
Reference in a new issue