🚀 Changelog

All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

🚀 [0.9.11] Codename "Juryo"

  • security: App Permissions and Scopes
  • fix: Double-Login Bug
    • No more "double-login". Fixed in all environments
  • doc: Help Center Layout and Navigation
  • doc: Audience Targeting Configuration
  • security: Fixed GitHub security alerts
    • Dependency: concat-with-sourcemaps
  • fix: Width issue in template creation #169
    • form width is now at 75%
  • ops: UAT deployed with Azure DevOps Pipeline
  • refactor: Teams Apps Packaging
    • One package for each supported language
    • Packages are now downloadable from the SalesTim | Help Center
  • doc: GitHub Automated Security Fix & environment isolation
  • ops: Static Code Analysis in BO
  • improvement: Templates in the Catalog now have a fixed height #128
    • Description and cloned team name are now truncated to fit into one single line
  • ops: Automated GitHub Release Process (Bump, Commit, Push, Tag) using Gulp
  • ops: Updated Back-Office with docs, process, operations manual and logs
  • refactor: Globally Applying Standard JavaScript Style Guide
  • improvement: Template Form Design
  • fix: Salestim Admin shown to regular users #113
    • Enforced security checks with additional server controls
    • Security improvement using the current user directory role for tabs catalog, reports and settings.
      {
        "@odata.type": "#microsoft.graph.directoryRole",
        "id": "OBFUSCATED",
        "deletedDateTime": null,
        "description": "Company Administrator role has full access to perform any operation in the company scope.",
        "displayName": "Company Administrator",
        "roleTemplateId": "62e90394-69f5-4237-9190-012177145e10"
      }
      
  • improvement: Teams and Templates Search design
  • improvement: Templates Audience Targeting rules editor
    • Audience targeting is now disabled by default
    • The rules eeditor is therefore hidden by default
  • refactor: Help Center is now hosted in the app-platform repository
    • Improved navigation
    • Access to CHANGELOG and KNOWNISSUES
  • improvement: Better rendering of "⚙ Settings \ System Information" contents
  • feat: Templates Audience Targeting
    • A targeting rule can now be applied to each template to define who can use it, based on the user profile data.
    • A "Check Syntax" button is available to test the rule against the current user
    • Rules could be defined using standard javascript expressions.
    • Known Issue:
      • Due to our caching mechanism, an update to the user profile may not be reflected immediately and therefore the targeting rule may not be applied immediately.
      • Known Workaround: Login to SalesTim from a browser window in "inprivate/incognito" mode to force user profile refresh.
  • ops: Persisted logs in UAT and PRD environments
    • Using winston-daily-rotate-file
    • UAT and PRD default configuration
      {
        filename: 'ENV-salestim-%DATE%.log',
        dirname: 'OBFUSCATED',
        datePattern: 'YYYY-MM-DD-HH',
        zippedArchive: true,
        maxSize: '20m',
        maxFiles: '14d'
      }
      
  • security: Removed some external / public CDN dependencies
  • refactor: Externalized English & French translations
    • Using i18n module server & client-side
    • Applying locales with EJS template engine, based on the browser language
    • Initialized "i18n" internal documentation
  • refactor: Selective server resource public sharing with client
    • Applies to node modules, locales and enums
  • docs: Using classification in documents
    📢 PUBLIC: Anonymous access to anyone from the web
    💥 EXTERNAL: Authenticated access to external users (customers, partners...) from the app
    🔐 PRIVATE: SalesTim Internal-only
    
  • docs: Internal and External Documents

🚀 [0.9.10] Codename "Makushita"

  • fix: Opportunities channels are not created
  • fix: Opportunities channels are not updated
  • fix: Team owners unable to access planner plans
    • Symptom: Team owners may have an error trying to access a related plan:
      Oops, something went wrong ...
      You do not have access to the requested entity.
      Date and Time
      Planner Version: 0.0.0.0
      
    • Root cause:
    • Solution
      • Requester is now also explicitely added as members (in addition to owner is the option is enabled)
      • Requested owners are now also explicitely added as members
      • Permanent owners are now also explicitely added as members
  • refactor: Tracking SalesTim build number as a pre-release version number
  • feat: Targeted packages to use Teams App Policies
    • A specific package is now available for each key feature
    • Tabs now has its own unique URL per environment to enable Intercom onboarding
  • fix: Template pictures disappear after a few days #124

