๐Ÿš€ 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.

๐Ÿš€ [1.2.0] Codename "Maegashira"


  • ops: Logging improvements
    • Log files are now rotated every 14 days
    • Now generating an audit trail of file logging operations:
          "date": "REDACTED",
          "name": "REDACTED.log",
          "hash": "REDACTED"
  • fix: 2 teams created per Request #247
    • The "Send request" button is now disabled immediately while processing the request to prevent double clicks
    • Better "click" handlers to prevent multiple registrations
  • fix: Messages in 2 different languages appear on the same page #260
  • improvement: Locale is now set using a fallback mechanism, that uses the following order of priority to determine the right locale to be used:
    1. From Microsoft Teams context (Language defined in the Microsoft Teams client)
    2. From the browser client language
    3. Set to en-us in any other case
  • improvement: Locale is now detected and updated during each request.
    • Therefore you can update the language of your Microsoft Teams client, and you don't need to logout from SalesTim to see change.
  • feat: Template Language
    • You can now associate a language with each template, within the following list:
      • en-au
      • en-bz
      • en-ca
      • en-gb
      • en-ie
      • en-jm
      • en-nz
      • en-ph
      • en-tt
      • en-us
      • en-za
      • en-zw
      • fr-be
      • fr-ca
      • fr-ch
      • fr-fr
      • fr-lu
      • fr-mc
    • Structure:


  • fix: Deep links not working on home page #261
  • fix: Naming convention not shown in request form #262
    • Updated online documentation about Naming Conventions
    • Includes a descriptive error message in case of bad naming convention configuration
  • fix: Deep links not working on home page #261
  • improvement: Better management of template configuration issues:
    • Tabs cannot be cloned without cloning Apps as well
    • Reference: #265
  • improvement: Better management of service account configuration issues:
    • Managed exception: "User Login. Teams is disabled in user licenses"
    • Reference: #264
  • improvement: Deeplink visual feedback
    • From the homepage, when clicking on a deeplink (open or talk), the button text is updated to reflect the action
  • ops: Browser alerts are now raised in our GitHub ops platform, including:
    • Catched error
    • Stack trace
    • Browser infos
    • Teams Context
    • Screenshot
  • security: Self-hosted fonts.
    • Now all fonts resources are loaded from the SalesTim platform instead of using Google Fonts CDN
    • Not necessarily a security issue, but:
      • Reduces the number of domains to whitelist
      • Prevents any data flow with Google
    • Updated doc: ๐Ÿณ Domains to whitelist
  • refactor: Improved CheckSalesTimTenant method
    • New logging capabilities
    • Externalized SalesTim tenant id per environment
  • refactor: Check for Microsoft Accounts (personal accounts)
    • New logging capabilities
    • Externalized Microsoft tenant id
  • fix: User events tracking in case of duplicates
    • "Multiple existing users match this email address REDACTED - must be more specific using user_id #255
  • fix: Error caching picture #254
    • Added new logging capabilities to blob storage helper
  • ops: An alert is now raised in our GitHub Ops when a login attempt is made without admin consent.
    • This alert includes session id, locale and tenant id
  • improvement: Request additional owners and members.
    • When requesting the creation of a new team from a template, you can now select up to 5 owners and 10 members.
    • Limits are now surfaced as help messages and tooltips: "You can select up to X additional owners/members."
  • ops: Logging and alerting improvements.
    • Logs persistence and alerting in our GitHub Ops platform is now disabled in development environments
    • Our analytics platform is now collecting users sign-in and sign-out events
    • When an alert is raised, it's now collected to our GitHub Ops platform
    • Log files are now collected and persisted in our GitHub Ops platform
    • The SalesTim app and services are now handling gracefully process shutdown, on any platform.
  • improvement: When defining security policies for a specific template, you can now select up to:
    • 5 approvers per template.
    • 5 permanent owners per template.
    • 10 permanent members per template.
  • doc: New platform contents in our Help Center
  • improvement: Admin and non-admin users can now sign-out of the app from any page.
  • fix: In Firefox browser, the non-admin user is unable to access the โ€˜Back to Homeโ€™ button.
  • fix: In Edge browser, the admin & non-admin user is unable to access the โ€˜sign-inโ€™ button.
  • fix: In Chrome browser, when non-admin user is accessing the โ€˜Back to Homeโ€™ button, user is redirected to a new tab.

