@arcjet/redact-wasm
Version:
Arcjet sensitive information redaction detection engine
335 lines (321 loc) • 11 kB
JavaScript
function instantiate(getCoreModule, imports, instantiateCore = WebAssembly.instantiate) {
let dv = new DataView(new ArrayBuffer());
const dataView = mem => dv.buffer === mem.buffer ? dv : dv = new DataView(mem.buffer);
function toUint32(val) {
return val >>> 0;
}
const utf8Decoder = new TextDecoder();
const utf8Encoder = new TextEncoder();
let utf8EncodedLen = 0;
function utf8Encode(s, realloc, memory) {
if (typeof s !== 'string') throw new TypeError('expected a string');
if (s.length === 0) {
utf8EncodedLen = 0;
return 1;
}
let buf = utf8Encoder.encode(s);
let ptr = realloc(0, 0, 1, buf.length);
new Uint8Array(memory.buffer).set(buf, ptr);
utf8EncodedLen = buf.length;
return ptr;
}
const module0 = getCoreModule('arcjet_analyze_bindings_redact.component.core.wasm');
const module1 = getCoreModule('arcjet_analyze_bindings_redact.component.core2.wasm');
const module2 = getCoreModule('arcjet_analyze_bindings_redact.component.core3.wasm');
const { detectSensitiveInfo, redactSensitiveInfo } = imports['arcjet:redact/custom-redact'];
let gen = (function* init () {
let exports0;
let exports1;
let memory0;
let realloc0;
function trampoline0(arg0, arg1, arg2) {
var len1 = arg1;
var base1 = arg0;
var result1 = [];
for (let i = 0; i < len1; i++) {
const base = base1 + i * 8;
var ptr0 = dataView(memory0).getInt32(base + 0, true);
var len0 = dataView(memory0).getInt32(base + 4, true);
var result0 = utf8Decoder.decode(new Uint8Array(memory0.buffer, ptr0, len0));
result1.push(result0);
}
const ret = detectSensitiveInfo(result1);
var vec5 = ret;
var len5 = vec5.length;
var result5 = realloc0(0, 0, 4, len5 * 16);
for (let i = 0; i < vec5.length; i++) {
const e = vec5[i];
const base = result5 + i * 16;var variant4 = e;
if (variant4 === null || variant4=== undefined) {
dataView(memory0).setInt8(base + 0, 0, true);
} else {
const e = variant4;
dataView(memory0).setInt8(base + 0, 1, true);
var variant3 = e;
switch (variant3.tag) {
case 'email': {
dataView(memory0).setInt8(base + 4, 0, true);
break;
}
case 'phone-number': {
dataView(memory0).setInt8(base + 4, 1, true);
break;
}
case 'ip-address': {
dataView(memory0).setInt8(base + 4, 2, true);
break;
}
case 'credit-card-number': {
dataView(memory0).setInt8(base + 4, 3, true);
break;
}
case 'custom': {
const e = variant3.val;
dataView(memory0).setInt8(base + 4, 4, true);
var ptr2 = utf8Encode(e, realloc0, memory0);
var len2 = utf8EncodedLen;
dataView(memory0).setInt32(base + 12, len2, true);
dataView(memory0).setInt32(base + 8, ptr2, true);
break;
}
default: {
throw new TypeError(`invalid variant tag value \`${JSON.stringify(variant3.tag)}\` (received \`${variant3}\`) specified for \`SensitiveInfoEntity\``);
}
}
}
}
dataView(memory0).setInt32(arg2 + 4, len5, true);
dataView(memory0).setInt32(arg2 + 0, result5, true);
}
function trampoline1(arg0, arg1, arg2, arg3, arg4, arg5) {
let variant1;
switch (arg0) {
case 0: {
variant1= {
tag: 'email',
};
break;
}
case 1: {
variant1= {
tag: 'phone-number',
};
break;
}
case 2: {
variant1= {
tag: 'ip-address',
};
break;
}
case 3: {
variant1= {
tag: 'credit-card-number',
};
break;
}
case 4: {
var ptr0 = arg1;
var len0 = arg2;
var result0 = utf8Decoder.decode(new Uint8Array(memory0.buffer, ptr0, len0));
variant1= {
tag: 'custom',
val: result0
};
break;
}
default: {
throw new TypeError('invalid variant discriminant for SensitiveInfoEntity');
}
}
var ptr2 = arg3;
var len2 = arg4;
var result2 = utf8Decoder.decode(new Uint8Array(memory0.buffer, ptr2, len2));
const ret = redactSensitiveInfo(variant1, result2);
var variant4 = ret;
if (variant4 === null || variant4=== undefined) {
dataView(memory0).setInt8(arg5 + 0, 0, true);
} else {
const e = variant4;
dataView(memory0).setInt8(arg5 + 0, 1, true);
var ptr3 = utf8Encode(e, realloc0, memory0);
var len3 = utf8EncodedLen;
dataView(memory0).setInt32(arg5 + 8, len3, true);
dataView(memory0).setInt32(arg5 + 4, ptr3, true);
}
}
let exports2;
let postReturn0;
Promise.all([module0, module1, module2]).catch(() => {});
({ exports: exports0 } = yield instantiateCore(yield module1));
({ exports: exports1 } = yield instantiateCore(yield module0, {
'arcjet:redact/custom-redact': {
'detect-sensitive-info': exports0['0'],
'redact-sensitive-info': exports0['1'],
},
}));
memory0 = exports1.memory;
realloc0 = exports1.cabi_realloc;
({ exports: exports2 } = yield instantiateCore(yield module2, {
'': {
$imports: exports0.$imports,
'0': trampoline0,
'1': trampoline1,
},
}));
postReturn0 = exports1.cabi_post_redact;
function redact(arg0, arg1) {
var ptr0 = utf8Encode(arg0, realloc0, memory0);
var len0 = utf8EncodedLen;
var {entities: v1_0, contextWindowSize: v1_1, skipCustomDetect: v1_2, skipCustomRedact: v1_3 } = arg1;
var variant5 = v1_0;
let variant5_0;
let variant5_1;
let variant5_2;
if (variant5 === null || variant5=== undefined) {
variant5_0 = 0;
variant5_1 = 0;
variant5_2 = 0;
} else {
const e = variant5;
var vec4 = e;
var len4 = vec4.length;
var result4 = realloc0(0, 0, 4, len4 * 12);
for (let i = 0; i < vec4.length; i++) {
const e = vec4[i];
const base = result4 + i * 12;var variant3 = e;
switch (variant3.tag) {
case 'email': {
dataView(memory0).setInt8(base + 0, 0, true);
break;
}
case 'phone-number': {
dataView(memory0).setInt8(base + 0, 1, true);
break;
}
case 'ip-address': {
dataView(memory0).setInt8(base + 0, 2, true);
break;
}
case 'credit-card-number': {
dataView(memory0).setInt8(base + 0, 3, true);
break;
}
case 'custom': {
const e = variant3.val;
dataView(memory0).setInt8(base + 0, 4, true);
var ptr2 = utf8Encode(e, realloc0, memory0);
var len2 = utf8EncodedLen;
dataView(memory0).setInt32(base + 8, len2, true);
dataView(memory0).setInt32(base + 4, ptr2, true);
break;
}
default: {
throw new TypeError(`invalid variant tag value \`${JSON.stringify(variant3.tag)}\` (received \`${variant3}\`) specified for \`SensitiveInfoEntity\``);
}
}
}
variant5_0 = 1;
variant5_1 = result4;
variant5_2 = len4;
}
var variant6 = v1_1;
let variant6_0;
let variant6_1;
if (variant6 === null || variant6=== undefined) {
variant6_0 = 0;
variant6_1 = 0;
} else {
const e = variant6;
variant6_0 = 1;
variant6_1 = toUint32(e);
}
const ret = exports1.redact(ptr0, len0, variant5_0, variant5_1, variant5_2, variant6_0, variant6_1, v1_2 ? 1 : 0, v1_3 ? 1 : 0);
var len11 = dataView(memory0).getInt32(ret + 4, true);
var base11 = dataView(memory0).getInt32(ret + 0, true);
var result11 = [];
for (let i = 0; i < len11; i++) {
const base = base11 + i * 36;
var ptr7 = dataView(memory0).getInt32(base + 0, true);
var len7 = dataView(memory0).getInt32(base + 4, true);
var result7 = utf8Decoder.decode(new Uint8Array(memory0.buffer, ptr7, len7));
var ptr8 = dataView(memory0).getInt32(base + 8, true);
var len8 = dataView(memory0).getInt32(base + 12, true);
var result8 = utf8Decoder.decode(new Uint8Array(memory0.buffer, ptr8, len8));
let variant10;
switch (dataView(memory0).getUint8(base + 24, true)) {
case 0: {
variant10= {
tag: 'email',
};
break;
}
case 1: {
variant10= {
tag: 'phone-number',
};
break;
}
case 2: {
variant10= {
tag: 'ip-address',
};
break;
}
case 3: {
variant10= {
tag: 'credit-card-number',
};
break;
}
case 4: {
var ptr9 = dataView(memory0).getInt32(base + 28, true);
var len9 = dataView(memory0).getInt32(base + 32, true);
var result9 = utf8Decoder.decode(new Uint8Array(memory0.buffer, ptr9, len9));
variant10= {
tag: 'custom',
val: result9
};
break;
}
default: {
throw new TypeError('invalid variant discriminant for SensitiveInfoEntity');
}
}
result11.push({
original: result7,
redacted: result8,
start: dataView(memory0).getInt32(base + 16, true) >>> 0,
end: dataView(memory0).getInt32(base + 20, true) >>> 0,
identifiedType: variant10,
});
}
const retVal = result11;
postReturn0(ret);
return retVal;
}
return { redact, };
})();
let promise, resolve, reject;
function runNext (value) {
try {
let done;
do {
({ value, done } = gen.next(value));
} while (!(value instanceof Promise) && !done);
if (done) {
if (resolve) resolve(value);
else return value;
}
if (!promise) promise = new Promise((_resolve, _reject) => (resolve = _resolve, reject = _reject));
value.then(nextVal => done ? resolve() : runNext(nextVal), reject);
}
catch (e) {
if (reject) reject(e);
else throw e;
}
}
const maybeSyncReturn = runNext(null);
return promise || maybeSyncReturn;
}
export { instantiate };