diff --git a/.appveyor.yml b/.appveyor.yml
index 37f85af..a25b3ac 100644
--- a/.appveyor.yml
+++ b/.appveyor.yml
@@ -41,7 +41,7 @@ deploy:
notifications:
- provider: Email
to:
- - abuse@catswords.net
+ - gnh1201@catswords.re.kr
subject: 'Build #{{build}} {{status}}'
on_build_success: false
on_build_failure: true
diff --git a/README.md b/README.md
index 78b7700..e3070c0 100644
--- a/README.md
+++ b/README.md
@@ -90,7 +90,7 @@ function say() {
exports.say = say;
exports.VERSIONINFO = "SayHello (sayhello.js) version 0.1";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
```
diff --git a/app.hta b/app.hta
index 1705f60..11fc4c8 100644
--- a/app.hta
+++ b/app.hta
@@ -51,7 +51,7 @@
-
+
diff --git a/app.js b/app.js
index e660882..c28e9d9 100644
--- a/app.js
+++ b/app.js
@@ -1,6 +1,6 @@
// app.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
// SPDX-License-Identifier: GPL-3.0-or-later
-// SPDX-FileCopyrightText: 2025 Catswords OSS and WelsonJS Contributors
// https://github.com/gnh1201/welsonjs
// Bootstrap code for running a javascript app in windows. Run as:
@@ -693,7 +693,7 @@ function __main__() {
console.log(" WelsonJS - Build a Windows app on the Windows built-in JavaScript engine");
console.log(" C-2021-000237 (cros.or.kr), 10.5281/zenodo.11382385 (doi.org), 2023-A0562 (oss.kr), Codename Macadamia");
console.log(" This software is distributed as open source under the GPL 3.0 or MS-RL licenses.");
- console.log(" Please support this project: https://gnh1201.link");
+ console.log(" Please support this project: https://github.com/sponsors/gnh1201");
console.log(" Source code available: https://github.com/gnh1201/welsonjs");
console.log("");
diff --git a/app/assets/ps1/WelsonJS-WebRequest.ps1 b/app/assets/ps1/WelsonJS-WebRequest.ps1
index ec5fa51..52b8d2f 100644
--- a/app/assets/ps1/WelsonJS-WebRequest.ps1
+++ b/app/assets/ps1/WelsonJS-WebRequest.ps1
@@ -1,5 +1,6 @@
# WelsonJS-WebRequest.ps1
-# Namhyeon Go
+# Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+# SPDX-License-Identifier: GPL-3.0-or-later
# https://github.com/gnh1201/welsonjs
param(
[string]$url,
diff --git a/app/index.js b/app/index.js
index aa42cf4..c223308 100644
--- a/app/index.js
+++ b/app/index.js
@@ -1,6 +1,10 @@
-// index.js - The entrypoint on WelsonJS GUI envionment
-// Namhyeon Go
+// index.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
+//
+// The entrypoint on WelsonJS GUI envionment
+//
var FILE = require("lib/file");
var SHELL = require("lib/shell");
var Browser = require("lib/browser");
diff --git a/bgloader.js b/bgloader.js
index 690557f..9af7ea0 100644
--- a/bgloader.js
+++ b/bgloader.js
@@ -1,3 +1,8 @@
+// bgloader.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
if (!Array.prototype.map) {
Array.prototype.map = function(fn) {
var rv = [];
diff --git a/bootstrap.js b/bootstrap.js
index 6ba5ca5..2df570e 100644
--- a/bootstrap.js
+++ b/bootstrap.js
@@ -1,9 +1,8 @@
-//////////////////////////////////////////////////////////////////////////////////
-//
-// bootstrap.js
-//
-/////////////////////////////////////////////////////////////////////////////////
-
+// bootstrap.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
var STD = require("lib/std");
var PS = require("lib/powershell");
var REG = require("lib/registry");
diff --git a/data/test-msoffice.json b/data/test-msoffice.json
index 88c0c5a..a6aa57c 100644
--- a/data/test-msoffice.json
+++ b/data/test-msoffice.json
@@ -5,7 +5,7 @@
"welsonjs": "0.2.7"
},
"authors": [
- "Namhyeon Go "
+ "Namhyeon Go "
],
"references": [
"https://github.com/gnh1201/welsonjs",
diff --git a/data/test-oss-korea-2023.json b/data/test-oss-korea-2023.json
index f0c1b81..805e1cc 100644
--- a/data/test-oss-korea-2023.json
+++ b/data/test-oss-korea-2023.json
@@ -5,7 +5,7 @@
"welsonjs": "0.2.7"
},
"authors": [
- "Namhyeon Go "
+ "Namhyeon Go "
],
"references": [
"https://github.com/gnh1201/welsonjs",
diff --git a/defaultService.example.js b/defaultService.example.js
index 5912e69..c8794fa 100644
--- a/defaultService.example.js
+++ b/defaultService.example.js
@@ -1,5 +1,8 @@
// defaultService.example.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
+//
var SYS = require("lib/system");
// Examples of class (prototype) and instance referencing .env values
diff --git a/encryptor.js b/encryptor.js
index 63305f8..4a5ae16 100644
--- a/encryptor.js
+++ b/encryptor.js
@@ -1,8 +1,10 @@
// encryptor.js
-// HIGHT(ISO/IEC 18033-3) encryption and decryption tool for WelsonJS
-// Namhyeon Go
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
-
+//
+// HIGHT(ISO/IEC 18033-3) encryption and decryption tool for WelsonJS framework
+//
var FILE = require("lib/file");
var Toolkit = require("lib/toolkit");
diff --git a/examples/certchecker.js b/examples/certchecker.js
index 9d05c83..7d3d975 100644
--- a/examples/certchecker.js
+++ b/examples/certchecker.js
@@ -1,6 +1,8 @@
// certchecker.js
-// Namhyeon Go
-
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
var FILE = require("lib/file");
var HTTP = require("lib/http");
var RAND = require("lib/rand");
diff --git a/examples/virustotal.js b/examples/virustotal.js
index 6b5d53b..6f2538c 100644
--- a/examples/virustotal.js
+++ b/examples/virustotal.js
@@ -1,6 +1,8 @@
// virustotal.js
-// Namhyeon Go
-
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
var FILE = require("lib/file");
var HTTP = require("lib/http");
var Chrome = require("lib/chrome");
diff --git a/lib/adb.js b/lib/adb.js
index 6c8845a..57b4d75 100644
--- a/lib/adb.js
+++ b/lib/adb.js
@@ -1,6 +1,10 @@
-// Android Debug Bridge API
-// Namhyeon Go (Catswords Research)
+// adb.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
+//
+// Android Debug Bridge API
+//
var SHELL = require("lib/shell");
var SYS = require("lib/system");
@@ -130,6 +134,6 @@ exports.createEmulator = function(binPath) {
};
exports.VERSIONINFO = "Android Debug Bridge Interface (adb.js) version 0.2.2";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/anthropic.js b/lib/anthropic.js
index d518100..2a4bc48 100644
--- a/lib/anthropic.js
+++ b/lib/anthropic.js
@@ -1,11 +1,12 @@
// anthropic.js
-// Namhyeon Go
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
//
-// ***SECURITY NOTICE***
-// Anthropic/Claude requires an internet connection, and data may be transmitted externally. Users must adhere to the terms of use and privacy policy.
-// - Privacy Policy: https://www.anthropic.com/legal/privacy
-//
+// SECURITY NOTICE
+// Anthropic requires an internet connection, and data may be transmitted externally. Please check the terms of use and privacy policy.
+// https://www.anthropic.com/legal/privacy
+//
var FILE = require("lib/file");
var HTTP = require("lib/http");
var CRED = require("lib/credentials");
@@ -55,6 +56,6 @@ function chat(content) {
exports.chat = chat;
exports.VERSIONINFO = "Anthropic (Claude) interface (anthropic.js) version 0.1.4";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/archive.js b/lib/archive.js
index 5e36069..322994b 100644
--- a/lib/archive.js
+++ b/lib/archive.js
@@ -1,7 +1,9 @@
// archive.js
-// File archiver library for WelsonJS framework
-// Namhyeon Go (Catswords Research)
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
+//
+// File archiver library for WelsonJS framework
//
var SHELL = require("lib/shell");
var FILE = require("lib/file");
@@ -119,6 +121,6 @@ exports.create = function(engine) {
};
exports.VERSIONINFO = "File archiver library (archive.js) version 0.1-dev";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/autohotkey.js b/lib/autohotkey.js
index a5b6ac9..7e9605d 100644
--- a/lib/autohotkey.js
+++ b/lib/autohotkey.js
@@ -1,7 +1,10 @@
-////////////////////////////////////////////////////////////////////////
+// autohotkey.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
// AutoHotKey API
-///////////////////////////////////////////////////////////////////////
-
+//
var SHELL = require("lib/shell");
exports.VERSIONINFO = "AutoHotKey (autohotkey.js) version 0.1";
diff --git a/lib/autoit.js b/lib/autoit.js
index b384fe3..40ae23b 100644
--- a/lib/autoit.js
+++ b/lib/autoit.js
@@ -1,7 +1,10 @@
// autoit.js
-// AutoIt (AutoIt3, AutoItX) API interface for WelsonJS framework
-// Namhyeon Go (Catswords Research)
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
+//
+// AutoIt (AutoIt3, AutoItX) API interface for WelsonJS framework
+//
function AutoItObject() {
this._interface = null;
diff --git a/lib/aviation.js b/lib/aviation.js
index ada4ab8..18c00f9 100644
--- a/lib/aviation.js
+++ b/lib/aviation.js
@@ -1,11 +1,12 @@
// aviation.js
-// Namhyeon Go
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
//
-// ***SECURITY NOTICE***
-// Aviation Data Integration requires an internet connection, and data may be transmitted externally. Users must adhere to the terms of use and privacy policy.
-// - AviationStack website: https://aviationstack.com/?utm_source=FirstPromoter&utm_medium=Affiliate&fpr=namhyeon71
-// - SearchApi website: https://www.searchapi.io/?via=namhyeon
+// SECURITY NOTICE
+// AviationStack, SearchApi requires an internet connection, and data may be transmitted externally. Please check the terms of use and privacy policy.
+// https://aviationstack.com/?utm_source=FirstPromoter&utm_medium=Affiliate&fpr=namhyeon71
+// https://www.searchapi.io/?via=namhyeon
//
var HTTP = require("lib/http");
var CRED = require("lib/credentials");
@@ -114,6 +115,6 @@ exports.getRoundTrip = getRoundTrip;
exports.getOneWay = getOneWay;
exports.VERSIONINFO = "Aviation Data Integration (aviation.js) version 0.1.3";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/base64.js b/lib/base64.js
index fd98f16..6940dfa 100644
--- a/lib/base64.js
+++ b/lib/base64.js
@@ -1,7 +1,10 @@
-////////////////////////////////////////////////////////////////////////
+// base64.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
// Base64 API
-////////////////////////////////////////////////////////////////////////
-
+//
//var XML = require("lib/xml");
var PS = require("lib/powershell");
diff --git a/lib/browser.js b/lib/browser.js
index 99646d0..755501e 100644
--- a/lib/browser.js
+++ b/lib/browser.js
@@ -1,7 +1,10 @@
// browser.js
-// Namhyeon Go
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
-
+//
+// Browser Compatibility Layer
+//
// only less than IE 9
if (!window.addEventListener) {
global.Element = function() {};
@@ -285,6 +288,6 @@ exports.reload = reload;
exports.close = close;
exports.VERSIONINFO = "Browser Compatibility Layer (browser.js) version 0.1.7";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/catproxy.js b/lib/catproxy.js
index 45cb87c..c8c185d 100644
--- a/lib/catproxy.js
+++ b/lib/catproxy.js
@@ -1,6 +1,10 @@
// catproxy.js
-// Caterpillar Proxy Integration for WelsonJS framework
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
+//
+// Caterpillar Proxy Integration for WelsonJS framework
+//
var JSONRPC2 = require("lib/jsonrpc2");
function CatProxyClient(url) {
@@ -70,6 +74,6 @@ exports.create = create;
exports.CatProxyClient = CatProxyClient;
exports.VERSIONINFO = "Caterpillar Proxy Integration (caterpillar.js) version 0.1.5";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/chatgpt.js b/lib/chatgpt.js
index 4950859..2de663a 100644
--- a/lib/chatgpt.js
+++ b/lib/chatgpt.js
@@ -1,11 +1,12 @@
// chatgpt.js
-// Namhyeon Go
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
//
-// ***SECURITY NOTICE***
-// ChatGPT requires an internet connection, and data may be transmitted externally. Users must adhere to the terms of use and privacy policy.
-// - Privacy Policy: https://openai.com/policies/row-privacy-policy/
-//
+// SECURITY NOTICE
+// ChatGPT requires an internet connection, and data may be transmitted externally. Please check the terms of use and privacy policy.
+// https://openai.com/policies/row-privacy-policy/
+//
var FILE = require("lib/file");
var HTTP = require("lib/http");
var CRED = require("lib/credentials");
@@ -53,6 +54,6 @@ function chat(content) {
exports.chat = chat;
exports.VERSIONINFO = "OpenAI (ChatGPT) interface version 0.1.2";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/chrome.js b/lib/chrome.js
index d44beba..65ad22b 100644
--- a/lib/chrome.js
+++ b/lib/chrome.js
@@ -1,8 +1,10 @@
// chrome.js
-// Chrome Web Browser Debugging Interface for WelsonJS framework
-// Namhyeon Go
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
//
+// Chrome Web Browser Debugging Interface for WelsonJS framework
+//
var STD = require("lib/std");
var RAND = require("lib/rand");
var SHELL = require("lib/shell");
diff --git a/lib/cloudflare.js b/lib/cloudflare.js
index 478b0d9..faba822 100644
--- a/lib/cloudflare.js
+++ b/lib/cloudflare.js
@@ -1,11 +1,14 @@
-////////////////////////////////////////////////////////////////////////
+// cloudflare.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
// Cloudflare API
-////////////////////////////////////////////////////////////////////////
-
+//
var SHELL = require("lib/shell");
var SYS = require("lib/system");
-exports.VERSIONINFO = "Cloudflare Lib (cloudflare.js) version 0.1";
+exports.VERSIONINFO = "Cloudflare(d) Integration (cloudflare.js) version 0.1";
exports.global = global;
exports.require = global.require;
diff --git a/lib/config.js b/lib/config.js
index 8b33a3d..6b727d1 100644
--- a/lib/config.js
+++ b/lib/config.js
@@ -1,6 +1,8 @@
-////////////////////////////////////////////////////////////////////////
-// Config API
-////////////////////////////////////////////////////////////////////////
+// config.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
var XML = require("lib/xml");
exports.getValue = function(key) {
diff --git a/lib/cookie.js b/lib/cookie.js
index ff3f4e8..ee7ad9e 100644
--- a/lib/cookie.js
+++ b/lib/cookie.js
@@ -1,3 +1,8 @@
+// cookie.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
var CookieObject = function() {
this.expireDays = 90;
diff --git a/lib/coupang.js b/lib/coupang.js
index a9d8f11..10b5252 100644
--- a/lib/coupang.js
+++ b/lib/coupang.js
@@ -1,8 +1,9 @@
// coupang.js
-// Namhyeon Go
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
//
-// ***SECURITY NOTICE***
+// SECURITY NOTICE
// Due to potential security issues, the Public API URL is not provided. If you need to request access, please refer to the project's contact information.
// You can download the server-side script that implements this functionality from the link below:
// https://github.com/gnh1201/caterpillar
@@ -27,6 +28,6 @@ function search(s) {
exports.search = search;
exports.VERSIONINFO = "Coupang Product Search Client (coupang.js) version 0.1.1";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/credentials.js b/lib/credentials.js
index b653718..568d607 100644
--- a/lib/credentials.js
+++ b/lib/credentials.js
@@ -1,5 +1,6 @@
// credentials.js
-// Namhyeon Go
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
//
var FILE = require("lib/file");
@@ -64,6 +65,6 @@ exports.push = push;
exports.get = get;
exports.VERSIONINFO = "Credential store (credentials.js) version 0.1";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/db.js b/lib/db.js
index 2490743..5debf6e 100644
--- a/lib/db.js
+++ b/lib/db.js
@@ -1,7 +1,10 @@
-////////////////////////////////////////////////////////////////////////
+// db.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
// Example Database API
-////////////////////////////////////////////////////////////////////////
-
+//
var LIB = require("lib/std");
exports.VERSIONINFO = "Database Lib (db.js) version 1.0";
diff --git a/lib/extramath.js b/lib/extramath.js
index cd33a66..8076ff7 100644
--- a/lib/extramath.js
+++ b/lib/extramath.js
@@ -1,8 +1,10 @@
// extramath.js
-// Namhyeon Go
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
-// https://app.rdbl.io/T0AB411UHDW9/S0VLKP4HKVGC/P0TL9IQZOUFT
-
+//
+// Documentation: https://app.rdbl.io/T0AB411UHDW9/S0VLKP4HKVGC/P0TL9IQZOUFT
+//
// DTM(Document-term Matrix): https://en.wikipedia.org/wiki/Document-term_matrix
function DTM() {
this.data = [];
@@ -75,6 +77,6 @@ exports.export_measureSimilarity = export_measureSimilarity;
exports.cartesianProduct = cartesianProduct;
exports.VERSIONINFO = "ExtraMath module (extramath.js) version 0.0.5";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/fakeworker.js b/lib/fakeworker.js
index 1ccd855..af109e7 100644
--- a/lib/fakeworker.js
+++ b/lib/fakeworker.js
@@ -1,3 +1,8 @@
+// fakeworker.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
var BASE64 = require("lib/base64");
function FakeWorker() {
@@ -168,6 +173,6 @@ exports.repeat = function(target, worker, onError) {
};
exports.VERSIONINFO = "FakeWorker module (fakeworker.js) version 0.0.6";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/file.js b/lib/file.js
index 1b9cfd8..a7aa32b 100644
--- a/lib/file.js
+++ b/lib/file.js
@@ -1,10 +1,10 @@
-//////////////////////////////////////////////////////////////////////////////////
-//
-// file.js
-// with the PIPE based IPC (lib/pipe-ipc.js)
-//
-/////////////////////////////////////////////////////////////////////////////////
-
+// file.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
+// FILE IO Library with the PIPE based IPC (lib/pipe-ipc.js)
+//
var STD = require("lib/std");
var PipeIPC = require("lib/pipe-ipc");
@@ -254,6 +254,6 @@ exports.loadEnvFromArgs = loadEnvFromArgs;
exports.CdoCharset = PipeIPC.CdoCharset;
exports.VERSIONINFO = "File IO Library (file.js) version 0.2.13";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/filetypes.js b/lib/filetypes.js
index a953736..e3e8389 100644
--- a/lib/filetypes.js
+++ b/lib/filetypes.js
@@ -1,7 +1,8 @@
-// msoffice.js
-// Namhyeon Go
+// filetypes.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
-
+//
var FILE = require("lib/file");
// https://support.microsoft.com/en-au/office/file-formats-that-are-supported-in-excel-0943ff2c-6014-4e8d-aaea-b83d51d46247
@@ -21,6 +22,6 @@ function getExtensionsByOpenWith(openwith) {
exports.getExtensionsByOpenWith = getExtensionsByOpenWith;
exports.VERSIONINFO = "FileTypes version 0.0.1";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/fsm.js b/lib/fsm.js
index 63a1460..4a07b5e 100644
--- a/lib/fsm.js
+++ b/lib/fsm.js
@@ -1,8 +1,10 @@
// fsm.js
-// FSM(Finite State Machine) library for WelsonJS framework
-// Namhyeon Go
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
-
+//
+// FSM(Finite State Machine) library for WelsonJS framework
+//
// State constructor function
function State(name) {
this.name = name;
@@ -81,6 +83,6 @@ exports.State = State;
exports.FSM = FSM;
exports.VERSIONINFO = "FSM(Finite State Machine) library (fsm.js) version 0.1";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/grok.js b/lib/grok.js
index 8bcc39a..bec7e0b 100644
--- a/lib/grok.js
+++ b/lib/grok.js
@@ -1,11 +1,12 @@
// grok.js
-// Namhyeon Go
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
//
-// ***SECURITY NOTICE***
-// Grok (x.ai) requires an internet connection, and data may be transmitted externally. Users must adhere to the terms of use and privacy policy.
-// - Privacy Policy: https://x.ai/legal/privacy-policy
-//
+// SECURITY NOTICE
+// Grok requires an internet connection, and data may be transmitted externally. Please check the terms of use and privacy policy.
+// https://x.ai/legal/privacy-policy
+//
var FILE = require("lib/file");
var HTTP = require("lib/http");
var CRED = require("lib/credentials");
@@ -48,6 +49,6 @@ function chat(content) {
exports.chat = chat;
exports.VERSIONINFO = "Grok (x.ai) interface version 0.1";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/groq.js b/lib/groq.js
index e6f92bb..1e18f63 100644
--- a/lib/groq.js
+++ b/lib/groq.js
@@ -1,10 +1,11 @@
// groq.js
-// Namhyeon Go
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
//
-// ***SECURITY NOTICE***
-// Groq requires an internet connection, and data may be transmitted externally. Users must adhere to the terms of use and privacy policy.
-// - Privacy Policy: https://groq.com/privacy-policy/
+// SECURITY NOTICE
+// Groq requires an internet connection, and data may be transmitted externally. Please check the terms of use and privacy policy.
+// https://groq.com/privacy-policy/
//
var FILE = require("lib/file");
var HTTP = require("lib/http");
@@ -42,6 +43,6 @@ function chat(content) {
exports.chat = chat;
exports.VERSIONINFO = "Groq (GroqCloud) interface (groq.js) version 0.1.1";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/gtk.js b/lib/gtk.js
index d3ce170..73691bc 100644
--- a/lib/gtk.js
+++ b/lib/gtk.js
@@ -1,12 +1,10 @@
-////////////////////////////////////////////////////////////////////////
-//
-// GTKServer API
-//
-// * Breif: GTK GUI Programming with WSH (Windows Scripting Host)
-// * Author: Go Namhyeon
-// * Project site: https://github.com/gnh1201/welsonjs
-//
-////////////////////////////////////////////////////////////////////////
+// gtk.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
+// GTKServer API - GTK GUI Programming with WSH (Windows Scripting Host)
+//
var SHELL = require("lib/shell");
// set binPath
diff --git a/lib/har.js b/lib/har.js
index d4a841a..5e60b37 100644
--- a/lib/har.js
+++ b/lib/har.js
@@ -1,6 +1,10 @@
// har.js
-// HAR(HTTP Archive) manipulate and replay tools
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
+//
+// HAR(HTTP Archive) manipulate and replay tools
+//
var PipeIPC = require("lib/pipe-ipc");
var FILE = require("lib/file");
var HTTP = require("lib/http");
@@ -106,6 +110,6 @@ var HARObject = function() {
exports.HARObject = HARObject;
exports.VERSIONINFO = "HAR(HTTP Archive) manipulate and replay tools version 0.1.8";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = require;
diff --git a/lib/hosts.js b/lib/hosts.js
index 17e9e35..e6114b5 100644
--- a/lib/hosts.js
+++ b/lib/hosts.js
@@ -1,7 +1,10 @@
-////////////////////////////////////////////////////////////////////////
+// hosts.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
// Hosts API
-////////////////////////////////////////////////////////////////////////
-
+//
var SYS = require("lib/system");
var FILE = require("lib/file");
diff --git a/lib/http.js b/lib/http.js
index 6125a74..bae27b9 100644
--- a/lib/http.js
+++ b/lib/http.js
@@ -1,7 +1,10 @@
// http.js
-// HTTP REST API client for WelsonJS framework
-// Namhyeon Go (Catswords Research)
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
+//
+// HTTP REST API client for WelsonJS framework
+//
var SYS = require("lib/system");
var FILE = require("lib/file");
var SHELL = require("lib/shell");
diff --git a/lib/httpserver.js b/lib/httpserver.js
index 34881a5..a4f0956 100644
--- a/lib/httpserver.js
+++ b/lib/httpserver.js
@@ -1,6 +1,10 @@
-////////////////////////////////////////////////////////////////////////
+// httpserver.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
// HTTPServer API
-///////////////////////////////////////////////////////////////////////
+//
var HTTPServer = {
_this: this, // Avoid conflicts between HTTPServer and Winsock variables
diff --git a/lib/ip-reputation.js b/lib/ip-reputation.js
index 78efe14..e677f1c 100644
--- a/lib/ip-reputation.js
+++ b/lib/ip-reputation.js
@@ -1,10 +1,11 @@
// ip-reputation.js
-// Namhyeon Go
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
//
-// ***SECURITY NOTICE***
-// IP Reputation Checker requires an internet connection, and data may be transmitted externally. Users must adhere to the terms of use and privacy policy.
-// - AbuseIPDB website: https://www.abuseipdb.com/
+// SECURITY NOTICE
+// AbuseIPDB requires an internet connection, and data may be transmitted externally. Please check the terms of use and privacy policy.
+// https://www.abuseipdb.com/
//
var HTTP = require("lib/http");
var APIKEY = require("lib/apikey");
@@ -27,6 +28,6 @@ function check(ip_address) {
exports.check = check;
exports.VERSIONINFO = "IP Reputation Checker (ip-reputation.js) version 0.1";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/jsonrpc2.js b/lib/jsonrpc2.js
index f4d0f3c..2f14f3f 100644
--- a/lib/jsonrpc2.js
+++ b/lib/jsonrpc2.js
@@ -1,8 +1,10 @@
// jsonrpc2.js
-// JSON-RPC 2.0 wrapper for WelsonJS framework
-// Namhyeon Go
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
//
+// JSON-RPC 2.0 wrapper for WelsonJS framework
+//
function JsonRpc2(url) {
this.url = url;
this.userAgent = "php-httpproxy/0.1.5 (Client; WelsonJS)";
@@ -57,6 +59,6 @@ exports.create = create;
exports.DEFAULT_JSONRPC2_URL = DEFAULT_JSONRPC2_URL;
exports.VERSIONINFO = "JSON-RPC 2.0 wrapper (jsonrpc2.js) version 0.1.5";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/kakaotalk.js b/lib/kakaotalk.js
new file mode 100644
index 0000000..b4b74bb
--- /dev/null
+++ b/lib/kakaotalk.js
@@ -0,0 +1,191 @@
+// kakaotalk.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
+// KakaoTalk (Instant Messaging Service in South Korea) automation testing (PoC) library
+//
+var Toolkit = require("lib/toolkit");
+var AutoIt = require("lib/autoit");
+
+function KakaoTalk() {
+ this.lastTemplate = "";
+ this.nextTemplate = "wall.png";
+ this.oAutoIt = AutoIt.create();
+
+ // 사용할 메시지 지정
+ this.message = {
+ start: "ㅎㄱㅎㅈ", // 하트 교환을 요청하는 메시지
+ clipboardPaste: "^v", // 클립보드에 복사된 내용(이미지)를 붙여넣기
+ pushed: "ㄴ" // 하트 번호 인증 (스크린샷 전송) 후 보낼 메시지. **카톡은 답글 모드에선 그림 첨부를 지원하지 않음**
+ };
+ this.setMessage = function(messageType, messageText) {
+ this.message[messageType] = messageText;
+ };
+
+ // 템플릿 제어
+ this.setLastTemplate = function(templateName) {
+ this.lastTemplate = templateName;
+ };
+ this.setNextTemplate = function(templateName) {
+ this.nextTemplate = templateName;
+ };
+
+ // x: 화면 좌표 X, y: 화면 좌표 Y, dx: 화면 좌표 X 보정값, dy: 화면 좌표 Y 보정값
+ this.mouseMove = function(x, y, dx, dy) {
+ this.oAutoIt.mouseMove(x + dx, y + dy);
+ };
+
+ // x: 화면 좌표 X, y: 화면 좌표 Y, dx: 화면 좌표 X 보정값, dy: 화면 좌표 Y 보정값
+ this.mouseClick = function(x, y, dx, dy) {
+ this.mouseMove(x, y, dx, dy);
+ this.oAutoIt.mouseClick("left");
+ };
+
+ this.sendKeys = function(keys) {
+ this.oAutoIt.send(keys);
+ };
+
+ this.check = function(params) {
+ // 메시지 띄우기 (값이 정상적으로 들어오는지 확인용)
+ //Toolkit.alert(JSON.stringify(params));
+
+ // 전달 받은 좌표를 숫자로 변환
+ var x = parseInt(params.position.x);
+ var y = parseInt(params.position.y);
+
+ // 템플릿 이름
+ var templateName = params.fileName;
+
+ // 각 클릭 단계별 처리
+ switch (templateName) {
+ case "wall.png": // 입력창 클릭
+ // 초기 상태에서 들어온 경우
+ if (this.lastTemplate == "") {
+ this.mouseClick(x, y, -32, 32); // 채팅창 클릭
+ sleep(1000); // 1초 기다림
+ this.sendKeys(this.message.start); // 메시지 입력
+ this.setLastTemplate(templateName); // 현재 상태 저장
+ this.setNextTemplate("button_message_send.png"); // 다음 상태 설정
+ }
+
+ // 하트를 누르고 프로필 창 닫기까지 완료한 경우
+ if (this.lastTemplate == "binary_button_close_profile_blured.png") {
+ this.mouseClick(x, y, -32, 32); // 채팅창 클릭
+ sleep(1000); // 1초 기다림
+
+ this.sendKeys(this.message.clipboardPaste); // 붙여넣기 명령
+ this.setLastTemplate(templateName); // 현재 상태 저장
+ this.setNextTemplate("button_clipboard_send.png"); // 다음 상태 설정
+ }
+
+ break;
+
+ case "wall_reply_ready.png":
+ // 하트 누른거 인증
+ if (this.lastTemplate == "button_reply.png") {
+ this.mouseClick(x, y, -32, 56 + 32); // 채팅창 클릭
+ sleep(1000); // 1초 기다림
+ this.sendKeys(this.message.pushed); // "눌렀다"는 메시지 입력
+ this.setLastTemplate(templateName); // 현재 상태 저장
+ this.setNextTemplate("button_message_send.png"); // 다음 상태 설정
+ }
+ break;
+
+ // 클립보드 전송
+ case "button_clipboard_send.png":
+ if (this.lastTemplate == "wall.png") {
+ this.mouseClick(x, y, 0, 0); // 클립보드 전송 버튼 클릭
+ sleep(1000); // 1초 기다림
+ this.setLastTemplate(templateName); // 현재 상태 저장
+ this.setNextTemplate("mention_reply.png:-1"); // 기억해두었던 "나에게 답장" 위치 다시 찾기
+ }
+ break;
+
+ case "button_message_send.png": // 메시지 전송 버튼 찾았을 때
+ // 이전 작업이 신규 메시지 전송일 때
+ if (this.lastTemplate == "wall.png") {
+ this.mouseClick(x, y, 0, 0); // 메시지 전송 버튼 클릭
+ sleep(1000); // 1초 기다림
+ this.setLastTemplate(templateName); // 현재 상태 저장
+ this.setNextTemplate("mention_reply.png"); // 다음 상태 설정
+ }
+
+ // 이전 작업이 답글 전송일 때
+ if (this.lastTemplate == "wall_reply_ready.png") {
+ this.mouseClick(x, y, 0, 0); // 메시지 전송 버튼 클릭
+ sleep(1000); // 1초 기다림
+ this.setLastTemplate(templateName); // 현재 상태 저장
+
+ /**** 회기점 (여기서는 "ㅎㄱㅎㅈ" 메시지를 이미 보낸 상태이므로, 다시 메시지를 보내지 않고 다른 응답을 기다림.) ****/
+ this.setNextTemplate("mention_reply.png"); // 다음 상태 설정
+ }
+ break;
+
+ case "mention_reply.png": // 답글이 도착했을 때
+ // 이전 작업이 메시지 전송 버튼 클릭이었을 때에만 진행
+ if (this.lastTemplate == "button_message_send.png") {
+ this.mouseClick(x, y, -40, -9); // 아바타 클릭
+ sleep(1000); // 1초 기다림
+ this.setLastTemplate(templateName); // 현재 상태 저장
+ this.setNextTemplate("binary_button_view_profile.png"); // 다음 상태 설정
+ }
+
+ // 하트 찍기를 완료하고 "나에게 답장" 메시지를 다시 찾은 경우 진행
+ if (this.lastTemplate == "button_clipboard_send.png") {
+ this.mouseMove(x, y, 100, 30); // 해당 메시지로 커서 이동
+ sleep(1000); // 1초 기다림
+ this.setLastTemplate(templateName); // 현재 상태 저장
+ this.setNextTemplate("button_reply.png"); // 다음 상태 설정
+ }
+ break;
+
+ case "button_reply.png": // 답글 버튼을 찾았을 때
+ // "나에게 답장" 메시지를 다시 찾은 뒤, 답글 버튼을 눌렀을 때에만 진행
+ if (this.lastTemplate == "mention_reply.png") {
+ this.mouseClick(x, y, 5, 5); // 답글 버튼 클릭
+ sleep(1000); // 1초 기다림
+ this.setLastTemplate(templateName); // 현재 상태 저장
+ this.setNextTemplate("wall_reply_ready.png"); // 다음 상태 설정
+ }
+ break;
+
+ case "binary_button_view_profile.png": // 프로필 보기 버튼을 찾았을 때
+ // 답글이 온 경우에만 진행
+ if (this.lastTemplate == "mention_reply.png") {
+ this.mouseClick(x, y, 0, 0); // 프로필 보기 버튼 클릭
+ sleep(1000); // 1초 기다림
+ this.setLastTemplate(templateName); // 현재 상태 저장
+ this.setNextTemplate("button_heart.png"); // 다음 상태 설정
+ }
+ break;
+
+ case "button_heart.png": // 하트 버튼 찾았을 때
+ if (this.lastTemplate == "binary_button_view_profile.png") {
+ this.mouseClick(x, y, 0, 0); // 하트 버튼 클릭
+ sleep(1000); // 1초 기다림
+ this.setLastTemplate(templateName); // 현재 상태 저장
+ this.setNextTemplate("button_heart_clicked.png"); // 다음 상태 설정
+ }
+ break;
+
+ case "button_heart_clicked.png": // 하트 버튼 클릭했을 때
+ if (this.lastTemplate == "button_heart.png") {
+ this.setLastTemplate(templateName); // 현재 상태 저장
+ this.setNextTemplate("binary_button_close_profile_blured.png"); // 다음 상태 설정
+ }
+ break;
+
+ case "binary_button_close_profile_blured.png": // 프로필 창을 닫기
+ if (this.lastTemplate == "button_heart_clicked.png") { // 하트 버튼을 찍고 들어왔으면
+ this.mouseClick(x, y, 3, 3); // 프로필 창 닫기 버튼 클릭
+ sleep(1000); // 1초 기다림
+ this.setLastTemplate(templateName); // 현재 상태 저장
+ this.setNextTemplate("wall.png"); // 다음 상태 설정
+ }
+ break;
+ }
+ };
+}
+
+exports.KakaoTalk = KakaoTalk;
diff --git a/lib/language-inference-engine.js b/lib/language-inference-engine.js
index 1a71080..5ab9bad 100644
--- a/lib/language-inference-engine.js
+++ b/lib/language-inference-engine.js
@@ -1,10 +1,12 @@
// language-inference-engine.js
-// Language Inference Engine (e.g., NLP, LLM) services integration
-// Namhyeon Go
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
-
-// ***SECURITY NOTICE***
-// Language Inference Engine requires an internet connection, and data may be transmitted externally. Users must adhere to the terms of use and privacy policy.
+//
+// Language Inference Engine (e.g., NLP, LLM) services integration
+//
+// SECURITY NOTICE
+// A LLM service requires an internet connection, and data may be transmitted externally. Please the terms of use and privacy policy.
// - OpenAI: https://openai.com/policies/row-privacy-policy/
// - Anthropic: https://www.anthropic.com/legal/privacy
// - Groq: https://groq.com/privacy-policy/
@@ -552,6 +554,6 @@ exports.create = function() {
};
exports.VERSIONINFO = "Language Inference Engine integration version 0.1.11";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/ldplayer.js b/lib/ldplayer.js
index 86476e8..936dadb 100644
--- a/lib/ldplayer.js
+++ b/lib/ldplayer.js
@@ -1,7 +1,10 @@
-////////////////////////////////////////////////////////////////////////
+// ldplayer.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
// LDPlayer API
-///////////////////////////////////////////////////////////////////////
-
+//
var SHELL = require("lib/shell");
var SYS = require("lib/system");
diff --git a/lib/lz77.js b/lib/lz77.js
index 77ac5ed..7829a59 100644
--- a/lib/lz77.js
+++ b/lib/lz77.js
@@ -1,6 +1,8 @@
// lz77.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
-
+//
function compress(input) {
var compressed = '';
var searchBufferIndex = 0;
@@ -67,6 +69,6 @@ exports.compress = compress;
exports.decompress = decompress;
exports.VERSIONINFO = "LZ77 (MsCompress) algorithm implementation version 0.1";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/msmq.js b/lib/msmq.js
index 20dd44b..8eaeb90 100644
--- a/lib/msmq.js
+++ b/lib/msmq.js
@@ -1,13 +1,13 @@
-////////////////////////////////////////////////////////////////////////
-// MSMQ(Microsoft Message Queuing) API
-//
+// msmq.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
// references:
-// - https://gist.github.com/vladaman/6375841
-// - https://docs.microsoft.com/en-us/previous-versions/windows/desktop/msmq/ms703952(v=vs.85)
-// - https://docs.microsoft.com/en-us/previous-versions/windows/desktop/msmq/ms705286(v=vs.85)
-//
-////////////////////////////////////////////////////////////////////////
-
+// https://gist.github.com/vladaman/6375841
+// https://docs.microsoft.com/en-us/previous-versions/windows/desktop/msmq/ms703952(v=vs.85)
+// https://docs.microsoft.com/en-us/previous-versions/windows/desktop/msmq/ms705286(v=vs.85)
+//
var MSMQObject = function(queueName) {
var MQ_SEND_ACCESS = 2;
var MQ_DENY_NONE = 0;
diff --git a/lib/msoffice.js b/lib/msoffice.js
index 344c921..32fd718 100644
--- a/lib/msoffice.js
+++ b/lib/msoffice.js
@@ -1,6 +1,8 @@
// msoffice.js
-// Namhyeon Go
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
+//
var STD = require("lib/std");
var SYS = require("lib/system");
var FILE = require("lib/file");
@@ -222,6 +224,6 @@ exports.PowerPoint = PowerPoint;
exports.Word = Word;
exports.VERSIONINFO = "Microsoft Office interface (msoffice.js) version 0.2.0";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/nmap.js b/lib/nmap.js
index 8ca6e6c..5fdfa60 100644
--- a/lib/nmap.js
+++ b/lib/nmap.js
@@ -1,7 +1,8 @@
-////////////////////////////////////////////////////////////////////////
-// NMAP interface API
-////////////////////////////////////////////////////////////////////////
-
+// nmap.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
var client = require("lib/catproxy");
var PortScanner = function(binpath, url) {
@@ -23,6 +24,6 @@ var PortScanner = function(binpath, url) {
exports.PortScanner = PortScanner;
exports.VERSIONINFO = "NMAP interface version 0.2";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/noxplayer.js b/lib/noxplayer.js
index a1b43db..51bbe41 100644
--- a/lib/noxplayer.js
+++ b/lib/noxplayer.js
@@ -1,7 +1,10 @@
-////////////////////////////////////////////////////////////////////////
+// noxplayer.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
// NoxPlayer API
-///////////////////////////////////////////////////////////////////////
-
+//
var SHELL = require("lib/shell");
var SYS = require("lib/system");
diff --git a/lib/ovftool.js b/lib/ovftool.js
index 40f32ba..311b6f0 100644
--- a/lib/ovftool.js
+++ b/lib/ovftool.js
@@ -1,5 +1,6 @@
// ovftool.js
-// Namhyeon Go
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
//
// Download OVFTool (Open Virtualization Format (OVF) Tool):
@@ -66,6 +67,6 @@ exports.setCredential = setCredential;
exports.create = create;
exports.VERSIONINFO = "Broadcom/VMware OVF Tool interface (ovftool.js) version 0.1.2";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/pipe-ipc.js b/lib/pipe-ipc.js
index 3ab55d8..3903314 100644
--- a/lib/pipe-ipc.js
+++ b/lib/pipe-ipc.js
@@ -1,7 +1,10 @@
// pipe-ipc.js
-// Pipe based IPC implementation for WelsonJS framework
-// Namhyeon Go (Catswords Research)
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
+//
+// Pipe based IPC implementation for WelsonJS framework
+//
var STD = require("lib/std");
// https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/opentextfile-method
@@ -553,6 +556,6 @@ exports.adSaveCreateOverWrite = adSaveCreateOverWrite;
exports.adModeReadWrite = adModeReadWrite;
exports.VERSIONINFO = "PIPE-based IPC Module (pipe-ipc.js) version 0.1.23";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = require;
diff --git a/lib/powershell.js b/lib/powershell.js
index faf2052..91cefb8 100644
--- a/lib/powershell.js
+++ b/lib/powershell.js
@@ -1,6 +1,10 @@
-// Powershell Interface API
-// Namhyeon Go (Catswords Research)
+// powershell.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
+//
+// Powershell Interface API
+//
var SHELL = require("lib/shell");
var PowershellObject = function() {
@@ -149,6 +153,6 @@ exports.execCommand = execCommand;
exports.runAs = runAs;
exports.VERSIONINFO = "Powershell Interface (powershell.js) version 0.1.4";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/punycode.js b/lib/punycode.js
index bf3063a..8059b9c 100644
--- a/lib/punycode.js
+++ b/lib/punycode.js
@@ -1,8 +1,9 @@
// punycode.js
-// Namhyeon Go
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
//
-// ***SECURITY NOTICE***
+// SECURITY NOTICE
// Due to potential security issues, the Public API URL is not provided. If you need to request access, please refer to the project's contact information.
// You can download the server-side script that implements this functionality from the link below:
// https://github.com/gnh1201/caterpillar
@@ -43,6 +44,6 @@ exports.encode = encode;
exports.decode = decode;
exports.VERSIONINFO = "Punycode Conversion Client (punycode.js) version 0.2.4";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/python3.js b/lib/python3.js
index 4d5637d..37635c0 100644
--- a/lib/python3.js
+++ b/lib/python3.js
@@ -1,7 +1,10 @@
// python3.js
-// Python Interface
-// Namhyeon Go (Catswords Research)
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
+//
+// Python Interface
+//
var SYS = require("lib/system");
var SHELL = require("lib/shell");
diff --git a/lib/rand.js b/lib/rand.js
index 462bfc1..526f5e7 100644
--- a/lib/rand.js
+++ b/lib/rand.js
@@ -1,5 +1,8 @@
// rand.js
-
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
var FILE = require("lib/file");
function randomize() {
diff --git a/lib/registry.js b/lib/registry.js
index d2782a1..fce2625 100644
--- a/lib/registry.js
+++ b/lib/registry.js
@@ -1,7 +1,10 @@
-////////////////////////////////////////////////////////////////////////
+// registry.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
// Registry API
-////////////////////////////////////////////////////////////////////////
-
+//
var SHELL = require("lib/shell");
// http://apidock.com/ruby/Win32/Registry/Constants
diff --git a/lib/router.js b/lib/router.js
index 0e05288..ce8e07e 100644
--- a/lib/router.js
+++ b/lib/router.js
@@ -1,8 +1,10 @@
// router.js
-// Content-Type based URI router for WelsonJS framework
-// Namhyeon Go
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
-//
+//
+// Content-Type based URI router for WelsonJS framework
+//
function RouteModel(path, callback) {
this.path = path;
this.callback = callback;
@@ -88,6 +90,6 @@ function RouterObject() {
exports.Router = new RouterObject();
exports.VERSIONINFO = "Content-Type based URI router (router.js) version 0.1.2";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/sandboxie.js b/lib/sandboxie.js
index 43cf0bd..1f433b8 100644
--- a/lib/sandboxie.js
+++ b/lib/sandboxie.js
@@ -1,3 +1,8 @@
+// sendboxie.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
var SHELL = require("lib/shell");
var SandboxieObject = function() {
diff --git a/lib/security.js b/lib/security.js
index 3ba833b..a642afc 100644
--- a/lib/security.js
+++ b/lib/security.js
@@ -1,7 +1,10 @@
-////////////////////////////////////////////////////////////////////////
+// security.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
// Security Policy API
-////////////////////////////////////////////////////////////////////////
-
+//
var SYS = require("lib/system");
var FILE = require("lib/file");
var REG = require("lib/registry");
@@ -85,6 +88,6 @@ exports.getAntiVirusProducts = getAntiVirusProducts;
exports.OpenThreatSettings = OpenThreatSettings;
exports.VERSIONINFO = "Security Policy Module (security.js) version 0.2.2";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/sendmail.js b/lib/sendmail.js
index d167a56..13a4655 100644
--- a/lib/sendmail.js
+++ b/lib/sendmail.js
@@ -1,11 +1,10 @@
-//////////////////////////////////////////////////////////////////////////////////
+// sendmail.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
+// Sendmail using either CDO or Persits.MailSender
//
-// sendmail.js
-//
-// Sendmail using either CDO or Persits.MailSender
-//
-/////////////////////////////////////////////////////////////////////////////////
-
/////////////////////////////////////////////////////////////////////////////////
// Private APIs / Utility functions
/////////////////////////////////////////////////////////////////////////////////
diff --git a/lib/serp.js b/lib/serp.js
index 405eea5..72ff863 100644
--- a/lib/serp.js
+++ b/lib/serp.js
@@ -1,7 +1,10 @@
// serp.js
-// SERP/SEO tools integration for WelsonJS framework
-// Namhyeon Go
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
+//
+// SERP/SEO tools integration for WelsonJS framework
+//
function parseUrl(url) {
var getEngine = function(url) {
var defaultEngine = "google";
@@ -59,6 +62,6 @@ function parseUrl(url) {
exports.parseUrl = parseUrl;
exports.VERSIONINFO = "SERP/SEO tools integration (serp.js) version 0.1";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/shadowsocks.js b/lib/shadowsocks.js
index 0dadca4..9cb7549 100644
--- a/lib/shadowsocks.js
+++ b/lib/shadowsocks.js
@@ -1,7 +1,8 @@
-////////////////////////////////////////////////////////////////////////
-// Shadowsocks API
-////////////////////////////////////////////////////////////////////////
-
+// shadowsocks.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
var CONFIG = require("lib/config");
var SHELL = require("lib/shell");
diff --git a/lib/shell.js b/lib/shell.js
index 1b6075b..ec541f5 100644
--- a/lib/shell.js
+++ b/lib/shell.js
@@ -1,6 +1,10 @@
-// Windows Shell Interface with WelsonJS Pipe-IPC module
-// Namhyeon Go (Catswords Research)
+// shell.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
+//
+// Windows Shell Interface with WelsonJS Pipe-IPC module
+//
var FILE = require("lib/file");
var PipeIPC = require("lib/pipe-ipc");
@@ -255,6 +259,6 @@ exports.getPathOfMyDocuments = function() {
exports.CdoCharset = PipeIPC.CdoCharset;
exports.VERSIONINFO = "Windows Shell Interface (shell.js) version 0.3.18";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/std.js b/lib/std.js
index 6faebd7..b44bf65 100644
--- a/lib/std.js
+++ b/lib/std.js
@@ -1,8 +1,10 @@
// std.js
-// WelsonJS Standard Library
-// Namhyeon Go
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
-//
+//
+// WelsonJS Standard Library
+//
// Polyfills
if (!Function.prototype.GetResource) {
Function.prototype.GetResource = function(ResourceName) {
@@ -617,6 +619,6 @@ exports.confirm = confirm;
exports.prompt = prompt;
exports.VERSIONINFO = "WelsonJS Standard Library (std.js) version 0.8.17";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/strings.js b/lib/strings.js
index e1bca55..adf8e07 100644
--- a/lib/strings.js
+++ b/lib/strings.js
@@ -1,7 +1,8 @@
-/*
- * strings.js
- */
-
+// strings.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
function numberFormat(number, decimals, decPoint, thousandsSep) { // eslint-disable-line camelcase
// discuss at: https://locutus.io/php/number_format/
// original by: Jonas Raoni Soares Silva (https://www.jsfromhell.com)
diff --git a/lib/system.js b/lib/system.js
index 6cbc835..37f8a0f 100644
--- a/lib/system.js
+++ b/lib/system.js
@@ -1,5 +1,8 @@
-// lib/system.js
+// system.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
+//
var SHELL = require("lib/shell");
var WMI = require("lib/wmi");
diff --git a/lib/task-scheduler.js b/lib/task-scheduler.js
index 339cd2c..9edbe10 100644
--- a/lib/task-scheduler.js
+++ b/lib/task-scheduler.js
@@ -1,6 +1,8 @@
// task-scheduler.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
-
+//
// Connect to Task Scheduler service
function connect() {
var service = CreateObject("Schedule.Service");
@@ -92,6 +94,6 @@ exports.createAndRegisterTask = createAndRegisterTask;
exports.test = test;
exports.VERSIONINFO = "Windows Task Scheduler Scripting Interface (task-scheduler.js) version 0.1";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = require;
diff --git a/lib/task.js b/lib/task.js
index e88e073..30c765e 100644
--- a/lib/task.js
+++ b/lib/task.js
@@ -1,21 +1,23 @@
-//////////////////////////////////////////////////////////////////////////////////
+// task.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
// Task API (Time-sharing based `async`, `setTimeout`, `setInterval`, implementation in WSH.js)
-/////////////////////////////////////////////////////////////////////////////////
-
-/* // example:
- * // var TASK = require("lib/task");
- * // var taskQueue = TASK.createTaskQueue();
- * // TASK.putTask(queue, TASK.createTask(function(task, a, b, c) { console.log(a + b + c); sleep(100); }, [1, 2, 3]))
- * // .then(TASK.createTask(function(task, a, b, c) { console.log(a + b + c); sleep(200); }, [4, 5, 6]))
- * // .then(TASK.createTask(function(task, a, b, c) { console.log(a + b + c); sleep(300); }, [7, 8, 9]))
- * // ;
- * // TASK.putTask(queue, TASK.createTask(function(task, a, b, c) { console.log(a + b + c); sleep(100); }, [3, 2, 1])
- * // .then(TASK.createTask(function(task, a, b, c) { console.log(a + b + c); sleep(200); }, [6, 5, 4]))
- * // .then(TASK.createTask(function(task, a, b, c) { TASK.stop(); console.log(a + b + c); sleep(300); }, [9, 8, 7]))
- * // ;
- * // taskQueue.run();
- */
-
+//
+// example:
+// var TASK = require("lib/task");
+// var taskQueue = TASK.createTaskQueue();
+// TASK.putTask(queue, TASK.createTask(function(task, a, b, c) { console.log(a + b + c); sleep(100); }, [1, 2, 3]))
+// .then(TASK.createTask(function(task, a, b, c) { console.log(a + b + c); sleep(200); }, [4, 5, 6]))
+// .then(TASK.createTask(function(task, a, b, c) { console.log(a + b + c); sleep(300); }, [7, 8, 9]))
+// ;
+// TASK.putTask(queue, TASK.createTask(function(task, a, b, c) { console.log(a + b + c); sleep(100); }, [3, 2, 1])
+// .then(TASK.createTask(function(task, a, b, c) { console.log(a + b + c); sleep(200); }, [6, 5, 4]))
+// .then(TASK.createTask(function(task, a, b, c) { TASK.stop(); console.log(a + b + c); sleep(300); }, [9, 8, 7]))
+// ;
+// taskQueue.run();
+//
function Task(f, params) {
this.f = f;
this.params = params;
diff --git a/lib/timer.js b/lib/timer.js
deleted file mode 100644
index 1c6dce0..0000000
--- a/lib/timer.js
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- Windows Scripting Host doesn't provide setTimeout and clearTimeout.
- This serves as a replacement.
-
- To use:
-
- Set up all the deferred actions you like with the usual setTimeout calls
- setTimeout(function() {
- // do something
- }, 200);
-
- Then call setTimeout.queue.run().
- Deferred actions can spawn more deferred actions.
- If the queue ever runs dry, it will stop running and return.
- Remember, javascript is single-threaded. If you put more
- functions in the queue, call the run method again.
-*/
-
-exports.VERSIONINFO = "Timer Module (timer.js) version 0.1";
-exports.global = global;
-exports.require = global.require;
-
-exports.sleep = function(ms, callback) {
- WScript.Sleep(ms);
- if(typeof(callback) == "function") {
- callback();
- }
-};
-
-exports.setTimeout = function(func, delay) {
- var when = new Date().getTime() + delay;
- return exports.setTimeout.queue.add(func, when);
-};
-
-exports.clearTimeout = function(timer) {
- exports.setTimeout.queue.del(timer);
-};
-
-// A queue object, with methods add, del, run.
-// Tied to setTimeout to keep it out of the global namespace.
-
-exports.setTimeout.queue = (function() {
- var store = [];
- var nextid = 0;
-
- return {
- add: function(func, when) {
- store.push({
- id: nextid,
- func: func,
- when: when
- });
- return nextid++;
- },
-
- del: function(id) {
- for (var i = 0; i < store.length; i++) {
- if (store[i].id == id) {
- store.splice(i, 1);
- }
- }
- },
-
- run: function() {
- while (store.length > 0) {
- var now = new Date().getTime();
- for (var i = 0; i < store.length; i++) {
- var item = store[i];
-
- if (now > item.when) {
- exports.setTimeout.queue.del(item.id);
- item.func(); // <---- actually invoke the function here
-
- // Note: we can't continue looping through the queue here,
- // because we removed one of the items. The loop limit is
- // now incorrect. Easiest thing to do is restart the loop.
-
- break;
- }
-
- // We burn a millisecond here to throttle the looping.
- // Otherwise it will loop on the order of 200,000 times per sec.
-
- exports.sleep(1);
- }
- }
- }
- }
-})();
-
-exports.setTimeout.test = function() {
- console.log('You should see: C,A,D,N,M');
-
- exports.setTimeout(console.log('A'), 500);
- var b = setTimeout(console.log('B'), 1220);
- exports.setTimeout(console.log('C'), 300);
- exports.setTimeout(console.log('D'), 1000);
- clearTimeout(b);
-
- exports.setTimeout(function() {
- console.log('N');
- exports.setTimeout(function() {
- console.log('M');
- }, 100)
- }, 1300);
-
- exports.setTimeout.queue.run();
- console.log('done');
-};
-
-///// setTimeout.test(); // uncomment to run test
diff --git a/lib/toolkit.js b/lib/toolkit.js
index b8473b4..662fbfb 100644
--- a/lib/toolkit.js
+++ b/lib/toolkit.js
@@ -1,8 +1,10 @@
// toolkit.js
-// WelsonJS native toolkit interface version 0.3.7
-// Namhyeon Go
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
-
+//
+// WelsonJS native toolkit interface version 0.3.7
+//
function ToolkitObject() {
this._interface = null;
@@ -120,6 +122,6 @@ exports.encryptStringHIGHT = encryptString;
exports.decryptStringHIGHT = decryptString;
exports.VERSIONINFO = "WelsonJS native toolkit interface version 0.3.7";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/totp.js b/lib/totp.js
index 29aaee8..884864c 100644
--- a/lib/totp.js
+++ b/lib/totp.js
@@ -1,9 +1,9 @@
// totp.js
-// TOTP library for WelsonJS framework
-// Namhyeon Go
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
//
-// ***SECURITY NOTICE***
+// SECURITY NOTICE
// Due to potential security issues, the Public API URL is not provided. If you need to request access, please refer to the project's contact information.
// You can download the server-side script that implements this functionality from the link below:
// https://github.com/gnh1201/caterpillar
@@ -44,7 +44,7 @@ exports.getPubKey = getPubKey;
exports.getOtp = getOtp;
exports.VERSIONINFO = "TOTP Client (totp.js) version 0.1.8";
-exports.AUTHOR = "abuse@catswords.net";
+exports.AUTHOR = "gnh1201@catswords.re.kr";
exports.global = global;
exports.require = global.require;
diff --git a/lib/tun2socks.js b/lib/tun2socks.js
index 0f875a4..c8648a9 100644
--- a/lib/tun2socks.js
+++ b/lib/tun2socks.js
@@ -1,7 +1,10 @@
-////////////////////////////////////////////////////////////////////////
+// tun2sock.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
// TUN2SOCKS API
-////////////////////////////////////////////////////////////////////////
-
+//
var SHELL = require("lib/shell");
var SYS = require("lib/system");
diff --git a/lib/uri.js b/lib/uri.js
index 1f67c80..f6e73c9 100644
--- a/lib/uri.js
+++ b/lib/uri.js
@@ -1,9 +1,8 @@
-//////////////////////////////////////////////////////////////////////////////////
-//
-// uri.js
-//
-/////////////////////////////////////////////////////////////////////////////////
-
+// uri.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
/////////////////////////////////////////////////////////////////////////////////
// Private APIs / Utility functions
/////////////////////////////////////////////////////////////////////////////////
diff --git a/lib/vbscript.js b/lib/vbscript.js
index 8d4a6e0..73f994d 100644
--- a/lib/vbscript.js
+++ b/lib/vbscript.js
@@ -1,7 +1,10 @@
-////////////////////////////////////////////////////////////////////////
+// vbscript.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
// VBScript API
-///////////////////////////////////////////////////////////////////////
-
+//
var SHELL = require("lib/shell");
exports.VERSIONINFO = "VBScript (vbscript.js) version 0.1";
diff --git a/lib/virtualinput.js b/lib/virtualinput.js
index 476c885..a1d9437 100644
--- a/lib/virtualinput.js
+++ b/lib/virtualinput.js
@@ -1,7 +1,10 @@
-//////////////////////////////////////////////////////////////////////////////////
+// virtualinput.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
// VirtualInput API
-/////////////////////////////////////////////////////////////////////////////////
-
+//
var VirtualInputObject = function() {
this.oShell = null;
this.oAutoIt = null;
diff --git a/lib/wamr.js b/lib/wamr.js
index d11bb83..83d2573 100644
--- a/lib/wamr.js
+++ b/lib/wamr.js
@@ -1,7 +1,11 @@
-// WAMR for WelsonJS
-// - WAMR: https://github.com/bytecodealliance/wasm-micro-runtime
-// - WelsonJS: https://github.com/gnh1201/welsonjs
-
+// wamr.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
+// WAMR(WebAssembly Micro Runtime) integration for WelsonJS framework
+// https://github.com/bytecodealliance/wasm-micro-runtime
+//
var SHELL = require("lib/shell");
var WAMRObject = function() {
diff --git a/lib/websocket.js b/lib/websocket.js
index 599f15e..62ac48c 100644
--- a/lib/websocket.js
+++ b/lib/websocket.js
@@ -1,10 +1,11 @@
-// Websocket API for WelsonJS framework
-// Namhyeon Go
+// websocket.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
//
// references:
-// - https://stackoverflow.com/questions/52783655/use-curl-with-chrome-remote-debugging
-// - https://github.com/vi/websocat
+// https://stackoverflow.com/questions/52783655/use-curl-with-chrome-remote-debugging
+// https://github.com/vi/websocat
//
var SHELL = require("lib/shell");
var SYS = require("lib/system");
diff --git a/lib/winlibs.js b/lib/winlibs.js
index e15cefa..f04d380 100644
--- a/lib/winlibs.js
+++ b/lib/winlibs.js
@@ -1,7 +1,10 @@
-////////////////////////////////////////////////////////////////////////
+// winlibs.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
// Windows Library API
-////////////////////////////////////////////////////////////////////////
-
+//
var SHELL = require("lib/shell");
var FILE = require("lib/file");
diff --git a/lib/winservice.js b/lib/winservice.js
index cff7960..a64dcef 100644
--- a/lib/winservice.js
+++ b/lib/winservice.js
@@ -1,35 +1,122 @@
-//////////////////////////////////////////////////////////////////////////////////
-// VirtualInput API
-/////////////////////////////////////////////////////////////////////////////////
+// winservice.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
+// Windows Service API
+//
+var SHELL = require("lib/shell");
-var VirtualInputObject = function() {
- this.oShell = null;
- this.oAutoIt = null;
-
- this.create = function() {
- try {
- this.oShell = CreateObject("WScript.Shell");
- this.oAutoIt = CreateObject("AutoItX.Control");
- } catch (e) {
- console.error("VirtualInputObject.create() -> " + e.message);
- }
- };
-
- this.moveMouse = function(x, y) {
- this.oAutoIt.MouseMove(x, y);
- };
-
- this.sendKeys = function(s) {
- this.oShell.SendKeys(s);
- };
-
- this.create();
-};
-
-exports.VERSIONINFO = "VirtualInput Lib (virtualinput.js) version 0.1";
+exports.VERSIONINFO = "Windows Service Lib (service.js) version 0.1";
exports.global = global;
exports.require = global.require;
-exports.create = function() {
- return new VirtualInputObject();
+// https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/dd228922(v=ws.11)
+exports.queryService = function(name, options) {
+ var cmd = [
+ "sc",
+ "query",
+ name
+ ],
+ _options = {
+ type: [
+ "service", // type= {driver | service | all}
+ "own" // type= {own | share | interact | kernel | filesys | rec | adapt}
+ ],
+ state: "active", // state= {active | inactive | all}
+ bufsize: "1024", // bufsize=
+ ri: "0", // ri=
+ group: "" // group=
+ };
+
+ for (var k in _options) {
+ if (k in options) {
+ _options[k] = options[k];
+ }
+
+ if (_options[k] !== false) {
+ if (Array.isArray(_options[k])) {
+ for (var i in options[k]) {
+ cmd.push(k + '=');
+ cmd.push(_options[k][i]);
+ }
+ } else {
+ cmd.push(k + '=');
+ cmd.push(_options[k]);
+ }
+ }
+ }
+
+ return SHELL.exec(cmd);
};
+
+// https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/sc-create
+exports.createService = function(name, options) {
+ var cmd = [
+ "sc",
+ "create",
+ name
+ ],
+ _options = {
+ type: "share", // type= {own | share | kernel | filesys | rec | interact type= {own | share}}
+ start: "demand", // start= {boot | system | auto | demand | disabled | delayed-auto }
+ error: "normal", // error= {normal | severe | critical | ignore}
+ binPath: false, // binpath=
+ group: false, // group=
+ tag: false, // tag= {yes | no}
+ depend: false, // depend=
+ obj: false, // obj= { | }
+ DisplayName: false, // displayname=
+ password: false // password=
+ };
+
+ for (var k in _options) {
+ if (k in options) {
+ _options[k] = options[k];
+ }
+
+ if (_options[k] !== false) {
+ if (Array.isArray(_options[k])) {
+ for (var i in options[k]) {
+ cmd.push(k + '=');
+ cmd.push(_options[k][i]);
+ }
+ } else {
+ cmd.push(k + '=');
+ cmd.push(_options[k]);
+ }
+ }
+ }
+
+ return SHELL.exec(cmd);
+};
+
+exports.startService = function(name, args) {
+ var cmd = [
+ "sc",
+ "start",
+ name
+ ];
+
+ if (typeof(args) !== "undefined") {
+ cmd = cmd.concat(args);
+ }
+
+ return SHELL.exec(cmd);
+};
+
+exports.stopService = function(name) {
+ return SHELL.exec([
+ "sc",
+ "stop",
+ name
+ ]);
+};
+
+exports.deleteService = function(name) {
+ return SHELL.exec([
+ "sc",
+ "delete",
+ name
+ ]);
+};
\ No newline at end of file
diff --git a/lib/wintap.js b/lib/wintap.js
index 558516b..0b3d1b3 100644
--- a/lib/wintap.js
+++ b/lib/wintap.js
@@ -1,7 +1,10 @@
-////////////////////////////////////////////////////////////////////////
+// wintap.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
// WindowsTAP API
-////////////////////////////////////////////////////////////////////////
-
+//
var SHELL = require("lib/shell");
var SYS = require("lib/system");
var FILE = require("lib/file");
diff --git a/lib/wmi.js b/lib/wmi.js
index b8e8f0f..405e85a 100644
--- a/lib/wmi.js
+++ b/lib/wmi.js
@@ -1,7 +1,10 @@
// wmi.js
-// WMI(Windows Management Instrumentation) API interface for WelsonJS framework
-// Namhyeon Go (Catswords Research)
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
+//
+// WMI(Windows Management Instrumentation) API interface for WelsonJS framework
+//
var WMIQueryObject = function() {
var wbemFlagReturnImmediately = 0x10;
var wbemFlagForwardOnly = 0x20;
diff --git a/lib/xml.js b/lib/xml.js
index 585902e..e7a8d83 100644
--- a/lib/xml.js
+++ b/lib/xml.js
@@ -1,6 +1,10 @@
-////////////////////////////////////////////////////////////////////////
+// xml.js
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
// XML interface
-////////////////////////////////////////////////////////////////////////
+//
var FILE = require("lib/file");
var PipeIPC = require("lib/pipe-ipc");
diff --git a/officeloader.js b/officeloader.js
index 73b661d..7ce5838 100644
--- a/officeloader.js
+++ b/officeloader.js
@@ -1,6 +1,8 @@
// officeloader.js
-// Namhyeon Go
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
+//
var SYS = require("lib/system");
var Office = require("lib/msoffice");
var ChatGPT = require("lib/chatgpt");
diff --git a/setup.iss b/setup.iss
index df9f7d4..3469c46 100644
--- a/setup.iss
+++ b/setup.iss
@@ -1,6 +1,6 @@
; @created_on 2020-06-26
; @updated_on 2025-03-21
-; @author Namhyeon Go (Catswords Research)
+; @author Namhyeon Go
[Setup]
AppName=WelsonJS
diff --git a/shoutcut.js b/shoutcut.js
index 83904fa..e826c65 100644
--- a/shoutcut.js
+++ b/shoutcut.js
@@ -1,6 +1,8 @@
// shoutcut.js
-// Namhyeon Go
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
+//
var SHELL = require("lib/shell");
var SYS = require("lib/system");
diff --git a/testloader.js b/testloader.js
index 21bcbaa..572c2a7 100644
--- a/testloader.js
+++ b/testloader.js
@@ -1,7 +1,8 @@
// testloader.js
-// Namhyeon Go
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
// https://github.com/gnh1201/welsonjs
-
+//
// load libraries
var FILE = require("lib/file");
diff --git a/uriloader.js b/uriloader.js
index bd6b9b1..127528e 100644
--- a/uriloader.js
+++ b/uriloader.js
@@ -1,7 +1,8 @@
// uriloader.js
-// URI scheme loader for WelsonJS framework
-// Namhyeon Go
-// https;//github.com/gnh1201/welsonjs
+// Copyright 2019-2025, Namhyeon Go and the WelsonJS contributors.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// https://github.com/gnh1201/welsonjs
+//
var SYS = require("lib/system");
var SHELL = require("lib/shell");
var URI = require("lib/uri");