@polyguard/sdk 1.5.0 → 1.5.1
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/LICENSE +200 -0
- package/README.md +328 -0
- package/package.json +7 -3
- package/coverage/base.css +0 -224
- package/coverage/block-navigation.js +0 -87
- package/coverage/clover.xml +0 -268
- package/coverage/coverage-final.json +0 -8
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +0 -131
- package/coverage/prettify.css +0 -1
- package/coverage/prettify.js +0 -2
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +0 -210
- package/coverage/src/PolyguardClient.js.html +0 -160
- package/coverage/src/PolyguardWebsocketClientImpl.js.html +0 -634
- package/coverage/src/__tests__/helpers/fixtures.js.html +0 -166
- package/coverage/src/__tests__/helpers/index.html +0 -131
- package/coverage/src/__tests__/helpers/mockWebSocket.js.html +0 -283
- package/coverage/src/index.html +0 -176
- package/coverage/src/messageHandler.js.html +0 -448
- package/coverage/src/ticketService.js.html +0 -157
- package/coverage/src/ui.js.html +0 -349
- package/dist/sdk.global.js +0 -11256
- package/scripts/regenerate-client.sh +0 -59
- package/src/PolyguardClient.js +0 -25
- package/src/PolyguardWebsocketClientImpl.js +0 -198
- package/src/__tests__/PolyguardClient.test.js +0 -65
- package/src/__tests__/PolyguardWebsocketClientImpl.test.js +0 -617
- package/src/__tests__/helpers/fixtures.js +0 -27
- package/src/__tests__/helpers/mockWebSocket.js +0 -66
- package/src/__tests__/server.test.js +0 -148
- package/src/__tests__/sidebar.test.js +0 -289
- package/src/browser.js +0 -9
- package/src/generated/.babelrc +0 -33
- package/src/generated/.openapi-generator/FILES +0 -63
- package/src/generated/.openapi-generator/VERSION +0 -1
- package/src/generated/.openapi-generator-ignore +0 -23
- package/src/generated/.travis.yml +0 -5
- package/src/generated/README.md +0 -211
- package/src/generated/docs/ApiControllersPslStirCallRequest.md +0 -18
- package/src/generated/docs/ApiModelsApiCallModelsCallRequest.md +0 -12
- package/src/generated/docs/AppId.md +0 -8
- package/src/generated/docs/AppleApi.md +0 -88
- package/src/generated/docs/AuthApi.md +0 -1464
- package/src/generated/docs/BlockingApi.md +0 -208
- package/src/generated/docs/CallsApi.md +0 -140
- package/src/generated/docs/Certainty.md +0 -8
- package/src/generated/docs/CreateLinkRequest.md +0 -12
- package/src/generated/docs/DefaultApi.md +0 -128
- package/src/generated/docs/HTTPValidationError.md +0 -9
- package/src/generated/docs/InviteRequestModel.md +0 -10
- package/src/generated/docs/JWTRequest.md +0 -11
- package/src/generated/docs/LinksApi.md +0 -162
- package/src/generated/docs/NumberVerification.md +0 -10
- package/src/generated/docs/SdkApi.md +0 -54
- package/src/generated/docs/SecureLinksApi.md +0 -614
- package/src/generated/docs/StartAttestationRequest.md +0 -9
- package/src/generated/docs/StartMeetingRequest.md +0 -9
- package/src/generated/docs/StirApi.md +0 -52
- package/src/generated/docs/TwilioApi.md +0 -138
- package/src/generated/docs/UsersApi.md +0 -362
- package/src/generated/docs/ValidationError.md +0 -11
- package/src/generated/docs/ValidationErrorLocInner.md +0 -8
- package/src/generated/docs/VeriffApi.md +0 -188
- package/src/generated/docs/VeriffSessionRequest.md +0 -10
- package/src/generated/docs/VerifyRequest.md +0 -10
- package/src/generated/docs/WellKnownApi.md +0 -128
- package/src/generated/docs/ZoomApi.md +0 -848
- package/src/generated/git_push.sh +0 -57
- package/src/generated/mocha.opts +0 -1
- package/src/generated/package.json +0 -46
- package/src/generated/src/ApiClient.js +0 -677
- package/src/generated/src/api/AppleApi.js +0 -109
- package/src/generated/src/api/AuthApi.js +0 -1512
- package/src/generated/src/api/BlockingApi.js +0 -217
- package/src/generated/src/api/CallsApi.js +0 -164
- package/src/generated/src/api/DefaultApi.js +0 -145
- package/src/generated/src/api/LinksApi.js +0 -195
- package/src/generated/src/api/SdkApi.js +0 -81
- package/src/generated/src/api/SecureLinksApi.js +0 -670
- package/src/generated/src/api/StirApi.js +0 -80
- package/src/generated/src/api/TwilioApi.js +0 -158
- package/src/generated/src/api/UsersApi.js +0 -375
- package/src/generated/src/api/VeriffApi.js +0 -209
- package/src/generated/src/api/WellKnownApi.js +0 -145
- package/src/generated/src/api/ZoomApi.js +0 -823
- package/src/generated/src/index.js +0 -244
- package/src/generated/src/model/ApiControllersPslStirCallRequest.js +0 -211
- package/src/generated/src/model/ApiModelsApiCallModelsCallRequest.js +0 -119
- package/src/generated/src/model/CreateLinkRequest.js +0 -131
- package/src/generated/src/model/HTTPValidationError.js +0 -94
- package/src/generated/src/model/InviteRequestModel.js +0 -109
- package/src/generated/src/model/JWTRequest.js +0 -113
- package/src/generated/src/model/NumberVerification.js +0 -107
- package/src/generated/src/model/StartAttestationRequest.js +0 -95
- package/src/generated/src/model/StartMeetingRequest.js +0 -95
- package/src/generated/src/model/ValidationError.js +0 -130
- package/src/generated/src/model/VeriffSessionRequest.js +0 -107
- package/src/generated/src/model/VerifyRequest.js +0 -109
- package/src/generated/test/api/AppleApi.spec.js +0 -73
- package/src/generated/test/api/AuthApi.spec.js +0 -353
- package/src/generated/test/api/BlockingApi.spec.js +0 -103
- package/src/generated/test/api/CallsApi.spec.js +0 -83
- package/src/generated/test/api/DefaultApi.spec.js +0 -73
- package/src/generated/test/api/LinksApi.spec.js +0 -83
- package/src/generated/test/api/SdkApi.spec.js +0 -63
- package/src/generated/test/api/SecureLinksApi.spec.js +0 -143
- package/src/generated/test/api/StirApi.spec.js +0 -63
- package/src/generated/test/api/TwilioApi.spec.js +0 -83
- package/src/generated/test/api/UsersApi.spec.js +0 -133
- package/src/generated/test/api/VeriffApi.spec.js +0 -93
- package/src/generated/test/api/WellKnownApi.spec.js +0 -83
- package/src/generated/test/api/ZoomApi.spec.js +0 -213
- package/src/generated/test/model/ApiControllersPslStirCallRequest.spec.js +0 -119
- package/src/generated/test/model/ApiModelsApiCallModelsCallRequest.spec.js +0 -83
- package/src/generated/test/model/AppId.spec.js +0 -59
- package/src/generated/test/model/Certainty.spec.js +0 -59
- package/src/generated/test/model/CreateLinkRequest.spec.js +0 -83
- package/src/generated/test/model/HTTPValidationError.spec.js +0 -65
- package/src/generated/test/model/InviteRequestModel.spec.js +0 -71
- package/src/generated/test/model/JWTRequest.spec.js +0 -77
- package/src/generated/test/model/NumberVerification.spec.js +0 -71
- package/src/generated/test/model/StartAttestationRequest.spec.js +0 -65
- package/src/generated/test/model/StartMeetingRequest.spec.js +0 -65
- package/src/generated/test/model/ValidationError.spec.js +0 -77
- package/src/generated/test/model/ValidationErrorLocInner.spec.js +0 -59
- package/src/generated/test/model/VeriffSessionRequest.spec.js +0 -71
- package/src/generated/test/model/VerifyRequest.spec.js +0 -71
- package/src/index.js +0 -16
- package/src/messageHandler.js +0 -121
- package/src/server.js +0 -91
- package/src/ticketService.js +0 -28
- package/src/ui.js +0 -88
- package/vitest.config.js +0 -10
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
# Navigate to the script's directory
|
|
4
|
-
cd "$(dirname "$0")/.."
|
|
5
|
-
|
|
6
|
-
# Step 1: Download the OpenAPI specification
|
|
7
|
-
echo "Downloading OpenAPI specification..."
|
|
8
|
-
curl -o openapi.json https://api.actual.video/openapi.json
|
|
9
|
-
|
|
10
|
-
# Check if curl was successful
|
|
11
|
-
if [ $? -ne 0 ]; then
|
|
12
|
-
echo "Failed to download OpenAPI specification. Aborting."
|
|
13
|
-
exit 1
|
|
14
|
-
fi
|
|
15
|
-
|
|
16
|
-
# Step 2: Run the OpenAPI generator using Docker
|
|
17
|
-
echo "Generating client from OpenAPI specification..."
|
|
18
|
-
docker run --rm -v "${PWD}:/local" openapitools/openapi-generator-cli generate \
|
|
19
|
-
-i /local/openapi.json \
|
|
20
|
-
-g javascript \
|
|
21
|
-
-o /local/src/generated \
|
|
22
|
-
--skip-validate-spec \
|
|
23
|
-
--additional-properties=legacyDiscriminatorBehavior=false
|
|
24
|
-
|
|
25
|
-
# Check if generation was successful
|
|
26
|
-
if [ $? -ne 0 ]; then
|
|
27
|
-
echo "Client generation failed. Aborting."
|
|
28
|
-
rm openapi.json # Clean up downloaded spec
|
|
29
|
-
exit 1
|
|
30
|
-
fi
|
|
31
|
-
|
|
32
|
-
# Step 3: Remove problematic model files
|
|
33
|
-
echo "Removing problematic model files..."
|
|
34
|
-
rm -f src/generated/src/model/Certainty.js
|
|
35
|
-
rm -f src/generated/src/model/ValidationErrorLocInner.js
|
|
36
|
-
rm -f src/generated/src/model/AppId.js
|
|
37
|
-
|
|
38
|
-
# Step 4: Comment out invalid import statements in generated code
|
|
39
|
-
echo "Patching generated files..."
|
|
40
|
-
find src/generated -type f -name "*.js" -print0 | xargs -0 sed -i.bak "s/import Certainty from '.\/model\/Certainty';/\/\/ import Certainty from '.\/model\/Certainty';/"
|
|
41
|
-
find src/generated -type f -name "*.js" -print0 | xargs -0 sed -i.bak "s/import ValidationErrorLocInner from '.\/model\/ValidationErrorLocInner';/\/\/ import ValidationErrorLocInner from '.\/model\/ValidationErrorLocInner';/"
|
|
42
|
-
find src/generated -type f -name "*.js" -print0 | xargs -0 sed -i.bak "s/import AppId from '.\/model\/AppId';/\/\/ import AppId from '.\/model\/AppId';/"
|
|
43
|
-
find src/generated -type f -name "*.js" -print0 | xargs -0 sed -i.bak "s/import Certainty from '.\/Certainty';/\/\/ import Certainty from '.\/Certainty';/"
|
|
44
|
-
find src/generated -type f -name "*.js" -print0 | xargs -0 sed -i.bak "s/import ValidationErrorLocInner from '.\/ValidationErrorLocInner';/\/\/ import ValidationErrorLocInner from '.\/ValidationErrorLocInner';/"
|
|
45
|
-
find src/generated -type f -name "*.js" -print0 | xargs -0 sed -i.bak "s/import AppId from '.\/AppId';/\/\/ import AppId from '.\/AppId';/"
|
|
46
|
-
|
|
47
|
-
# Also comment out the exports of the removed models
|
|
48
|
-
find src/generated -type f -name "*.js" -print0 | xargs -0 sed -i.bak "s/ Certainty,/\/\/ Certainty,/"
|
|
49
|
-
find src/generated -type f -name "*.js" -print0 | xargs -0 sed -i.bak "s/ ValidationErrorLocInner,/\/\/ ValidationErrorLocInner,/"
|
|
50
|
-
find src/generated -type f -name "*.js" -print0 | xargs -0 sed -i.bak "s/ AppId,/\/\/ AppId,/"
|
|
51
|
-
|
|
52
|
-
# Remove backup files created by sed
|
|
53
|
-
find src/generated -type f -name "*.js.bak" -delete
|
|
54
|
-
|
|
55
|
-
# Step 5: Clean up the downloaded specification file
|
|
56
|
-
echo "Cleaning up..."
|
|
57
|
-
rm openapi.json
|
|
58
|
-
|
|
59
|
-
echo "Client regeneration complete."
|
package/src/PolyguardClient.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { PolyguardWebsocketClientImpl } from './PolyguardWebsocketClientImpl';
|
|
2
|
-
|
|
3
|
-
export class PolyguardClient {
|
|
4
|
-
constructor(params = {}) {
|
|
5
|
-
// Choose implementation based on integrationType
|
|
6
|
-
let impl;
|
|
7
|
-
switch (params.integrationType) {
|
|
8
|
-
case 'websocket':
|
|
9
|
-
default:
|
|
10
|
-
impl = new PolyguardWebsocketClientImpl(params);
|
|
11
|
-
break;
|
|
12
|
-
}
|
|
13
|
-
this._impl = impl;
|
|
14
|
-
// Copy API services and properties from impl to this
|
|
15
|
-
for (const key in impl) {
|
|
16
|
-
if (Object.prototype.hasOwnProperty.call(impl, key)) {
|
|
17
|
-
this[key] = impl[key];
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
async verify(...args) {
|
|
23
|
-
return this._impl.verify(...args);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
import ReconnectingWebSocket from 'reconnecting-websocket';
|
|
2
|
-
import * as PolyguardApi from './generated/src';
|
|
3
|
-
import { buildModal, showSpinner } from './ui.js';
|
|
4
|
-
import { fetchTicket } from './ticketService.js';
|
|
5
|
-
import { handleWebSocketMessage } from './messageHandler.js';
|
|
6
|
-
|
|
7
|
-
// Implementation class for websocket integration
|
|
8
|
-
export class PolyguardWebsocketClientImpl {
|
|
9
|
-
constructor(params = {}) {
|
|
10
|
-
this.apiClient = new PolyguardApi.ApiClient();
|
|
11
|
-
const { apiKey, baseUrl, appId, apiServer, proxyUrl, iKnowThisIsInsecure, requiredProofs = ['Full Name'], scanType = 'single', redirectUrl, callbackUrl, cookieName, link_uuid, sidebarUrl } = params;
|
|
12
|
-
this.sidebarUrl = sidebarUrl;
|
|
13
|
-
|
|
14
|
-
if (apiKey && typeof window !== 'undefined' && iKnowThisIsInsecure !== true) {
|
|
15
|
-
throw new Error(
|
|
16
|
-
'apiKey is forbidden in browser code; use proxyUrl with a server-side proxy (see @polyguard/sdk/server). ' +
|
|
17
|
-
'Set iKnowThisIsInsecure: true to bypass.'
|
|
18
|
-
);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
if (proxyUrl) {
|
|
22
|
-
this.apiClient.basePath = proxyUrl.replace(/\/$/, '');
|
|
23
|
-
} else if (baseUrl) {
|
|
24
|
-
this.apiClient.basePath = baseUrl;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
if (apiKey) {
|
|
28
|
-
if (this.apiClient.authentications['bearerAuth']) {
|
|
29
|
-
this.apiClient.authentications['bearerAuth'].apiKey = apiKey;
|
|
30
|
-
}
|
|
31
|
-
this.apiClient.defaultHeaders = this.apiClient.defaultHeaders || {};
|
|
32
|
-
this.apiClient.defaultHeaders['x-pg-api-key'] = apiKey;
|
|
33
|
-
}
|
|
34
|
-
// Instantiate all API services
|
|
35
|
-
for (const key in PolyguardApi) {
|
|
36
|
-
if (key.endsWith('Api')) {
|
|
37
|
-
const apiName = key.charAt(0).toLowerCase() + key.slice(1);
|
|
38
|
-
this[apiName] = new PolyguardApi[key](this.apiClient);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
// Polyguard auth params
|
|
42
|
-
this.integrationType = 'websocket';
|
|
43
|
-
this.appId = appId;
|
|
44
|
-
this.apiServer = apiServer;
|
|
45
|
-
this.proxyUrl = proxyUrl;
|
|
46
|
-
this.requiredProofs = requiredProofs;
|
|
47
|
-
this.scanType = scanType;
|
|
48
|
-
this.redirectUrl = redirectUrl;
|
|
49
|
-
this.callbackUrl = callbackUrl;
|
|
50
|
-
this.cookieName = cookieName;
|
|
51
|
-
this.link_uuid = link_uuid;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
buildModal() {
|
|
55
|
-
return buildModal();
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
async verify(target = null, rawJwt = false) {
|
|
59
|
-
let modal = null;
|
|
60
|
-
let qrDiv = null;
|
|
61
|
-
let isTargetMode = false;
|
|
62
|
-
|
|
63
|
-
if (target) {
|
|
64
|
-
isTargetMode = true;
|
|
65
|
-
qrDiv = document.getElementById(target);
|
|
66
|
-
if (!qrDiv) {
|
|
67
|
-
throw new Error(`Target element with ID '${target}' not found`);
|
|
68
|
-
}
|
|
69
|
-
} else {
|
|
70
|
-
modal = buildModal();
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
if (!isTargetMode) {
|
|
74
|
-
document.body.appendChild(modal);
|
|
75
|
-
qrDiv = modal.querySelector('#polyguard-qr');
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
if (qrDiv) {
|
|
79
|
-
showSpinner(qrDiv);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
function cleanup() {
|
|
83
|
-
if (isTargetMode) {
|
|
84
|
-
if (qrDiv) {
|
|
85
|
-
qrDiv.innerHTML = '';
|
|
86
|
-
}
|
|
87
|
-
} else if (modal && modal.parentNode) {
|
|
88
|
-
modal.parentNode.removeChild(modal);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
return new Promise(async (resolve, reject) => {
|
|
93
|
-
let ws = null;
|
|
94
|
-
let closed = false;
|
|
95
|
-
|
|
96
|
-
function returnError(msg, score = "OFFLINE") {
|
|
97
|
-
if (isTargetMode) {
|
|
98
|
-
console.error('Polyguard Error:', msg);
|
|
99
|
-
cleanup();
|
|
100
|
-
resolve({presence: { score: score, msg: msg }});
|
|
101
|
-
} else {
|
|
102
|
-
const errDiv = modal.querySelector('#polyguard-error');
|
|
103
|
-
if (errDiv) {
|
|
104
|
-
errDiv.textContent = msg;
|
|
105
|
-
errDiv.style.display = 'block';
|
|
106
|
-
}
|
|
107
|
-
setTimeout(() => {
|
|
108
|
-
cleanup();
|
|
109
|
-
resolve({presence: { score: score, msg: msg }});
|
|
110
|
-
}, 1250);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
function clearError() {
|
|
114
|
-
if (!isTargetMode) {
|
|
115
|
-
const errDiv = modal.querySelector('#polyguard-error');
|
|
116
|
-
if (errDiv) errDiv.style.display = 'none';
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
function handleClose() {
|
|
120
|
-
closed = true;
|
|
121
|
-
if (ws) ws.close();
|
|
122
|
-
cleanup();
|
|
123
|
-
reject(new Error('User cancelled'));
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
if (!isTargetMode) {
|
|
127
|
-
modal.querySelector('#polyguard-modal-close').onclick = handleClose;
|
|
128
|
-
modal.querySelector('#polyguard-modal-cancel').onclick = handleClose;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
try {
|
|
132
|
-
clearError();
|
|
133
|
-
const wsProtocol = window.location.protocol === 'https:' ? 'wss' : 'ws';
|
|
134
|
-
|
|
135
|
-
const newTicket = await fetchTicket({
|
|
136
|
-
apiServer: this.apiServer,
|
|
137
|
-
proxyUrl: this.proxyUrl,
|
|
138
|
-
appId: this.appId,
|
|
139
|
-
link_uuid: this.link_uuid,
|
|
140
|
-
requiredProofs: this.requiredProofs,
|
|
141
|
-
scanType: this.scanType,
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
const wsUrl = `${wsProtocol}://${this.apiServer}/v2/realtime/${newTicket}`;
|
|
145
|
-
const options = {
|
|
146
|
-
maxRetries: 10,
|
|
147
|
-
minTimeout: 1000,
|
|
148
|
-
maxTimeout: 10000,
|
|
149
|
-
reconnectionDelay: 1000,
|
|
150
|
-
reconnectionDelayGrowFactor: 1.5,
|
|
151
|
-
};
|
|
152
|
-
ws = new ReconnectingWebSocket(wsUrl, [], options);
|
|
153
|
-
|
|
154
|
-
const markClosed = () => { closed = true; };
|
|
155
|
-
const ctx = { ws, qrDiv, isTargetMode, modal, cleanup, markClosed, returnError, clearError, resolve, rawJwt, sidebarUrl: this.sidebarUrl, link_uuid: this.link_uuid };
|
|
156
|
-
ws.addEventListener('message', (event) => handleWebSocketMessage(event, ctx));
|
|
157
|
-
|
|
158
|
-
ws.addEventListener('error', () => {
|
|
159
|
-
console.error('WebSocket error');
|
|
160
|
-
returnError('WebSocket error');
|
|
161
|
-
});
|
|
162
|
-
ws.addEventListener('close', () => {
|
|
163
|
-
if (!closed) cleanup();
|
|
164
|
-
});
|
|
165
|
-
} catch (err) {
|
|
166
|
-
returnError(err.message === 'Failed to get ticket' || err.message === 'No ticket returned from server'
|
|
167
|
-
? err.message
|
|
168
|
-
: 'Failed to connect to WebSocket');
|
|
169
|
-
}
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
/**
|
|
174
|
-
* Wrapper around verify that checks received proof values against expected values.
|
|
175
|
-
* @param {Object} expectedProofs - An object mapping proof names to expected values.
|
|
176
|
-
* @param {string} target - Optional ID of target element to render QR code in.
|
|
177
|
-
* @returns {Promise<boolean>} - Resolves to true if all expected proofs match, false otherwise or if cancelled.
|
|
178
|
-
*/
|
|
179
|
-
async require(expectedProofs = {}, target = null) {
|
|
180
|
-
try {
|
|
181
|
-
const jwt = await this.verify(target);
|
|
182
|
-
if (!jwt) return false;
|
|
183
|
-
// Decode JWT (without verifying signature)
|
|
184
|
-
const payload = JSON.parse(atob(jwt.split('.')[1]));
|
|
185
|
-
console.dir(payload);
|
|
186
|
-
// Check each expected proof
|
|
187
|
-
for (const [proof, expectedValue] of Object.entries(expectedProofs)) {
|
|
188
|
-
if (payload[proof] !== expectedValue) {
|
|
189
|
-
return false;
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
return true;
|
|
193
|
-
} catch (err) {
|
|
194
|
-
// If modal is cancelled or error occurs, return false
|
|
195
|
-
return false;
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
-
import { DEFAULT_PARAMS } from './helpers/fixtures.js';
|
|
3
|
-
|
|
4
|
-
// Mock the WebSocket impl so the facade tests never touch real internals
|
|
5
|
-
vi.mock('../PolyguardWebsocketClientImpl', () => {
|
|
6
|
-
class FakeImpl {
|
|
7
|
-
constructor(params = {}) {
|
|
8
|
-
this.appId = params.appId;
|
|
9
|
-
this.apiServer = params.apiServer;
|
|
10
|
-
this.integrationType = 'websocket';
|
|
11
|
-
this.blockingApi = { fake: true };
|
|
12
|
-
this.callsApi = { fake: true };
|
|
13
|
-
}
|
|
14
|
-
async verify(...args) {
|
|
15
|
-
return { args, result: 'fake-jwt' };
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
return { PolyguardWebsocketClientImpl: FakeImpl };
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
// Import after mock is set up
|
|
22
|
-
const { PolyguardClient } = await import('../PolyguardClient.js');
|
|
23
|
-
|
|
24
|
-
describe('PolyguardClient', () => {
|
|
25
|
-
beforeEach(() => {
|
|
26
|
-
vi.clearAllMocks();
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it('defaults to websocket implementation', () => {
|
|
30
|
-
const client = new PolyguardClient(DEFAULT_PARAMS);
|
|
31
|
-
expect(client._impl).toBeDefined();
|
|
32
|
-
expect(client._impl.integrationType).toBe('websocket');
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
it('explicit integrationType websocket works the same', () => {
|
|
36
|
-
const client = new PolyguardClient({ ...DEFAULT_PARAMS, integrationType: 'websocket' });
|
|
37
|
-
expect(client._impl.integrationType).toBe('websocket');
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
it('copies properties from impl to facade', () => {
|
|
41
|
-
const client = new PolyguardClient(DEFAULT_PARAMS);
|
|
42
|
-
expect(client.appId).toBe(DEFAULT_PARAMS.appId);
|
|
43
|
-
expect(client.apiServer).toBe(DEFAULT_PARAMS.apiServer);
|
|
44
|
-
expect(client.integrationType).toBe('websocket');
|
|
45
|
-
expect(client.blockingApi).toEqual({ fake: true });
|
|
46
|
-
expect(client.callsApi).toEqual({ fake: true });
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
it('verify() delegates to _impl.verify() with all args forwarded', async () => {
|
|
50
|
-
const client = new PolyguardClient(DEFAULT_PARAMS);
|
|
51
|
-
const spy = vi.spyOn(client._impl, 'verify');
|
|
52
|
-
await client.verify('my-target', true);
|
|
53
|
-
expect(spy).toHaveBeenCalledWith('my-target', true);
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
it('verify() returns the impl result', async () => {
|
|
57
|
-
const client = new PolyguardClient(DEFAULT_PARAMS);
|
|
58
|
-
const result = await client.verify('t', false);
|
|
59
|
-
expect(result).toEqual({ args: ['t', false], result: 'fake-jwt' });
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
it('constructor with no params does not throw', () => {
|
|
63
|
-
expect(() => new PolyguardClient()).not.toThrow();
|
|
64
|
-
});
|
|
65
|
-
});
|