Skip to content

Commit

Permalink
migrate to TypeScript
Browse files Browse the repository at this point in the history
  • Loading branch information
ihsangan committed Aug 5, 2024
1 parent 8c1586a commit 4b167e3
Show file tree
Hide file tree
Showing 13 changed files with 114 additions and 107 deletions.
1 change: 0 additions & 1 deletion .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
name: Deploy
on:
push:
branches: [ main ]
paths:
- 'src/**'
workflow_dispatch:
Expand Down
27 changes: 27 additions & 0 deletions src/handler.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import { timeNow } from './utils';
import serveResult from './helpers';

export default async function checkCache(request: Request): Promise<Response> {
if (request.method === 'GET' || request.method === 'HEAD') {
const now = timeNow();
let cache = caches.default;
let response = await cache.match(request.url);
if (!response) {
response = await serveResult(request);
await cache.put(request.url, response.clone());
}
response = new Response(response.body, response);
response.headers.append('X-Response-Time', (timeNow() - now).toString());
return response;
} else {
return new Response(
JSON.stringify({ success: false, message: 'Method not allowed' }),
{
status: 405,
headers: {
'Content-Type': 'application/json; charset=utf-8',
}
}
);
}
}
61 changes: 0 additions & 61 deletions src/helpers.js

This file was deleted.

34 changes: 34 additions & 0 deletions src/helpers.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { getUrl, Result } from './utils';
import callAPI from './routing';

export default async function serveResult(request: Request): Promise<Response> {
const dc = getUrl(request).searchParams.get('decode');
let code = 200;
let result: Result = await callAPI(request);
if (result.name !== undefined) {
result.name = result.name.replace(/\u002B/g, '%20');
if (dc === null || dc === 'true') {
result.name = decodeURIComponent(result.name);
}
} else if (result.name === undefined || (!result.name && result.success)) {
result = { success: false, message: 'Not found' };
}
if (result.message === 'Bad request') {
code = 400;
delete result.name;
}
if (result.message === 'Not found') {
code = 404;
delete result.name;
}
const response = new Response(JSON.stringify(result), {
status: code,
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, HEAD',
'CDN-Cache-Control': 'max-age=43200, proxy-revalidate, immutable',
'Content-Type': 'application/json; charset=utf-8',
}
});
return response;
}
7 changes: 7 additions & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import checkCache from './handler';

export default {
async fetch(request: Request): Promise<Response> {
return await checkCache(request);
}
}
7 changes: 0 additions & 7 deletions src/main.js

This file was deleted.

14 changes: 0 additions & 14 deletions src/router/ff.js

This file was deleted.

17 changes: 17 additions & 0 deletions src/router/ff.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { endpoint, headers, Result } from '../utils';

export default async function ff(id: number): Promise<Result> {
const body = `voucherPricePoint.id=8050&voucherPricePoint.price=1000&voucherPricePoint.variablePrice=0&user.userId=${id}&voucherTypeName=FREEFIRE&shopLang=id_ID&voucherTypeId=1&gvtId=1`;
const response = await fetch(endpoint, {
method: 'POST',
headers,
body
});
const data = await response.json();
return {
success: true,
game: 'Garena Free Fire',
id: id,
name: data.confirmationFields.roles[0].role
};
}
File renamed without changes.
13 changes: 5 additions & 8 deletions src/routing.js → src/routing.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,17 @@
import { getUrl } from './utils';
import { getUrl, Result } from './utils';
import * as router from './router';

export default async function callAPI(request) {
export default async function callAPI(request: Request): Promise<Result> {
const url = getUrl(request);
const path = url.pathname;
const params = url.searchParams;
let id = params.get('id');
let zone = params.get('zone');

const id = params.get('id');
const zone = params.get('zone');
if (!id) {
return { success: false, message: 'Bad request' };
}

try {
let result;

let result: Result;
switch (true) {
case path.includes('/ff'):
result = await router.ff(id);
Expand Down
14 changes: 0 additions & 14 deletions src/utils.js

This file was deleted.

22 changes: 22 additions & 0 deletions src/utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
export function getUrl(request: Request): URL {
return new URL(request.url);
}

export function timeNow(): number {
return Date.now();
}

export const endpoint = 'https://order-sg.codashop.com/initPayment.action';

export const headers = new Headers({
'Content-Type': 'application/x-www-form-urlencoded'
});

export interface Result {
success: boolean;
game?: string;
id?: number | string;
zone?: number | string;
name?: string;
message?: string;
}
4 changes: 2 additions & 2 deletions wrangler.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name = "validator"
main = "./src/main.js"
name = "validev"
main = "./src/index.ts"
workers_dev = true
compatibility_date = "2022-01-01"
[placement]
Expand Down

0 comments on commit 4b167e3

Please sign in to comment.