Skip to content
Merged
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
3 changes: 3 additions & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# Changelog

## [Unreleased]
### Added
- Added jurisdictional restrictions configuration to the ID widget config, including Blocklist/Allowlist strategy selection, searchable ISO alpha-3 country selection, backend payload persistence through `jurisdictionRules`, and hard-reject defaults.

### [3.14.0] - 2026-08-07
### Added
- Added a toggle for mobile-assisted verification.
Expand Down
9 changes: 7 additions & 2 deletions src/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -177,8 +177,13 @@ config['FaicalAuthenticationError'] = {
4: 'Rejected, to perform face check due to the pose of the face',
5: 'Rejected, due to problems in the extraction of the facial pattern',
6: 'Rejected, because document has already been verified in some other account with this service',
7: 'Failed, because the date of birth could not be read correctly from the document'
7: 'Failed, because the date of birth could not be read correctly from the document',
8: 'Failed, because document issuing country is restricted',
9: 'Failed, because nationality is restricted',
10: 'Failed, because document issuing country is not allowed',
11: 'Failed, because nationality is not allowed',
12: 'Failed, because jurisdiction restriction requires manual review'
}
const kycServerBaseUrl = process.env.VUE_APP_KYC_SERVER_BASE_URL || 'https://api.cavach.hypersign.id'
config['KYC_SERVER_BASE_URL'] = kycServerBaseUrl;
export default config
export default config
14 changes: 14 additions & 0 deletions src/mixins/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,20 @@ export default {
</span>`
}

if (status == 'REJECTED') {
return `<span class="badge badge-pill badge-outline-danger p-2">
<i class="mdi mdi-close-circle-outline mr-1"></i>
Rejected
</span>`
}

if (status == 'MANUAL_REVIEW') {
return `<span class="badge badge-pill badge-outline-warning p-2">
<i class="mdi mdi-alert-circle-outline mr-1"></i>
Manual Review
</span>`
}

if (status == 'Expired') {
return `<span class="badge badge-pill badge-outline-secondary p-2">
<i class="mdi mdi-clock-remove-outline mr-1"></i>
Expand Down
42 changes: 42 additions & 0 deletions src/store/mainStore.js
Original file line number Diff line number Diff line change
Expand Up @@ -2396,6 +2396,48 @@ const mainStore = {
})
})
},
submitManualReviewDecision: async ({ getters, dispatch }, payload) => {
const { sessionId, action, reasonCode, comments } = payload
if (!sessionId) {
throw new Error('Session Id is required')
}
if (!action) {
throw new Error('Decision action is required')
}
if (!getters.getSelectedService || !getters.getSelectedService.tenantUrl) {
throw new Error('Tenant url is null or empty, service is not selected')
}
if (!getters.getSelectedService.access_token) {
throw new Error('authToken is invalid, service is not selected')
}

const token = await dispatch('getValidToken', {
serviceId: getters.getSelectedService.appId,
grant_type: config.GRANT_TYPES_ENUM.CAVACH_API,
tokenStorageKey: "access_token"
});
const headers = UtilsMixin.methods.getKycServiceHeader(token);
const url = `${sanitizeUrl(getters.getSelectedService.tenantUrl)}/api/v1/e-kyc/verification/sessions/${encodeURIComponent(sessionId)}/decision`;
const resp = await fetch(url, {
method: 'POST',
headers,
body: JSON.stringify({
action,
reasonCode,
comments
})
})
const json = await resp.json()
if (!resp.ok || json.error) {
const errorDetails = json.error?.details;
const message = Array.isArray(errorDetails)
? errorDetails.join(' ')
: json.error?.message || json.error || json.message || 'Error while submitting manual review decision'
throw new Error(message)
}

return json.data || json
},
async fetchUsageForASSIService({ getters, dispatch }, payload) {
const { startDate, endDate } = payload
if (!getters.getSelectedService || !getters.getSelectedService.tenantUrl) {
Expand Down
Loading
Loading