-
Notifications
You must be signed in to change notification settings - Fork 89
/
adapters.ts
72 lines (69 loc) · 2.5 KB
/
adapters.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/*
* Copyright 2020 Salto Labs Ltd.
*
* Licensed under the Apache 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
*
* http://www.apache.org/licenses/LICENSE-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 _ from 'lodash'
import {
ObjectType, Adapter, ElemIdGetter, AdapterCreatorOpts, ElemID,
} from '@salto-io/adapter-api'
import adapterCreators from './creators'
import { ConfigSource } from '../../workspace/config_source'
import { createDefaultInstanceFromType } from '../merger/internal/instances'
export const getAdaptersCredentialsTypes = (
names: string[]
): Record<string, ObjectType> => {
const relevantAdapterCreators = _.pick(adapterCreators, names)
return _.mapValues(relevantAdapterCreators, creator => creator.credentialsType)
}
export const initAdapters = (
config: Record<string, AdapterCreatorOpts>,
): Record<string, Adapter> =>
_.mapValues(
config, (opts, adapter) => {
if (!opts.credentials) {
throw new Error(`${adapter} is not logged in.\n\nPlease login and try again.`)
}
const creator = adapterCreators[adapter]
if (!creator) {
throw new Error(`${adapter} adapter is not registered.`)
}
return creator.create(opts)
}
)
export const getAdapters = async (
adapters: string[],
credentials: ConfigSource,
config: ConfigSource,
elemIdGetter?: ElemIdGetter,
): Promise<Record<string, Adapter>> => {
const creatorConfig: Record<string, AdapterCreatorOpts> = _
.fromPairs(await Promise.all(adapters.map(
async adapter => {
const adapterConfig = await config.get(adapter)
const { configType } = adapterCreators[adapter]
const defaultConfig = configType
? createDefaultInstanceFromType(ElemID.CONFIG_NAME, configType)
: undefined
if (_.isUndefined(adapterConfig) && defaultConfig) {
await config.set(adapter, defaultConfig)
}
return ([adapter, {
credentials: await credentials.get(adapter),
config: adapterConfig ?? defaultConfig,
getElemIdFunc: elemIdGetter,
}])
}
)))
return initAdapters(creatorConfig)
}