lupine.api 1.1.57 → 1.1.59
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/admin/admin-about.tsx +12 -16
- package/admin/admin-config.tsx +47 -44
- package/admin/admin-css.tsx +3 -3
- package/admin/admin-db.tsx +75 -75
- package/admin/admin-frame-helper.tsx +364 -364
- package/admin/admin-frame.tsx +164 -164
- package/admin/admin-index.tsx +65 -65
- package/admin/admin-login.tsx +111 -111
- package/admin/admin-menu-edit.tsx +637 -637
- package/admin/admin-menu-list.tsx +87 -87
- package/admin/admin-page-edit.tsx +564 -564
- package/admin/admin-page-list.tsx +83 -83
- package/admin/admin-performance.tsx +28 -28
- package/admin/admin-release.tsx +427 -404
- package/admin/admin-resources.tsx +382 -382
- package/admin/admin-shell.tsx +89 -89
- package/admin/admin-table-data.tsx +146 -146
- package/admin/admin-table-list.tsx +230 -230
- package/admin/admin-test-animations.tsx +395 -395
- package/admin/admin-test-component.tsx +823 -808
- package/admin/admin-test-edit.tsx +319 -319
- package/admin/admin-test-themes.tsx +56 -56
- package/admin/admin-tokens.tsx +338 -338
- package/admin/design/admin-design.tsx +174 -174
- package/admin/design/block-grid.tsx +36 -36
- package/admin/design/block-grid1.tsx +21 -21
- package/admin/design/block-paragraph.tsx +19 -19
- package/admin/design/block-title.tsx +19 -19
- package/admin/design/design-block-box.tsx +140 -140
- package/admin/design/drag-data.tsx +24 -24
- package/admin/index.ts +9 -9
- package/admin/package.json +15 -15
- package/admin/tsconfig.json +127 -127
- package/dev/copy-folder.js +32 -32
- package/dev/cp-index-html.js +69 -69
- package/dev/file-utils.js +12 -12
- package/dev/index.js +18 -19
- package/dev/package.json +12 -12
- package/dev/plugin-ifelse.js +168 -168
- package/dev/plugin-ifelse.test.js +37 -37
- package/dev/run-cmd.js +14 -14
- package/dev/send-request.js +12 -12
- package/package.json +55 -55
- package/src/admin-api/admin-api-helper.ts +210 -205
- package/src/admin-api/admin-api.ts +65 -65
- package/src/admin-api/admin-auth.ts +152 -146
- package/src/admin-api/admin-config.ts +94 -84
- package/src/admin-api/admin-csv.ts +94 -94
- package/src/admin-api/admin-db.ts +269 -269
- package/src/admin-api/admin-menu.ts +135 -135
- package/src/admin-api/admin-page.ts +135 -135
- package/src/admin-api/admin-performance.ts +128 -128
- package/src/admin-api/admin-release.ts +703 -700
- package/src/admin-api/admin-resources.ts +318 -318
- package/src/admin-api/admin-token-helper.ts +82 -79
- package/src/admin-api/admin-tokens.ts +90 -90
- package/src/admin-api/index.ts +2 -2
- package/src/admin-api/web-config-api.ts +19 -19
- package/src/api/api-cache.ts +103 -103
- package/src/api/api-helper.ts +44 -44
- package/src/api/api-module.ts +67 -60
- package/src/api/api-router.ts +177 -177
- package/src/api/api-shared-storage.ts +64 -64
- package/src/api/async-storage.ts +5 -5
- package/src/api/debug-service.ts +56 -56
- package/src/api/encode-html.ts +27 -27
- package/src/api/handle-status.ts +75 -75
- package/src/api/index.ts +15 -16
- package/src/api/mini-web-socket.ts +270 -270
- package/src/api/server-content-type.ts +82 -82
- package/src/api/server-render.ts +235 -215
- package/src/api/shell-service.ts +74 -74
- package/src/api/simple-storage.ts +80 -80
- package/src/api/static-server.ts +128 -125
- package/src/api/to-client-delivery.ts +26 -26
- package/src/app/app-cache.ts +55 -55
- package/src/app/app-helper.ts +62 -62
- package/src/app/app-message.ts +109 -109
- package/src/app/app-shared-storage.ts +363 -363
- package/src/app/app-start.ts +136 -136
- package/src/app/cleanup-exit.ts +16 -16
- package/src/app/host-to-path.ts +38 -38
- package/src/app/index.ts +11 -11
- package/src/app/process-dev-requests.ts +130 -130
- package/src/app/web-listener.ts +294 -294
- package/src/app/web-processor.ts +47 -42
- package/src/app/web-server.ts +100 -100
- package/src/common-js/web-env.js +104 -104
- package/src/index.ts +7 -7
- package/src/lang/api-lang-en.ts +26 -26
- package/src/lang/api-lang-zh-cn.ts +27 -27
- package/src/lang/index.ts +2 -2
- package/src/lang/lang-helper.ts +76 -76
- package/src/lang/lang-props.ts +6 -6
- package/src/lib/db/db-helper.ts +23 -23
- package/src/lib/db/db-mysql.ts +249 -250
- package/src/lib/db/db-sqlite.ts +101 -101
- package/src/lib/db/db.spec.ts +28 -28
- package/src/lib/db/db.ts +325 -325
- package/src/lib/db/index.ts +5 -5
- package/src/lib/index.ts +3 -3
- package/src/lib/logger.spec.ts +214 -214
- package/src/lib/logger.ts +281 -281
- package/src/lib/runtime-require.ts +37 -37
- package/src/lib/utils/cookie-util.ts +34 -34
- package/src/lib/utils/crypto.ts +58 -58
- package/src/lib/utils/date-utils.ts +317 -317
- package/src/lib/utils/deep-merge.ts +37 -37
- package/src/lib/utils/delay.ts +12 -12
- package/src/lib/utils/file-setting.ts +55 -55
- package/src/lib/utils/format-bytes.ts +11 -11
- package/src/lib/utils/fs-utils.ts +158 -158
- package/src/lib/utils/get-env.ts +27 -27
- package/src/lib/utils/index.ts +12 -12
- package/src/lib/utils/is-type.ts +48 -48
- package/src/lib/utils/load-env.ts +14 -14
- package/src/lib/utils/pad.ts +6 -6
- package/src/models/api-base.ts +5 -5
- package/src/models/api-module-props.ts +10 -11
- package/src/models/api-router-props.ts +26 -26
- package/src/models/app-cache-props.ts +33 -33
- package/src/models/app-data-props.ts +10 -10
- package/src/models/app-helper-props.ts +6 -6
- package/src/models/app-shared-storage-props.ts +38 -38
- package/src/models/app-start-props.ts +18 -18
- package/src/models/async-storage-props.ts +13 -13
- package/src/models/db-config.ts +30 -30
- package/src/models/host-to-path-props.ts +12 -12
- package/src/models/index.ts +16 -16
- package/src/models/json-object.ts +8 -8
- package/src/models/locals-props.ts +36 -36
- package/src/models/logger-props.ts +84 -84
- package/src/models/simple-storage-props.ts +13 -14
- package/src/models/to-client-delivery-props.ts +6 -6
- package/tsconfig.json +115 -115
- package/dev/plugin-gen-versions.js +0 -20
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
import { SetCookieProps } from '../../models';
|
|
2
|
-
|
|
3
|
-
export const parseCookies = (str: string | undefined) => {
|
|
4
|
-
let rx = /([^;=\s]*)=([^;]*)/g;
|
|
5
|
-
let obj: { [key: string]: string } = {};
|
|
6
|
-
if (str) {
|
|
7
|
-
for (let m; (m = rx.exec(str)); ) {
|
|
8
|
-
try {
|
|
9
|
-
obj[m[1]] = decodeURIComponent(m[2]);
|
|
10
|
-
} catch (error) {
|
|
11
|
-
console.error('parseCookies error for: ' + m[2], error);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
return obj;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
export const serializeCookie = (name: string, value: string, options: SetCookieProps) => {
|
|
19
|
-
const expires = new Date(new Date().getTime() + options.expireDays * 24 * 3600000);
|
|
20
|
-
const cookiePair =
|
|
21
|
-
name +
|
|
22
|
-
'=' +
|
|
23
|
-
encodeURIComponent(value) +
|
|
24
|
-
'; Expires=' +
|
|
25
|
-
expires.toUTCString() +
|
|
26
|
-
'; Path=' +
|
|
27
|
-
(options.path ? options.path : '/') +
|
|
28
|
-
(options.domain ? '; Domain=' + options.domain : '') +
|
|
29
|
-
(options.httpOnly ? '; HttpOnly' : '') +
|
|
30
|
-
(options.Partitioned ? '; Partitioned' : '') +
|
|
31
|
-
(options.sameSite ? '; SameSite=' + options.sameSite : '') +
|
|
32
|
-
(options.secure ? '; Secure' : '');
|
|
33
|
-
return cookiePair;
|
|
34
|
-
};
|
|
1
|
+
import { SetCookieProps } from '../../models';
|
|
2
|
+
|
|
3
|
+
export const parseCookies = (str: string | undefined) => {
|
|
4
|
+
let rx = /([^;=\s]*)=([^;]*)/g;
|
|
5
|
+
let obj: { [key: string]: string } = {};
|
|
6
|
+
if (str) {
|
|
7
|
+
for (let m; (m = rx.exec(str)); ) {
|
|
8
|
+
try {
|
|
9
|
+
obj[m[1]] = decodeURIComponent(m[2]);
|
|
10
|
+
} catch (error) {
|
|
11
|
+
console.error('parseCookies error for: ' + m[2], error);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return obj;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export const serializeCookie = (name: string, value: string, options: SetCookieProps) => {
|
|
19
|
+
const expires = new Date(new Date().getTime() + options.expireDays * 24 * 3600000);
|
|
20
|
+
const cookiePair =
|
|
21
|
+
name +
|
|
22
|
+
'=' +
|
|
23
|
+
encodeURIComponent(value) +
|
|
24
|
+
'; Expires=' +
|
|
25
|
+
expires.toUTCString() +
|
|
26
|
+
'; Path=' +
|
|
27
|
+
(options.path ? options.path : '/') +
|
|
28
|
+
(options.domain ? '; Domain=' + options.domain : '') +
|
|
29
|
+
(options.httpOnly ? '; HttpOnly' : '') +
|
|
30
|
+
(options.Partitioned ? '; Partitioned' : '') +
|
|
31
|
+
(options.sameSite ? '; SameSite=' + options.sameSite : '') +
|
|
32
|
+
(options.secure ? '; Secure' : '');
|
|
33
|
+
return cookiePair;
|
|
34
|
+
};
|
package/src/lib/utils/crypto.ts
CHANGED
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
import crypto from 'crypto';
|
|
2
|
-
import { Buffer } from 'node:buffer';
|
|
3
|
-
|
|
4
|
-
// Hex takes two characters for each byte - Base64 takes 4 characters for every 3 bytes, so it's more efficient than hex
|
|
5
|
-
// https://github.com/luke-park/SecureCompatibleEncryptionExamples/blob/master/JavaScript/SCEE-Node.js
|
|
6
|
-
export class CryptoUtils {
|
|
7
|
-
static ALGORITHM_NAME = 'aes-256-cbc';
|
|
8
|
-
static ALGORITHM_NONCE_SIZE = 16; // need 16 for aes-256-cbc
|
|
9
|
-
static encrypt(text: string, key: string) {
|
|
10
|
-
const pass = crypto.createHash('md5').update(key).digest('hex');
|
|
11
|
-
const nonce = crypto.randomBytes(this.ALGORITHM_NONCE_SIZE);
|
|
12
|
-
const cipher = crypto.createCipheriv(this.ALGORITHM_NAME, Buffer.from(pass), nonce);
|
|
13
|
-
|
|
14
|
-
// cipher.update(text, 'utf8', 'hex') + cipher.final('hex');
|
|
15
|
-
const buf = Buffer.concat([nonce, cipher.update(Buffer.from(text, 'utf8')), cipher.final()]);
|
|
16
|
-
return buf.toString('base64');
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
static decrypt(encryptedWithNonce: string, key: string) {
|
|
20
|
-
const pass = crypto.createHash('md5').update(key).digest('hex');
|
|
21
|
-
const buf = Buffer.from(encryptedWithNonce, 'base64');
|
|
22
|
-
const nonce = buf.subarray(0, this.ALGORITHM_NONCE_SIZE);
|
|
23
|
-
const cipherText = buf.subarray(this.ALGORITHM_NONCE_SIZE);
|
|
24
|
-
|
|
25
|
-
const cipher = crypto.createDecipheriv(this.ALGORITHM_NAME, Buffer.from(pass), nonce);
|
|
26
|
-
const buf2 = Buffer.concat([cipher.update(cipherText), cipher.final()]);
|
|
27
|
-
return buf2.toString('utf8');
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
static hash(text: string) {
|
|
31
|
-
return crypto.createHash('md5').update(text).digest('hex');
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
static sha256(text: string) {
|
|
35
|
-
return crypto.createHash('sha256').update(text).digest('hex');
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
static randomString(len: number) {
|
|
39
|
-
return crypto.randomBytes(len).toString('hex');
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
static randomNumberString(len: number) {
|
|
43
|
-
return crypto.randomInt(10 ** (len - 1), 10 ** len - 1).toString();
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// first char is alpha, the rest are alpha or number
|
|
47
|
-
static randomCharNumberString(len: number) {
|
|
48
|
-
const letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
|
|
49
|
-
const chars = letters + '0123456789';
|
|
50
|
-
return Array.from(crypto.randomBytes(len))
|
|
51
|
-
.map((b, index) => (index === 0 ? letters[b % letters.length] : chars[b % chars.length]))
|
|
52
|
-
.join('');
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
static uuid() {
|
|
56
|
-
return crypto.randomUUID();
|
|
57
|
-
}
|
|
58
|
-
}
|
|
1
|
+
import crypto from 'crypto';
|
|
2
|
+
import { Buffer } from 'node:buffer';
|
|
3
|
+
|
|
4
|
+
// Hex takes two characters for each byte - Base64 takes 4 characters for every 3 bytes, so it's more efficient than hex
|
|
5
|
+
// https://github.com/luke-park/SecureCompatibleEncryptionExamples/blob/master/JavaScript/SCEE-Node.js
|
|
6
|
+
export class CryptoUtils {
|
|
7
|
+
static ALGORITHM_NAME = 'aes-256-cbc';
|
|
8
|
+
static ALGORITHM_NONCE_SIZE = 16; // need 16 for aes-256-cbc
|
|
9
|
+
static encrypt(text: string, key: string) {
|
|
10
|
+
const pass = crypto.createHash('md5').update(key).digest('hex');
|
|
11
|
+
const nonce = crypto.randomBytes(this.ALGORITHM_NONCE_SIZE);
|
|
12
|
+
const cipher = crypto.createCipheriv(this.ALGORITHM_NAME, Buffer.from(pass), nonce);
|
|
13
|
+
|
|
14
|
+
// cipher.update(text, 'utf8', 'hex') + cipher.final('hex');
|
|
15
|
+
const buf = Buffer.concat([nonce, cipher.update(Buffer.from(text, 'utf8')), cipher.final()]);
|
|
16
|
+
return buf.toString('base64');
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
static decrypt(encryptedWithNonce: string, key: string) {
|
|
20
|
+
const pass = crypto.createHash('md5').update(key).digest('hex');
|
|
21
|
+
const buf = Buffer.from(encryptedWithNonce, 'base64');
|
|
22
|
+
const nonce = buf.subarray(0, this.ALGORITHM_NONCE_SIZE);
|
|
23
|
+
const cipherText = buf.subarray(this.ALGORITHM_NONCE_SIZE);
|
|
24
|
+
|
|
25
|
+
const cipher = crypto.createDecipheriv(this.ALGORITHM_NAME, Buffer.from(pass), nonce);
|
|
26
|
+
const buf2 = Buffer.concat([cipher.update(cipherText), cipher.final()]);
|
|
27
|
+
return buf2.toString('utf8');
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
static hash(text: string) {
|
|
31
|
+
return crypto.createHash('md5').update(text).digest('hex');
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
static sha256(text: string) {
|
|
35
|
+
return crypto.createHash('sha256').update(text).digest('hex');
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
static randomString(len: number) {
|
|
39
|
+
return crypto.randomBytes(len).toString('hex');
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
static randomNumberString(len: number) {
|
|
43
|
+
return crypto.randomInt(10 ** (len - 1), 10 ** len - 1).toString();
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// first char is alpha, the rest are alpha or number
|
|
47
|
+
static randomCharNumberString(len: number) {
|
|
48
|
+
const letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
|
|
49
|
+
const chars = letters + '0123456789';
|
|
50
|
+
return Array.from(crypto.randomBytes(len))
|
|
51
|
+
.map((b, index) => (index === 0 ? letters[b % letters.length] : chars[b % chars.length]))
|
|
52
|
+
.join('');
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
static uuid() {
|
|
56
|
+
return crypto.randomUUID();
|
|
57
|
+
}
|
|
58
|
+
}
|