From 9e7fafbc24a7d7efbd6ae9492f1b1bf184680eb6 Mon Sep 17 00:00:00 2001 From: Stephen Wright Date: Thu, 11 Dec 2025 10:48:12 +0000 Subject: [PATCH] feat: Add validate identity helper to resolver (#23068) --- .../src/credential-resolver/credential-resolver.ts | 8 ++++++++ .../__tests__/stub-credential-resolver.test.ts | 9 +++++++++ .../credential-resolvers/stub-credential-resolver.ts | 4 ++++ 3 files changed, 21 insertions(+) diff --git a/packages/@n8n/decorators/src/credential-resolver/credential-resolver.ts b/packages/@n8n/decorators/src/credential-resolver/credential-resolver.ts index 6a0779c3a0e..c3a84246544 100644 --- a/packages/@n8n/decorators/src/credential-resolver/credential-resolver.ts +++ b/packages/@n8n/decorators/src/credential-resolver/credential-resolver.ts @@ -81,6 +81,14 @@ export interface ICredentialResolver { */ validateOptions(options: CredentialResolverConfiguration): Promise; + /** + * Validates if the userIdentity provided has access to the resolver capable credential + * + * @param identity - The identity of the entity to validate access for + * @throws {CredentialResolverAccessValidationError} When access is invalid + */ + validateIdentity?(identity: string, handle: CredentialResolverHandle): Promise; + /** * Runs initialization logic for the resolver. This might be called multiple times! * Optional - not all resolvers require initialization. diff --git a/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/__tests__/stub-credential-resolver.test.ts b/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/__tests__/stub-credential-resolver.test.ts index 3344f603678..3fa476889db 100644 --- a/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/__tests__/stub-credential-resolver.test.ts +++ b/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/__tests__/stub-credential-resolver.test.ts @@ -78,4 +78,13 @@ describe('StubCredentialResolver', () => { await expect(resolver2.getSecret(credentialId, context, handle)).rejects.toThrow(); }); }); + + describe('validateIdentity', () => { + it('should validate identity', async () => { + const resolver = new StubCredentialResolver(mockLogger); + const identity = 'test-identity'; + const handle = testHelpers.createHandle({}); + await expect(resolver.validateIdentity(identity, handle)).resolves.toBeUndefined(); + }); + }); }); diff --git a/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/stub-credential-resolver.ts b/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/stub-credential-resolver.ts index a64ee2f9f8d..eee886e9351 100644 --- a/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/stub-credential-resolver.ts +++ b/packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/stub-credential-resolver.ts @@ -108,4 +108,8 @@ export class StubCredentialResolver implements ICredentialResolver { async validateOptions(options: CredentialResolverConfiguration): Promise { await this.parseOptions(options); } + + async validateIdentity(_identity: string, _handle: CredentialResolverHandle): Promise { + return; + } }