Socket
Socket
Sign inDemoInstall

@arcjet/analyze

Package Overview
Dependencies
Maintainers
2
Versions
27
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@arcjet/analyze - npm Package Compare versions

Comparing version 1.0.0-alpha.18 to 1.0.0-alpha.19

wasm/interfaces/arcjet-js-req-email-validator-overrides.d.ts

2

_virtual/arcjet_analyze_js_req.component.core2.js

@@ -27,3 +27,3 @@ // @generated by wasm2module - DO NOT EDIT

const wasmBase64 = "data:application/wasm;base64,AGFzbQEAAAABBgFgAn9/AAMDAgAABAUBcAECAgcUAwEwAAABMQABCCRpbXBvcnRzAQAKGQILACAAIAFBABEAAAsLACAAIAFBAREAAAsALwlwcm9kdWNlcnMBDHByb2Nlc3NlZC1ieQENd2l0LWNvbXBvbmVudAcwLjIxMC4wAGcEbmFtZQATEndpdC1jb21wb25lbnQ6c2hpbQFLAgAjaW5kaXJlY3QtYXJjamV0OmpzLXJlcS9sb2dnZXItZGVidWcBI2luZGlyZWN0LWFyY2pldDpqcy1yZXEvbG9nZ2VyLWVycm9y";
const wasmBase64 = "data:application/wasm;base64,AGFzbQEAAAABDAJgAn9/AGACf38BfwMHBgAAAQEBAQQFAXABBgYHJAcBMAAAATEAAQEyAAIBMwADATQABAE1AAUIJGltcG9ydHMBAApJBgsAIAAgAUEAEQAACwsAIAAgAUEBEQAACwsAIAAgAUECEQEACwsAIAAgAUEDEQEACwsAIAAgAUEEEQEACwsAIAAgAUEFEQEACwAvCXByb2R1Y2VycwEMcHJvY2Vzc2VkLWJ5AQ13aXQtY29tcG9uZW50BzAuMjEwLjAA7gIEbmFtZQATEndpdC1jb21wb25lbnQ6c2hpbQHRAgYAI2luZGlyZWN0LWFyY2pldDpqcy1yZXEvbG9nZ2VyLWRlYnVnASNpbmRpcmVjdC1hcmNqZXQ6anMtcmVxL2xvZ2dlci1lcnJvcgI+aW5kaXJlY3QtYXJjamV0OmpzLXJlcS9lbWFpbC12YWxpZGF0b3Itb3ZlcnJpZGVzLWlzLWZyZWUtZW1haWwDRGluZGlyZWN0LWFyY2pldDpqcy1yZXEvZW1haWwtdmFsaWRhdG9yLW92ZXJyaWRlcy1pcy1kaXNwb3NhYmxlLWVtYWlsBD9pbmRpcmVjdC1hcmNqZXQ6anMtcmVxL2VtYWlsLXZhbGlkYXRvci1vdmVycmlkZXMtaGFzLW14LXJlY29yZHMFPWluZGlyZWN0LWFyY2pldDpqcy1yZXEvZW1haWwtdmFsaWRhdG9yLW92ZXJyaWRlcy1oYXMtZ3JhdmF0YXI=";
/**

@@ -30,0 +30,0 @@ * Returns a WebAssembly.Module for an Arcjet Wasm binary, decoded from a base64

@@ -27,3 +27,3 @@ // @generated by wasm2module - DO NOT EDIT

const wasmBase64 = "data:application/wasm;base64,AGFzbQEAAAABBgFgAn9/AAIaAwABMAAAAAExAAAACCRpbXBvcnRzAXABAgIJCAEAQQALAgABAC8JcHJvZHVjZXJzAQxwcm9jZXNzZWQtYnkBDXdpdC1jb21wb25lbnQHMC4yMTAuMAAcBG5hbWUAFRR3aXQtY29tcG9uZW50OmZpeHVwcw==";
const wasmBase64 = "data:application/wasm;base64,AGFzbQEAAAABDAJgAn9/AGACf38BfwIuBwABMAAAAAExAAAAATIAAQABMwABAAE0AAEAATUAAQAIJGltcG9ydHMBcAEGBgkMAQBBAAsGAAECAwQFAC8JcHJvZHVjZXJzAQxwcm9jZXNzZWQtYnkBDXdpdC1jb21wb25lbnQHMC4yMTAuMAAcBG5hbWUAFRR3aXQtY29tcG9uZW50OmZpeHVwcw==";
/**

@@ -30,0 +30,0 @@ * Returns a WebAssembly.Module for an Arcjet Wasm binary, decoded from a base64

import type { ArcjetLogger, ArcjetRequestDetails } from "@arcjet/protocol";
import type { EmailValidationConfig, BotDetectionResult, BotType } from "./wasm/arcjet_analyze_js_req.component.js";
import type { EmailValidationConfig, BotDetectionResult, BotType, EmailValidationResult } from "./wasm/arcjet_analyze_js_req.component.js";
interface AnalyzeContext {

@@ -29,3 +29,3 @@ log: ArcjetLogger;

export declare function generateFingerprint(context: AnalyzeContext, request: Partial<ArcjetRequestDetails>): Promise<string>;
export declare function isValidEmail(context: AnalyzeContext, candidate: string, options?: EmailValidationConfig): Promise<boolean>;
export declare function isValidEmail(context: AnalyzeContext, candidate: string, options?: EmailValidationConfig): Promise<EmailValidationResult>;
export declare function detectBot(context: AnalyzeContext, headers: string, patterns_add: string, patterns_remove: string): Promise<BotDetectionResult>;

@@ -6,2 +6,9 @@ import { instantiate } from './wasm/arcjet_analyze_js_req.component.js';

const FREE_EMAIL_PROVIDERS = [
"gmail.com",
"yahoo.com",
"hotmail.com",
"aol.com",
"hotmail.co.uk",
];
async function moduleFromPath(path) {

@@ -30,2 +37,19 @@ if (path === "arcjet_analyze_js_req.component.core.wasm") {

},
"arcjet:js-req/email-validator-overrides": {
isFreeEmail(domain) {
if (FREE_EMAIL_PROVIDERS.includes(domain)) {
return "yes";
}
return "unknown";
},
isDisposableEmail() {
return "unknown";
},
hasMxRecords() {
return "unknown";
},
hasGravatar() {
return "unknown";
},
},
};

@@ -55,8 +79,17 @@ try {

const analyze = await init(context);
const optionsOrDefault = {
requireTopLevelDomain: true,
allowDomainLiteral: false,
blockedEmails: [],
...options,
};
if (typeof analyze !== "undefined") {
return analyze.isValidEmail(candidate, options);
return analyze.isValidEmail(candidate, optionsOrDefault);
}
else {
// TODO: Fallback to JS if we don't have WASM?
return true;
// Skip the local evaluation of the rule if WASM is not available
return {
validity: "valid",
blocked: [],
};
}

@@ -63,0 +96,0 @@ }

@@ -9,2 +9,3 @@ import type { ArcjetLogger, ArcjetRequestDetails } from "@arcjet/protocol";

BotType,
EmailValidationResult,
} from "./wasm/arcjet_analyze_js_req.component.js";

@@ -16,2 +17,10 @@

const FREE_EMAIL_PROVIDERS = [
"gmail.com",
"yahoo.com",
"hotmail.com",
"aol.com",
"hotmail.co.uk",
];
interface AnalyzeContext {

@@ -48,2 +57,19 @@ log: ArcjetLogger;

},
"arcjet:js-req/email-validator-overrides": {
isFreeEmail(domain) {
if (FREE_EMAIL_PROVIDERS.includes(domain)) {
return "yes";
}
return "unknown";
},
isDisposableEmail() {
return "unknown";
},
hasMxRecords() {
return "unknown";
},
hasGravatar() {
return "unknown";
},
},
};

@@ -103,10 +129,19 @@

options?: EmailValidationConfig,
) {
): Promise<EmailValidationResult> {
const analyze = await init(context);
const optionsOrDefault = {
requireTopLevelDomain: true,
allowDomainLiteral: false,
blockedEmails: [],
...options,
};
if (typeof analyze !== "undefined") {
return analyze.isValidEmail(candidate, options);
return analyze.isValidEmail(candidate, optionsOrDefault);
} else {
// TODO: Fallback to JS if we don't have WASM?
return true;
// Skip the local evaluation of the rule if WASM is not available
return {
validity: "valid",
blocked: [],
};
}

@@ -113,0 +148,0 @@ }

import type { ArcjetLogger, ArcjetRequestDetails } from "@arcjet/protocol";
import type { EmailValidationConfig, BotDetectionResult, BotType } from "./wasm/arcjet_analyze_js_req.component.js";
import type { EmailValidationConfig, BotDetectionResult, BotType, EmailValidationResult } from "./wasm/arcjet_analyze_js_req.component.js";
interface AnalyzeContext {

@@ -29,3 +29,3 @@ log: ArcjetLogger;

export declare function generateFingerprint(context: AnalyzeContext, request: Partial<ArcjetRequestDetails>): Promise<string>;
export declare function isValidEmail(context: AnalyzeContext, candidate: string, options?: EmailValidationConfig): Promise<boolean>;
export declare function isValidEmail(context: AnalyzeContext, candidate: string, options?: EmailValidationConfig): Promise<EmailValidationResult>;
export declare function detectBot(context: AnalyzeContext, headers: string, patterns_add: string, patterns_remove: string): Promise<BotDetectionResult>;

@@ -6,2 +6,9 @@ import { instantiate } from './wasm/arcjet_analyze_js_req.component.js';

const FREE_EMAIL_PROVIDERS = [
"gmail.com",
"yahoo.com",
"hotmail.com",
"aol.com",
"hotmail.co.uk",
];
// TODO: Do we actually need this wasmCache or does `import` cache correctly?

@@ -42,2 +49,19 @@ const wasmCache = new Map();

},
"arcjet:js-req/email-validator-overrides": {
isFreeEmail(domain) {
if (FREE_EMAIL_PROVIDERS.includes(domain)) {
return "yes";
}
return "unknown";
},
isDisposableEmail() {
return "unknown";
},
hasMxRecords() {
return "unknown";
},
hasGravatar() {
return "unknown";
},
},
};

@@ -67,8 +91,17 @@ try {

const analyze = await init(context);
const optionsOrDefault = {
requireTopLevelDomain: true,
allowDomainLiteral: false,
blockedEmails: [],
...options,
};
if (typeof analyze !== "undefined") {
return analyze.isValidEmail(candidate, options);
return analyze.isValidEmail(candidate, optionsOrDefault);
}
else {
// TODO: Fallback to JS if we don't have WASM?
return true;
// Skip the local evaluation of the rule if WASM is not available
return {
validity: "valid",
blocked: [],
};
}

@@ -75,0 +108,0 @@ }

@@ -9,2 +9,3 @@ import type { ArcjetLogger, ArcjetRequestDetails } from "@arcjet/protocol";

BotType,
EmailValidationResult,
} from "./wasm/arcjet_analyze_js_req.component.js";

@@ -16,2 +17,10 @@

const FREE_EMAIL_PROVIDERS = [
"gmail.com",
"yahoo.com",
"hotmail.com",
"aol.com",
"hotmail.co.uk",
];
interface AnalyzeContext {

@@ -62,2 +71,19 @@ log: ArcjetLogger;

},
"arcjet:js-req/email-validator-overrides": {
isFreeEmail(domain) {
if (FREE_EMAIL_PROVIDERS.includes(domain)) {
return "yes";
}
return "unknown";
},
isDisposableEmail() {
return "unknown";
},
hasMxRecords() {
return "unknown";
},
hasGravatar() {
return "unknown";
},
},
};

@@ -117,10 +143,19 @@

options?: EmailValidationConfig,
) {
): Promise<EmailValidationResult> {
const analyze = await init(context);
const optionsOrDefault = {
requireTopLevelDomain: true,
allowDomainLiteral: false,
blockedEmails: [],
...options,
};
if (typeof analyze !== "undefined") {
return analyze.isValidEmail(candidate, options);
return analyze.isValidEmail(candidate, optionsOrDefault);
} else {
// TODO: Fallback to JS if we don't have WASM?
return true;
// Skip the local evaluation of the rule if WASM is not available
return {
validity: "valid",
blocked: [],
};
}

@@ -127,0 +162,0 @@ }

{
"name": "@arcjet/analyze",
"version": "1.0.0-alpha.18",
"version": "1.0.0-alpha.19",
"description": "Arcjet local analysis engine",

@@ -54,14 +54,14 @@ "license": "Apache-2.0",

"dependencies": {
"@arcjet/protocol": "1.0.0-alpha.18"
"@arcjet/protocol": "1.0.0-alpha.19"
},
"devDependencies": {
"@arcjet/eslint-config": "1.0.0-alpha.18",
"@arcjet/rollup-config": "1.0.0-alpha.18",
"@arcjet/tsconfig": "1.0.0-alpha.18",
"@arcjet/eslint-config": "1.0.0-alpha.19",
"@arcjet/rollup-config": "1.0.0-alpha.19",
"@arcjet/tsconfig": "1.0.0-alpha.19",
"@bytecodealliance/jco": "1.2.4",
"@jest/globals": "29.7.0",
"@rollup/wasm-node": "4.18.0",
"@rollup/wasm-node": "4.18.1",
"@types/node": "18.18.0",
"jest": "29.7.0",
"typescript": "5.5.2"
"typescript": "5.5.3"
},

@@ -68,0 +68,0 @@ "publishConfig": {

@@ -21,8 +21,23 @@ /**

}
/**
* # Variants
*
* ## `"valid"`
*
* ## `"invalid"`
*/
export type EmailValidity = 'valid' | 'invalid';
export interface EmailValidationResult {
validity: EmailValidity,
blocked: string[],
}
export interface EmailValidationConfig {
requireTopLevelDomain?: boolean,
allowDomainLiteral?: boolean,
requireTopLevelDomain: boolean,
allowDomainLiteral: boolean,
blockedEmails: string[],
}
import { ArcjetJsReqEmailValidatorOverrides } from './interfaces/arcjet-js-req-email-validator-overrides.js';
import { ArcjetJsReqLogger } from './interfaces/arcjet-js-req-logger.js';
export interface ImportObject {
'arcjet:js-req/email-validator-overrides': typeof ArcjetJsReqEmailValidatorOverrides,
'arcjet:js-req/logger': typeof ArcjetJsReqLogger,

@@ -33,3 +48,3 @@ }