🚀 [0.9.9] Codename "Sandanme"

  • improvement: Unique tabs URLS
    • Each SalesTim tab now has it's own unique url
      • /forms?stEntityId=io.salestim.automation.home
      • /forms?stEntityId=io.salestim.automation.approval
      • /forms?stEntityId=io.salestim.automation.catalog
      • /forms?stEntityId=io.salestim.automation.analytics
      • /forms?stEntityId=io.salestim.automation.settings
      • https://help.salestim.com/salestimautomation/
      • https://status.salestim.com
  • fix: Intercom - Multiple Company entities #121
    • Updated the Intercom company tracking code with company json payload:
      {
      "company": {
          "company_id": "OBFUSCATED",
          "name": "OBFUSCATED"
        }
      }
      
    • [USER_HOSTNAME] is the user email full hostname (not only TLD) if available. For instance:
      {
        "domain": "onmicrosoft.com",
        "hostname": "TENANT_NAME.onmicrosoft.com",
        "isIp": false,
        "isValid": true,
        "publicSuffix": "com",
        "subdomain": "TENANT_NAME",
        "tldExists": true
      }
      
    • If email is not available, the user tenant id is used instead.
    • References: Intercom Company Object
  • fix: Planner Tabs Provisioning
    • With large teams, under some circumstances, planner tabs are not provisionned
    • Wiki tabs are now fully ignored (as the default cloning feature creates new "Wiki" tabs automatically). So any Wiki tab in the source team will be cloned without configuration in the new one

🚀 [0.9.8] Codename "Jonidan"

  • fix: Requests history log stores in the request object
  • fix: Random addGroupOwner error
    • A random error appears sometimes when trying to add a group owner:
      {
        "status": 401,
        "message": "Unauthorized",
        "response":{
          "body": {
            "error":{
              "code": "invalidauthenticationtoken",
              "message": "CompactToken parsing failed with error code: 80049217"
            }
          }
        }
      }
      
    • Resolution: Exception catched and operation replayed
  • improvement: Unauthorized access to admin-restricted tabs 118
    • Now the "Unauthorized message" has a specific button with a deeplink to the "🏠 Home" tab
    • The popin cannot be closed (nor by ESC keyboard, nor by the close button or "x" button)
    • Deeplinks reference...
  • improvement: Added "Known Issues" to the "⚙ Settings" tab
  • fix: updateGroup Logo exception if executed too early after cloning
    • Delayed by 10 sec after cloning to prevent exception
  • fix: Documents (CHANGELOG, KNOWNISSUES...) rendering optimization
    • Showdown options:
      {
        openLinksInNewWindow: true,
        ghCodeBlocks: true, // Enable support for GFM code block style.
        ghMentions: true, // Enables github @mentions, which link to the username mentioned
        ghMentionsLink: true, // Changes the link generated by @mentions. Showdown will replace {u} with the username.
        tasklists: true, // Enable support for GFM tasklists.
        emoji: true // Enable emoji support. Ex: this is a :smile: emoji
      }
      
    • Showdown Flavor:
      converter.setFlavor('github')
      
    • Showdown Syntax...

🚀 [0.9.7] Codename "Jonokuchi"

  • refactor: Request processing is now fully asynchronous
  • improvement: Requests objects now have a message history to help error diagnostic
  • refactor: Externalize "Bottleneck" package configuration for MS Graph to env vars
    • Options:
      • maxConcurrent: How many jobs can be executing at the same time.
      • minTime: How long to wait after launching a job before launching another one.
      • highWater: How long can the queue be?
      • strategy: Which strategy to use when the queue gets longer than the high water mark.
      • penalty: The penalty value used by the BLOCK strategy.
      • reservoir: How many jobs can be executed before the limiter stops executing jobs.
      • reservoirRefreshInterval: Every reservoirRefreshInterval milliseconds, the reservoir value will be automatically updated to the value of reservoirRefreshAmount.
      • reservoirRefreshAmount: The value to set reservoir to when reservoirRefreshInterval is in use.
      • reservoirIncreaseInterval: Every reservoirIncreaseInterval milliseconds, the reservoir value will be automatically incremented by reservoirIncreaseAmount.
      • reservoirIncreaseAmount: The increment applied to reservoir when reservoirIncreaseInterval is in use.
      • reservoirIncreaseMaximum: The maximum value that reservoir can reach when reservoirIncreaseInterval is in use.
    • Constructor Options References...
  • fix: Team Creation not working (ownership error) #108
    • This issue is due to a requirement from the MS Graph that expects the logged in user to be an owner of the team to operate on it. Ref...
  • fix: Sync delay between O365 Group owners and members with Team owners and members
    • To prevent this out-of-sync issue, moved to beta endpoint: https://graph.microsoft.com/v1.0/groups/{groupId}/owners/$ref
    • Reference...
  • fix: Preview info issue for Template with no default name and no naming convention #109
    • The default system templates now are using the new dynamic tagging convention based on the EJS templatinf syntax: https://ejs.co/
  • doc: Known issues
    • A KNOWNISSUES.md file is now released as part of our release process in the "dist" folder
  • doc: Added a known issue "Missing teams in list all teams when creating a new template"
  • fix: Cloned team selection filter
    • Moved to the beta endpoint to use filters (only available through the beta endpoint):
    $filter=resourceProvisioningOptions/Any(x:x eq 'Team')
    
  • fix: Text preview not displayed when no info is entered with a Naming Convention configured Template #107
    • Now the previews for name, description and welcome message are shown even if the related fields are empty.

