@digitaldefiance/secrets 2.0.3
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/LICENSE +8 -0
- package/README.md +445 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/browser-types.d.ts +112 -0
- package/dist/browser-types.d.ts.map +1 -0
- package/dist/browser-types.js +242 -0
- package/dist/browser-types.js.map +1 -0
- package/dist/errors.d.ts +33 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +92 -0
- package/dist/errors.js.map +1 -0
- package/dist/esm/.tsbuildinfo +1 -0
- package/dist/esm/browser-types.d.ts +112 -0
- package/dist/esm/browser-types.d.ts.map +1 -0
- package/dist/esm/browser-types.js +201 -0
- package/dist/esm/browser-types.js.map +1 -0
- package/dist/esm/errors.d.ts +33 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/errors.js +54 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/node-types.d.ts +87 -0
- package/dist/esm/node-types.d.ts.map +1 -0
- package/dist/esm/node-types.js +157 -0
- package/dist/esm/node-types.js.map +1 -0
- package/dist/esm/secrets.d.ts +262 -0
- package/dist/esm/secrets.d.ts.map +1 -0
- package/dist/esm/secrets.js +894 -0
- package/dist/esm/secrets.js.map +1 -0
- package/dist/esm/types.d.ts +249 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +61 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/validation.d.ts +34 -0
- package/dist/esm/validation.d.ts.map +1 -0
- package/dist/esm/validation.js +72 -0
- package/dist/esm/validation.js.map +1 -0
- package/dist/node-types.d.ts +87 -0
- package/dist/node-types.d.ts.map +1 -0
- package/dist/node-types.js +191 -0
- package/dist/node-types.js.map +1 -0
- package/dist/secrets.d.ts +262 -0
- package/dist/secrets.d.ts.map +1 -0
- package/dist/secrets.js +897 -0
- package/dist/secrets.js.map +1 -0
- package/dist/types.d.ts +249 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +67 -0
- package/dist/types.js.map +1 -0
- package/dist/umd/.tsbuildinfo +1 -0
- package/dist/umd/browser-types.d.ts +112 -0
- package/dist/umd/browser-types.d.ts.map +1 -0
- package/dist/umd/browser-types.js +252 -0
- package/dist/umd/browser-types.js.map +1 -0
- package/dist/umd/errors.d.ts +33 -0
- package/dist/umd/errors.d.ts.map +1 -0
- package/dist/umd/errors.js +102 -0
- package/dist/umd/errors.js.map +1 -0
- package/dist/umd/node-types.d.ts +87 -0
- package/dist/umd/node-types.d.ts.map +1 -0
- package/dist/umd/node-types.js +201 -0
- package/dist/umd/node-types.js.map +1 -0
- package/dist/umd/secrets.d.ts +262 -0
- package/dist/umd/secrets.d.ts.map +1 -0
- package/dist/umd/secrets.js +907 -0
- package/dist/umd/secrets.js.map +1 -0
- package/dist/umd/secrets.min.js +2 -0
- package/dist/umd/types.d.ts +249 -0
- package/dist/umd/types.d.ts.map +1 -0
- package/dist/umd/types.js +77 -0
- package/dist/umd/types.js.map +1 -0
- package/dist/umd/validation.d.ts +34 -0
- package/dist/umd/validation.d.ts.map +1 -0
- package/dist/umd/validation.js +92 -0
- package/dist/umd/validation.js.map +1 -0
- package/dist/validation.d.ts +34 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +82 -0
- package/dist/validation.js.map +1 -0
- package/package.json +181 -0
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
// Browser-specific type definitions and error handling
|
|
2
|
+
// Provides enhanced typing for browser Web Crypto API and environment-specific behavior
|
|
3
|
+
var __extends = (this && this.__extends) || (function () {
|
|
4
|
+
var extendStatics = function (d, b) {
|
|
5
|
+
extendStatics = Object.setPrototypeOf ||
|
|
6
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
7
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
8
|
+
return extendStatics(d, b);
|
|
9
|
+
};
|
|
10
|
+
return function (d, b) {
|
|
11
|
+
if (typeof b !== "function" && b !== null)
|
|
12
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
13
|
+
extendStatics(d, b);
|
|
14
|
+
function __() { this.constructor = d; }
|
|
15
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
16
|
+
};
|
|
17
|
+
})();
|
|
18
|
+
(function (factory) {
|
|
19
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
20
|
+
var v = factory(require, exports);
|
|
21
|
+
if (v !== undefined) module.exports = v;
|
|
22
|
+
}
|
|
23
|
+
else if (typeof define === "function" && define.amd) {
|
|
24
|
+
define(["require", "exports", "./errors"], factory);
|
|
25
|
+
}
|
|
26
|
+
})(function (require, exports) {
|
|
27
|
+
"use strict";
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.WebCryptoNotSupportedError = exports.BrowserEnvironmentError = exports.BrowserCryptoError = void 0;
|
|
30
|
+
exports.isUint32Array = isUint32Array;
|
|
31
|
+
exports.isTypedArray = isTypedArray;
|
|
32
|
+
exports.isBrowserEnvironment = isBrowserEnvironment;
|
|
33
|
+
exports.getBrowserCrypto = getBrowserCrypto;
|
|
34
|
+
exports.hasBrowserCryptoGetRandomValues = hasBrowserCryptoGetRandomValues;
|
|
35
|
+
exports.createBrowserRNG = createBrowserRNG;
|
|
36
|
+
exports.createBrowserCryptoEnvironment = createBrowserCryptoEnvironment;
|
|
37
|
+
exports.validateUint32Array = validateUint32Array;
|
|
38
|
+
exports.validateTypedArray = validateTypedArray;
|
|
39
|
+
exports.requireBrowserCrypto = requireBrowserCrypto;
|
|
40
|
+
exports.isWebCryptoSupported = isWebCryptoSupported;
|
|
41
|
+
var errors_1 = require("./errors");
|
|
42
|
+
/**
|
|
43
|
+
* Type guard for Uint32Array
|
|
44
|
+
*/
|
|
45
|
+
function isUint32Array(value) {
|
|
46
|
+
var _a;
|
|
47
|
+
return value !== null &&
|
|
48
|
+
typeof value === 'object' &&
|
|
49
|
+
((_a = value.constructor) === null || _a === void 0 ? void 0 : _a.name) === 'Uint32Array';
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Type guard for any typed array
|
|
53
|
+
*/
|
|
54
|
+
function isTypedArray(value) {
|
|
55
|
+
return value !== null &&
|
|
56
|
+
typeof value === 'object' &&
|
|
57
|
+
ArrayBuffer.isView(value);
|
|
58
|
+
}
|
|
59
|
+
// ============================================================================
|
|
60
|
+
// Browser Environment Detection
|
|
61
|
+
// ============================================================================
|
|
62
|
+
/**
|
|
63
|
+
* Detects if the current environment is a browser
|
|
64
|
+
* @returns true if running in a browser, false otherwise
|
|
65
|
+
*/
|
|
66
|
+
function isBrowserEnvironment() {
|
|
67
|
+
return typeof window !== 'undefined' &&
|
|
68
|
+
typeof window.document !== 'undefined';
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Attempts to access the browser Web Crypto API
|
|
72
|
+
* @returns BrowserCryptoAPI if available, null otherwise
|
|
73
|
+
*/
|
|
74
|
+
function getBrowserCrypto() {
|
|
75
|
+
// Check for window.crypto
|
|
76
|
+
if (typeof window !== 'undefined' && window.crypto) {
|
|
77
|
+
var crypto_1 = window.crypto;
|
|
78
|
+
if (typeof crypto_1.getRandomValues === 'function' ||
|
|
79
|
+
typeof crypto_1.getRandomValues === 'object') {
|
|
80
|
+
return crypto_1;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Check for global crypto (some environments)
|
|
84
|
+
if (typeof global !== 'undefined' && global.crypto) {
|
|
85
|
+
var crypto_2 = global.crypto;
|
|
86
|
+
if (typeof crypto_2.getRandomValues === 'function' ||
|
|
87
|
+
typeof crypto_2.getRandomValues === 'object') {
|
|
88
|
+
return crypto_2;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Checks if browser crypto.getRandomValues is available
|
|
95
|
+
* @returns true if crypto.getRandomValues is available
|
|
96
|
+
*/
|
|
97
|
+
function hasBrowserCryptoGetRandomValues() {
|
|
98
|
+
var crypto = getBrowserCrypto();
|
|
99
|
+
if (!crypto) {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
// Check if Uint32Array is available
|
|
103
|
+
if (typeof Uint32Array !== 'function' && typeof Uint32Array !== 'object') {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
return typeof crypto.getRandomValues === 'function' ||
|
|
107
|
+
typeof crypto.getRandomValues === 'object';
|
|
108
|
+
}
|
|
109
|
+
// ============================================================================
|
|
110
|
+
// Browser-Specific Error Types
|
|
111
|
+
// ============================================================================
|
|
112
|
+
/**
|
|
113
|
+
* Error thrown when browser crypto operations fail
|
|
114
|
+
*/
|
|
115
|
+
var BrowserCryptoError = /** @class */ (function (_super) {
|
|
116
|
+
__extends(BrowserCryptoError, _super);
|
|
117
|
+
function BrowserCryptoError(operation, reason, originalError) {
|
|
118
|
+
var _this = _super.call(this, operation, "Browser crypto error: ".concat(reason)) || this;
|
|
119
|
+
_this.originalError = originalError;
|
|
120
|
+
_this.name = 'BrowserCryptoError';
|
|
121
|
+
if (originalError && Error.captureStackTrace) {
|
|
122
|
+
Error.captureStackTrace(_this, BrowserCryptoError);
|
|
123
|
+
}
|
|
124
|
+
return _this;
|
|
125
|
+
}
|
|
126
|
+
return BrowserCryptoError;
|
|
127
|
+
}(errors_1.CryptoError));
|
|
128
|
+
exports.BrowserCryptoError = BrowserCryptoError;
|
|
129
|
+
/**
|
|
130
|
+
* Error thrown when browser environment is required but not available
|
|
131
|
+
*/
|
|
132
|
+
var BrowserEnvironmentError = /** @class */ (function (_super) {
|
|
133
|
+
__extends(BrowserEnvironmentError, _super);
|
|
134
|
+
function BrowserEnvironmentError(feature) {
|
|
135
|
+
var _this = _super.call(this, 'environment_check', "Feature '".concat(feature, "' requires browser environment but is not available")) || this;
|
|
136
|
+
_this.name = 'BrowserEnvironmentError';
|
|
137
|
+
return _this;
|
|
138
|
+
}
|
|
139
|
+
return BrowserEnvironmentError;
|
|
140
|
+
}(errors_1.CryptoError));
|
|
141
|
+
exports.BrowserEnvironmentError = BrowserEnvironmentError;
|
|
142
|
+
/**
|
|
143
|
+
* Error thrown when Web Crypto API is not supported
|
|
144
|
+
*/
|
|
145
|
+
var WebCryptoNotSupportedError = /** @class */ (function (_super) {
|
|
146
|
+
__extends(WebCryptoNotSupportedError, _super);
|
|
147
|
+
function WebCryptoNotSupportedError() {
|
|
148
|
+
var _this = _super.call(this, 'getRandomValues', 'Web Crypto API is not supported in this browser') || this;
|
|
149
|
+
_this.name = 'WebCryptoNotSupportedError';
|
|
150
|
+
return _this;
|
|
151
|
+
}
|
|
152
|
+
return WebCryptoNotSupportedError;
|
|
153
|
+
}(BrowserCryptoError));
|
|
154
|
+
exports.WebCryptoNotSupportedError = WebCryptoNotSupportedError;
|
|
155
|
+
// ============================================================================
|
|
156
|
+
// Browser RNG Implementation
|
|
157
|
+
// ============================================================================
|
|
158
|
+
/**
|
|
159
|
+
* Creates a browser-specific RNG function using crypto.getRandomValues
|
|
160
|
+
* @param crypto - Browser Web Crypto API
|
|
161
|
+
* @returns RNG function that generates random binary strings
|
|
162
|
+
* @throws {BrowserCryptoError} If random value generation fails
|
|
163
|
+
*/
|
|
164
|
+
function createBrowserRNG(crypto) {
|
|
165
|
+
return function browserCryptoGetRandomValues(bits) {
|
|
166
|
+
if (typeof bits !== 'number' || bits <= 0 || bits % 1 !== 0) {
|
|
167
|
+
throw new BrowserCryptoError('getRandomValues', "Invalid bits parameter: ".concat(bits, ". Must be a positive integer."));
|
|
168
|
+
}
|
|
169
|
+
// Calculate number of 32-bit integers needed
|
|
170
|
+
var elems = Math.ceil(bits / 32);
|
|
171
|
+
try {
|
|
172
|
+
// Generate random values
|
|
173
|
+
var array = new Uint32Array(elems);
|
|
174
|
+
crypto.getRandomValues(array);
|
|
175
|
+
// Convert to binary string
|
|
176
|
+
var binary = '';
|
|
177
|
+
for (var i = 0; i < array.length; i++) {
|
|
178
|
+
var value = array[i];
|
|
179
|
+
var bin = value.toString(2);
|
|
180
|
+
// Pad to 32 bits
|
|
181
|
+
binary += '00000000000000000000000000000000'.substring(bin.length) + bin;
|
|
182
|
+
}
|
|
183
|
+
// Return exactly the requested number of bits
|
|
184
|
+
return binary.substring(0, bits);
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
throw new BrowserCryptoError('getRandomValues', 'Failed to generate random values', error);
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Creates a browser crypto environment descriptor
|
|
193
|
+
* @returns BrowserCryptoEnvironment if browser crypto is available, null otherwise
|
|
194
|
+
*/
|
|
195
|
+
function createBrowserCryptoEnvironment() {
|
|
196
|
+
var crypto = getBrowserCrypto();
|
|
197
|
+
if (!crypto) {
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
type: 'browser',
|
|
202
|
+
crypto: crypto,
|
|
203
|
+
rngType: 'browserCryptoGetRandomValues',
|
|
204
|
+
rng: createBrowserRNG(crypto)
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
// ============================================================================
|
|
208
|
+
// Type Validation for Browser
|
|
209
|
+
// ============================================================================
|
|
210
|
+
/**
|
|
211
|
+
* Validates that a value is a valid Uint32Array
|
|
212
|
+
* @param value - Value to validate
|
|
213
|
+
* @param paramName - Parameter name for error messages
|
|
214
|
+
* @throws {BrowserCryptoError} If value is not a valid Uint32Array
|
|
215
|
+
*/
|
|
216
|
+
function validateUint32Array(value, paramName) {
|
|
217
|
+
if (!isUint32Array(value)) {
|
|
218
|
+
throw new BrowserCryptoError('validation', "Parameter '".concat(paramName, "' must be a Uint32Array"));
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Validates that a value is a valid typed array
|
|
223
|
+
* @param value - Value to validate
|
|
224
|
+
* @param paramName - Parameter name for error messages
|
|
225
|
+
* @throws {BrowserCryptoError} If value is not a valid typed array
|
|
226
|
+
*/
|
|
227
|
+
function validateTypedArray(value, paramName) {
|
|
228
|
+
if (!isTypedArray(value)) {
|
|
229
|
+
throw new BrowserCryptoError('validation', "Parameter '".concat(paramName, "' must be a typed array"));
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Validates that browser crypto is available
|
|
234
|
+
* @throws {WebCryptoNotSupportedError} If browser crypto is not available
|
|
235
|
+
*/
|
|
236
|
+
function requireBrowserCrypto() {
|
|
237
|
+
var crypto = getBrowserCrypto();
|
|
238
|
+
if (!crypto) {
|
|
239
|
+
throw new WebCryptoNotSupportedError();
|
|
240
|
+
}
|
|
241
|
+
return crypto;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Checks if the browser supports the Web Crypto API
|
|
245
|
+
* @returns true if Web Crypto API is fully supported
|
|
246
|
+
*/
|
|
247
|
+
function isWebCryptoSupported() {
|
|
248
|
+
return hasBrowserCryptoGetRandomValues() &&
|
|
249
|
+
(typeof Uint32Array === 'function' || typeof Uint32Array === 'object');
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
//# sourceMappingURL=browser-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-types.js","sourceRoot":"","sources":["../../src/browser-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base error class for all secrets library errors
|
|
3
|
+
*/
|
|
4
|
+
export declare class SecretsError extends Error {
|
|
5
|
+
readonly code: string;
|
|
6
|
+
readonly context?: Record<string, unknown> | undefined;
|
|
7
|
+
constructor(message: string, code: string, context?: Record<string, unknown> | undefined);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Error thrown when invalid parameters are provided to a function
|
|
11
|
+
*/
|
|
12
|
+
export declare class InvalidParameterError extends SecretsError {
|
|
13
|
+
constructor(parameter: string, value: unknown, expected: string);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Error thrown when initialization fails
|
|
17
|
+
*/
|
|
18
|
+
export declare class InitializationError extends SecretsError {
|
|
19
|
+
constructor(reason: string);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Error thrown when share data is invalid or corrupted
|
|
23
|
+
*/
|
|
24
|
+
export declare class InvalidShareError extends SecretsError {
|
|
25
|
+
constructor(share: string, reason: string);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Error thrown when cryptographic operations fail
|
|
29
|
+
*/
|
|
30
|
+
export declare class CryptoError extends SecretsError {
|
|
31
|
+
constructor(operation: string, reason: string);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;aAGnB,IAAI,EAAE,MAAM;aACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAFjD,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;CAUpD;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,YAAY;gBACzC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM;CAQhE;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,YAAY;gBACvC,MAAM,EAAE,MAAM;CAQ3B;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,YAAY;gBACrC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAQ1C;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,YAAY;gBAC/B,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAQ9C"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// Type-safe error handling for @digitaldefiance/secrets
|
|
2
|
+
// Provides structured error classes with context information
|
|
3
|
+
var __extends = (this && this.__extends) || (function () {
|
|
4
|
+
var extendStatics = function (d, b) {
|
|
5
|
+
extendStatics = Object.setPrototypeOf ||
|
|
6
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
7
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
8
|
+
return extendStatics(d, b);
|
|
9
|
+
};
|
|
10
|
+
return function (d, b) {
|
|
11
|
+
if (typeof b !== "function" && b !== null)
|
|
12
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
13
|
+
extendStatics(d, b);
|
|
14
|
+
function __() { this.constructor = d; }
|
|
15
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
16
|
+
};
|
|
17
|
+
})();
|
|
18
|
+
(function (factory) {
|
|
19
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
20
|
+
var v = factory(require, exports);
|
|
21
|
+
if (v !== undefined) module.exports = v;
|
|
22
|
+
}
|
|
23
|
+
else if (typeof define === "function" && define.amd) {
|
|
24
|
+
define(["require", "exports"], factory);
|
|
25
|
+
}
|
|
26
|
+
})(function (require, exports) {
|
|
27
|
+
"use strict";
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.CryptoError = exports.InvalidShareError = exports.InitializationError = exports.InvalidParameterError = exports.SecretsError = void 0;
|
|
30
|
+
/**
|
|
31
|
+
* Base error class for all secrets library errors
|
|
32
|
+
*/
|
|
33
|
+
var SecretsError = /** @class */ (function (_super) {
|
|
34
|
+
__extends(SecretsError, _super);
|
|
35
|
+
function SecretsError(message, code, context) {
|
|
36
|
+
var _this = _super.call(this, message) || this;
|
|
37
|
+
_this.code = code;
|
|
38
|
+
_this.context = context;
|
|
39
|
+
_this.name = 'SecretsError';
|
|
40
|
+
// Maintains proper stack trace for where our error was thrown (only available on V8)
|
|
41
|
+
if (Error.captureStackTrace) {
|
|
42
|
+
Error.captureStackTrace(_this, SecretsError);
|
|
43
|
+
}
|
|
44
|
+
return _this;
|
|
45
|
+
}
|
|
46
|
+
return SecretsError;
|
|
47
|
+
}(Error));
|
|
48
|
+
exports.SecretsError = SecretsError;
|
|
49
|
+
/**
|
|
50
|
+
* Error thrown when invalid parameters are provided to a function
|
|
51
|
+
*/
|
|
52
|
+
var InvalidParameterError = /** @class */ (function (_super) {
|
|
53
|
+
__extends(InvalidParameterError, _super);
|
|
54
|
+
function InvalidParameterError(parameter, value, expected) {
|
|
55
|
+
var _this = _super.call(this, "Invalid parameter '".concat(parameter, "': expected ").concat(expected, ", got ").concat(typeof value), 'INVALID_PARAMETER', { parameter: parameter, value: value, expected: expected }) || this;
|
|
56
|
+
_this.name = 'InvalidParameterError';
|
|
57
|
+
return _this;
|
|
58
|
+
}
|
|
59
|
+
return InvalidParameterError;
|
|
60
|
+
}(SecretsError));
|
|
61
|
+
exports.InvalidParameterError = InvalidParameterError;
|
|
62
|
+
/**
|
|
63
|
+
* Error thrown when initialization fails
|
|
64
|
+
*/
|
|
65
|
+
var InitializationError = /** @class */ (function (_super) {
|
|
66
|
+
__extends(InitializationError, _super);
|
|
67
|
+
function InitializationError(reason) {
|
|
68
|
+
var _this = _super.call(this, "Initialization failed: ".concat(reason), 'INITIALIZATION_FAILED', { reason: reason }) || this;
|
|
69
|
+
_this.name = 'InitializationError';
|
|
70
|
+
return _this;
|
|
71
|
+
}
|
|
72
|
+
return InitializationError;
|
|
73
|
+
}(SecretsError));
|
|
74
|
+
exports.InitializationError = InitializationError;
|
|
75
|
+
/**
|
|
76
|
+
* Error thrown when share data is invalid or corrupted
|
|
77
|
+
*/
|
|
78
|
+
var InvalidShareError = /** @class */ (function (_super) {
|
|
79
|
+
__extends(InvalidShareError, _super);
|
|
80
|
+
function InvalidShareError(share, reason) {
|
|
81
|
+
var _this = _super.call(this, "Invalid share data: ".concat(reason), 'INVALID_SHARE', { share: share, reason: reason }) || this;
|
|
82
|
+
_this.name = 'InvalidShareError';
|
|
83
|
+
return _this;
|
|
84
|
+
}
|
|
85
|
+
return InvalidShareError;
|
|
86
|
+
}(SecretsError));
|
|
87
|
+
exports.InvalidShareError = InvalidShareError;
|
|
88
|
+
/**
|
|
89
|
+
* Error thrown when cryptographic operations fail
|
|
90
|
+
*/
|
|
91
|
+
var CryptoError = /** @class */ (function (_super) {
|
|
92
|
+
__extends(CryptoError, _super);
|
|
93
|
+
function CryptoError(operation, reason) {
|
|
94
|
+
var _this = _super.call(this, "Cryptographic operation '".concat(operation, "' failed: ").concat(reason), 'CRYPTO_ERROR', { operation: operation, reason: reason }) || this;
|
|
95
|
+
_this.name = 'CryptoError';
|
|
96
|
+
return _this;
|
|
97
|
+
}
|
|
98
|
+
return CryptoError;
|
|
99
|
+
}(SecretsError));
|
|
100
|
+
exports.CryptoError = CryptoError;
|
|
101
|
+
});
|
|
102
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,6DAA6D;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAE7D;;OAEG;IACH;QAAkC,gCAAK;QACrC,sBACE,OAAe,EACC,IAAY,EACZ,OAAiC;YAEjD,YAAA,MAAK,YAAC,OAAO,CAAC,SAAC;YAHC,UAAI,GAAJ,IAAI,CAAQ;YACZ,aAAO,GAAP,OAAO,CAA0B;YAGjD,KAAI,CAAC,IAAI,GAAG,cAAc,CAAC;YAE3B,qFAAqF;YACrF,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,KAAK,CAAC,iBAAiB,CAAC,KAAI,EAAE,YAAY,CAAC,CAAC;YAC9C,CAAC;;QACH,CAAC;QACH,mBAAC;IAAD,CAAC,AAdD,CAAkC,KAAK,GActC;IAdY,oCAAY;IAgBzB;;OAEG;IACH;QAA2C,yCAAY;QACrD,+BAAY,SAAiB,EAAE,KAAc,EAAE,QAAgB;YAC7D,YAAA,MAAK,YACH,6BAAsB,SAAS,yBAAe,QAAQ,mBAAS,OAAO,KAAK,CAAE,EAC7E,mBAAmB,EACnB,EAAE,SAAS,WAAA,EAAE,KAAK,OAAA,EAAE,QAAQ,UAAA,EAAE,CAC/B,SAAC;YACF,KAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;;QACtC,CAAC;QACH,4BAAC;IAAD,CAAC,AATD,CAA2C,YAAY,GAStD;IATY,sDAAqB;IAWlC;;OAEG;IACH;QAAyC,uCAAY;QACnD,6BAAY,MAAc;YACxB,YAAA,MAAK,YACH,iCAA0B,MAAM,CAAE,EAClC,uBAAuB,EACvB,EAAE,MAAM,QAAA,EAAE,CACX,SAAC;YACF,KAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;;QACpC,CAAC;QACH,0BAAC;IAAD,CAAC,AATD,CAAyC,YAAY,GASpD;IATY,kDAAmB;IAWhC;;OAEG;IACH;QAAuC,qCAAY;QACjD,2BAAY,KAAa,EAAE,MAAc;YACvC,YAAA,MAAK,YACH,8BAAuB,MAAM,CAAE,EAC/B,eAAe,EACf,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE,CAClB,SAAC;YACF,KAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;;QAClC,CAAC;QACH,wBAAC;IAAD,CAAC,AATD,CAAuC,YAAY,GASlD;IATY,8CAAiB;IAW9B;;OAEG;IACH;QAAiC,+BAAY;QAC3C,qBAAY,SAAiB,EAAE,MAAc;YAC3C,YAAA,MAAK,YACH,mCAA4B,SAAS,uBAAa,MAAM,CAAE,EAC1D,cAAc,EACd,EAAE,SAAS,WAAA,EAAE,MAAM,QAAA,EAAE,CACtB,SAAC;YACF,KAAI,CAAC,IAAI,GAAG,aAAa,CAAC;;QAC5B,CAAC;QACH,kBAAC;IAAD,CAAC,AATD,CAAiC,YAAY,GAS5C;IATY,kCAAW"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { RNGFunction, CSPRNGType } from './types';
|
|
2
|
+
import { CryptoError } from './errors';
|
|
3
|
+
/**
|
|
4
|
+
* Enhanced Node.js crypto module interface with comprehensive typing
|
|
5
|
+
*/
|
|
6
|
+
export interface NodeCryptoModule {
|
|
7
|
+
/**
|
|
8
|
+
* Generates cryptographically strong pseudo-random data
|
|
9
|
+
* @param size - Number of bytes to generate
|
|
10
|
+
* @returns Buffer containing random bytes
|
|
11
|
+
* @throws {Error} If random data generation fails
|
|
12
|
+
*/
|
|
13
|
+
randomBytes(size: number): Buffer;
|
|
14
|
+
/**
|
|
15
|
+
* Synchronous version of randomBytes
|
|
16
|
+
* @param size - Number of bytes to generate
|
|
17
|
+
* @returns Buffer containing random bytes
|
|
18
|
+
* @throws {Error} If random data generation fails
|
|
19
|
+
*/
|
|
20
|
+
randomBytesSync?(size: number): Buffer;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Node.js Buffer type guard
|
|
24
|
+
*/
|
|
25
|
+
export declare function isNodeBuffer(value: unknown): value is Buffer;
|
|
26
|
+
/**
|
|
27
|
+
* Detects if the current environment is Node.js
|
|
28
|
+
* @returns true if running in Node.js, false otherwise
|
|
29
|
+
*/
|
|
30
|
+
export declare function isNodeEnvironment(): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Attempts to load the Node.js crypto module
|
|
33
|
+
* @returns NodeCryptoModule if available, null otherwise
|
|
34
|
+
*/
|
|
35
|
+
export declare function getNodeCrypto(): NodeCryptoModule | null;
|
|
36
|
+
/**
|
|
37
|
+
* Checks if Node.js crypto.randomBytes is available
|
|
38
|
+
* @returns true if crypto.randomBytes is available
|
|
39
|
+
*/
|
|
40
|
+
export declare function hasNodeCryptoRandomBytes(): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Error thrown when Node.js crypto operations fail
|
|
43
|
+
*/
|
|
44
|
+
export declare class NodeCryptoError extends CryptoError {
|
|
45
|
+
readonly originalError?: Error | undefined;
|
|
46
|
+
constructor(operation: string, reason: string, originalError?: Error | undefined);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Error thrown when Node.js environment is required but not available
|
|
50
|
+
*/
|
|
51
|
+
export declare class NodeEnvironmentError extends CryptoError {
|
|
52
|
+
constructor(feature: string);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Creates a Node.js-specific RNG function using crypto.randomBytes
|
|
56
|
+
* @param crypto - Node.js crypto module
|
|
57
|
+
* @returns RNG function that generates random binary strings
|
|
58
|
+
* @throws {NodeCryptoError} If random byte generation fails
|
|
59
|
+
*/
|
|
60
|
+
export declare function createNodeRNG(crypto: NodeCryptoModule): RNGFunction;
|
|
61
|
+
/**
|
|
62
|
+
* Node.js-specific crypto environment descriptor
|
|
63
|
+
*/
|
|
64
|
+
export interface NodeCryptoEnvironment {
|
|
65
|
+
readonly type: 'node';
|
|
66
|
+
readonly crypto: NodeCryptoModule;
|
|
67
|
+
readonly rngType: CSPRNGType;
|
|
68
|
+
readonly rng: RNGFunction;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Creates a Node.js crypto environment descriptor
|
|
72
|
+
* @returns NodeCryptoEnvironment if Node.js crypto is available, null otherwise
|
|
73
|
+
*/
|
|
74
|
+
export declare function createNodeCryptoEnvironment(): NodeCryptoEnvironment | null;
|
|
75
|
+
/**
|
|
76
|
+
* Validates that a value is a valid Node.js Buffer
|
|
77
|
+
* @param value - Value to validate
|
|
78
|
+
* @param paramName - Parameter name for error messages
|
|
79
|
+
* @throws {NodeCryptoError} If value is not a valid Buffer
|
|
80
|
+
*/
|
|
81
|
+
export declare function validateNodeBuffer(value: unknown, paramName: string): asserts value is Buffer;
|
|
82
|
+
/**
|
|
83
|
+
* Validates that Node.js crypto is available
|
|
84
|
+
* @throws {NodeEnvironmentError} If Node.js crypto is not available
|
|
85
|
+
*/
|
|
86
|
+
export declare function requireNodeCrypto(): NodeCryptoModule;
|
|
87
|
+
//# sourceMappingURL=node-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-types.d.ts","sourceRoot":"","sources":["../../src/node-types.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAMvC;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAElC;;;;;OAKG;IACH,eAAe,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CACxC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAK5D;AAMD;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAI3C;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,gBAAgB,GAAG,IAAI,CAiBvD;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,OAAO,CAGlD;AAMD;;GAEG;AACH,qBAAa,eAAgB,SAAQ,WAAW;aACiB,aAAa,CAAC,EAAE,KAAK;gBAAxE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAkB,aAAa,CAAC,EAAE,KAAK,YAAA;CAQrF;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,WAAW;gBACvC,OAAO,EAAE,MAAM;CAO5B;AAMD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,WAAW,CAwCnE;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,IAAI,qBAAqB,GAAG,IAAI,CAa1E;AAMD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAO7F;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,gBAAgB,CAQpD"}
|