generateFingerprint(request: string, characteristics: string[]): string,
isValidEmail(candidate: string, options: EmailValidationConfig | undefined): boolean,
isValidEmail(candidate: string, options: EmailValidationConfig): EmailValidationResult,
}

@@ -36,0 +51,0 @@

@@ -17,6 +17,2 @@ function clampGuest(i, min, max) {

function throwInvalidBool() {
throw new TypeError('invalid variant discriminant for bool');
}
const utf8Decoder = new TextDecoder();

@@ -55,2 +51,3 @@

const { hasGravatar, hasMxRecords, isDisposableEmail, isFreeEmail } = imports['arcjet:js-req/email-validator-overrides'];
const { debug, error } = imports['arcjet:js-req/logger'];

@@ -74,8 +71,139 @@ let exports0;

}
function trampoline2(arg0, arg1) {
var ptr0 = arg0;
var len0 = arg1;
var result0 = utf8Decoder.decode(new Uint8Array(memory0.buffer, ptr0, len0));
const ret = isFreeEmail(result0);
var val1 = ret;
let enum1;
switch (val1) {
case 'yes': {
enum1 = 0;
break;
}
case 'no': {
enum1 = 1;
break;
}
case 'unknown': {
enum1 = 2;
break;
}
default: {
if ((ret) instanceof Error) {
console.error(ret);
}
throw new TypeError(`"${val1}" is not one of the cases of validator-response`);
}
}
return enum1;
}
function trampoline3(arg0, arg1) {
var ptr0 = arg0;
var len0 = arg1;
var result0 = utf8Decoder.decode(new Uint8Array(memory0.buffer, ptr0, len0));
const ret = isDisposableEmail(result0);
var val1 = ret;
let enum1;
switch (val1) {
case 'yes': {
enum1 = 0;
break;
}
case 'no': {
enum1 = 1;
break;
}
case 'unknown': {
enum1 = 2;
break;
}
default: {
if ((ret) instanceof Error) {
console.error(ret);
}
throw new TypeError(`"${val1}" is not one of the cases of validator-response`);
}
}
return enum1;
}
function trampoline4(arg0, arg1) {
var ptr0 = arg0;
var len0 = arg1;
var result0 = utf8Decoder.decode(new Uint8Array(memory0.buffer, ptr0, len0));
const ret = hasMxRecords(result0);
var val1 = ret;
let enum1;
switch (val1) {
case 'yes': {
enum1 = 0;
break;
}
case 'no': {
enum1 = 1;
break;
}
case 'unknown': {
enum1 = 2;
break;
}
default: {
if ((ret) instanceof Error) {
console.error(ret);
}
throw new TypeError(`"${val1}" is not one of the cases of validator-response`);
}
}
return enum1;
}
function trampoline5(arg0, arg1) {
var ptr0 = arg0;
var len0 = arg1;
var result0 = utf8Decoder.decode(new Uint8Array(memory0.buffer, ptr0, len0));
const ret = hasGravatar(result0);
var val1 = ret;
let enum1;
switch (val1) {
case 'yes': {
enum1 = 0;
break;
}
case 'no': {
enum1 = 1;
break;
}
case 'unknown': {
enum1 = 2;
break;
}
default: {
if ((ret) instanceof Error) {
console.error(ret);
}
throw new TypeError(`"${val1}" is not one of the cases of validator-response`);
}
}
return enum1;
}
let realloc0;
let postReturn0;
let postReturn1;
let postReturn2;
Promise.all([module0, module1, module2]).catch(() => {});
({ exports: exports0 } = await instantiateCore(await module1));
({ exports: exports1 } = await instantiateCore(await module0, {
'arcjet:js-req/email-validator-overrides': {
'has-gravatar': exports0['5'],
'has-mx-records': exports0['4'],
'is-disposable-email': exports0['3'],
'is-free-email': exports0['2'],
},
'arcjet:js-req/logger': {

@@ -92,2 +220,6 @@ debug: exports0['0'],

'1': trampoline1,
'2': trampoline2,
'3': trampoline3,
'4': trampoline4,
'5': trampoline5,
},

@@ -98,2 +230,3 @@ }));

