@memberjunction/credentials 3.2.0 → 3.4.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/README.md +432 -0
- package/dist/CredentialEngine.d.ts +6 -0
- package/dist/CredentialEngine.d.ts.map +1 -1
- package/dist/CredentialEngine.js +91 -15
- package/dist/CredentialEngine.js.map +1 -1
- package/dist/__tests__/credential-validation.test.d.ts +2 -0
- package/dist/__tests__/credential-validation.test.d.ts.map +1 -0
- package/dist/__tests__/credential-validation.test.js +445 -0
- package/dist/__tests__/credential-validation.test.js.map +1 -0
- package/package.json +10 -5
package/README.md
ADDED
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
# @memberjunction/credentials
|
|
2
|
+
|
|
3
|
+
Secure credential management engine for MemberJunction. Provides centralized storage, retrieval, and audit logging of credentials with automatic field-level encryption.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Centralized Credential Storage** - Store all credentials in one place with consistent access patterns
|
|
8
|
+
- **Field-Level Encryption** - Credentials are automatically encrypted at rest using MJ's encryption engine
|
|
9
|
+
- **Audit Logging** - Every credential access is logged for compliance and security monitoring
|
|
10
|
+
- **Type-Safe Values** - Pre-defined interfaces for common credential types (API keys, OAuth, AWS, Azure, etc.)
|
|
11
|
+
- **Cached Lookups** - Credential metadata is cached for fast resolution
|
|
12
|
+
- **Per-Request Overrides** - Support for test/development credential injection
|
|
13
|
+
- **Validation Support** - Optional endpoint-based credential validation
|
|
14
|
+
- **API Key Management** - Fast hash-based lookup for API key authentication
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install @memberjunction/credentials
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Quick Start
|
|
23
|
+
|
|
24
|
+
### 1. Initialize the Engine
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
import { CredentialEngine } from '@memberjunction/credentials';
|
|
28
|
+
|
|
29
|
+
// Initialize at application startup
|
|
30
|
+
await CredentialEngine.Instance.Config(false, contextUser);
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### 2. Retrieve a Credential
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
import { CredentialEngine, APIKeyCredentialValues } from '@memberjunction/credentials';
|
|
37
|
+
|
|
38
|
+
// Get a credential with typed values
|
|
39
|
+
const cred = await CredentialEngine.Instance.getCredential<APIKeyCredentialValues>(
|
|
40
|
+
'OpenAI',
|
|
41
|
+
{
|
|
42
|
+
contextUser,
|
|
43
|
+
subsystem: 'AIService'
|
|
44
|
+
}
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
// Use the decrypted values
|
|
48
|
+
openai.setApiKey(cred.values.apiKey);
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### 3. Store a New Credential
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
const credential = await CredentialEngine.Instance.storeCredential(
|
|
55
|
+
'API Key', // Credential type name
|
|
56
|
+
'OpenAI Production', // Credential name
|
|
57
|
+
{ apiKey: 'sk-...' }, // Values (will be encrypted)
|
|
58
|
+
{
|
|
59
|
+
isDefault: true,
|
|
60
|
+
description: 'Production OpenAI API key'
|
|
61
|
+
},
|
|
62
|
+
contextUser
|
|
63
|
+
);
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Credential Types
|
|
67
|
+
|
|
68
|
+
MemberJunction includes pre-configured credential types with JSON schemas:
|
|
69
|
+
|
|
70
|
+
| Type | Fields | Use Case |
|
|
71
|
+
|------|--------|----------|
|
|
72
|
+
| API Key | `apiKey` | OpenAI, Anthropic, SendGrid, etc. |
|
|
73
|
+
| API Key with Endpoint | `apiKey`, `endpoint` | Azure OpenAI, custom APIs |
|
|
74
|
+
| OAuth2 Client Credentials | `clientId`, `clientSecret`, `tokenUrl`, `scope` | OAuth integrations |
|
|
75
|
+
| Basic Auth | `username`, `password` | Legacy systems |
|
|
76
|
+
| Azure Service Principal | `tenantId`, `clientId`, `clientSecret` | Microsoft Graph, Azure services |
|
|
77
|
+
| AWS IAM | `accessKeyId`, `secretAccessKey`, `region` | S3, SES, Lambda, etc. |
|
|
78
|
+
| Database Connection | `host`, `port`, `database`, `username`, `password` | External databases |
|
|
79
|
+
| Twilio | `accountSid`, `authToken` | SMS/Voice services |
|
|
80
|
+
|
|
81
|
+
### Type-Safe Value Interfaces
|
|
82
|
+
|
|
83
|
+
Use the provided interfaces for compile-time type safety:
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
import {
|
|
87
|
+
CredentialEngine,
|
|
88
|
+
APIKeyCredentialValues,
|
|
89
|
+
AWSIAMCredentialValues,
|
|
90
|
+
AzureServicePrincipalCredentialValues
|
|
91
|
+
} from '@memberjunction/credentials';
|
|
92
|
+
|
|
93
|
+
// OpenAI/Anthropic/etc.
|
|
94
|
+
const ai = await CredentialEngine.Instance.getCredential<APIKeyCredentialValues>(
|
|
95
|
+
'OpenAI',
|
|
96
|
+
{ contextUser }
|
|
97
|
+
);
|
|
98
|
+
console.log(ai.values.apiKey); // Typed as string
|
|
99
|
+
|
|
100
|
+
// AWS Services
|
|
101
|
+
const aws = await CredentialEngine.Instance.getCredential<AWSIAMCredentialValues>(
|
|
102
|
+
'AWS Production',
|
|
103
|
+
{ contextUser }
|
|
104
|
+
);
|
|
105
|
+
console.log(aws.values.accessKeyId, aws.values.secretAccessKey, aws.values.region);
|
|
106
|
+
|
|
107
|
+
// Azure Services
|
|
108
|
+
const azure = await CredentialEngine.Instance.getCredential<AzureServicePrincipalCredentialValues>(
|
|
109
|
+
'Microsoft Graph',
|
|
110
|
+
{ contextUser }
|
|
111
|
+
);
|
|
112
|
+
console.log(azure.values.tenantId, azure.values.clientId);
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Resolution Priority
|
|
116
|
+
|
|
117
|
+
When you call `getCredential()`, credentials are resolved in this order:
|
|
118
|
+
|
|
119
|
+
1. **Direct Values** - If `directValues` is provided in options, use those (useful for testing)
|
|
120
|
+
2. **By ID** - If `credentialId` is provided, look up that specific credential
|
|
121
|
+
3. **By Name** - Look up by the credential name passed to `getCredential()`
|
|
122
|
+
|
|
123
|
+
```typescript
|
|
124
|
+
// Priority 1: Direct values (bypasses database)
|
|
125
|
+
const cred = await engine.getCredential('OpenAI', {
|
|
126
|
+
directValues: { apiKey: 'test-key' },
|
|
127
|
+
contextUser
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
// Priority 2: Specific credential by ID
|
|
131
|
+
const cred = await engine.getCredential('OpenAI', {
|
|
132
|
+
credentialId: 'specific-credential-uuid',
|
|
133
|
+
contextUser
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
// Priority 3: By name (most common)
|
|
137
|
+
const cred = await engine.getCredential('OpenAI', { contextUser });
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## API Key Lookup
|
|
141
|
+
|
|
142
|
+
The CredentialEngine caches API keys for fast hash-based lookup, used by authentication systems:
|
|
143
|
+
|
|
144
|
+
```typescript
|
|
145
|
+
// Look up API key by hash (O(1) from cache)
|
|
146
|
+
const apiKey = CredentialEngine.Instance.getAPIKeyByHash(keyHash);
|
|
147
|
+
|
|
148
|
+
if (apiKey && apiKey.Status === 'Active') {
|
|
149
|
+
// Key is valid
|
|
150
|
+
console.log('User ID:', apiKey.UserID);
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
This is used internally by `EncryptionEngine.ValidateAPIKey()` for fast API authentication.
|
|
155
|
+
|
|
156
|
+
## Audit Logging
|
|
157
|
+
|
|
158
|
+
Every credential access is automatically logged to the `Audit Logs` entity:
|
|
159
|
+
|
|
160
|
+
```typescript
|
|
161
|
+
const cred = await engine.getCredential('OpenAI', {
|
|
162
|
+
contextUser,
|
|
163
|
+
subsystem: 'AIService' // Logged for tracking
|
|
164
|
+
});
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
Audit log entry includes:
|
|
168
|
+
- User who accessed the credential
|
|
169
|
+
- Operation type (Decrypt, Create, Update, Validate)
|
|
170
|
+
- Subsystem that requested access
|
|
171
|
+
- Success/failure status
|
|
172
|
+
- Duration in milliseconds
|
|
173
|
+
|
|
174
|
+
## JSON Schema Validation
|
|
175
|
+
|
|
176
|
+
The CredentialEngine uses [Ajv JSON Schema validator](https://ajv.js.org/) to validate credential values against the `FieldSchema` defined in each Credential Type. This ensures data integrity and security by enforcing constraints at save time.
|
|
177
|
+
|
|
178
|
+
### Supported Constraints
|
|
179
|
+
|
|
180
|
+
All JSON Schema Draft 7 validation keywords are supported:
|
|
181
|
+
|
|
182
|
+
| Constraint | Description | Example Use Case |
|
|
183
|
+
|-----------|-------------|------------------|
|
|
184
|
+
| `required` | Mandatory fields | API keys must include `apiKey` field |
|
|
185
|
+
| `const` | Fixed immutable values | OAuth token URLs that must never change |
|
|
186
|
+
| `enum` | Limited set of allowed values | Region selection, account types |
|
|
187
|
+
| `format` | Value format validation | `uri`, `email`, `date`, `uuid` |
|
|
188
|
+
| `pattern` | Regex pattern matching | API key format validation |
|
|
189
|
+
| `minLength`/`maxLength` | String length bounds | Password length requirements |
|
|
190
|
+
| `minimum`/`maximum` | Numeric range validation | Port numbers, timeout values |
|
|
191
|
+
| `default` | Auto-populated values | Default regions, endpoints |
|
|
192
|
+
|
|
193
|
+
### Schema Validation Flow
|
|
194
|
+
|
|
195
|
+
1. **Create/Update**: When `storeCredential()` or `updateCredential()` is called
|
|
196
|
+
2. **Apply Defaults**: Fields with `default` or `const` values are auto-populated
|
|
197
|
+
3. **Validate**: The complete credential values are validated against the schema
|
|
198
|
+
4. **Throw on Error**: If validation fails, a clear error message is thrown listing all violations
|
|
199
|
+
|
|
200
|
+
```typescript
|
|
201
|
+
// This credential type schema
|
|
202
|
+
{
|
|
203
|
+
"type": "object",
|
|
204
|
+
"properties": {
|
|
205
|
+
"apiKey": {
|
|
206
|
+
"type": "string",
|
|
207
|
+
"pattern": "^sk-[a-zA-Z0-9]{32}$",
|
|
208
|
+
"description": "OpenAI API key"
|
|
209
|
+
},
|
|
210
|
+
"endpoint": {
|
|
211
|
+
"type": "string",
|
|
212
|
+
"format": "uri",
|
|
213
|
+
"default": "https://api.openai.com/v1"
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
"required": ["apiKey"]
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// Will reject this (invalid pattern)
|
|
220
|
+
await engine.storeCredential('OpenAI', 'Production', {
|
|
221
|
+
apiKey: 'invalid-format' // ❌ Fails pattern validation
|
|
222
|
+
}, {}, contextUser);
|
|
223
|
+
// Error: Field "apiKey" does not match required pattern
|
|
224
|
+
|
|
225
|
+
// Will reject this (invalid URI format)
|
|
226
|
+
await engine.storeCredential('OpenAI', 'Production', {
|
|
227
|
+
apiKey: 'sk-abcdefghijklmnopqrstuvwxyz123456',
|
|
228
|
+
endpoint: 'not-a-url' // ❌ Fails format validation
|
|
229
|
+
}, {}, contextUser);
|
|
230
|
+
// Error: Field "endpoint" must be a valid uri
|
|
231
|
+
|
|
232
|
+
// Will accept and auto-populate default
|
|
233
|
+
await engine.storeCredential('OpenAI', 'Production', {
|
|
234
|
+
apiKey: 'sk-abcdefghijklmnopqrstuvwxyz123456'
|
|
235
|
+
// endpoint auto-populated with default: https://api.openai.com/v1
|
|
236
|
+
}, {}, contextUser);
|
|
237
|
+
// ✅ Success
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### Error Messages
|
|
241
|
+
|
|
242
|
+
Validation errors are formatted for clarity:
|
|
243
|
+
|
|
244
|
+
- **Required**: `Missing required field: apiKey`
|
|
245
|
+
- **Const**: `Field "tokenUrl" must be "https://api.box.com/oauth2/token"`
|
|
246
|
+
- **Enum**: `Field "region" must be one of: us-east-1, us-west-2, eu-west-1`
|
|
247
|
+
- **Format**: `Field "endpoint" must be a valid uri`
|
|
248
|
+
- **Pattern**: `Field "apiKey" does not match required pattern`
|
|
249
|
+
- **Length**: `Field "password" must be at least 8 characters`
|
|
250
|
+
- **Range**: `Field "port" must be at least 1024`
|
|
251
|
+
|
|
252
|
+
### Const Fields for Security
|
|
253
|
+
|
|
254
|
+
Use `const` in schemas to enforce fixed values that must never change:
|
|
255
|
+
|
|
256
|
+
```json
|
|
257
|
+
{
|
|
258
|
+
"tokenUrl": {
|
|
259
|
+
"type": "string",
|
|
260
|
+
"const": "https://api.box.com/oauth2/token",
|
|
261
|
+
"description": "Box.com OAuth token endpoint"
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
This prevents:
|
|
267
|
+
- Users from accidentally changing critical endpoints
|
|
268
|
+
- Malicious redirection of credentials to external servers
|
|
269
|
+
- Configuration drift across environments
|
|
270
|
+
|
|
271
|
+
Const values are:
|
|
272
|
+
- **Auto-populated** when creating credentials (users don't need to enter them)
|
|
273
|
+
- **Immutable** - validation rejects any attempt to change them
|
|
274
|
+
- **Visible** in UI as read-only fields
|
|
275
|
+
|
|
276
|
+
### Format Validation
|
|
277
|
+
|
|
278
|
+
The `format` keyword validates common data types:
|
|
279
|
+
|
|
280
|
+
- **uri** / **url** - Valid HTTP/HTTPS URLs
|
|
281
|
+
- **email** - Valid email addresses
|
|
282
|
+
- **date** - ISO 8601 dates
|
|
283
|
+
- **date-time** - ISO 8601 timestamps
|
|
284
|
+
- **uuid** - RFC 4122 UUIDs
|
|
285
|
+
- **ipv4** / **ipv6** - IP addresses
|
|
286
|
+
- **hostname** - Valid DNS hostnames
|
|
287
|
+
|
|
288
|
+
### Default Values
|
|
289
|
+
|
|
290
|
+
Use `default` to pre-populate fields with sensible values:
|
|
291
|
+
|
|
292
|
+
```json
|
|
293
|
+
{
|
|
294
|
+
"region": {
|
|
295
|
+
"type": "string",
|
|
296
|
+
"default": "us-east-1",
|
|
297
|
+
"enum": ["us-east-1", "us-west-2", "eu-west-1"]
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
Users can override defaults, but they provide good starting points and reduce configuration errors.
|
|
303
|
+
|
|
304
|
+
## Credential Validation
|
|
305
|
+
|
|
306
|
+
Validate credentials against provider endpoints:
|
|
307
|
+
|
|
308
|
+
```typescript
|
|
309
|
+
const result = await engine.validateCredential(credentialId, contextUser);
|
|
310
|
+
|
|
311
|
+
if (!result.isValid) {
|
|
312
|
+
console.error('Credential validation failed:', result.errors);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
// Result structure
|
|
316
|
+
interface CredentialValidationResult {
|
|
317
|
+
isValid: boolean;
|
|
318
|
+
errors: string[];
|
|
319
|
+
warnings: string[];
|
|
320
|
+
validatedAt: Date;
|
|
321
|
+
}
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
## Updating Credentials
|
|
325
|
+
|
|
326
|
+
Update credential values (automatically re-encrypted):
|
|
327
|
+
|
|
328
|
+
```typescript
|
|
329
|
+
await engine.updateCredential(
|
|
330
|
+
credentialId,
|
|
331
|
+
{ apiKey: 'new-sk-...' }, // New values
|
|
332
|
+
contextUser
|
|
333
|
+
);
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
## Cached Data Access
|
|
337
|
+
|
|
338
|
+
Access cached credential metadata without database calls:
|
|
339
|
+
|
|
340
|
+
```typescript
|
|
341
|
+
// All credentials
|
|
342
|
+
const credentials = engine.Credentials;
|
|
343
|
+
|
|
344
|
+
// All credential types
|
|
345
|
+
const types = engine.CredentialTypes;
|
|
346
|
+
|
|
347
|
+
// All credential categories
|
|
348
|
+
const categories = engine.CredentialCategories;
|
|
349
|
+
|
|
350
|
+
// Lookup helpers
|
|
351
|
+
const type = engine.getCredentialTypeByName('API Key');
|
|
352
|
+
const defaultCred = engine.getDefaultCredentialForType('API Key');
|
|
353
|
+
const credById = engine.getCredentialById('uuid-here');
|
|
354
|
+
const credByName = engine.getCredentialByName('API Key', 'OpenAI');
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
## Database Schema
|
|
358
|
+
|
|
359
|
+
### MJ: Credential Types
|
|
360
|
+
|
|
361
|
+
Defines the shape of credential values:
|
|
362
|
+
|
|
363
|
+
| Column | Description |
|
|
364
|
+
|--------|-------------|
|
|
365
|
+
| `Name` | Type name (e.g., 'API Key') |
|
|
366
|
+
| `Description` | Human-readable description |
|
|
367
|
+
| `FieldSchema` | JSON Schema for validation |
|
|
368
|
+
| `ValidationEndpoint` | Optional URL for validation |
|
|
369
|
+
|
|
370
|
+
### MJ: Credentials
|
|
371
|
+
|
|
372
|
+
Stores credential instances:
|
|
373
|
+
|
|
374
|
+
| Column | Description |
|
|
375
|
+
|--------|-------------|
|
|
376
|
+
| `Name` | Credential name (e.g., 'OpenAI Production') |
|
|
377
|
+
| `CredentialTypeID` | Foreign key to type |
|
|
378
|
+
| `Values` | Encrypted JSON blob |
|
|
379
|
+
| `IsDefault` | Default for this type |
|
|
380
|
+
| `IsActive` | Active status |
|
|
381
|
+
| `ExpiresAt` | Optional expiration |
|
|
382
|
+
| `LastUsedAt` | Updated on each access |
|
|
383
|
+
| `LastValidatedAt` | Updated on validation |
|
|
384
|
+
|
|
385
|
+
### MJ: Credential Categories
|
|
386
|
+
|
|
387
|
+
Optional organization:
|
|
388
|
+
|
|
389
|
+
| Column | Description |
|
|
390
|
+
|--------|-------------|
|
|
391
|
+
| `Name` | Category name |
|
|
392
|
+
| `Description` | Description |
|
|
393
|
+
| `ParentCategoryID` | For hierarchy |
|
|
394
|
+
|
|
395
|
+
## Security Considerations
|
|
396
|
+
|
|
397
|
+
1. **Encryption at Rest**
|
|
398
|
+
- The `Values` field uses MJ field-level encryption
|
|
399
|
+
- Only decrypted when explicitly accessed via `getCredential()`
|
|
400
|
+
|
|
401
|
+
2. **Audit Trail**
|
|
402
|
+
- Every access is logged with user, timestamp, and subsystem
|
|
403
|
+
- Failed access attempts are also logged
|
|
404
|
+
|
|
405
|
+
3. **Access Control**
|
|
406
|
+
- Credentials inherit MJ's entity-level permissions
|
|
407
|
+
- Use `contextUser` to enforce authorization
|
|
408
|
+
|
|
409
|
+
4. **Expiration**
|
|
410
|
+
- Set `ExpiresAt` on credentials to enforce rotation
|
|
411
|
+
- Check `expiresAt` in the resolved credential for warnings
|
|
412
|
+
|
|
413
|
+
5. **Per-Request Override**
|
|
414
|
+
- Use `directValues` for testing without database access
|
|
415
|
+
- Values are marked with `source: 'request'` for audit clarity
|
|
416
|
+
|
|
417
|
+
## Integration with EncryptionEngine
|
|
418
|
+
|
|
419
|
+
The Credentials package works alongside the Encryption package:
|
|
420
|
+
|
|
421
|
+
- **CredentialEngine** - Manages credential storage and retrieval
|
|
422
|
+
- **EncryptionEngine** - Handles API key generation, validation, and field encryption
|
|
423
|
+
|
|
424
|
+
API key authentication flow:
|
|
425
|
+
1. `EncryptionEngine.ValidateAPIKey()` hashes the incoming key
|
|
426
|
+
2. `CredentialEngine.getAPIKeyByHash()` looks up the cached key entity
|
|
427
|
+
3. Validation checks status, expiration, and user account
|
|
428
|
+
4. User context is returned for authorized operations
|
|
429
|
+
|
|
430
|
+
## License
|
|
431
|
+
|
|
432
|
+
ISC
|
|
@@ -6,6 +6,9 @@ export declare class CredentialEngine extends BaseEngine<CredentialEngine> {
|
|
|
6
6
|
private _credentialTypes;
|
|
7
7
|
private _credentialCategories;
|
|
8
8
|
private _credentialsEntityId;
|
|
9
|
+
private _ajv;
|
|
10
|
+
private _schemaValidators;
|
|
11
|
+
constructor();
|
|
9
12
|
Config(forceRefresh?: boolean, contextUser?: UserInfo, provider?: IMetadataProvider): Promise<void>;
|
|
10
13
|
static get Instance(): CredentialEngine;
|
|
11
14
|
get Credentials(): CredentialEntity[];
|
|
@@ -21,7 +24,10 @@ export declare class CredentialEngine extends BaseEngine<CredentialEngine> {
|
|
|
21
24
|
validateCredential(credentialId: string, contextUser: UserInfo): Promise<CredentialValidationResult>;
|
|
22
25
|
private resolveCredential;
|
|
23
26
|
private parseCredentialValues;
|
|
27
|
+
private getValidator;
|
|
24
28
|
private validateValues;
|
|
29
|
+
private formatValidationErrors;
|
|
30
|
+
private applySchemaDefaults;
|
|
25
31
|
private updateLastUsedAt;
|
|
26
32
|
private updateLastValidatedAt;
|
|
27
33
|
protected callValidationEndpoint(endpoint: string, values: Record<string, string>): Promise<CredentialValidationResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CredentialEngine.d.ts","sourceRoot":"","sources":["../src/CredentialEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,UAAU,EAEV,iBAAiB,
|
|
1
|
+
{"version":3,"file":"CredentialEngine.d.ts","sourceRoot":"","sources":["../src/CredentialEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,UAAU,EAEV,iBAAiB,EAIjB,QAAQ,EACX,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAEH,wBAAwB,EACxB,gBAAgB,EAChB,oBAAoB,EACvB,MAAM,+BAA+B,CAAC;AAIvC,OAAO,EACH,2BAA2B,EAC3B,kBAAkB,EAClB,sBAAsB,EACtB,0BAA0B,EAE7B,MAAM,SAAS,CAAC;AAuCjB,qBAAa,gBAAiB,SAAQ,UAAU,CAAC,gBAAgB,CAAC;IAE9D,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,gBAAgB,CAA8B;IACtD,OAAO,CAAC,qBAAqB,CAAkC;IAG/D,OAAO,CAAC,oBAAoB,CAAuB;IAGnD,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,iBAAiB,CAA4C;;IAwBxD,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyChH,WAAkB,QAAQ,IAAI,gBAAgB,CAE7C;IASD,IAAW,WAAW,IAAI,gBAAgB,EAAE,CAE3C;IAKD,IAAW,eAAe,IAAI,oBAAoB,EAAE,CAEnD;IAKD,IAAW,oBAAoB,IAAI,wBAAwB,EAAE,CAE5D;IASM,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAS3E,2BAA2B,CAAC,kBAAkB,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAYrF,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAOrE,mBAAmB,CAAC,kBAAkB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAiC/F,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChF,cAAc,EAAE,MAAM,EACtB,OAAO,GAAE,2BAAgC,GAC1C,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAsEpB,eAAe,CACxB,kBAAkB,EAAE,MAAM,EAC1B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,OAAO,EAAE,sBAAsB,EAC/B,WAAW,EAAE,QAAQ,GACtB,OAAO,CAAC,gBAAgB,CAAC;IAwDf,gBAAgB,CACzB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,WAAW,EAAE,QAAQ,GACtB,OAAO,CAAC,IAAI,CAAC;IAgDH,kBAAkB,CAC3B,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,QAAQ,GACtB,OAAO,CAAC,0BAA0B,CAAC;IAuDtC,OAAO,CAAC,iBAAiB;IA2BzB,OAAO,CAAC,qBAAqB;IAmB7B,OAAO,CAAC,YAAY;IAoBpB,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,sBAAsB;IA2C9B,OAAO,CAAC,mBAAmB;YA+Bb,gBAAgB;YAgBhB,qBAAqB;cAiBnB,sBAAsB,CAClC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,0BAA0B,CAAC;YAexB,SAAS;CAuC1B"}
|
package/dist/CredentialEngine.js
CHANGED
|
@@ -1,15 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.CredentialEngine = void 0;
|
|
4
7
|
const core_1 = require("@memberjunction/core");
|
|
5
|
-
const
|
|
8
|
+
const ajv_1 = __importDefault(require("ajv"));
|
|
9
|
+
const ajv_formats_1 = __importDefault(require("ajv-formats"));
|
|
10
|
+
const CREDENTIAL_ACCESS_AUDIT_LOG_TYPE_ID = '9375C9F9-1A58-44D6-9B09-8C6AF0714383';
|
|
6
11
|
class CredentialEngine extends core_1.BaseEngine {
|
|
7
12
|
constructor() {
|
|
8
|
-
super(
|
|
13
|
+
super();
|
|
9
14
|
this._credentials = [];
|
|
10
15
|
this._credentialTypes = [];
|
|
11
16
|
this._credentialCategories = [];
|
|
12
17
|
this._credentialsEntityId = null;
|
|
18
|
+
this._schemaValidators = new Map();
|
|
19
|
+
this._ajv = new ajv_1.default({
|
|
20
|
+
allErrors: true,
|
|
21
|
+
strict: false,
|
|
22
|
+
coerceTypes: false
|
|
23
|
+
});
|
|
24
|
+
(0, ajv_formats_1.default)(this._ajv);
|
|
13
25
|
}
|
|
14
26
|
async Config(forceRefresh, contextUser, provider) {
|
|
15
27
|
const params = [
|
|
@@ -131,14 +143,15 @@ class CredentialEngine extends core_1.BaseEngine {
|
|
|
131
143
|
if (!credType) {
|
|
132
144
|
throw new Error(`Credential type not found: ${credentialTypeName}`);
|
|
133
145
|
}
|
|
134
|
-
this.
|
|
146
|
+
const valuesWithDefaults = this.applySchemaDefaults(values, credType.FieldSchema);
|
|
147
|
+
this.validateValues(valuesWithDefaults, credType.FieldSchema, credType.ID);
|
|
135
148
|
const md = new core_1.Metadata();
|
|
136
149
|
const credEntity = await md.GetEntityObject('MJ: Credentials', contextUser);
|
|
137
150
|
credEntity.NewRecord();
|
|
138
151
|
credEntity.CredentialTypeID = credType.ID;
|
|
139
152
|
credEntity.Name = name;
|
|
140
153
|
credEntity.Description = options.description || null;
|
|
141
|
-
credEntity.Values = JSON.stringify(
|
|
154
|
+
credEntity.Values = JSON.stringify(valuesWithDefaults);
|
|
142
155
|
credEntity.IsDefault = options.isDefault ?? false;
|
|
143
156
|
credEntity.IsActive = true;
|
|
144
157
|
credEntity.CategoryID = options.categoryId || null;
|
|
@@ -165,9 +178,13 @@ class CredentialEngine extends core_1.BaseEngine {
|
|
|
165
178
|
}
|
|
166
179
|
const credType = this._credentialTypes.find(t => t.ID === credEntity.CredentialTypeID);
|
|
167
180
|
if (credType) {
|
|
168
|
-
this.
|
|
181
|
+
const valuesWithDefaults = this.applySchemaDefaults(values, credType.FieldSchema);
|
|
182
|
+
this.validateValues(valuesWithDefaults, credType.FieldSchema, credType.ID);
|
|
183
|
+
credEntity.Values = JSON.stringify(valuesWithDefaults);
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
credEntity.Values = JSON.stringify(values);
|
|
169
187
|
}
|
|
170
|
-
credEntity.Values = JSON.stringify(values);
|
|
171
188
|
const saved = await credEntity.Save();
|
|
172
189
|
if (!saved) {
|
|
173
190
|
throw new Error('Failed to update credential');
|
|
@@ -235,25 +252,84 @@ class CredentialEngine extends core_1.BaseEngine {
|
|
|
235
252
|
return {};
|
|
236
253
|
}
|
|
237
254
|
}
|
|
238
|
-
|
|
255
|
+
getValidator(credentialTypeId, schemaJson) {
|
|
256
|
+
if (!this._schemaValidators.has(credentialTypeId)) {
|
|
257
|
+
const schema = JSON.parse(schemaJson);
|
|
258
|
+
const validator = this._ajv.compile(schema);
|
|
259
|
+
this._schemaValidators.set(credentialTypeId, validator);
|
|
260
|
+
}
|
|
261
|
+
return this._schemaValidators.get(credentialTypeId);
|
|
262
|
+
}
|
|
263
|
+
validateValues(values, fieldSchemaJson, credentialTypeId) {
|
|
239
264
|
if (!fieldSchemaJson)
|
|
240
265
|
return;
|
|
241
266
|
try {
|
|
242
|
-
const
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
267
|
+
const validator = credentialTypeId
|
|
268
|
+
? this.getValidator(credentialTypeId, fieldSchemaJson)
|
|
269
|
+
: this._ajv.compile(JSON.parse(fieldSchemaJson));
|
|
270
|
+
const valid = validator(values);
|
|
271
|
+
if (!valid) {
|
|
272
|
+
const errors = this.formatValidationErrors(validator.errors || []);
|
|
273
|
+
throw new Error(`Credential validation failed:\n${errors.join('\n')}`);
|
|
248
274
|
}
|
|
249
275
|
}
|
|
250
276
|
catch (e) {
|
|
251
277
|
if (e instanceof SyntaxError) {
|
|
252
278
|
(0, core_1.LogError)(`Invalid FieldSchema JSON: ${e}`);
|
|
279
|
+
throw new Error('Invalid credential type schema');
|
|
253
280
|
}
|
|
254
|
-
|
|
255
|
-
|
|
281
|
+
throw e;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
formatValidationErrors(errors) {
|
|
285
|
+
return errors.map(error => {
|
|
286
|
+
const field = error.instancePath.replace(/^\//, '') || 'credential';
|
|
287
|
+
switch (error.keyword) {
|
|
288
|
+
case 'required':
|
|
289
|
+
return `Missing required field: ${error.params.missingProperty}`;
|
|
290
|
+
case 'const':
|
|
291
|
+
return `Field "${field}" must be "${error.params.allowedValue}"`;
|
|
292
|
+
case 'enum':
|
|
293
|
+
const allowed = error.params.allowedValues.join(', ');
|
|
294
|
+
return `Field "${field}" must be one of: ${allowed}`;
|
|
295
|
+
case 'format':
|
|
296
|
+
return `Field "${field}" must be a valid ${error.params.format}`;
|
|
297
|
+
case 'pattern':
|
|
298
|
+
return `Field "${field}" does not match required pattern`;
|
|
299
|
+
case 'minLength':
|
|
300
|
+
return `Field "${field}" must be at least ${error.params.limit} characters`;
|
|
301
|
+
case 'maxLength':
|
|
302
|
+
return `Field "${field}" must be no more than ${error.params.limit} characters`;
|
|
303
|
+
case 'minimum':
|
|
304
|
+
return `Field "${field}" must be at least ${error.params.limit}`;
|
|
305
|
+
case 'maximum':
|
|
306
|
+
return `Field "${field}" must be no more than ${error.params.limit}`;
|
|
307
|
+
default:
|
|
308
|
+
return `Field "${field}": ${error.message}`;
|
|
256
309
|
}
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
applySchemaDefaults(values, fieldSchemaJson) {
|
|
313
|
+
if (!fieldSchemaJson)
|
|
314
|
+
return values;
|
|
315
|
+
try {
|
|
316
|
+
const schema = JSON.parse(fieldSchemaJson);
|
|
317
|
+
const properties = schema.properties || {};
|
|
318
|
+
const result = { ...values };
|
|
319
|
+
for (const [fieldName, fieldSchema] of Object.entries(properties)) {
|
|
320
|
+
const propSchema = fieldSchema;
|
|
321
|
+
if (!(fieldName in result) && 'const' in propSchema) {
|
|
322
|
+
result[fieldName] = String(propSchema.const);
|
|
323
|
+
}
|
|
324
|
+
else if (!(fieldName in result) && 'default' in propSchema) {
|
|
325
|
+
result[fieldName] = String(propSchema.default);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
return result;
|
|
329
|
+
}
|
|
330
|
+
catch (e) {
|
|
331
|
+
(0, core_1.LogError)(`Failed to apply schema defaults: ${e}`);
|
|
332
|
+
return values;
|
|
257
333
|
}
|
|
258
334
|
}
|
|
259
335
|
async updateLastUsedAt(credentialId, contextUser) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CredentialEngine.js","sourceRoot":"","sources":["../src/CredentialEngine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CredentialEngine.js","sourceRoot":"","sources":["../src/CredentialEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-validation.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/credential-validation.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const globals_1 = require("@jest/globals");
|
|
7
|
+
const ajv_1 = __importDefault(require("ajv"));
|
|
8
|
+
const ajv_formats_1 = __importDefault(require("ajv-formats"));
|
|
9
|
+
(0, globals_1.describe)('Credential Validation with Ajv', () => {
|
|
10
|
+
let ajv;
|
|
11
|
+
(0, globals_1.beforeEach)(() => {
|
|
12
|
+
ajv = new ajv_1.default({
|
|
13
|
+
allErrors: true,
|
|
14
|
+
strict: false,
|
|
15
|
+
coerceTypes: false
|
|
16
|
+
});
|
|
17
|
+
(0, ajv_formats_1.default)(ajv);
|
|
18
|
+
});
|
|
19
|
+
(0, globals_1.describe)('Required Field Validation', () => {
|
|
20
|
+
(0, globals_1.test)('should reject when required field is missing', () => {
|
|
21
|
+
const schema = {
|
|
22
|
+
type: 'object',
|
|
23
|
+
properties: {
|
|
24
|
+
apiKey: { type: 'string' }
|
|
25
|
+
},
|
|
26
|
+
required: ['apiKey']
|
|
27
|
+
};
|
|
28
|
+
const validator = ajv.compile(schema);
|
|
29
|
+
const result = validator({});
|
|
30
|
+
(0, globals_1.expect)(result).toBe(false);
|
|
31
|
+
(0, globals_1.expect)(validator.errors).toBeDefined();
|
|
32
|
+
(0, globals_1.expect)(validator.errors?.[0].keyword).toBe('required');
|
|
33
|
+
(0, globals_1.expect)(validator.errors?.[0].params.missingProperty).toBe('apiKey');
|
|
34
|
+
});
|
|
35
|
+
(0, globals_1.test)('should pass when all required fields are present', () => {
|
|
36
|
+
const schema = {
|
|
37
|
+
type: 'object',
|
|
38
|
+
properties: {
|
|
39
|
+
apiKey: { type: 'string' },
|
|
40
|
+
endpoint: { type: 'string' }
|
|
41
|
+
},
|
|
42
|
+
required: ['apiKey', 'endpoint']
|
|
43
|
+
};
|
|
44
|
+
const validator = ajv.compile(schema);
|
|
45
|
+
const result = validator({
|
|
46
|
+
apiKey: 'sk-test123',
|
|
47
|
+
endpoint: 'https://api.example.com'
|
|
48
|
+
});
|
|
49
|
+
(0, globals_1.expect)(result).toBe(true);
|
|
50
|
+
(0, globals_1.expect)(validator.errors).toBeNull();
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
(0, globals_1.describe)('Const Field Validation', () => {
|
|
54
|
+
(0, globals_1.test)('should reject when const field has wrong value', () => {
|
|
55
|
+
const schema = {
|
|
56
|
+
type: 'object',
|
|
57
|
+
properties: {
|
|
58
|
+
tokenUrl: {
|
|
59
|
+
type: 'string',
|
|
60
|
+
const: 'https://api.box.com/oauth2/token'
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
const validator = ajv.compile(schema);
|
|
65
|
+
const result = validator({ tokenUrl: 'https://wrong.url.com' });
|
|
66
|
+
(0, globals_1.expect)(result).toBe(false);
|
|
67
|
+
(0, globals_1.expect)(validator.errors?.[0].keyword).toBe('const');
|
|
68
|
+
(0, globals_1.expect)(validator.errors?.[0].params.allowedValue).toBe('https://api.box.com/oauth2/token');
|
|
69
|
+
});
|
|
70
|
+
(0, globals_1.test)('should pass when const field matches exactly', () => {
|
|
71
|
+
const schema = {
|
|
72
|
+
type: 'object',
|
|
73
|
+
properties: {
|
|
74
|
+
tokenUrl: {
|
|
75
|
+
type: 'string',
|
|
76
|
+
const: 'https://api.box.com/oauth2/token'
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
const validator = ajv.compile(schema);
|
|
81
|
+
const result = validator({ tokenUrl: 'https://api.box.com/oauth2/token' });
|
|
82
|
+
(0, globals_1.expect)(result).toBe(true);
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
(0, globals_1.describe)('Enum Field Validation', () => {
|
|
86
|
+
(0, globals_1.test)('should reject when value is not in enum', () => {
|
|
87
|
+
const schema = {
|
|
88
|
+
type: 'object',
|
|
89
|
+
properties: {
|
|
90
|
+
boxSubjectType: {
|
|
91
|
+
type: 'string',
|
|
92
|
+
enum: ['enterprise', 'user']
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
const validator = ajv.compile(schema);
|
|
97
|
+
const result = validator({ boxSubjectType: 'invalid' });
|
|
98
|
+
(0, globals_1.expect)(result).toBe(false);
|
|
99
|
+
(0, globals_1.expect)(validator.errors?.[0].keyword).toBe('enum');
|
|
100
|
+
(0, globals_1.expect)(validator.errors?.[0].params.allowedValues).toEqual(['enterprise', 'user']);
|
|
101
|
+
});
|
|
102
|
+
(0, globals_1.test)('should pass when value is in enum', () => {
|
|
103
|
+
const schema = {
|
|
104
|
+
type: 'object',
|
|
105
|
+
properties: {
|
|
106
|
+
boxSubjectType: {
|
|
107
|
+
type: 'string',
|
|
108
|
+
enum: ['enterprise', 'user']
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
const validator = ajv.compile(schema);
|
|
113
|
+
const result = validator({ boxSubjectType: 'enterprise' });
|
|
114
|
+
(0, globals_1.expect)(result).toBe(true);
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
(0, globals_1.describe)('Format Validation', () => {
|
|
118
|
+
(0, globals_1.test)('should reject invalid URI format', () => {
|
|
119
|
+
const schema = {
|
|
120
|
+
type: 'object',
|
|
121
|
+
properties: {
|
|
122
|
+
endpoint: {
|
|
123
|
+
type: 'string',
|
|
124
|
+
format: 'uri'
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
const validator = ajv.compile(schema);
|
|
129
|
+
const result = validator({ endpoint: 'not-a-valid-url' });
|
|
130
|
+
(0, globals_1.expect)(result).toBe(false);
|
|
131
|
+
(0, globals_1.expect)(validator.errors?.[0].keyword).toBe('format');
|
|
132
|
+
(0, globals_1.expect)(validator.errors?.[0].params.format).toBe('uri');
|
|
133
|
+
});
|
|
134
|
+
(0, globals_1.test)('should pass valid URI format', () => {
|
|
135
|
+
const schema = {
|
|
136
|
+
type: 'object',
|
|
137
|
+
properties: {
|
|
138
|
+
endpoint: {
|
|
139
|
+
type: 'string',
|
|
140
|
+
format: 'uri'
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
const validator = ajv.compile(schema);
|
|
145
|
+
const result = validator({ endpoint: 'https://api.example.com/v1' });
|
|
146
|
+
(0, globals_1.expect)(result).toBe(true);
|
|
147
|
+
});
|
|
148
|
+
(0, globals_1.test)('should reject invalid email format', () => {
|
|
149
|
+
const schema = {
|
|
150
|
+
type: 'object',
|
|
151
|
+
properties: {
|
|
152
|
+
email: {
|
|
153
|
+
type: 'string',
|
|
154
|
+
format: 'email'
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
const validator = ajv.compile(schema);
|
|
159
|
+
const result = validator({ email: 'not-an-email' });
|
|
160
|
+
(0, globals_1.expect)(result).toBe(false);
|
|
161
|
+
(0, globals_1.expect)(validator.errors?.[0].params.format).toBe('email');
|
|
162
|
+
});
|
|
163
|
+
(0, globals_1.test)('should pass valid email format', () => {
|
|
164
|
+
const schema = {
|
|
165
|
+
type: 'object',
|
|
166
|
+
properties: {
|
|
167
|
+
email: {
|
|
168
|
+
type: 'string',
|
|
169
|
+
format: 'email'
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
const validator = ajv.compile(schema);
|
|
174
|
+
const result = validator({ email: 'test@example.com' });
|
|
175
|
+
(0, globals_1.expect)(result).toBe(true);
|
|
176
|
+
});
|
|
177
|
+
(0, globals_1.test)('should reject invalid uuid format', () => {
|
|
178
|
+
const schema = {
|
|
179
|
+
type: 'object',
|
|
180
|
+
properties: {
|
|
181
|
+
id: {
|
|
182
|
+
type: 'string',
|
|
183
|
+
format: 'uuid'
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
const validator = ajv.compile(schema);
|
|
188
|
+
const result = validator({ id: 'not-a-uuid' });
|
|
189
|
+
(0, globals_1.expect)(result).toBe(false);
|
|
190
|
+
});
|
|
191
|
+
(0, globals_1.test)('should pass valid uuid format', () => {
|
|
192
|
+
const schema = {
|
|
193
|
+
type: 'object',
|
|
194
|
+
properties: {
|
|
195
|
+
id: {
|
|
196
|
+
type: 'string',
|
|
197
|
+
format: 'uuid'
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
const validator = ajv.compile(schema);
|
|
202
|
+
const result = validator({ id: '550e8400-e29b-41d4-a716-446655440000' });
|
|
203
|
+
(0, globals_1.expect)(result).toBe(true);
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
(0, globals_1.describe)('Pattern Validation', () => {
|
|
207
|
+
(0, globals_1.test)('should reject value not matching pattern', () => {
|
|
208
|
+
const schema = {
|
|
209
|
+
type: 'object',
|
|
210
|
+
properties: {
|
|
211
|
+
apiKey: {
|
|
212
|
+
type: 'string',
|
|
213
|
+
pattern: '^sk-[a-zA-Z0-9]{32}$'
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
const validator = ajv.compile(schema);
|
|
218
|
+
const result = validator({ apiKey: 'invalid-key' });
|
|
219
|
+
(0, globals_1.expect)(result).toBe(false);
|
|
220
|
+
(0, globals_1.expect)(validator.errors?.[0].keyword).toBe('pattern');
|
|
221
|
+
});
|
|
222
|
+
(0, globals_1.test)('should pass value matching pattern', () => {
|
|
223
|
+
const schema = {
|
|
224
|
+
type: 'object',
|
|
225
|
+
properties: {
|
|
226
|
+
apiKey: {
|
|
227
|
+
type: 'string',
|
|
228
|
+
pattern: '^sk-[a-zA-Z0-9]{32}$'
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
const validator = ajv.compile(schema);
|
|
233
|
+
const result = validator({ apiKey: 'sk-abcdefghijklmnopqrstuvwxyz123456' });
|
|
234
|
+
(0, globals_1.expect)(result).toBe(true);
|
|
235
|
+
});
|
|
236
|
+
});
|
|
237
|
+
(0, globals_1.describe)('Length Validation', () => {
|
|
238
|
+
(0, globals_1.test)('should reject value shorter than minLength', () => {
|
|
239
|
+
const schema = {
|
|
240
|
+
type: 'object',
|
|
241
|
+
properties: {
|
|
242
|
+
password: {
|
|
243
|
+
type: 'string',
|
|
244
|
+
minLength: 8
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
const validator = ajv.compile(schema);
|
|
249
|
+
const result = validator({ password: 'short' });
|
|
250
|
+
(0, globals_1.expect)(result).toBe(false);
|
|
251
|
+
(0, globals_1.expect)(validator.errors?.[0].keyword).toBe('minLength');
|
|
252
|
+
(0, globals_1.expect)(validator.errors?.[0].params.limit).toBe(8);
|
|
253
|
+
});
|
|
254
|
+
(0, globals_1.test)('should reject value longer than maxLength', () => {
|
|
255
|
+
const schema = {
|
|
256
|
+
type: 'object',
|
|
257
|
+
properties: {
|
|
258
|
+
name: {
|
|
259
|
+
type: 'string',
|
|
260
|
+
maxLength: 10
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
};
|
|
264
|
+
const validator = ajv.compile(schema);
|
|
265
|
+
const result = validator({ name: 'this-is-too-long' });
|
|
266
|
+
(0, globals_1.expect)(result).toBe(false);
|
|
267
|
+
(0, globals_1.expect)(validator.errors?.[0].keyword).toBe('maxLength');
|
|
268
|
+
(0, globals_1.expect)(validator.errors?.[0].params.limit).toBe(10);
|
|
269
|
+
});
|
|
270
|
+
(0, globals_1.test)('should pass value within length bounds', () => {
|
|
271
|
+
const schema = {
|
|
272
|
+
type: 'object',
|
|
273
|
+
properties: {
|
|
274
|
+
password: {
|
|
275
|
+
type: 'string',
|
|
276
|
+
minLength: 8,
|
|
277
|
+
maxLength: 20
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
};
|
|
281
|
+
const validator = ajv.compile(schema);
|
|
282
|
+
const result = validator({ password: 'goodpassword' });
|
|
283
|
+
(0, globals_1.expect)(result).toBe(true);
|
|
284
|
+
});
|
|
285
|
+
});
|
|
286
|
+
(0, globals_1.describe)('Numeric Range Validation', () => {
|
|
287
|
+
(0, globals_1.test)('should reject value below minimum', () => {
|
|
288
|
+
const schema = {
|
|
289
|
+
type: 'object',
|
|
290
|
+
properties: {
|
|
291
|
+
port: {
|
|
292
|
+
type: 'number',
|
|
293
|
+
minimum: 1024
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
const validator = ajv.compile(schema);
|
|
298
|
+
const result = validator({ port: 80 });
|
|
299
|
+
(0, globals_1.expect)(result).toBe(false);
|
|
300
|
+
(0, globals_1.expect)(validator.errors?.[0].keyword).toBe('minimum');
|
|
301
|
+
});
|
|
302
|
+
(0, globals_1.test)('should reject value above maximum', () => {
|
|
303
|
+
const schema = {
|
|
304
|
+
type: 'object',
|
|
305
|
+
properties: {
|
|
306
|
+
port: {
|
|
307
|
+
type: 'number',
|
|
308
|
+
maximum: 65535
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
};
|
|
312
|
+
const validator = ajv.compile(schema);
|
|
313
|
+
const result = validator({ port: 70000 });
|
|
314
|
+
(0, globals_1.expect)(result).toBe(false);
|
|
315
|
+
(0, globals_1.expect)(validator.errors?.[0].keyword).toBe('maximum');
|
|
316
|
+
});
|
|
317
|
+
(0, globals_1.test)('should pass value within numeric bounds', () => {
|
|
318
|
+
const schema = {
|
|
319
|
+
type: 'object',
|
|
320
|
+
properties: {
|
|
321
|
+
port: {
|
|
322
|
+
type: 'number',
|
|
323
|
+
minimum: 1024,
|
|
324
|
+
maximum: 65535
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
};
|
|
328
|
+
const validator = ajv.compile(schema);
|
|
329
|
+
const result = validator({ port: 8080 });
|
|
330
|
+
(0, globals_1.expect)(result).toBe(true);
|
|
331
|
+
});
|
|
332
|
+
});
|
|
333
|
+
(0, globals_1.describe)('Combined Constraints', () => {
|
|
334
|
+
(0, globals_1.test)('should validate Box.com OAuth schema', () => {
|
|
335
|
+
const schema = {
|
|
336
|
+
type: 'object',
|
|
337
|
+
properties: {
|
|
338
|
+
clientId: { type: 'string' },
|
|
339
|
+
clientSecret: { type: 'string' },
|
|
340
|
+
tokenUrl: {
|
|
341
|
+
type: 'string',
|
|
342
|
+
const: 'https://api.box.com/oauth2/token'
|
|
343
|
+
},
|
|
344
|
+
boxSubjectType: {
|
|
345
|
+
type: 'string',
|
|
346
|
+
enum: ['enterprise', 'user']
|
|
347
|
+
}
|
|
348
|
+
},
|
|
349
|
+
required: ['clientId', 'clientSecret', 'tokenUrl', 'boxSubjectType']
|
|
350
|
+
};
|
|
351
|
+
const validator = ajv.compile(schema);
|
|
352
|
+
(0, globals_1.expect)(validator({
|
|
353
|
+
clientId: 'test-client',
|
|
354
|
+
clientSecret: 'test-secret',
|
|
355
|
+
tokenUrl: 'https://api.box.com/oauth2/token',
|
|
356
|
+
boxSubjectType: 'enterprise'
|
|
357
|
+
})).toBe(true);
|
|
358
|
+
(0, globals_1.expect)(validator({
|
|
359
|
+
clientId: 'test-client',
|
|
360
|
+
clientSecret: 'test-secret',
|
|
361
|
+
tokenUrl: 'https://wrong.url.com',
|
|
362
|
+
boxSubjectType: 'enterprise'
|
|
363
|
+
})).toBe(false);
|
|
364
|
+
(0, globals_1.expect)(validator({
|
|
365
|
+
clientId: 'test-client',
|
|
366
|
+
clientSecret: 'test-secret',
|
|
367
|
+
tokenUrl: 'https://api.box.com/oauth2/token',
|
|
368
|
+
boxSubjectType: 'invalid'
|
|
369
|
+
})).toBe(false);
|
|
370
|
+
});
|
|
371
|
+
(0, globals_1.test)('should validate GCP credential schema with defaults', () => {
|
|
372
|
+
const schema = {
|
|
373
|
+
type: 'object',
|
|
374
|
+
properties: {
|
|
375
|
+
projectId: { type: 'string' },
|
|
376
|
+
location: {
|
|
377
|
+
type: 'string',
|
|
378
|
+
default: 'us-central1'
|
|
379
|
+
},
|
|
380
|
+
endpoint: {
|
|
381
|
+
type: 'string',
|
|
382
|
+
format: 'uri'
|
|
383
|
+
}
|
|
384
|
+
},
|
|
385
|
+
required: ['projectId']
|
|
386
|
+
};
|
|
387
|
+
const validator = ajv.compile(schema);
|
|
388
|
+
(0, globals_1.expect)(validator({
|
|
389
|
+
projectId: 'my-project',
|
|
390
|
+
endpoint: 'https://api.example.com'
|
|
391
|
+
})).toBe(true);
|
|
392
|
+
(0, globals_1.expect)(validator({
|
|
393
|
+
projectId: 'my-project',
|
|
394
|
+
endpoint: 'not-a-uri'
|
|
395
|
+
})).toBe(false);
|
|
396
|
+
});
|
|
397
|
+
});
|
|
398
|
+
(0, globals_1.describe)('Error Message Formatting', () => {
|
|
399
|
+
(0, globals_1.test)('should format required error message', () => {
|
|
400
|
+
const schema = {
|
|
401
|
+
type: 'object',
|
|
402
|
+
properties: {
|
|
403
|
+
apiKey: { type: 'string' }
|
|
404
|
+
},
|
|
405
|
+
required: ['apiKey']
|
|
406
|
+
};
|
|
407
|
+
const validator = ajv.compile(schema);
|
|
408
|
+
validator({});
|
|
409
|
+
const error = validator.errors?.[0];
|
|
410
|
+
(0, globals_1.expect)(error?.keyword).toBe('required');
|
|
411
|
+
(0, globals_1.expect)(error?.params.missingProperty).toBe('apiKey');
|
|
412
|
+
const message = `Missing required field: ${error?.params.missingProperty}`;
|
|
413
|
+
(0, globals_1.expect)(message).toBe('Missing required field: apiKey');
|
|
414
|
+
});
|
|
415
|
+
(0, globals_1.test)('should format const error message', () => {
|
|
416
|
+
const schema = {
|
|
417
|
+
type: 'object',
|
|
418
|
+
properties: {
|
|
419
|
+
tokenUrl: { const: 'https://api.box.com/oauth2/token' }
|
|
420
|
+
}
|
|
421
|
+
};
|
|
422
|
+
const validator = ajv.compile(schema);
|
|
423
|
+
validator({ tokenUrl: 'wrong' });
|
|
424
|
+
const error = validator.errors?.[0];
|
|
425
|
+
const field = error?.instancePath.replace(/^\//, '') || 'credential';
|
|
426
|
+
const message = `Field "${field}" must be "${error?.params.allowedValue}"`;
|
|
427
|
+
(0, globals_1.expect)(message).toContain('must be "https://api.box.com/oauth2/token"');
|
|
428
|
+
});
|
|
429
|
+
(0, globals_1.test)('should format enum error message', () => {
|
|
430
|
+
const schema = {
|
|
431
|
+
type: 'object',
|
|
432
|
+
properties: {
|
|
433
|
+
type: { enum: ['enterprise', 'user'] }
|
|
434
|
+
}
|
|
435
|
+
};
|
|
436
|
+
const validator = ajv.compile(schema);
|
|
437
|
+
validator({ type: 'invalid' });
|
|
438
|
+
const error = validator.errors?.[0];
|
|
439
|
+
const allowed = error?.params.allowedValues.join(', ');
|
|
440
|
+
const message = `Field "type" must be one of: ${allowed}`;
|
|
441
|
+
(0, globals_1.expect)(message).toBe('Field "type" must be one of: enterprise, user');
|
|
442
|
+
});
|
|
443
|
+
});
|
|
444
|
+
});
|
|
445
|
+
//# sourceMappingURL=credential-validation.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-validation.test.js","sourceRoot":"","sources":["../../src/__tests__/credential-validation.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/credentials",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.4.0",
|
|
4
4
|
"description": "MemberJunction: Credential Engine - secure credential management with caching, encryption, and audit logging.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -10,18 +10,23 @@
|
|
|
10
10
|
"scripts": {
|
|
11
11
|
"start": "ts-node-dev src/index.ts",
|
|
12
12
|
"build": "tsc",
|
|
13
|
-
"test": "
|
|
13
|
+
"test": "jest"
|
|
14
14
|
},
|
|
15
15
|
"author": "MemberJunction.com",
|
|
16
16
|
"license": "ISC",
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@memberjunction/core": "3.
|
|
19
|
-
"@memberjunction/global": "3.
|
|
20
|
-
"@memberjunction/core-entities": "3.
|
|
18
|
+
"@memberjunction/core": "3.4.0",
|
|
19
|
+
"@memberjunction/global": "3.4.0",
|
|
20
|
+
"@memberjunction/core-entities": "3.4.0",
|
|
21
|
+
"ajv": "^8.17.1",
|
|
22
|
+
"ajv-formats": "^2.1.1",
|
|
21
23
|
"rxjs": "^7.8.1"
|
|
22
24
|
},
|
|
23
25
|
"devDependencies": {
|
|
26
|
+
"@types/jest": "^29.5.0",
|
|
24
27
|
"@types/node": "20.14.2",
|
|
28
|
+
"jest": "^29.7.0",
|
|
29
|
+
"ts-jest": "^29.1.0",
|
|
25
30
|
"ts-node-dev": "^2.0.0",
|
|
26
31
|
"typescript": "^5.4.5"
|
|
27
32
|
},
|