@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 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,EAKjB,QAAQ,EACX,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEH,wBAAwB,EACxB,gBAAgB,EAChB,oBAAoB,EAEvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACH,2BAA2B,EAC3B,kBAAkB,EAClB,sBAAsB,EACtB,0BAA0B,EAE7B,MAAM,SAAS,CAAC;AAoCjB,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;IAUtC,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;IAqDf,gBAAgB,CACzB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,WAAW,EAAE,QAAQ,GACtB,OAAO,CAAC,IAAI,CAAC;IAuCH,kBAAkB,CAC3B,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,QAAQ,GACtB,OAAO,CAAC,0BAA0B,CAAC;IAuDtC,OAAO,CAAC,iBAAiB;IA2BzB,OAAO,CAAC,qBAAqB;IAkB7B,OAAO,CAAC,cAAc;YA0BR,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"}
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"}
@@ -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 CREDENTIAL_ACCESS_AUDIT_LOG_TYPE_ID = 'E8D4D100-E785-42D3-997F-ECFF3B0BCFC0';
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(...arguments);
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.validateValues(values, credType.FieldSchema);
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(values);
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.validateValues(values, credType.FieldSchema);
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
- validateValues(values, fieldSchemaJson) {
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 schema = JSON.parse(fieldSchemaJson);
243
- const required = schema.required || [];
244
- for (const field of required) {
245
- if (!values[field]) {
246
- throw new Error(`Required field missing: ${field}`);
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
- else {
255
- throw e;
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":";;;;;;AAAA,+CAQ8B;AAS9B,8CAAyD;AACzD,8DAAqC;AAcrC,MAAM,mCAAmC,GAAG,sCAAsC,CAAC;AAgCnF,MAAa,gBAAiB,SAAQ,iBAA4B;IAa9D;QACI,KAAK,EAAE,CAAC;QAZJ,iBAAY,GAAuB,EAAE,CAAC;QACtC,qBAAgB,GAA2B,EAAE,CAAC;QAC9C,0BAAqB,GAA+B,EAAE,CAAC;QAGvD,yBAAoB,GAAkB,IAAI,CAAC;QAI3C,sBAAiB,GAAkC,IAAI,GAAG,EAAE,CAAC;QAMjE,IAAI,CAAC,IAAI,GAAG,IAAI,aAAG,CAAC;YAChB,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,KAAK;YACb,WAAW,EAAE,KAAK;SACrB,CAAC,CAAC;QAGH,IAAA,qBAAU,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAUM,KAAK,CAAC,MAAM,CAAC,YAAsB,EAAE,WAAsB,EAAE,QAA4B;QAC5F,MAAM,MAAM,GAAG;YACX;gBACI,YAAY,EAAE,cAAc;gBAC5B,UAAU,EAAE,iBAAiB;gBAC7B,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,YAAY,EAAE,kBAAkB;gBAChC,UAAU,EAAE,sBAAsB;gBAClC,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,YAAY,EAAE,uBAAuB;gBACrC,UAAU,EAAE,2BAA2B;gBACvC,UAAU,EAAE,IAAI;aACnB;SACJ,CAAC;QAGF,IAAI,WAAuB,CAAC;QAC5B,IAAI,QAAQ,EAAE,CAAC;YACX,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,iBAAiB,CAAC,CAAA;QACjG,CAAC;aACI,CAAC;YACF,MAAM,EAAE,GAAG,IAAI,eAAQ,EAAE,CAAC;YAC1B,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,WAAW,EAAE,CAAC;YACd,IAAI,CAAC,oBAAoB,GAAG,WAAW,CAAC,EAAE,CAAC;QAC/C,CAAC;aACI,CAAC;YACF,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;QAC5D,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IACxE,CAAC;IAKM,MAAM,KAAK,QAAQ;QACtB,OAAO,KAAK,CAAC,WAAW,EAAoB,CAAC;IACjD,CAAC;IASD,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAKD,IAAW,eAAe;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAKD,IAAW,oBAAoB;QAC3B,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACtC,CAAC;IASM,uBAAuB,CAAC,QAAgB;QAC3C,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAClC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAChE,CAAC;IACN,CAAC;IAKM,2BAA2B,CAAC,kBAA0B;QACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAC;QAEhC,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAC9B,CAAC,CAAC,gBAAgB,KAAK,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,QAAQ,CAClE,CAAC;IACN,CAAC;IAKM,iBAAiB,CAAC,YAAoB;QACzC,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC;IAC9D,CAAC;IAKM,mBAAmB,CAAC,kBAA0B,EAAE,cAAsB;QACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAC;QAEhC,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAC9B,CAAC,CAAC,gBAAgB,KAAK,QAAQ,CAAC,EAAE;YAClC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,cAAc,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;YACnE,CAAC,CAAC,QAAQ,CACb,CAAC;IACN,CAAC;IAwBM,KAAK,CAAC,aAAa,CACtB,cAAsB,EACtB,UAAuC,EAAE;QAEzC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,UAAU,GAA4B,IAAI,CAAC;QAC/C,IAAI,MAAM,GAAM,EAAO,CAAC;QACxB,IAAI,MAAM,GAA2B,UAAU,CAAC;QAEhD,IAAI,CAAC;YAED,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAG3B,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;gBACvB,MAAM,GAAG,OAAO,CAAC,YAAiB,CAAC;gBACnC,MAAM,GAAG,SAAS,CAAC;YACvB,CAAC;iBAEI,CAAC;gBACF,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;gBAC7D,IAAI,UAAU,EAAE,CAAC;oBAEb,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,MAAM,CAAM,CAAC;oBAC5D,MAAM,GAAG,UAAU,CAAC;gBACxB,CAAC;qBAAM,CAAC;oBACJ,MAAM,IAAI,KAAK,CAAC,yBAAyB,cAAc,EAAE,CAAC,CAAC;gBAC/D,CAAC;YACL,CAAC;YAGD,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,WAAW,EAAE;gBAClD,SAAS,EAAE,SAAS;gBACpB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACrC,CAAC,CAAC;YAGH,IAAI,UAAU,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBACpC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,eAAQ,EAAC,CAAC,CAAC,CAAC,CAAC;YACtF,CAAC;YAED,OAAO;gBACH,UAAU;gBACV,MAAM;gBACN,MAAM;gBACN,SAAS,EAAE,UAAU,EAAE,SAAS;aACnC,CAAC;QAEN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAEb,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,WAAW,EAAE;gBAClD,SAAS,EAAE,SAAS;gBACpB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,OAAO,EAAE,KAAK;gBACd,YAAY,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBACpE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACrC,CAAC,CAAC;YACH,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAYM,KAAK,CAAC,eAAe,CACxB,kBAA0B,EAC1B,IAAY,EACZ,MAA8B,EAC9B,OAA+B,EAC/B,WAAqB;QAErB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,MAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,8BAA8B,kBAAkB,EAAE,CAAC,CAAC;QACxE,CAAC;QAGD,MAAM,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;QAGlF,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAG3E,MAAM,EAAE,GAAG,IAAI,eAAQ,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,eAAe,CAAmB,iBAAiB,EAAE,WAAW,CAAC,CAAC;QAC9F,UAAU,CAAC,SAAS,EAAE,CAAC;QACvB,UAAU,CAAC,gBAAgB,GAAG,QAAQ,CAAC,EAAE,CAAC;QAC1C,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;QACvB,UAAU,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC;QACrD,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QACvD,UAAU,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;QAClD,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC3B,UAAU,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;QACnD,UAAU,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;QACjD,UAAU,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;QAEjD,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;QACtC,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACjD,CAAC;QAGD,MAAM,IAAI,CAAC,SAAS,CAChB,UAAU,EACV,WAAW,EACX;YACI,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,IAAI;SAChB,CACJ,CAAC;QAGF,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAEvC,OAAO,UAAU,CAAC;IACtB,CAAC;IASM,KAAK,CAAC,gBAAgB,CACzB,YAAoB,EACpB,MAA8B,EAC9B,WAAqB;QAErB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,MAAM,EAAE,GAAG,IAAI,eAAQ,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,eAAe,CAAmB,iBAAiB,EAAE,WAAW,CAAC,CAAC;QAC9F,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,yBAAyB,YAAY,EAAE,CAAC,CAAC;QAC7D,CAAC;QAGD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,gBAAgB,CAAC,CAAC;QACvF,IAAI,QAAQ,EAAE,CAAC;YAEX,MAAM,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;YAGlF,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;YAG3E,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YAEJ,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;QACtC,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACnD,CAAC;QAGD,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,WAAW,EAAE;YAC1C,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,IAAI;SAChB,CAAC,CAAC;QAGH,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAC3C,CAAC;IASM,KAAK,CAAC,kBAAkB,CAC3B,YAAoB,EACpB,WAAqB;QAErB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QACxD,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,CAAC,sBAAsB,CAAC;gBAChC,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,IAAI,IAAI,EAAE;aAC1B,CAAC;QACN,CAAC;QAGD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,gBAAgB,CAAC,CAAC;QACvF,IAAI,CAAC,QAAQ,EAAE,kBAAkB,EAAE,CAAC;YAChC,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,EAAE;gBACV,QAAQ,EAAE,CAAC,mCAAmC,CAAC;gBAC/C,WAAW,EAAE,IAAI,IAAI,EAAE;aAC1B,CAAC;QACN,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAG7D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;QAGtF,IAAI,WAAW,EAAE,CAAC;YACd,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,eAAQ,EAAC,CAAC,CAAC,CAAC,CAAC;QAClF,CAAC;QAGD,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,WAAW,EAAE;YAC1C,SAAS,EAAE,UAAU;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;SAC1B,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAClB,CAAC;IAcO,iBAAiB,CACrB,cAAsB,EACtB,OAAoC;QAGpC,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC;QAChE,CAAC;QAGD,MAAM,UAAU,GAAG,OAAO,CAAC,cAAc,IAAI,cAAc,CAAC;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CACpC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;YAC/D,CAAC,CAAC,QAAQ,CACb,CAAC;QAEF,IAAI,IAAI,EAAE,CAAC;YACP,OAAO,IAAI,CAAC;QAChB,CAAC;QAGD,OAAO,IAAI,CAAC;IAChB,CAAC;IAKO,qBAAqB,CAAC,WAAmB;QAC7C,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,CAAC;QAE5B,IAAI,CAAC;YAED,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;gBAClC,OAAO,WAAqC,CAAC;YACjD,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAA,eAAQ,EAAC,sCAAsC,CAAC,EAAE,CAAC,CAAC;YACpD,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;IAMO,YAAY,CAAC,gBAAwB,EAAE,UAAkB;QAC7D,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACtC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,gBAAgB,CAAE,CAAC;IACzD,CAAC;IAaO,cAAc,CAAC,MAA8B,EAAE,eAAuB,EAAE,gBAAyB;QACrG,IAAI,CAAC,eAAe;YAAE,OAAO;QAE7B,IAAI,CAAC;YACD,MAAM,SAAS,GAAG,gBAAgB;gBAC9B,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,eAAe,CAAC;gBACtD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;YAErD,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;YAEhC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACT,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;gBACnE,MAAM,IAAI,KAAK,CAAC,kCAAkC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3E,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,YAAY,WAAW,EAAE,CAAC;gBAC3B,IAAA,eAAQ,EAAC,6BAA6B,CAAC,EAAE,CAAC,CAAC;gBAC3C,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACtD,CAAC;YACD,MAAM,CAAC,CAAC;QACZ,CAAC;IACL,CAAC;IAKO,sBAAsB,CAAC,MAAqB;QAChD,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACtB,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC;YAEpE,QAAQ,KAAK,CAAC,OAAO,EAAE,CAAC;gBACpB,KAAK,UAAU;oBACX,OAAO,2BAA2B,KAAK,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;gBAErE,KAAK,OAAO;oBACR,OAAO,UAAU,KAAK,cAAc,KAAK,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC;gBAErE,KAAK,MAAM;oBACP,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACtD,OAAO,UAAU,KAAK,qBAAqB,OAAO,EAAE,CAAC;gBAEzD,KAAK,QAAQ;oBACT,OAAO,UAAU,KAAK,qBAAqB,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBAErE,KAAK,SAAS;oBACV,OAAO,UAAU,KAAK,mCAAmC,CAAC;gBAE9D,KAAK,WAAW;oBACZ,OAAO,UAAU,KAAK,sBAAsB,KAAK,CAAC,MAAM,CAAC,KAAK,aAAa,CAAC;gBAEhF,KAAK,WAAW;oBACZ,OAAO,UAAU,KAAK,0BAA0B,KAAK,CAAC,MAAM,CAAC,KAAK,aAAa,CAAC;gBAEpF,KAAK,SAAS;oBACV,OAAO,UAAU,KAAK,sBAAsB,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAErE,KAAK,SAAS;oBACV,OAAO,UAAU,KAAK,0BAA0B,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAEzE;oBACI,OAAO,UAAU,KAAK,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;YACpD,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAMO,mBAAmB,CAAC,MAA8B,EAAE,eAAuB;QAC/E,IAAI,CAAC,eAAe;YAAE,OAAO,MAAM,CAAC;QAEpC,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAC3C,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;YAE7B,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBAChE,MAAM,UAAU,GAAG,WAAsC,CAAC;gBAG1D,IAAI,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,OAAO,IAAI,UAAU,EAAE,CAAC;oBAClD,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBACjD,CAAC;qBAEI,IAAI,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,SAAS,IAAI,UAAU,EAAE,CAAC;oBACzD,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBACnD,CAAC;YACL,CAAC;YAED,OAAO,MAAM,CAAC;QAClB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAA,eAAQ,EAAC,oCAAoC,CAAC,EAAE,CAAC,CAAC;YAClD,OAAO,MAAM,CAAC;QAClB,CAAC;IACL,CAAC;IAKO,KAAK,CAAC,gBAAgB,CAAC,YAAoB,EAAE,WAAqB;QACtE,IAAI,CAAC;YACD,MAAM,EAAE,GAAG,IAAI,eAAQ,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,eAAe,CAAmB,iBAAiB,EAAE,WAAW,CAAC,CAAC;YAC9F,MAAM,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACpC,UAAU,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;YACnC,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;QAC5B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAET,IAAA,eAAQ,EAAC,CAAC,CAAC,CAAC;QAChB,CAAC;IACL,CAAC;IAKO,KAAK,CAAC,qBAAqB,CAAC,YAAoB,EAAE,WAAqB;QAC3E,IAAI,CAAC;YACD,MAAM,EAAE,GAAG,IAAI,eAAQ,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,eAAe,CAAmB,iBAAiB,EAAE,WAAW,CAAC,CAAC;YAC9F,MAAM,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACpC,UAAU,CAAC,eAAe,GAAG,IAAI,IAAI,EAAE,CAAC;YACxC,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;QAC5B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAET,IAAA,eAAQ,EAAC,CAAC,CAAC,CAAC;QAChB,CAAC;IACL,CAAC;IAMS,KAAK,CAAC,sBAAsB,CAClC,QAAgB,EAChB,MAA8B;QAI9B,IAAA,gBAAS,EAAC,uDAAuD,QAAQ,EAAE,CAAC,CAAC;QAC7E,OAAO;YACH,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,CAAC,0CAA0C,CAAC;YACtD,WAAW,EAAE,IAAI,IAAI,EAAE;SAC1B,CAAC;IACN,CAAC;IAKO,KAAK,CAAC,SAAS,CACnB,UAAmC,EACnC,WAAiC,EACjC,OAAgC;QAEhC,IAAI,CAAC;YAED,IAAI,CAAC,WAAW,EAAE,CAAC;gBACf,OAAO;YACX,CAAC;YAED,MAAM,EAAE,GAAG,IAAI,eAAQ,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,eAAe,CAAiB,YAAY,EAAE,WAAW,CAAC,CAAC;YACrF,QAAQ,CAAC,SAAS,EAAE,CAAC;YAErB,QAAQ,CAAC,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC;YACjC,QAAQ,CAAC,cAAc,GAAG,mCAAmC,CAAC;YAC9D,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;YACzD,QAAQ,CAAC,WAAW,GAAG,UAAU;gBAC7B,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,gBAAgB,UAAU,CAAC,IAAI,GAAG;gBACxD,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,yBAAyB,CAAC;YACpD,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,UAAU,EAAE,OAAO,CAAC,UAAU;aACjC,CAAC,CAAC;YAEH,IAAI,UAAU,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC1C,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC;gBAC9C,QAAQ,CAAC,QAAQ,GAAG,UAAU,CAAC,EAAE,CAAC;YACtC,CAAC;YAED,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC1B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAET,IAAA,eAAQ,EAAC,oCAAoC,CAAC,EAAE,CAAC,CAAC;QACtD,CAAC;IACL,CAAC;CACJ;AAlqBD,4CAkqBC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=credential-validation.test.d.ts.map
@@ -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.2.0",
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": "echo \"Error: no test specified\" && exit 1"
13
+ "test": "jest"
14
14
  },
15
15
  "author": "MemberJunction.com",
16
16
  "license": "ISC",
17
17
  "dependencies": {
18
- "@memberjunction/core": "3.2.0",
19
- "@memberjunction/global": "3.2.0",
20
- "@memberjunction/core-entities": "3.2.0",
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
  },