postReturn1 = exports1['cabi_post_generate-fingerprint'];
postReturn2 = exports1['cabi_post_is-valid-email'];

@@ -195,53 +328,47 @@ function detectBot(arg0, arg1, arg2) {

var len0 = utf8EncodedLen;
var variant4 = arg1;
let variant4_0;
let variant4_1;
let variant4_2;
let variant4_3;
let variant4_4;
if (variant4 === null || variant4=== undefined) {
variant4_0 = 0;
variant4_1 = 0;
variant4_2 = 0;
variant4_3 = 0;
variant4_4 = 0;
} else {
const e = variant4;
var {requireTopLevelDomain: v1_0, allowDomainLiteral: v1_1 } = e;
var variant2 = v1_0;
let variant2_0;
let variant2_1;
if (variant2 === null || variant2=== undefined) {
variant2_0 = 0;
variant2_1 = 0;
} else {
const e = variant2;
variant2_0 = 1;
variant2_1 = e ? 1 : 0;
}
var variant3 = v1_1;
let variant3_0;
let variant3_1;
if (variant3 === null || variant3=== undefined) {
variant3_0 = 0;
variant3_1 = 0;
} else {
const e = variant3;
variant3_0 = 1;
variant3_1 = e ? 1 : 0;
}
variant4_0 = 1;
variant4_1 = variant2_0;
variant4_2 = variant2_1;
variant4_3 = variant3_0;
variant4_4 = variant3_1;
var {requireTopLevelDomain: v1_0, allowDomainLiteral: v1_1, blockedEmails: v1_2 } = arg1;
var vec3 = v1_2;
var len3 = vec3.length;
var result3 = realloc0(0, 0, 4, len3 * 8);
for (let i = 0; i < vec3.length; i++) {
const e = vec3[i];
const base = result3 + i * 8;var ptr2 = utf8Encode(e, realloc0, memory0);
var len2 = utf8EncodedLen;
dataView(memory0).setInt32(base + 4, len2, true);
dataView(memory0).setInt32(base + 0, ptr2, true);
}
const ret = exports1['is-valid-email'](ptr0, len0, variant4_0, variant4_1, variant4_2, variant4_3, variant4_4);
let variant7;
const ret = exports1['is-valid-email'](ptr0, len0, v1_0 ? 1 : 0, v1_1 ? 1 : 0, result3, len3);
let variant8;
switch (dataView(memory0).getUint8(ret + 0, true)) {
case 0: {
var bool5 = dataView(memory0).getUint8(ret + 4, true);
variant7= {
let enum4;
switch (dataView(memory0).getUint8(ret + 4, true)) {
case 0: {
enum4 = 'valid';
break;
}
case 1: {
enum4 = 'invalid';
break;
}
default: {
throw new TypeError('invalid discriminant specified for EmailValidity');
}
}
var len6 = dataView(memory0).getInt32(ret + 12, true);
var base6 = dataView(memory0).getInt32(ret + 8, true);
var result6 = [];
for (let i = 0; i < len6; i++) {
const base = base6 + i * 8;
var ptr5 = dataView(memory0).getInt32(base + 0, true);
var len5 = dataView(memory0).getInt32(base + 4, true);
var result5 = utf8Decoder.decode(new Uint8Array(memory0.buffer, ptr5, len5));
result6.push(result5);
}
variant8= {
tag: 'ok',
val: bool5 == 0 ? false : (bool5 == 1 ? true : throwInvalidBool())
val: {
validity: enum4,
blocked: result6,
}
};

@@ -251,8 +378,8 @@ break;

case 1: {
var ptr6 = dataView(memory0).getInt32(ret + 4, true);
var len6 = dataView(memory0).getInt32(ret + 8, true);
var result6 = utf8Decoder.decode(new Uint8Array(memory0.buffer, ptr6, len6));
variant7= {
var ptr7 = dataView(memory0).getInt32(ret + 4, true);
var len7 = dataView(memory0).getInt32(ret + 8, true);
var result7 = utf8Decoder.decode(new Uint8Array(memory0.buffer, ptr7, len7));
variant8= {
tag: 'err',
val: result6
val: result7
};

@@ -265,7 +392,7 @@ break;

}
postReturn0(ret);
if (variant7.tag === 'err') {
throw new ComponentError(variant7.val);
postReturn2(ret);
if (variant8.tag === 'err') {
throw new ComponentError(variant8.val);
}
return variant7.val;
return variant8.val;
}

@@ -272,0 +399,0 @@

import type { ArcjetLogger, ArcjetRequestDetails } from "@arcjet/protocol";
import type { EmailValidationConfig, BotDetectionResult, BotType } from "./wasm/arcjet_analyze_js_req.component.js";
import type { EmailValidationConfig, BotDetectionResult, BotType, EmailValidationResult } from "./wasm/arcjet_analyze_js_req.component.js";
interface AnalyzeContext {

@@ -29,3 +29,3 @@ log: ArcjetLogger;

export declare function generateFingerprint(context: AnalyzeContext, request: Partial<ArcjetRequestDetails>): Promise<string>;
export declare function isValidEmail(context: AnalyzeContext, candidate: string, options?: EmailValidationConfig): Promise<boolean>;
export declare function isValidEmail(context: AnalyzeContext, candidate: string, options?: EmailValidationConfig): Promise<EmailValidationResult>;
export declare function detectBot(context: AnalyzeContext, headers: string, patterns_add: string, patterns_remove: string): Promise<BotDetectionResult>;

@@ -6,2 +6,9 @@ import { instantiate } from './wasm/arcjet_analyze_js_req.component.js';

const FREE_EMAIL_PROVIDERS = [
"gmail.com",
"yahoo.com",
"hotmail.com",
"aol.com",
"hotmail.co.uk",
];
async function moduleFromPath(path) {

@@ -30,2 +37,19 @@ if (path === "arcjet_analyze_js_req.component.core.wasm") {

},
"arcjet:js-req/email-validator-overrides": {
isFreeEmail(domain) {
if (FREE_EMAIL_PROVIDERS.includes(domain)) {
return "yes";
}
return "unknown";
},
isDisposableEmail() {
return "unknown";
},
hasMxRecords() {
return "unknown";
},
hasGravatar() {
return "unknown";
},
},
};

@@ -55,8 +79,17 @@ try {

const analyze = await init(context);
const optionsOrDefault = {
requireTopLevelDomain: true,
allowDomainLiteral: false,
blockedEmails: [],
...options,
};
if (typeof analyze !== "undefined") {
return analyze.isValidEmail(candidate, options);
return analyze.isValidEmail(candidate, optionsOrDefault);
}
else {
// TODO: Fallback to JS if we don't have WASM?
return true;
// Skip the local evaluation of the rule if WASM is not available
return {
validity: "valid",
blocked: [],
};
}

@@ -63,0 +96,0 @@ }

@@ -9,2 +9,3 @@ import type { ArcjetLogger, ArcjetRequestDetails } from "@arcjet/protocol";

BotType,
EmailValidationResult,
} from "./wasm/arcjet_analyze_js_req.component.js";

@@ -16,2 +17,10 @@

const FREE_EMAIL_PROVIDERS = [
"gmail.com",
"yahoo.com",
"hotmail.com",
"aol.com",
"hotmail.co.uk",
];
interface AnalyzeContext {

@@ -48,2 +57,19 @@ log: ArcjetLogger;

},
"arcjet:js-req/email-validator-overrides": {
isFreeEmail(domain) {
if (FREE_EMAIL_PROVIDERS.includes(domain)) {
return "yes";
}
return "unknown";
},
isDisposableEmail() {
return "unknown";
},
hasMxRecords() {
return "unknown";
},
hasGravatar() {
return "unknown";
},
},
};

@@ -103,10 +129,19 @@

options?: EmailValidationConfig,
) {
): Promise<EmailValidationResult> {
const analyze = await init(context);
const optionsOrDefault = {
requireTopLevelDomain: true,
allowDomainLiteral: false,
blockedEmails: [],
...options,
};
if (typeof analyze !== "undefined") {
return analyze.isValidEmail(candidate, options);
return analyze.isValidEmail(candidate, optionsOrDefault);
} else {
// TODO: Fallback to JS if we don't have WASM?
return true;
// Skip the local evaluation of the rule if WASM is not available
return {
validity: "valid",
blocked: [],
};
}

@@ -113,0 +148,0 @@ }

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc