@futdevpro/nts-dynamo 1.15.122 → 1.15.126
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/.dynamo/logs/cicd-pipeline/output.log +1896 -1880
- package/.dynamo/logs/cicd-pipeline/status.json +39 -39
- package/build/_collections/signed-url.util.d.ts +85 -0
- package/build/_collections/signed-url.util.d.ts.map +1 -0
- package/build/_collections/signed-url.util.js +146 -0
- package/build/_collections/signed-url.util.js.map +1 -0
- package/build/_models/interfaces/signed-url-verify-result.interface.d.ts +14 -0
- package/build/_models/interfaces/signed-url-verify-result.interface.d.ts.map +1 -0
- package/build/_models/interfaces/signed-url-verify-result.interface.js +3 -0
- package/build/_models/interfaces/signed-url-verify-result.interface.js.map +1 -0
- package/build/index.d.ts +2 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +2 -0
- package/build/index.js.map +1 -1
- package/package.json +1 -10
- package/src/_collections/signed-url.util.spec.ts +198 -0
- package/src/_collections/signed-url.util.ts +170 -0
- package/src/_models/interfaces/signed-url-verify-result.interface.ts +13 -0
- package/src/index.ts +2 -0
- package/build/_modules/ftp/_collections/ftp-url-signer.util.d.ts +0 -37
- package/build/_modules/ftp/_collections/ftp-url-signer.util.d.ts.map +0 -1
- package/build/_modules/ftp/_collections/ftp-url-signer.util.js +0 -57
- package/build/_modules/ftp/_collections/ftp-url-signer.util.js.map +0 -1
- package/build/_modules/ftp/_services/ftp-service.api-service.d.ts +0 -63
- package/build/_modules/ftp/_services/ftp-service.api-service.d.ts.map +0 -1
- package/build/_modules/ftp/_services/ftp-service.api-service.js +0 -84
- package/build/_modules/ftp/_services/ftp-service.api-service.js.map +0 -1
- package/build/_modules/ftp/index.d.ts +0 -3
- package/build/_modules/ftp/index.d.ts.map +0 -1
- package/build/_modules/ftp/index.js +0 -8
- package/build/_modules/ftp/index.js.map +0 -1
- package/src/_modules/ftp/_collections/ftp-url-signer.util.spec.ts +0 -44
- package/src/_modules/ftp/_collections/ftp-url-signer.util.ts +0 -60
- package/src/_modules/ftp/_services/ftp-service.api-service.ts +0 -120
- package/src/_modules/ftp/index.ts +0 -7
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"pid":
|
|
3
|
-
"startedAt": "2026-07-
|
|
4
|
-
"startedAtMs":
|
|
2
|
+
"pid": 31197,
|
|
3
|
+
"startedAt": "2026-07-31T23:13:01.048Z",
|
|
4
|
+
"startedAtMs": 1785539581048,
|
|
5
5
|
"phase": "npm-publish",
|
|
6
6
|
"pipelineComplete": false,
|
|
7
7
|
"serverRunning": false,
|
|
@@ -10,83 +10,83 @@
|
|
|
10
10
|
"steps": {
|
|
11
11
|
"validate-secrets": {
|
|
12
12
|
"status": "ok",
|
|
13
|
-
"startedAt": "2026-07-
|
|
13
|
+
"startedAt": "2026-07-31T23:13:01.067Z",
|
|
14
14
|
"logLineStart": 2,
|
|
15
15
|
"logLineEnd": 8,
|
|
16
16
|
"durationSec": 0.2
|
|
17
17
|
},
|
|
18
18
|
"discord-start": {
|
|
19
19
|
"status": "ok",
|
|
20
|
-
"startedAt": "2026-07-
|
|
20
|
+
"startedAt": "2026-07-31T23:13:02.304Z",
|
|
21
21
|
"logLineStart": 9,
|
|
22
22
|
"logLineEnd": 14,
|
|
23
|
-
"durationSec": 3.
|
|
23
|
+
"durationSec": 3.5
|
|
24
24
|
},
|
|
25
25
|
"pre-flight": {
|
|
26
26
|
"status": "ok",
|
|
27
|
-
"startedAt": "2026-07-
|
|
27
|
+
"startedAt": "2026-07-31T23:13:06.806Z",
|
|
28
28
|
"logLineStart": 15,
|
|
29
29
|
"logLineEnd": 17,
|
|
30
|
-
"durationSec": 0.
|
|
30
|
+
"durationSec": 0.2
|
|
31
31
|
},
|
|
32
32
|
"install": {
|
|
33
33
|
"status": "ok",
|
|
34
|
-
"startedAt": "2026-07-
|
|
34
|
+
"startedAt": "2026-07-31T23:13:08.012Z",
|
|
35
35
|
"logLineStart": 18,
|
|
36
|
-
"logLineEnd":
|
|
37
|
-
"durationSec":
|
|
36
|
+
"logLineEnd": 108,
|
|
37
|
+
"durationSec": 30.3
|
|
38
38
|
},
|
|
39
39
|
"check-dev-leftovers": {
|
|
40
40
|
"status": "ok",
|
|
41
|
-
"startedAt": "2026-07-
|
|
42
|
-
"logLineStart":
|
|
43
|
-
"logLineEnd":
|
|
41
|
+
"startedAt": "2026-07-31T23:13:39.304Z",
|
|
42
|
+
"logLineStart": 109,
|
|
43
|
+
"logLineEnd": 116,
|
|
44
44
|
"durationSec": 3.9
|
|
45
45
|
},
|
|
46
46
|
"build": {
|
|
47
47
|
"status": "ok",
|
|
48
|
-
"startedAt": "2026-07-
|
|
49
|
-
"logLineStart":
|
|
50
|
-
"logLineEnd":
|
|
51
|
-
"durationSec":
|
|
48
|
+
"startedAt": "2026-07-31T23:13:44.252Z",
|
|
49
|
+
"logLineStart": 117,
|
|
50
|
+
"logLineEnd": 118,
|
|
51
|
+
"durationSec": 29.1
|
|
52
52
|
},
|
|
53
53
|
"test": {
|
|
54
54
|
"status": "ok",
|
|
55
|
-
"startedAt": "2026-07-
|
|
56
|
-
"logLineStart":
|
|
57
|
-
"logLineEnd":
|
|
58
|
-
"durationSec":
|
|
55
|
+
"startedAt": "2026-07-31T23:14:14.389Z",
|
|
56
|
+
"logLineStart": 119,
|
|
57
|
+
"logLineEnd": 2855,
|
|
58
|
+
"durationSec": 35.9,
|
|
59
59
|
"testSummary": {
|
|
60
|
-
"totalSpecs":
|
|
60
|
+
"totalSpecs": 1617,
|
|
61
61
|
"failures": 0,
|
|
62
|
-
"passed":
|
|
63
|
-
"testDurationSec": 7.
|
|
62
|
+
"passed": 1617,
|
|
63
|
+
"testDurationSec": 7.051
|
|
64
64
|
},
|
|
65
65
|
"errors": [
|
|
66
66
|
{
|
|
67
|
-
"line":
|
|
68
|
-
"text": "
|
|
69
|
-
"details": "at
|
|
70
|
-
"detailLineEnd":
|
|
67
|
+
"line": 831,
|
|
68
|
+
"text": "[dynts-migration] FAILED bad Error: boom",
|
|
69
|
+
"details": "at Object.run (/tmp/pipeline-runs/9cc87bad-33b8-49e7-ba94-5098b0b8e920/build/_services/core/migration-runner.service.spec.js:67:50)\nat DyNTS_Migration_Runner.runPending (/tmp/pipeline-runs/9cc87bad-33b8-49e7-ba94-5098b0b8e920/build/_services/core/migration-runner.service.js:52:49)\nat async UserContext.<anonymous> (/tmp/pipeline-runs/9cc87bad-33b8-49e7-ba94-5098b0b8e920/build/_services/core/migration-runner.service.spec.js:70:25)",
|
|
70
|
+
"detailLineEnd": 834
|
|
71
71
|
},
|
|
72
72
|
{
|
|
73
|
-
"line":
|
|
74
|
-
"text": "
|
|
75
|
-
"details": "at runNext (/tmp/pipeline-runs/
|
|
76
|
-
"detailLineEnd":
|
|
73
|
+
"line": 1304,
|
|
74
|
+
"text": "(checkDbReadiness) diagnostics collection failed (non-fatal) Error: boom",
|
|
75
|
+
"details": "at runNext (/tmp/pipeline-runs/9cc87bad-33b8-49e7-ba94-5098b0b8e920/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8355:16)\nat /tmp/pipeline-runs/9cc87bad-33b8-49e7-ba94-5098b0b8e920/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8361:11\nat /tmp/pipeline-runs/9cc87bad-33b8-49e7-ba94-5098b0b8e920/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8241:9\nat UserContext.<anonymous> (/tmp/pipeline-runs/9cc87bad-33b8-49e7-ba94-5098b0b8e920/build/_modules/server/server-status/server-status.control-service.spec.js:507:68)\nat QueueRunner.attempt (/tmp/pipeline-runs/9cc87bad-33b8-49e7-ba94-5098b0b8e920/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8414:40)\nat QueueRunner.run (/tmp/pipeline-runs/9cc87bad-33b8-49e7-ba94-5098b0b8e920/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8452:27)\nat runNext (/tmp/pipeline-runs/9cc87bad-33b8-49e7-ba94-5098b0b8e920/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8355:16)\nat /tmp/pipeline-runs/9cc87bad-33b8-49e7-ba94-5098b0b8e920/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8361:11\nat /tmp/pipeline-runs/9cc87bad-33b8-49e7-ba94-5098b0b8e920/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8241:9",
|
|
76
|
+
"detailLineEnd": 1310
|
|
77
77
|
},
|
|
78
78
|
{
|
|
79
|
-
"line":
|
|
80
|
-
"text": "
|
|
81
|
-
"details": "at Object.
|
|
82
|
-
"detailLineEnd":
|
|
79
|
+
"line": 1311,
|
|
80
|
+
"text": "..(checkDbReadiness) diagnostics collection failed (non-fatal) Error: diag boom",
|
|
81
|
+
"details": "at runNext (/tmp/pipeline-runs/9cc87bad-33b8-49e7-ba94-5098b0b8e920/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8355:16)\nat /tmp/pipeline-runs/9cc87bad-33b8-49e7-ba94-5098b0b8e920/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8361:11\nat /tmp/pipeline-runs/9cc87bad-33b8-49e7-ba94-5098b0b8e920/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8241:9\nat Object.get host [as host] (/tmp/pipeline-runs/9cc87bad-33b8-49e7-ba94-5098b0b8e920/build/_modules/server/server-status/server-status.control-service.spec.js:487:36)\nat TestServerStatusControlService.checkDbReadiness (/tmp/pipeline-runs/9cc87bad-33b8-49e7-ba94-5098b0b8e920/build/_modules/server/server-status/server-status.control-service.js:187:29)\nat async UserContext.<anonymous> (/tmp/pipeline-runs/9cc87bad-33b8-49e7-ba94-5098b0b8e920/build/_modules/server/server-status/server-status.control-service.spec.js:490:28)",
|
|
82
|
+
"detailLineEnd": 1314
|
|
83
83
|
}
|
|
84
84
|
]
|
|
85
85
|
},
|
|
86
86
|
"npm-publish": {
|
|
87
87
|
"status": "running",
|
|
88
|
-
"startedAt": "2026-07-
|
|
89
|
-
"logLineStart":
|
|
88
|
+
"startedAt": "2026-07-31T23:14:51.270Z",
|
|
89
|
+
"logLineStart": 2856,
|
|
90
90
|
"logLineEnd": null,
|
|
91
91
|
"durationSec": null
|
|
92
92
|
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { DyNTS_SignedUrl_VerifyResult } from '../_models/interfaces/signed-url-verify-result.interface';
|
|
2
|
+
/**
|
|
3
|
+
* ALÁÍRT-URL primitív (HMAC-SHA256) — a böngésző-kiszolgálás (`<img src>`, nincs Bearer)
|
|
4
|
+
* auth-mechanizmusának generikus magja.
|
|
5
|
+
*
|
|
6
|
+
* A forrás-rendszer (ahol megvan a user auth-kontextusa) aláírja a `path + exp` kanonikus
|
|
7
|
+
* stringet a MEGOSZTOTT titokkal, és egy `…/<path>?exp=<ms>&sig=<hex>` URL-t ad ki; a kiszolgáló
|
|
8
|
+
* oldal ugyanezzel a titokkal validál. Az **aláírás maga a tamper-proof izoláció**: a path
|
|
9
|
+
* bármilyen módosítása érvényteleníti.
|
|
10
|
+
*
|
|
11
|
+
* ⚠️ **A SZERZŐDÉS BITRE KÖTÖTT — nem tervezési szabadság.** Ez az util a ma ÉLŐ algoritmust
|
|
12
|
+
* viszi tovább (az `fdp-ftp-service` verify- és a `master-prompter` sign-oldaláról mérve),
|
|
13
|
+
* hogy a **már kiadott URL-ek** ne romoljanak el:
|
|
14
|
+
*
|
|
15
|
+
* | Elem | Érték |
|
|
16
|
+
* |---|---|
|
|
17
|
+
* | Algoritmus | `HMAC-SHA256(secret, canonicalString)` → **hex** |
|
|
18
|
+
* | Kanonikus string | `` `<normalizedPath>\n<expMs>` `` — csak path + lejárat |
|
|
19
|
+
* | `normalizePath` | vezető `/`-ek le (`/^\/+/`), `\` → `/` |
|
|
20
|
+
* | Query | `?exp=<ms>&sig=<hex>` |
|
|
21
|
+
* | Összevetés | `Crypto.timingSafeEqual`, **előtte hossz-guard** |
|
|
22
|
+
* | Lejárat | `expMs < now` → érvénytelen; **nincs** beépített max-TTL (a hívó dönt) |
|
|
23
|
+
*
|
|
24
|
+
* **Miért `dynamo-nts` és nem `fsm-dynamo`:** node-`crypto` kell (`createHmac` +
|
|
25
|
+
* **`timingSafeEqual`**); izomorf rétegben a timing-safe összevetés elveszne, és a sign/verify
|
|
26
|
+
* két csomagba vágása pont azt a bitre-egyezést veszélyeztetné, amiért ez az util készül.
|
|
27
|
+
*
|
|
28
|
+
* **Két tudatos eltérés a mai duplikátumoktól:**
|
|
29
|
+
* 1. `sign`/`buildSignedUrl` üres secretre **DOB** — a mai forrás-oldal üres stringet ad vissza,
|
|
30
|
+
* ami **csendes hiba**: a hívó észrevétlenül aláírás nélküli URL-t kaphat. A bedrock **hangos**;
|
|
31
|
+
* a fallback-döntés a hívóé, de **tudatosan**.
|
|
32
|
+
* 2. `verify` **SOHA nem dob** — strukturált `{ valid, reason }`-t ad, hogy a gate-ek egységes,
|
|
33
|
+
* szivárgás-mentes választ tudjanak adni.
|
|
34
|
+
*/
|
|
35
|
+
export declare class DyNTS_SignedUrl_Util {
|
|
36
|
+
/**
|
|
37
|
+
* Path normalizálás az aláíráshoz/validáláshoz: vezető `/`-ek le, `\` → `/`.
|
|
38
|
+
* A kanonikus string első fele — a két oldalnak **bit-azonosan** kell normalizálnia.
|
|
39
|
+
*/
|
|
40
|
+
static normalizePath(filePath: string): string;
|
|
41
|
+
/**
|
|
42
|
+
* A HMAC bemenete: `` `<normalizedPath>\n<expMs>` ``.
|
|
43
|
+
* **Publikus**, hogy tesztelhető és auditálható legyen (az arany-vektor erre épül).
|
|
44
|
+
*/
|
|
45
|
+
static buildCanonicalString(filePath: string, expMs: number): string;
|
|
46
|
+
/**
|
|
47
|
+
* HMAC-SHA256 hex digest a kanonikus stringen.
|
|
48
|
+
*
|
|
49
|
+
* @throws `DyNTS-SURL-SIGN-NOSEC` — üres secret *(⚠️ NEM ad csendben üres aláírást)*
|
|
50
|
+
* @throws `DyNTS-SURL-SIGN-BADEXP` — nem-szám / nem-pozitív `expMs`
|
|
51
|
+
*/
|
|
52
|
+
static sign(filePath: string, expMs: number, secret: string): string;
|
|
53
|
+
/**
|
|
54
|
+
* Timing-safe aláírás-ellenőrzés + lejárat. ⚠️ **SOHA nem dob** — a hívó gate-nek egységes,
|
|
55
|
+
* szivárgás-mentes választ kell tudnia adni.
|
|
56
|
+
*
|
|
57
|
+
* `nowMs` injektálható → determinisztikus teszt (nincs `Date.now()` a tesztben).
|
|
58
|
+
*/
|
|
59
|
+
static verify(params: {
|
|
60
|
+
filePath: string;
|
|
61
|
+
expMs: number | undefined;
|
|
62
|
+
signature: string | undefined;
|
|
63
|
+
secret: string;
|
|
64
|
+
nowMs?: number;
|
|
65
|
+
}): DyNTS_SignedUrl_VerifyResult;
|
|
66
|
+
/**
|
|
67
|
+
* Teljes aláírt URL: `` `<base>/<normalizedPath>?exp=<ms>&sig=<hex>` `` — a `base` végi
|
|
68
|
+
* `/`-ei levágva.
|
|
69
|
+
*
|
|
70
|
+
* @throws `DyNTS-SURL-URL-BADBASE` — üres/hibás `baseUrl` *(⚠️ NEM épít félkész URL-t)*
|
|
71
|
+
* @throws `DyNTS-SURL-SIGN-NOSEC` — üres secret
|
|
72
|
+
*/
|
|
73
|
+
static buildSignedUrl(params: {
|
|
74
|
+
baseUrl: string;
|
|
75
|
+
filePath: string;
|
|
76
|
+
ttlMs: number;
|
|
77
|
+
secret: string;
|
|
78
|
+
nowMs?: number;
|
|
79
|
+
}): string;
|
|
80
|
+
/** Üres secret → hangos hiba. ⚠️ A titok SOHA nem kerül a hiba-kontextusba. */
|
|
81
|
+
private static _assertSecret;
|
|
82
|
+
/** Nem-szám / nem-pozitív lejárat → hangos hiba (a csendes `NaN`-os aláírás rosszabb). */
|
|
83
|
+
private static _assertExp;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=signed-url.util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signed-url.util.d.ts","sourceRoot":"","sources":["../../src/_collections/signed-url.util.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,4BAA4B,EAAE,MAAM,0DAA0D,CAAC;AAExG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,qBAAa,oBAAoB;IAE/B;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAI9C;;;OAGG;IACH,MAAM,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAIpE;;;;;OAKG;IACH,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAUpE;;;;;OAKG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;QAC9B,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,4BAA4B;IA6BhC;;;;;;OAMG;IACH,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE;QAC5B,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,MAAM;IAmBV,+EAA+E;IAC/E,OAAO,CAAC,MAAM,CAAC,aAAa;IAW5B,0FAA0F;IAC1F,OAAO,CAAC,MAAM,CAAC,UAAU;CAU1B"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DyNTS_SignedUrl_Util = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const Crypto = tslib_1.__importStar(require("crypto"));
|
|
6
|
+
const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
|
|
7
|
+
/**
|
|
8
|
+
* ALÁÍRT-URL primitív (HMAC-SHA256) — a böngésző-kiszolgálás (`<img src>`, nincs Bearer)
|
|
9
|
+
* auth-mechanizmusának generikus magja.
|
|
10
|
+
*
|
|
11
|
+
* A forrás-rendszer (ahol megvan a user auth-kontextusa) aláírja a `path + exp` kanonikus
|
|
12
|
+
* stringet a MEGOSZTOTT titokkal, és egy `…/<path>?exp=<ms>&sig=<hex>` URL-t ad ki; a kiszolgáló
|
|
13
|
+
* oldal ugyanezzel a titokkal validál. Az **aláírás maga a tamper-proof izoláció**: a path
|
|
14
|
+
* bármilyen módosítása érvényteleníti.
|
|
15
|
+
*
|
|
16
|
+
* ⚠️ **A SZERZŐDÉS BITRE KÖTÖTT — nem tervezési szabadság.** Ez az util a ma ÉLŐ algoritmust
|
|
17
|
+
* viszi tovább (az `fdp-ftp-service` verify- és a `master-prompter` sign-oldaláról mérve),
|
|
18
|
+
* hogy a **már kiadott URL-ek** ne romoljanak el:
|
|
19
|
+
*
|
|
20
|
+
* | Elem | Érték |
|
|
21
|
+
* |---|---|
|
|
22
|
+
* | Algoritmus | `HMAC-SHA256(secret, canonicalString)` → **hex** |
|
|
23
|
+
* | Kanonikus string | `` `<normalizedPath>\n<expMs>` `` — csak path + lejárat |
|
|
24
|
+
* | `normalizePath` | vezető `/`-ek le (`/^\/+/`), `\` → `/` |
|
|
25
|
+
* | Query | `?exp=<ms>&sig=<hex>` |
|
|
26
|
+
* | Összevetés | `Crypto.timingSafeEqual`, **előtte hossz-guard** |
|
|
27
|
+
* | Lejárat | `expMs < now` → érvénytelen; **nincs** beépített max-TTL (a hívó dönt) |
|
|
28
|
+
*
|
|
29
|
+
* **Miért `dynamo-nts` és nem `fsm-dynamo`:** node-`crypto` kell (`createHmac` +
|
|
30
|
+
* **`timingSafeEqual`**); izomorf rétegben a timing-safe összevetés elveszne, és a sign/verify
|
|
31
|
+
* két csomagba vágása pont azt a bitre-egyezést veszélyeztetné, amiért ez az util készül.
|
|
32
|
+
*
|
|
33
|
+
* **Két tudatos eltérés a mai duplikátumoktól:**
|
|
34
|
+
* 1. `sign`/`buildSignedUrl` üres secretre **DOB** — a mai forrás-oldal üres stringet ad vissza,
|
|
35
|
+
* ami **csendes hiba**: a hívó észrevétlenül aláírás nélküli URL-t kaphat. A bedrock **hangos**;
|
|
36
|
+
* a fallback-döntés a hívóé, de **tudatosan**.
|
|
37
|
+
* 2. `verify` **SOHA nem dob** — strukturált `{ valid, reason }`-t ad, hogy a gate-ek egységes,
|
|
38
|
+
* szivárgás-mentes választ tudjanak adni.
|
|
39
|
+
*/
|
|
40
|
+
class DyNTS_SignedUrl_Util {
|
|
41
|
+
/**
|
|
42
|
+
* Path normalizálás az aláíráshoz/validáláshoz: vezető `/`-ek le, `\` → `/`.
|
|
43
|
+
* A kanonikus string első fele — a két oldalnak **bit-azonosan** kell normalizálnia.
|
|
44
|
+
*/
|
|
45
|
+
static normalizePath(filePath) {
|
|
46
|
+
return (filePath ?? '').replace(/^\/+/, '').replace(/\\/g, '/');
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* A HMAC bemenete: `` `<normalizedPath>\n<expMs>` ``.
|
|
50
|
+
* **Publikus**, hogy tesztelhető és auditálható legyen (az arany-vektor erre épül).
|
|
51
|
+
*/
|
|
52
|
+
static buildCanonicalString(filePath, expMs) {
|
|
53
|
+
return `${DyNTS_SignedUrl_Util.normalizePath(filePath)}\n${expMs}`;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* HMAC-SHA256 hex digest a kanonikus stringen.
|
|
57
|
+
*
|
|
58
|
+
* @throws `DyNTS-SURL-SIGN-NOSEC` — üres secret *(⚠️ NEM ad csendben üres aláírást)*
|
|
59
|
+
* @throws `DyNTS-SURL-SIGN-BADEXP` — nem-szám / nem-pozitív `expMs`
|
|
60
|
+
*/
|
|
61
|
+
static sign(filePath, expMs, secret) {
|
|
62
|
+
DyNTS_SignedUrl_Util._assertSecret(secret, filePath);
|
|
63
|
+
DyNTS_SignedUrl_Util._assertExp(expMs, filePath);
|
|
64
|
+
return Crypto
|
|
65
|
+
.createHmac('sha256', secret)
|
|
66
|
+
.update(DyNTS_SignedUrl_Util.buildCanonicalString(filePath, expMs), 'utf8')
|
|
67
|
+
.digest('hex');
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Timing-safe aláírás-ellenőrzés + lejárat. ⚠️ **SOHA nem dob** — a hívó gate-nek egységes,
|
|
71
|
+
* szivárgás-mentes választ kell tudnia adni.
|
|
72
|
+
*
|
|
73
|
+
* `nowMs` injektálható → determinisztikus teszt (nincs `Date.now()` a tesztben).
|
|
74
|
+
*/
|
|
75
|
+
static verify(params) {
|
|
76
|
+
if (!params.secret) {
|
|
77
|
+
return { valid: false, reason: 'missing-secret' };
|
|
78
|
+
}
|
|
79
|
+
if (!params.signature || typeof params.expMs !== 'number' || !Number.isFinite(params.expMs)) {
|
|
80
|
+
return { valid: false, reason: 'missing-params' };
|
|
81
|
+
}
|
|
82
|
+
const now = typeof params.nowMs === 'number' ? params.nowMs : Date.now();
|
|
83
|
+
if (params.expMs < now) {
|
|
84
|
+
return { valid: false, reason: 'expired' };
|
|
85
|
+
}
|
|
86
|
+
const expected = DyNTS_SignedUrl_Util.sign(params.filePath, params.expMs, params.secret);
|
|
87
|
+
// ⚠️ A `timingSafeEqual` ELTÉRŐ HOSSZÚ bufferre DOB — ezért kell a hossz-guard.
|
|
88
|
+
// A hossz nem titok: a hex digest hossza fix.
|
|
89
|
+
const signatureBuffer = Buffer.from(params.signature, 'utf8');
|
|
90
|
+
const expectedBuffer = Buffer.from(expected, 'utf8');
|
|
91
|
+
if (signatureBuffer.length !== expectedBuffer.length) {
|
|
92
|
+
return { valid: false, reason: 'signature-mismatch' };
|
|
93
|
+
}
|
|
94
|
+
if (!Crypto.timingSafeEqual(signatureBuffer, expectedBuffer)) {
|
|
95
|
+
return { valid: false, reason: 'signature-mismatch' };
|
|
96
|
+
}
|
|
97
|
+
return { valid: true };
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Teljes aláírt URL: `` `<base>/<normalizedPath>?exp=<ms>&sig=<hex>` `` — a `base` végi
|
|
101
|
+
* `/`-ei levágva.
|
|
102
|
+
*
|
|
103
|
+
* @throws `DyNTS-SURL-URL-BADBASE` — üres/hibás `baseUrl` *(⚠️ NEM épít félkész URL-t)*
|
|
104
|
+
* @throws `DyNTS-SURL-SIGN-NOSEC` — üres secret
|
|
105
|
+
*/
|
|
106
|
+
static buildSignedUrl(params) {
|
|
107
|
+
const base = (params.baseUrl ?? '').trim().replace(/\/+$/, '');
|
|
108
|
+
if (!base) {
|
|
109
|
+
throw new fsm_dynamo_1.DyFM_Error({
|
|
110
|
+
status: 500,
|
|
111
|
+
errorCode: 'DyNTS-SURL-URL-BADBASE',
|
|
112
|
+
message: 'Signed URL: "baseUrl" is empty or invalid — refusing to build a half-formed URL.',
|
|
113
|
+
additionalContent: { filePath: params.filePath },
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
const now = typeof params.nowMs === 'number' ? params.nowMs : Date.now();
|
|
117
|
+
const expMs = now + params.ttlMs;
|
|
118
|
+
const normalizedPath = DyNTS_SignedUrl_Util.normalizePath(params.filePath);
|
|
119
|
+
const signature = DyNTS_SignedUrl_Util.sign(normalizedPath, expMs, params.secret);
|
|
120
|
+
return `${base}/${normalizedPath}?exp=${expMs}&sig=${signature}`;
|
|
121
|
+
}
|
|
122
|
+
/** Üres secret → hangos hiba. ⚠️ A titok SOHA nem kerül a hiba-kontextusba. */
|
|
123
|
+
static _assertSecret(secret, filePath) {
|
|
124
|
+
if (!secret) {
|
|
125
|
+
throw new fsm_dynamo_1.DyFM_Error({
|
|
126
|
+
status: 500,
|
|
127
|
+
errorCode: 'DyNTS-SURL-SIGN-NOSEC',
|
|
128
|
+
message: 'Signed URL: signing secret is not configured — refusing to sign silently.',
|
|
129
|
+
additionalContent: { filePath: DyNTS_SignedUrl_Util.normalizePath(filePath) },
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/** Nem-szám / nem-pozitív lejárat → hangos hiba (a csendes `NaN`-os aláírás rosszabb). */
|
|
134
|
+
static _assertExp(expMs, filePath) {
|
|
135
|
+
if (typeof expMs !== 'number' || !Number.isFinite(expMs) || expMs <= 0) {
|
|
136
|
+
throw new fsm_dynamo_1.DyFM_Error({
|
|
137
|
+
status: 500,
|
|
138
|
+
errorCode: 'DyNTS-SURL-SIGN-BADEXP',
|
|
139
|
+
message: 'Signed URL: "expMs" must be a finite positive number (epoch millis).',
|
|
140
|
+
additionalContent: { filePath: DyNTS_SignedUrl_Util.normalizePath(filePath), expMs: `${expMs}` },
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
exports.DyNTS_SignedUrl_Util = DyNTS_SignedUrl_Util;
|
|
146
|
+
//# sourceMappingURL=signed-url.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signed-url.util.js","sourceRoot":"","sources":["../../src/_collections/signed-url.util.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Az aláírt-URL ellenőrzés (`DyNTS_SignedUrl_Util.verify`) strukturált eredménye.
|
|
3
|
+
*
|
|
4
|
+
* ⚠️ A `reason` **logba** való — a HTTP-válaszba **NEM** szivárogtatható: az elutasítás oka
|
|
5
|
+
* támadónak információ *(pl. „expired" vs. „signature-mismatch" megkülönböztetése)*.
|
|
6
|
+
*
|
|
7
|
+
* ⭐ **Miért strukturált eredmény és nem kivétel:** a `verify` SOHA nem dob, hogy a hívó gate-ek
|
|
8
|
+
* egységes, szivárgás-mentes választ tudjanak adni — a `reason` a **belső** diagnosztika.
|
|
9
|
+
*/
|
|
10
|
+
export interface DyNTS_SignedUrl_VerifyResult {
|
|
11
|
+
valid: boolean;
|
|
12
|
+
reason?: 'missing-secret' | 'missing-params' | 'expired' | 'signature-mismatch';
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=signed-url-verify-result.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signed-url-verify-result.interface.d.ts","sourceRoot":"","sources":["../../../src/_models/interfaces/signed-url-verify-result.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,SAAS,GAAG,oBAAoB,CAAC;CACjF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signed-url-verify-result.interface.js","sourceRoot":"","sources":["../../../src/_models/interfaces/signed-url-verify-result.interface.ts"],"names":[],"mappings":""}
|
package/build/index.d.ts
CHANGED
|
@@ -15,12 +15,14 @@ export * from './_models/interfaces/environment-settings.interface';
|
|
|
15
15
|
export * from './_models/interfaces/global-service-settings.interface';
|
|
16
16
|
export * from './_models/interfaces/global-settings.interface';
|
|
17
17
|
export * from './_models/interfaces/routing-module-settings.interface';
|
|
18
|
+
export * from './_models/interfaces/signed-url-verify-result.interface';
|
|
18
19
|
export * from './_models/interfaces/static-client-settings.interface';
|
|
19
20
|
export * from './_models/interfaces/cors-settings.interface';
|
|
20
21
|
export * from './_models/interfaces/security-headers-settings.interface';
|
|
21
22
|
export * from './_models/interfaces/db-query-options.interface';
|
|
22
23
|
export * from './_models/interfaces/migration-entry.interface';
|
|
23
24
|
export * from './_collections/security-headers.util';
|
|
25
|
+
export * from './_collections/signed-url.util';
|
|
24
26
|
export * from './_collections/client-safe-error.util';
|
|
25
27
|
export * from './_collections/load-shed.util';
|
|
26
28
|
export * from './_services/core/event-loop-diag.service';
|
package/build/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA2BA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+CAA+C,CAAC;AAC9D,cAAc,qDAAqD,CAAC;AACpE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,0CAA0C,CAAC;AACzD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,sCAAsC,CAAC;AAIrD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,qCAAqC,CAAC;AACpD,cAAc,8BAA8B,CAAC;AAK7C,mEAAmE;AACnE,cAAc,uDAAuD,CAAC;AACtE,cAAc,qDAAqD,CAAC;AACpE,cAAc,wDAAwD,CAAC;AACvE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,wDAAwD,CAAC;AACvE,cAAc,uDAAuD,CAAC;AACtE,cAAc,8CAA8C,CAAC;AAC7D,cAAc,0DAA0D,CAAC;AACzE,cAAc,iDAAiD,CAAC;AAChE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0CAA0C,CAAC;AACzD,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC;AAGrD,cAAc,wDAAwD,CAAC;AACvE,cAAc,gEAAgE,CAAA;AAC9E,cAAc,mDAAmD,CAAC;AAClE,cAAc,4DAA4D,CAAC;AAC3E,cAAc,wDAAwD,CAAC;AACvE,cAAc,sDAAsD,CAAC;AACrE,cAAc,uDAAuD,CAAC;AAGtE,cAAc,gCAAgC,CAAC;AAG/C,cAAc,mDAAmD,CAAC;AAKlE,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAE9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oDAAoD,CAAC;AACnE,cAAc,iCAAiC,CAAC;AAChD,cAAc,uCAAuC,CAAC;AAEtD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,2CAA2C,CAAC;AAG1D,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC;AACtD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yCAAyC,CAAC;AACxD,cAAc,oCAAoC,CAAC;AAGnD,cAAc,+BAA+B,CAAC;AAG9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,0CAA0C,CAAC;AAGzD,cAAc,mCAAmC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA2BA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+CAA+C,CAAC;AAC9D,cAAc,qDAAqD,CAAC;AACpE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,0CAA0C,CAAC;AACzD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,sCAAsC,CAAC;AAIrD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,qCAAqC,CAAC;AACpD,cAAc,8BAA8B,CAAC;AAK7C,mEAAmE;AACnE,cAAc,uDAAuD,CAAC;AACtE,cAAc,qDAAqD,CAAC;AACpE,cAAc,wDAAwD,CAAC;AACvE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,wDAAwD,CAAC;AACvE,cAAc,yDAAyD,CAAC;AACxE,cAAc,uDAAuD,CAAC;AACtE,cAAc,8CAA8C,CAAC;AAC7D,cAAc,0DAA0D,CAAC;AACzE,cAAc,iDAAiD,CAAC;AAChE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uCAAuC,CAAC;AACtD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0CAA0C,CAAC;AACzD,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC;AAGrD,cAAc,wDAAwD,CAAC;AACvE,cAAc,gEAAgE,CAAA;AAC9E,cAAc,mDAAmD,CAAC;AAClE,cAAc,4DAA4D,CAAC;AAC3E,cAAc,wDAAwD,CAAC;AACvE,cAAc,sDAAsD,CAAC;AACrE,cAAc,uDAAuD,CAAC;AAGtE,cAAc,gCAAgC,CAAC;AAG/C,cAAc,mDAAmD,CAAC;AAKlE,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAE9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oDAAoD,CAAC;AACnE,cAAc,iCAAiC,CAAC;AAChD,cAAc,uCAAuC,CAAC;AAEtD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,2CAA2C,CAAC;AAG1D,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC;AACtD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yCAAyC,CAAC;AACxD,cAAc,oCAAoC,CAAC;AAGnD,cAAc,+BAA+B,CAAC;AAG9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,0CAA0C,CAAC;AAGzD,cAAc,mCAAmC,CAAC"}
|
package/build/index.js
CHANGED
|
@@ -44,12 +44,14 @@ tslib_1.__exportStar(require("./_models/interfaces/environment-settings.interfac
|
|
|
44
44
|
tslib_1.__exportStar(require("./_models/interfaces/global-service-settings.interface"), exports);
|
|
45
45
|
tslib_1.__exportStar(require("./_models/interfaces/global-settings.interface"), exports);
|
|
46
46
|
tslib_1.__exportStar(require("./_models/interfaces/routing-module-settings.interface"), exports);
|
|
47
|
+
tslib_1.__exportStar(require("./_models/interfaces/signed-url-verify-result.interface"), exports);
|
|
47
48
|
tslib_1.__exportStar(require("./_models/interfaces/static-client-settings.interface"), exports);
|
|
48
49
|
tslib_1.__exportStar(require("./_models/interfaces/cors-settings.interface"), exports);
|
|
49
50
|
tslib_1.__exportStar(require("./_models/interfaces/security-headers-settings.interface"), exports);
|
|
50
51
|
tslib_1.__exportStar(require("./_models/interfaces/db-query-options.interface"), exports);
|
|
51
52
|
tslib_1.__exportStar(require("./_models/interfaces/migration-entry.interface"), exports);
|
|
52
53
|
tslib_1.__exportStar(require("./_collections/security-headers.util"), exports);
|
|
54
|
+
tslib_1.__exportStar(require("./_collections/signed-url.util"), exports);
|
|
53
55
|
tslib_1.__exportStar(require("./_collections/client-safe-error.util"), exports);
|
|
54
56
|
tslib_1.__exportStar(require("./_collections/load-shed.util"), exports);
|
|
55
57
|
tslib_1.__exportStar(require("./_services/core/event-loop-diag.service"), exports);
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;IAsBI;;;AAEJ,cAAc;AACd,sEAA4C;AAC5C,wFAA8D;AAC9D,8FAAoE;AACpE,sFAA4D;AAC5D,mFAAyD;AACzD,uFAA6D;AAC7D,+EAAqD;AAGrD,QAAQ;AACR,wEAA8C;AAC9C,8EAAoD;AACpD,8EAAoD;AACpD,uEAA6C;AAG7C,6CAA6C;AAE7C,mEAAmE;AACnE,gGAAsE;AACtE,8FAAoE;AACpE,iGAAuE;AACvE,yFAA+D;AAC/D,iGAAuE;AACvE,gGAAsE;AACtE,uFAA6D;AAC7D,mGAAyE;AACzE,0FAAgE;AAChE,yFAA+D;AAC/D,+EAAqD;AACrD,gFAAsD;AACtD,wEAA8C;AAC9C,mFAAyD;AACzD,4EAAkD;AAClD,+EAAqD;AAErD,wBAAwB;AACxB,iGAAuE;AACvE,yGAA8E;AAC9E,4FAAkE;AAClE,qGAA2E;AAC3E,iGAAuE;AACvE,+FAAqE;AACrE,gGAAsE;AAEtE,eAAe;AACf,yEAA+C;AAE/C,qBAAqB;AACrB,4FAAkE;AAGlE,WAAW;AACX,gBAAgB;AAChB,uEAA6C;AAC7C,wEAA8C;AAE9C,yEAA+C;AAC/C,6FAAmE;AACnE,0EAAgD;AAChD,gFAAsD;AAEtD,sFAA4D;AAC5D,oFAA0D;AAE1D,gBAAgB;AAChB,4EAAkD;AAClD,gFAAsD;AACtD,wEAA8C;AAC9C,sEAA4C;AAC5C,kFAAwD;AACxD,6EAAmD;AAEnD,kBAAkB;AAClB,wEAA8C;AAE9C,iBAAiB;AACjB,+EAAqD;AACrD,mFAAyD;AAEzD,kBAAkB;AAClB,4EAAkD"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;IAsBI;;;AAEJ,cAAc;AACd,sEAA4C;AAC5C,wFAA8D;AAC9D,8FAAoE;AACpE,sFAA4D;AAC5D,mFAAyD;AACzD,uFAA6D;AAC7D,+EAAqD;AAGrD,QAAQ;AACR,wEAA8C;AAC9C,8EAAoD;AACpD,8EAAoD;AACpD,uEAA6C;AAG7C,6CAA6C;AAE7C,mEAAmE;AACnE,gGAAsE;AACtE,8FAAoE;AACpE,iGAAuE;AACvE,yFAA+D;AAC/D,iGAAuE;AACvE,kGAAwE;AACxE,gGAAsE;AACtE,uFAA6D;AAC7D,mGAAyE;AACzE,0FAAgE;AAChE,yFAA+D;AAC/D,+EAAqD;AACrD,yEAA+C;AAC/C,gFAAsD;AACtD,wEAA8C;AAC9C,mFAAyD;AACzD,4EAAkD;AAClD,+EAAqD;AAErD,wBAAwB;AACxB,iGAAuE;AACvE,yGAA8E;AAC9E,4FAAkE;AAClE,qGAA2E;AAC3E,iGAAuE;AACvE,+FAAqE;AACrE,gGAAsE;AAEtE,eAAe;AACf,yEAA+C;AAE/C,qBAAqB;AACrB,4FAAkE;AAGlE,WAAW;AACX,gBAAgB;AAChB,uEAA6C;AAC7C,wEAA8C;AAE9C,yEAA+C;AAC/C,6FAAmE;AACnE,0EAAgD;AAChD,gFAAsD;AAEtD,sFAA4D;AAC5D,oFAA0D;AAE1D,gBAAgB;AAChB,4EAAkD;AAClD,gFAAsD;AACtD,wEAA8C;AAC9C,sEAA4C;AAC5C,kFAAwD;AACxD,6EAAmD;AAEnD,kBAAkB;AAClB,wEAA8C;AAE9C,iBAAiB;AACjB,+EAAqD;AACrD,mFAAyD;AAEzD,kBAAkB;AAClB,4EAAkD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@futdevpro/nts-dynamo",
|
|
3
|
-
"version": "01.15.
|
|
3
|
+
"version": "01.15.126",
|
|
4
4
|
"description": "Dynamic NodeTS (NodeJS-Typescript), MongoDB Backend System Framework by Future Development Program Ltd.",
|
|
5
5
|
"DyBu_settings": {
|
|
6
6
|
"packageType": "server-package",
|
|
@@ -271,12 +271,6 @@
|
|
|
271
271
|
"module": "./build/_modules/test-email-sink/index.js",
|
|
272
272
|
"types": "./build/_modules/test-email-sink/index.d.ts",
|
|
273
273
|
"typings": "./build/_modules/test-email-sink/index.d.ts"
|
|
274
|
-
},
|
|
275
|
-
"./ftp": {
|
|
276
|
-
"default": "./build/_modules/ftp/index.js",
|
|
277
|
-
"module": "./build/_modules/ftp/index.js",
|
|
278
|
-
"types": "./build/_modules/ftp/index.d.ts",
|
|
279
|
-
"typings": "./build/_modules/ftp/index.d.ts"
|
|
280
274
|
}
|
|
281
275
|
},
|
|
282
276
|
"typesVersions": {
|
|
@@ -373,9 +367,6 @@
|
|
|
373
367
|
],
|
|
374
368
|
"test-email-sink": [
|
|
375
369
|
"build/_modules/test-email-sink/index.d.ts"
|
|
376
|
-
],
|
|
377
|
-
"ftp": [
|
|
378
|
-
"./build/_modules/ftp/index.d.ts"
|
|
379
370
|
]
|
|
380
371
|
}
|
|
381
372
|
},
|