@heossi/qnsi 0.3.2
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/CHANGELOG.md +67 -0
- package/LICENSE.md +8 -0
- package/README.md +200 -0
- package/dist/_activation/activation-client.d.ts +65 -0
- package/dist/_activation/activation-client.d.ts.map +1 -0
- package/dist/_activation/activation-client.js +164 -0
- package/dist/_activation/activation-client.js.map +1 -0
- package/dist/_activation/index.d.ts +10 -0
- package/dist/_activation/index.d.ts.map +1 -0
- package/dist/_activation/index.js +10 -0
- package/dist/_activation/index.js.map +1 -0
- package/dist/_activation/types.d.ts +128 -0
- package/dist/_activation/types.d.ts.map +1 -0
- package/dist/_activation/types.js +94 -0
- package/dist/_activation/types.js.map +1 -0
- package/dist/_internal.d.ts +52 -0
- package/dist/_internal.d.ts.map +1 -0
- package/dist/_internal.js +235 -0
- package/dist/_internal.js.map +1 -0
- package/dist/access.d.ts +32 -0
- package/dist/access.d.ts.map +1 -0
- package/dist/access.js +33 -0
- package/dist/access.js.map +1 -0
- package/dist/ai.d.ts +51 -0
- package/dist/ai.d.ts.map +1 -0
- package/dist/ai.js +53 -0
- package/dist/ai.js.map +1 -0
- package/dist/audit.d.ts +18 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +21 -0
- package/dist/audit.js.map +1 -0
- package/dist/auth.d.ts +31 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +69 -0
- package/dist/auth.js.map +1 -0
- package/dist/autogen/executor.d.ts +200 -0
- package/dist/autogen/executor.d.ts.map +1 -0
- package/dist/autogen/executor.js +277 -0
- package/dist/autogen/executor.js.map +1 -0
- package/dist/autogen/index.d.ts +18 -0
- package/dist/autogen/index.d.ts.map +1 -0
- package/dist/autogen/index.js +17 -0
- package/dist/autogen/index.js.map +1 -0
- package/dist/billing.d.ts +22 -0
- package/dist/billing.d.ts.map +1 -0
- package/dist/billing.js +33 -0
- package/dist/billing.js.map +1 -0
- package/dist/browser/encrypt.d.ts +68 -0
- package/dist/browser/encrypt.d.ts.map +1 -0
- package/dist/browser/encrypt.js +191 -0
- package/dist/browser/encrypt.js.map +1 -0
- package/dist/browser/index.d.ts +39 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +41 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/noble-provider.d.ts +10 -0
- package/dist/browser/noble-provider.d.ts.map +1 -0
- package/dist/browser/noble-provider.js +130 -0
- package/dist/browser/noble-provider.js.map +1 -0
- package/dist/browser/pqc-types.d.ts +40 -0
- package/dist/browser/pqc-types.d.ts.map +1 -0
- package/dist/browser/pqc-types.js +2 -0
- package/dist/browser/pqc-types.js.map +1 -0
- package/dist/browser/provider-setup.d.ts +70 -0
- package/dist/browser/provider-setup.d.ts.map +1 -0
- package/dist/browser/provider-setup.js +101 -0
- package/dist/browser/provider-setup.js.map +1 -0
- package/dist/browser/sdk-package-version.d.ts +12 -0
- package/dist/browser/sdk-package-version.d.ts.map +1 -0
- package/dist/browser/sdk-package-version.js +12 -0
- package/dist/browser/sdk-package-version.js.map +1 -0
- package/dist/browser/sign.d.ts +65 -0
- package/dist/browser/sign.d.ts.map +1 -0
- package/dist/browser/sign.js +124 -0
- package/dist/browser/sign.js.map +1 -0
- package/dist/browser/telemetry.d.ts +98 -0
- package/dist/browser/telemetry.d.ts.map +1 -0
- package/dist/browser/telemetry.js +93 -0
- package/dist/browser/telemetry.js.map +1 -0
- package/dist/cli/commands/access-control.d.ts +4 -0
- package/dist/cli/commands/access-control.d.ts.map +1 -0
- package/dist/cli/commands/access-control.js +183 -0
- package/dist/cli/commands/access-control.js.map +1 -0
- package/dist/cli/commands/audit.d.ts +4 -0
- package/dist/cli/commands/audit.d.ts.map +1 -0
- package/dist/cli/commands/audit.js +70 -0
- package/dist/cli/commands/audit.js.map +1 -0
- package/dist/cli/commands/auth.d.ts +4 -0
- package/dist/cli/commands/auth.d.ts.map +1 -0
- package/dist/cli/commands/auth.js +46 -0
- package/dist/cli/commands/auth.js.map +1 -0
- package/dist/cli/commands/billing.d.ts +4 -0
- package/dist/cli/commands/billing.d.ts.map +1 -0
- package/dist/cli/commands/billing.js +179 -0
- package/dist/cli/commands/billing.js.map +1 -0
- package/dist/cli/commands/crypto-policy.d.ts +4 -0
- package/dist/cli/commands/crypto-policy.d.ts.map +1 -0
- package/dist/cli/commands/crypto-policy.js +130 -0
- package/dist/cli/commands/crypto-policy.js.map +1 -0
- package/dist/cli/commands/kms.d.ts +4 -0
- package/dist/cli/commands/kms.d.ts.map +1 -0
- package/dist/cli/commands/kms.js +153 -0
- package/dist/cli/commands/kms.js.map +1 -0
- package/dist/cli/commands/observability.d.ts +4 -0
- package/dist/cli/commands/observability.d.ts.map +1 -0
- package/dist/cli/commands/observability.js +97 -0
- package/dist/cli/commands/observability.js.map +1 -0
- package/dist/cli/commands/search.d.ts +4 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +66 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/security.d.ts +4 -0
- package/dist/cli/commands/security.d.ts.map +1 -0
- package/dist/cli/commands/security.js +136 -0
- package/dist/cli/commands/security.js.map +1 -0
- package/dist/cli/commands/storage.d.ts +4 -0
- package/dist/cli/commands/storage.d.ts.map +1 -0
- package/dist/cli/commands/storage.js +85 -0
- package/dist/cli/commands/storage.js.map +1 -0
- package/dist/cli/commands/tenant.d.ts +4 -0
- package/dist/cli/commands/tenant.d.ts.map +1 -0
- package/dist/cli/commands/tenant.js +82 -0
- package/dist/cli/commands/tenant.js.map +1 -0
- package/dist/cli/commands/test-utils.d.ts +15 -0
- package/dist/cli/commands/test-utils.d.ts.map +1 -0
- package/dist/cli/commands/test-utils.js +72 -0
- package/dist/cli/commands/test-utils.js.map +1 -0
- package/dist/cli/commands/vault.d.ts +4 -0
- package/dist/cli/commands/vault.d.ts.map +1 -0
- package/dist/cli/commands/vault.js +111 -0
- package/dist/cli/commands/vault.js.map +1 -0
- package/dist/cli/config.d.ts +32 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +105 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +54 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils/audit-logger.d.ts +17 -0
- package/dist/cli/utils/audit-logger.d.ts.map +1 -0
- package/dist/cli/utils/audit-logger.js +52 -0
- package/dist/cli/utils/audit-logger.js.map +1 -0
- package/dist/cli/utils/auth.d.ts +4 -0
- package/dist/cli/utils/auth.d.ts.map +1 -0
- package/dist/cli/utils/auth.js +100 -0
- package/dist/cli/utils/auth.js.map +1 -0
- package/dist/cli/utils/backend-validator.d.ts +19 -0
- package/dist/cli/utils/backend-validator.d.ts.map +1 -0
- package/dist/cli/utils/backend-validator.js +72 -0
- package/dist/cli/utils/backend-validator.js.map +1 -0
- package/dist/cli/utils/command-config.d.ts +4 -0
- package/dist/cli/utils/command-config.d.ts.map +1 -0
- package/dist/cli/utils/command-config.js +29 -0
- package/dist/cli/utils/command-config.js.map +1 -0
- package/dist/cli/utils/fetcher.d.ts +3 -0
- package/dist/cli/utils/fetcher.d.ts.map +1 -0
- package/dist/cli/utils/fetcher.js +30 -0
- package/dist/cli/utils/fetcher.js.map +1 -0
- package/dist/cli/utils/https-validator.d.ts +9 -0
- package/dist/cli/utils/https-validator.d.ts.map +1 -0
- package/dist/cli/utils/https-validator.js +35 -0
- package/dist/cli/utils/https-validator.js.map +1 -0
- package/dist/cli/utils/output.d.ts +6 -0
- package/dist/cli/utils/output.d.ts.map +1 -0
- package/dist/cli/utils/output.js +29 -0
- package/dist/cli/utils/output.js.map +1 -0
- package/dist/cli/utils/pqc-validator.d.ts +17 -0
- package/dist/cli/utils/pqc-validator.d.ts.map +1 -0
- package/dist/cli/utils/pqc-validator.js +62 -0
- package/dist/cli/utils/pqc-validator.js.map +1 -0
- package/dist/cli/utils/prompt.d.ts +4 -0
- package/dist/cli/utils/prompt.d.ts.map +1 -0
- package/dist/cli/utils/prompt.js +30 -0
- package/dist/cli/utils/prompt.js.map +1 -0
- package/dist/cli/utils/rate-limiter.d.ts +15 -0
- package/dist/cli/utils/rate-limiter.d.ts.map +1 -0
- package/dist/cli/utils/rate-limiter.js +46 -0
- package/dist/cli/utils/rate-limiter.js.map +1 -0
- package/dist/cli/utils/sanitize.d.ts +3 -0
- package/dist/cli/utils/sanitize.d.ts.map +1 -0
- package/dist/cli/utils/sanitize.js +44 -0
- package/dist/cli/utils/sanitize.js.map +1 -0
- package/dist/cli/utils/security-headers.d.ts +18 -0
- package/dist/cli/utils/security-headers.d.ts.map +1 -0
- package/dist/cli/utils/security-headers.js +32 -0
- package/dist/cli/utils/security-headers.js.map +1 -0
- package/dist/cli/utils/token-cache.d.ts +4 -0
- package/dist/cli/utils/token-cache.d.ts.map +1 -0
- package/dist/cli/utils/token-cache.js +22 -0
- package/dist/cli/utils/token-cache.js.map +1 -0
- package/dist/client.d.ts +52 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +78 -0
- package/dist/client.js.map +1 -0
- package/dist/crypto-inventory.d.ts +21 -0
- package/dist/crypto-inventory.d.ts.map +1 -0
- package/dist/crypto-inventory.js +28 -0
- package/dist/crypto-inventory.js.map +1 -0
- package/dist/errors.d.ts +35 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +64 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +50 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +51 -0
- package/dist/index.js.map +1 -0
- package/dist/kms.d.ts +30 -0
- package/dist/kms.d.ts.map +1 -0
- package/dist/kms.js +92 -0
- package/dist/kms.js.map +1 -0
- package/dist/langchain/index.d.ts +22 -0
- package/dist/langchain/index.d.ts.map +1 -0
- package/dist/langchain/index.js +23 -0
- package/dist/langchain/index.js.map +1 -0
- package/dist/langchain/toolkit.d.ts +85 -0
- package/dist/langchain/toolkit.d.ts.map +1 -0
- package/dist/langchain/toolkit.js +146 -0
- package/dist/langchain/toolkit.js.map +1 -0
- package/dist/langchain/tools/audit.d.ts +43 -0
- package/dist/langchain/tools/audit.d.ts.map +1 -0
- package/dist/langchain/tools/audit.js +78 -0
- package/dist/langchain/tools/audit.js.map +1 -0
- package/dist/langchain/tools/kms.d.ts +62 -0
- package/dist/langchain/tools/kms.d.ts.map +1 -0
- package/dist/langchain/tools/kms.js +120 -0
- package/dist/langchain/tools/kms.js.map +1 -0
- package/dist/langchain/tools/vault.d.ts +69 -0
- package/dist/langchain/tools/vault.d.ts.map +1 -0
- package/dist/langchain/tools/vault.js +107 -0
- package/dist/langchain/tools/vault.js.map +1 -0
- package/dist/langchain/vault-client.d.ts +82 -0
- package/dist/langchain/vault-client.d.ts.map +1 -0
- package/dist/langchain/vault-client.js +133 -0
- package/dist/langchain/vault-client.js.map +1 -0
- package/dist/llamaindex/index.d.ts +16 -0
- package/dist/llamaindex/index.d.ts.map +1 -0
- package/dist/llamaindex/index.js +15 -0
- package/dist/llamaindex/index.js.map +1 -0
- package/dist/llamaindex/sse.d.ts +36 -0
- package/dist/llamaindex/sse.d.ts.map +1 -0
- package/dist/llamaindex/sse.js +151 -0
- package/dist/llamaindex/sse.js.map +1 -0
- package/dist/llamaindex/vector-store.d.ts +101 -0
- package/dist/llamaindex/vector-store.d.ts.map +1 -0
- package/dist/llamaindex/vector-store.js +348 -0
- package/dist/llamaindex/vector-store.js.map +1 -0
- package/dist/search.d.ts +32 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +27 -0
- package/dist/search.js.map +1 -0
- package/dist/storage.d.ts +32 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +58 -0
- package/dist/storage.js.map +1 -0
- package/dist/tenant.d.ts +25 -0
- package/dist/tenant.d.ts.map +1 -0
- package/dist/tenant.js +36 -0
- package/dist/tenant.js.map +1 -0
- package/dist/vault.d.ts +22 -0
- package/dist/vault.d.ts.map +1 -0
- package/dist/vault.js +43 -0
- package/dist/vault.js.map +1 -0
- package/dist/webhooks.d.ts +32 -0
- package/dist/webhooks.d.ts.map +1 -0
- package/dist/webhooks.js +77 -0
- package/dist/webhooks.js.map +1 -0
- package/package.json +118 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PQC digital signature helpers for browser-side operations.
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - ML-DSA (FIPS 204): dilithium-2, dilithium-3, dilithium-5
|
|
6
|
+
* - SLH-DSA (FIPS 205): all 12 parameter sets (SHA-2 and SHAKE variants)
|
|
7
|
+
*
|
|
8
|
+
* No node: imports. Works in browsers, Deno, Bun, and Node.js 20+.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
import { getActiveProvider } from "./provider-setup.js";
|
|
13
|
+
/** Signature algorithms supported by the noble provider. */
|
|
14
|
+
const SIG_ALGORITHMS = new Set([
|
|
15
|
+
"dilithium-2",
|
|
16
|
+
"dilithium-3",
|
|
17
|
+
"dilithium-5",
|
|
18
|
+
"sphincs-sha2-128f-simple",
|
|
19
|
+
"sphincs-sha2-128s-simple",
|
|
20
|
+
"sphincs-sha2-192f-simple",
|
|
21
|
+
"sphincs-sha2-192s-simple",
|
|
22
|
+
"sphincs-sha2-256f-simple",
|
|
23
|
+
"sphincs-sha2-256s-simple",
|
|
24
|
+
"sphincs-shake-128f-simple",
|
|
25
|
+
"sphincs-shake-128s-simple",
|
|
26
|
+
"sphincs-shake-192f-simple",
|
|
27
|
+
"sphincs-shake-192s-simple",
|
|
28
|
+
"sphincs-shake-256f-simple",
|
|
29
|
+
"sphincs-shake-256s-simple",
|
|
30
|
+
]);
|
|
31
|
+
/**
|
|
32
|
+
* Sign data using a PQC signature algorithm.
|
|
33
|
+
*
|
|
34
|
+
* @param data - Data to sign
|
|
35
|
+
* @param privateKey - Signer's PQC private key
|
|
36
|
+
* @param algorithm - Signature algorithm (ML-DSA or SLH-DSA)
|
|
37
|
+
* @returns Signed envelope containing signature + original data
|
|
38
|
+
*/
|
|
39
|
+
export async function signData(data, privateKey, algorithm) {
|
|
40
|
+
if (!SIG_ALGORITHMS.has(algorithm)) {
|
|
41
|
+
throw new Error(`Algorithm '${algorithm}' is not a supported signature algorithm. ` +
|
|
42
|
+
`Supported: ${[...SIG_ALGORITHMS].join(", ")}`);
|
|
43
|
+
}
|
|
44
|
+
if (data.length === 0) {
|
|
45
|
+
throw new Error("Data must not be empty");
|
|
46
|
+
}
|
|
47
|
+
if (privateKey.length === 0) {
|
|
48
|
+
throw new Error("Private key must not be empty");
|
|
49
|
+
}
|
|
50
|
+
const provider = getActiveProvider();
|
|
51
|
+
const { signature } = await provider.sign({
|
|
52
|
+
algorithm,
|
|
53
|
+
data,
|
|
54
|
+
privateKey,
|
|
55
|
+
});
|
|
56
|
+
return {
|
|
57
|
+
algorithm,
|
|
58
|
+
signature: new Uint8Array(signature),
|
|
59
|
+
data: new Uint8Array(data),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Verify a PQC digital signature.
|
|
64
|
+
*
|
|
65
|
+
* @param data - Original data that was signed
|
|
66
|
+
* @param signature - The signature to verify
|
|
67
|
+
* @param publicKey - Signer's PQC public key
|
|
68
|
+
* @param algorithm - Signature algorithm used
|
|
69
|
+
* @returns true if the signature is valid, false otherwise
|
|
70
|
+
*/
|
|
71
|
+
export async function verifySignature(data, signature, publicKey, algorithm) {
|
|
72
|
+
if (!SIG_ALGORITHMS.has(algorithm)) {
|
|
73
|
+
throw new Error(`Algorithm '${algorithm}' is not a supported signature algorithm. ` +
|
|
74
|
+
`Supported: ${[...SIG_ALGORITHMS].join(", ")}`);
|
|
75
|
+
}
|
|
76
|
+
if (data.length === 0) {
|
|
77
|
+
throw new Error("Data must not be empty");
|
|
78
|
+
}
|
|
79
|
+
if (signature.length === 0) {
|
|
80
|
+
throw new Error("Signature must not be empty");
|
|
81
|
+
}
|
|
82
|
+
if (publicKey.length === 0) {
|
|
83
|
+
throw new Error("Public key must not be empty");
|
|
84
|
+
}
|
|
85
|
+
const provider = getActiveProvider();
|
|
86
|
+
return provider.verify({
|
|
87
|
+
algorithm,
|
|
88
|
+
data,
|
|
89
|
+
signature,
|
|
90
|
+
publicKey,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Generate a PQC key pair for signing operations.
|
|
95
|
+
*
|
|
96
|
+
* @param algorithm - Signature algorithm (ML-DSA or SLH-DSA)
|
|
97
|
+
* @returns Key pair with public and private keys
|
|
98
|
+
*/
|
|
99
|
+
export async function generateSigningKeyPair(algorithm) {
|
|
100
|
+
if (!SIG_ALGORITHMS.has(algorithm)) {
|
|
101
|
+
throw new Error(`Algorithm '${algorithm}' is not a supported signature algorithm. ` +
|
|
102
|
+
`Supported: ${[...SIG_ALGORITHMS].join(", ")}`);
|
|
103
|
+
}
|
|
104
|
+
const provider = getActiveProvider();
|
|
105
|
+
const { keyPair } = await provider.generateKeyPair({ algorithm });
|
|
106
|
+
return keyPair;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Generate a PQC key pair for KEM (encryption) operations.
|
|
110
|
+
*
|
|
111
|
+
* @param algorithm - KEM algorithm (kyber-512, kyber-768, kyber-1024)
|
|
112
|
+
* @returns Key pair with public and private keys
|
|
113
|
+
*/
|
|
114
|
+
export async function generateEncryptionKeyPair(algorithm) {
|
|
115
|
+
const KEM_ALGORITHMS = new Set(["kyber-512", "kyber-768", "kyber-1024"]);
|
|
116
|
+
if (!KEM_ALGORITHMS.has(algorithm)) {
|
|
117
|
+
throw new Error(`Algorithm '${algorithm}' is not a supported KEM algorithm. ` +
|
|
118
|
+
`Supported: ${[...KEM_ALGORITHMS].join(", ")}`);
|
|
119
|
+
}
|
|
120
|
+
const provider = getActiveProvider();
|
|
121
|
+
const { keyPair } = await provider.generateKeyPair({ algorithm });
|
|
122
|
+
return keyPair;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=sign.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sign.js","sourceRoot":"","sources":["../../src/browser/sign.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser SDK Telemetry
|
|
3
|
+
*
|
|
4
|
+
* Lightweight, privacy-respecting telemetry for the @heossi/qnsi-browser.
|
|
5
|
+
* Tracks usage patterns (algorithm choices, operation counts, errors) without
|
|
6
|
+
* collecting PII or cryptographic material.
|
|
7
|
+
*
|
|
8
|
+
* Telemetry is opt-in: callers must explicitly configure a handler via
|
|
9
|
+
* `configureTelemetry()`. No data is sent anywhere by default.
|
|
10
|
+
*
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* A single telemetry event emitted by the browser-sdk.
|
|
15
|
+
*/
|
|
16
|
+
export interface BrowserSdkTelemetryEvent {
|
|
17
|
+
/** Operation type: "encrypt", "decrypt", "sign", "verify", "keygen", "init" */
|
|
18
|
+
readonly operation: string;
|
|
19
|
+
/** PQC algorithm used (e.g., "kyber-768", "dilithium-3") */
|
|
20
|
+
readonly algorithm: string;
|
|
21
|
+
/** Duration of the operation in milliseconds */
|
|
22
|
+
readonly durationMs: number;
|
|
23
|
+
/** Whether the operation succeeded */
|
|
24
|
+
readonly success: boolean;
|
|
25
|
+
/** Error message if the operation failed (no stack traces) */
|
|
26
|
+
readonly error?: string;
|
|
27
|
+
/** Runtime environment: "browser", "node", "edge" */
|
|
28
|
+
readonly runtime: string;
|
|
29
|
+
/** ISO 8601 timestamp */
|
|
30
|
+
readonly timestamp: string;
|
|
31
|
+
/** SDK version */
|
|
32
|
+
readonly sdkVersion: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Configuration for browser-sdk telemetry.
|
|
36
|
+
*/
|
|
37
|
+
export interface BrowserSdkTelemetryConfig {
|
|
38
|
+
/**
|
|
39
|
+
* Whether telemetry is enabled. Defaults to false.
|
|
40
|
+
* When false, no events are recorded or emitted.
|
|
41
|
+
*/
|
|
42
|
+
readonly enabled: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Custom handler invoked for each telemetry event.
|
|
45
|
+
* Use this to send events to your analytics backend, log them, or batch them.
|
|
46
|
+
*
|
|
47
|
+
* The handler receives a single event and should not throw.
|
|
48
|
+
* If the handler throws, the error is silently ignored to avoid
|
|
49
|
+
* disrupting cryptographic operations.
|
|
50
|
+
*/
|
|
51
|
+
readonly onEvent: (event: BrowserSdkTelemetryEvent) => void;
|
|
52
|
+
/**
|
|
53
|
+
* Optional flush handler invoked when `flushTelemetry()` is called.
|
|
54
|
+
* Use this to send any batched events to your backend.
|
|
55
|
+
*/
|
|
56
|
+
readonly onFlush?: () => void | Promise<void>;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Configure telemetry for the browser-sdk.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```ts
|
|
63
|
+
* configureTelemetry({
|
|
64
|
+
* enabled: true,
|
|
65
|
+
* onEvent: (event) => {
|
|
66
|
+
* // Send to your analytics endpoint
|
|
67
|
+
* navigator.sendBeacon("/analytics", JSON.stringify(event));
|
|
68
|
+
* },
|
|
69
|
+
* });
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
export declare function configureTelemetry(config: BrowserSdkTelemetryConfig): void;
|
|
73
|
+
/**
|
|
74
|
+
* Get the current telemetry configuration.
|
|
75
|
+
* Returns null if telemetry has not been configured.
|
|
76
|
+
*/
|
|
77
|
+
export declare function getTelemetryConfig(): BrowserSdkTelemetryConfig | null;
|
|
78
|
+
/**
|
|
79
|
+
* Check if telemetry is currently enabled.
|
|
80
|
+
*/
|
|
81
|
+
export declare function isTelemetryEnabled(): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Record a telemetry event. No-op if telemetry is not configured or disabled.
|
|
84
|
+
*
|
|
85
|
+
* This function never throws — errors in the telemetry handler are silently
|
|
86
|
+
* swallowed to avoid disrupting cryptographic operations.
|
|
87
|
+
*/
|
|
88
|
+
export declare function recordTelemetryEvent(operation: string, algorithm: string, durationMs: number, success: boolean, runtime: string, error?: string): void;
|
|
89
|
+
/**
|
|
90
|
+
* Flush any batched telemetry events. No-op if telemetry is not configured,
|
|
91
|
+
* disabled, or no flush handler is set.
|
|
92
|
+
*/
|
|
93
|
+
export declare function flushTelemetry(): Promise<void>;
|
|
94
|
+
/**
|
|
95
|
+
* Reset telemetry configuration. Primarily for testing.
|
|
96
|
+
*/
|
|
97
|
+
export declare function resetTelemetry(): void;
|
|
98
|
+
//# sourceMappingURL=telemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/browser/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACxC,+EAA+E;IAC/E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,4DAA4D;IAC5D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,gDAAgD;IAChD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,sCAAsC;IACtC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,qDAAqD;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,yBAAyB;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,kBAAkB;IAClB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACzC;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,IAAI,CAAC;IAE5D;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C;AAID;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,yBAAyB,GAAG,IAAI,CAE1E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,yBAAyB,GAAG,IAAI,CAErE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CACnC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,GACZ,IAAI,CAqBN;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAUpD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAErC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser SDK Telemetry
|
|
3
|
+
*
|
|
4
|
+
* Lightweight, privacy-respecting telemetry for the @heossi/qnsi-browser.
|
|
5
|
+
* Tracks usage patterns (algorithm choices, operation counts, errors) without
|
|
6
|
+
* collecting PII or cryptographic material.
|
|
7
|
+
*
|
|
8
|
+
* Telemetry is opt-in: callers must explicitly configure a handler via
|
|
9
|
+
* `configureTelemetry()`. No data is sent anywhere by default.
|
|
10
|
+
*
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
13
|
+
import { SDK_PACKAGE_VERSION } from "./sdk-package-version.js";
|
|
14
|
+
let telemetryConfig = null;
|
|
15
|
+
/**
|
|
16
|
+
* Configure telemetry for the browser-sdk.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* configureTelemetry({
|
|
21
|
+
* enabled: true,
|
|
22
|
+
* onEvent: (event) => {
|
|
23
|
+
* // Send to your analytics endpoint
|
|
24
|
+
* navigator.sendBeacon("/analytics", JSON.stringify(event));
|
|
25
|
+
* },
|
|
26
|
+
* });
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export function configureTelemetry(config) {
|
|
30
|
+
telemetryConfig = config;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get the current telemetry configuration.
|
|
34
|
+
* Returns null if telemetry has not been configured.
|
|
35
|
+
*/
|
|
36
|
+
export function getTelemetryConfig() {
|
|
37
|
+
return telemetryConfig;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Check if telemetry is currently enabled.
|
|
41
|
+
*/
|
|
42
|
+
export function isTelemetryEnabled() {
|
|
43
|
+
return telemetryConfig?.enabled ?? false;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Record a telemetry event. No-op if telemetry is not configured or disabled.
|
|
47
|
+
*
|
|
48
|
+
* This function never throws — errors in the telemetry handler are silently
|
|
49
|
+
* swallowed to avoid disrupting cryptographic operations.
|
|
50
|
+
*/
|
|
51
|
+
export function recordTelemetryEvent(operation, algorithm, durationMs, success, runtime, error) {
|
|
52
|
+
if (!telemetryConfig?.enabled) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const event = {
|
|
56
|
+
operation,
|
|
57
|
+
algorithm,
|
|
58
|
+
durationMs,
|
|
59
|
+
success,
|
|
60
|
+
runtime,
|
|
61
|
+
timestamp: new Date().toISOString(),
|
|
62
|
+
sdkVersion: SDK_PACKAGE_VERSION,
|
|
63
|
+
...(error !== undefined ? { error } : {}),
|
|
64
|
+
};
|
|
65
|
+
try {
|
|
66
|
+
telemetryConfig.onEvent(event);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// Silently ignore telemetry handler errors
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Flush any batched telemetry events. No-op if telemetry is not configured,
|
|
74
|
+
* disabled, or no flush handler is set.
|
|
75
|
+
*/
|
|
76
|
+
export async function flushTelemetry() {
|
|
77
|
+
if (!telemetryConfig?.enabled || !telemetryConfig.onFlush) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
await telemetryConfig.onFlush();
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// Silently ignore flush errors
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Reset telemetry configuration. Primarily for testing.
|
|
89
|
+
*/
|
|
90
|
+
export function resetTelemetry() {
|
|
91
|
+
telemetryConfig = null;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/browser/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAmD/D,IAAI,eAAe,GAAqC,IAAI,CAAC;AAE7D;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAiC;IACnE,eAAe,GAAG,MAAM,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IACjC,OAAO,eAAe,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IACjC,OAAO,eAAe,EAAE,OAAO,IAAI,KAAK,CAAC;AAC1C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CACnC,SAAiB,EACjB,SAAiB,EACjB,UAAkB,EAClB,OAAgB,EAChB,OAAe,EACf,KAAc;IAEd,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,CAAC;QAC/B,OAAO;IACR,CAAC;IAED,MAAM,KAAK,GAA6B;QACvC,SAAS;QACT,SAAS;QACT,UAAU;QACV,OAAO;QACP,OAAO;QACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,UAAU,EAAE,mBAAmB;QAC/B,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzC,CAAC;IAEF,IAAI,CAAC;QACJ,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACR,2CAA2C;IAC5C,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IACnC,IAAI,CAAC,eAAe,EAAE,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;QAC3D,OAAO;IACR,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,eAAe,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACR,+BAA+B;IAChC,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC7B,eAAe,GAAG,IAAI,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access-control.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/access-control.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAO9C,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAkMvF"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { EXIT_CODES } from "../config.js";
|
|
2
|
+
import { getAuthHeaders } from "../utils/auth.js";
|
|
3
|
+
import { getEffectiveConfig } from "../utils/command-config.js";
|
|
4
|
+
import { fetchWithBackendHandling } from "../utils/fetcher.js";
|
|
5
|
+
import { printError, printJson, printSuccess, printTable } from "../utils/output.js";
|
|
6
|
+
export function registerAccessControlCommands(program, config) {
|
|
7
|
+
const access = program.command("access").description("Access control service commands");
|
|
8
|
+
const policies = access.command("policies").description("Policy management");
|
|
9
|
+
policies
|
|
10
|
+
.command("list")
|
|
11
|
+
.description("List access policies")
|
|
12
|
+
.option("--limit <number>", "Number of policies to return", "100")
|
|
13
|
+
.option("--cursor <cursor>", "Pagination cursor")
|
|
14
|
+
.action(async (options, command) => {
|
|
15
|
+
if (!config.tenantId) {
|
|
16
|
+
printError("QNSP_TENANT_ID must be set");
|
|
17
|
+
process.exit(EXIT_CODES.INVALID_ARGUMENTS);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
const effectiveConfig = getEffectiveConfig(config, command);
|
|
22
|
+
if (!effectiveConfig.tenantId) {
|
|
23
|
+
printError("QNSP_TENANT_ID must be set");
|
|
24
|
+
process.exit(EXIT_CODES.INVALID_ARGUMENTS);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const headers = await getAuthHeaders(effectiveConfig);
|
|
28
|
+
const accessUrl = effectiveConfig.accessControlServiceUrl;
|
|
29
|
+
const url = new URL(`${accessUrl}/access/v1/tenants/${effectiveConfig.tenantId}/policies`);
|
|
30
|
+
url.searchParams.set("limit", options.limit);
|
|
31
|
+
if (options.cursor) {
|
|
32
|
+
url.searchParams.set("cursor", options.cursor);
|
|
33
|
+
}
|
|
34
|
+
const response = await fetchWithBackendHandling(effectiveConfig, url.toString(), {
|
|
35
|
+
headers,
|
|
36
|
+
});
|
|
37
|
+
if (!response.ok && [429, 402, 403, 507].includes(response.status)) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (!response.ok) {
|
|
41
|
+
const errorText = await response.text();
|
|
42
|
+
printError(`Failed to list policies: ${response.status} ${errorText}`);
|
|
43
|
+
process.exit(EXIT_CODES.GENERAL_ERROR);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const data = (await response.json());
|
|
47
|
+
if (effectiveConfig.outputFormat === "json") {
|
|
48
|
+
printJson(data);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
printTable((data.items ?? []));
|
|
52
|
+
}
|
|
53
|
+
process.exit(EXIT_CODES.SUCCESS);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
printError(error instanceof Error ? error.message : "Failed to list policies");
|
|
58
|
+
process.exit(EXIT_CODES.NETWORK_ERROR);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
policies
|
|
63
|
+
.command("get")
|
|
64
|
+
.description("Get policy details")
|
|
65
|
+
.argument("<policyId>", "Policy identifier")
|
|
66
|
+
.action(async (policyId, _options, command) => {
|
|
67
|
+
if (!config.tenantId) {
|
|
68
|
+
printError("QNSP_TENANT_ID must be set");
|
|
69
|
+
process.exit(EXIT_CODES.INVALID_ARGUMENTS);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
const effectiveConfig = getEffectiveConfig(config, command);
|
|
74
|
+
if (!effectiveConfig.tenantId) {
|
|
75
|
+
printError("QNSP_TENANT_ID must be set");
|
|
76
|
+
process.exit(EXIT_CODES.INVALID_ARGUMENTS);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const headers = await getAuthHeaders(effectiveConfig);
|
|
80
|
+
const accessUrl = effectiveConfig.accessControlServiceUrl;
|
|
81
|
+
const url = new URL(`${accessUrl}/access/v1/policies/${policyId}`);
|
|
82
|
+
const response = await fetchWithBackendHandling(effectiveConfig, url.toString(), {
|
|
83
|
+
headers,
|
|
84
|
+
});
|
|
85
|
+
if (!response.ok && [429, 402, 403, 507].includes(response.status)) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
if (response.status === 404) {
|
|
89
|
+
printError(`Policy not found: ${policyId}`);
|
|
90
|
+
process.exit(EXIT_CODES.NOT_FOUND);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (!response.ok) {
|
|
94
|
+
const errorText = await response.text();
|
|
95
|
+
printError(`Failed to get policy: ${response.status} ${errorText}`);
|
|
96
|
+
process.exit(EXIT_CODES.GENERAL_ERROR);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const data = await response.json();
|
|
100
|
+
if (effectiveConfig.outputFormat === "json") {
|
|
101
|
+
printJson(data);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
printTable(data);
|
|
105
|
+
}
|
|
106
|
+
process.exit(EXIT_CODES.SUCCESS);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
printError(error instanceof Error ? error.message : "Failed to get policy");
|
|
111
|
+
process.exit(EXIT_CODES.NETWORK_ERROR);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
policies
|
|
116
|
+
.command("create")
|
|
117
|
+
.description("Create access policy")
|
|
118
|
+
.requiredOption("--name <name>", "Policy name")
|
|
119
|
+
.requiredOption("--effect <effect>", "Policy effect (allow/deny)")
|
|
120
|
+
.requiredOption("--actions <actions>", "Comma-separated actions")
|
|
121
|
+
.requiredOption("--resources <resources>", "Comma-separated resources")
|
|
122
|
+
.action(async (options, command) => {
|
|
123
|
+
if (!config.tenantId) {
|
|
124
|
+
printError("QNSP_TENANT_ID must be set");
|
|
125
|
+
process.exit(EXIT_CODES.INVALID_ARGUMENTS);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
try {
|
|
129
|
+
const effectiveConfig = getEffectiveConfig(config, command);
|
|
130
|
+
if (!effectiveConfig.tenantId) {
|
|
131
|
+
printError("QNSP_TENANT_ID must be set");
|
|
132
|
+
process.exit(EXIT_CODES.INVALID_ARGUMENTS);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
const headers = await getAuthHeaders(effectiveConfig);
|
|
136
|
+
const accessUrl = effectiveConfig.accessControlServiceUrl;
|
|
137
|
+
const response = await fetchWithBackendHandling(effectiveConfig, `${accessUrl}/access/v1/policies`, {
|
|
138
|
+
method: "POST",
|
|
139
|
+
headers,
|
|
140
|
+
body: JSON.stringify({
|
|
141
|
+
tenantId: effectiveConfig.tenantId,
|
|
142
|
+
name: options.name,
|
|
143
|
+
statement: {
|
|
144
|
+
effect: options.effect,
|
|
145
|
+
actions: options.actions
|
|
146
|
+
.split(",")
|
|
147
|
+
.map((v) => v.trim())
|
|
148
|
+
.filter(Boolean),
|
|
149
|
+
resources: options.resources
|
|
150
|
+
.split(",")
|
|
151
|
+
.map((v) => v.trim())
|
|
152
|
+
.filter(Boolean),
|
|
153
|
+
},
|
|
154
|
+
}),
|
|
155
|
+
});
|
|
156
|
+
if (!response.ok && [429, 402, 403, 507].includes(response.status)) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
if (!response.ok) {
|
|
160
|
+
const errorText = await response.text();
|
|
161
|
+
printError(`Failed to create policy: ${response.status} ${errorText}`);
|
|
162
|
+
process.exit(EXIT_CODES.GENERAL_ERROR);
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const data = await response.json();
|
|
166
|
+
if (effectiveConfig.outputFormat === "json") {
|
|
167
|
+
printJson(data);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
printSuccess(`Policy created: ${data.id}`);
|
|
171
|
+
printTable(data);
|
|
172
|
+
}
|
|
173
|
+
process.exit(EXIT_CODES.SUCCESS);
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
printError(error instanceof Error ? error.message : "Failed to create policy");
|
|
178
|
+
process.exit(EXIT_CODES.NETWORK_ERROR);
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=access-control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access-control.js","sourceRoot":"","sources":["../../../src/cli/commands/access-control.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAO9C,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAoE/E"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { EXIT_CODES } from "../config.js";
|
|
2
|
+
import { getAuthHeaders } from "../utils/auth.js";
|
|
3
|
+
import { getEffectiveConfig } from "../utils/command-config.js";
|
|
4
|
+
import { fetchWithBackendHandling } from "../utils/fetcher.js";
|
|
5
|
+
import { printError, printJson, printTable } from "../utils/output.js";
|
|
6
|
+
export function registerAuditCommands(program, config) {
|
|
7
|
+
const audit = program.command("audit").description("Audit event commands");
|
|
8
|
+
const events = audit.command("events").description("Event operations");
|
|
9
|
+
events
|
|
10
|
+
.command("list")
|
|
11
|
+
.description("List audit events")
|
|
12
|
+
.option("--limit <number>", "Number of events to return (1-200)", "50")
|
|
13
|
+
.option("--cursor <cursor>", "Pagination cursor")
|
|
14
|
+
.option("--source-service <service>", "Filter by source service")
|
|
15
|
+
.option("--topic <topic>", "Filter by topic")
|
|
16
|
+
.option("--since <timestamp>", "Filter events since timestamp")
|
|
17
|
+
.action(async (options, command) => {
|
|
18
|
+
if (!config.tenantId) {
|
|
19
|
+
printError("QNSP_TENANT_ID must be set");
|
|
20
|
+
process.exit(EXIT_CODES.INVALID_ARGUMENTS);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
const effectiveConfig = getEffectiveConfig(config, command);
|
|
25
|
+
const headers = await getAuthHeaders(effectiveConfig);
|
|
26
|
+
const url = new URL(`${effectiveConfig.auditServiceUrl}/audit/v1/events`);
|
|
27
|
+
url.searchParams.set("tenantId", effectiveConfig.tenantId ?? "");
|
|
28
|
+
url.searchParams.set("limit", options.limit);
|
|
29
|
+
if (options.cursor) {
|
|
30
|
+
url.searchParams.set("cursor", options.cursor);
|
|
31
|
+
}
|
|
32
|
+
if (options.sourceService) {
|
|
33
|
+
url.searchParams.set("sourceService", options.sourceService);
|
|
34
|
+
}
|
|
35
|
+
if (options.topic) {
|
|
36
|
+
url.searchParams.set("topic", options.topic);
|
|
37
|
+
}
|
|
38
|
+
if (options.since) {
|
|
39
|
+
url.searchParams.set("since", options.since);
|
|
40
|
+
}
|
|
41
|
+
const response = await fetchWithBackendHandling(effectiveConfig, url.toString(), {
|
|
42
|
+
headers,
|
|
43
|
+
});
|
|
44
|
+
if (!response.ok && [429, 402, 403, 507].includes(response.status)) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (!response.ok) {
|
|
48
|
+
const errorText = await response.text();
|
|
49
|
+
printError(`Failed to list events: ${response.status} ${errorText}`);
|
|
50
|
+
process.exit(EXIT_CODES.GENERAL_ERROR);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const data = (await response.json());
|
|
54
|
+
if (effectiveConfig.outputFormat === "json") {
|
|
55
|
+
printJson(data);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
printTable((data.items ?? []));
|
|
59
|
+
}
|
|
60
|
+
process.exit(EXIT_CODES.SUCCESS);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
printError(error instanceof Error ? error.message : "Failed to list events");
|
|
65
|
+
process.exit(EXIT_CODES.NETWORK_ERROR);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/cli/commands/audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAK9C,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CA2C9E"}
|