feat(ts_node): Add support for HTTPS certificate creation
This commit is contained in:
		| @@ -1,5 +1,12 @@ | |||||||
| # Changelog | # Changelog | ||||||
|  |  | ||||||
|  | ## 2024-09-18 - 5.1.0 - feat(ts_node) | ||||||
|  | Add support for HTTPS certificate creation | ||||||
|  |  | ||||||
|  | - Added TapNodeTools class with methods to run commands and create HTTPS certificates | ||||||
|  | - Exported necessary plugins including crypto and fs for node | ||||||
|  | - Updated test cases to include tests for HTTPS certificate creation | ||||||
|  |  | ||||||
| ## 2024-09-17 - 5.0.25 - fix(core) | ## 2024-09-17 - 5.0.25 - fix(core) | ||||||
| Fix typos in package.json, update dependencies and update workflow. | Fix typos in package.json, update dependencies and update workflow. | ||||||
|  |  | ||||||
|   | |||||||
| @@ -7,4 +7,12 @@ tap.test('should execure a command', async () => { | |||||||
|   expect(result.exitCode).toEqual(0); |   expect(result.exitCode).toEqual(0); | ||||||
| }); | }); | ||||||
|  |  | ||||||
|  | tap.test('should create a https cert', async () => { | ||||||
|  |   const { key, cert } = await tapNodeTools.createHttpsCert('localhost', 'localhost.key', 'localhost.cert'); | ||||||
|  |   console.log(key); | ||||||
|  |   console.log(cert); | ||||||
|  |   expect(key).toInclude('-----BEGIN PRIVATE KEY-----'); | ||||||
|  |   expect(cert).toInclude('-----BEGIN CERTIFICATE-----'); | ||||||
|  | }); | ||||||
|  |  | ||||||
| tap.start(); | tap.start(); | ||||||
|   | |||||||
| @@ -3,6 +3,6 @@ | |||||||
|  */ |  */ | ||||||
| export const commitinfo = { | export const commitinfo = { | ||||||
|   name: '@push.rocks/tapbundle', |   name: '@push.rocks/tapbundle', | ||||||
|   version: '5.0.25', |   version: '5.1.0', | ||||||
|   description: 'A test automation library bundling utilities and tools for TAP (Test Anything Protocol) based testing, specifically tailored for tapbuffer.' |   description: 'A test automation library bundling utilities and tools for TAP (Test Anything Protocol) based testing, specifically tailored for tapbuffer.' | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										45
									
								
								ts_node/classes.tapnodetools.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								ts_node/classes.tapnodetools.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | |||||||
|  | import * as plugins from './plugins.js'; | ||||||
|  |  | ||||||
|  | class TapNodeTools { | ||||||
|  |    | ||||||
|  |   private smartshellInstance: plugins.smartshell.Smartshell; | ||||||
|  |   constructor() { | ||||||
|  |  | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public async runCommand(commandArg) { | ||||||
|  |     if (!this.smartshellInstance) { | ||||||
|  |       this.smartshellInstance = new plugins.smartshell.Smartshell({ | ||||||
|  |         executor: 'bash', | ||||||
|  |       }); | ||||||
|  |     } | ||||||
|  |     const result = await this.smartshellInstance.exec(commandArg); | ||||||
|  |     return result; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public async createHttpsCert(commonName: string, keyFile: string, certFile: string): Promise<{ key: string, cert: string }> { | ||||||
|  |     const key = plugins.crypto.generateKeyPairSync('rsa', { | ||||||
|  |       modulusLength: 2048, | ||||||
|  |       publicExponent: 65537, | ||||||
|  |     }); | ||||||
|  |    | ||||||
|  |     const cert = '-----BEGIN CERTIFICATE-----\n' + | ||||||
|  |       key.publicKey.export({ | ||||||
|  |         type: 'spki', | ||||||
|  |         format: 'pem' | ||||||
|  |       }) + | ||||||
|  |       '\n-----END CERTIFICATE-----\n'; | ||||||
|  |    | ||||||
|  |     const keyContent = key.privateKey.export({ | ||||||
|  |       type: 'pkcs8', | ||||||
|  |       format: 'pem', | ||||||
|  |     }); | ||||||
|  |    | ||||||
|  |     return { | ||||||
|  |       key: keyContent as string, | ||||||
|  |       cert: cert, | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export const tapNodeTools = new TapNodeTools(); | ||||||
| @@ -1,21 +1 @@ | |||||||
| import * as plugins from './plugins.js'; | export * from './classes.tapnodetools.js'; | ||||||
|  |  | ||||||
| class TapNodeTools { |  | ||||||
|    |  | ||||||
|   private smartshellInstance: plugins.smartshell.Smartshell; |  | ||||||
|   constructor() { |  | ||||||
|  |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   public async runCommand(commandArg) { |  | ||||||
|     if (!this.smartshellInstance) { |  | ||||||
|       this.smartshellInstance = new plugins.smartshell.Smartshell({ |  | ||||||
|         executor: 'bash', |  | ||||||
|       }); |  | ||||||
|     } |  | ||||||
|     const result = await this.smartshellInstance.exec(commandArg); |  | ||||||
|     return result; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| export const tapNodeTools = new TapNodeTools(); |  | ||||||
|   | |||||||
| @@ -1,3 +1,10 @@ | |||||||
|  | // node native | ||||||
|  | import * as crypto from 'crypto'; | ||||||
|  | import * as fs from 'fs'; | ||||||
|  |  | ||||||
|  | export { crypto,fs }; | ||||||
|  |  | ||||||
|  | // @push.rocks scope | ||||||
| import * as smartshell from '@push.rocks/smartshell'; | import * as smartshell from '@push.rocks/smartshell'; | ||||||
|  |  | ||||||
| export { smartshell }; | export { smartshell }; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user