@truesift/express 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +94 -14
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -398,6 +398,28 @@ function requireSuccessTrue(record) {
|
|
|
398
398
|
);
|
|
399
399
|
}
|
|
400
400
|
}
|
|
401
|
+
function hasOwnResponseField(record, fieldName) {
|
|
402
|
+
return Object.prototype.hasOwnProperty.call(record, fieldName);
|
|
403
|
+
}
|
|
404
|
+
function getResponsePayloadRecord(record, primaryFieldName) {
|
|
405
|
+
if (hasOwnResponseField(record, primaryFieldName)) {
|
|
406
|
+
return record;
|
|
407
|
+
}
|
|
408
|
+
const data = record["data"];
|
|
409
|
+
if (data === void 0) {
|
|
410
|
+
return record;
|
|
411
|
+
}
|
|
412
|
+
if (!isRecord(data)) {
|
|
413
|
+
throw createResponseError(
|
|
414
|
+
'TrueSift API response field "data" must be an object when payload fields are nested.',
|
|
415
|
+
{
|
|
416
|
+
fieldName: "data",
|
|
417
|
+
expected: "object"
|
|
418
|
+
}
|
|
419
|
+
);
|
|
420
|
+
}
|
|
421
|
+
return data;
|
|
422
|
+
}
|
|
401
423
|
function requireStringField(record, fieldName) {
|
|
402
424
|
const value = record[fieldName];
|
|
403
425
|
if (typeof value !== "string" || value.trim().length === 0) {
|
|
@@ -427,6 +449,16 @@ function optionalStringField(record, fieldName) {
|
|
|
427
449
|
}
|
|
428
450
|
return value.trim();
|
|
429
451
|
}
|
|
452
|
+
function optionalStringFieldFromPayloadOrRoot(payloadRecord, rootRecord, fieldName) {
|
|
453
|
+
const payloadValue = optionalStringField(payloadRecord, fieldName);
|
|
454
|
+
if (payloadValue !== void 0) {
|
|
455
|
+
return payloadValue;
|
|
456
|
+
}
|
|
457
|
+
if (payloadRecord === rootRecord) {
|
|
458
|
+
return void 0;
|
|
459
|
+
}
|
|
460
|
+
return optionalStringField(rootRecord, fieldName);
|
|
461
|
+
}
|
|
430
462
|
function requireFiniteNumberField(record, fieldName) {
|
|
431
463
|
const value = record[fieldName];
|
|
432
464
|
if (typeof value !== "number" || !Number.isFinite(value)) {
|
|
@@ -488,6 +520,16 @@ function optionalVerificationModeField(record, fieldName) {
|
|
|
488
520
|
}
|
|
489
521
|
);
|
|
490
522
|
}
|
|
523
|
+
function optionalVerificationModeFieldFromPayloadOrRoot(payloadRecord, rootRecord, fieldName) {
|
|
524
|
+
const payloadValue = optionalVerificationModeField(payloadRecord, fieldName);
|
|
525
|
+
if (payloadValue !== void 0) {
|
|
526
|
+
return payloadValue;
|
|
527
|
+
}
|
|
528
|
+
if (payloadRecord === rootRecord) {
|
|
529
|
+
return void 0;
|
|
530
|
+
}
|
|
531
|
+
return optionalVerificationModeField(rootRecord, fieldName);
|
|
532
|
+
}
|
|
491
533
|
function optionalDecisionField(record, fieldName) {
|
|
492
534
|
const value = record[fieldName];
|
|
493
535
|
if (value === void 0) {
|
|
@@ -495,10 +537,32 @@ function optionalDecisionField(record, fieldName) {
|
|
|
495
537
|
}
|
|
496
538
|
return normalizeDecision(value);
|
|
497
539
|
}
|
|
498
|
-
function
|
|
499
|
-
const
|
|
500
|
-
|
|
501
|
-
|
|
540
|
+
function optionalDecisionFieldFromPayloadOrRoot(payloadRecord, rootRecord, fieldName) {
|
|
541
|
+
const payloadValue = optionalDecisionField(payloadRecord, fieldName);
|
|
542
|
+
if (payloadValue !== void 0) {
|
|
543
|
+
return payloadValue;
|
|
544
|
+
}
|
|
545
|
+
if (payloadRecord === rootRecord) {
|
|
546
|
+
return void 0;
|
|
547
|
+
}
|
|
548
|
+
return optionalDecisionField(rootRecord, fieldName);
|
|
549
|
+
}
|
|
550
|
+
function getDecisionMetadata(payloadRecord, rootRecord) {
|
|
551
|
+
const mode = optionalVerificationModeFieldFromPayloadOrRoot(
|
|
552
|
+
payloadRecord,
|
|
553
|
+
rootRecord,
|
|
554
|
+
"mode"
|
|
555
|
+
);
|
|
556
|
+
const calculatedDecision = optionalDecisionFieldFromPayloadOrRoot(
|
|
557
|
+
payloadRecord,
|
|
558
|
+
rootRecord,
|
|
559
|
+
"calculatedDecision"
|
|
560
|
+
);
|
|
561
|
+
const effectiveDecision = optionalDecisionFieldFromPayloadOrRoot(
|
|
562
|
+
payloadRecord,
|
|
563
|
+
rootRecord,
|
|
564
|
+
"effectiveDecision"
|
|
565
|
+
);
|
|
502
566
|
return {
|
|
503
567
|
...mode !== void 0 ? { mode } : {},
|
|
504
568
|
...calculatedDecision !== void 0 ? { calculatedDecision } : {},
|
|
@@ -508,12 +572,17 @@ function getDecisionMetadata(record) {
|
|
|
508
572
|
function validateCreateChallengeResponse(response) {
|
|
509
573
|
const record = requireRecord(response);
|
|
510
574
|
requireSuccessTrue(record);
|
|
511
|
-
const
|
|
575
|
+
const payloadRecord = getResponsePayloadRecord(record, "challengeId");
|
|
576
|
+
const requestId = optionalStringFieldFromPayloadOrRoot(
|
|
577
|
+
payloadRecord,
|
|
578
|
+
record,
|
|
579
|
+
"requestId"
|
|
580
|
+
);
|
|
512
581
|
return {
|
|
513
582
|
success: true,
|
|
514
|
-
challengeId: requireStringField(
|
|
515
|
-
challengeToken: requireStringField(
|
|
516
|
-
expiresAt: requireStringField(
|
|
583
|
+
challengeId: requireStringField(payloadRecord, "challengeId"),
|
|
584
|
+
challengeToken: requireStringField(payloadRecord, "challengeToken"),
|
|
585
|
+
expiresAt: requireStringField(payloadRecord, "expiresAt"),
|
|
517
586
|
...requestId !== void 0 ? { requestId } : {},
|
|
518
587
|
raw: record
|
|
519
588
|
};
|
|
@@ -521,16 +590,27 @@ function validateCreateChallengeResponse(response) {
|
|
|
521
590
|
function validateVerifyChallengeResponse(response) {
|
|
522
591
|
const record = requireRecord(response);
|
|
523
592
|
requireSuccessTrue(record);
|
|
524
|
-
const
|
|
593
|
+
const payloadRecord = getResponsePayloadRecord(record, "decision");
|
|
594
|
+
const decision = normalizeDecision(
|
|
595
|
+
requireStringField(payloadRecord, "decision")
|
|
596
|
+
);
|
|
525
597
|
const decisionFlags = createDecisionFlags(decision);
|
|
526
|
-
const metadata = getDecisionMetadata(record);
|
|
527
|
-
const challengeId =
|
|
528
|
-
|
|
598
|
+
const metadata = getDecisionMetadata(payloadRecord, record);
|
|
599
|
+
const challengeId = optionalStringFieldFromPayloadOrRoot(
|
|
600
|
+
payloadRecord,
|
|
601
|
+
record,
|
|
602
|
+
"challengeId"
|
|
603
|
+
);
|
|
604
|
+
const requestId = optionalStringFieldFromPayloadOrRoot(
|
|
605
|
+
payloadRecord,
|
|
606
|
+
record,
|
|
607
|
+
"requestId"
|
|
608
|
+
);
|
|
529
609
|
return {
|
|
530
610
|
success: true,
|
|
531
611
|
decision,
|
|
532
|
-
score: requireFiniteNumberField(
|
|
533
|
-
reasonCodes: optionalStringArrayField(
|
|
612
|
+
score: requireFiniteNumberField(payloadRecord, "score"),
|
|
613
|
+
reasonCodes: optionalStringArrayField(payloadRecord, "reasonCodes"),
|
|
534
614
|
...challengeId !== void 0 ? { challengeId } : {},
|
|
535
615
|
...requestId !== void 0 ? { requestId } : {},
|
|
536
616
|
...metadata,
|