🚀 [0.9.6]

  • improvement: Tracking basic anonymous informations to streamline support operations.
    • locale: Microsoft Teams Language
    • tid: Azure AD Tenant ID
    • upn: Azure AD User UPN
    • uid: Azure AD User ID
    • stuid: SalesTim User ID
    • sttid: SalesTim Customer ID
    • stlic: SalesTim License
    • environment: Last Visited Environment
    • version: Last Visited Version
  • fix: Salestim Admin shown to regular users #113
    • Now access is restricted to Office 365 global administrators
  • improvement: Check Service Account
    • Now service account check results are displayed in the Tim message popin
  • fix: Approver configured template not displayed for users in "+Team" #115
  • fix: Requester not added as a Team Owner #114
  • fix: Handle empty email convention error and email alias bad format
    • Better error handling with end-user message
  • fix: Teams Creation not working (deleted team error) #108
    • Better error handling with end-user message
  • improvement: Better exception handling
    • Visibility of the underlying exception and technical infos
    • Direct talk to SalesTim support through Intercom
  • improvement: Empty / invalid email nickname used for team provisionning
    • Better error handling + End-user message
    • The error is logged into the related request
  • improvement: Deleted / invalid cloned team used for team provisionning
    • Better error handling + End-user message
    • The error is logged into the related request
  • feat: Try a template directly from the "📚 Catalog" tab
    • N.B: You always have to choose the template explicitely (to see how it looks like from the template selection)

🚀 [0.9.5]

  • improvement: App package including tabs with emojis
  • fix: Sessions isolation enforcement #102

🚀 [0.9.4]

  • feat: Check requirements for the service account
    • A new "Check Requirements" button is available from the "⚙ Settings \ Service Account" tab
  • feat: Logout button from the "⚙ Settings" tabs
    • N.B: Kills the SalesTim session, not AAD session used by Microsoft 365
  • fix: the "My Requests" menu sometimes doesn't work properly
  • improvement: No more popin flickering when loading the "🏠 Home" tab
  • improvement: User are notified when trying to enable a template without associated team to clone
  • improvement: Template are automatically enabled / disabled if there is / no cloning team associated
  • fix: Selecting a team to clone should not updates system templates names and description
  • fix: Template "Export" button should be disabled in production before GA
  • fix: "system and "singleton" template properties are lost after an update
  • fix: parts to clone bad formating
  • feat: Removed App status in UAT from service status
  • feat: Added API status from service status

🚀 [0.9.3]

  • fix: i18n Internationalization
    • i18n is now dynamically configured per environment
    • All ccurrently unsupported languages (DE, ES) are now defaulted to EN
  • fix: FR translations for the login page
  • feat: "System Information" from the "⚙ Settings" tab
  • feat: "Environment" infos from the "⚙ Settings \ System Information" tab
  • feat: "Changelog" infos from the "⚙ Settings \ System Information" tab

🚀 [0.9.2]

  • fix: Templates without cloned team are automatically disabled at creation / update
  • improvement: System templates handling
    • System templates are disabled by default as long as a cloning team has not been assigned
    • System templates are hidden from end-user team request form except for "Default"
    • The following fields cannot be updated in system templates:
      • Name
      • Description
      • Approval / Approval Team
    • The following actions are not available from system templates:
      • Export
      • Delete
      • Enable / Disable
  • improvement: System templates versionning aligned with app versionning
  • fix: Not all enabled templates were visible in the team request form

🚀 [0.9.1]

  • doc: README-PUBLIC, LICENSE, THIRDPARTY and CHANGELOG in Dist folder
  • fix: Default templates appears disabled on first launch #103
  • improvement: Services Account Login #104
    • When login for the first time the service account in the app, the app automatically refreshs just after the login so that Admin are seeing that the account is actually connected.
  • fix: Template info card update with false informations #105
  • fix: Preview of naming conventions
  • improvement: Enabled Azure App Insights Live Metrics
    • Application Insights Live Metrics allows to view telemetry like CPU and memory in real time.

🚀 [0.9.0]

  • improvement: Service account selection from the "⚙ Settings" tab
  • fix: Hide api beta features for rings < 4
  • feat: Delete a template

