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
2 changes: 1 addition & 1 deletion backend/compact-connect/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Compact Connect - Backend developer documentation
# CompactConnect - Backend developer documentation

## Looking for technical user documentation?
[Find it here](./docs/README.md)
Expand Down
2 changes: 1 addition & 1 deletion backend/compact-connect/app_clients/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
## Overview

This document is a guide for technical staff for managing Cognito app clients for machine-to-machine authentication in
the State API. All app clients must be documented in the external 'Compact Connect App Client Registry' Google Sheet
the State API. All app clients must be documented in the external 'CompactConnect App Client Registry' Google Sheet
(If you do not have access to said registry, contact a maintainer of the project and request access).

## Creating a New App Client
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -407,7 +407,7 @@ def print_email_template(environment, compact, state):
license_upload_url = f'{api_base_urls.get(environment)}/v1/compacts/{compact}/jurisdictions/{state}/licenses'

email_template = f"""
Thank you for integrating with Compact Connect! You have been designated as the IT professional who is able to handle
Thank you for integrating with CompactConnect! You have been designated as the IT professional who is able to handle
credentials for secure machine-to-machine authentication between your state and CompactConnect.

Details for these credentials are:
Expand Down
2 changes: 1 addition & 1 deletion backend/compact-connect/docs/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Compact Connect - technical user guide
# CompactConnect - technical user guide

This documentation is intended for technical IT staff that plan to integrate with this data system. It will likely grow
as the features of this system grow. For technical documentation of the internal design of the CompactConnect backend,
Expand Down
6 changes: 3 additions & 3 deletions backend/compact-connect/docs/attestations/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Compact Connect Attestation Versioning Design
# CompactConnect Attestation Versioning Design

The Compact Connect system defines a set of attestations that providers must accept when purchasing privileges. Attestations are legally binding statements that providers must agree to, and they are versioned to ensure providers always see and accept the most current version.
The CompactConnect system defines a set of attestations that providers must accept when purchasing privileges. Attestations are legally binding statements that providers must agree to, and they are versioned to ensure providers always see and accept the most current version.

## Required Attestations

Expand Down Expand Up @@ -86,4 +86,4 @@ Attestations are stored in the Compact Configuration table with the following st

The system retrieves the latest attestation version for a given attestation ID by querying with the appropriate prefix and sorting in descending order, then taking the first result.

Attestations are retrieved during the privilege purchase process via the `get_attestations_by_locale` method, which returns a dictionary of attestation records keyed by attestation ID.
Attestations are retrieved during the privilege purchase process via the `get_attestations_by_locale` method, which returns a dictionary of attestation records keyed by attestation ID.
2 changes: 1 addition & 1 deletion backend/compact-connect/docs/devops/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# DevOps Documentation

This directory contains internal operations and support procedures for the Compact Connect development and support teams.
This directory contains internal operations and support procedures for the CompactConnect development and support teams.
This documentation is **NOT** intended for external IT staff.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Overview

When a staff user loses access to their Multi-Factor Authentication (MFA) device, they cannot log into the Compact Connect system.
When a staff user loses access to their Multi-Factor Authentication (MFA) device, they cannot log into the CompactConnect system.

A staff user account consists of two parts: a Cognito user to track login information, and a DynamoDB record in the staff
users DynamoDB table to track permissions and other account data about the user.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,35 +1,35 @@
# Jurisdiction and Compact Onboarding for Compact Connect
# Jurisdiction and Compact Onboarding for CompactConnect

Before a jurisdiction (i.e. state) can be onboarded to the Compact Connect system, there is certain information that
Before a jurisdiction (i.e. state) can be onboarded to the CompactConnect system, there is certain information that
must be provided for that jurisdiction. This document is intended to be referenced by State IT staff/CSG maintainers
that will need to assist with onboarding new jurisdictions or compacts into the system. It outlines the information
that is required and how that information is to be defined in the system. The following steps must be taken to onboard
a jurisdiction to the Compact Connect system:
a jurisdiction to the CompactConnect system:

## Inviting users to the system
Compact Administrators can invite state administrators to Compact Connect by creating user accounts for them through the administrative interface. The process works as follows:
Compact Administrators can invite state administrators to CompactConnect by creating user accounts for them through the administrative interface. The process works as follows:

1. The Compact Administrator logs into the Compact Connect system and navigates to the User Management section.
1. The Compact Administrator logs into the CompactConnect system and navigates to the User Management section.
2. They create a new user account for the state administrator, specifying their email address, name, and appropriate jurisdiction-level permissions.
3. Upon creation, the system automatically sends an email to the state administrator containing temporary credentials (username and temporary password).
4. The state administrator uses these temporary credentials to log in to Compact Connect for the first time.
4. The state administrator uses these temporary credentials to log in to CompactConnect for the first time.
5. During the first login, the system prompts the state administrator to set a permanent password.
6. Once logged in, state administrators can access the settings panel (the cog icon) and set the needed configuration as described below.

## Jurisdiction Onboarding Overview

Before a jurisdiction (i.e. state) can be onboarded to the Compact Connect system, the following information must be provided and configured through the Compact Connect UI:
Before a jurisdiction (i.e. state) can be onboarded to the CompactConnect system, the following information must be provided and configured through the CompactConnect UI:

1. Jurisdiction Fee for Compact Privileges
2. Contact Details for System Notifications
3. Jurisprudence Requirements
4. Licensee Registration Settings

These settings are managed by jurisdiction administrators through the Compact Connect administrative interface.
These settings are managed by jurisdiction administrators through the CompactConnect administrative interface.

### Jurisdiction Fee for a Compact Privilege

Jurisdiction administrators must set the fee that the jurisdiction will charge for a compact privilege. This is configured in the Jurisdiction Settings section of the Compact Connect UI. This is set per license type offered by the compact.
Jurisdiction administrators must set the fee that the jurisdiction will charge for a compact privilege. This is configured in the Jurisdiction Settings section of the CompactConnect UI. This is set per license type offered by the compact.

#### Military Rate Configuration

Expand Down Expand Up @@ -101,13 +101,13 @@ Both jurisdiction and compact administrators must provide contact details for sy
> **Recommendation**: While the system supports multiple email addresses for each notification type, we recommend using distribution lists that users can subscribe to or unsubscribe from without requiring configuration changes.

## Uploading Authorize.net API Keys
Compact administrators can configure their Authorize.net payment processing credentials through the Compact Connect UI. These
Compact administrators can configure their Authorize.net payment processing credentials through the CompactConnect UI. These
credentials are used to securely process payments for compact privilege applications. For detailed instructions on how to generate
these keys in your Authorize.net account, please visit the [Authorize.net documentation](https://support.authorize.net/knowledgebase/
Knowledgearticle/?code=000001271). Once these credentials have been generated, the compact admin can set up payment processing for your
compact using the following steps:

1. Log in to the Compact Connect UI as a compact administrator
1. Log in to the CompactConnect UI as a compact administrator
2. Navigate to the Compact Settings page (gear icon in the bottom left corner of the side navigation bar)
3. Locate the "Authorize.net Credentials" section
4. Enter the following Authorize.net credentials into the form and press "Submit":
Expand All @@ -117,7 +117,7 @@ compact using the following steps:
If the request is successful, payment processing will be enabled for your compact.

**Important Security Notes:**
- If your credentials are ever compromised, or you suspect they might have been compromised, generate new ones immediately in your Authorize.net account and update them through the Compact Connect UI.
- If your credentials are ever compromised, or you suspect they might have been compromised, generate new ones immediately in your Authorize.net account and update them through the CompactConnect UI.

## Access Management

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ export abstract class BaseEmailService {
}
},
// We're required by the IAM policy to use this display name
FromEmailAddress: `Compact Connect <${environmentVariableService.getFromAddress()}>`,
FromEmailAddress: `CompactConnect <${environmentVariableService.getFromAddress()}>`,
});

return (await this.sesClient.send(command)).MessageId;
Expand Down Expand Up @@ -121,7 +121,7 @@ export abstract class BaseEmailService {

// Create the email message
const message = {
from: `Compact Connect <${environmentVariableService.getFromAddress()}>`,
from: `CompactConnect <${environmentVariableService.getFromAddress()}>`,
to: recipients,
subject: subject,
html: htmlContent,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,7 @@ export class EmailNotificationService extends BaseEmailService {

const emailContent = this.getNewEmailTemplate();
const headerText = `Privilege Purchase Confirmation`;
const subject = `Compact Connect Privilege Purchase Confirmation`;
const subject = `CompactConnect Privilege Purchase Confirmation`;
const bodyText = `This email is to confirm you successfully purchased the following privileges on ${transactionDate}`;

this.insertHeader(emailContent, headerText);
Expand Down Expand Up @@ -414,9 +414,9 @@ export class EmailNotificationService extends BaseEmailService {
}

const report = this.getNewEmailTemplate();
const subject = `Registration Attempt Notification - Compact Connect`;
const subject = `Registration Attempt Notification - CompactConnect`;
const loginUrl = `${environmentVariableService.getUiBasePathUrl()}/Dashboard`;
const bodyText = `A registration attempt was made in the Compact Connect system for an account associated with this email address. This email address is already registered in our system.\n\nIf you originally registered within the past 24 hours, make sure to login with your temporary password sent to this same email address. You may log in to your existing account using the link below:\n\n${loginUrl}\n\nFor your security, we recommend that you log in to your account to verify your account information and ensure your account remains secure.`;
const bodyText = `A registration attempt was made in the CompactConnect system for an account associated with this email address. This email address is already registered in our system.\n\nIf you originally registered within the past 24 hours, make sure to login with your temporary password sent to this same email address. You may log in to your existing account using the link below:\n\n${loginUrl}\n\nFor your security, we recommend that you log in to your account to verify your account information and ensure your account remains secure.`;

this.insertHeader(report, 'Registration Attempt');
this.insertBody(report, bodyText, 'center', true);
Expand All @@ -443,7 +443,7 @@ export class EmailNotificationService extends BaseEmailService {
const recipients = [providerEmail];

const report = this.getNewEmailTemplate();
const subject = `Verify Your New Email Address - Compact Connect`;
const subject = `Verify Your New Email Address - CompactConnect`;
const bodyText = `Please use the following verification code to complete your email address change:\n\n## ${verificationCode}\n\nThis code will expire in 15 minutes.\n\nIf you did not request this email change, please contact support immediately.`;

this.insertHeader(report, 'Email Update Verification');
Expand Down Expand Up @@ -471,8 +471,8 @@ export class EmailNotificationService extends BaseEmailService {
const recipients = [oldEmailAddress];

const report = this.getNewEmailTemplate();
const subject = `Email Address Changed - Compact Connect`;
const bodyText = `This is to notify you that your Compact Connect account email address has been changed to the following:\n\n${newEmailAddress}\n\nPlease use the new email address to login to your account from now on. If you did not make this change, please contact support immediately.`;
const subject = `Email Address Changed - CompactConnect`;
const bodyText = `This is to notify you that your CompactConnect account email address has been changed to the following:\n\n${newEmailAddress}\n\nPlease use the new email address to login to your account from now on. If you did not make this change, please contact support immediately.`;

this.insertHeader(report, 'Email Address Changed');
this.insertBody(report, bodyText, 'center');
Expand Down Expand Up @@ -505,12 +505,12 @@ export class EmailNotificationService extends BaseEmailService {
}

const emailContent = this.getNewEmailTemplate();
const subject = 'Confirm Account Recovery - Compact Connect';
const subject = 'Confirm Account Recovery - CompactConnect';

const baseUrl = environmentVariableService.getUiBasePathUrl();
const recoveryUrl = `${baseUrl}/Dashboard?bypass=recovery-practitioner&compact=${compact}&providerId=${providerId}&recoveryId=${recoveryToken}`;

const bodyText = `A request was made to recover access to your Compact Connect user account.\n\n` +
const bodyText = `A request was made to recover access to your CompactConnect user account.\n\n` +
`If you initiated this request, please confirm by clicking the link below to continue account recovery. ` +
`\n\n${recoveryUrl}\n\n` +
`**If you did not request this, your password has likely been compromised and you should reset your password immediately**. To reset your password, please visit the following link:\n\n${baseUrl}/Dashboard?bypass=login-practitioner\n\n Select 'Forgot your password?' and follow the instructions.`;
Expand Down Expand Up @@ -542,7 +542,7 @@ export class EmailNotificationService extends BaseEmailService {
}

const report = this.getNewEmailTemplate();
const subject = 'Military Status Documentation Approved - Compact Connect';
const subject = 'Military Status Documentation Approved - CompactConnect';
const bodyText = 'This message is to notify you that your military status documentation has been reviewed and approved by the compact staff.';

this.insertHeader(report, subject);
Expand Down Expand Up @@ -574,7 +574,7 @@ export class EmailNotificationService extends BaseEmailService {
}

const report = this.getNewEmailTemplate();
const subject = 'Military Status Documentation Declined - Compact Connect';
const subject = 'Military Status Documentation Declined - CompactConnect';
let bodyText = 'This message is to notify you that your military status documentation has been reviewed and declined by the compact staff.';

if (auditNote && auditNote.trim().length > 0) {
Expand Down Expand Up @@ -690,7 +690,7 @@ export class EmailNotificationService extends BaseEmailService {
const expirationDateSlash = formatIsoDateAsSlashFormat(expirationDate);

const emailContent = this.getNewEmailTemplate();
const subject = `Your Compact Connect Privileges Expire on ${expirationDateDisplay}`;
const subject = `Your CompactConnect Privileges Expire on ${expirationDateDisplay}`;

// Logo at the top
this.insertLogo(emailContent);
Expand Down Expand Up @@ -725,7 +725,7 @@ export class EmailNotificationService extends BaseEmailService {
{ 'padding': { 'top': 24, 'bottom': 24, 'right': 32, 'left': 32 }}
);

// Dashboard link so the user can navigate to Compact Connect
// Dashboard link so the user can navigate to CompactConnect
const dashboardUrl = `${environmentVariableService.getUiBasePathUrl()}/Dashboard`;

this.insertBody(
Expand Down
6 changes: 3 additions & 3 deletions backend/compact-connect/lambdas/nodejs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "compact-connect",
"version": "1.0.0",
"type": "commonjs",
"description": "NodeJS lambdas for Compact Connect",
"description": "NodeJS lambdas for CompactConnect",
"resolutions": {
"fast-xml-parser": "5.5.7"
},
Expand All @@ -20,7 +20,7 @@
"@types/aws-lambda": "8.10.145",
"@types/jest": "^29.5.12",
"@types/node": "22.5.4",
"@types/nodemailer": "^7.0.9",
"@types/nodemailer": "^8.0.0",
"@types/react": "^18.3.12",
"@typescript-eslint/eslint-plugin": "^8.12.2",
"@typescript-eslint/parser": "^8.12.2",
Expand Down Expand Up @@ -49,7 +49,7 @@
"@aws-sdk/client-sesv2": "^3.901.0",
"@aws-sdk/util-dynamodb": "^3.901.0",
"@csg-org/email-builder": "^0.0.12",
"nodemailer": "^7.0.11",
"nodemailer": "^8.0.5",
Comment thread
coderabbitai[bot] marked this conversation as resolved.
"zod": "^3.23.8"
}
}
Loading
Loading