init: new project

This commit is contained in:
irul 2025-05-08 08:50:46 +07:00
commit 76acef9843
12 changed files with 3623 additions and 0 deletions

12
.editorconfig Normal file
View file

@ -0,0 +1,12 @@
# EditorConfig is awesome: https://EditorConfig.org
# top-most EditorConfig file
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = false
insert_final_newline = false

136
.gitignore vendored Normal file
View file

@ -0,0 +1,136 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
*.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Snowpack dependency directory (https://snowpack.dev/)
web_modules/
# TypeScript cache
*.tsbuildinfo
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional stylelint cache
.stylelintcache
# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local
# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache
# Next.js build output
.next
out
# Nuxt.js build / generate output
.nuxt
dist
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
# vuepress build output
.vuepress/dist
# vuepress v2.x temp and cache directory
.temp
.cache
# vitepress build output
**/.vitepress/dist
# vitepress cache directory
**/.vitepress/cache
# Docusaurus cache and generated files
.docusaurus
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port
# Stores VSCode versions used for testing VSCode extensions
.vscode-test
# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*

11
index.html Normal file
View file

@ -0,0 +1,11 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>

3271
package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

19
package.json Normal file
View file

@ -0,0 +1,19 @@
{
"name": "dom-demo",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"start": "serve --listen 443 --ssl-cert=ssl/koda.cer --ssl-key=ssl/koda.key",
"dev": "live-server . --port=443 --https=ssl/index.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"description": "",
"devDependencies": {
"live-server": "^1.2.2"
},
"dependencies": {
"serve": "^14.2.4"
}
}

10
ssl/config.cnf Normal file
View file

@ -0,0 +1,10 @@
[req]
default_bits = 2048
distinguished_name = req_distinguished_name
prompt = no
[req_distinguished_name]
countryName = ID
stateOrProvinceName = Jawa Barat
localityName = Depok
organizationName = KODACADEMY
commonName = KODACADEMY

7
ssl/index.js Normal file
View file

@ -0,0 +1,7 @@
const fs = require('fs');
const path = require('path');
module.exports = {
cert: fs.readFileSync(path.join(__dirname, 'koda.cer')),
key: fs.readFileSync(path.join(__dirname, 'koda.key'))
};

27
ssl/koda.cer Normal file
View file

@ -0,0 +1,27 @@
-----BEGIN CERTIFICATE-----
MIIEqTCCApGgAwIBAgIUCnRvnvaFPGtnPrtP+KSX+MZOA8kwDQYJKoZIhvcNAQEL
BQAwXDELMAkGA1UEBhMCSUQxEzARBgNVBAgMCkphd2EgQmFyYXQxDjAMBgNVBAcM
BURlcG9rMRMwEQYDVQQKDApLT0RBQ0FERU1ZMRMwEQYDVQQDDApLT0RBQ0FERU1Z
MB4XDTI1MDUwODAxMTcwMFoXDTI2MDUwODAxMTcwMFowXDELMAkGA1UEBhMCSUQx
EzARBgNVBAgMCkphd2EgQmFyYXQxDjAMBgNVBAcMBURlcG9rMRMwEQYDVQQKDApL
T0RBQ0FERU1ZMRMwEQYDVQQDDAoqLmlydWwuZGV2MIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEAjBAoHvXk28JDTxbEaQ3HfY6WGSuLu4Q9seWiu0QeZ7N6
JppJjrHa2MTZB00a7s2/h4aSpmySqODXtbsQZax+ZI9D2sI6/WHEnIqhMJ7c40c2
mE9BFAMD9ns9bAVnoWAnwmreJULImeXAfpuvxjM/UqJMTNxlJ6Z+i76dy3T+O3gg
fuhKgoZEs5LtekysYsgsHZKvMaUab5jif9QUW676mJTam2YWVjY+R588yojtRiza
wFBCDz54+3nWFqWBZtg587HUD1sVq3xHc+ISXr+YwHzfRUsjShSMrLmwYyCbqsyn
1XqH7oNyr5Njr2Xq/16+8kpGydTrTOtByJKsxieylwIDAQABo2MwYTAfBgNVHREE
GDAWgghpcnVsLmRldoIKKi5pcnVsLmRldjAdBgNVHQ4EFgQUEuxcdNUECUJOZDga
3w3M/QSi3fUwHwYDVR0jBBgwFoAUkFMz4BujARnNixGFv3SxyETFKVYwDQYJKoZI
hvcNAQELBQADggIBAKWziCR0K4hFd9POGM+NILuJElA0EuzaNDbvwUQ/Ffx/scEK
z+LL76aeAzfPs7N5DpaOvgZGrGoSqvKGk5LYON1TmMajyXOqEA+qo2SAppQkmI0G
pS4n0SeN/ghw0O9qPhxre/yj0mPi+6BXkWZpy7Qs4AWpZ8MIJG+G14hshrOlih+a
/rIxpTP6ZmrtUx5MTEPH8Rvc8SEl9MsoMBZdJ9kz9qU5+p+rntAYjgCh4ABBGLtd
o+W0+4RwbtNk0YP1ydN61gqF4PgTMrUBm8QeCjX61fyiffdWK4Jgi5ZzcVXR98BH
zuk8mK5GwGH06kly9bRCP+r0fzoHEi44DUNITQ9jtr745+tNxNfc+bNdrYFoh4xX
quyEx5L0r+5tguLTfLWsTK10a+2ATXZd3NRBwD2BFjqB7VviV2IB1PKOcqgmNEDh
UinA2oYbU1H+fuEpgrnxMkxOJhUkQN1gmjvWtpDsoc0t2PZ29/X/9C+1fcKyUAW2
pgKVqr6GaI7ektW7BmQwEhH2U4M+5HbS/2PqzxoHV+L7dq5zjDVqW1xaMsGsTsGI
xqR2Q7Cki6tBkUkVk4NT3B/g3RXDThVndj/NUfRZjPrbm3gmXSMJr3UvHVXvvDnm
1vByo1Axq91PWv20XrfR3po1Nj8poFikZOc3tec2eg75hNUc70kDsejMram6
-----END CERTIFICATE-----

28
ssl/koda.key Normal file
View file

@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCMECge9eTbwkNP
FsRpDcd9jpYZK4u7hD2x5aK7RB5ns3ommkmOsdrYxNkHTRruzb+HhpKmbJKo4Ne1
uxBlrH5kj0Pawjr9YcSciqEwntzjRzaYT0EUAwP2ez1sBWehYCfCat4lQsiZ5cB+
m6/GMz9SokxM3GUnpn6Lvp3LdP47eCB+6EqChkSzku16TKxiyCwdkq8xpRpvmOJ/
1BRbrvqYlNqbZhZWNj5HnzzKiO1GLNrAUEIPPnj7edYWpYFm2DnzsdQPWxWrfEdz
4hJev5jAfN9FSyNKFIysubBjIJuqzKfVeofug3Kvk2OvZer/Xr7ySkbJ1OtM60HI
kqzGJ7KXAgMBAAECggEALdB3HzF1i8CufadH1ckxEMvcIx2QVmT6PT+NDE5K18bo
VMow92EL4c35456ACc75MF5/h7qJ+n2ZcZNf2LIkocYO/vZ7jzg0tLPP5/R+8kTw
AcAi3GXkHPLQ842NCUdHmhuU0IFY1qZFYeSRCXbn5qK57IZG/EJEsHdIbC23n0G/
Ej2AR2dpIbfoD2srp3Qkmnkp66ED6rfIXv1Sc/d81yGY3PCBU6dEnrhxyuyk6PTj
kWg1Uqi3KtSv3DUsNmAhrklnpDAm0beE6QNPJm4zgAF92khLpHocLlLoxKWP8Ka8
KhTgiYtusg+ght8Zd17yTLtKmzXdpTPY9IJR+Ed0iQKBgQDAe/WKoGu+9BmagZqI
q9Kh873V33fZsQxT7JP4uDaT9OxGgUD2Z30H+fYkQpQIi9v+KRhPaSOeqIluxmXs
LDVGsNExnKI4KddHdHFtAC6EZswUtWxK8jHV/2OrRNzyehA8p921ad1/gky+aiVk
p5DqGbvyNd1Ub+shXK+coeihKwKBgQC6R/Etz2f7zgHAdqgw5CNWIwb9ENfQRB+i
F1IA8d675camAjiKCPb/IbB+ZETPpJ6lOWSmXXkvPJ8L702V+Y+FHY7MDw6Sm6Ne
TyNbCKPaZLys2mL40PTMPTY3qXS5M7akFXcmZL1acfNLqfmfC5jutEHcppdKflrA
m1RBWOfGRQKBgQCaWw2V5H1i/QcHMwWEsh1QSFEkkHbg+KzFJEOpQbhqwA81nvNE
ZcsLOXUcsNNbYyTA1Z2sGMk6sza6wZj8Yps6nBK18UDZPxxnLcbDvVCQVosz1CUK
mNxEGvCHaMqyHBanPYp6r3Gzjf8S97YS2JlKUea5Hl7mFnX9JAGj3ubZTwKBgGsQ
XELrGSW1knYu/J4VEWY5fZPHsXJnJRNBegVG/rBZ8SGK1zomyud6UnliYdZCFFh8
MygXQ0Zt/i+a26neJKnqgh8wbDzBLVVQAM8amSo1ieeDIS1G09vrNpUpVQf4+/k0
ySWM8vPf2GjdibXqsXxIqC4MpZnQI5Ld88AXPCdNAoGAEsZZMkGfMXz5HNOhmAWa
Wl4Lqbebh2rTCs8G9FunkjL4msJinCPGAltP25CI2j9FPFaO6T7sc1jjfDb45IxS
pcSOZigaBK38I/Y2lKn309ev6bXKcUcQVoJZpn6yHnKKX2tMSXVtaDs6w5Q6OfjX
YGsHK2b2PrXgkSxebEhdTEA=
-----END PRIVATE KEY-----

31
ssl/rootCA.crt Normal file
View file

@ -0,0 +1,31 @@
-----BEGIN CERTIFICATE-----
MIIFZzCCA0+gAwIBAgIUaoH6JO4SdKguTErjiYVyLD3vAR8wDQYJKoZIhvcNAQEL
BQAwXDELMAkGA1UEBhMCSUQxEzARBgNVBAgMCkphd2EgQmFyYXQxDjAMBgNVBAcM
BURlcG9rMRMwEQYDVQQKDApLT0RBQ0FERU1ZMRMwEQYDVQQDDApLT0RBQ0FERU1Z
MB4XDTI1MDUwODAxMTY1MVoXDTM1MDUwNjAxMTY1MVowXDELMAkGA1UEBhMCSUQx
EzARBgNVBAgMCkphd2EgQmFyYXQxDjAMBgNVBAcMBURlcG9rMRMwEQYDVQQKDApL
T0RBQ0FERU1ZMRMwEQYDVQQDDApLT0RBQ0FERU1ZMIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEAy0gQtnvB725Zl5dTcFyKTv2LLPNniayltSqA5y2Qi3FC
RacG5r9TwXb1GGXgvqhcbZpHt21HtC2sUBETn3sHDlT/+azRbo6FF73D6vs6pnQH
snfWAYDSJf0Myr+VBZo1y6Jgyv5hpTZ5PCjoMVF3ZLwgXImJ53OsXi18z3L+Tnug
abou/4/1nBZZunRKbGP8j9zDr9dHCnvLMe/NER9/d1w4tgale1618k8kFzdEq82T
sOiMzYbHjVqaKMC5ZjqmDVdzhMJZE/yzMiZ2Fqe8hRNyx/MSiCGt2+7mKktw6Y6t
fH/PRGoid9vhzv/SvlKutHcPxcFQwoZfMrOJKxRCx5c/CvnK0hARnNAiK0/5KSbd
wW8ovkjfFuRTyBvwcJoEuqGKNgBpi/qNp6dgOWjo48Vphz5HSgmRFQFRjwU5uvus
jTXRUHLWtGAMSrR5qR4x224io6HzkXRg1YYxY1BAcEETKrjoz4ZpIAB3k5ZJ+h6p
LzIn7T1K/d6Tt19pHzhgmIUGUiTIkG6UslvSlEhsFl7eBXbKLqihY9kD79RgH+52
veaNNe0zC+3byPlvoEHonmN3u43Pv1Dw+nHcMX2GwA6LT+lJqs4MKMJPRocXYlY4
vyuA0jRtwG8QIEPoTfAo8gPM3lJeMT9DNU6pbKbAg2iATGp1hp5OHPyr+micSQEC
AwEAAaMhMB8wHQYDVR0OBBYEFJBTM+AbowEZzYsRhb90schExSlWMA0GCSqGSIb3
DQEBCwUAA4ICAQDJwgSF5quye4yweZa3qtjtBe0Tq2qCd1Iw/pcsTG75TVdBuh0I
xz+VhaAGGR04UGVOV5DT+XfR1i38I0p0V/1lv+Q6+e1xn28i1C0+ZvV951868zRK
Ui8JLAuJx8E5CsATzhk6heuLFvrB6TkPg8qKhW+qWPyfbZzi7THXXm6jkDO/rXHi
v2VTKGIyt3YcSZpfXbG7jDgJ9nISxJnN1SajxD6W6EMfZNg+TtiwnsxYLUlq1nqu
+KP9XD+sTDjXJBvkVmnDH/4HPpkWkgCW3n+ufSUO3nayxvUqen1iMWnuRZpdX0lI
6UBGmB1c8T1o2brbpUOV4M0OWH9jVUSEV0LfL1MEHT2//SQWZD2ud105Pd6/NN8C
/4f6uQKWKAUMK7Y9q95dDanRPLVPFjHwQECLIezgye0pq+la8kQrwoYk21wx6I+Z
N+TDYXdHKJr9GmbYhKJCH3e7tkRSAn7Pz+TRxrqzxpF+kcuUe5l7flyrPSYlToC1
xRw/bJWltAhtV/SZc8RsuG5vCmpISkeYzP6/6JN1l30EDCDh9husAezFIy3uejwr
T4+uoh3/BULmxIStCAZXJQd1zoN26Vw3yUOUjzLmNPQ1O2Atnm0fEA2EL/M21IET
E5eMgtBjQBvUmEFpwM4M7Cfwf0Frm5rR6mLsiQorsZR2DDNtprS9DSMYuw==
-----END CERTIFICATE-----

52
ssl/rootCA.key Normal file
View file

@ -0,0 +1,52 @@
-----BEGIN PRIVATE KEY-----
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
3jmTrJUMhVDMlo3OmJZnUdRUvUgwUhY=
-----END PRIVATE KEY-----

19
ssl/san.cnf Normal file
View file

@ -0,0 +1,19 @@
[req]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
countryName = ID
stateOrProvinceName = Jawa Barat
localityName = Depok
organizationName = KODACADEMY
commonName = *.irul.dev
[req_ext]
subjectAltName = @alt_names
[v3_req]
subjectAltName = @alt_names
[alt_names]
DNS.1 = irul.dev
DNS.2 = *.irul.dev