🚀 [0.8.6]

  • feat: Naming Conventions & User tags
    • Naming conventions for fields "Name", "Email", "Description" and "Welcome Message" now supports the following tags from the user profile:
      <%= user.msDisplayName %>
      <%= user.msUPN %>
      <%= user.msEmail %>
      <%= user.msPreferredLanguage %>
      <%= user.msGivenName %>
      <%= user.msCountry %>
      <%= user.msCompanyName %>
      <%= user.msDepartment %>
      <%= user.msCity %>
      <%= user.msJobTitle %>
      <%= user.msSurname %>
      <%= user.msUsageLocation %>
      
    • Tagging follows the EJS syntax:
      <%= TAG_NAME %>
      
  • feat: Email default domain
    • The "Email" naming convention is now prefilled with the default tenant domain as a suffix
  • fix: Check disabled templates from request form
    • Better error handling
  • fix: Requester as a team owner
    • Better error handling
  • fix: Owners and members at creation
    • Better error handling
  • fix: Permanent Owners and Members at creation
    • Better error handling

🚀 [0.8.5]

  • feat: Naming Conventions & Requests tags
    • Naming conventions for fields "Name", "Email", "Description" and "Welcome Message" now supports the following tags from the request:
      <%= request.team.name %>
      <%= request.team.description %>
      <%= request.team.welcomeMessage %>
      <%= request.template.name %>
      <%= request.request.requester.name %>
      <%= request.request.requester.email %>
      
    • Tagging follows the EJS syntax:
      <%= TAG_NAME %>
      
  • fix: Naming conventions with bad tags
    • Now manages mispelled tags properly by skipping templating
  • fix: Apply team security / visibility
    • Better error handling
  • refactor: Manage parts to clone from template
    • Performance optimization and better error handling
  • feat: Group email MailNickName naming convention
    • Admins can now configure an "Email" (of the underlying group) naming convention, distinct from the "Name" naming convention
  • fix: Template icon from team picture
    • Fixed picture cache issue
  • fix: Template editing / save
    • Fixed template cache issue
  • improvement: Caching template pictures
    • Template pictures are now cached for later use
  • refactor: Dynamic Alpha / Beta features loading
    • Alpha and Beta features are now enabled and visible only in rings lower than "Production" (= Development & UAT)
  • fix: Enable / disable a team template
    • Better error handling
  • security: Configure 2FA for npm
    • NPM dependency integration into our repository are now protected by 2FA authentication
    • References...
  • fix: Manage emoji in teams channels and tabs names
    • Better error handling
    • Fixed the messsage size issue with Microsoft Graph API
  • refactor: Handle Graph throttling with bottleneck
    • Calls to the Microsoft Graph are now scheduled and managed by the "Bottleneck" package
    • https://www.npmjs.com/package/bottleneck
  • feat: Clone team logo for user requests
    • Following a user manual request, cloned team now are provisioned with the picture coming from the source team
  • feat: Apply team logo from account domain
    • Following a CRM event, cloned team now are provisioned with the picture coming from the source team

🚀 [0.8.4]

  • feat: Website tab Cloning
    • Tabs configuration of type "Website" from the source team are now cloned
    • Applies only if "Tab Cloning" is enabled for a template
  • feat: Planner tab Cloning
    • Tabs configuration of type "Planner" from the source team are now cloned
    • Applies only if "Tab Cloning" is enabled for a template

🚀 [0.8.3]

  • feat: Split Packages to bring more granular deployment capabilities

🚀 [0.8.2]

  • improvement: Instrumentation with Azure Application Insights
  • tests: Check server-side and client-side implementation
  • tests: Ensure environments segragation & customers partition at cache and db level

🚀 [0.8.1]

  • refactor: Unified team cloning across AUT and SF
  • security: Customer segragation at cache and db level
  • refactor: Instrumentation with App Insights
  • fix: Updated destroy session url
  • improvement: Added emoji for uber rides requests
  • improvement: Added Uber Deeplinks
  • refactor: Updated client app id
  • fix: Fix SSL hosting for bot in PRD
  • feat: Bot with mockup data
  • refactor: Included bot mode
  • fix: Fix undefined parameter using redis
  • refactor: Include crm integration in UAT and PRD
  • tests: Use Azure Redis & CosmosDB for DEV
  • fix: Fixed cosmosdb sdk & emulator version mismatch
  • fix: Updated scripts for pm2
  • fix: native node ssl hosting
  • security: Export cert & pfx
  • improvement: Express SSL mgmt
  • improvement: Dynamic app port from env file

🚀 [0.8.0]

  • BREAKING CHANGE: Running from src frolder
  • feat: Enabled SF integration with team templating
  • fix: Fix teams deeplinks
  • fix: Fix UAT & PRD env vars
  • refactor: Updated STAUT tabs & discovery features
  • feat: Added Discovery "My Teams" search
  • feat: Added new templates icons
  • refactor: Updated static tabs and manifests versions

🚀 [0.7.9]

  • doc: Updated technical documentation
  • fix: Multi-crm configuration
  • improvement: Multiple environments and roles mgmt
  • feat: Added bot status endpoint