From c347b60b6636233f309956772ee66a8b41aa7191 Mon Sep 17 00:00:00 2001 From: paulfilkin <6784675+paulfilkin@users.noreply.github.com> Date: Mon, 13 Apr 2026 00:32:57 +0200 Subject: [PATCH 1/2] fix: move token cache to temp folder and fix locale-dependent date parsing - Cache token file in system temp folder instead of module directory to avoid write-permission issues - Use InvariantCulture for token expiry date parsing to prevent failures on non-English locales --- Modules/AuthenticationHelper/AuthenticationHelper.psm1 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Modules/AuthenticationHelper/AuthenticationHelper.psm1 b/Modules/AuthenticationHelper/AuthenticationHelper.psm1 index c41c9e8..459fece 100644 --- a/Modules/AuthenticationHelper/AuthenticationHelper.psm1 +++ b/Modules/AuthenticationHelper/AuthenticationHelper.psm1 @@ -60,8 +60,8 @@ function Get-AccessKey Set-BaseUri -uri $baseUri } - # Define the token file path in the same directory as the script - $tokenFile = Join-Path -Path $PSScriptRoot -ChildPath "accessToken.json" + # Cache the token in the system temp folder (not the module directory) + $tokenFile = Join-Path -Path ([System.IO.Path]::GetTempPath()) -ChildPath "lc-toolkit-accessToken.json" # Check if JSON file exists if (Test-Path $tokenFile) { @@ -74,7 +74,7 @@ function Get-AccessKey -and $tokenData.client_id -eq $id ` -and $tokenData.expires_at) { $currentTime = Get-Date - $tokenExpiration = [datetime]::Parse($tokenData.expires_at) + $tokenExpiration = [datetime]::Parse($tokenData.expires_at, [System.Globalization.CultureInfo]::InvariantCulture) # If token is valid, return it if ($currentTime -lt $tokenExpiration) { @@ -117,7 +117,7 @@ function Get-AccessKey "expires_at" = $expirationTime.ToString("yyyy-MM-ddTHH:mm:ss") } - # Write the token data to accessToken.json (create or update) + # Write the token data to the temp folder $accessKeyData | ConvertTo-Json | Set-Content -Path $tokenFile return @{ @@ -135,4 +135,4 @@ function Get-AccessKey } } -Export-ModuleMember Get-AccessKey +Export-ModuleMember Get-AccessKey \ No newline at end of file From e5cc40402d3b3949ac44c9356ba9c9d64a95f1c2 Mon Sep 17 00:00:00 2001 From: paulfilkin <6784675+paulfilkin@users.noreply.github.com> Date: Tue, 14 Apr 2026 23:35:44 +0200 Subject: [PATCH 2/2] fix: rename Get-Item to Get-SingleItem to avoid PowerShell cmdlet collision - CommonHelper exported a function called Get-Item which shadowed the built-in Microsoft.PowerShell.Management\Get-Item cmdlet - This caused Add-SourceFiles in ProjectHelper to fail when calling Get-Item on a file path, as PowerShell resolved it to the toolkit's Get-Item (which expects -accessKey and -uri parameters) - Renamed to Get-SingleItem across all modules: CommonHelper (definition and export), ProjectHelper (1 call), ResourcesHelper (13 calls), TerminologyHelper (2 calls), UsersHelper (3 calls) --- Modules/CommonHelper/CommonHelper.psm1 | 6 ++--- Modules/ProjectHelper/ProjectHelper.psm1 | 3 ++- Modules/ResourcesHelper/ResourcesHelper.psm1 | 26 +++++++++---------- .../TerminologyHelper/TerminologyHelper.psm1 | 4 +-- Modules/UsersHelper/UsersHelper.psm1 | 6 ++--- 5 files changed, 23 insertions(+), 22 deletions(-) diff --git a/Modules/CommonHelper/CommonHelper.psm1 b/Modules/CommonHelper/CommonHelper.psm1 index b3a2e3e..298e8da 100644 --- a/Modules/CommonHelper/CommonHelper.psm1 +++ b/Modules/CommonHelper/CommonHelper.psm1 @@ -171,9 +171,9 @@ function Get-AllItems The matching item object, or $null if not found. .EXAMPLE - $template = Get-Item -accessKey $accessKey -uri "$baseUri/project-templates" -id "12345" -propertyName "Project template" + $template = Get-SingleItem -accessKey $accessKey -uri "$baseUri/project-templates" -id "12345" -propertyName "Project template" #> -function Get-Item +function Get-SingleItem { param ( [Parameter(Mandatory=$true)] @@ -572,7 +572,7 @@ Export-ModuleMember -Function Get-BaseUri Export-ModuleMember -Function Set-BaseUri Export-ModuleMember -Function Get-RequestHeader Export-ModuleMember -Function Get-AllItems -Export-ModuleMember -Function Get-Item +Export-ModuleMember -Function Get-SingleItem Export-ModuleMember -Function Get-StringUri Export-ModuleMember -Function Get-FilterString Export-ModuleMember -Function Invoke-SafeMethod diff --git a/Modules/ProjectHelper/ProjectHelper.psm1 b/Modules/ProjectHelper/ProjectHelper.psm1 index 2d1e619..006a27a 100644 --- a/Modules/ProjectHelper/ProjectHelper.psm1 +++ b/Modules/ProjectHelper/ProjectHelper.psm1 @@ -236,6 +236,7 @@ function New-Project -description $description; # return @($projectBody | ConvertTo-Json -Depth 10); + # Write-Host ($projectBody | ConvertTo-Json -Depth 10) -ForegroundColor Magenta $projectCreateResponse = Get-ProjectCreationRequest -accessKey $accessKey -project $projectBody Write-Host "Creating the project..." -ForegroundColor Green @@ -375,7 +376,7 @@ function Get-Project [string] $projectName ) - return Get-Item -accessKey $accessKey -uri "$(Get-LCBaseUri)/projects" -id $projectId -name $projectName ` + return Get-SingleItem -accessKey $accessKey -uri "$(Get-LCBaseUri)/projects" -id $projectId -name $projectName ` -uriQuery "?fields=id,name" ` -propertyName "Project" } diff --git a/Modules/ResourcesHelper/ResourcesHelper.psm1 b/Modules/ResourcesHelper/ResourcesHelper.psm1 index f271823..a7b8b65 100644 --- a/Modules/ResourcesHelper/ResourcesHelper.psm1 +++ b/Modules/ResourcesHelper/ResourcesHelper.psm1 @@ -126,7 +126,7 @@ function Get-ProjectTemplate [String] $projectTemplateName ) - return Get-Item -accessKey $accessKey -uri "$(Get-LCBaseUri)/project-templates" -uriQuery "?fields=id,name,description,languageDirections,location" ` + return Get-SingleItem -accessKey $accessKey -uri "$(Get-LCBaseUri)/project-templates" -uriQuery "?fields=id,name,description,languageDirections,location" ` -id $projectTemplateId -name $projectTemplateName -propertyName "Project template"; } @@ -1151,7 +1151,7 @@ function Get-TranslationEngine [String] $translationEngineName ) - return Get-Item -accessKey $accessKey -uri "$(Get-LCBaseUri)/translation-engines" ` + return Get-SingleItem -accessKey $accessKey -uri "$(Get-LCBaseUri)/translation-engines" ` -uriQuery "?fields=name,description,location,definition" -id $translationEngineId ` -name $translationEngineName -propertyName "Translation engine" } @@ -1274,7 +1274,7 @@ function Get-Customer [string] $customerName ) - return Get-Item -accessKey $accessKey -uri "$(Get-LCBaseUri)/customers" -uriQuery "?fields=id,name,location" -id $customerId -name $customerName -propertyName "Customer"; + return Get-SingleItem -accessKey $accessKey -uri "$(Get-LCBaseUri)/customers" -uriQuery "?fields=id,name,location" -id $customerId -name $customerName -propertyName "Customer"; } <# @@ -1711,7 +1711,7 @@ function Get-FileTypeConfiguration [string] $fileTypeName ) - return Get-Item -accessKey $accessKey -uri "$(Get-LCBaseUri)/file-processing-configurations" ` + return Get-SingleItem -accessKey $accessKey -uri "$(Get-LCBaseUri)/file-processing-configurations" ` -uriQuery "?fields=id,name,location" -id $fileTypeId -name $fileTypeName ` -propertyName "File processing configuration" } @@ -1833,7 +1833,7 @@ function Get-Workflow [string] $workflowName ) - return Get-Item -accessKey $accessKey -uri "$(Get-LCBaseUri)/workflows" ` + return Get-SingleItem -accessKey $accessKey -uri "$(Get-LCBaseUri)/workflows" ` -uriQuery "?fields=id,name,description,location,workflowTemplate,languageDirections" ` -id $workflowId -name $workflowName -propertyName "Workflow"; } @@ -1949,7 +1949,7 @@ function Get-PricingModel { [String] $pricingModelName ) - return Get-Item -accessKey $accessKey -uri "$(Get-LCBaseUri)/pricing-models" ` + return Get-SingleItem -accessKey $accessKey -uri "$(Get-LCBaseUri)/pricing-models" ` -uriQuery "?fields=id,name,description,currencyCode,location" -id $pricingModelId -name $pricingModelName ` -propertyName "Pricing model" } @@ -2066,7 +2066,7 @@ function Get-ScheduleTemplate [string] $scheduleTemplateName ) - return Get-Item -accessKey $accessKey -uri "$(Get-LCBaseUri)/schedule-templates" ` + return Get-SingleItem -accessKey $accessKey -uri "$(Get-LCBaseUri)/schedule-templates" ` -uriQuery "?fields=name,description,location" -id $scheduleTemplateId -name $scheduleTemplateName ` -propertyName "Schedule template" } @@ -2203,7 +2203,7 @@ function Get-Location [String] $locationName ) - return Get-Item -accessKey $accessKey -id $locationId -name $locationName -uri "$(Get-LCBaseUri)/folders" -propertyName "Folder"; + return Get-SingleItem -accessKey $accessKey -id $locationId -name $locationName -uri "$(Get-LCBaseUri)/folders" -propertyName "Folder"; } <# @@ -2323,7 +2323,7 @@ function Get-CustomField [String] $customFieldName ) - return Get-Item -accessKey $accessKey -uri "$(Get-LCBaseUri)/custom-field-definitions" ` + return Get-SingleItem -accessKey $accessKey -uri "$(Get-LCBaseUri)/custom-field-definitions" ` -propertyName "Custom field definition" ` -uriQuery "?fields=id,name,key,description,defaultValue,type,location,resourceType,isMandatory,pickListOptions" ` -id $customFieldId -name $customFieldName; @@ -2441,7 +2441,7 @@ function Get-TranslationMemory [string] $translationMemoryName ) - return Get-Item -accessKey $accessKey -uri "$(Get-LCBaseUri)/translation-memory" -id $translationMemoryId -name $translationMemoryName -propertyName "Translation memory"; + return Get-SingleItem -accessKey $accessKey -uri "$(Get-LCBaseUri)/translation-memory" -id $translationMemoryId -name $translationMemoryName -propertyName "Translation memory"; } <# @@ -3284,7 +3284,7 @@ function Get-TranslationQualityAssessment [string] $tqaName ) - return Get-Item -accessKey $accessKey -uri "$(Get-LCBaseUri)/tqa-profiles" -id $tqaId -name $tqaName -propertyName "Tqa profile"; + return Get-SingleItem -accessKey $accessKey -uri "$(Get-LCBaseUri)/tqa-profiles" -id $tqaId -name $tqaName -propertyName "Tqa profile"; } <# @@ -3399,7 +3399,7 @@ function Get-LanguageProcessingRule [string] $languageProcessingName ) - return Get-Item -accessKey $accessKey -uri "$(Get-LCBaseUri)/language-processing-rules" ` + return Get-SingleItem -accessKey $accessKey -uri "$(Get-LCBaseUri)/language-processing-rules" ` -uriQuery "?fields=id,name,description" -id $languageProcessingId -name $languageProcessingName ` -propertyName "Language processing rule" } @@ -3526,7 +3526,7 @@ function Get-FieldTemplate [string] $fieldTemplateName ) - return Get-Item -accessKey $accessKey -uri "$(Get-LCBaseUri)/translation-memory/field-templates" -uriQuery "?fields=id,name,description,location" ` + return Get-SingleItem -accessKey $accessKey -uri "$(Get-LCBaseUri)/translation-memory/field-templates" -uriQuery "?fields=id,name,description,location" ` -id $fieldTemplateId -name $fieldTemplateName -propertyName "Field template"; } diff --git a/Modules/TerminologyHelper/TerminologyHelper.psm1 b/Modules/TerminologyHelper/TerminologyHelper.psm1 index 0fadc18..30e3dcc 100644 --- a/Modules/TerminologyHelper/TerminologyHelper.psm1 +++ b/Modules/TerminologyHelper/TerminologyHelper.psm1 @@ -119,7 +119,7 @@ function Get-Termbase [string] $termbaseName ) - return Get-Item -accessKey $accessKey -uri "$(Get-LCBaseUri)/termbases" ` + return Get-SingleItem -accessKey $accessKey -uri "$(Get-LCBaseUri)/termbases" ` -uriQuery "?fields=id,name,description,copyright,location,termbaseStructure" ` -id $termbaseId -name $termbaseName -propertyName "Termbase" } @@ -841,7 +841,7 @@ function Get-TermbaseTemplate [string] $termbaseTemplateName ) - return Get-Item -accessKey $accessKey -uri "$(Get-LCBaseUri)/termbase-templates" ` + return Get-SingleItem -accessKey $accessKey -uri "$(Get-LCBaseUri)/termbase-templates" ` -uriQuery "?fields=id,name,description,copyright,location,type,languages,fields.name,fields.level,fields.dataType,fields.pickListValues,fields.allowCustomValues,fields.allowMultiple,fields.isMandatory" ` -id $termbaseTemplateId -name $termbaseTemplateName -propertyName "Termbase template" } diff --git a/Modules/UsersHelper/UsersHelper.psm1 b/Modules/UsersHelper/UsersHelper.psm1 index ab398eb..d419435 100644 --- a/Modules/UsersHelper/UsersHelper.psm1 +++ b/Modules/UsersHelper/UsersHelper.psm1 @@ -687,7 +687,7 @@ function Get-Group $baseUri = Get-BaseUri - return Get-Item -accessKey $accessKey -uri "$baseUri/groups" ` + return Get-SingleItem -accessKey $accessKey -uri "$baseUri/groups" ` -id $groupId -name $groupName -propertyName "Group" } @@ -1045,7 +1045,7 @@ function Get-Role $baseUri = Get-BaseUri - return Get-Item -accessKey $accessKey -uri "$baseUri/roles" ` + return Get-SingleItem -accessKey $accessKey -uri "$baseUri/roles" ` -id $roleId -name $roleName -propertyName "Role" } @@ -1348,7 +1348,7 @@ function Get-Application $baseUri = Get-BaseUri - return Get-Item -accessKey $accessKey -uri "$baseUri/applications" ` + return Get-SingleItem -accessKey $accessKey -uri "$baseUri/applications" ` -id $applicationId -name $applicationName -propertyName "Application" }