diff --git a/.gitignore b/.gitignore
index 992143cb4..5c1a2eddc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,4 +22,5 @@ tests/cypress/videos
tests/cypress/screenshots
tests/cypress/fixtures/packageDashboardSPAIDs.json
tests/cypress/fixtures/packageDashboardWaiverNumbers.json
-tests/cypress/fixtures/savedID.json
\ No newline at end of file
+tests/cypress/fixtures/savedID.json
+/services/layers/aws-sdk-v2-layer/.serverless
diff --git a/deploy.sh b/deploy.sh
index 9b7f24e44..9d4dff33a 100755
--- a/deploy.sh
+++ b/deploy.sh
@@ -3,6 +3,15 @@
stage=${1:-dev}
install_deps() {
+ local islayer=false # Flag to track whether we navigated into the nodejs folder
+
+ # Check if we're inside a layer directory (layers have a 'nodejs' folder)
+ if [ -d "nodejs" ]; then
+ # If we're in a Lambda layer, navigate to the 'nodejs' folder
+ cd nodejs
+ islayer=true # Set the flag to true since we navigated into nodejs
+ fi
+
if [ "$CI" == "true" ]; then # If we're in a CI system
if [ ! -d "node_modules" ]; then # If we don't have any node_modules (CircleCI cache miss scenario), run npm ci. Otherwise, we're all set, do nothing.
npm ci --legacy-peer-deps
@@ -10,6 +19,11 @@ install_deps() {
else # We're not in a CI system, let's npm install
npm install --legacy-peer-deps
fi
+
+ # If we navigated to the nodejs folder (i.e., for a layer), go back to the root folder
+ if [ "$islayer" = true ]; then
+ cd ..
+ fi
}
deploy() {
@@ -25,6 +39,7 @@ install_deps
services=(
'ui'
'uploads'
+ 'layers/aws-sdk-v2-layer'
'app-api'
'email'
'one-stream'
diff --git a/services/admin/package.json b/services/admin/package.json
index e31500319..73af5d181 100644
--- a/services/admin/package.json
+++ b/services/admin/package.json
@@ -4,13 +4,13 @@
"version": "1.0.0",
"devDependencies": {
"aws-sdk-client-mock": "^0.5.6",
+ "aws-sdk": "^2.752.0",
"esbuild": "^0.19.4",
"serverless-dotenv-plugin": "^3.12.2",
"serverless-esbuild": "^1.48.4",
"serverless-offline": "^13.5.0"
},
"dependencies": {
- "aws-sdk": "^2.752.0",
"@aws-sdk/client-dynamodb": "^3.43.0",
"@aws-sdk/lib-dynamodb": "^3.454.0",
"cmscommonlib": "file:../common",
diff --git a/services/admin/scripts/READ.md b/services/admin/scripts/READ.md
new file mode 100644
index 000000000..a95966c49
--- /dev/null
+++ b/services/admin/scripts/READ.md
@@ -0,0 +1,7 @@
+This /scripts Folder simply contains scripts that are not used in the application or deployed via lambda but are useful for admin type functions.
+
+#####
+
+generate_packages - creates new records in Under Review status by inserting both a OneMAC record and a SEATool record
+rebuildPackagesbyPK - force a rebuild of the package record for all packages listed in pk_values.json
+setPOCs - set the action_officers (srt) and lead_analyst (cpoc) for all packages listed in pk_values.json
diff --git a/services/admin/scripts/createUsers.sh b/services/admin/scripts/createUsers.sh
new file mode 100644
index 000000000..5afaf265c
--- /dev/null
+++ b/services/admin/scripts/createUsers.sh
@@ -0,0 +1,82 @@
+#!/bin/bash
+
+# Variables
+USER_POOL_ID="us-east-1_9NXuk7ucb"
+INPUT_FILE="users.json"
+DYNAMODB_TABLE="onemac-masterclone-one"
+DATE=$(date +%s%3N) # Current timestamp in milliseconds
+
+# Read the JSON file and loop through each user
+jq -c '.users[]' $INPUT_FILE | while read -r user; do
+ PASSWORD=$(echo $user | jq -r '.password')
+ EMAIL=$(echo $user | jq -r '.email')
+ FAMILY_NAME=$(echo $user | jq -r '.family_name')
+ GIVEN_NAME=$(echo $user | jq -r '.given_name')
+ ROLE=$(echo $user | jq -r '.role')
+
+ # Concatenate given name and family name to form full name
+ FULL_NAME="$GIVEN_NAME $FAMILY_NAME"
+
+ # Determine territory and GSI fields based on role
+ if [ "$ROLE" = "systemadmin" ]; then
+ TERRITORY="N/A"
+ GSI1SK="Boss"
+ GSI1PK="systemadmin#N/A"
+ else
+ TERRITORY=$(echo $user | jq -r '.territory')
+ GSI1SK="statesystemadmin#$TERRITORY"
+ GSI1PK="USER"
+ fi
+
+ echo "Creating user with email: $EMAIL"
+
+ # Use the email as the username in Cognito
+ aws cognito-idp admin-create-user \
+ --user-pool-id "$USER_POOL_ID" \
+ --username "$EMAIL" \
+ --user-attributes Name="email",Value="$EMAIL" \
+ Name="family_name",Value="$FAMILY_NAME" \
+ Name="given_name",Value="$GIVEN_NAME" \
+ Name="email_verified",Value="true" \
+ --message-action SUPPRESS
+
+ # Set the password and mark the user as confirmed
+ aws cognito-idp admin-set-user-password \
+ --user-pool-id "$USER_POOL_ID" \
+ --username "$EMAIL" \
+ --password "$PASSWORD" \
+ --permanent
+
+ echo "User created with email (used as username): $EMAIL"
+
+ # Insert ContactInfo record into DynamoDB
+ aws dynamodb put-item --table-name "$DYNAMODB_TABLE" --item \
+ '{"pk": {"S": "'"$EMAIL"'"},
+ "sk": {"S": "ContactInfo"},
+ "email": {"S": "'"$EMAIL"'"},
+ "fullName": {"S": "'"$FULL_NAME"'"},
+ "GSI1pk": {"S": "'"$GSI1PK"'"},
+ "GSI1sk": {"S": "'"$EMAIL"'"} }'
+
+ echo "ContactInfo record created for user: $EMAIL"
+
+ # Insert Roles record into DynamoDB
+ aws dynamodb put-item --table-name "$DYNAMODB_TABLE" --item \
+ '{"pk": {"S": "'"$EMAIL"'"},
+ "sk": {"S": "v0#'"$ROLE"'#'"$TERRITORY"'"},
+ "date": {"N": "'"$DATE"'"},
+ "doneByEmail": {"S": "'"$EMAIL"'"},
+ "doneByName": {"S": "'"$FULL_NAME"'"},
+ "email": {"S": "'"$EMAIL"'"},
+ "fullName": {"S": "'"$FULL_NAME"'"},
+ "GSI1pk": {"S": "'"$GSI1PK"'"},
+ "GSI1sk": {"S": "'"$GSI1SK"'"},
+ "GSI2pk": {"S": "'"$ROLE"'#'"$TERRITORY"'"},
+ "GSI2sk": {"S": "active"},
+ "Latest": {"S": "1"},
+ "role": {"S": "'"$ROLE"'"},
+ "status": {"S": "active"},
+ "territory": {"S": "'"$TERRITORY"'"} }'
+
+ echo "Roles record created for user: $EMAIL"
+done
\ No newline at end of file
diff --git a/services/admin/scripts/delete_packages.sh b/services/admin/scripts/delete_packages.sh
new file mode 100644
index 000000000..f893ec0fa
--- /dev/null
+++ b/services/admin/scripts/delete_packages.sh
@@ -0,0 +1,41 @@
+#!/bin/bash
+
+# Variables
+DYNAMODB_TABLE="onemac-masterclone-one"
+PK_VALUES=("NY-24-9356" "NY-24-6035" "NY-24-3865" "NY-24-1282" "NY-24-1036" "NY-24-9253" "NY-24-9972" "NY-24-1717" "NY-24-5342" "NY-24-8523" "NY-24-1571" "NY-24-7203" "NY-80815.R01.02" "NY-66338.R01.02" "NY-84734.R01.00" "NY-23214.R01.02" "NY-94872.R00.00" "NY-93400.R00.00" "NY-72598.R01.02" "NY-84074.R01.00" "NY-49584.R00.01" "NY-52227.R00.00" "NY-27845.R01.00" "NY-95809.R00.01" "NY-53801.R01.02" "NY-38783.R00.01" "NY-75550.R00.01" "NY-92181.R01.00" "NY-18445.R00.00" "NY-57782.R01.00" "NY-52513.R00.00" "NY-99845.R00.01" "NY-76823.R00.01" "NY-42146.R01.02" "NY-52725.R00.00" "NY-14938.R01.00")
+
+# Counter for deleted items
+DELETED_COUNT=0
+
+# Loop through each pk value
+for PK in "${PK_VALUES[@]}"; do
+ # Query DynamoDB for items with the specified pk
+ ITEMS=$(aws dynamodb query \
+ --table-name "$DYNAMODB_TABLE" \
+ --key-condition-expression "pk = :pk" \
+ --expression-attribute-values '{":pk": {"S": "'"$PK"'"}}' \
+ --projection-expression "pk, sk" \
+ --output json | jq -c '.Items[]')
+
+ # Loop through the found items and delete them
+ echo "$ITEMS" | while read -r item; do
+ pk=$(echo "$item" | jq -r '.pk.S')
+ sk=$(echo "$item" | jq -r '.sk.S')
+
+ # Skip if pk or sk is empty
+ if [[ -z "$pk" || -z "$sk" ]]; then
+ continue
+ fi
+
+ # Delete the record
+ aws dynamodb delete-item \
+ --table-name "$DYNAMODB_TABLE" \
+ --key "{\"pk\": {\"S\": \"$pk\"}, \"sk\": {\"S\": \"$sk\"}}"
+
+ echo "Deleted record with pk: $pk and sk: $sk"
+ ((DELETED_COUNT++))
+ done
+done
+
+# Output the total number of deleted items
+echo "Total number of deleted items: $DELETED_COUNT"
\ No newline at end of file
diff --git a/services/admin/scripts/generate_packages.py b/services/admin/scripts/generate_packages.py
new file mode 100644
index 000000000..2ff6b1fe4
--- /dev/null
+++ b/services/admin/scripts/generate_packages.py
@@ -0,0 +1,416 @@
+import boto3
+import random
+import time
+from datetime import datetime, timedelta
+import os
+from botocore.exceptions import ClientError
+
+# Initialize DynamoDB client
+dynamodb = boto3.resource('dynamodb')
+
+# Get table name from environment variable or use default
+table_name = os.getenv('TABLE_NAME', 'onemac-masterclone-one')
+table = dynamodb.Table(table_name)
+
+# Define different component configurations
+component_config = {
+ "medicaidspa": {
+ "componentType": "medicaidspa",
+ "GSI1pk": "OneMAC#submitmedicaidspa",
+ "GSI1sk_prefix": "OneMAC#",
+ "second_GSI1pk": "SEATool#Medicaid_SPA",
+ "pk_format": "{state_code}-{current_year}-{random_4_digits}"
+ },
+ "chipspa": {
+ "componentType": "chipspa",
+ "GSI1pk": "OneMAC#submitchipspa",
+ "GSI1sk_prefix": "OneMAC#",
+ "second_GSI1pk": "SEATool#CHIP_SPA",
+ "pk_format": "{state_code}-{current_year}-{random_4_digits}"
+ },
+ "waivernew": {
+ "componentType": "waivernew",
+ "GSI1pk": "OneMAC#submitwaivernew",
+ "GSI1sk_prefix": "OneMAC#",
+ "second_GSI1pk": "SEATool#1915b_waivers",
+ "pk_format": "{state_code}-{random_5_digits}.R00.00"
+ },
+ "waiverappk": {
+ "componentType": "waiverappk",
+ "GSI1pk": "OneMAC#submitwaiverappk",
+ "GSI1sk_prefix": "OneMAC#",
+ "second_GSI1pk": "SEATool#1915c_waivers",
+ "pk_format": "{state_code}-{random_5_digits}.R00.01"
+ },
+ "waiveramendment": {
+ "componentType": "waiveramendment",
+ "GSI1pk": "OneMAC#submitwaiveramendment",
+ "GSI1sk_prefix": "OneMAC#",
+ "second_GSI1pk": "SEATool#1915b_waivers",
+ "pk_format": "{state_code}-{random_5_digits}.R01.02"
+ },
+ "waiverrenewal": {
+ "componentType": "waiverrenewal",
+ "GSI1pk": "OneMAC#submitwaiverrenewal",
+ "GSI1sk_prefix": "OneMAC#",
+ "second_GSI1pk": "SEATool#1915b_waivers",
+ "pk_format": "{state_code}-{random_5_digits}.R01.00"
+ }
+}
+
+# Function to generate random ID and timestamps, ensuring no duplicate IDs
+generated_ids = set()
+
+def generate_ids_and_timestamps(state_code, component_type):
+ config = component_config[component_type]
+ current_year = datetime.now().year % 100 # last 2 digits of the year
+ while True:
+ pk_format = config['pk_format']
+ # Replace placeholders with actual values
+ random_id = pk_format.format(
+ state_code=state_code,
+ current_year=current_year,
+ random_4_digits=random.randint(1000, 9999),
+ random_5_digits=random.randint(10000, 99999)
+ )
+
+ if random_id not in generated_ids:
+ generated_ids.add(random_id)
+ break
+
+ # Generate two timestamps within the last 90 days
+ now = int(time.time() * 1000)
+ start_time = now - (random.randint(0, 90) * 24 * 3600 * 1000)
+ end_time = start_time + random.randint(1, 600000) # Ensure second timestamp is slightly later
+ return random_id, start_time, end_time
+
+# default LEAD_ANALYST and ACTION_OFFICERS
+default_lead_analyst = [
+ {
+ "EMAIL": "onemaccpoc6@gmail.com",
+ "FIRST_NAME": "OneMAC",
+ "LAST_NAME": "CPOC06",
+ "OFFICER_ID": 3743,
+ "POSITION_ID": 538,
+ "TELEPHONE": "(410) 555-5445"
+ }
+]
+
+default_action_officers = [
+ {
+ "EMAIL": "onemacsrt52@gmail.com",
+ "FIRST_NAME": "OneMAC",
+ "LAST_NAME": "SRT52",
+ "OFFICER_ID": 3740,
+ "POSITION_ID": 538,
+ "TELEPHONE": "(410) 555-5445"
+ }
+]
+
+# Define different action officers and lead analysts per state, using the original defaults for now
+action_officers_per_state = {
+ "MD": [
+ {
+ "EMAIL": "onemacsrt52@gmail.com",
+ "FIRST_NAME": "OneMAC",
+ "LAST_NAME": "SRT52",
+ "OFFICER_ID": 3740,
+ "POSITION_ID": 538,
+ "TELEPHONE": "(410) 555-5445"
+ }
+ ],
+ "NY": [
+ {
+ "EMAIL": "onemacsrt5@gmail.com",
+ "FIRST_NAME": "OneMAC",
+ "LAST_NAME": "SRT5",
+ "OFFICER_ID": 3740,
+ "POSITION_ID": 538,
+ "TELEPHONE": "(410) 555-5445"
+ }
+ ],
+ "CA": [
+ {
+ "EMAIL": "onemacsrt2@gmail.com",
+ "FIRST_NAME": "OneMAC",
+ "LAST_NAME": "SRT2",
+ "OFFICER_ID": 3740,
+ "POSITION_ID": 538,
+ "TELEPHONE": "(410) 555-5445"
+ }
+ ],
+ "OH": [
+ {
+ "EMAIL": "onemacsrt3@gmail.com",
+ "FIRST_NAME": "OneMAC",
+ "LAST_NAME": "SRT3",
+ "OFFICER_ID": 3740,
+ "POSITION_ID": 538,
+ "TELEPHONE": "(410) 555-5445"
+ }
+ ],
+ "WI": [
+ {
+ "EMAIL": "onemacsrt4@gmail.com",
+ "FIRST_NAME": "OneMAC",
+ "LAST_NAME": "SRT4",
+ "OFFICER_ID": 3740,
+ "POSITION_ID": 538,
+ "TELEPHONE": "(410) 555-5445"
+ }
+ ]
+}
+
+lead_analyst_per_state = {
+ "MD": [
+ {
+ "EMAIL": "onemaccpoc6@gmail.com",
+ "FIRST_NAME": "OneMAC",
+ "LAST_NAME": "CPOC06",
+ "OFFICER_ID": 3743,
+ "POSITION_ID": 538,
+ "TELEPHONE": "(410) 555-5445"
+ }
+ ],
+ "NY": [
+ {
+ "EMAIL": "onemaccpoc50@gmail.com",
+ "FIRST_NAME": "OneMAC",
+ "LAST_NAME": "CPOC5",
+ "OFFICER_ID": 3743,
+ "POSITION_ID": 538,
+ "TELEPHONE": "(410) 555-5445"
+ }
+ ],
+ "CA": [
+ {
+ "EMAIL": "onemaccpoc9@gmail.com",
+ "FIRST_NAME": "OneMAC",
+ "LAST_NAME": "CPOC02",
+ "OFFICER_ID": 3743,
+ "POSITION_ID": 538,
+ "TELEPHONE": "(410) 555-5445"
+ }
+ ],
+ "OH": [
+ {
+ "EMAIL": "onemaccpoc319@gmail.com",
+ "FIRST_NAME": "OneMAC",
+ "LAST_NAME": "CPOC3",
+ "OFFICER_ID": 3743,
+ "POSITION_ID": 538,
+ "TELEPHONE": "(410) 555-5445"
+ }
+ ],
+ "WI": [
+ {
+ "EMAIL": "onemaccpoc49@gmail.com",
+ "FIRST_NAME": "OneMAC",
+ "LAST_NAME": "CPOC4",
+ "OFFICER_ID": 3743,
+ "POSITION_ID": 538,
+ "TELEPHONE": "(410) 555-5445"
+ }
+ ]
+}
+
+# Function to generate onemace submission record based on component type
+def generate_onemac_submission_record(state, random_id, first_timestamp, component_type):
+ config = component_config[component_type]
+ if component_type == "waiverappk":
+ attachments = [
+ {
+ "contentType": "text/csv",
+ "filename": "Report_UserList(1).csv",
+ "s3Key": f"{first_timestamp}/Report_UserList(1).csv",
+ "title": "1915(c) Appendix K Amendment Waiver Template",
+ "url": f"https://uploads-master-attachments-989324938326.s3.us-east-1.amazonaws.com/protected/us-east-1%3A30413432-e223-4a6d-bfe1-7ed87236ff55/{first_timestamp}/Report_UserList(1).csv"
+ },
+ {
+ "contentType": "text/csv",
+ "filename": "Report_spaList(5).csv",
+ "s3Key": f"{first_timestamp}/Report_spaList(5).csv",
+ "title": "1915(c) Appendix K Amendment Waiver Template",
+ "url": f"https://uploads-master-attachments-989324938326.s3.us-east-1.amazonaws.com/protected/us-east-1%3A30413432-e223-4a6d-bfe1-7ed87236ff55/{first_timestamp}/Report_spaList(5).csv"
+ },
+ {
+ "contentType": "text/csv",
+ "filename": "Report_waiverList(8).csv",
+ "s3Key": f"{first_timestamp}/Report_waiverList(8).csv",
+ "title": "Other",
+ "url": f"https://uploads-master-attachments-989324938326.s3.us-east-1.amazonaws.com/protected/us-east-1%3A30413432-e223-4a6d-bfe1-7ed87236ff55/{first_timestamp}/Report_waiverList(8).csv"
+ }
+ ]
+ return {
+ "pk": random_id,
+ "sk": f"{config['GSI1sk_prefix']}{first_timestamp}",
+ "additionalInformation": "created new APP k",
+ "attachments": attachments,
+ "clockEndTimestamp": first_timestamp + 77777777,
+ "componentId": random_id,
+ "componentType": config["componentType"],
+ "currentStatus": "Submitted",
+ "eventTimestamp": first_timestamp,
+ "GSI1pk": config["GSI1pk"],
+ "GSI1sk": random_id,
+ "proposedEffectiveDate": "2023-01-20",
+ "submissionTimestamp": first_timestamp,
+ "submitterEmail": "mdstateonemac@gmail.com",
+ "submitterName": "MDSTATE SUBMITTERNK",
+ "territory": state,
+ "title": "New Title for App K",
+ "transmittalNumberWarningMessage": "",
+ "waiverAuthority": "1915(c)"
+ }
+ else:
+ return {
+ "pk": random_id,
+ "sk": f"{config['GSI1sk_prefix']}{first_timestamp}",
+ "additionalInformation": "test",
+ "attachments": [
+ {
+ "contentType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
+ "filename": "file.docx",
+ "s3Key": f"{first_timestamp}/file.docx",
+ "title": "1915(b)(4) FFS Selective Contracting (Streamlined) Waiver Application Pre-print",
+ "url": f"https://uploads-develop-attachments-116229642442.s3.us-east-1.amazonaws.com/protected/us-east-1%3A86a190fe-b195-42bf-9685-9761bf0ff14b/{first_timestamp}/file.docx"
+ }
+ ],
+ "clockEndTimestamp": first_timestamp + 77777777,
+ "componentId": random_id,
+ "componentType": config["componentType"],
+ "currentStatus": "Submitted",
+ "eventTimestamp": first_timestamp,
+ "GSI1pk": config["GSI1pk"],
+ "GSI1sk": random_id,
+ "proposedEffectiveDate": "2024-06-27",
+ "submissionTimestamp": first_timestamp,
+ "submitterEmail": "statesubmitter@nightwatch.test",
+ "submitterName": "Statesubmitter Nightwatch",
+ "territory": state,
+ "transmittalNumberWarningMessage": "",
+ "waiverAuthority": "1915(b)(4)"
+ }
+
+# Function to generate second record based on component type
+def generate_seatool_pending_record(state, random_id, second_timestamp, component_type):
+ config = component_config[component_type]
+
+ # Use state-specific action officers and lead analysts
+ action_officers = action_officers_per_state.get(state, default_action_officers)
+ lead_analyst = lead_analyst_per_state.get(state, default_lead_analyst)
+
+ # Base common record structure
+ seatool_record = {
+ "pk": random_id,
+ "sk": f"SEATool#{second_timestamp}",
+ "GSI1pk": config["second_GSI1pk"],
+ "GSI1sk": random_id,
+ "LEAD_ANALYST": lead_analyst,
+ "ACTION_OFFICERS": action_officers,
+ "OCD_REVIEW": [
+ {
+ "OCD_REVIEW_DESCRIPTION": "No",
+ "OCD_REVIEW_ID": 2
+ }
+ ],
+ "SPW_STATUS": [
+ {
+ "SPW_STATUS_DESC": "Pending",
+ "SPW_STATUS_ID": 1
+ }
+ ],
+ "STATE_PLAN": {
+ "ID_NUMBER": random_id,
+ "SPW_STATUS_ID": 1, # Ensures SPW_STATUS_ID is always included
+ "LEAD_ANALYST_ID": lead_analyst[0]["OFFICER_ID"], # Using the first lead analyst's ID
+ "STATE_CODE": state,
+ "SUMMARY_MEMO": "This is just a test" if component_type != "waiverappk" else "Sample Summary Memo",
+ "UUID": "66908FBA-9AFC-41BD-BA77-AA74379E6F44" if component_type != "waiverappk" else None
+ }
+ }
+
+ # Add or modify specific fields based on component_type
+ if component_type == "waiverappk":
+ seatool_record["ACTIONTYPES"] = [
+ {
+ "ACTION_ID": 76,
+ "ACTION_NAME": "Amend",
+ "PLAN_TYPE_ID": 123
+ }
+ ]
+ seatool_record["PLAN_TYPES"] = [
+ {
+ "PLAN_TYPE_ID": 123,
+ "PLAN_TYPE_NAME": "1915(c)"
+ }
+ ]
+ seatool_record["STATE_PLAN"]["ACTION_TYPE"] = 76
+ seatool_record["STATE_PLAN"]["ALERT_90_DAYS_DATE"] = 1681862400000
+ else:
+ seatool_record["PLAN_TYPES"] = [
+ {
+ "PLAN_TYPE_ID": 122,
+ "PLAN_TYPE_NAME": "1915(b)"
+ }
+ ]
+ seatool_record["STATE_PLAN"]["PLAN_TYPE"] = 122
+
+ return seatool_record
+
+
+
+# Function to insert records into DynamoDB with multiple component types
+def insert_records(state_codes, num_records, component_types):
+ created_records = [] # List to store final records (State, PK, Component Type)
+
+ for state in state_codes:
+ for _ in range(num_records):
+ for component_type in component_types:
+ random_id, first_timestamp, second_timestamp = generate_ids_and_timestamps(state, component_type)
+
+ # Generate first record
+ onemac_record = generate_onemac_submission_record(state, random_id, first_timestamp, component_type)
+
+ # Generate second record
+ seatool_record = generate_seatool_pending_record(state, random_id, second_timestamp, component_type)
+
+ # Try to insert both records, retry if duplicate key error occurs
+ try:
+ # insert SEATOOL record first just to avoid package builder issues
+ table.put_item(Item=seatool_record)
+
+ # Add a delay of 2 second between inserting the first and second records
+ time.sleep(2)
+ table.put_item(Item=onemac_record)
+
+ print(f"Inserted records for {random_id} with component type: {component_type}")
+
+ # Add record details to created_records list
+ created_records.append([state, random_id, component_type])
+
+ except ClientError as e:
+ if e.response['Error']['Code'] == 'ConditionalCheckFailedException':
+ print(f"Duplicate ID {random_id} detected. Retrying with a new ID.")
+ continue # Generate a new ID and retry
+ else:
+ raise e # Raise the exception for non-duplicate errors
+
+ # Sort created records by State, Component Type, PK
+ created_records.sort(key=lambda x: (x[0], x[2], x[1]))
+
+ # Output final records in a table-like format
+ print("\nFinal created records:")
+ print(f"{'State':<10} {'PK':<30} {'Component Type':<20}")
+ print("-" * 60)
+ for record in created_records:
+ print(f"{record[0]:<10} {record[1]:<30} {record[2]:<20}")
+
+
+# Retrieve state codes, number of records, and component types from environment variables
+state_codes = os.getenv('STATE_CODES', 'MD,NY,CA,OH,WI').split(',') # Example: 'MD,NY,CA'
+num_records = int(os.getenv('NUM_RECORDS', '6')) # Default is 5 if not provided
+component_types = os.getenv('COMPONENT_TYPES', 'medicaidspa,chipspa,waivernew,waiverappk,waiveramendment,waiverrenewal').split(',') # Example: 'medicaidspa,chipspa,waivernew,waiverappk'
+
+# Call the insert function
+insert_records(state_codes, num_records, component_types)
diff --git a/services/admin/scripts/pk_values.json b/services/admin/scripts/pk_values.json
new file mode 100644
index 000000000..aa3a39f93
--- /dev/null
+++ b/services/admin/scripts/pk_values.json
@@ -0,0 +1,40 @@
+{
+ "pk_values": [
+ "WI-24-5681",
+ "WI-24-4068",
+ "WI-24-6952",
+ "WI-24-5766",
+ "WI-24-9659",
+ "WI-24-3678",
+ "WI-24-4176",
+ "WI-24-2648",
+ "WI-24-7668",
+ "WI-24-1278",
+ "WI-24-5949",
+ "WI-24-5076",
+ "WI-73399.R01.00",
+ "WI-74402.R00.00",
+ "WI-91643.R00.01",
+ "WI-95019.R00.00",
+ "WI-44177.R00.01",
+ "WI-91036.R00.00",
+ "WI-16228.R01.02",
+ "WI-70842.R01.00",
+ "WI-48754.R01.00",
+ "WI-78312.R00.01",
+ "WI-11759.R00.00",
+ "WI-73939.R01.00",
+ "WI-73184.R01.02",
+ "WI-92164.R01.02",
+ "WI-71371.R01.02",
+ "WI-93250.R00.00",
+ "WI-89280.R01.00",
+ "WI-14865.R01.00",
+ "WI-85003.R00.01",
+ "WI-10359.R01.02",
+ "WI-72170.R00.00",
+ "WI-97670.R00.01",
+ "WI-55406.R00.01",
+ "WI-88967.R01.02"
+ ]
+}
diff --git a/services/admin/scripts/rebuildPackagesByPk.py b/services/admin/scripts/rebuildPackagesByPk.py
new file mode 100644
index 000000000..b124ad044
--- /dev/null
+++ b/services/admin/scripts/rebuildPackagesByPk.py
@@ -0,0 +1,75 @@
+import boto3
+import datetime
+import json
+import logging
+from boto3.dynamodb.conditions import Key
+from botocore.exceptions import ClientError
+
+# Configure logging
+logging.basicConfig(level=logging.INFO)
+logger = logging.getLogger(__name__)
+
+# Variables
+dynamodb_table = "onemac-masterclone-one"
+
+# Load pk values from an external configuration file with error handling
+try:
+ with open('pk_values.json', 'r') as file:
+ pk_values = json.load(file)
+except (FileNotFoundError, json.JSONDecodeError) as e:
+ logger.error(f"Error loading pk_values.json: {e}")
+ pk_values = []
+
+# Initialize DynamoDB resource
+dynamodb = boto3.resource('dynamodb')
+table = dynamodb.Table(dynamodb_table)
+
+# Counter for updated items
+updated_count = 0
+
+# Loop through each pk value
+for pk in pk_values:
+ # Query DynamoDB for items with the specified pk and sk starting with OneMAC
+ response = table.query(
+ KeyConditionExpression=Key('pk').eq(pk) & Key('sk').begins_with('OneMAC'),
+ ProjectionExpression='pk, sk'
+ )
+
+ items = response.get('Items', [])
+
+ # Handle pagination to ensure all items are retrieved
+ while 'LastEvaluatedKey' in response:
+ response = table.query(
+ KeyConditionExpression=Key('pk').eq(pk) & Key('sk').begins_with('OneMAC'),
+ ProjectionExpression='pk, sk',
+ ExclusiveStartKey=response['LastEvaluatedKey']
+ )
+ items.extend(response.get('Items', []))
+
+ # Loop through the found items and update them
+ for item in items:
+ pk_value = item['pk']
+ sk_value = item['sk']
+
+ # Update the record to trigger a DynamoDB stream event with error handling
+ try:
+ table.update_item(
+ Key={
+ 'pk': pk_value,
+ 'sk': sk_value
+ },
+ UpdateExpression='SET #updatedAt = :timestamp',
+ ExpressionAttributeNames={
+ '#updatedAt': 'updatedAt'
+ },
+ ExpressionAttributeValues={
+ ':timestamp': datetime.datetime.now(datetime.timezone.utc).isoformat()
+ }
+ )
+ logger.info(f"Updated record with pk: {pk_value} and sk: {sk_value} to trigger DynamoDB stream")
+ updated_count += 1
+ except ClientError as e:
+ logger.error(f"Failed to update record with pk: {pk_value} and sk: {sk_value}. Error: {e.response['Error']['Message']}")
+
+# Output the total number of updated items
+logger.info(f"Total number of updated items: {updated_count}")
\ No newline at end of file
diff --git a/services/admin/scripts/setPOCs.py b/services/admin/scripts/setPOCs.py
new file mode 100644
index 000000000..66c0df19e
--- /dev/null
+++ b/services/admin/scripts/setPOCs.py
@@ -0,0 +1,100 @@
+import json
+import boto3
+import os
+from botocore.exceptions import ClientError
+
+# Load the list of GSI1SK values from an external file
+with open('pk_values.json') as f:
+ pk_values = json.load(f)
+
+GSI1PK_VALUES = [
+ "SEATool#Medicaid_SPA",
+ "SEATool#CHIP_SPA",
+ "SEATool#1915b_waivers",
+ "SEATool#1915c_waivers"
+]
+
+LEAD_ANALYST_JSON = {
+ ":leadAnalyst": {
+ "L": [
+ {
+ "M": {
+ "EMAIL": {"S": "onemaccpoc49@gmail.com"},
+ "FIRST_NAME": {"S": "OneMAC"},
+ "INITIALS": {"NULL": True},
+ "LAST_NAME": {"S": "CPOC4"},
+ "OFFICER_ID": {"N": "3743"},
+ "POSITION_ID": {"N": "538"},
+ "TELEPHONE": {"S": "(410) 555-5445"}
+ }
+ }
+ ]
+ }
+}
+
+ACTION_OFFICERS_JSON = {
+ ":actionOfficers": {
+ "L": [
+ {
+ "M": {
+ "EMAIL": {"S": "onemacsrt4@gmail.com"},
+ "FIRST_NAME": {"S": "OneMAC"},
+ "LAST_NAME": {"S": "SRT4"},
+ "OFFICER_ID": {"N": "3740"},
+ "POSITION_ID": {"N": "538"},
+ "TELEPHONE": {"S": "(410) 555-5445"}
+ }
+ }
+ ]
+ }
+}
+
+dynamodb = boto3.client('dynamodb')
+DYNAMODB_TABLE = os.getenv('DYNAMODB_TABLE', 'onemac-masterclone-one')
+
+updated_count = 0
+
+for gsi1pk in GSI1PK_VALUES:
+ for gsi1sk in pk_values['pk_values']:
+ try:
+ # Query DynamoDB for items with the specified gsi1pk and gsi1sk
+ response = dynamodb.query(
+ TableName=DYNAMODB_TABLE,
+ IndexName='GSI1',
+ KeyConditionExpression='GSI1pk = :gsi1pk AND GSI1sk = :gsi1sk',
+ ExpressionAttributeValues={
+ ':gsi1pk': {'S': gsi1pk},
+ ':gsi1sk': {'S': gsi1sk}
+ },
+ ProjectionExpression='pk, sk'
+ )
+
+ items = response.get('Items', [])
+
+ # Loop through the found items and update them
+ for item in items:
+ pk = item.get('pk', {}).get('S')
+ sk = item.get('sk', {}).get('S')
+
+ # Skip if pk or sk is empty
+ if not pk or not sk:
+ continue
+
+ # Update the record by adding or replacing the LEAD_ANALYST and ACTION_OFFICERS properties
+ dynamodb.update_item(
+ TableName=DYNAMODB_TABLE,
+ Key={
+ 'pk': {'S': pk},
+ 'sk': {'S': sk}
+ },
+ UpdateExpression='SET LEAD_ANALYST = :leadAnalyst, ACTION_OFFICERS = :actionOfficers',
+ ExpressionAttributeValues={**LEAD_ANALYST_JSON, **ACTION_OFFICERS_JSON}
+ )
+
+ print(f"Updated record with pk: {pk} and sk: {sk} with lead analyst: OneMAC CPOC05")
+ updated_count += 1
+
+ except ClientError as e:
+ print(f"Error querying or updating item with GSI1pk: {gsi1pk} and GSI1sk: {gsi1sk}: {e}")
+
+print(f"Total number of updated items: {updated_count}")
\ No newline at end of file
diff --git a/services/admin/scripts/users.json b/services/admin/scripts/users.json
new file mode 100644
index 000000000..b43b7c711
--- /dev/null
+++ b/services/admin/scripts/users.json
@@ -0,0 +1,76 @@
+{
+ "users": [
+ {
+ "password": "Passw0rd!",
+ "cms_roles": "onemac-state-user",
+ "email": "onemaccpoc9@gmail.com",
+ "family_name": "OneMAC",
+ "given_name": "CPOC2",
+ "territory": "CA",
+ "role": "systemadmin"
+ },
+ {
+ "password": "Passw0rd!",
+ "cms_roles": "onemac-state-user",
+ "email": "onemaccpoc319@gmail.com",
+ "family_name": "OneMAC",
+ "given_name": "CPOC3",
+ "territory": "OH",
+ "role": "systemadmin"
+ },
+ {
+ "password": "Passw0rd!",
+ "cms_roles": "onemac-state-user",
+ "email": "onemaccpoc49@gmail.com",
+ "family_name": "OneMAC",
+ "given_name": "CPOC4",
+ "territory": "WI",
+ "role": "systemadmin"
+ },
+ {
+ "password": "Passw0rd!",
+ "cms_roles": "onemac-state-user",
+ "email": "onemaccpoc50@gmail.com",
+ "family_name": "OneMAC",
+ "given_name": "CPOC5",
+ "territory": "NY",
+ "role": "systemadmin"
+ },
+ {
+ "password": "Passw0rd!",
+ "cms_roles": "onemac-state-user",
+ "email": "onemacsrt2@gmail.com",
+ "family_name": "OneMAC",
+ "given_name": "SRT2",
+ "territory": "CA",
+ "role": "systemadmin"
+ },
+ {
+ "password": "Passw0rd!",
+ "cms_roles": "onemac-state-user",
+ "email": "onemacsrt3@gmail.com",
+ "family_name": "OneMAC",
+ "given_name": "SRT3",
+ "territory": "OH",
+ "role": "systemadmin"
+ },
+ {
+ "password": "Passw0rd!",
+ "cms_roles": "onemac-state-user",
+ "email": "onemacsrt4@gmail.com",
+ "family_name": "OneMAC",
+ "given_name": "SRT4",
+ "territory": "WI",
+ "role": "systemadmin"
+ },
+ {
+ "password": "Passw0rd!",
+ "cms_roles": "onemac-state-user",
+ "email": "onemacsrt5@gmail.com",
+ "family_name": "OneMAC",
+ "given_name": "SRT5",
+ "territory": "NY",
+ "role": "systemadmin"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/services/admin/serverless.yml b/services/admin/serverless.yml
index 842c8e4ee..fe425b7f4 100644
--- a/services/admin/serverless.yml
+++ b/services/admin/serverless.yml
@@ -12,8 +12,6 @@ plugins:
- serverless-dotenv-plugin
- serverless-s3-bucket-helper
custom:
- esbuild:
- exclude: []
stage: ${opt:stage, self:provider.stage}
iamPermissionsBoundaryPolicy: ${ssm:/configuration/${self:custom.stage}/iam/permissionsBoundaryPolicy, ssm:/configuration/default/iam/permissionsBoundaryPolicy, ""}
oneMacTableName: onemac-${self:custom.stage}-one
@@ -42,6 +40,8 @@ provider:
environment:
NODE_OPTIONS: '--enable-source-maps'
oneMacTableName: ${self:custom.oneMacTableName}
+ layers:
+ - ${cf:aws-sdk-v2-layer-${self:custom.stage}.AwsSdkV2LambdaLayerQualifiedArn}
functions:
diff --git a/services/app-api/email/CMSSubsequentSubmissionNotice.js b/services/app-api/email/CMSSubsequentSubmissionNotice.js
index 3b0ef2e82..46beabac4 100644
--- a/services/app-api/email/CMSSubsequentSubmissionNotice.js
+++ b/services/app-api/email/CMSSubsequentSubmissionNotice.js
@@ -7,7 +7,6 @@ import { getCPOCandSRTEmailAddresses } from "../utils/getCpocAndSrtEmail.js";
* @returns {Object} email parameters in generic format.
*/
export const CMSSubsequentSubmissionNotice = async (data, config) => {
- data.submitterName = ""; // remove this bc we dont want it on the cms email
const CMSEmailItem = await getCPOCandSRTEmailAddresses(data.componentId);
const ToAddresses = CMSEmailItem.reviewTeamEmailList
@@ -20,11 +19,18 @@ export const CMSSubsequentSubmissionNotice = async (data, config) => {
let typeLabel = config.typeLabel;
// cut the type label at sub sub and set that at the new idLabel
typeLabel = typeLabel
- .substring(0, typeLabel.indexOf("Subsequent Submission"))
+ .substring(0, typeLabel.indexOf("Subsequent Documents"))
.trim();
config.idLabel = `${typeLabel} Package ID`;
}
+ // creating own object
+ const cmsSubSubDetails = {
+ componentId: data.componentId,
+ additionalInformation: data.additionalInformation,
+ attachments: data.attachments,
+ };
+
return {
ToAddresses: ToAddresses,
CcAddresses: [],
@@ -33,7 +39,7 @@ export const CMSSubsequentSubmissionNotice = async (data, config) => {
New documents have been submitted for ${config.typeLabel} ${
data.componentId
} in OneMAC.
- ${formatPackageDetails(data, config)}
+ ${formatPackageDetails(cmsSubSubDetails, config)}
How to access:
@@ -42,14 +48,11 @@ export const CMSSubsequentSubmissionNotice = async (data, config) => {
}/dashboard">this link.
- If you are not already logged in, please click the "Login" link at the
- top of the page and log in using your Enterprise User Administration
- (EUA) credentials.
+ If you are not already logged in, click “Login” at the top of the page and log in using your
+ Enterprise User Administration (EUA) credentials.
- After you have logged in, you will be taken to the OneMAC application.
- The submission will be listed on the dashboard page, and you can view
- its details by clicking on its ID number.
+ After you are logged in, click the submission ID number on the dashboard page to view details.
Thank you!
diff --git a/services/app-api/email/formatPackageDetails.js b/services/app-api/email/formatPackageDetails.js
index d7688eb40..a1d519230 100644
--- a/services/app-api/email/formatPackageDetails.js
+++ b/services/app-api/email/formatPackageDetails.js
@@ -58,7 +58,7 @@ export const formatPackageDetails = (data, config) => {
) {
detailText += `
- Files :
+ Files:
${data.attachments
.filter((u) => u && u.title && u.filename)
diff --git a/services/app-api/email/stateSubsequentSubmissionReceipt.js b/services/app-api/email/stateSubsequentSubmissionReceipt.js
index 10e848d1c..35556373c 100644
--- a/services/app-api/email/stateSubsequentSubmissionReceipt.js
+++ b/services/app-api/email/stateSubsequentSubmissionReceipt.js
@@ -11,7 +11,7 @@ export const stateSubsequentSubmissionReceipt = (data, config) => {
let typeLabel = config.typeLabel;
// cut the type label at sub sub and set that at the new idLabel
typeLabel = typeLabel
- .substring(0, typeLabel.indexOf("Subsequent Submission"))
+ .substring(0, typeLabel.indexOf("Subsequent Documents"))
.trim();
config.idLabel = `${typeLabel} Package ID`;
}
diff --git a/services/app-api/email/stateSubsequentSubmissionReceipt.test.js b/services/app-api/email/stateSubsequentSubmissionReceipt.test.js
index 3db878c07..2be3b5dcd 100644
--- a/services/app-api/email/stateSubsequentSubmissionReceipt.test.js
+++ b/services/app-api/email/stateSubsequentSubmissionReceipt.test.js
@@ -9,6 +9,7 @@ it("builds the State Submission Receipt Email", async () => {
};
const testConfig = {
typeLabel: "Test Type",
+ idLabel: "Test Id",
};
try {
const response2 = stateSubsequentSubmissionReceipt(testData, testConfig);
diff --git a/services/app-api/package-lock.json b/services/app-api/package-lock.json
index c9b5df152..95df4ad6d 100644
--- a/services/app-api/package-lock.json
+++ b/services/app-api/package-lock.json
@@ -9,9 +9,6 @@
"version": "1.0.0",
"license": "CC0-1.0",
"dependencies": {
- "@aws-sdk/client-dynamodb": "^3.454.0",
- "@aws-sdk/lib-dynamodb": "^3.454.0",
- "aws-sdk": "^2.752.0",
"cmscommonlib": "file:../common",
"date-fns": "^2.16.1",
"dynamodb-local": "^0.0.32",
@@ -22,6 +19,7 @@
},
"devDependencies": {
"@types/jest": "^29.5.5",
+ "aws-sdk": "^2.752.0",
"aws-sdk-client-mock": "^0.5.6",
"esbuild": "^0.19.4",
"esbuild-jest": "^0.5.0",
@@ -112,6 +110,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz",
"integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==",
+ "dev": true,
"dependencies": {
"tslib": "^1.11.1"
}
@@ -119,7 +118,8 @@
"node_modules/@aws-crypto/ie11-detection/node_modules/tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
},
"node_modules/@aws-crypto/sha1-browser": {
"version": "3.0.0",
@@ -148,6 +148,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz",
"integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==",
+ "dev": true,
"dependencies": {
"@aws-crypto/ie11-detection": "^3.0.0",
"@aws-crypto/sha256-js": "^3.0.0",
@@ -162,12 +163,14 @@
"node_modules/@aws-crypto/sha256-browser/node_modules/tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
},
"node_modules/@aws-crypto/sha256-js": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz",
"integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==",
+ "dev": true,
"dependencies": {
"@aws-crypto/util": "^3.0.0",
"@aws-sdk/types": "^3.222.0",
@@ -177,12 +180,14 @@
"node_modules/@aws-crypto/sha256-js/node_modules/tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
},
"node_modules/@aws-crypto/supports-web-crypto": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz",
"integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==",
+ "dev": true,
"dependencies": {
"tslib": "^1.11.1"
}
@@ -190,12 +195,14 @@
"node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
},
"node_modules/@aws-crypto/util": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz",
"integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==",
+ "dev": true,
"dependencies": {
"@aws-sdk/types": "^3.222.0",
"@aws-sdk/util-utf8-browser": "^3.0.0",
@@ -205,7 +212,8 @@
"node_modules/@aws-crypto/util/node_modules/tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
},
"node_modules/@aws-sdk/client-cloudformation": {
"version": "3.532.0",
@@ -734,67 +742,6 @@
"uuid": "dist/bin/uuid"
}
},
- "node_modules/@aws-sdk/client-dynamodb": {
- "version": "3.485.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.485.0.tgz",
- "integrity": "sha512-OgUcLIMxndkX1SlnxBtz0zvQxHlOLvpJlOjiXsx3jmhJk1qH+cR6gw0Fmpz+h3iwdR8UDYqVAGeLfP8fEYJ73A==",
- "dependencies": {
- "@aws-crypto/sha256-browser": "3.0.0",
- "@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/client-sts": "3.485.0",
- "@aws-sdk/core": "3.485.0",
- "@aws-sdk/credential-provider-node": "3.485.0",
- "@aws-sdk/middleware-endpoint-discovery": "3.485.0",
- "@aws-sdk/middleware-host-header": "3.485.0",
- "@aws-sdk/middleware-logger": "3.485.0",
- "@aws-sdk/middleware-recursion-detection": "3.485.0",
- "@aws-sdk/middleware-user-agent": "3.485.0",
- "@aws-sdk/region-config-resolver": "3.485.0",
- "@aws-sdk/types": "3.485.0",
- "@aws-sdk/util-endpoints": "3.485.0",
- "@aws-sdk/util-user-agent-browser": "3.485.0",
- "@aws-sdk/util-user-agent-node": "3.485.0",
- "@smithy/config-resolver": "^2.0.23",
- "@smithy/core": "^1.2.2",
- "@smithy/fetch-http-handler": "^2.3.2",
- "@smithy/hash-node": "^2.0.18",
- "@smithy/invalid-dependency": "^2.0.16",
- "@smithy/middleware-content-length": "^2.0.18",
- "@smithy/middleware-endpoint": "^2.3.0",
- "@smithy/middleware-retry": "^2.0.26",
- "@smithy/middleware-serde": "^2.0.16",
- "@smithy/middleware-stack": "^2.0.10",
- "@smithy/node-config-provider": "^2.1.9",
- "@smithy/node-http-handler": "^2.2.2",
- "@smithy/protocol-http": "^3.0.12",
- "@smithy/smithy-client": "^2.2.1",
- "@smithy/types": "^2.8.0",
- "@smithy/url-parser": "^2.0.16",
- "@smithy/util-base64": "^2.0.1",
- "@smithy/util-body-length-browser": "^2.0.1",
- "@smithy/util-body-length-node": "^2.1.0",
- "@smithy/util-defaults-mode-browser": "^2.0.24",
- "@smithy/util-defaults-mode-node": "^2.0.32",
- "@smithy/util-endpoints": "^1.0.8",
- "@smithy/util-middleware": "^2.0.9",
- "@smithy/util-retry": "^2.0.9",
- "@smithy/util-utf8": "^2.0.2",
- "@smithy/util-waiter": "^2.0.16",
- "tslib": "^2.5.0",
- "uuid": "^8.3.2"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@aws-sdk/client-dynamodb/node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
"node_modules/@aws-sdk/client-lambda": {
"version": "3.567.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.567.0.tgz",
@@ -1793,6 +1740,8 @@
"version": "3.485.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.485.0.tgz",
"integrity": "sha512-apN2bEn0PZs0jD4jAfvwO3dlWqw9YIQJ6TAudM1bd3S5vzWqlBBcLfQpK6taHoQaI+WqgUWXLuOf7gRFbGXKPg==",
+ "dev": true,
+ "peer": true,
"dependencies": {
"@aws-crypto/sha256-browser": "3.0.0",
"@aws-crypto/sha256-js": "3.0.0",
@@ -2321,6 +2270,8 @@
"version": "3.485.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.485.0.tgz",
"integrity": "sha512-PI4q36kVF0fpIPZyeQhrwwJZ6SRkOGvU3rX5Qn4b5UY5X+Ct1aLhqSX8/OB372UZIcnh6eSvERu8POHleDO7Jw==",
+ "dev": true,
+ "peer": true,
"dependencies": {
"@aws-crypto/sha256-browser": "3.0.0",
"@aws-crypto/sha256-js": "3.0.0",
@@ -2371,6 +2322,8 @@
"version": "3.485.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.485.0.tgz",
"integrity": "sha512-Yvi80DQcbjkYCft471ClE3HuetuNVqntCs6eFOomDcrJaqdOFrXv2kJAxky84MRA/xb7bGlDGAPbTuj1ICputg==",
+ "dev": true,
+ "peer": true,
"dependencies": {
"@smithy/core": "^1.2.2",
"@smithy/protocol-http": "^3.0.12",
@@ -2387,6 +2340,8 @@
"version": "3.485.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.485.0.tgz",
"integrity": "sha512-3XkFgwVU1XOB33dV7t9BKJ/ptdl2iS+0dxE7ecq8aqT2/gsfKmLCae1G17P8WmdD3z0kMDTvnqM2aWgUnSOkmg==",
+ "dev": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/types": "3.485.0",
"@smithy/property-provider": "^2.0.0",
@@ -2436,6 +2391,8 @@
"version": "3.485.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.485.0.tgz",
"integrity": "sha512-cFYF/Bdw7EnT4viSxYpNIv3IBkri/Yb+JpQXl8uDq7bfVJfAN5qZmK07vRkg08xL6TC4F41wshhMSAucGdTwIw==",
+ "dev": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/credential-provider-env": "3.485.0",
"@aws-sdk/credential-provider-process": "3.485.0",
@@ -2456,6 +2413,8 @@
"version": "3.485.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.485.0.tgz",
"integrity": "sha512-2DwzO2azkSzngifKDT61W/DL0tSzewuaFHiLJWdfc8Et3mdAQJ9x3KAj8u7XFpjIcGNqk7FiKjN+zeGUuNiEhA==",
+ "dev": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/credential-provider-env": "3.485.0",
"@aws-sdk/credential-provider-ini": "3.485.0",
@@ -2477,6 +2436,8 @@
"version": "3.485.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.485.0.tgz",
"integrity": "sha512-X9qS6ZO/rDKYDgWqD1YmSX7sAUUHax9HbXlgGiTTdtfhZvQh1ZmnH6wiPu5WNliafHZFtZT2W07kgrDLPld/Ug==",
+ "dev": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/types": "3.485.0",
"@smithy/property-provider": "^2.0.0",
@@ -2492,6 +2453,8 @@
"version": "3.485.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.485.0.tgz",
"integrity": "sha512-l0oC8GTrWh+LFQQfSmG1Jai1PX7Mhj9arb/CaS1/tmeZE0hgIXW++tvljYs/Dds4LGXUlaWG+P7BrObf6OyIXA==",
+ "dev": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/client-sso": "3.485.0",
"@aws-sdk/token-providers": "3.485.0",
@@ -2509,6 +2472,8 @@
"version": "3.485.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.485.0.tgz",
"integrity": "sha512-WpBFZFE0iXtnibH5POMEKITj/hR0YV5l2n9p8BEvKjdJ63s3Xke1RN20ZdIyKDaRDwj8adnKDgNPEnAKdS4kLw==",
+ "dev": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/types": "3.485.0",
"@smithy/property-provider": "^2.0.0",
@@ -2519,35 +2484,6 @@
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/endpoint-cache": {
- "version": "3.465.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/endpoint-cache/-/endpoint-cache-3.465.0.tgz",
- "integrity": "sha512-0cuotk23hVSrqxHkJ3TTWC9MVMRgwlUvCatyegJEauJnk8kpLSGXE5KVdExlUBwShGNlj7ac29okZ9m17iTi5Q==",
- "dependencies": {
- "mnemonist": "0.38.3",
- "tslib": "^2.5.0"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@aws-sdk/lib-dynamodb": {
- "version": "3.485.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/lib-dynamodb/-/lib-dynamodb-3.485.0.tgz",
- "integrity": "sha512-CazO5E6Di7IGU0j4uzsroLv4GV+ydG+awtGIBQ40ue0I5UtHXohwyWwRIYvFF+J0tAont5lYKWE+AfKhVzW+IQ==",
- "dependencies": {
- "@aws-sdk/util-dynamodb": "3.485.0",
- "@smithy/smithy-client": "^2.2.1",
- "@smithy/types": "^2.8.0",
- "tslib": "^2.5.0"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "@aws-sdk/client-dynamodb": "^3.0.0"
- }
- },
"node_modules/@aws-sdk/middleware-bucket-endpoint": {
"version": "3.525.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.525.0.tgz",
@@ -2581,22 +2517,6 @@
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/middleware-endpoint-discovery": {
- "version": "3.485.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.485.0.tgz",
- "integrity": "sha512-0AKEbTeXuKrrbMQDBywvTJTnshWSuel53CQEen6Ghd8EAgJ+x4y4K9puACWrtO6yvDFQCMoimI6hH93d9qcKZw==",
- "dependencies": {
- "@aws-sdk/endpoint-cache": "3.465.0",
- "@aws-sdk/types": "3.485.0",
- "@smithy/node-config-provider": "^2.1.9",
- "@smithy/protocol-http": "^3.0.12",
- "@smithy/types": "^2.8.0",
- "tslib": "^2.5.0"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
"node_modules/@aws-sdk/middleware-expect-continue": {
"version": "3.523.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.523.0.tgz",
@@ -2665,6 +2585,8 @@
"version": "3.485.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.485.0.tgz",
"integrity": "sha512-1mAUX9dQNGo2RIKseVj7SI/D5abQJQ/Os8hQ0NyVAyyVYF+Yjx5PphKgfhM5yoBwuwZUl6q71XPYEGNx7be6SA==",
+ "dev": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/types": "3.485.0",
"@smithy/protocol-http": "^3.0.12",
@@ -2708,6 +2630,8 @@
"version": "3.485.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.485.0.tgz",
"integrity": "sha512-O8IgJ0LHi5wTs5GlpI7nqmmSSagkVdd1shpGgQWY2h0kMSCII8CJZHBG97dlFFpGTvx5EDlhPNek7rl/6F4dRw==",
+ "dev": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/types": "3.485.0",
"@smithy/types": "^2.8.0",
@@ -2721,6 +2645,8 @@
"version": "3.485.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.485.0.tgz",
"integrity": "sha512-ZeVNATGNFcqkWDut3luVszROTUzkU5u+rJpB/xmeMoenlDAjPRiHt/ca3WkI5wAnIJ1VSNGpD2sOFLMCH+EWag==",
+ "dev": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/types": "3.485.0",
"@smithy/protocol-http": "^3.0.12",
@@ -2832,6 +2758,8 @@
"version": "3.485.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.485.0.tgz",
"integrity": "sha512-CddCVOn+OPQ0CcchketIg+WF6v+MDLAf3GOYTR2htUxxIm7HABuRd6R3kvQ5Jny9CV8gMt22G1UZITsFexSJlQ==",
+ "dev": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/types": "3.485.0",
"@aws-sdk/util-endpoints": "3.485.0",
@@ -2847,6 +2775,8 @@
"version": "3.485.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.485.0.tgz",
"integrity": "sha512-2FB2EQ0sIE+YgFqGtkE1lDIMIL6nYe6MkOHBwBM7bommadKIrbbr2L22bPZGs3ReTsxiJabjzxbuCAVhrpHmhg==",
+ "dev": true,
+ "peer": true,
"dependencies": {
"@smithy/node-config-provider": "^2.1.9",
"@smithy/types": "^2.8.0",
@@ -2894,6 +2824,8 @@
"version": "3.485.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.485.0.tgz",
"integrity": "sha512-kOXA1WKIVIFNRqHL8ynVZ3hCKLsgnEmGr2iDR6agDNw5fYIlCO/6N2xR6QdGcLTvUUbwOlz4OvKLUQnWMKAnnA==",
+ "dev": true,
+ "peer": true,
"dependencies": {
"@aws-crypto/sha256-browser": "3.0.0",
"@aws-crypto/sha256-js": "3.0.0",
@@ -2941,6 +2873,7 @@
"version": "3.485.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.485.0.tgz",
"integrity": "sha512-+QW32YQdvZRDOwrAQPo/qCyXoSjgXB6RwJwCwkd8ebJXRXw6tmGKIHaZqYHt/LtBymvnaBgBBADNa4+qFvlOFw==",
+ "dev": true,
"dependencies": {
"@smithy/types": "^2.8.0",
"tslib": "^2.5.0"
@@ -2962,24 +2895,12 @@
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/util-dynamodb": {
- "version": "3.485.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.485.0.tgz",
- "integrity": "sha512-DFDKW1wJciPKZd8whkGUMkeT9BGFANh4a5f5nMHdc1WpMIORMgE6vEks910QXgaEB46RLFMtQFpOwfPpDmOObQ==",
- "dependencies": {
- "tslib": "^2.5.0"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "@aws-sdk/client-dynamodb": "^3.0.0"
- }
- },
"node_modules/@aws-sdk/util-endpoints": {
"version": "3.485.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.485.0.tgz",
"integrity": "sha512-dTd642F7nJisApF8YjniqQ6U59CP/DCtar11fXf1nG9YNBCBsNNVw5ZfZb5nSNzaIdy27mQioWTCV18JEj1mxg==",
+ "dev": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/types": "3.485.0",
"@smithy/util-endpoints": "^1.0.8",
@@ -2993,6 +2914,7 @@
"version": "3.465.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.465.0.tgz",
"integrity": "sha512-f+QNcWGswredzC1ExNAB/QzODlxwaTdXkNT5cvke2RLX8SFU5pYk6h4uCtWC0vWPELzOfMfloBrJefBzlarhsw==",
+ "dev": true,
"dependencies": {
"tslib": "^2.5.0"
},
@@ -3004,6 +2926,8 @@
"version": "3.485.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.485.0.tgz",
"integrity": "sha512-QliWbjg0uOhGTcWgWTKPMY0SBi07g253DjwrCINT1auqDrdQPxa10xozpZExBYjAK2KuhYDNUzni127ae6MHOw==",
+ "dev": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/types": "3.485.0",
"@smithy/types": "^2.8.0",
@@ -3015,6 +2939,8 @@
"version": "3.485.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.485.0.tgz",
"integrity": "sha512-QF+aQ9jnDlPUlFBxBRqOylPf86xQuD3aEPpOErR+50qJawVvKa94uiAFdvtI9jv6hnRZmuFsTj2rsyytnbAYBA==",
+ "dev": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/types": "3.485.0",
"@smithy/node-config-provider": "^2.1.9",
@@ -3037,6 +2963,7 @@
"version": "3.259.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz",
"integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==",
+ "dev": true,
"dependencies": {
"tslib": "^2.3.1"
}
@@ -6563,6 +6490,7 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.2.0.tgz",
"integrity": "sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==",
+ "dev": true,
"dependencies": {
"@smithy/types": "^2.12.0",
"tslib": "^2.6.2"
@@ -6596,6 +6524,7 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.2.0.tgz",
"integrity": "sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA==",
+ "dev": true,
"dependencies": {
"@smithy/node-config-provider": "^2.3.0",
"@smithy/types": "^2.12.0",
@@ -6611,6 +6540,7 @@
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.4.2.tgz",
"integrity": "sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA==",
+ "dev": true,
"dependencies": {
"@smithy/middleware-endpoint": "^2.5.1",
"@smithy/middleware-retry": "^2.3.1",
@@ -6629,6 +6559,7 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz",
"integrity": "sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w==",
+ "dev": true,
"dependencies": {
"@smithy/node-config-provider": "^2.3.0",
"@smithy/property-provider": "^2.2.0",
@@ -6711,6 +6642,7 @@
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz",
"integrity": "sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw==",
+ "dev": true,
"dependencies": {
"@smithy/protocol-http": "^3.3.0",
"@smithy/querystring-builder": "^2.2.0",
@@ -6736,6 +6668,7 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.2.0.tgz",
"integrity": "sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g==",
+ "dev": true,
"dependencies": {
"@smithy/types": "^2.12.0",
"@smithy/util-buffer-from": "^2.2.0",
@@ -6765,6 +6698,7 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz",
"integrity": "sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q==",
+ "dev": true,
"dependencies": {
"@smithy/types": "^2.12.0",
"tslib": "^2.6.2"
@@ -6774,6 +6708,7 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz",
"integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==",
+ "dev": true,
"dependencies": {
"tslib": "^2.6.2"
},
@@ -6797,6 +6732,7 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz",
"integrity": "sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ==",
+ "dev": true,
"dependencies": {
"@smithy/protocol-http": "^3.3.0",
"@smithy/types": "^2.12.0",
@@ -6810,6 +6746,7 @@
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz",
"integrity": "sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ==",
+ "dev": true,
"dependencies": {
"@smithy/middleware-serde": "^2.3.0",
"@smithy/node-config-provider": "^2.3.0",
@@ -6827,6 +6764,7 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz",
"integrity": "sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA==",
+ "dev": true,
"dependencies": {
"@smithy/node-config-provider": "^2.3.0",
"@smithy/protocol-http": "^3.3.0",
@@ -6846,6 +6784,7 @@
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
"integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+ "dev": true,
"funding": [
"https://github.com/sponsors/broofa",
"https://github.com/sponsors/ctavan"
@@ -6858,6 +6797,7 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz",
"integrity": "sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q==",
+ "dev": true,
"dependencies": {
"@smithy/types": "^2.12.0",
"tslib": "^2.6.2"
@@ -6870,6 +6810,7 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz",
"integrity": "sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA==",
+ "dev": true,
"dependencies": {
"@smithy/types": "^2.12.0",
"tslib": "^2.6.2"
@@ -6882,6 +6823,7 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz",
"integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==",
+ "dev": true,
"dependencies": {
"@smithy/property-provider": "^2.2.0",
"@smithy/shared-ini-file-loader": "^2.4.0",
@@ -6896,6 +6838,7 @@
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz",
"integrity": "sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==",
+ "dev": true,
"dependencies": {
"@smithy/abort-controller": "^2.2.0",
"@smithy/protocol-http": "^3.3.0",
@@ -6911,6 +6854,7 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz",
"integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==",
+ "dev": true,
"dependencies": {
"@smithy/types": "^2.12.0",
"tslib": "^2.6.2"
@@ -6923,6 +6867,7 @@
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz",
"integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==",
+ "dev": true,
"dependencies": {
"@smithy/types": "^2.12.0",
"tslib": "^2.6.2"
@@ -6935,6 +6880,7 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz",
"integrity": "sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==",
+ "dev": true,
"dependencies": {
"@smithy/types": "^2.12.0",
"@smithy/util-uri-escape": "^2.2.0",
@@ -6948,6 +6894,7 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz",
"integrity": "sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==",
+ "dev": true,
"dependencies": {
"@smithy/types": "^2.12.0",
"tslib": "^2.6.2"
@@ -6960,6 +6907,7 @@
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz",
"integrity": "sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ==",
+ "dev": true,
"dependencies": {
"@smithy/types": "^2.12.0"
},
@@ -6971,6 +6919,7 @@
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz",
"integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==",
+ "dev": true,
"dependencies": {
"@smithy/types": "^2.12.0",
"tslib": "^2.6.2"
@@ -6983,6 +6932,7 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.3.0.tgz",
"integrity": "sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q==",
+ "dev": true,
"dependencies": {
"@smithy/is-array-buffer": "^2.2.0",
"@smithy/types": "^2.12.0",
@@ -7000,6 +6950,7 @@
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.5.1.tgz",
"integrity": "sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ==",
+ "dev": true,
"dependencies": {
"@smithy/middleware-endpoint": "^2.5.1",
"@smithy/middleware-stack": "^2.2.0",
@@ -7016,6 +6967,7 @@
"version": "2.12.0",
"resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz",
"integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==",
+ "dev": true,
"dependencies": {
"tslib": "^2.6.2"
},
@@ -7027,6 +6979,7 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.2.0.tgz",
"integrity": "sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==",
+ "dev": true,
"dependencies": {
"@smithy/querystring-parser": "^2.2.0",
"@smithy/types": "^2.12.0",
@@ -7037,6 +6990,7 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz",
"integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==",
+ "dev": true,
"dependencies": {
"@smithy/util-buffer-from": "^2.2.0",
"@smithy/util-utf8": "^2.3.0",
@@ -7050,6 +7004,7 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz",
"integrity": "sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w==",
+ "dev": true,
"dependencies": {
"tslib": "^2.6.2"
}
@@ -7058,6 +7013,7 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz",
"integrity": "sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw==",
+ "dev": true,
"dependencies": {
"tslib": "^2.6.2"
},
@@ -7069,6 +7025,7 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz",
"integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==",
+ "dev": true,
"dependencies": {
"@smithy/is-array-buffer": "^2.2.0",
"tslib": "^2.6.2"
@@ -7081,6 +7038,7 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz",
"integrity": "sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ==",
+ "dev": true,
"dependencies": {
"tslib": "^2.6.2"
},
@@ -7092,6 +7050,7 @@
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.1.tgz",
"integrity": "sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw==",
+ "dev": true,
"dependencies": {
"@smithy/property-provider": "^2.2.0",
"@smithy/smithy-client": "^2.5.1",
@@ -7107,6 +7066,7 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.1.tgz",
"integrity": "sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA==",
+ "dev": true,
"dependencies": {
"@smithy/config-resolver": "^2.2.0",
"@smithy/credential-provider-imds": "^2.3.0",
@@ -7124,6 +7084,7 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz",
"integrity": "sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ==",
+ "dev": true,
"dependencies": {
"@smithy/node-config-provider": "^2.3.0",
"@smithy/types": "^2.12.0",
@@ -7137,6 +7098,7 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz",
"integrity": "sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==",
+ "dev": true,
"dependencies": {
"tslib": "^2.6.2"
},
@@ -7148,6 +7110,7 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz",
"integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==",
+ "dev": true,
"dependencies": {
"@smithy/types": "^2.12.0",
"tslib": "^2.6.2"
@@ -7160,6 +7123,7 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.2.0.tgz",
"integrity": "sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g==",
+ "dev": true,
"dependencies": {
"@smithy/service-error-classification": "^2.1.5",
"@smithy/types": "^2.12.0",
@@ -7173,6 +7137,7 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.2.0.tgz",
"integrity": "sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA==",
+ "dev": true,
"dependencies": {
"@smithy/fetch-http-handler": "^2.5.0",
"@smithy/node-http-handler": "^2.5.0",
@@ -7191,6 +7156,7 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz",
"integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==",
+ "dev": true,
"dependencies": {
"tslib": "^2.6.2"
},
@@ -7202,6 +7168,7 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz",
"integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==",
+ "dev": true,
"dependencies": {
"@smithy/util-buffer-from": "^2.2.0",
"tslib": "^2.6.2"
@@ -7214,6 +7181,7 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.2.0.tgz",
"integrity": "sha512-IHk53BVw6MPMi2Gsn+hCng8rFA3ZmR3Rk7GllxDUW9qFJl/hiSvskn7XldkECapQVkIg/1dHpMAxI9xSTaLLSA==",
+ "dev": true,
"dependencies": {
"@smithy/abort-controller": "^2.2.0",
"@smithy/types": "^2.12.0",
@@ -8240,7 +8208,8 @@
"node_modules/bowser": {
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
- "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA=="
+ "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==",
+ "dev": true
},
"node_modules/boxen": {
"version": "7.1.1",
@@ -10704,6 +10673,7 @@
"version": "4.2.5",
"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz",
"integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==",
+ "dev": true,
"funding": [
{
"type": "paypal",
@@ -16090,14 +16060,6 @@
"mkdirp": "bin/cmd.js"
}
},
- "node_modules/mnemonist": {
- "version": "0.38.3",
- "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.3.tgz",
- "integrity": "sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw==",
- "dependencies": {
- "obliterator": "^1.6.1"
- }
- },
"node_modules/mocha": {
"version": "6.2.3",
"resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz",
@@ -16802,11 +16764,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/obliterator": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-1.6.1.tgz",
- "integrity": "sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig=="
- },
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -19777,7 +19734,8 @@
"node_modules/strnum": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz",
- "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA=="
+ "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==",
+ "dev": true
},
"node_modules/strtok3": {
"version": "6.3.0",
@@ -20135,7 +20093,8 @@
"node_modules/tslib": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
+ "dev": true
},
"node_modules/type": {
"version": "2.7.2",
diff --git a/services/app-api/package.json b/services/app-api/package.json
index d60dd5e01..57adc4c08 100644
--- a/services/app-api/package.json
+++ b/services/app-api/package.json
@@ -15,6 +15,7 @@
"devDependencies": {
"@types/jest": "^29.5.5",
"aws-sdk-client-mock": "^0.5.6",
+ "aws-sdk": "^2.752.0",
"esbuild": "^0.19.4",
"esbuild-jest": "^0.5.0",
"jest": "^29.7.0",
@@ -27,9 +28,6 @@
"xstate": "^4.26.0"
},
"dependencies": {
- "aws-sdk": "^2.752.0",
- "@aws-sdk/client-dynamodb": "^3.454.0",
- "@aws-sdk/lib-dynamodb": "^3.454.0",
"cmscommonlib": "file:../common",
"date-fns": "^2.16.1",
"dynamodb-local": "^0.0.32",
diff --git a/services/app-api/serverless.yml b/services/app-api/serverless.yml
index 78a24d3a7..f22c2ea5d 100644
--- a/services/app-api/serverless.yml
+++ b/services/app-api/serverless.yml
@@ -17,8 +17,6 @@ plugins:
- serverless-iam-helper
- serverless-s3-bucket-helper
custom:
- esbuild:
- exclude: []
stage: ${opt:stage, self:provider.stage}
oneMacTableName: onemac-${self:custom.stage}-one
iamPath: ${ssm:/configuration/${self:custom.stage}/iam/path, ssm:/configuration/default/iam/path, "/"}
@@ -92,6 +90,8 @@ provider:
tracing:
apiGateway: true
lambda: true
+ layers:
+ - ${cf:aws-sdk-v2-layer-${self:custom.stage}.AwsSdkV2LambdaLayerQualifiedArn, ""}
functions:
migrate:
diff --git a/services/app-api/utils/actionDelegate.js b/services/app-api/utils/actionDelegate.js
index c74630c7b..68b6acc04 100644
--- a/services/app-api/utils/actionDelegate.js
+++ b/services/app-api/utils/actionDelegate.js
@@ -24,9 +24,10 @@ function getDefaultActions(
break;
case Workflow.ONEMAC_STATUS.PENDING_CONCURRENCE:
case Workflow.ONEMAC_STATUS.PENDING_APPROVAL:
- if (userRole.canAccessForms)
+ if (userRole.canAccessForms) {
actions.push(Workflow.PACKAGE_ACTION.WITHDRAW);
- actions.push(Workflow.PACKAGE_ACTION.SUBSEQUENT_SUBMISSION);
+ actions.push(Workflow.PACKAGE_ACTION.SUBSEQUENT_SUBMISSION);
+ }
break;
case Workflow.ONEMAC_STATUS.RAI_ISSUED:
if (userRole.canAccessForms)
diff --git a/services/common/type/initialWaiverSubsequentSubmission.js b/services/common/type/initialWaiverSubsequentSubmission.js
index fbaa04d69..300ebb709 100644
--- a/services/common/type/initialWaiverSubsequentSubmission.js
+++ b/services/common/type/initialWaiverSubsequentSubmission.js
@@ -9,7 +9,7 @@ import { ONEMAC_TYPE } from "../workflow.js";
export const initialWaiverSubsequentSubmission = {
...initialWaiver,
componentType: ONEMAC_TYPE.WAIVER_INITIAL_SUBSEQUENT_SUBMISSION,
- typeLabel: "1915(b) Initial Waiver Subsequent Submission",
+ typeLabel: "1915(b) Initial Waiver Subsequent Documents",
idMustExist: true,
allowMultiplesWithSameId: true,
requiredAttachments: [], //default to empty and let subtype B or B4 override
diff --git a/services/common/type/medicaidSPASubsequentSubmission.js b/services/common/type/medicaidSPASubsequentSubmission.js
index 7ad688bf2..2dffc3027 100644
--- a/services/common/type/medicaidSPASubsequentSubmission.js
+++ b/services/common/type/medicaidSPASubsequentSubmission.js
@@ -2,7 +2,7 @@ import { medicaidSPA } from "./medicaidSPA.js";
export const medicaidSPASubsequentSubmission = {
...medicaidSPA,
componentType: "medicaidspasubsequent",
- typeLabel: "Medicaid SPA Subsequent Submission",
+ typeLabel: "Medicaid SPA Subsequent Documents",
idMustExist: true,
allowMultiplesWithSameId: true,
requiredAttachments: [],
diff --git a/services/common/type/waiverAmendmentSubsequentSubmission.js b/services/common/type/waiverAmendmentSubsequentSubmission.js
index 44f17dd74..f475004f8 100644
--- a/services/common/type/waiverAmendmentSubsequentSubmission.js
+++ b/services/common/type/waiverAmendmentSubsequentSubmission.js
@@ -9,7 +9,7 @@ import { ONEMAC_TYPE } from "../workflow.js";
export const waiverAmendmentSubsequentSubmission = {
...waiverAmendment,
componentType: ONEMAC_TYPE.WAIVER_AMENDMENT_SUBSEQUENT_SUBMISSION,
- typeLabel: "Waiver Amendment Subsequent Submission",
+ typeLabel: "Waiver Amendment Subsequent Documents",
idMustExist: true,
allowMultiplesWithSameId: true,
allowedParentStatuses: ["Under Review"],
diff --git a/services/common/type/waiverAppKSubsequentSubmission.js b/services/common/type/waiverAppKSubsequentSubmission.js
index 3874798b0..eb7a04585 100644
--- a/services/common/type/waiverAppKSubsequentSubmission.js
+++ b/services/common/type/waiverAppKSubsequentSubmission.js
@@ -4,7 +4,7 @@ import { ONEMAC_TYPE } from "../workflow.js";
export const waiverAppKSubsequentSubmission = {
...waiverAppendixK,
componentType: ONEMAC_TYPE.WAIVER_APP_K_SUBSEQUENT_SUBMISSION,
- typeLabel: "Waiver Appendix K Subsequent Submission",
+ typeLabel: "Waiver Appendix K Subsequent Documents",
idMustExist: true,
allowMultiplesWithSameId: true,
requiredAttachments: [],
diff --git a/services/common/type/waiverRenewalSubsequentSubmission.js b/services/common/type/waiverRenewalSubsequentSubmission.js
index 464d81ba9..e6566223f 100644
--- a/services/common/type/waiverRenewalSubsequentSubmission.js
+++ b/services/common/type/waiverRenewalSubsequentSubmission.js
@@ -10,7 +10,7 @@ export const waiverRenewalSubsequentSubmission = {
...waiverRenewal,
...waiverRenewalB4,
componentType: ONEMAC_TYPE.WAIVER_RENEWAL_SUBSEQUENT_SUBMISSION,
- typeLabel: "Waiver Renewal Subsequent Submission",
+ typeLabel: "Waiver Renewal Subsequent Documents",
idMustExist: true,
allowMultiplesWithSameId: true,
allowedParentTypes: ["waiverrenewal"],
diff --git a/services/layers/aws-sdk-v2-layer/nodejs/.bin/uuid b/services/layers/aws-sdk-v2-layer/nodejs/.bin/uuid
new file mode 120000
index 000000000..588f70ecc
--- /dev/null
+++ b/services/layers/aws-sdk-v2-layer/nodejs/.bin/uuid
@@ -0,0 +1 @@
+../uuid/dist/bin/uuid
\ No newline at end of file
diff --git a/services/layers/aws-sdk-v2-layer/nodejs/.package-lock.json b/services/layers/aws-sdk-v2-layer/nodejs/.package-lock.json
new file mode 100644
index 000000000..83cc86d3e
--- /dev/null
+++ b/services/layers/aws-sdk-v2-layer/nodejs/.package-lock.json
@@ -0,0 +1,423 @@
+{
+ "name": "aws-sdk-v2-layer",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
+ "dependencies": {
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/aws-sdk": {
+ "version": "2.1691.0",
+ "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1691.0.tgz",
+ "integrity": "sha512-/F2YC+DlsY3UBM2Bdnh5RLHOPNibS/+IcjUuhP8XuctyrN+MlL+fWDAiela32LTDk7hMy4rx8MTgvbJ+0blO5g==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "buffer": "4.9.2",
+ "events": "1.1.1",
+ "ieee754": "1.1.13",
+ "jmespath": "0.16.0",
+ "querystring": "0.2.0",
+ "sax": "1.2.1",
+ "url": "0.10.3",
+ "util": "^0.12.4",
+ "uuid": "8.0.0",
+ "xml2js": "0.6.2"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/buffer": {
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
+ "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
+ "dependencies": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/events": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
+ "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==",
+ "engines": {
+ "node": ">=0.4.x"
+ }
+ },
+ "node_modules/for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "dependencies": {
+ "is-callable": "^1.1.3"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/ieee754": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
+ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/is-arguments": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
+ "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-generator-function": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
+ "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
+ "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
+ "dependencies": {
+ "which-typed-array": "^1.1.14"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "node_modules/jmespath": {
+ "version": "0.16.0",
+ "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz",
+ "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==",
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/possible-typed-array-names": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
+ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw=="
+ },
+ "node_modules/querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==",
+ "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.",
+ "engines": {
+ "node": ">=0.4.x"
+ }
+ },
+ "node_modules/sax": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz",
+ "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA=="
+ },
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/url": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz",
+ "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==",
+ "dependencies": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ }
+ },
+ "node_modules/util": {
+ "version": "0.12.5",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
+ "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "is-arguments": "^1.0.4",
+ "is-generator-function": "^1.0.7",
+ "is-typed-array": "^1.1.3",
+ "which-typed-array": "^1.1.2"
+ }
+ },
+ "node_modules/uuid": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz",
+ "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/which-typed-array": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
+ "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/xml2js": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz",
+ "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==",
+ "dependencies": {
+ "sax": ">=0.6.0",
+ "xmlbuilder": "~11.0.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/xmlbuilder": {
+ "version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
+ "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
+ "engines": {
+ "node": ">=4.0"
+ }
+ }
+ }
+}
diff --git a/services/layers/aws-sdk-v2-layer/nodejs/package-lock.json b/services/layers/aws-sdk-v2-layer/nodejs/package-lock.json
new file mode 100644
index 000000000..2a21f676e
--- /dev/null
+++ b/services/layers/aws-sdk-v2-layer/nodejs/package-lock.json
@@ -0,0 +1,431 @@
+{
+ "name": "nodejs",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "nodejs",
+ "version": "1.0.0",
+ "license": "ISC",
+ "dependencies": {
+ "aws-sdk": "^2.1691.0"
+ }
+ },
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
+ "dependencies": {
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/aws-sdk": {
+ "version": "2.1691.0",
+ "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1691.0.tgz",
+ "integrity": "sha512-/F2YC+DlsY3UBM2Bdnh5RLHOPNibS/+IcjUuhP8XuctyrN+MlL+fWDAiela32LTDk7hMy4rx8MTgvbJ+0blO5g==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "buffer": "4.9.2",
+ "events": "1.1.1",
+ "ieee754": "1.1.13",
+ "jmespath": "0.16.0",
+ "querystring": "0.2.0",
+ "sax": "1.2.1",
+ "url": "0.10.3",
+ "util": "^0.12.4",
+ "uuid": "8.0.0",
+ "xml2js": "0.6.2"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/buffer": {
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
+ "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
+ "dependencies": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/events": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
+ "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==",
+ "engines": {
+ "node": ">=0.4.x"
+ }
+ },
+ "node_modules/for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "dependencies": {
+ "is-callable": "^1.1.3"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/ieee754": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
+ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/is-arguments": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
+ "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-generator-function": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
+ "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
+ "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
+ "dependencies": {
+ "which-typed-array": "^1.1.14"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "node_modules/jmespath": {
+ "version": "0.16.0",
+ "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz",
+ "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==",
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/possible-typed-array-names": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
+ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw=="
+ },
+ "node_modules/querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==",
+ "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.",
+ "engines": {
+ "node": ">=0.4.x"
+ }
+ },
+ "node_modules/sax": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz",
+ "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA=="
+ },
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/url": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz",
+ "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==",
+ "dependencies": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ }
+ },
+ "node_modules/util": {
+ "version": "0.12.5",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
+ "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "is-arguments": "^1.0.4",
+ "is-generator-function": "^1.0.7",
+ "is-typed-array": "^1.1.3",
+ "which-typed-array": "^1.1.2"
+ }
+ },
+ "node_modules/uuid": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz",
+ "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/which-typed-array": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
+ "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/xml2js": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz",
+ "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==",
+ "dependencies": {
+ "sax": ">=0.6.0",
+ "xmlbuilder": "~11.0.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/xmlbuilder": {
+ "version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
+ "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
+ "engines": {
+ "node": ">=4.0"
+ }
+ }
+ }
+}
diff --git a/services/layers/aws-sdk-v2-layer/nodejs/package.json b/services/layers/aws-sdk-v2-layer/nodejs/package.json
new file mode 100644
index 000000000..db199a34e
--- /dev/null
+++ b/services/layers/aws-sdk-v2-layer/nodejs/package.json
@@ -0,0 +1,12 @@
+{
+ "name": "aws-sdk-v2-layer",
+ "version": "1.0.0",
+ "description": "",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "dependencies": {
+ "aws-sdk": "^2.752.0"
+ }
+}
diff --git a/services/layers/aws-sdk-v2-layer/serverless.yml b/services/layers/aws-sdk-v2-layer/serverless.yml
new file mode 100644
index 000000000..6d996e607
--- /dev/null
+++ b/services/layers/aws-sdk-v2-layer/serverless.yml
@@ -0,0 +1,16 @@
+service: aws-sdk-v2-layer
+
+provider:
+ name: aws
+ runtime: nodejs20.x
+
+# Define the Lambda layer
+layers:
+ awsSdkV2:
+ path: .
+ compatibleRuntimes:
+ - nodejs20.x
+
+# Package the layer
+package:
+ individually: true
diff --git a/services/seatool-sink/package.json b/services/seatool-sink/package.json
index 6245ba1f9..64c4dc84d 100644
--- a/services/seatool-sink/package.json
+++ b/services/seatool-sink/package.json
@@ -5,12 +5,12 @@
"scripts": {},
"dependencies": {
"cmscommonlib": "file:../common",
- "aws-sdk": "^2.752.0",
"kafka-node": "^5.0.0",
"kafkajs": "^1.14.0",
"lodash": "^4.17.20"
},
"devDependencies": {
+ "aws-sdk": "^2.752.0",
"esbuild": "^0.19.4",
"serverless-dotenv-plugin": "^3.12.2",
"serverless-esbuild": "^1.48.4",
diff --git a/services/seatool-sink/serverless.yml b/services/seatool-sink/serverless.yml
index 460132fc7..4cd41863a 100644
--- a/services/seatool-sink/serverless.yml
+++ b/services/seatool-sink/serverless.yml
@@ -12,8 +12,6 @@ plugins:
- serverless-s3-bucket-helper
custom:
- esbuild:
- exclude: []
stage: ${opt:stage, self:provider.stage}
iamPath: ${ssm:/configuration/${self:custom.stage}/iam/path, ssm:/configuration/default/iam/path}
iamPermissionsBoundaryPolicy: ${ssm:/configuration/${self:custom.stage}/iam/permissionsBoundaryPolicy, ssm:/configuration/default/iam/permissionsBoundaryPolicy, ""}
@@ -49,6 +47,8 @@ provider:
runtime: nodejs20.x
region: us-east-1
stage: dev
+ layers:
+ - ${cf:aws-sdk-v2-layer-${self:custom.stage}.AwsSdkV2LambdaLayerQualifiedArn}
functions:
seaToolEvent:
diff --git a/services/source/package.json b/services/source/package.json
index 116b23bb7..c4dd6cb13 100644
--- a/services/source/package.json
+++ b/services/source/package.json
@@ -7,10 +7,10 @@
"cfn-response-async": "^1.0.0",
"kafkajs": "^1.14.0",
"lodash": "^4.17.20",
- "serverless-plugin-scripts": "^1.0.2",
- "aws-sdk": "^2.752.0"
+ "serverless-plugin-scripts": "^1.0.2"
},
"devDependencies": {
+ "aws-sdk": "^2.752.0",
"serverless-bundle": "^5.3.0"
}
}
diff --git a/services/source/serverless.yml b/services/source/serverless.yml
index d532cb758..61635e31d 100644
--- a/services/source/serverless.yml
+++ b/services/source/serverless.yml
@@ -20,8 +20,6 @@ custom:
migrationTableName: onemac-${self:service}-${self:custom.stage}-migration
bootstrapBrokerStringTls: ${ssm:/configuration/${self:custom.stage}/bigmac/bootstrapBrokerStringTls, ssm:/configuration/default/bigmac/bootstrapBrokerStringTls}
vpcId: ${ssm:/configuration/${self:custom.stage}/vpc/id, ssm:/configuration/default/vpc/id}
- esbuild:
- exclude: []
dataSubnets:
- ${ssm:/configuration/${self:custom.stage}/vpc/subnets/data/a/id, ssm:/configuration/default/vpc/subnets/data/a/id}
- ${ssm:/configuration/${self:custom.stage}/vpc/subnets/data/b/id, ssm:/configuration/default/vpc/subnets/data/b/id}
@@ -47,6 +45,8 @@ provider:
runtime: nodejs20.x
region: us-east-1
stage: dev
+ layers:
+ - ${cf:aws-sdk-v2-layer-${self:custom.stage}.AwsSdkV2LambdaLayerQualifiedArn}
params:
develop:
diff --git a/services/ui-src/src/index.scss b/services/ui-src/src/index.scss
index bb7613fff..8acfc89d3 100644
--- a/services/ui-src/src/index.scss
+++ b/services/ui-src/src/index.scss
@@ -2955,3 +2955,9 @@ article.form-container {
@extend .ds-c-button;
margin: 10px;
}
+.accordion-button > svg {
+ display: none;
+}
+.inversed-accordion-button > svg {
+ display: none;
+}
\ No newline at end of file
diff --git a/services/ui-src/src/libs/formLib.tsx b/services/ui-src/src/libs/formLib.tsx
index ad087b118..41b01dbb4 100644
--- a/services/ui-src/src/libs/formLib.tsx
+++ b/services/ui-src/src/libs/formLib.tsx
@@ -67,6 +67,19 @@ export const DefaultFileTypesInfo = () => (
);
+
+export const DefaultFileTypesInfoSubSub = () => (
+
+ We accept the following file formats: .docx, .jpg, .pdf, .png, .xlsx, and more:{" "}
+ See the full list on the{" "}
+
+ FAQ Page
+
+ .
+
+);
+
+
export const DefaultFileSizeInfo = ({ route }: { route: string }) => (
Maximum file size of {config.MAX_ATTACHMENT_SIZE_MB} MB per attachment.{" "}
@@ -104,7 +117,7 @@ export const defaultSubsequentAttachmentInstructionsJSX = (
) => (
<>
-
+
>
);
@@ -134,7 +147,7 @@ export const defaultOneMACFormConfig = {
export const defaultSubsequentSubmissionFormConfig = {
...defaultOneMACFormConfig,
- addlInfoTitle: "Reason for subsequent submission",
+ addlInfoTitle: "Reason for subsequent documents",
addlInfoText: "Explain why additional documents are being submitted.",
};
@@ -181,11 +194,10 @@ export const defaultConfirmSubmitMessageSubsequentSubmission = (
);
export const defaultConfirmSubsequentSubmission: ConfirmSubmitType = {
- confirmSubmitHeading: "OneMAC only for document submission",
+ confirmSubmitHeading: "Submit additional documents?",
confirmSubmitMessage: (
- States and CMS reviewers will communicate about the submission through
- email.
+ These documents will be added to the package and reviewed by CMS.
),
};
diff --git a/services/ui-src/src/page/OneMACForm.tsx b/services/ui-src/src/page/OneMACForm.tsx
index 57af0d241..7ac971412 100644
--- a/services/ui-src/src/page/OneMACForm.tsx
+++ b/services/ui-src/src/page/OneMACForm.tsx
@@ -316,7 +316,10 @@ const OneMACForm: React.FC<{ formConfig: OneMACFormConfig }> = ({
);
const isAdditionalInformationReady: boolean = Boolean(
- formConfig.addlInfoRequired ? oneMacFormData.additionalInformation : true
+ formConfig.addlInfoRequired
+ ? oneMacFormData.additionalInformation &&
+ oneMacFormData.additionalInformation.trim().length > 0
+ : true
);
setIsSubmissionReady(
diff --git a/services/ui-src/src/page/chip-spa/ChipSPASubsequentSubmissionForm.test.js b/services/ui-src/src/page/chip-spa/ChipSPASubsequentSubmissionForm.test.js
index 5482608be..2dc2b47e2 100644
--- a/services/ui-src/src/page/chip-spa/ChipSPASubsequentSubmissionForm.test.js
+++ b/services/ui-src/src/page/chip-spa/ChipSPASubsequentSubmissionForm.test.js
@@ -14,7 +14,7 @@ jest.mock("../../utils/PackageApi");
window.HTMLElement.prototype.scrollIntoView = jest.fn();
window.scrollTo = jest.fn();
-describe("Chip SPA Subsequent Submission Form", () => {
+describe("Chip SPA Subsequent Documents Form", () => {
let history;
beforeEach(() => {
diff --git a/services/ui-src/src/page/chip-spa/ChipSPASubsequentSubmissionForm.tsx b/services/ui-src/src/page/chip-spa/ChipSPASubsequentSubmissionForm.tsx
index dd10362ee..22e67e510 100644
--- a/services/ui-src/src/page/chip-spa/ChipSPASubsequentSubmissionForm.tsx
+++ b/services/ui-src/src/page/chip-spa/ChipSPASubsequentSubmissionForm.tsx
@@ -17,7 +17,7 @@ export const chipSPASubsequentSubmissionFormInfo: OneMACFormConfig = {
...defaultSubsequentSubmissionFormConfig,
...chipSPASubsequentSubmission,
pageTitle: "Upload Subsequent CHIP SPA Documentation",
- detailsHeader: "CHIP SPA Subsequent Submission",
+ detailsHeader: "CHIP SPA Subsequent Documents",
landingPage: ONEMAC_ROUTES.PACKAGE_LIST_SPA,
confirmSubmit: defaultConfirmSubsequentSubmission,
validateParentAPI: "validateParentOfAny",
diff --git a/services/ui-src/src/page/initial-waiver/InitialWaiverSubsequentSubmissionForm.test.js b/services/ui-src/src/page/initial-waiver/InitialWaiverSubsequentSubmissionForm.test.js
index a9ea6b7fa..bc5649cdc 100644
--- a/services/ui-src/src/page/initial-waiver/InitialWaiverSubsequentSubmissionForm.test.js
+++ b/services/ui-src/src/page/initial-waiver/InitialWaiverSubsequentSubmissionForm.test.js
@@ -18,7 +18,7 @@ jest.mock("../../utils/PackageApi");
window.HTMLElement.prototype.scrollIntoView = jest.fn();
window.scrollTo = jest.fn();
-describe("1915(b) Initial Waiver Subsequent Submission Form", () => {
+describe("1915(b) Initial Waiver Subsequent Documents Form", () => {
let history;
beforeEach(() => {
diff --git a/services/ui-src/src/page/initial-waiver/InitialWaiverSubsequentSubmissionForm.tsx b/services/ui-src/src/page/initial-waiver/InitialWaiverSubsequentSubmissionForm.tsx
index 0d9e01090..984b4b237 100644
--- a/services/ui-src/src/page/initial-waiver/InitialWaiverSubsequentSubmissionForm.tsx
+++ b/services/ui-src/src/page/initial-waiver/InitialWaiverSubsequentSubmissionForm.tsx
@@ -23,7 +23,7 @@ export const initialWaiverSubsequentSubmissionFormInfo: OneMACFormConfig = {
...defaultSubsequentSubmissionFormConfig,
...initialWaiverSubsequentSubmission,
pageTitle: "Upload Subsequent Waiver Documentation",
- detailsHeader: "Initial Waiver Subsequent Submission",
+ detailsHeader: "Initial Waiver Subsequent Documents",
landingPage: ONEMAC_ROUTES.PACKAGE_LIST_WAIVER,
confirmSubmit: defaultConfirmSubsequentSubmission,
validateParentAPI: "validateParentOfAny",
diff --git a/services/ui-src/src/page/medicaid-spa/MedicaidSPASubsequentSubmissionForm.test.js b/services/ui-src/src/page/medicaid-spa/MedicaidSPASubsequentSubmissionForm.test.js
index 5be5eb843..cacc945a3 100644
--- a/services/ui-src/src/page/medicaid-spa/MedicaidSPASubsequentSubmissionForm.test.js
+++ b/services/ui-src/src/page/medicaid-spa/MedicaidSPASubsequentSubmissionForm.test.js
@@ -14,7 +14,7 @@ jest.mock("../../utils/PackageApi");
window.HTMLElement.prototype.scrollIntoView = jest.fn();
window.scrollTo = jest.fn();
-describe("Medicaid SPA Subsequent Submission Form", () => {
+describe("Medicaid SPA Subsequent Documents Form", () => {
let history;
beforeEach(() => {
diff --git a/services/ui-src/src/page/medicaid-spa/MedicaidSPASubsequentSubmissionForm.tsx b/services/ui-src/src/page/medicaid-spa/MedicaidSPASubsequentSubmissionForm.tsx
index c9cca11f6..84731b9b7 100644
--- a/services/ui-src/src/page/medicaid-spa/MedicaidSPASubsequentSubmissionForm.tsx
+++ b/services/ui-src/src/page/medicaid-spa/MedicaidSPASubsequentSubmissionForm.tsx
@@ -17,7 +17,7 @@ export const medicaidSPASubsequentSubmissionFormInfo: OneMACFormConfig = {
...defaultSubsequentSubmissionFormConfig,
...medicaidSPASubsequentSubmission,
pageTitle: "Upload Subsequent Medicaid SPA Documentation",
- detailsHeader: "Medicaid SPA Subsequent Submission",
+ detailsHeader: "Medicaid SPA Subsequent Documents",
landingPage: ONEMAC_ROUTES.PACKAGE_LIST_SPA,
confirmSubmit: defaultConfirmSubsequentSubmission,
validateParentAPI: "validateParentOfAny",
diff --git a/services/ui-src/src/page/section/AdditionalInfoSection.tsx b/services/ui-src/src/page/section/AdditionalInfoSection.tsx
index 75578a42f..0730ffb35 100644
--- a/services/ui-src/src/page/section/AdditionalInfoSection.tsx
+++ b/services/ui-src/src/page/section/AdditionalInfoSection.tsx
@@ -11,7 +11,7 @@ export const AdditionalInfoSection: FC<{
{isSubSub
- ? "Reason for subsequent submission"
+ ? "Reason for subsequent documents"
: "Additional Information"}
{
+describe("1915(b) Waiver Amendment Subsequent Documents Form", () => {
let history;
beforeEach(() => {
diff --git a/services/ui-src/src/page/waiver-amendment/WaiverAmendmentSubsequentSubmissionForm.tsx b/services/ui-src/src/page/waiver-amendment/WaiverAmendmentSubsequentSubmissionForm.tsx
index 15c3a96fd..a5f1a4549 100644
--- a/services/ui-src/src/page/waiver-amendment/WaiverAmendmentSubsequentSubmissionForm.tsx
+++ b/services/ui-src/src/page/waiver-amendment/WaiverAmendmentSubsequentSubmissionForm.tsx
@@ -23,7 +23,7 @@ export const waiverAmendmentSubsequentSubmissionFormInfo: OneMACFormConfig = {
...defaultSubsequentSubmissionFormConfig,
...waiverAmendmentSubsequentSubmission,
pageTitle: "Upload Subsequent Waiver Amendment Documentation",
- detailsHeader: "Waiver Amendment Subsequent Submission",
+ detailsHeader: "Waiver Amendment Subsequent Documents",
landingPage: ONEMAC_ROUTES.PACKAGE_LIST_WAIVER,
confirmSubmit: defaultConfirmSubsequentSubmission,
validateParentAPI: "validateParentOfWaiverAmendment",
diff --git a/services/ui-src/src/page/waiver-appendix-k/WaiverAppKSubsequentSubmissionForm.test.js b/services/ui-src/src/page/waiver-appendix-k/WaiverAppKSubsequentSubmissionForm.test.js
index 6248a3a8a..7cf961d69 100644
--- a/services/ui-src/src/page/waiver-appendix-k/WaiverAppKSubsequentSubmissionForm.test.js
+++ b/services/ui-src/src/page/waiver-appendix-k/WaiverAppKSubsequentSubmissionForm.test.js
@@ -15,7 +15,7 @@ jest.mock("../../utils/PackageApi");
window.HTMLElement.prototype.scrollIntoView = jest.fn();
window.scrollTo = jest.fn();
-describe("1915(c) Waiver Appendix K Subsequent Submission Form", () => {
+describe("1915(c) Waiver Appendix K Subsequent Documents Form", () => {
let history;
beforeEach(() => {
diff --git a/services/ui-src/src/page/waiver-appendix-k/WaiverAppKSubsequentSubmissionForm.tsx b/services/ui-src/src/page/waiver-appendix-k/WaiverAppKSubsequentSubmissionForm.tsx
index a835f957b..16ed55e32 100644
--- a/services/ui-src/src/page/waiver-appendix-k/WaiverAppKSubsequentSubmissionForm.tsx
+++ b/services/ui-src/src/page/waiver-appendix-k/WaiverAppKSubsequentSubmissionForm.tsx
@@ -17,7 +17,7 @@ export const waiverAppKSubsequentSubmissionFormInfo: OneMACFormConfig = {
...defaultSubsequentSubmissionFormConfig,
...waiverAppKSubsequentSubmission,
pageTitle: "Upload Subsequent 1915(c) Appendix K Documentation",
- detailsHeader: "1915(c) Appendix K Subsequent Submission",
+ detailsHeader: "1915(c) Appendix K Subsequent Documents",
landingPage: ONEMAC_ROUTES.PACKAGE_LIST_WAIVER,
confirmSubmit: defaultConfirmSubsequentSubmission,
validateParentAPI: "validateParentOfAny",
diff --git a/services/ui-src/src/page/waiver-renewal/WaiverRenewalSubsequentSubmissionForm.test.js b/services/ui-src/src/page/waiver-renewal/WaiverRenewalSubsequentSubmissionForm.test.js
index e92c9531b..0b5974319 100644
--- a/services/ui-src/src/page/waiver-renewal/WaiverRenewalSubsequentSubmissionForm.test.js
+++ b/services/ui-src/src/page/waiver-renewal/WaiverRenewalSubsequentSubmissionForm.test.js
@@ -18,7 +18,7 @@ jest.mock("../../utils/PackageApi");
window.HTMLElement.prototype.scrollIntoView = jest.fn();
window.scrollTo = jest.fn();
-describe("1915(b) Waiver Renewal Subsequent Submission Form", () => {
+describe("1915(b) Waiver Renewal Subsequent Documents Form", () => {
let history;
beforeEach(() => {
diff --git a/services/ui-src/src/page/waiver-renewal/WaiverRenewalSubsequentSubmissionForm.tsx b/services/ui-src/src/page/waiver-renewal/WaiverRenewalSubsequentSubmissionForm.tsx
index ba36b0ed6..29081f0b2 100644
--- a/services/ui-src/src/page/waiver-renewal/WaiverRenewalSubsequentSubmissionForm.tsx
+++ b/services/ui-src/src/page/waiver-renewal/WaiverRenewalSubsequentSubmissionForm.tsx
@@ -23,7 +23,7 @@ export const waiverRenewalSubsequentSubmissionFormInfo: OneMACFormConfig = {
...defaultSubsequentSubmissionFormConfig,
...waiverRenewalSubsequentSubmission,
pageTitle: "Upload Subsequent Waiver Renewal Documentation",
- detailsHeader: "Waiver Renewal Subsequent Submission",
+ detailsHeader: "Waiver Renewal Subsequent Documents",
landingPage: ONEMAC_ROUTES.PACKAGE_LIST_WAIVER,
confirmSubmit: defaultConfirmSubsequentSubmission,
validateParentAPI: "validateParentOfWaiverRenewal",
diff --git a/services/ui-src/src/setupTests.js b/services/ui-src/src/setupTests.js
index 7b6f79bb9..97d6d79fb 100644
--- a/services/ui-src/src/setupTests.js
+++ b/services/ui-src/src/setupTests.js
@@ -16,4 +16,4 @@ jest.mock("focus-trap", () => {
unpause: () => {},
};
return () => trap;
-});
+});
\ No newline at end of file
diff --git a/services/ui-src/src/utils/fileTypes.tsx b/services/ui-src/src/utils/fileTypes.tsx
index 71534eb22..d3ed8c773 100644
--- a/services/ui-src/src/utils/fileTypes.tsx
+++ b/services/ui-src/src/utils/fileTypes.tsx
@@ -11,7 +11,7 @@ export const FILE_TYPES: FileTypeInfo[] = [
{ extension: ".doc", description: "MS Word Document" },
{ extension: ".docx", description: "MS Word Document (xml)" },
{ extension: ".gif", description: "Graphics Interchange Format" },
- { extension: ".jpeg", description: "Joint Photographic Experts Group" },
+ { extension: ".jpg", description: "Joint Photographic Experts Group" },
{ extension: ".odp", description: "OpenDocument Presentation (OpenOffice)" },
{ extension: ".ods", description: "OpenDocument Spreadsheet (OpenOffice)" },
{ extension: ".odt", description: "OpenDocument Text (OpenOffice)" },
diff --git a/tests/cypress/cypress/e2e/Subsequent_Submission_1915b_Amendment_Waiver.spec.feature b/tests/cypress/cypress/e2e/Subsequent_Submission_1915b_Amendment_Waiver.spec.feature
index f3d434f99..4242f8ec6 100644
--- a/tests/cypress/cypress/e2e/Subsequent_Submission_1915b_Amendment_Waiver.spec.feature
+++ b/tests/cypress/cypress/e2e/Subsequent_Submission_1915b_Amendment_Waiver.spec.feature
@@ -14,7 +14,7 @@ Feature: Subsequent Submission 1915b Waiver Amendment
Then click Under Review checkbox
Then Click on Filter Button
- Scenario: Screen Enhance - Subsequent Document from the details page
+ Scenario: Screen Enhance - Subsequent Documents from the details page
Then click the Waiver Number link in the first row
Then verify the package details page is visible
Then verify Upload Subsequent Documents action exists
@@ -31,8 +31,8 @@ Feature: Subsequent Submission 1915b Waiver Amendment
Then into "Reason for subsequent submission" type "This is an automated subsequent submission test."
Then Click the Submit Button without waiting
Then verify the modal pop-up is visible
- Then verify the dialog title contains "OneMAC only for document submission"
- Then verify the detailed text in the modal contains "States and CMS reviewers will communicate about the submission through email."
+ Then verify the dialog title contains "Submit additional documents?"
+ Then verify the detailed text in the modal contains "These documents will be added to the package and reviewed by CMS."
Then verify the yes, submit modal button is visible and clickable
Then click modal cancel button
Then click form cancel button
@@ -55,8 +55,8 @@ Feature: Subsequent Submission 1915b Waiver Amendment
Then into "Reason for subsequent submission" type "This is an automated subsequent submission test."
Then Click the Submit Button without waiting
Then verify the modal pop-up is visible
- Then verify the dialog title contains "OneMAC only for document submission"
- Then verify the detailed text in the modal contains "States and CMS reviewers will communicate about the submission through email."
+ Then verify the dialog title contains "Submit additional documents?"
+ Then verify the detailed text in the modal contains "These documents will be added to the package and reviewed by CMS."
Then verify the yes, submit modal button is visible and clickable
Then click modal cancel button
Then click form cancel button
@@ -71,8 +71,8 @@ Feature: Subsequent Submission 1915b Waiver Amendment
Then into "Reason for subsequent submission" type "This is an automated subsequent submission test."
Then Click the Submit Button without waiting
Then verify the modal pop-up is visible
- Then verify the dialog title contains "OneMAC only for document submission"
- Then verify the detailed text in the modal contains "States and CMS reviewers will communicate about the submission through email."
+ Then verify the dialog title contains "Submit additional documents?"
+ Then verify the detailed text in the modal contains "These documents will be added to the package and reviewed by CMS."
Then verify the yes, submit modal button is visible and clickable
Then click the yes, submit modal button
Then i am on Dashboard Page
@@ -87,8 +87,8 @@ Feature: Subsequent Submission 1915b Waiver Amendment
Then into "Reason for subsequent submission" type "This is an automated subsequent submission test."
Then Click the Submit Button without waiting
Then verify the modal pop-up is visible
- Then verify the dialog title contains "OneMAC only for document submission"
- Then verify the detailed text in the modal contains "States and CMS reviewers will communicate about the submission through email."
+ Then verify the dialog title contains "Submit additional documents?"
+ Then verify the detailed text in the modal contains "These documents will be added to the package and reviewed by CMS."
Then verify the yes, submit modal button is visible and clickable
Then click the yes, submit modal button
Then verify the package details page is visible
diff --git a/tests/cypress/cypress/e2e/Subsequent_Submission_1915c_Appendix_K.spec.feature b/tests/cypress/cypress/e2e/Subsequent_Submission_1915c_Appendix_K.spec.feature
index d6d2a0c99..76aee7bec 100644
--- a/tests/cypress/cypress/e2e/Subsequent_Submission_1915c_Appendix_K.spec.feature
+++ b/tests/cypress/cypress/e2e/Subsequent_Submission_1915c_Appendix_K.spec.feature
@@ -14,7 +14,7 @@ Feature: Subsequent Submission 1915c App K Waiver
Then click Under Review checkbox
Then Click on Filter Button
- Scenario: Screen Enhance - Subsequent Document from the details page
+ Scenario: Screen Enhance - Subsequent Documents from the details page
Then click the Waiver Number link in the first row
Then verify the package details page is visible
Then verify Upload Subsequent Documents action exists
@@ -31,8 +31,8 @@ Feature: Subsequent Submission 1915c App K Waiver
Then into "Reason for subsequent submission" type "This is an automated subsequent submission test."
Then Click the Submit Button without waiting
Then verify the modal pop-up is visible
- Then verify the dialog title contains "OneMAC only for document submission"
- Then verify the detailed text in the modal contains "States and CMS reviewers will communicate about the submission through email."
+ Then verify the dialog title contains "Submit additional documents?"
+ Then verify the detailed text in the modal contains "These documents will be added to the package and reviewed by CMS."
Then verify the yes, submit modal button is visible and clickable
Then click modal cancel button
Then click form cancel button
@@ -55,8 +55,8 @@ Feature: Subsequent Submission 1915c App K Waiver
Then into "Reason for subsequent submission" type "This is an automated subsequent submission test."
Then Click the Submit Button without waiting
Then verify the modal pop-up is visible
- Then verify the dialog title contains "OneMAC only for document submission"
- Then verify the detailed text in the modal contains "States and CMS reviewers will communicate about the submission through email."
+ Then verify the dialog title contains "Submit additional documents?"
+ Then verify the detailed text in the modal contains "These documents will be added to the package and reviewed by CMS."
Then verify the yes, submit modal button is visible and clickable
Then click modal cancel button
Then click form cancel button
@@ -72,8 +72,8 @@ Feature: Subsequent Submission 1915c App K Waiver
Then into "Reason for subsequent submission" type "This is an automated subsequent submission test."
Then Click the Submit Button without waiting
Then verify the modal pop-up is visible
- Then verify the dialog title contains "OneMAC only for document submission"
- Then verify the detailed text in the modal contains "States and CMS reviewers will communicate about the submission through email."
+ Then verify the dialog title contains "Submit additional documents?"
+ Then verify the detailed text in the modal contains "These documents will be added to the package and reviewed by CMS."
Then click the yes, submit modal button
Then i am on Dashboard Page
Then verify the success message is "Documents submitted"
@@ -88,8 +88,8 @@ Feature: Subsequent Submission 1915c App K Waiver
Then into "Reason for subsequent submission" type "This is an automated subsequent submission test."
Then Click the Submit Button without waiting
Then verify the modal pop-up is visible
- Then verify the dialog title contains "OneMAC only for document submission"
- Then verify the detailed text in the modal contains "States and CMS reviewers will communicate about the submission through email."
+ Then verify the dialog title contains "Submit additional documents?"
+ Then verify the detailed text in the modal contains "These documents will be added to the package and reviewed by CMS."
Then verify the yes, submit modal button is visible and clickable
Then click the yes, submit modal button
Then verify the package details page is visible
diff --git a/tests/cypress/cypress/e2e/Subsequent_Submission_CHIP_Spa.spec.feature b/tests/cypress/cypress/e2e/Subsequent_Submission_CHIP_Spa.spec.feature
index 02dadbfbc..5b591453c 100644
--- a/tests/cypress/cypress/e2e/Subsequent_Submission_CHIP_Spa.spec.feature
+++ b/tests/cypress/cypress/e2e/Subsequent_Submission_CHIP_Spa.spec.feature
@@ -13,7 +13,7 @@ Feature: CHIP SPA State Details View - Card View with Actions
Then click Under Review checkbox
Then Click on Filter Button
- Scenario: Screen Enhance - Subsequent Document from the details page
+ Scenario: Screen Enhance - Subsequent Documents from the details page
Then click the SPA ID link in the first row
Then verify the package details page is visible
Then verify Upload Subsequent Documents action exists
@@ -30,8 +30,8 @@ Feature: CHIP SPA State Details View - Card View with Actions
Then into "Reason for subsequent submission" type "This is an automated subsequent submission test."
Then Click the Submit Button without waiting
Then verify the modal pop-up is visible
- Then verify the dialog title contains "OneMAC only for document submission"
- Then verify the detailed text in the modal contains "States and CMS reviewers will communicate about the submission through email."
+ Then verify the dialog title contains "Submit additional documents?"
+ Then verify the detailed text in the modal contains "These documents will be added to the package and reviewed by CMS."
Then verify the yes, submit modal button is visible and clickable
Then click modal cancel button
Then click form cancel button
@@ -54,8 +54,8 @@ Feature: CHIP SPA State Details View - Card View with Actions
Then into "Reason for subsequent submission" type "This is an automated subsequent submission test."
Then Click the Submit Button without waiting
Then verify the modal pop-up is visible
- Then verify the dialog title contains "OneMAC only for document submission"
- Then verify the detailed text in the modal contains "States and CMS reviewers will communicate about the submission through email."
+ Then verify the dialog title contains "Submit additional documents?"
+ Then verify the detailed text in the modal contains "These documents will be added to the package and reviewed by CMS."
Then verify the yes, submit modal button is visible and clickable
Then click modal cancel button
Then click form cancel button
@@ -71,8 +71,8 @@ Feature: CHIP SPA State Details View - Card View with Actions
Then into "Reason for subsequent submission" type "This is an automated subsequent submission test."
Then Click the Submit Button without waiting
Then verify the modal pop-up is visible
- Then verify the dialog title contains "OneMAC only for document submission"
- Then verify the detailed text in the modal contains "States and CMS reviewers will communicate about the submission through email."
+ Then verify the dialog title contains "Submit additional documents?"
+ Then verify the detailed text in the modal contains "These documents will be added to the package and reviewed by CMS."
Then verify the yes, submit modal button is visible and clickable
Then click the yes, submit modal button
Then i am on Dashboard Page
@@ -88,8 +88,8 @@ Feature: CHIP SPA State Details View - Card View with Actions
Then into "Reason for subsequent submission" type "This is an automated subsequent submission test."
Then Click the Submit Button without waiting
Then verify the modal pop-up is visible
- Then verify the dialog title contains "OneMAC only for document submission"
- Then verify the detailed text in the modal contains "States and CMS reviewers will communicate about the submission through email."
+ Then verify the dialog title contains "Submit additional documents?"
+ Then verify the detailed text in the modal contains "These documents will be added to the package and reviewed by CMS."
Then verify the yes, submit modal button is visible and clickable
Then click the yes, submit modal button
Then verify the package details page is visible
diff --git a/tests/cypress/cypress/e2e/Subsequent_Submission_Initial_Waiver.spec.feature b/tests/cypress/cypress/e2e/Subsequent_Submission_Initial_Waiver.spec.feature
index 52024390f..6b141022c 100644
--- a/tests/cypress/cypress/e2e/Subsequent_Submission_Initial_Waiver.spec.feature
+++ b/tests/cypress/cypress/e2e/Subsequent_Submission_Initial_Waiver.spec.feature
@@ -14,7 +14,7 @@ Feature: Subsequent Submission 1915b Initial Waiver
Then click Under Review checkbox
Then Click on Filter Button
- Scenario: Screen Enhance - Subsequent Document from the details page
+ Scenario: Screen Enhance - Subsequent Documents from the details page
Then click the Waiver Number link in the first row
Then verify the package details page is visible
Then verify Upload Subsequent Documents action exists
@@ -31,8 +31,8 @@ Feature: Subsequent Submission 1915b Initial Waiver
Then into "Reason for subsequent submission" type "This is an automated subsequent submission test."
Then Click the Submit Button without waiting
Then verify the modal pop-up is visible
- Then verify the dialog title contains "OneMAC only for document submission"
- Then verify the detailed text in the modal contains "States and CMS reviewers will communicate about the submission through email."
+ Then verify the dialog title contains "Submit additional documents?"
+ Then verify the detailed text in the modal contains "These documents will be added to the package and reviewed by CMS."
Then verify the yes, submit modal button is visible and clickable
Then click modal cancel button
Then click form cancel button
@@ -54,8 +54,8 @@ Feature: Subsequent Submission 1915b Initial Waiver
Then into "Reason for subsequent submission" type "This is an automated subsequent submission test."
Then Click the Submit Button without waiting
Then verify the modal pop-up is visible
- Then verify the dialog title contains "OneMAC only for document submission"
- Then verify the detailed text in the modal contains "States and CMS reviewers will communicate about the submission through email."
+ Then verify the dialog title contains "Submit additional documents?"
+ Then verify the detailed text in the modal contains "These documents will be added to the package and reviewed by CMS."
Then verify the yes, submit modal button is visible and clickable
Then click modal cancel button
Then click form cancel button
@@ -71,8 +71,8 @@ Feature: Subsequent Submission 1915b Initial Waiver
Then into "Reason for subsequent submission" type "This is an automated subsequent submission test."
Then Click the Submit Button without waiting
Then verify the modal pop-up is visible
- Then verify the dialog title contains "OneMAC only for document submission"
- Then verify the detailed text in the modal contains "States and CMS reviewers will communicate about the submission through email."
+ Then verify the dialog title contains "Submit additional documents?"
+ Then verify the detailed text in the modal contains "These documents will be added to the package and reviewed by CMS."
Then verify the yes, submit modal button is visible and clickable
Then click the yes, submit modal button
Then i am on Dashboard Page
@@ -89,8 +89,8 @@ Feature: Subsequent Submission 1915b Initial Waiver
Then into "Reason for subsequent submission" type "This is an automated subsequent submission test."
Then Click the Submit Button without waiting
Then verify the modal pop-up is visible
- Then verify the dialog title contains "OneMAC only for document submission"
- Then verify the detailed text in the modal contains "States and CMS reviewers will communicate about the submission through email."
+ Then verify the dialog title contains "Submit additional documents?"
+ Then verify the detailed text in the modal contains "These documents will be added to the package and reviewed by CMS."
Then verify the yes, submit modal button is visible and clickable
Then click the yes, submit modal button
Then verify the package details page is visible
diff --git a/tests/cypress/cypress/e2e/Subsequent_Submission_Medicaid_Spa.spec.feature b/tests/cypress/cypress/e2e/Subsequent_Submission_Medicaid_Spa.spec.feature
index 157bd87a1..1662a7851 100644
--- a/tests/cypress/cypress/e2e/Subsequent_Submission_Medicaid_Spa.spec.feature
+++ b/tests/cypress/cypress/e2e/Subsequent_Submission_Medicaid_Spa.spec.feature
@@ -13,7 +13,7 @@ Feature: Medicaid SPA State Details View - Card View with Actions
Then click Under Review checkbox
Then Click on Filter Button
- Scenario: Screen Enhance - Subsequent Document from the details page
+ Scenario: Screen Enhance - Subsequent Documents from the details page
Then click the SPA ID link in the first row
Then verify the package details page is visible
Then verify Upload Subsequent Documents action exists
@@ -31,8 +31,8 @@ Feature: Medicaid SPA State Details View - Card View with Actions
Then into "Reason for subsequent submission" type "This is an automated subsequent submission test."
Then Click the Submit Button without waiting
Then verify the modal pop-up is visible
- Then verify the dialog title contains "OneMAC only for document submission"
- Then verify the detailed text in the modal contains "States and CMS reviewers will communicate about the submission through email."
+ Then verify the dialog title contains "Submit additional documents?"
+ Then verify the detailed text in the modal contains "These documents will be added to the package and reviewed by CMS."
Then verify the yes, submit modal button is visible and clickable
Then click modal cancel button
Then click form cancel button
@@ -56,8 +56,8 @@ Feature: Medicaid SPA State Details View - Card View with Actions
Then into "Reason for subsequent submission" type "This is an automated subsequent submission test."
Then Click the Submit Button without waiting
Then verify the modal pop-up is visible
- Then verify the dialog title contains "OneMAC only for document submission"
- Then verify the detailed text in the modal contains "States and CMS reviewers will communicate about the submission through email."
+ Then verify the dialog title contains "Submit additional documents?"
+ Then verify the detailed text in the modal contains "These documents will be added to the package and reviewed by CMS."
Then verify the yes, submit modal button is visible and clickable
Then click modal cancel button
Then click form cancel button
@@ -73,8 +73,8 @@ Feature: Medicaid SPA State Details View - Card View with Actions
Then into "Reason for subsequent submission" type "This is an automated subsequent submission test."
Then Click the Submit Button without waiting
Then verify the modal pop-up is visible
- Then verify the dialog title contains "OneMAC only for document submission"
- Then verify the detailed text in the modal contains "States and CMS reviewers will communicate about the submission through email."
+ Then verify the dialog title contains "Submit additional documents?"
+ Then verify the detailed text in the modal contains "These documents will be added to the package and reviewed by CMS."
Then verify the yes, submit modal button is visible and clickable
Then click the yes, submit modal button
Then i am on Dashboard Page
@@ -91,8 +91,8 @@ Feature: Medicaid SPA State Details View - Card View with Actions
Then into "Reason for subsequent submission" type "This is an automated subsequent submission test."
Then Click the Submit Button without waiting
Then verify the modal pop-up is visible
- Then verify the dialog title contains "OneMAC only for document submission"
- Then verify the detailed text in the modal contains "States and CMS reviewers will communicate about the submission through email."
+ Then verify the dialog title contains "Submit additional documents?"
+ Then verify the detailed text in the modal contains "These documents will be added to the package and reviewed by CMS."
Then verify the yes, submit modal button is visible and clickable
Then click the yes, submit modal button
Then verify the package details page is visible
diff --git a/tests/cypress/cypress/e2e/Subsequent_Submission_Renewal_Waiver.spec.feature b/tests/cypress/cypress/e2e/Subsequent_Submission_Renewal_Waiver.spec.feature
index 03203180e..63bef1116 100644
--- a/tests/cypress/cypress/e2e/Subsequent_Submission_Renewal_Waiver.spec.feature
+++ b/tests/cypress/cypress/e2e/Subsequent_Submission_Renewal_Waiver.spec.feature
@@ -14,7 +14,7 @@ Feature: Subsequent Submission 1915b Renewal Waiver
Then click Under Review checkbox
Then Click on Filter Button
- Scenario: Screen Enhance - Subsequent Document from the details page
+ Scenario: Screen Enhance - Subsequent Documents from the details page
Then click the Waiver Number link in the first row
Then verify the package details page is visible
Then verify Upload Subsequent Documents action exists
@@ -31,8 +31,8 @@ Feature: Subsequent Submission 1915b Renewal Waiver
Then into "Reason for subsequent submission" type "This is an automated subsequent submission test."
Then Click the Submit Button without waiting
Then verify the modal pop-up is visible
- Then verify the dialog title contains "OneMAC only for document submission"
- Then verify the detailed text in the modal contains "States and CMS reviewers will communicate about the submission through email."
+ Then verify the dialog title contains "Submit additional documents?"
+ Then verify the detailed text in the modal contains "These documents will be added to the package and reviewed by CMS."
Then verify the yes, submit modal button is visible and clickable
Then click modal cancel button
Then click form cancel button
@@ -55,8 +55,8 @@ Feature: Subsequent Submission 1915b Renewal Waiver
Then into "Reason for subsequent submission" type "This is an automated subsequent submission test."
Then Click the Submit Button without waiting
Then verify the modal pop-up is visible
- Then verify the dialog title contains "OneMAC only for document submission"
- Then verify the detailed text in the modal contains "States and CMS reviewers will communicate about the submission through email."
+ Then verify the dialog title contains "Submit additional documents?"
+ Then verify the detailed text in the modal contains "These documents will be added to the package and reviewed by CMS."
Then verify the yes, submit modal button is visible and clickable
Then click modal cancel button
Then click form cancel button
@@ -72,8 +72,8 @@ Feature: Subsequent Submission 1915b Renewal Waiver
Then into "Reason for subsequent submission" type "This is an automated subsequent submission test."
Then Click the Submit Button without waiting
Then verify the modal pop-up is visible
- Then verify the dialog title contains "OneMAC only for document submission"
- Then verify the detailed text in the modal contains "States and CMS reviewers will communicate about the submission through email."
+ Then verify the dialog title contains "Submit additional documents?"
+ Then verify the detailed text in the modal contains "These documents will be added to the package and reviewed by CMS."
Then verify the yes, submit modal button is visible and clickable
Then click the yes, submit modal button
Then i am on Dashboard Page
@@ -89,8 +89,8 @@ Feature: Subsequent Submission 1915b Renewal Waiver
Then into "Reason for subsequent submission" type "This is an automated subsequent submission test."
Then Click the Submit Button without waiting
Then verify the modal pop-up is visible
- Then verify the dialog title contains "OneMAC only for document submission"
- Then verify the detailed text in the modal contains "States and CMS reviewers will communicate about the submission through email."
+ Then verify the dialog title contains "Submit additional documents?"
+ Then verify the detailed text in the modal contains "These documents will be added to the package and reviewed by CMS."
Then verify the yes, submit modal button is visible and clickable
Then click the yes, submit modal button
Then verify the package details page is visible
diff --git a/tests/cypress/cypress/e2e/common/steps.js b/tests/cypress/cypress/e2e/common/steps.js
index 6a4e9ad78..11a79777a 100644
--- a/tests/cypress/cypress/e2e/common/steps.js
+++ b/tests/cypress/cypress/e2e/common/steps.js
@@ -2086,7 +2086,7 @@ Then("click the Upload Subsequent Documents action button", () => {
Then("verify the Subsequent {string} Documents section exists", (type) => {
OneMacFormPage.verifySubsequentDocumentsSectionExistsWith(type);
});
-Then("verify the Reason for subsequent submission section exists", () => {
+Then("verify the Reason for subsequent documents section exists", () => {
OneMacFormPage.verifyAdditionalInfoSectionExists();
});
Then("verify the dialog title contains {string}", (s) => {
diff --git a/tests/cypress/support/pages/oneMacFormPage.js b/tests/cypress/support/pages/oneMacFormPage.js
index 0340f4b07..b12b52cd4 100644
--- a/tests/cypress/support/pages/oneMacFormPage.js
+++ b/tests/cypress/support/pages/oneMacFormPage.js
@@ -29,7 +29,7 @@ const subsequentDocumentsHeader = (type) =>
`//h3[contains(text(),'Subsequent ${type} Documents')]`;
const labelElementFromLabel = {
"Additional Information": "#additional-information-label",
- "Reason for subsequent submission": "#additional-information-label",
+ "Reason for subsequent documents": "#additional-information-label",
};
const elementFromLabel = {
// Different forms may have different labels for the ID field
@@ -41,7 +41,7 @@ const elementFromLabel = {
"Existing Waiver Number to Renew": parentIdElement,
"Existing Waiver Number to Amend": parentIdElement,
"Additional Information": "#additional-information",
- "Reason for subsequent submission": "#additional-information",
+ "Reason for subsequent documents": "#additional-information",
};
const errorMessageLine1FromLabel = {
"SPA ID": "#componentIdStatusMsg0",