File tree Expand file tree Collapse file tree 7 files changed +44
-6
lines changed Expand file tree Collapse file tree 7 files changed +44
-6
lines changed Original file line number Diff line number Diff line change 1+ import { it , expect } from '@jest/globals' ;
2+
3+ import { EmailJSResponseStatus } from '../../models/EmailJSResponseStatus' ;
4+ import { headlessError } from './headlessError' ;
5+
6+ it ( 'should return EmailJSResponseStatus' , ( ) => {
7+ expect ( headlessError ( ) ) . toBeInstanceOf ( EmailJSResponseStatus ) ;
8+ } ) ;
9+
10+ it ( 'should return status 451' , ( ) => {
11+ expect ( headlessError ( ) ) . toEqual ( {
12+ status : 451 ,
13+ text : 'Unavailable For Headless Browser' ,
14+ } ) ;
15+ } ) ;
Original file line number Diff line number Diff line change 1+ import { EmailJSResponseStatus } from '../../models/EmailJSResponseStatus' ;
2+
3+ export const headlessError = ( ) => {
4+ return new EmailJSResponseStatus ( 451 , 'Unavailable For Headless Browser' ) ;
5+ } ;
Original file line number Diff line number Diff line change @@ -17,6 +17,7 @@ export const init = (
1717 const opts = buildOptions ( options ) ;
1818
1919 store . publicKey = opts . publicKey ;
20+ store . blockHeadless = opts . blockHeadless ;
2021 store . limitRate = opts . limitRate || store . limitRate ;
2122 store . blockList = opts . blockList || store . blockList ;
2223 store . origin = opts . origin || origin ;
Original file line number Diff line number Diff line change 1+ import type { EmailJSResponseStatus } from '../../models/EmailJSResponseStatus' ;
2+ import type { Options } from '../../types/Options' ;
3+
14import { store } from '../../store/store' ;
25import { sendPost } from '../../api/sendPost' ;
36import { buildOptions } from '../../utils/buildOptions/buildOptions' ;
47import { validateParams } from '../../utils/validateParams/validateParams' ;
58import { validateTemplateParams } from '../../utils/validateTemplateParams/validateTemplateParams' ;
6-
7- import type { EmailJSResponseStatus } from '../../models/EmailJSResponseStatus' ;
8- import type { Options } from '../../types/Options' ;
9+ import { isHeadless } from '../../utils/isHeadless/isHeadless' ;
10+ import { headlessError } from '../../errors/headlessError/headlessError' ;
911
1012/**
1113 * Send a template to the specific EmailJS service
@@ -23,6 +25,11 @@ export const send = (
2325) : Promise < EmailJSResponseStatus > => {
2426 const opts = buildOptions ( options ) ;
2527 const publicKey = opts . publicKey || store . publicKey ;
28+ const blockHeadless = opts . blockHeadless || store . blockHeadless ;
29+
30+ if ( blockHeadless && isHeadless ( navigator ) ) {
31+ return Promise . reject ( headlessError ( ) ) ;
32+ }
2633
2734 validateParams ( publicKey , serviceID , templateID ) ;
2835 validateTemplateParams ( templateParams ) ;
Original file line number Diff line number Diff line change 1+ import type { EmailJSResponseStatus } from '../../models/EmailJSResponseStatus' ;
2+ import type { Options } from '../../types/Options' ;
3+
14import { store } from '../../store/store' ;
25import { sendPost } from '../../api/sendPost' ;
36import { buildOptions } from '../../utils/buildOptions/buildOptions' ;
47import { validateForm } from '../../utils/validateForm/validateForm' ;
58import { validateParams } from '../../utils/validateParams/validateParams' ;
6-
7- import type { EmailJSResponseStatus } from '../../models/EmailJSResponseStatus' ;
8- import type { Options } from '../../types/Options' ;
9+ import { isHeadless } from '../../utils/isHeadless/isHeadless' ;
10+ import { headlessError } from '../../errors/headlessError/headlessError' ;
911
1012const findHTMLForm = ( form : string | HTMLFormElement ) : HTMLFormElement | null => {
1113 return typeof form === 'string' ? document . querySelector < HTMLFormElement > ( form ) : form ;
@@ -27,6 +29,12 @@ export const sendForm = (
2729) : Promise < EmailJSResponseStatus > => {
2830 const opts = buildOptions ( options ) ;
2931 const publicKey = opts . publicKey || store . publicKey ;
32+ const blockHeadless = opts . blockHeadless || store . blockHeadless ;
33+
34+ if ( blockHeadless && isHeadless ( navigator ) ) {
35+ return Promise . reject ( headlessError ( ) ) ;
36+ }
37+
3038 const currentForm = findHTMLForm ( form ) ;
3139
3240 validateParams ( publicKey , serviceID , templateID ) ;
Original file line number Diff line number Diff line change @@ -2,6 +2,7 @@ import type { Options } from '../types/Options';
22
33export const store : Options = {
44 origin : 'https://api.emailjs.com' ,
5+ blockHeadless : false ,
56 limitRate : 0 ,
67 blockList : [ ] ,
78} ;
Original file line number Diff line number Diff line change 11export interface Options {
22 origin ?: string ;
33 publicKey ?: string ;
4+ blockHeadless ?: boolean ;
45 limitRate ?: number ;
56 blockList ?: string [ ] ;
67}
You can’t perform that action at this time.
0 commit comments