@astram/guard 0.13.0 → 0.14.0
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/dist/auth/connections.d.ts +2 -2
- package/dist/auth/connections.d.ts.map +1 -1
- package/dist/auth/connections.js +4 -13
- package/dist/config/app-config.d.ts +43 -0
- package/dist/config/app-config.d.ts.map +1 -1
- package/dist/config/app-config.js +92 -1
- package/dist/config/config.module.d.ts.map +1 -1
- package/dist/config/config.module.js +5 -1
- package/dist/config/loopback-host.d.ts +9 -0
- package/dist/config/loopback-host.d.ts.map +1 -0
- package/dist/config/loopback-host.js +19 -0
- package/dist/encryption/local-kek-crypto.d.ts +6 -0
- package/dist/encryption/local-kek-crypto.d.ts.map +1 -1
- package/dist/encryption/local-kek-crypto.js +8 -0
- package/dist/identity/identity-actions.d.ts +18 -7
- package/dist/identity/identity-actions.d.ts.map +1 -1
- package/dist/identity/identity-actions.js +16 -17
- package/dist/identity/module-registry.bridge.d.ts.map +1 -1
- package/dist/identity/module-registry.bridge.js +5 -3
- package/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +52 -22
- package/dist/module/shield-tokens.d.ts +11 -0
- package/dist/module/shield-tokens.d.ts.map +1 -1
- package/dist/module/shield-tokens.js +12 -1
- package/dist/module/shield.module.d.ts +10 -0
- package/dist/module/shield.module.d.ts.map +1 -1
- package/dist/module/shield.module.js +35 -5
- package/dist/secrets/boot-secrets.d.ts +33 -0
- package/dist/secrets/boot-secrets.d.ts.map +1 -0
- package/dist/secrets/boot-secrets.js +180 -0
- package/dist/storage/file-intake.interceptor.d.ts +54 -0
- package/dist/storage/file-intake.interceptor.d.ts.map +1 -0
- package/dist/storage/file-intake.interceptor.js +223 -0
- package/dist/storage/node-sha256-digest.d.ts +6 -0
- package/dist/storage/node-sha256-digest.d.ts.map +1 -0
- package/dist/storage/node-sha256-digest.js +15 -0
- package/dist/storage/object-store-boot-check.d.ts +16 -0
- package/dist/storage/object-store-boot-check.d.ts.map +1 -0
- package/dist/storage/object-store-boot-check.js +52 -0
- package/dist/storage/optional-peer.d.ts +10 -0
- package/dist/storage/optional-peer.d.ts.map +1 -0
- package/dist/storage/optional-peer.js +26 -0
- package/dist/storage/s3-object-store.d.ts +35 -0
- package/dist/storage/s3-object-store.d.ts.map +1 -0
- package/dist/storage/s3-object-store.js +238 -0
- package/dist/storage/storage.providers.d.ts +10 -0
- package/dist/storage/storage.providers.d.ts.map +1 -0
- package/dist/storage/storage.providers.js +104 -0
- package/package.json +11 -3
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.STORAGE_EXPORTS = void 0;
|
|
37
|
+
exports.storageProviders = storageProviders;
|
|
38
|
+
/**
|
|
39
|
+
* `ShieldModule` providers for the `storage` option (FILE_STORAGE SPEC §6):
|
|
40
|
+
* - `SHIELD_OBJECT_STORE`: the given `ObjectStore`, an `S3ObjectStore` built from
|
|
41
|
+
* `OBJECT_STORAGE_*` (`'env'`; `null` when `OBJECT_STORAGE_BUCKET` is unset), or `null` when
|
|
42
|
+
* the option is absent (the `makeAuditSinkProvider` null-binding pattern; callers answer 501).
|
|
43
|
+
* - `SHIELD_FILE_INGEST`: core `createFileIngest` over `NodeSha256Digest`, with the `xlsx`
|
|
44
|
+
* profile (its cap set from `OBJECT_STORAGE_MAX_BYTES` under `'env'`). Always bound.
|
|
45
|
+
* - `ObjectStoreBootCheck`: registered only when the option is given (fail-closed ping at boot).
|
|
46
|
+
*
|
|
47
|
+
* `S3ObjectStore` (and so `@aws-sdk/client-s3`) is loaded lazily, only for `'env'` with a bucket.
|
|
48
|
+
*/
|
|
49
|
+
const node_crypto_1 = require("node:crypto");
|
|
50
|
+
const core_1 = require("@astram/core");
|
|
51
|
+
const app_config_js_1 = require("../config/app-config.js");
|
|
52
|
+
const boot_secrets_js_1 = require("../secrets/boot-secrets.js");
|
|
53
|
+
const shield_tokens_js_1 = require("../module/shield-tokens.js");
|
|
54
|
+
const node_sha256_digest_js_1 = require("./node-sha256-digest.js");
|
|
55
|
+
const object_store_boot_check_js_1 = require("./object-store-boot-check.js");
|
|
56
|
+
/** The tokens `ShieldModule` exports app-wide for the storage option. */
|
|
57
|
+
exports.STORAGE_EXPORTS = [shield_tokens_js_1.SHIELD_OBJECT_STORE, shield_tokens_js_1.SHIELD_FILE_INGEST];
|
|
58
|
+
const STORE_METHODS = ['put', 'get', 'head', 'delete', 'ping'];
|
|
59
|
+
/** Build the storage providers for one `ShieldModule` registration (see the file header). */
|
|
60
|
+
function storageProviders(storage) {
|
|
61
|
+
if (storage !== undefined && storage !== 'env') {
|
|
62
|
+
const s = storage;
|
|
63
|
+
if (STORE_METHODS.some((m) => typeof s?.[m] !== 'function')) {
|
|
64
|
+
throw new Error("ShieldModule: `storage` must be an ObjectStore (put/get/head/delete/ping) or 'env'");
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const configToken = Symbol('SHIELD_OBJECT_STORAGE_CONFIG');
|
|
68
|
+
return [
|
|
69
|
+
{
|
|
70
|
+
provide: configToken,
|
|
71
|
+
useFactory: () => storage === 'env'
|
|
72
|
+
? ((0, app_config_js_1.loadObjectStorageConfig)(process.env, {
|
|
73
|
+
resolvedFromSecretRef: boot_secrets_js_1.wasResolvedFromSecretRef,
|
|
74
|
+
}) ?? null)
|
|
75
|
+
: null,
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
provide: shield_tokens_js_1.SHIELD_OBJECT_STORE,
|
|
79
|
+
useFactory: async (config) => {
|
|
80
|
+
if (storage === undefined)
|
|
81
|
+
return null;
|
|
82
|
+
if (storage !== 'env')
|
|
83
|
+
return storage;
|
|
84
|
+
if (config === null)
|
|
85
|
+
return null;
|
|
86
|
+
const { S3ObjectStore } = await Promise.resolve().then(() => __importStar(require('./s3-object-store.js')));
|
|
87
|
+
return new S3ObjectStore(config);
|
|
88
|
+
},
|
|
89
|
+
inject: [configToken],
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
provide: shield_tokens_js_1.SHIELD_FILE_INGEST,
|
|
93
|
+
useFactory: (config) => (0, core_1.createFileIngest)({
|
|
94
|
+
digest: new node_sha256_digest_js_1.NodeSha256Digest(),
|
|
95
|
+
newId: node_crypto_1.randomUUID,
|
|
96
|
+
profiles: {
|
|
97
|
+
xlsx: config ? { ...core_1.XLSX_PROFILE, maxBytes: config.maxBytes } : core_1.XLSX_PROFILE,
|
|
98
|
+
},
|
|
99
|
+
}),
|
|
100
|
+
inject: [configToken],
|
|
101
|
+
},
|
|
102
|
+
...(storage !== undefined ? [object_store_boot_check_js_1.ObjectStoreBootCheck] : []),
|
|
103
|
+
];
|
|
104
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@astram/guard",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Astram framework — the enforcement guard + real-world adapters (the 'hands'). One global deny-by-default gate every request passes through (ADR-0002), classification decorators, boot-pool assertion (ADR-0018), the forRoot() registration seam, and the DB/Redis/crypto adapters that connect the sealed core to a real backend. Depends on @astram/core (ADR-0003, ADR-0023).",
|
|
6
6
|
"type": "commonjs",
|
|
@@ -32,21 +32,29 @@
|
|
|
32
32
|
"access": "public"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
+
"@aws-sdk/client-s3": "3.1142.0",
|
|
35
36
|
"argon2": "^0.41.1",
|
|
36
37
|
"ioredis": "^5.4.1",
|
|
37
38
|
"mariadb": "^3.5.4",
|
|
38
|
-
"@astram/core": "1.
|
|
39
|
-
"@astram/engine": "0.
|
|
39
|
+
"@astram/core": "1.6.0",
|
|
40
|
+
"@astram/engine": "0.7.0"
|
|
40
41
|
},
|
|
41
42
|
"peerDependencies": {
|
|
42
43
|
"@nestjs/common": "^11",
|
|
43
44
|
"@nestjs/core": "^11",
|
|
45
|
+
"@nestjs/platform-express": "^11",
|
|
44
46
|
"reflect-metadata": "^0.2",
|
|
45
47
|
"rxjs": "^7"
|
|
46
48
|
},
|
|
49
|
+
"peerDependenciesMeta": {
|
|
50
|
+
"@nestjs/platform-express": {
|
|
51
|
+
"optional": true
|
|
52
|
+
}
|
|
53
|
+
},
|
|
47
54
|
"devDependencies": {
|
|
48
55
|
"@nestjs/common": "^11.0.0",
|
|
49
56
|
"@nestjs/core": "^11.0.0",
|
|
57
|
+
"@nestjs/platform-express": "^11.0.0",
|
|
50
58
|
"@nestjs/testing": "^11.0.0",
|
|
51
59
|
"@types/node": "^22.0.0",
|
|
52
60
|
"@types/supertest": "^6.0.2",
|