Import Instagram archive to a Bluesky account
9
fork

Configure Feed

Select the types of activity you want to include in your feed.

Move Min Max post date configuration to the AppConfig class.

+85 -12
+56
src/config.test.ts
··· 11 11 delete process.env.TEST_IMAGE_MODE; 12 12 delete process.env.TEST_IMAGES_MODE; 13 13 delete process.env.SIMULATE; 14 + delete process.env.MIN_DATE; 15 + delete process.env.MAX_DATE; 14 16 }); 15 17 16 18 afterEach(() => { ··· 28 30 expect(config.isSimulateEnabled()).toBe(false); 29 31 }); 30 32 33 + test('should create config with undefined min and max dates by default', () => { 34 + const config = AppConfig.fromEnv(); 35 + expect(config.getMinDate()).toBeUndefined(); 36 + expect(config.getMaxDate()).toBeUndefined(); 37 + }); 38 + 31 39 test('should enable test video mode when TEST_VIDEO_MODE=1', () => { 32 40 process.env.TEST_VIDEO_MODE = '1'; 33 41 const config = AppConfig.fromEnv(); ··· 50 58 process.env.SIMULATE = '1'; 51 59 const config = AppConfig.fromEnv(); 52 60 expect(config.isSimulateEnabled()).toBe(true); 61 + }); 62 + 63 + test('should set minDate when MIN_DATE is provided', () => { 64 + process.env.MIN_DATE = '2023-01-01'; 65 + const config = AppConfig.fromEnv(); 66 + expect(config.getMinDate()).toEqual(new Date('2023-01-01')); 67 + }); 68 + 69 + test('should set maxDate when MAX_DATE is provided', () => { 70 + process.env.MAX_DATE = '2024-12-31'; 71 + const config = AppConfig.fromEnv(); 72 + expect(config.getMaxDate()).toEqual(new Date('2024-12-31')); 73 + }); 74 + 75 + test('should set both minDate and maxDate when both are provided', () => { 76 + process.env.MIN_DATE = '2023-01-01'; 77 + process.env.MAX_DATE = '2024-12-31'; 78 + const config = AppConfig.fromEnv(); 79 + expect(config.getMinDate()).toEqual(new Date('2023-01-01')); 80 + expect(config.getMaxDate()).toEqual(new Date('2024-12-31')); 53 81 }); 54 82 }); 55 83 ··· 132 160 process.env.SIMULATE = '1'; 133 161 const config = AppConfig.fromEnv(); 134 162 expect(config.isSimulateEnabled()).toBe(true); 163 + }); 164 + }); 165 + 166 + describe('getMinDate and getMaxDate', () => { 167 + test('should return undefined when no dates are set', () => { 168 + const config = AppConfig.fromEnv(); 169 + expect(config.getMinDate()).toBeUndefined(); 170 + expect(config.getMaxDate()).toBeUndefined(); 171 + }); 172 + 173 + test('should return correct date when MIN_DATE is set', () => { 174 + process.env.MIN_DATE = '2023-01-01'; 175 + const config = AppConfig.fromEnv(); 176 + expect(config.getMinDate()).toEqual(new Date('2023-01-01')); 177 + }); 178 + 179 + test('should return correct date when MAX_DATE is set', () => { 180 + process.env.MAX_DATE = '2024-12-31'; 181 + const config = AppConfig.fromEnv(); 182 + expect(config.getMaxDate()).toEqual(new Date('2024-12-31')); 183 + }); 184 + 185 + test('should handle invalid date strings', () => { 186 + process.env.MIN_DATE = 'not-a-date'; 187 + process.env.MAX_DATE = 'also-not-a-date'; 188 + const config = AppConfig.fromEnv(); 189 + expect(config.getMinDate()?.toString()).toBe('Invalid Date'); 190 + expect(config.getMaxDate()?.toString()).toBe('Invalid Date'); 135 191 }); 136 192 }); 137 193 });
+23 -1
src/config.ts
··· 11 11 private readonly testImageMode: boolean; 12 12 private readonly testImagesMode: boolean; 13 13 private readonly simulate: boolean; 14 + private readonly minDate: Date | undefined; 15 + private readonly maxDate: Date | undefined; 14 16 15 17 constructor(config: { 16 18 testVideoMode: boolean; 17 19 testImageMode: boolean; 18 20 testImagesMode: boolean; 19 21 simulate: boolean; 22 + minDate?: Date; 23 + maxDate?: Date; 20 24 }) { 21 25 this.testVideoMode = config.testVideoMode; 22 26 this.testImageMode = config.testImageMode; 23 27 this.testImagesMode = config.testImagesMode; 24 28 this.simulate = config.simulate; 29 + this.minDate = config.minDate; 30 + this.maxDate = config.maxDate; 25 31 } 26 32 27 33 /** ··· 32 38 testVideoMode: process.env.TEST_VIDEO_MODE === '1', 33 39 testImageMode: process.env.TEST_IMAGE_MODE === '1', 34 40 testImagesMode: process.env.TEST_IMAGES_MODE === '1', 35 - simulate: process.env.SIMULATE === '1' 41 + simulate: process.env.SIMULATE === '1', 42 + minDate: process.env.MIN_DATE ? new Date(process.env.MIN_DATE) : undefined, 43 + maxDate: process.env.MAX_DATE ? new Date(process.env.MAX_DATE) : undefined 36 44 }); 37 45 } 38 46 ··· 48 56 */ 49 57 isSimulateEnabled(): boolean { 50 58 return this.simulate; 59 + } 60 + 61 + /** 62 + * Gets the minimum date for post filtering 63 + */ 64 + getMinDate(): Date | undefined { 65 + return this.minDate; 66 + } 67 + 68 + /** 69 + * Gets the maximum date for post filtering 70 + */ 71 + getMaxDate(): Date | undefined { 72 + return this.maxDate; 51 73 } 52 74 53 75 /**
+6 -11
src/instagram-to-bluesky.ts
··· 114 114 const config = AppConfig.fromEnv(); 115 115 config.validate(); 116 116 117 - let MIN_DATE: Date | undefined = process.env.MIN_DATE 118 - ? new Date(process.env.MIN_DATE) 119 - : undefined; 120 - let MAX_DATE: Date | undefined = process.env.MAX_DATE 121 - ? new Date(process.env.MAX_DATE) 122 - : undefined; 123 - 124 117 const archivalFolder = config.getArchiveFolder(); 125 118 126 119 // Log begining of import with a start date time to calculate the total time. ··· 129 122 logger.info({ 130 123 SourceFolder: archivalFolder, 131 124 username: process.env.BLUESKY_USERNAME, 132 - MIN_DATE, 133 - MAX_DATE, 125 + MIN_DATE: config.getMinDate(), 126 + MAX_DATE: config.getMaxDate(), 134 127 SIMULATE: config.isSimulateEnabled(), 135 128 }); 136 129 ··· 202 195 } 203 196 204 197 // If MIN_DATE configured validate the creation date is after the minimum date config. 205 - if (MIN_DATE && checkDate && checkDate < MIN_DATE) { 198 + const minDate = config.getMinDate(); 199 + if (minDate && checkDate && checkDate < minDate) { 206 200 logger.warn( 207 201 `Skipping post - Before MIN_DATE: [${checkDate.toUTCString()}]` 208 202 ); ··· 210 204 } 211 205 212 206 // If MAX_DATE configured validate the creation date is before the max date config. 213 - if (MAX_DATE && checkDate > MAX_DATE) { 207 + const maxDate = config.getMaxDate(); 208 + if (maxDate && checkDate > maxDate) { 214 209 logger.warn( 215 210 `Skipping post - After MAX_DATE [${checkDate.toUTCString()}]` 216 211 );