Compare commits

...

9 Commits

Author SHA1 Message Date
58e1afaa45 chore(release): 1.6.4 2026-03-03 14:14:00 +08:00
250b7c5261 Fix Prisma 2026-03-03 12:03:30 +08:00
935e519662 chore(release): 1.6.3 2026-03-03 11:55:25 +08:00
c6dbd152d5 Fix middleware
### NO Issue
2026-02-25 15:34:22 +08:00
714cf5cd5a chore(release): 1.6.2 2026-02-25 15:22:40 +08:00
a68343599d Fix type env
Fix:
- modified:   types/env.d.ts

### No Issue
2026-02-25 14:25:13 +08:00
419b87fc92 chore(release): 1.6.1 2026-02-25 12:00:20 +08:00
0271c87ba9 Delete termsOfServiceAccepted on register
### No issue
2026-02-24 18:04:05 +08:00
5551f30721 Fix API and clear code
modified:   src/app/api/auth/register/route.ts
 modified:   src/app_modules/auth/login/view.tsx

### No Issue
2026-02-24 07:38:44 +08:00
10 changed files with 102 additions and 28 deletions

View File

@@ -2,6 +2,14 @@
All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines. All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
## [1.6.4](https://wibugit.wibudev.com/wibu/hipmi/compare/v1.6.3...v1.6.4) (2026-03-03)
## [1.6.3](https://wibugit.wibudev.com/wibu/hipmi/compare/v1.6.2...v1.6.3) (2026-03-03)
## [1.6.2](https://wibugit.wibudev.com/wibu/hipmi/compare/v1.6.1...v1.6.2) (2026-02-25)
## [1.6.1](https://wibugit.wibudev.com/wibu/hipmi/compare/v1.6.0...v1.6.1) (2026-02-25)
## [1.6.0](https://wibugit.wibudev.com/wibu/hipmi/compare/v1.5.40...v1.6.0) (2026-02-23) ## [1.6.0](https://wibugit.wibudev.com/wibu/hipmi/compare/v1.5.40...v1.6.0) (2026-02-23)

View File

