@rekog/mcp-nest 1.8.0-alpha.0 → 1.8.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.
@@ -4,12 +4,12 @@ const testing_1 = require("@nestjs/testing");
4
4
  const typeorm_1 = require("@nestjs/typeorm");
5
5
  const typeorm_store_service_1 = require("./typeorm-store.service");
6
6
  const entities_1 = require("./entities");
7
+ const constants_1 = require("./constants");
7
8
  describe('TypeOrmStore', () => {
8
9
  let service;
9
10
  let clientRepository;
10
11
  let authCodeRepository;
11
12
  let sessionRepository;
12
- let userProfileRepository;
13
13
  beforeEach(async () => {
14
14
  const mockClientRepository = {
15
15
  save: jest.fn(),
@@ -26,7 +26,7 @@ describe('TypeOrmStore', () => {
26
26
  findOne: jest.fn(),
27
27
  delete: jest.fn(),
28
28
  };
29
- const userProfileRepository = {
29
+ const mockUserProfileRepository = {
30
30
  save: jest.fn(),
31
31
  findOne: jest.fn(),
32
32
  delete: jest.fn(),
@@ -35,27 +35,27 @@ describe('TypeOrmStore', () => {
35
35
  providers: [
36
36
  typeorm_store_service_1.TypeOrmStore,
37
37
  {
38
- provide: (0, typeorm_1.getRepositoryToken)(entities_1.OAuthClientEntity),
38
+ provide: (0, typeorm_1.getRepositoryToken)(entities_1.OAuthClientEntity, constants_1.OAUTH_TYPEORM_CONNECTION_NAME),
39
39
  useValue: mockClientRepository,
40
40
  },
41
41
  {
42
- provide: (0, typeorm_1.getRepositoryToken)(entities_1.AuthorizationCodeEntity),
42
+ provide: (0, typeorm_1.getRepositoryToken)(entities_1.AuthorizationCodeEntity, constants_1.OAUTH_TYPEORM_CONNECTION_NAME),
43
43
  useValue: mockAuthCodeRepository,
44
44
  },
45
45
  {
46
- provide: (0, typeorm_1.getRepositoryToken)(entities_1.OAuthSessionEntity),
46
+ provide: (0, typeorm_1.getRepositoryToken)(entities_1.OAuthSessionEntity, constants_1.OAUTH_TYPEORM_CONNECTION_NAME),
47
47
  useValue: mockSessionRepository,
48
48
  },
49
49
  {
50
- provide: (0, typeorm_1.getRepositoryToken)(entities_1.OAuthUserProfileEntity),
51
- useValue: userProfileRepository,
50
+ provide: (0, typeorm_1.getRepositoryToken)(entities_1.OAuthUserProfileEntity, constants_1.OAUTH_TYPEORM_CONNECTION_NAME),
51
+ useValue: mockUserProfileRepository,
52
52
  },
53
53
  ],
54
54
  }).compile();
55
55
  service = module.get(typeorm_store_service_1.TypeOrmStore);
56
- clientRepository = module.get((0, typeorm_1.getRepositoryToken)(entities_1.OAuthClientEntity));
57
- authCodeRepository = module.get((0, typeorm_1.getRepositoryToken)(entities_1.AuthorizationCodeEntity));
58
- sessionRepository = module.get((0, typeorm_1.getRepositoryToken)(entities_1.OAuthSessionEntity));
56
+ clientRepository = module.get((0, typeorm_1.getRepositoryToken)(entities_1.OAuthClientEntity, constants_1.OAUTH_TYPEORM_CONNECTION_NAME));
57
+ authCodeRepository = module.get((0, typeorm_1.getRepositoryToken)(entities_1.AuthorizationCodeEntity, constants_1.OAUTH_TYPEORM_CONNECTION_NAME));
58
+ sessionRepository = module.get((0, typeorm_1.getRepositoryToken)(entities_1.OAuthSessionEntity, constants_1.OAUTH_TYPEORM_CONNECTION_NAME));
59
59
  });
60
60
  afterEach(() => {
61
61
  jest.clearAllMocks();
@@ -212,7 +212,10 @@ describe('TypeOrmStore', () => {
212
212
  });
213
213
  it('should return undefined and delete expired authorization code', async () => {
214
214
  authCodeRepository.findOne.mockResolvedValue(expiredAuthCode);
215
- authCodeRepository.delete.mockResolvedValue({});
215
+ authCodeRepository.delete.mockResolvedValue({
216
+ raw: {},
217
+ affected: 1,
218
+ });
216
219
  const result = await service.getAuthCode('expired-code');
217
220
  expect(authCodeRepository.findOne).toHaveBeenCalledWith({
218
221
  where: { code: 'expired-code' },
@@ -235,7 +238,10 @@ describe('TypeOrmStore', () => {
235
238
  });
236
239
  describe('removeAuthCode', () => {
237
240
  it('should remove an authorization code', async () => {
238
- authCodeRepository.delete.mockResolvedValue({});
241
+ authCodeRepository.delete.mockResolvedValue({
242
+ raw: {},
243
+ affected: 1,
244
+ });
239
245
  await service.removeAuthCode('test-auth-code');
240
246
  expect(authCodeRepository.delete).toHaveBeenCalledWith({
241
247
  code: 'test-auth-code',
@@ -289,7 +295,10 @@ describe('TypeOrmStore', () => {
289
295
  });
290
296
  it('should return undefined and delete expired OAuth session', async () => {
291
297
  sessionRepository.findOne.mockResolvedValue(expiredSession);
292
- sessionRepository.delete.mockResolvedValue({});
298
+ sessionRepository.delete.mockResolvedValue({
299
+ raw: {},
300
+ affected: 1,
301
+ });
293
302
  const result = await service.getOAuthSession('expired-session');
294
303
  expect(sessionRepository.findOne).toHaveBeenCalledWith({
295
304
  where: { sessionId: 'expired-session' },
@@ -312,7 +321,10 @@ describe('TypeOrmStore', () => {
312
321
  });
313
322
  describe('removeOAuthSession', () => {
314
323
  it('should remove an OAuth session', async () => {
315
- sessionRepository.delete.mockResolvedValue({});
324
+ sessionRepository.delete.mockResolvedValue({
325
+ raw: {},
326
+ affected: 1,
327
+ });
316
328
  await service.removeOAuthSession('session-123');
317
329
  expect(sessionRepository.delete).toHaveBeenCalledWith({
318
330
  sessionId: 'session-123',
@@ -1 +1 @@
1
- {"version":3,"file":"typeorm-store.service.spec.js","sourceRoot":"","sources":["../../../../src/authz/stores/typeorm/typeorm-store.service.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { Test, TestingModule } from '@nestjs/testing';\nimport { getRepositoryToken } from '@nestjs/typeorm';\nimport { Repository } from 'typeorm';\nimport { TypeOrmStore } from './typeorm-store.service';\nimport {\n OAuthClientEntity,\n AuthorizationCodeEntity,\n OAuthSessionEntity,\n OAuthUserProfileEntity,\n} from './entities';\nimport { OAuthClient, AuthorizationCode } from '../oauth-store.interface';\nimport { OAuthSession } from '../../providers/oauth-provider.interface';\n\ndescribe('TypeOrmStore', () => {\n let service: TypeOrmStore;\n let clientRepository: jest.Mocked<Repository<OAuthClientEntity>>;\n let authCodeRepository: jest.Mocked<Repository<AuthorizationCodeEntity>>;\n let sessionRepository: jest.Mocked<Repository<OAuthSessionEntity>>;\n let userProfileRepository: jest.Mocked<Repository<OAuthUserProfileEntity>>;\n\n beforeEach(async () => {\n // Create mocked repositories\n const mockClientRepository = {\n save: jest.fn(),\n findOne: jest.fn(),\n delete: jest.fn(),\n };\n\n const mockAuthCodeRepository = {\n save: jest.fn(),\n findOne: jest.fn(),\n delete: jest.fn(),\n };\n\n const mockSessionRepository = {\n save: jest.fn(),\n findOne: jest.fn(),\n delete: jest.fn(),\n };\n\n const userProfileRepository = {\n save: jest.fn(),\n findOne: jest.fn(),\n delete: jest.fn(),\n };\n\n const module: TestingModule = await Test.createTestingModule({\n providers: [\n TypeOrmStore,\n {\n provide: getRepositoryToken(OAuthClientEntity),\n useValue: mockClientRepository,\n },\n {\n provide: getRepositoryToken(AuthorizationCodeEntity),\n useValue: mockAuthCodeRepository,\n },\n {\n provide: getRepositoryToken(OAuthSessionEntity),\n useValue: mockSessionRepository,\n },\n {\n provide: getRepositoryToken(OAuthUserProfileEntity),\n useValue: userProfileRepository,\n },\n ],\n }).compile();\n\n service = module.get<TypeOrmStore>(TypeOrmStore);\n clientRepository = module.get(getRepositoryToken(OAuthClientEntity));\n authCodeRepository = module.get(\n getRepositoryToken(AuthorizationCodeEntity),\n );\n sessionRepository = module.get(getRepositoryToken(OAuthSessionEntity));\n });\n\n afterEach(() => {\n jest.clearAllMocks();\n });\n\n it('should be defined', () => {\n expect(service).toBeDefined();\n });\n\n describe('generateClientId', () => {\n const mockClient: OAuthClient = {\n client_id: '',\n client_name: 'Test Client',\n client_description: 'A test OAuth client',\n logo_uri: 'https://example.com/logo.png',\n client_uri: 'https://example.com',\n developer_name: 'Test Developer',\n developer_email: 'test@example.com',\n redirect_uris: ['http://localhost:3000/callback'],\n grant_types: ['authorization_code', 'refresh_token'],\n response_types: ['code'],\n token_endpoint_auth_method: 'none',\n created_at: new Date(),\n updated_at: new Date(),\n };\n\n it('should generate client IDs with correct format', () => {\n const clientId = service.generateClientId(mockClient);\n\n // Should match pattern: normalizedname_8hexchars\n expect(clientId).toMatch(/^[a-z0-9]+_[a-f0-9]{8}$/);\n });\n\n it('should include normalized client name in the generated ID', () => {\n const clientWithSpecialChars = {\n ...mockClient,\n client_name: 'Test Client!@#',\n };\n\n const clientId = service.generateClientId(clientWithSpecialChars);\n expect(clientId).toMatch(/^testclient_[a-f0-9]{8}$/);\n });\n\n it('should generate different IDs for different clients', () => {\n const client1 = { ...mockClient, client_name: 'Client One' };\n const client2 = { ...mockClient, client_name: 'Client Two' };\n\n const id1 = service.generateClientId(client1);\n const id2 = service.generateClientId(client2);\n\n expect(id1).not.toBe(id2);\n });\n\n it('should generate different IDs on each call (non-deterministic)', () => {\n const id1 = service.generateClientId(mockClient);\n const id2 = service.generateClientId(mockClient);\n\n // TypeORM store uses random bytes, so IDs should be different\n expect(id1).not.toBe(id2);\n });\n });\n\n describe('Client Management', () => {\n const mockClient: OAuthClient = {\n client_id: 'test-client-id',\n client_name: 'Test Client',\n client_description: 'A test OAuth client',\n logo_uri: 'https://example.com/logo.png',\n client_uri: 'https://example.com',\n developer_name: 'Test Developer',\n developer_email: 'test@example.com',\n redirect_uris: ['http://localhost:3000/callback'],\n grant_types: ['authorization_code', 'refresh_token'],\n response_types: ['code'],\n token_endpoint_auth_method: 'none',\n created_at: new Date(),\n updated_at: new Date(),\n };\n\n describe('storeClient', () => {\n it('should store a client and return the saved result', async () => {\n clientRepository.save.mockResolvedValue(\n mockClient as OAuthClientEntity,\n );\n\n const result = await service.storeClient(mockClient);\n\n expect(clientRepository.save).toHaveBeenCalledWith(mockClient);\n expect(result).toEqual(mockClient);\n });\n\n it('should handle database errors', async () => {\n const error = new Error('Database error');\n clientRepository.save.mockRejectedValue(error);\n\n await expect(service.storeClient(mockClient)).rejects.toThrow(\n 'Database error',\n );\n });\n });\n\n describe('getClient', () => {\n it('should return client when found', async () => {\n clientRepository.findOne.mockResolvedValue(\n mockClient as OAuthClientEntity,\n );\n\n const result = await service.getClient('test-client-id');\n\n expect(clientRepository.findOne).toHaveBeenCalledWith({\n where: { client_id: 'test-client-id' },\n });\n expect(result).toEqual(mockClient);\n });\n\n it('should return undefined when client not found', async () => {\n clientRepository.findOne.mockResolvedValue(null);\n\n const result = await service.getClient('non-existent-id');\n\n expect(result).toBeUndefined();\n });\n\n it('should handle database errors', async () => {\n const error = new Error('Database error');\n clientRepository.findOne.mockRejectedValue(error);\n\n await expect(service.getClient('test-client-id')).rejects.toThrow(\n 'Database error',\n );\n });\n });\n\n describe('findClient', () => {\n it('should find client by name when found', async () => {\n clientRepository.findOne.mockResolvedValue(\n mockClient as OAuthClientEntity,\n );\n\n const result = await service.findClient('Test Client');\n\n expect(clientRepository.findOne).toHaveBeenCalledWith({\n where: { client_name: 'Test Client' },\n });\n expect(result).toEqual(mockClient);\n });\n\n it('should return undefined when client name not found', async () => {\n clientRepository.findOne.mockResolvedValue(null);\n\n const result = await service.findClient('Non-existent Client');\n\n expect(result).toBeUndefined();\n });\n\n it('should handle database errors', async () => {\n const error = new Error('Database error');\n clientRepository.findOne.mockRejectedValue(error);\n\n await expect(service.findClient('Test Client')).rejects.toThrow(\n 'Database error',\n );\n });\n });\n });\n\n describe('Authorization Code Management', () => {\n const mockAuthCode: AuthorizationCode = {\n code: 'test-auth-code',\n user_id: 'user-123',\n client_id: 'client-123',\n redirect_uri: 'http://localhost:3000/callback',\n code_challenge: 'test-challenge',\n code_challenge_method: 'S256',\n expires_at: Date.now() + 600000, // 10 minutes from now\n github_access_token: 'github-token-123',\n };\n\n const expiredAuthCode: AuthorizationCode = {\n ...mockAuthCode,\n expires_at: Date.now() - 1000, // 1 second ago\n };\n\n describe('storeAuthCode', () => {\n it('should store an authorization code', async () => {\n authCodeRepository.save.mockResolvedValue(\n mockAuthCode as AuthorizationCodeEntity,\n );\n\n await service.storeAuthCode(mockAuthCode);\n\n expect(authCodeRepository.save).toHaveBeenCalledWith(mockAuthCode);\n });\n\n it('should handle database errors', async () => {\n const error = new Error('Database error');\n authCodeRepository.save.mockRejectedValue(error);\n\n await expect(service.storeAuthCode(mockAuthCode)).rejects.toThrow(\n 'Database error',\n );\n });\n });\n\n describe('getAuthCode', () => {\n it('should return authorization code when found and not expired', async () => {\n authCodeRepository.findOne.mockResolvedValue(\n mockAuthCode as AuthorizationCodeEntity,\n );\n\n const result = await service.getAuthCode('test-auth-code');\n\n expect(authCodeRepository.findOne).toHaveBeenCalledWith({\n where: { code: 'test-auth-code' },\n });\n expect(result).toEqual(mockAuthCode);\n });\n\n it('should return undefined and delete expired authorization code', async () => {\n authCodeRepository.findOne.mockResolvedValue(\n expiredAuthCode as AuthorizationCodeEntity,\n );\n authCodeRepository.delete.mockResolvedValue({} as any);\n\n const result = await service.getAuthCode('expired-code');\n\n expect(authCodeRepository.findOne).toHaveBeenCalledWith({\n where: { code: 'expired-code' },\n });\n expect(authCodeRepository.delete).toHaveBeenCalledWith({\n code: 'expired-code',\n });\n expect(result).toBeUndefined();\n });\n\n it('should return undefined when authorization code not found', async () => {\n authCodeRepository.findOne.mockResolvedValue(null);\n\n const result = await service.getAuthCode('non-existent-code');\n\n expect(result).toBeUndefined();\n });\n\n it('should handle database errors', async () => {\n const error = new Error('Database error');\n authCodeRepository.findOne.mockRejectedValue(error);\n\n await expect(service.getAuthCode('test-auth-code')).rejects.toThrow(\n 'Database error',\n );\n });\n });\n\n describe('removeAuthCode', () => {\n it('should remove an authorization code', async () => {\n authCodeRepository.delete.mockResolvedValue({} as any);\n\n await service.removeAuthCode('test-auth-code');\n\n expect(authCodeRepository.delete).toHaveBeenCalledWith({\n code: 'test-auth-code',\n });\n });\n\n it('should handle database errors', async () => {\n const error = new Error('Database error');\n authCodeRepository.delete.mockRejectedValue(error);\n\n await expect(service.removeAuthCode('test-auth-code')).rejects.toThrow(\n 'Database error',\n );\n });\n });\n });\n\n describe('OAuth Session Management', () => {\n const mockSession: OAuthSession = {\n sessionId: 'session-123',\n state: 'test-state',\n clientId: 'client-123',\n redirectUri: 'http://localhost:3000/callback',\n codeChallenge: 'test-challenge',\n codeChallengeMethod: 'S256',\n oauthState: 'oauth-state-123',\n resource: 'test-resource',\n expiresAt: Date.now() + 3600000, // 1 hour from now\n };\n\n const expiredSession: OAuthSession = {\n ...mockSession,\n sessionId: 'expired-session',\n expiresAt: Date.now() - 1000, // 1 second ago\n };\n\n describe('storeOAuthSession', () => {\n it('should store an OAuth session', async () => {\n const expectedEntity = { ...mockSession, sessionId: 'session-123' };\n sessionRepository.save.mockResolvedValue(\n expectedEntity as OAuthSessionEntity,\n );\n\n await service.storeOAuthSession('session-123', mockSession);\n\n expect(sessionRepository.save).toHaveBeenCalledWith(expectedEntity);\n });\n\n it('should handle database errors', async () => {\n const error = new Error('Database error');\n sessionRepository.save.mockRejectedValue(error);\n\n await expect(\n service.storeOAuthSession('session-123', mockSession),\n ).rejects.toThrow('Database error');\n });\n });\n\n describe('getOAuthSession', () => {\n it('should return OAuth session when found and not expired', async () => {\n sessionRepository.findOne.mockResolvedValue(\n mockSession as OAuthSessionEntity,\n );\n\n const result = await service.getOAuthSession('session-123');\n\n expect(sessionRepository.findOne).toHaveBeenCalledWith({\n where: { sessionId: 'session-123' },\n });\n expect(result).toEqual(mockSession);\n });\n\n it('should return undefined and delete expired OAuth session', async () => {\n sessionRepository.findOne.mockResolvedValue(\n expiredSession as OAuthSessionEntity,\n );\n sessionRepository.delete.mockResolvedValue({} as any);\n\n const result = await service.getOAuthSession('expired-session');\n\n expect(sessionRepository.findOne).toHaveBeenCalledWith({\n where: { sessionId: 'expired-session' },\n });\n expect(sessionRepository.delete).toHaveBeenCalledWith({\n sessionId: 'expired-session',\n });\n expect(result).toBeUndefined();\n });\n\n it('should return undefined when OAuth session not found', async () => {\n sessionRepository.findOne.mockResolvedValue(null);\n\n const result = await service.getOAuthSession('non-existent-session');\n\n expect(result).toBeUndefined();\n });\n\n it('should handle database errors', async () => {\n const error = new Error('Database error');\n sessionRepository.findOne.mockRejectedValue(error);\n\n await expect(service.getOAuthSession('session-123')).rejects.toThrow(\n 'Database error',\n );\n });\n });\n\n describe('removeOAuthSession', () => {\n it('should remove an OAuth session', async () => {\n sessionRepository.delete.mockResolvedValue({} as any);\n\n await service.removeOAuthSession('session-123');\n\n expect(sessionRepository.delete).toHaveBeenCalledWith({\n sessionId: 'session-123',\n });\n });\n\n it('should handle database errors', async () => {\n const error = new Error('Database error');\n sessionRepository.delete.mockRejectedValue(error);\n\n await expect(service.removeOAuthSession('session-123')).rejects.toThrow(\n 'Database error',\n );\n });\n });\n });\n});\n"]}
1
+ {"version":3,"file":"typeorm-store.service.spec.js","sourceRoot":"","sources":["../../../../src/authz/stores/typeorm/typeorm-store.service.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/unbound-method */\nimport { Test, TestingModule } from '@nestjs/testing';\nimport { getRepositoryToken } from '@nestjs/typeorm';\nimport { Repository, DeleteResult } from 'typeorm';\nimport { TypeOrmStore } from './typeorm-store.service';\nimport {\n OAuthClientEntity,\n AuthorizationCodeEntity,\n OAuthSessionEntity,\n OAuthUserProfileEntity,\n} from './entities';\nimport { OAuthClient, AuthorizationCode } from '../oauth-store.interface';\nimport { OAuthSession } from '../../providers/oauth-provider.interface';\nimport { OAUTH_TYPEORM_CONNECTION_NAME } from './constants';\n\ndescribe('TypeOrmStore', () => {\n let service: TypeOrmStore;\n let clientRepository: jest.Mocked<Repository<OAuthClientEntity>>;\n let authCodeRepository: jest.Mocked<Repository<AuthorizationCodeEntity>>;\n let sessionRepository: jest.Mocked<Repository<OAuthSessionEntity>>;\n\n beforeEach(async () => {\n // Create mocked repositories\n const mockClientRepository = {\n save: jest.fn(),\n findOne: jest.fn(),\n delete: jest.fn(),\n };\n\n const mockAuthCodeRepository = {\n save: jest.fn(),\n findOne: jest.fn(),\n delete: jest.fn(),\n };\n\n const mockSessionRepository = {\n save: jest.fn(),\n findOne: jest.fn(),\n delete: jest.fn(),\n };\n\n const mockUserProfileRepository = {\n save: jest.fn(),\n findOne: jest.fn(),\n delete: jest.fn(),\n };\n\n const module: TestingModule = await Test.createTestingModule({\n providers: [\n TypeOrmStore,\n {\n provide: getRepositoryToken(\n OAuthClientEntity,\n OAUTH_TYPEORM_CONNECTION_NAME,\n ),\n useValue: mockClientRepository,\n },\n {\n provide: getRepositoryToken(\n AuthorizationCodeEntity,\n OAUTH_TYPEORM_CONNECTION_NAME,\n ),\n useValue: mockAuthCodeRepository,\n },\n {\n provide: getRepositoryToken(\n OAuthSessionEntity,\n OAUTH_TYPEORM_CONNECTION_NAME,\n ),\n useValue: mockSessionRepository,\n },\n {\n provide: getRepositoryToken(\n OAuthUserProfileEntity,\n OAUTH_TYPEORM_CONNECTION_NAME,\n ),\n useValue: mockUserProfileRepository,\n },\n ],\n }).compile();\n\n service = module.get<TypeOrmStore>(TypeOrmStore);\n clientRepository = module.get(\n getRepositoryToken(OAuthClientEntity, OAUTH_TYPEORM_CONNECTION_NAME),\n );\n authCodeRepository = module.get(\n getRepositoryToken(\n AuthorizationCodeEntity,\n OAUTH_TYPEORM_CONNECTION_NAME,\n ),\n );\n sessionRepository = module.get(\n getRepositoryToken(OAuthSessionEntity, OAUTH_TYPEORM_CONNECTION_NAME),\n );\n // Note: userProfileRepository is not directly used in tests below; it's provided for completeness\n });\n\n afterEach(() => {\n jest.clearAllMocks();\n });\n\n it('should be defined', () => {\n expect(service).toBeDefined();\n });\n\n describe('generateClientId', () => {\n const mockClient: OAuthClient = {\n client_id: '',\n client_name: 'Test Client',\n client_description: 'A test OAuth client',\n logo_uri: 'https://example.com/logo.png',\n client_uri: 'https://example.com',\n developer_name: 'Test Developer',\n developer_email: 'test@example.com',\n redirect_uris: ['http://localhost:3000/callback'],\n grant_types: ['authorization_code', 'refresh_token'],\n response_types: ['code'],\n token_endpoint_auth_method: 'none',\n created_at: new Date(),\n updated_at: new Date(),\n };\n\n it('should generate client IDs with correct format', () => {\n const clientId = service.generateClientId(mockClient);\n\n // Should match pattern: normalizedname_8hexchars\n expect(clientId).toMatch(/^[a-z0-9]+_[a-f0-9]{8}$/);\n });\n\n it('should include normalized client name in the generated ID', () => {\n const clientWithSpecialChars = {\n ...mockClient,\n client_name: 'Test Client!@#',\n };\n\n const clientId = service.generateClientId(clientWithSpecialChars);\n expect(clientId).toMatch(/^testclient_[a-f0-9]{8}$/);\n });\n\n it('should generate different IDs for different clients', () => {\n const client1 = { ...mockClient, client_name: 'Client One' };\n const client2 = { ...mockClient, client_name: 'Client Two' };\n\n const id1 = service.generateClientId(client1);\n const id2 = service.generateClientId(client2);\n\n expect(id1).not.toBe(id2);\n });\n\n it('should generate different IDs on each call (non-deterministic)', () => {\n const id1 = service.generateClientId(mockClient);\n const id2 = service.generateClientId(mockClient);\n\n // TypeORM store uses random bytes, so IDs should be different\n expect(id1).not.toBe(id2);\n });\n });\n\n describe('Client Management', () => {\n const mockClient: OAuthClient = {\n client_id: 'test-client-id',\n client_name: 'Test Client',\n client_description: 'A test OAuth client',\n logo_uri: 'https://example.com/logo.png',\n client_uri: 'https://example.com',\n developer_name: 'Test Developer',\n developer_email: 'test@example.com',\n redirect_uris: ['http://localhost:3000/callback'],\n grant_types: ['authorization_code', 'refresh_token'],\n response_types: ['code'],\n token_endpoint_auth_method: 'none',\n created_at: new Date(),\n updated_at: new Date(),\n };\n\n describe('storeClient', () => {\n it('should store a client and return the saved result', async () => {\n clientRepository.save.mockResolvedValue(\n mockClient as OAuthClientEntity,\n );\n\n const result = await service.storeClient(mockClient);\n\n expect(clientRepository.save).toHaveBeenCalledWith(mockClient);\n expect(result).toEqual(mockClient);\n });\n\n it('should handle database errors', async () => {\n const error = new Error('Database error');\n clientRepository.save.mockRejectedValue(error);\n\n await expect(service.storeClient(mockClient)).rejects.toThrow(\n 'Database error',\n );\n });\n });\n\n describe('getClient', () => {\n it('should return client when found', async () => {\n clientRepository.findOne.mockResolvedValue(\n mockClient as OAuthClientEntity,\n );\n\n const result = await service.getClient('test-client-id');\n\n expect(clientRepository.findOne).toHaveBeenCalledWith({\n where: { client_id: 'test-client-id' },\n });\n expect(result).toEqual(mockClient);\n });\n\n it('should return undefined when client not found', async () => {\n clientRepository.findOne.mockResolvedValue(null);\n\n const result = await service.getClient('non-existent-id');\n\n expect(result).toBeUndefined();\n });\n\n it('should handle database errors', async () => {\n const error = new Error('Database error');\n clientRepository.findOne.mockRejectedValue(error);\n\n await expect(service.getClient('test-client-id')).rejects.toThrow(\n 'Database error',\n );\n });\n });\n\n describe('findClient', () => {\n it('should find client by name when found', async () => {\n clientRepository.findOne.mockResolvedValue(\n mockClient as OAuthClientEntity,\n );\n\n const result = await service.findClient('Test Client');\n\n expect(clientRepository.findOne).toHaveBeenCalledWith({\n where: { client_name: 'Test Client' },\n });\n expect(result).toEqual(mockClient);\n });\n\n it('should return undefined when client name not found', async () => {\n clientRepository.findOne.mockResolvedValue(null);\n\n const result = await service.findClient('Non-existent Client');\n\n expect(result).toBeUndefined();\n });\n\n it('should handle database errors', async () => {\n const error = new Error('Database error');\n clientRepository.findOne.mockRejectedValue(error);\n\n await expect(service.findClient('Test Client')).rejects.toThrow(\n 'Database error',\n );\n });\n });\n });\n\n describe('Authorization Code Management', () => {\n const mockAuthCode: AuthorizationCode = {\n code: 'test-auth-code',\n user_id: 'user-123',\n client_id: 'client-123',\n redirect_uri: 'http://localhost:3000/callback',\n code_challenge: 'test-challenge',\n code_challenge_method: 'S256',\n expires_at: Date.now() + 600000, // 10 minutes from now\n github_access_token: 'github-token-123',\n };\n\n const expiredAuthCode: AuthorizationCode = {\n ...mockAuthCode,\n expires_at: Date.now() - 1000, // 1 second ago\n };\n\n describe('storeAuthCode', () => {\n it('should store an authorization code', async () => {\n authCodeRepository.save.mockResolvedValue(\n mockAuthCode as AuthorizationCodeEntity,\n );\n\n await service.storeAuthCode(mockAuthCode);\n\n expect(authCodeRepository.save).toHaveBeenCalledWith(mockAuthCode);\n });\n\n it('should handle database errors', async () => {\n const error = new Error('Database error');\n authCodeRepository.save.mockRejectedValue(error);\n\n await expect(service.storeAuthCode(mockAuthCode)).rejects.toThrow(\n 'Database error',\n );\n });\n });\n\n describe('getAuthCode', () => {\n it('should return authorization code when found and not expired', async () => {\n authCodeRepository.findOne.mockResolvedValue(\n mockAuthCode as AuthorizationCodeEntity,\n );\n\n const result = await service.getAuthCode('test-auth-code');\n\n expect(authCodeRepository.findOne).toHaveBeenCalledWith({\n where: { code: 'test-auth-code' },\n });\n expect(result).toEqual(mockAuthCode);\n });\n\n it('should return undefined and delete expired authorization code', async () => {\n authCodeRepository.findOne.mockResolvedValue(\n expiredAuthCode as AuthorizationCodeEntity,\n );\n authCodeRepository.delete.mockResolvedValue({\n raw: {},\n affected: 1,\n } as DeleteResult);\n\n const result = await service.getAuthCode('expired-code');\n\n expect(authCodeRepository.findOne).toHaveBeenCalledWith({\n where: { code: 'expired-code' },\n });\n expect(authCodeRepository.delete).toHaveBeenCalledWith({\n code: 'expired-code',\n });\n expect(result).toBeUndefined();\n });\n\n it('should return undefined when authorization code not found', async () => {\n authCodeRepository.findOne.mockResolvedValue(null);\n\n const result = await service.getAuthCode('non-existent-code');\n\n expect(result).toBeUndefined();\n });\n\n it('should handle database errors', async () => {\n const error = new Error('Database error');\n authCodeRepository.findOne.mockRejectedValue(error);\n\n await expect(service.getAuthCode('test-auth-code')).rejects.toThrow(\n 'Database error',\n );\n });\n });\n\n describe('removeAuthCode', () => {\n it('should remove an authorization code', async () => {\n authCodeRepository.delete.mockResolvedValue({\n raw: {},\n affected: 1,\n } as DeleteResult);\n\n await service.removeAuthCode('test-auth-code');\n\n expect(authCodeRepository.delete).toHaveBeenCalledWith({\n code: 'test-auth-code',\n });\n });\n\n it('should handle database errors', async () => {\n const error = new Error('Database error');\n authCodeRepository.delete.mockRejectedValue(error);\n\n await expect(service.removeAuthCode('test-auth-code')).rejects.toThrow(\n 'Database error',\n );\n });\n });\n });\n\n describe('OAuth Session Management', () => {\n const mockSession: OAuthSession = {\n sessionId: 'session-123',\n state: 'test-state',\n clientId: 'client-123',\n redirectUri: 'http://localhost:3000/callback',\n codeChallenge: 'test-challenge',\n codeChallengeMethod: 'S256',\n oauthState: 'oauth-state-123',\n resource: 'test-resource',\n expiresAt: Date.now() + 3600000, // 1 hour from now\n };\n\n const expiredSession: OAuthSession = {\n ...mockSession,\n sessionId: 'expired-session',\n expiresAt: Date.now() - 1000, // 1 second ago\n };\n\n describe('storeOAuthSession', () => {\n it('should store an OAuth session', async () => {\n const expectedEntity = { ...mockSession, sessionId: 'session-123' };\n sessionRepository.save.mockResolvedValue(\n expectedEntity as OAuthSessionEntity,\n );\n\n await service.storeOAuthSession('session-123', mockSession);\n\n expect(sessionRepository.save).toHaveBeenCalledWith(expectedEntity);\n });\n\n it('should handle database errors', async () => {\n const error = new Error('Database error');\n sessionRepository.save.mockRejectedValue(error);\n\n await expect(\n service.storeOAuthSession('session-123', mockSession),\n ).rejects.toThrow('Database error');\n });\n });\n\n describe('getOAuthSession', () => {\n it('should return OAuth session when found and not expired', async () => {\n sessionRepository.findOne.mockResolvedValue(\n mockSession as OAuthSessionEntity,\n );\n\n const result = await service.getOAuthSession('session-123');\n\n expect(sessionRepository.findOne).toHaveBeenCalledWith({\n where: { sessionId: 'session-123' },\n });\n expect(result).toEqual(mockSession);\n });\n\n it('should return undefined and delete expired OAuth session', async () => {\n sessionRepository.findOne.mockResolvedValue(\n expiredSession as OAuthSessionEntity,\n );\n sessionRepository.delete.mockResolvedValue({\n raw: {},\n affected: 1,\n } as DeleteResult);\n\n const result = await service.getOAuthSession('expired-session');\n\n expect(sessionRepository.findOne).toHaveBeenCalledWith({\n where: { sessionId: 'expired-session' },\n });\n expect(sessionRepository.delete).toHaveBeenCalledWith({\n sessionId: 'expired-session',\n });\n expect(result).toBeUndefined();\n });\n\n it('should return undefined when OAuth session not found', async () => {\n sessionRepository.findOne.mockResolvedValue(null);\n\n const result = await service.getOAuthSession('non-existent-session');\n\n expect(result).toBeUndefined();\n });\n\n it('should handle database errors', async () => {\n const error = new Error('Database error');\n sessionRepository.findOne.mockRejectedValue(error);\n\n await expect(service.getOAuthSession('session-123')).rejects.toThrow(\n 'Database error',\n );\n });\n });\n\n describe('removeOAuthSession', () => {\n it('should remove an OAuth session', async () => {\n sessionRepository.delete.mockResolvedValue({\n raw: {},\n affected: 1,\n } as DeleteResult);\n\n await service.removeOAuthSession('session-123');\n\n expect(sessionRepository.delete).toHaveBeenCalledWith({\n sessionId: 'session-123',\n });\n });\n\n it('should handle database errors', async () => {\n const error = new Error('Database error');\n sessionRepository.delete.mockRejectedValue(error);\n\n await expect(service.removeOAuthSession('session-123')).rejects.toThrow(\n 'Database error',\n );\n });\n });\n });\n});\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rekog/mcp-nest",
3
- "version": "1.8.0-alpha.0",
3
+ "version": "1.8.0",
4
4
  "description": "NestJS module for creating Model Context Protocol (MCP) servers",
5
5
  "main": "dist/index.js",
6
6
  "license": "MIT",
@@ -1,6 +1,7 @@
1
+ /* eslint-disable @typescript-eslint/unbound-method */
1
2
  import { Test, TestingModule } from '@nestjs/testing';
2
3
  import { getRepositoryToken } from '@nestjs/typeorm';
3
- import { Repository } from 'typeorm';
4
+ import { Repository, DeleteResult } from 'typeorm';
4
5
  import { TypeOrmStore } from './typeorm-store.service';
5
6
  import {
6
7
  OAuthClientEntity,
@@ -10,13 +11,13 @@ import {
10
11
  } from './entities';
11
12
  import { OAuthClient, AuthorizationCode } from '../oauth-store.interface';
12
13
  import { OAuthSession } from '../../providers/oauth-provider.interface';
14
+ import { OAUTH_TYPEORM_CONNECTION_NAME } from './constants';
13
15
 
14
16
  describe('TypeOrmStore', () => {
15
17
  let service: TypeOrmStore;
16
18
  let clientRepository: jest.Mocked<Repository<OAuthClientEntity>>;
17
19
  let authCodeRepository: jest.Mocked<Repository<AuthorizationCodeEntity>>;
18
20
  let sessionRepository: jest.Mocked<Repository<OAuthSessionEntity>>;
19
- let userProfileRepository: jest.Mocked<Repository<OAuthUserProfileEntity>>;
20
21
 
21
22
  beforeEach(async () => {
22
23
  // Create mocked repositories
@@ -38,7 +39,7 @@ describe('TypeOrmStore', () => {
38
39
  delete: jest.fn(),
39
40
  };
40
41
 
41
- const userProfileRepository = {
42
+ const mockUserProfileRepository = {
42
43
  save: jest.fn(),
43
44
  findOne: jest.fn(),
44
45
  delete: jest.fn(),
@@ -48,30 +49,50 @@ describe('TypeOrmStore', () => {
48
49
  providers: [
49
50
  TypeOrmStore,
50
51
  {
51
- provide: getRepositoryToken(OAuthClientEntity),
52
+ provide: getRepositoryToken(
53
+ OAuthClientEntity,
54
+ OAUTH_TYPEORM_CONNECTION_NAME,
55
+ ),
52
56
  useValue: mockClientRepository,
53
57
  },
54
58
  {
55
- provide: getRepositoryToken(AuthorizationCodeEntity),
59
+ provide: getRepositoryToken(
60
+ AuthorizationCodeEntity,
61
+ OAUTH_TYPEORM_CONNECTION_NAME,
62
+ ),
56
63
  useValue: mockAuthCodeRepository,
57
64
  },
58
65
  {
59
- provide: getRepositoryToken(OAuthSessionEntity),
66
+ provide: getRepositoryToken(
67
+ OAuthSessionEntity,
68
+ OAUTH_TYPEORM_CONNECTION_NAME,
69
+ ),
60
70
  useValue: mockSessionRepository,
61
71
  },
62
72
  {
63
- provide: getRepositoryToken(OAuthUserProfileEntity),
64
- useValue: userProfileRepository,
73
+ provide: getRepositoryToken(
74
+ OAuthUserProfileEntity,
75
+ OAUTH_TYPEORM_CONNECTION_NAME,
76
+ ),
77
+ useValue: mockUserProfileRepository,
65
78
  },
66
79
  ],
67
80
  }).compile();
68
81
 
69
82
  service = module.get<TypeOrmStore>(TypeOrmStore);
70
- clientRepository = module.get(getRepositoryToken(OAuthClientEntity));
83
+ clientRepository = module.get(
84
+ getRepositoryToken(OAuthClientEntity, OAUTH_TYPEORM_CONNECTION_NAME),
85
+ );
71
86
  authCodeRepository = module.get(
72
- getRepositoryToken(AuthorizationCodeEntity),
87
+ getRepositoryToken(
88
+ AuthorizationCodeEntity,
89
+ OAUTH_TYPEORM_CONNECTION_NAME,
90
+ ),
91
+ );
92
+ sessionRepository = module.get(
93
+ getRepositoryToken(OAuthSessionEntity, OAUTH_TYPEORM_CONNECTION_NAME),
73
94
  );
74
- sessionRepository = module.get(getRepositoryToken(OAuthSessionEntity));
95
+ // Note: userProfileRepository is not directly used in tests below; it's provided for completeness
75
96
  });
76
97
 
77
98
  afterEach(() => {
@@ -295,7 +316,10 @@ describe('TypeOrmStore', () => {
295
316
  authCodeRepository.findOne.mockResolvedValue(
296
317
  expiredAuthCode as AuthorizationCodeEntity,
297
318
  );
298
- authCodeRepository.delete.mockResolvedValue({} as any);
319
+ authCodeRepository.delete.mockResolvedValue({
320
+ raw: {},
321
+ affected: 1,
322
+ } as DeleteResult);
299
323
 
300
324
  const result = await service.getAuthCode('expired-code');
301
325
 
@@ -328,7 +352,10 @@ describe('TypeOrmStore', () => {
328
352
 
329
353
  describe('removeAuthCode', () => {
330
354
  it('should remove an authorization code', async () => {
331
- authCodeRepository.delete.mockResolvedValue({} as any);
355
+ authCodeRepository.delete.mockResolvedValue({
356
+ raw: {},
357
+ affected: 1,
358
+ } as DeleteResult);
332
359
 
333
360
  await service.removeAuthCode('test-auth-code');
334
361
 
@@ -407,7 +434,10 @@ describe('TypeOrmStore', () => {
407
434
  sessionRepository.findOne.mockResolvedValue(
408
435
  expiredSession as OAuthSessionEntity,
409
436
  );
410
- sessionRepository.delete.mockResolvedValue({} as any);
437
+ sessionRepository.delete.mockResolvedValue({
438
+ raw: {},
439
+ affected: 1,
440
+ } as DeleteResult);
411
441
 
412
442
  const result = await service.getOAuthSession('expired-session');
413
443
 
@@ -440,7 +470,10 @@ describe('TypeOrmStore', () => {
440
470
 
441
471
  describe('removeOAuthSession', () => {
442
472
  it('should remove an OAuth session', async () => {
443
- sessionRepository.delete.mockResolvedValue({} as any);
473
+ sessionRepository.delete.mockResolvedValue({
474
+ raw: {},
475
+ affected: 1,
476
+ } as DeleteResult);
444
477
 
445
478
  await service.removeOAuthSession('session-123');
446
479