Files
huly-platform/services/gmail/pod-gmail/src/config.ts
T
Artyom SavchenkoandGitHub a98b83d1e4 UBERF-10408: New gmail integration (#8869)
* UBERF-10375: Fix full message sync

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* UBERF-10375: Clean up

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* UBERF-10408: Init new gmail integration

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* UBERF-10408: Rename package

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* UBERF-10408: Add mail channel and thread master tags

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* UBERF-10408: Rename

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* UBERF-10408: Create messages in cards

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* UBERF-10408: Use new messages

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* UBERF-10408: Use mail tags and add mail-common

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* UBERF-10408: Use tags for mails

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* UBERF-10408: Clean up tests

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* UBERF-10408: Fix tests

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* UBERF-10408: Clean up

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* UBERF-10408: Clean up

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* UBERF-10408: Apply client fixes

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* UBERF-10408: Fix communication version

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* UBERF-10408: Use adapter for message manager

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* UBERF-10408: Remove gmail-next and improve performance

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* UBERF-10408: Fix dep mismatch

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* UBERF-10408: Add prefix for new history

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* UBERF-10408: Fix failed tests

Signed-off-by: Artem Savchenko <armisav@gmail.com>

* UBERF-10408: Fix composite emails and add channel cache

Signed-off-by: Artem Savchenko <armisav@gmail.com>

---------

Signed-off-by: Artem Savchenko <armisav@gmail.com>
2025-05-12 11:26:46 +07:00

83 lines
2.8 KiB
TypeScript

//
// Copyright © 2020, 2021 Anticrm Platform Contributors.
// Copyright © 2021 Hardcore Engineering Inc.
//
// Licensed under the Eclipse Public License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. You may
// obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//
// See the License for the specific language governing permissions and
// limitations under the License.
//
import { BaseConfig } from '@hcengineering/mail-common'
import { config as dotenvConfig } from 'dotenv'
import { IntegrationVersion } from './types'
dotenvConfig()
interface Config extends BaseConfig {
Port: number
ServiceID: string
Secret: string
Credentials: string
WATCH_TOPIC_NAME: string
FooterMessage: string
InitLimit: number
Version: IntegrationVersion
}
const envMap: { [key in keyof Config]: string } = {
Port: 'PORT',
AccountsURL: 'ACCOUNTS_URL',
ServiceID: 'SERVICE_ID',
Secret: 'SECRET',
Credentials: 'Credentials',
WATCH_TOPIC_NAME: 'WATCH_TOPIC_NAME',
FooterMessage: 'FOOTER_MESSAGE',
InitLimit: 'INIT_LIMIT',
KvsUrl: 'KVS_URL',
StorageConfig: 'STORAGE_CONFIG',
Version: 'VERSION'
}
const parseNumber = (str: string | undefined): number | undefined => (str !== undefined ? Number(str) : undefined)
const config: Config = (() => {
const versionStr = process.env[envMap.Version] ?? 'v1'
let version: IntegrationVersion
if (versionStr === IntegrationVersion.V1 || versionStr === IntegrationVersion.V2) {
version = versionStr as IntegrationVersion
} else {
throw new Error(`Invalid version: ${versionStr}. Must be 'v1' or 'v2'.`)
}
const params: Partial<Config> = {
Port: parseNumber(process.env[envMap.Port]) ?? 8087,
AccountsURL: process.env[envMap.AccountsURL],
ServiceID: process.env[envMap.ServiceID] ?? 'gmail-service',
Secret: process.env[envMap.Secret],
Credentials: process.env[envMap.Credentials],
WATCH_TOPIC_NAME: process.env[envMap.WATCH_TOPIC_NAME],
InitLimit: parseNumber(process.env[envMap.InitLimit]) ?? 50,
FooterMessage: process.env[envMap.FooterMessage] ?? '<br><br><p>Sent via <a href="https://huly.io">Huly</a></p>',
KvsUrl: process.env[envMap.KvsUrl],
StorageConfig: process.env[envMap.StorageConfig],
Version: version
}
const missingEnv = (Object.keys(params) as Array<keyof Config>)
.filter((key) => params[key] === undefined)
.map((key) => envMap[key])
if (missingEnv.length > 0) {
throw Error(`Missing env variables: ${missingEnv.join(', ')}`)
}
return params as Config
})()
export default config