Newer
Older
import { Client } from 'cozy-client'
import {
Account,
Konnector,
Trigger,
TriggerAttributes,
TriggerState,
} from 'models'
import { buildAttributes } from 'cozy-harvest-lib/dist/helpers/triggers'
import triggersMutations from 'cozy-harvest-lib/dist/connections/triggers'
import ConfigService from 'services/fluidConfig.service'
export default class TriggerService {
private _client: Client
constructor(_client: Client) {
this._client = _client
}
private createTriggerAttributes(account: Account, konnector: Konnector) {
const configService = new ConfigService()
const cronArgs = configService.getCronArgs()
const triggerAttributes: TriggerAttributes = buildAttributes({
account: account,
cron: cronArgs,
folder: null,
konnector: konnector,
})
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
return triggerAttributes
}
public async createTrigger(
account: Account,
konnector: Konnector
): Promise<Trigger> {
const triggerAttributes = this.createTriggerAttributes(account, konnector)
if (!triggerAttributes) {
throw new Error(
'TriggersServices : createTrigger - _triggerAttributes not found'
)
}
const trigger = await triggersMutations(this._client).createTrigger(
triggerAttributes
)
return trigger
}
public async getTrigger(
account: Account,
konnector: Konnector
): Promise<Trigger> {
const query = this._client
.find('io.cozy.triggers')
.where({
'message.account': account._id,
'message.konnector': konnector.slug,
})
.sortBy([{ 'cozyMetadata.updatedAt': 'desc' }])
.limitBy(1)
const result = await this._client.query(query)
return result.data[0] ? result.data[0] : null
}
public static async fetchTriggerFromAccount(
client: Client,
account: Account
) {
if (account == null) return null
const query = client
.find('io.cozy.triggers')
.where({ 'message.account': account._id })
.sortBy([{ 'cozyMetadata.updatedAt': 'desc' }])
.limitBy(1)
const result = await client.query(query)
return result.data[0] ? result.data[0] : null
}
public async launchTrigger(trigger: Trigger): Promise<any> {
if (!trigger) {
throw new Error('TriggersServices : createTrigger - trigger not found')
}
console.log(
'%c Launched Trigger is : ' + trigger._id,
'background: #222; color: white'
)
const job = await triggersMutations(this._client).launchTrigger(trigger)
return job
}
public async fetchTriggerState(
trigger: Trigger
): Promise<TriggerState | null> {
if (trigger == null) return null
const triggerState = await this._client
.getStackClient()
.fetchJSON('GET', `/jobs/triggers/${trigger._id}`)
console.log('triggerState')
console.log(triggerState)
return triggerState.data.attributes.current_state
? triggerState.data.attributes.current_state
: null
}
}