Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/DocScan/Constants.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ class Constants

public const ID_DOCUMENT_TEXT_DATA_EXTRACTION = 'ID_DOCUMENT_TEXT_DATA_EXTRACTION';
public const SUPPLEMENTARY_DOCUMENT_TEXT_DATA_EXTRACTION = 'SUPPLEMENTARY_DOCUMENT_TEXT_DATA_EXTRACTION';
public const VERIFY_SHARE_CODE_TASK = 'VERIFY_SHARE_CODE_TASK';

public const ID_DOCUMENT = 'ID_DOCUMENT';
public const SUPPLEMENTARY_DOCUMENT = 'SUPPLEMENTARY_DOCUMENT';
Expand Down
59 changes: 59 additions & 0 deletions src/DocScan/Session/Create/Filters/RequiredShareCode.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<?php

declare(strict_types=1);

namespace Yoti\DocScan\Session\Create\Filters;

use JsonSerializable;
use stdClass;
use Yoti\Util\Json;

class RequiredShareCode implements JsonSerializable
{
/**
* @var string|null
*/
private $issuer;

/**
* @var string|null
*/
private $scheme;

/**
* @param string|null $issuer
* @param string|null $scheme
*/
public function __construct(?string $issuer = null, ?string $scheme = null)
{
$this->issuer = $issuer;
$this->scheme = $scheme;
}

/**
* @return stdClass
*/
public function jsonSerialize(): stdClass
{
return (object) Json::withoutNullValues([
'issuer' => $this->issuer,
'scheme' => $this->scheme,
]);
}

/**
* @return string|null
*/
public function getIssuer(): ?string
{
return $this->issuer;
}

/**
* @return string|null
*/
public function getScheme(): ?string
{
return $this->scheme;
}
}
48 changes: 48 additions & 0 deletions src/DocScan/Session/Create/Filters/RequiredShareCodeBuilder.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?php

declare(strict_types=1);

namespace Yoti\DocScan\Session\Create\Filters;

class RequiredShareCodeBuilder
{
/**
* @var string|null
*/
private $issuer;

/**
* @var string|null
*/
private $scheme;

/**
* @param string $issuer
*
* @return $this
*/
public function withIssuer(string $issuer): self
{
$this->issuer = $issuer;
return $this;
}

/**
* @param string $scheme
*
* @return $this
*/
public function withScheme(string $scheme): self
{
$this->scheme = $scheme;
return $this;
}

/**
* @return RequiredShareCode
*/
public function build(): RequiredShareCode
{
return new RequiredShareCode($this->issuer, $this->scheme);
}
}
20 changes: 19 additions & 1 deletion src/DocScan/Session/Create/SessionSpecification.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
use stdClass;
use Yoti\DocScan\Session\Create\Check\RequestedCheck;
use Yoti\DocScan\Session\Create\Filters\RequiredDocument;
use Yoti\DocScan\Session\Create\Filters\RequiredShareCode;
use Yoti\DocScan\Session\Create\Task\RequestedTask;
use Yoti\Util\Json;

Expand Down Expand Up @@ -85,6 +86,11 @@ class SessionSpecification implements JsonSerializable
*/
private $importToken;

/**
* @var RequiredShareCode[]
*/
private $requiredShareCodes;