@@ -3,12 +3,20 @@ const nextConfig = {
reactStrictMode: false, reactStrictMode: false,
experimental: { experimental: {
serverActions: true, serverActions: true,
serverComponentsExternalPackages: ['@prisma/client'],
}, },
output: "standalone", output: "standalone",
staticPageGenerationTimeout: 180, // tingkatkan menjadi 3 menit staticPageGenerationTimeout: 180, // tingkatkan menjadi 3 menit
eslint: { eslint: {
ignoreDuringBuilds: true, ignoreDuringBuilds: true,
}, },
webpack: (config, { isServer }) => {
if (isServer) {
config.externals = config.externals || [];
config.externals.push('@prisma/client');
}
return config;
},
// async headers() { // async headers() {
// return [ // return [
// { // {

View File

@@ -1,15 +1,16 @@
{ {
"name": "hipmi", "name": "hipmi",
"version": "1.6.0", "version": "1.6.4",
"private": true, "private": true,
"prisma": { "prisma": {
"seed": "bun prisma/seed.ts" "seed": "bun prisma/seed.ts"
}, },
"scripts": { "scripts": {
"dev": "next dev --experimental-https", "dev": "next dev --experimental-https",
"build": "next build", "build": "prisma generate && next build",
"build:dev": "next build", "build:dev": "prisma generate && next build",
"start": "next start", "start": "next start",
"postbuild": "node scripts/postbuild.js",
"lint": "next lint", "lint": "next lint",
"ver": "bunx commit-and-tag-version -- --prerelease" "ver": "bunx commit-and-tag-version -- --prerelease"
}, },

41
scripts/postbuild.js Normal file
View File

@@ -0,0 +1,41 @@
const fs = require('fs');
const path = require('path');
const standaloneDir = path.join(__dirname, '../.next/standalone');
const prismaDir = path.join(__dirname, '../node_modules/.prisma');
console.log('🚀 Running postbuild script...');
// Copy Prisma binaries ke standalone output
if (fs.existsSync(prismaDir)) {
const dest = path.join(standaloneDir, 'node_modules/.prisma');
fs.mkdirSync(path.dirname(dest), { recursive: true });
fs.cpSync(prismaDir, dest, { recursive: true });
console.log('✓ Prisma binaries copied to standalone output');
} else {
console.warn('⚠ Prisma binaries directory not found, skipping...');
}
// Copy schema.prisma jika diperlukan
const schemaSrc = path.join(__dirname, '../prisma/schema.prisma');
const schemaDest = path.join(standaloneDir, 'prisma/schema.prisma');
if (fs.existsSync(schemaSrc)) {
fs.mkdirSync(path.dirname(schemaDest), { recursive: true });
fs.copyFileSync(schemaSrc, schemaDest);
console.log('✓ schema.prisma copied to standalone output');
} else {
console.warn('⚠ schema.prisma not found, skipping...');
}
// Copy prisma client dari node_modules/@prisma/client
const prismaClientSrc = path.join(__dirname, '../node_modules/@prisma/client');
const prismaClientDest = path.join(standaloneDir, 'node_modules/@prisma/client');
if (fs.existsSync(prismaClientSrc)) {
fs.mkdirSync(path.dirname(prismaClientDest), { recursive: true });
fs.cpSync(prismaClientSrc, prismaClientDest, { recursive: true });
console.log('✓ @prisma/client copied to standalone output');
} else {
console.warn('⚠ @prisma/client not found, skipping...');
}
console.log('✅ Postbuild script completed!');

View File

@@ -14,8 +14,6 @@ export async function POST(req: Request) {
try { try {
const { data } = await req.json(); const { data } = await req.json();
console.log("data >>", data);
const cekUsername = await prisma.user.findUnique({ const cekUsername = await prisma.user.findUnique({
where: { where: {
username: data.username, username: data.username,
@@ -29,12 +27,12 @@ export async function POST(req: Request) {
}); });
// ✅ Validasi wajib setuju Terms // ✅ Validasi wajib setuju Terms
if (data.termsOfServiceAccepted !== true) { // if (data.termsOfServiceAccepted !== true) {
return NextResponse.json({ // return NextResponse.json({
success: false, // success: false,
message: "You must agree to the Terms of Service", // message: "You must agree to the Terms of Service",
}); // });
} // }
const createUser = await prisma.user.create({ const createUser = await prisma.user.create({
data: { data: {

View File

@@ -28,13 +28,10 @@ export default function Login({ version }: { version: string }) {
const [countryCode, setCountryCode] = useState<string>("62"); // default ke Indonesia const [countryCode, setCountryCode] = useState<string>("62"); // default ke Indonesia
async function onLogin() { async function onLogin() {
console.log("phone >>", phone);
const nomor = phone; const nomor = phone;
if (nomor.length <= 4) return setError(true); if (nomor.length <= 4) return setError(true);
const fixPhone = `${countryCode}${nomor}`; const fixPhone = `${countryCode}${nomor}`;
console.log("fixPhone >>", fixPhone);
try { try {
setLoading(true); setLoading(true);
@@ -46,7 +43,6 @@ export default function Login({ version }: { version: string }) {
router.push("/validasi", { scroll: false }); router.push("/validasi", { scroll: false });
} else { } else {
setLoading(false); setLoading(false);
console.log("respone >>", respone);
ComponentGlobal_NotifikasiPeringatan(respone?.message); ComponentGlobal_NotifikasiPeringatan(respone?.message);
} }
} catch (error) { } catch (error) {
@@ -108,9 +104,6 @@ export default function Login({ version }: { version: string }) {
// Simpan hasil akhir // Simpan hasil akhir
setCountryCode(dialCode); setCountryCode(dialCode);
setPhone(localNumber); setPhone(localNumber);
// console.log("Country Code:", dialCode);
// console.log("Clean Local Number:", localNumber);
}} }}
/> />

View File

@@ -25,15 +25,21 @@ export default function WaitingRoom_View({
const [isLoadingHome, setIsLoadingHome] = useState(false); const [isLoadingHome, setIsLoadingHome] = useState(false);
async function onClickLogout() { async function onClickLogout() {
setLoading(true); try {
const res = await fetch(`/api/auth/logout?id=${userLoginId}`, { setLoading(true);
method: "GET", const res = await fetch(`/api/auth/logout?id=${userLoginId}`, {
}); method: "GET",
});
const result = await res.json(); const result = await res.json();
if (res.status === 200) { if (res.status === 200) {
ComponentGlobal_NotifikasiBerhasil(result.message); ComponentGlobal_NotifikasiBerhasil(result.message);
router.push("/", { scroll: false }); router.push("/", { scroll: false });
}
} catch (error) {
console.error("Error button to home", error);
} finally {
setLoading(false);
} }
} }
@@ -83,7 +89,8 @@ export default function WaitingRoom_View({
</Text> </Text>
<Text fw={"bold"} c={"white"} align="center"> <Text fw={"bold"} c={"white"} align="center">
Harap tunggu, Anda akan menerima pemberitahuan melalui Harap tunggu, Anda akan menerima pemberitahuan melalui
Whatsapp setelah disetujui. Whatsapp setelah disetujui, untuk sementara anda bisa
menunggu pada halaman ini atau keluar.
</Text> </Text>
</Stack> </Stack>
{isAccess && ( {isAccess && (
@@ -110,6 +117,10 @@ export default function WaitingRoom_View({
Home Home
</Button> </Button>
)} )}
<Button color="red" loading={loading} onClick={onClickLogout}>
Keluar
</Button>
</Stack> </Stack>
)} )}
</ComponentGlobal_CardStyles> </ComponentGlobal_CardStyles>

View File

@@ -12,11 +12,21 @@ if (process.env.NODE_ENV === "production") {
prisma = new PrismaClient({ prisma = new PrismaClient({
// Reduce logging in production to improve performance // Reduce logging in production to improve performance
log: ['error', 'warn'], log: ['error', 'warn'],
datasources: {
db: {
url: process.env.DATABASE_URL,
},
},
}); });
} else { } else {
if (!global.prisma) { if (!global.prisma) {
global.prisma = new PrismaClient({ global.prisma = new PrismaClient({
log: ['error', 'warn', 'info', 'query'], // More verbose logging in development log: ['error', 'warn', 'info', 'query'], // More verbose logging in development
datasources: {
db: {
url: process.env.DATABASE_URL,
},
},
}); });
} }
prisma = global.prisma; prisma = global.prisma;

View File

@@ -65,7 +65,7 @@ export const middleware = async (req: NextRequest) => {
const { pathname } = req.nextUrl; const { pathname } = req.nextUrl;
const apiBaseUrl = new URL(req.url).origin || process.env.NEXT_PUBLIC_API_URL; const apiBaseUrl = process.env.NEXT_PUBLIC_API_URL || new URL(req.url).origin;
// Removed excessive logging that was causing high CPU usage // Removed excessive logging that was causing high CPU usage
// const dbUrl = process.env.DATABASE_URL; // const dbUrl = process.env.DATABASE_URL;
// console.log("DATABASE_URL >>", dbUrl); // console.log("DATABASE_URL >>", dbUrl);

4
types/env.d.ts vendored
View File

@@ -11,5 +11,9 @@ declare namespace NodeJS {
NEXT_PUBLIC_BASE_SESSION_KEY?: string; NEXT_PUBLIC_BASE_SESSION_KEY?: string;
RESEND_APIKEY?: string; RESEND_APIKEY?: string;
WA_SERVER_TOKEN?: string; WA_SERVER_TOKEN?: string;
FIREBASE_ADMIN_PRIVATE_KEY?: string;
FIREBASE_ADMIN_CLIENT_EMAIL?: string;
FIREBASE_ADMIN_PROJECT_ID?: string;
NEXT_PUBLIC_API_URL?: string;
} }
} }