santoid-sdk 9.0.0 → 9.2.0
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/CHANGELOG.md +5 -0
- package/README.md +1 -1
- package/browser/liveness-capture.js +1 -1
- package/client/liveness-capture/index.d.ts +1 -2
- package/client/liveness-capture/index.js +1 -1
- package/client/liveness-capture/keepFreshnessCanvasVisible.d.ts +8 -0
- package/client/liveness-capture/keepFreshnessCanvasVisible.js +33 -0
- package/client/liveness-capture/types.d.ts +2 -0
- package/client/liveness-capture/types.js +2 -0
- package/package.json +9 -8
- package/client/liveness-capture/LivenessCapture.d.ts +0 -13
- package/client/liveness-capture/LivenessCapture.js +0 -23
- package/client/liveness-capture/displayText.d.ts +0 -54
- package/client/liveness-capture/displayText.js +0 -57
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* O canvas do desafio de luz nasce com o atributo `hidden` e e' exibido com
|
|
3
|
+
* `style.display = 'block'`. CSS de reset que forca `[hidden] { display: none
|
|
4
|
+
* !important }` - o do Tailwind v4, por exemplo - vence o estilo inline, a tela
|
|
5
|
+
* nao pisca e a verificacao perde o desafio de luz. Aqui o atributo acompanha
|
|
6
|
+
* o display que a captura pediu, entao nenhum CSS da pagina consegue esconde-lo.
|
|
7
|
+
*/
|
|
8
|
+
export declare function keepFreshnessCanvasVisible(element: HTMLElement): () => void;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.keepFreshnessCanvasVisible = void 0;
|
|
4
|
+
const FRESHNESS_CANVAS_CLASS = 'amplify-liveness-freshness-canvas';
|
|
5
|
+
function syncHidden(canvas) {
|
|
6
|
+
if (canvas.style.display === 'block') {
|
|
7
|
+
canvas.removeAttribute('hidden');
|
|
8
|
+
}
|
|
9
|
+
else if (canvas.style.display === 'none') {
|
|
10
|
+
canvas.setAttribute('hidden', '');
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* O canvas do desafio de luz nasce com o atributo `hidden` e e' exibido com
|
|
15
|
+
* `style.display = 'block'`. CSS de reset que forca `[hidden] { display: none
|
|
16
|
+
* !important }` - o do Tailwind v4, por exemplo - vence o estilo inline, a tela
|
|
17
|
+
* nao pisca e a verificacao perde o desafio de luz. Aqui o atributo acompanha
|
|
18
|
+
* o display que a captura pediu, entao nenhum CSS da pagina consegue esconde-lo.
|
|
19
|
+
*/
|
|
20
|
+
function keepFreshnessCanvasVisible(element) {
|
|
21
|
+
const observer = new MutationObserver((mutations) => {
|
|
22
|
+
var _a;
|
|
23
|
+
for (const mutation of mutations) {
|
|
24
|
+
const target = mutation.target;
|
|
25
|
+
if (mutation.type === 'attributes' && ((_a = target.classList) === null || _a === void 0 ? void 0 : _a.contains(FRESHNESS_CANVAS_CLASS))) {
|
|
26
|
+
syncHidden(target);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
observer.observe(element, { subtree: true, attributes: true, attributeFilter: ['style'] });
|
|
31
|
+
return () => { observer.disconnect(); };
|
|
32
|
+
}
|
|
33
|
+
exports.keepFreshnessCanvasVisible = keepFreshnessCanvasVisible;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "santoid-sdk",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.2.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "client/index.js",
|
|
6
6
|
"types": "client/index.d.ts",
|
|
@@ -9,19 +9,23 @@
|
|
|
9
9
|
"build:clear": "rm -rf ./browser ./api ./client ./server ./utils ./index.js ./index.d.ts ./dist",
|
|
10
10
|
"build:webpack": "webpack --mode=production",
|
|
11
11
|
"build:typescript": "npm run build:clear && tsc -p tsconfig.prod.json",
|
|
12
|
-
"build": "npm run build:typescript && npm run build:webpack && npm run expose:cmd",
|
|
12
|
+
"build": "npm run build:typescript && npm run build:webpack && npm run build:prune && npm run expose:cmd",
|
|
13
13
|
"test": "jest --coverage false --runInBand",
|
|
14
|
-
"test:coverage": "jest --coverage --runInBand"
|
|
14
|
+
"test:coverage": "jest --coverage --runInBand",
|
|
15
|
+
"build:prune": "rm -f dist/client/liveness-capture/LivenessCapture.* dist/client/liveness-capture/displayText.*"
|
|
15
16
|
},
|
|
16
17
|
"keywords": [],
|
|
17
18
|
"author": "SantoDigital",
|
|
18
19
|
"license": "Apache-2.0",
|
|
19
20
|
"devDependencies": {
|
|
21
|
+
"@aws-amplify/ui-react": "^6.15.5",
|
|
22
|
+
"@aws-amplify/ui-react-liveness": "^3.6.8",
|
|
20
23
|
"@types/jest": "^29.5.5",
|
|
21
24
|
"@types/node": "^20.6.2",
|
|
22
25
|
"@types/react": "^19.1.16",
|
|
23
26
|
"@types/react-dom": "^19.1.9",
|
|
24
27
|
"@typescript-eslint/eslint-plugin": "^6.4.0",
|
|
28
|
+
"aws-amplify": "^6.20.0",
|
|
25
29
|
"clean-webpack-plugin": "^4.0.0",
|
|
26
30
|
"css-loader": "^7.1.5",
|
|
27
31
|
"eslint": "^8.0.1",
|
|
@@ -32,6 +36,8 @@
|
|
|
32
36
|
"jest": "^29.7.0",
|
|
33
37
|
"jest-canvas-mock": "^2.5.2",
|
|
34
38
|
"jest-environment-jsdom": "^29.7.0",
|
|
39
|
+
"react": "^19.1.1",
|
|
40
|
+
"react-dom": "^19.1.1",
|
|
35
41
|
"style-loader": "^4.0.0",
|
|
36
42
|
"ts-jest": "^29.1.1",
|
|
37
43
|
"ts-loader": "^9.4.4",
|
|
@@ -42,13 +48,8 @@
|
|
|
42
48
|
"webpack-node-externals": "^3.0.0"
|
|
43
49
|
},
|
|
44
50
|
"dependencies": {
|
|
45
|
-
"@aws-amplify/ui-react": "^6.15.5",
|
|
46
|
-
"@aws-amplify/ui-react-liveness": "^3.6.8",
|
|
47
|
-
"aws-amplify": "^6.20.0",
|
|
48
51
|
"axios": "^1.5.1",
|
|
49
52
|
"form-data": "^4.0.0",
|
|
50
|
-
"react": "^19.1.1",
|
|
51
|
-
"react-dom": "^19.1.1",
|
|
52
53
|
"uuid": "^3.3.3"
|
|
53
54
|
}
|
|
54
55
|
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
export type TLivenessCaptureLanguage = 'pt' | 'en';
|
|
3
|
-
export type TLivenessCaptureColorMode = 'light' | 'dark';
|
|
4
|
-
export interface ILivenessCaptureProps {
|
|
5
|
-
sessionId: string;
|
|
6
|
-
region: string;
|
|
7
|
-
language: TLivenessCaptureLanguage;
|
|
8
|
-
colorMode: TLivenessCaptureColorMode;
|
|
9
|
-
onComplete: () => void;
|
|
10
|
-
onError: (message: string, details: unknown) => void;
|
|
11
|
-
onCancel: () => void;
|
|
12
|
-
}
|
|
13
|
-
export declare function LivenessCapture({ sessionId, region, language, colorMode, onComplete, onError, onCancel, }: ILivenessCaptureProps): import("react").JSX.Element;
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LivenessCapture = void 0;
|
|
4
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
-
const ui_react_liveness_1 = require("@aws-amplify/ui-react-liveness");
|
|
6
|
-
const ui_react_1 = require("@aws-amplify/ui-react");
|
|
7
|
-
const displayText_1 = require("./displayText");
|
|
8
|
-
const captureTheme = (0, ui_react_1.createTheme)({
|
|
9
|
-
name: 'santoid-liveness-capture',
|
|
10
|
-
overrides: [ui_react_1.defaultDarkModeOverride],
|
|
11
|
-
});
|
|
12
|
-
// Em ingles valem os textos padrao do componente.
|
|
13
|
-
const displayTextByLanguage = {
|
|
14
|
-
pt: displayText_1.portugueseDisplayText,
|
|
15
|
-
en: undefined,
|
|
16
|
-
};
|
|
17
|
-
function LivenessCapture({ sessionId, region, language, colorMode, onComplete, onError, onCancel, }) {
|
|
18
|
-
return ((0, jsx_runtime_1.jsx)(ui_react_1.ThemeProvider, { theme: captureTheme, colorMode: colorMode, children: (0, jsx_runtime_1.jsx)(ui_react_liveness_1.FaceLivenessDetector, { sessionId: sessionId, region: region, displayText: displayTextByLanguage[language], onAnalysisComplete: async () => { onComplete(); }, onUserCancel: onCancel, onError: (captureError) => {
|
|
19
|
-
var _a, _b;
|
|
20
|
-
onError(`${captureError.state}: ${(_b = (_a = captureError.error) === null || _a === void 0 ? void 0 : _a.message) !== null && _b !== void 0 ? _b : 'capture failed'}`, captureError);
|
|
21
|
-
} }) }));
|
|
22
|
-
}
|
|
23
|
-
exports.LivenessCapture = LivenessCapture;
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
export declare const portugueseDisplayText: {
|
|
2
|
-
readonly cameraMinSpecificationsHeadingText: "Câmera não atende aos requisitos mínimos";
|
|
3
|
-
readonly cameraMinSpecificationsMessageText: "A câmera precisa suportar ao menos 320x240 e 15 quadros por segundo.";
|
|
4
|
-
readonly cameraNotFoundHeadingText: "Câmera não encontrada";
|
|
5
|
-
readonly cameraNotFoundMessageText: "Verifique se há uma câmera conectada e se o navegador tem permissão de acesso.";
|
|
6
|
-
readonly retryCameraPermissionsText: "Tentar novamente";
|
|
7
|
-
readonly waitingCameraPermissionText: "Aguardando permissão de acesso à câmera...";
|
|
8
|
-
readonly a11yVideoLabelText: "Vídeo da câmera para verificação de vivacidade";
|
|
9
|
-
readonly photosensitivityWarningHeadingText: "Aviso de fotossensibilidade";
|
|
10
|
-
readonly photosensitivityWarningBodyText: "Esta verificação exibe luzes coloridas. Tenha cuidado caso você seja fotossensível.";
|
|
11
|
-
readonly photosensitivityWarningInfoText: "Uma pequena porcentagem de pessoas pode ter convulsões ao ser exposta a luzes coloridas. Tenha cuidado se você ou alguém da sua família tiver epilepsia.";
|
|
12
|
-
readonly photosensitivityWarningLabelText: "Mais informações";
|
|
13
|
-
readonly goodFitCaptionText: "Enquadramento correto";
|
|
14
|
-
readonly goodFitAltText: "Rosto totalmente dentro do oval.";
|
|
15
|
-
readonly tooFarCaptionText: "Muito distante";
|
|
16
|
-
readonly tooFarAltText: "Rosto pequeno e distante do oval.";
|
|
17
|
-
readonly startScreenBeginCheckText: "Iniciar verificação";
|
|
18
|
-
readonly hintMoveFaceFrontOfCameraText: "Posicione o rosto em frente à câmera";
|
|
19
|
-
readonly hintTooManyFacesText: "Mantenha apenas um rosto em frente à câmera";
|
|
20
|
-
readonly hintFaceDetectedText: "Rosto detectado";
|
|
21
|
-
readonly hintCanNotIdentifyText: "Rosto não identificado";
|
|
22
|
-
readonly hintTooCloseText: "Afaste-se um pouco";
|
|
23
|
-
readonly hintTooFarText: "Aproxime-se";
|
|
24
|
-
readonly hintHoldFaceForFreshnessText: "Permaneça parado";
|
|
25
|
-
readonly hintConnectingText: "Conectando...";
|
|
26
|
-
readonly hintVerifyingText: "Verificando...";
|
|
27
|
-
readonly hintCheckCompleteText: "Verificação concluída";
|
|
28
|
-
readonly hintIlluminationTooBrightText: "Vá para um ambiente com menos luz";
|
|
29
|
-
readonly hintIlluminationTooDarkText: "Vá para um ambiente mais iluminado";
|
|
30
|
-
readonly hintIlluminationNormalText: "Iluminação adequada";
|
|
31
|
-
readonly hintCenterFaceText: "Centralize seu rosto";
|
|
32
|
-
readonly hintCenterFaceInstructionText: "Instrução: centralize o rosto no oval durante a verificação.";
|
|
33
|
-
readonly hintFaceOffCenterText: "Rosto fora do oval. Centralize-o.";
|
|
34
|
-
readonly hintMatchIndicatorText: "de enquadramento concluído";
|
|
35
|
-
readonly recordingIndicatorText: "Gravando";
|
|
36
|
-
readonly cancelLivenessCheckText: "Cancelar verificação";
|
|
37
|
-
readonly errorLabelText: "Erro";
|
|
38
|
-
readonly connectionTimeoutHeaderText: "Tempo de conexão esgotado";
|
|
39
|
-
readonly connectionTimeoutMessageText: "A conexão está lenta demais para concluir a verificação. Tente novamente.";
|
|
40
|
-
readonly timeoutHeaderText: "Tempo esgotado";
|
|
41
|
-
readonly timeoutMessageText: "O rosto não preencheu o oval a tempo. Tente novamente e mantenha o rosto dentro do oval.";
|
|
42
|
-
readonly faceDistanceHeaderText: "Falha na verificação";
|
|
43
|
-
readonly faceDistanceMessageText: "Evite aproximar-se demais durante a contagem.";
|
|
44
|
-
readonly multipleFacesHeaderText: "Falha na verificação";
|
|
45
|
-
readonly multipleFacesMessageText: "Mais de um rosto detectado. Certifique-se de que apenas um rosto esteja visível.";
|
|
46
|
-
readonly clientHeaderText: "Erro no cliente";
|
|
47
|
-
readonly clientMessageText: "A verificação falhou devido a um problema no dispositivo.";
|
|
48
|
-
readonly serverHeaderText: "Erro no servidor";
|
|
49
|
-
readonly serverMessageText: "Não foi possível concluir a verificação por um erro no servidor.";
|
|
50
|
-
readonly landscapeHeaderText: "Orientação não suportada";
|
|
51
|
-
readonly landscapeMessageText: "Gire o dispositivo para o modo retrato.";
|
|
52
|
-
readonly portraitMessageText: "Use o dispositivo em modo retrato durante a verificação.";
|
|
53
|
-
readonly tryAgainText: "Tentar novamente";
|
|
54
|
-
};
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.portugueseDisplayText = void 0;
|
|
4
|
-
exports.portugueseDisplayText = {
|
|
5
|
-
cameraMinSpecificationsHeadingText: 'Câmera não atende aos requisitos mínimos',
|
|
6
|
-
cameraMinSpecificationsMessageText: 'A câmera precisa suportar ao menos 320x240 e 15 quadros por segundo.',
|
|
7
|
-
cameraNotFoundHeadingText: 'Câmera não encontrada',
|
|
8
|
-
cameraNotFoundMessageText: 'Verifique se há uma câmera conectada e se o navegador tem permissão de acesso.',
|
|
9
|
-
retryCameraPermissionsText: 'Tentar novamente',
|
|
10
|
-
waitingCameraPermissionText: 'Aguardando permissão de acesso à câmera...',
|
|
11
|
-
a11yVideoLabelText: 'Vídeo da câmera para verificação de vivacidade',
|
|
12
|
-
photosensitivityWarningHeadingText: 'Aviso de fotossensibilidade',
|
|
13
|
-
photosensitivityWarningBodyText: 'Esta verificação exibe luzes coloridas. Tenha cuidado caso você seja fotossensível.',
|
|
14
|
-
photosensitivityWarningInfoText: 'Uma pequena porcentagem de pessoas pode ter convulsões ao ser exposta a luzes coloridas. Tenha cuidado se você ou alguém da sua família tiver epilepsia.',
|
|
15
|
-
photosensitivityWarningLabelText: 'Mais informações',
|
|
16
|
-
goodFitCaptionText: 'Enquadramento correto',
|
|
17
|
-
goodFitAltText: 'Rosto totalmente dentro do oval.',
|
|
18
|
-
tooFarCaptionText: 'Muito distante',
|
|
19
|
-
tooFarAltText: 'Rosto pequeno e distante do oval.',
|
|
20
|
-
startScreenBeginCheckText: 'Iniciar verificação',
|
|
21
|
-
hintMoveFaceFrontOfCameraText: 'Posicione o rosto em frente à câmera',
|
|
22
|
-
hintTooManyFacesText: 'Mantenha apenas um rosto em frente à câmera',
|
|
23
|
-
hintFaceDetectedText: 'Rosto detectado',
|
|
24
|
-
hintCanNotIdentifyText: 'Rosto não identificado',
|
|
25
|
-
hintTooCloseText: 'Afaste-se um pouco',
|
|
26
|
-
hintTooFarText: 'Aproxime-se',
|
|
27
|
-
hintHoldFaceForFreshnessText: 'Permaneça parado',
|
|
28
|
-
hintConnectingText: 'Conectando...',
|
|
29
|
-
hintVerifyingText: 'Verificando...',
|
|
30
|
-
hintCheckCompleteText: 'Verificação concluída',
|
|
31
|
-
hintIlluminationTooBrightText: 'Vá para um ambiente com menos luz',
|
|
32
|
-
hintIlluminationTooDarkText: 'Vá para um ambiente mais iluminado',
|
|
33
|
-
hintIlluminationNormalText: 'Iluminação adequada',
|
|
34
|
-
hintCenterFaceText: 'Centralize seu rosto',
|
|
35
|
-
hintCenterFaceInstructionText: 'Instrução: centralize o rosto no oval durante a verificação.',
|
|
36
|
-
hintFaceOffCenterText: 'Rosto fora do oval. Centralize-o.',
|
|
37
|
-
hintMatchIndicatorText: 'de enquadramento concluído',
|
|
38
|
-
recordingIndicatorText: 'Gravando',
|
|
39
|
-
cancelLivenessCheckText: 'Cancelar verificação',
|
|
40
|
-
errorLabelText: 'Erro',
|
|
41
|
-
connectionTimeoutHeaderText: 'Tempo de conexão esgotado',
|
|
42
|
-
connectionTimeoutMessageText: 'A conexão está lenta demais para concluir a verificação. Tente novamente.',
|
|
43
|
-
timeoutHeaderText: 'Tempo esgotado',
|
|
44
|
-
timeoutMessageText: 'O rosto não preencheu o oval a tempo. Tente novamente e mantenha o rosto dentro do oval.',
|
|
45
|
-
faceDistanceHeaderText: 'Falha na verificação',
|
|
46
|
-
faceDistanceMessageText: 'Evite aproximar-se demais durante a contagem.',
|
|
47
|
-
multipleFacesHeaderText: 'Falha na verificação',
|
|
48
|
-
multipleFacesMessageText: 'Mais de um rosto detectado. Certifique-se de que apenas um rosto esteja visível.',
|
|
49
|
-
clientHeaderText: 'Erro no cliente',
|
|
50
|
-
clientMessageText: 'A verificação falhou devido a um problema no dispositivo.',
|
|
51
|
-
serverHeaderText: 'Erro no servidor',
|
|
52
|
-
serverMessageText: 'Não foi possível concluir a verificação por um erro no servidor.',
|
|
53
|
-
landscapeHeaderText: 'Orientação não suportada',
|
|
54
|
-
landscapeMessageText: 'Gire o dispositivo para o modo retrato.',
|
|
55
|
-
portraitMessageText: 'Use o dispositivo em modo retrato durante a verificação.',
|
|
56
|
-
tryAgainText: 'Tentar novamente',
|
|
57
|
-
};
|