/**
* @param int|null $clientSessionTokenTtl
* @param string|null $sessionDeadline
Expand All @@ -101,6 +107,7 @@ class SessionSpecification implements JsonSerializable
* @param object|null $identityProfileRequirements
* @param bool|null $createIdentityProfilePreview
* @param ImportToken|null $importToken
* @param RequiredShareCode[] $requiredShareCodes
*/
public function __construct(
?int $clientSessionTokenTtl,
Expand All @@ -117,7 +124,8 @@ public function __construct(
?object $subject = null,
?object $identityProfileRequirements = null,
?bool $createIdentityProfilePreview = null,
?ImportToken $importToken = null
?ImportToken $importToken = null,
array $requiredShareCodes = []
) {
$this->clientSessionTokenTtl = $clientSessionTokenTtl;
$this->sessionDeadline = $sessionDeadline;
Expand All @@ -134,6 +142,7 @@ public function __construct(
$this->identityProfileRequirements = $identityProfileRequirements;
$this->createIdentityProfilePreview = $createIdentityProfilePreview;
$this->importToken = $importToken;
$this->requiredShareCodes = $requiredShareCodes;
}

/**
Expand All @@ -157,6 +166,7 @@ public function jsonSerialize(): stdClass
'identity_profile_requirements' => $this->getIdentityProfileRequirements(),
'create_identity_profile_preview' => $this->getCreateIdentityProfilePreview(),
'import_token' => $this->getImportToken(),
'required_share_codes' => $this->getRequiredShareCodes(),
]);
}

Expand Down Expand Up @@ -278,4 +288,12 @@ public function getImportToken(): ?ImportToken
{
return $this->importToken;
}

/**
* @return RequiredShareCode[]
*/
public function getRequiredShareCodes(): array
{
return $this->requiredShareCodes;
}
}
33 changes: 33 additions & 0 deletions src/DocScan/Session/Create/SessionSpecificationBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use DateTimeImmutable;
use Yoti\DocScan\Session\Create\Check\RequestedCheck;
use Yoti\DocScan\Session\Create\Filters\RequiredDocument;
use Yoti\DocScan\Session\Create\Filters\RequiredShareCode;
use Yoti\DocScan\Session\Create\Task\RequestedTask;

class SessionSpecificationBuilder
Expand Down Expand Up @@ -88,6 +89,11 @@ class SessionSpecificationBuilder
*/
private bool $createIdentityProfilePreview = false;

/**
* @var RequiredShareCode[]
*/
private $requiredShareCodes = [];

/**
* @param int $clientSessionTokenTtl
* @return $this
Expand Down Expand Up @@ -274,6 +280,32 @@ public function withImportToken($importToken): self
return $this;
}

/**
* Adds a RequiredShareCode to the list of share codes required from the client
*
* @param RequiredShareCode $requiredShareCode
*
* @return $this
*/
public function withRequiredShareCode(RequiredShareCode $requiredShareCode): self
{
$this->requiredShareCodes[] = $requiredShareCode;
return $this;
}

/**
* Sets the list of share codes required from the client
*
* @param RequiredShareCode[] $requiredShareCodes
*
* @return $this
*/
public function withRequiredShareCodes(array $requiredShareCodes): self
{
$this->requiredShareCodes = $requiredShareCodes;
return $this;
}

/**
* @return SessionSpecification
*/
Expand All @@ -295,6 +327,7 @@ public function build(): SessionSpecification
$this->identityProfileRequirements,
$this->createIdentityProfilePreview,
$this->importToken,
$this->requiredShareCodes,
);
}
}
30 changes: 30 additions & 0 deletions src/DocScan/Session/Retrieve/ResourceContainer.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@ class ResourceContainer
*/
private $faceCapture = [];

/**
* @var ShareCodeResourceResponse[]
*/
private $shareCodes = [];

/**
* ResourceContainer constructor.
* @param array<string, mixed> $resources
Expand All @@ -47,6 +52,10 @@ public function __construct(array $resources)
if (isset($resources['face_capture'])) {
$this->faceCapture = $this->parseFaceCapture($resources['face_capture']);
}

if (isset($resources['share_codes'])) {
$this->shareCodes = $this->parseShareCodes($resources['share_codes']);
}
}

/**
Expand Down Expand Up @@ -113,6 +122,19 @@ private function parseFaceCapture(array $faceCaptures): array
return $parsedFaceCaptures;
}

/**
* @param array<array<string, mixed>> $shareCodes
* @return ShareCodeResourceResponse[]
*/
private function parseShareCodes(array $shareCodes): array
{
$parsedShareCodes = [];
foreach ($shareCodes as $shareCode) {
$parsedShareCodes[] = new ShareCodeResourceResponse($shareCode);
}
return $parsedShareCodes;
}

/**
* @return IdDocumentResourceResponse[]
*/
Expand Down Expand Up @@ -161,6 +183,14 @@ public function getFaceCapture(): array
return $this->faceCapture;
}

/**
* @return ShareCodeResourceResponse[]
*/
public function getShareCodes(): array
{
return $this->shareCodes;
}

/**
* @param string $class
* @return mixed[]
Expand Down
2 changes: 2 additions & 0 deletions src/DocScan/Session/Retrieve/ResourceResponse.php
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,8 @@ private function createTaskFromArray(array $task): TaskResponse
return new TextExtractionTaskResponse($task);
case Constants::SUPPLEMENTARY_DOCUMENT_TEXT_DATA_EXTRACTION:
return new SupplementaryDocTextExtractionTaskResponse($task);
case Constants::VERIFY_SHARE_CODE_TASK:
return new VerifyShareCodeTaskResponse($task);
default:
return new TaskResponse($task);
}
Expand Down
Loading