๐Ÿš€ [1.1.0] Codename "Reiwa"

  • fix: App store publishing
    • Issue #1: App version is not as per guidelines. (Closed)
    • Issue #2: Please elaborate the full description such that it states about the value proportion of the app. * (Closed)
    • Issue #3: Emojis / special characters are not allowed in the manifest. (Closed)
    • Issue #5: To have consistency in naming please rename the logout to sign out. (Closed)
    • Issue #6: User is getting an error message after clicking on the links available in the โ€œservice status tab. (Closed)
    • Issue #7: When user clicks on the GitHub link, user is navigation to 404 error page. (Closed)
    • Issue #9: Please add a graceful message in the catalogโ€ and โ€œsettingsโ€ tabs when non-admin users access the tab. (Closed)
  • fix: Non-admins accessing admin-restricted tabs (Catalog, Settings) are just seeing a blank page
    • Now non-admins are presented with a clear message requesting them to log as an Office 365 administrator, and a "back to home" button
  • ops: Approval button and Adoption tab are hidden for now in ppr/prd
  • ops: Set up pre-production environment - Ring 3.5 #228
    • New standalone + targeted packages
  • fix: The export / import feature is now hidden in UAT, PPR & PRD
  • fix: Not Able to Create New Solution #216
  • fix: Issue with Account Creation - account in de-de #229
    • All languages and regions variants supported by Office 365, either with a proper translation, or through a fallback to english.
  • security: prototype pollution in _.defaultsDeep
    • Dependency: lodash
    • Upgrade lodash to 4.17.14
    • Upgrade lodash.template to 4.5.0
  • fix: Tab configuration screen now has a default value and is enabled by default
  • security: disallow access to the constructor in templates to prevent RCE
    • Dependency: handlebar
    • Upgrade handlebar to 4.1.2
  • fix: <%> in description in Teams Template creation forms #126 https://github.com/SalesTim/app-platform/issues/126
  • improvement: Improved SalesTim Targeting Package 1st connection experience #207
  • fix All tabs not replicated #155
  • fix: Events not raised in intercom #203
  • fix: Internationalization issues
    • Locale issue : Issue with package language and App #204
    • fr-fr : issue with french and english in same page #202
    • fr-fr : packaging showing up settings and paramรจtres #200
    • FR version : Talk to owners and open in home are not translated #187
    • Language in teams desktop client is always en-us
    • "New Team" form: Tooltips, Preview...
  • improvement: My Teams cards "Tags"
    • Now my teams cards have visual clues for:
      • Visibility
      • Archival
      • Classification
  • fix: Login page
    • Outside links in login menu to help and status
    • SalesTim version number in menu

๐Ÿš€ [1.0.0] Codename "Makuuchi"

  • improvement: Behavioral Analytics
    • Attributes
      • Client-side implementation
      • Attributes structure: OBJECT_PROPERTY
      • Attributes sources:
        • Environment: SalesTim App environment-based information
        • Context: Microsoft Teams context-based information
        • Profile: Microsoft Graph user profile-based information
      • Attributes by stage (Additive):
        • Anonymous: (If used outside of Teams)
          • None
        • Identified: (Using Teams context, before SalesTim login)
            "profile.intercomId": context.upn, // Not yet authenticated, use the upn
            "profile.intercomEmail": context.upn,
            "profile.locale": context.locale,
            "profile.msTenantId": context.tid,
            "profile.msUpn": context.upn,
            "profile.theme": context.theme,
            "profile.msUserId": context.userObjectId,
            "profile.environment": env.environments.current,
            "profile.version": env.environments.manifest.version
        • Authenticated: (Using Microsoft Graph Profile, after SalesTim login)
            "profile.intercomId": user.msEmail, // Once authenticated, use the email instead of UPN
            "profile.intercomEmail": user.msEmail,
            "profile.userId": user.id,
            "profile.customerId": customer.id,
            "profile.msEmail": user.msEmail,
            "profile.tld": userTld,
            "profile.name": user.msDisplayName,
            "profile.msLocale": user.msPreferredLanguage,
            "profile.license": user.userLicense,
            "profile.msIsTenantAdmin": user.isMsTenantAdmin,
            "company.companyId": customer.id,
            "company.companyName": customer.msTenantInitialDomainName,
            "company.msTenantId": customer.msTenantId,
            "company.msTenantInitialDomain": customer.msTenantInitialDomainName,
            "company.msTenantDefaultDomain": customer.msTenantDefaultDomainName,
            "company.license": customer.customerLicense
    • Events
      • Server-side implementation using the Intercom SDK
      • Events structure: OBJECT_ACTION
      • Captured events and metadata:
          request_created: {
            request_id: '',
            team_name: '',
            request_additionalMembers: '',
            request_additionalOwners: '',
            template_id: '',
            template_name: ''
          request_approved: {
            request_id: ''
          request_rejected: {
            request_id: ''
          request_processed: {
            request_id: ''
          request_error: {
            request_id: ''
          team_created: {
            team_id: '',
            team_name: '',
            template_id: '',
            template_name: ''
  • improvement: "My Teams" deep links for "๐Ÿ’ฌ Talk to owners" and "๐Ÿ‘“ Open"
    • Now links are opened without opening a new browser window
  • fix: Issue with login in browser #186
  • refactor: Dynamic teams packages generation
  • security: salestim.com is now a verified publisher domain
  • ops: Production App is now called "SalesTim"
  • refactor: Update manifest to v1.5 schema
  • fix: New Template in Business Solution creation #194
  • ops: Cosmos DB Throttling Management
    • Each environment has its own configuration (connectionPolicy)
    • An Azure alert sends a notification to the Teams DevOps \ Ops channel if more than 5 requests are throttled during the last 15min.
  • improvement: Service account is now explicitely added as a member of the created teams, in addition to be an owner.
    • This fix is a workaround to an issue while using the Microsoft Graph
  • feat: Requests management
    • See your requests with their status, progress, log and actions
        ๐Ÿ“ฎ saved: 'REQ_STA_SAVED', // Just saved after user request
        ๐Ÿ• preprocessing: 'REQ_STA_PREPROCESSING', // prepping things before approval (or direct processing)
        ๐Ÿ approval: 'REQ_STA_APPROVAL', // Waiting for approval
        โ›” rejected: 'REQ_STA_REJECTED', // Rejected
        โœ… approved: 'REQ_STA_APPROVED', // Approved
        ๐Ÿ•“ processing: 'REQ_STA_PROCESSING', // Provisionning is running
        ๐Ÿ“ฆ processed: 'REQ_STA_PROCESSED', // Processed (Done)
        ๐Ÿšฉ error: 'REQ_STA_ERROR', // Error
        ๐Ÿ›ธ Unknown: 'REQ_STA_UNKNOWN' // Unknown
    • fix: Request card doesn't take into account the naming convention #112
    • fix: My Request showing all Teams request created with no approval in Pending #110
    • fix: No information for Teams Request with error, displayed in "pending" #111
  • improvement: Search for teams processing is now delayed by 500ms before each typing, to prevent multiple executions
  • feat: My Teams are now sorted by display name (including in search results)
  • fix: Service Account processing #189
  • refactoring: All scheduled jobs are now using the CRON syntax
    • Allowed fields:

      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ second (optional)
      โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ minute
      โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ hour
      โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ day of month
      โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€ month
      โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€ day of week
      โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚
      โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚
      * * * * * *
    • Allowed values

      field value
      second 0-59
      minute 0-59
      hour 0-23
      day of month 1-31
      month 1-12 (or names)
      day of week 0-7 (or names, 0 or 7 are sunday)
    • Using multiples values

      cron.schedule('1,2,4,5 * * * *', () => {
        console.log('running every minute 1, 2, 4 and 5')
    • Using ranges

      cron.schedule('1-5 * * * *', () => {
        console.log('running every minute to 1 from 5')
    • Using step values

      cron.schedule('*/2 * * * *', () => {
        console.log('running a task every two minutes')
    • Using names

      cron.schedule('* * * January,September Sunday', () => {
        console.log('running on Sundays of January and September')
    • Using short names

      cron.schedule('* * * Jan,Sep Sun', () => {
        console.log('running on Sundays of January and September')
  • feat: SalesTim tab configuration page
    • When adding SalesTim as a tab in a channel, a new configuration page is available
      • Choose your tab name + "save" button status control
      • ToS reminder
      • New design
  • refactor: Improved performance for "My Teams" widget on homepage
    • Now results are paginated by pages of 20 teams
    • Search results are also paginated
  • security: Enforced tokens security
    • Encryption in transit and at rest for server-side services:
    • Client-side:
      • Tokens are only used in memory, and never stored in cookies or browser local storage.
      • Access to tokens via API is protected using Azure AD authentication.
  • refactor: Enabled sign-in to SalesTim from a webpage outside of the Teams Clients
    • Now, in addition to our stEntityId parameter, tabs urls have the following parameters dynamically provided by Teams clients:
    • See Tabs Context for reference
  • doc: Help Center now have a new accentuation color aligned with Microsoft Teams branding
  • refactor: All string-based messages are now externalized for internationalization
    • Except for the "Settings" tab
    • Using:
      • Server-side: i18n
      • Client-side: custom i18n module
  • improvement: Improve experience with "enabled" / "disabled" in catalog #133
  • improvement: Text truncating for teams and templates cards
    • Templates cards texte are truncated to one single line
    • Fully responsive, truncating is recalculated on window resize event
    • Using Dollar Shave Club Shave Module
  • fix: The "Sign-in" button is now disabled while a login popin is opened top prevent multiple login windows to open.
  • improvement: Audience Targeting Settings
    • Now audience targeting settings have their own tab in template settings
    • Rule editor has more space through a height of 200px
  • doc: New Audience Targeting scenario: "Domain-based targeting"
  • doc: New conditional naming convention scenario
  • fix: Issue with "male icone" that appears only in client #151
  • improvement: Prevent user to login with a Microsoft Account and demand an Office 365 account.
  • fix: Intercom not displayed correctly #168
    • Error message:
      "something's wrong", "we're unable to load the messenger"
    • References: Difficulty accessing the support chat
    • The Intercom security check is now based ont the current user email instead of its UPN.

๐Ÿš€ [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
  • 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
    * ๐Ÿ”‘ EXTERNAL: Authenticated access to external users (customers, partners...)
    * ๐Ÿ” PRIVATE: Internal-only
    * ๐Ÿ’ฅ CONFIDENTIAL: Secret and privy
  • 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:
    • 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",
          "body": {
              "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:
    • 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]

  • 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
Last Updated: 11/6/2019, 2:30:00 AM