@decaf-ts/integrations 0.12.0 → 0.14.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/integrations.cjs +1 -1
- package/lib/cjs/calendar/environment.cjs +48 -0
- package/lib/cjs/calendar/environment.cjs.map +1 -0
- package/lib/cjs/calendar/google-calendar/GoogleCalendarService.cjs +338 -0
- package/lib/cjs/calendar/google-calendar/GoogleCalendarService.cjs.map +1 -0
- package/lib/cjs/calendar/google-calendar/index.cjs +20 -0
- package/lib/cjs/calendar/google-calendar/index.cjs.map +1 -0
- package/lib/cjs/comms/discord/DiscordService.cjs +318 -0
- package/lib/cjs/comms/discord/DiscordService.cjs.map +1 -0
- package/lib/cjs/comms/discord/index.cjs +19 -0
- package/lib/cjs/comms/discord/index.cjs.map +1 -0
- package/lib/cjs/comms/environment.cjs +16 -0
- package/lib/cjs/comms/environment.cjs.map +1 -1
- package/lib/cjs/comms/index.cjs +3 -0
- package/lib/cjs/comms/index.cjs.map +1 -1
- package/lib/cjs/comms/outlook/MicrosoftOutlookService.cjs +325 -0
- package/lib/cjs/comms/outlook/MicrosoftOutlookService.cjs.map +1 -0
- package/lib/cjs/comms/outlook/index.cjs +19 -0
- package/lib/cjs/comms/outlook/index.cjs.map +1 -0
- package/lib/cjs/comms/whatsapp/WhatsAppService.cjs +274 -0
- package/lib/cjs/comms/whatsapp/WhatsAppService.cjs.map +1 -0
- package/lib/cjs/comms/whatsapp/index.cjs +19 -0
- package/lib/cjs/comms/whatsapp/index.cjs.map +1 -0
- package/lib/cjs/index.cjs +3 -3
- package/lib/cjs/io/confluence/ConfluenceService.cjs +317 -0
- package/lib/cjs/io/confluence/ConfluenceService.cjs.map +1 -0
- package/lib/cjs/io/confluence/index.cjs +19 -0
- package/lib/cjs/io/confluence/index.cjs.map +1 -0
- package/lib/cjs/io/environment.cjs +28 -0
- package/lib/cjs/io/environment.cjs.map +1 -1
- package/lib/cjs/io/google-docs/GoogleDocsService.cjs +275 -0
- package/lib/cjs/io/google-docs/GoogleDocsService.cjs.map +1 -0
- package/lib/cjs/io/google-docs/index.cjs +19 -0
- package/lib/cjs/io/google-docs/index.cjs.map +1 -0
- package/lib/cjs/io/index.cjs +5 -0
- package/lib/cjs/io/index.cjs.map +1 -1
- package/lib/cjs/io/jira/JiraService.cjs +354 -0
- package/lib/cjs/io/jira/JiraService.cjs.map +1 -0
- package/lib/cjs/io/jira/index.cjs +19 -0
- package/lib/cjs/io/jira/index.cjs.map +1 -0
- package/lib/cjs/io/microsoft-excel/MicrosoftExcelService.cjs +253 -0
- package/lib/cjs/io/microsoft-excel/MicrosoftExcelService.cjs.map +1 -0
- package/lib/cjs/io/microsoft-excel/index.cjs +19 -0
- package/lib/cjs/io/microsoft-excel/index.cjs.map +1 -0
- package/lib/cjs/io/microsoft-sharepoint/MicrosoftSharePointService.cjs +261 -0
- package/lib/cjs/io/microsoft-sharepoint/MicrosoftSharePointService.cjs.map +1 -0
- package/lib/cjs/io/microsoft-sharepoint/index.cjs +19 -0
- package/lib/cjs/io/microsoft-sharepoint/index.cjs.map +1 -0
- package/lib/cjs/sftp/aws/index.cjs +24 -0
- package/lib/cjs/sftp/aws/index.cjs.map +1 -0
- package/lib/cjs/sftp/ssh2/index.cjs +24 -0
- package/lib/cjs/sftp/ssh2/index.cjs.map +1 -0
- package/lib/esm/calendar/environment.js +44 -0
- package/lib/esm/calendar/environment.js.map +1 -0
- package/lib/esm/calendar/google-calendar/GoogleCalendarService.js +333 -0
- package/lib/esm/calendar/google-calendar/GoogleCalendarService.js.map +1 -0
- package/lib/esm/calendar/google-calendar/index.js +3 -0
- package/lib/esm/calendar/google-calendar/index.js.map +1 -0
- package/lib/esm/comms/discord/DiscordService.js +313 -0
- package/lib/esm/comms/discord/DiscordService.js.map +1 -0
- package/lib/esm/comms/discord/index.js +2 -0
- package/lib/esm/comms/discord/index.js.map +1 -0
- package/lib/esm/comms/environment.js +16 -0
- package/lib/esm/comms/environment.js.map +1 -1
- package/lib/esm/comms/index.js +3 -0
- package/lib/esm/comms/index.js.map +1 -1
- package/lib/esm/comms/outlook/MicrosoftOutlookService.js +320 -0
- package/lib/esm/comms/outlook/MicrosoftOutlookService.js.map +1 -0
- package/lib/esm/comms/outlook/index.js +2 -0
- package/lib/esm/comms/outlook/index.js.map +1 -0
- package/lib/esm/comms/whatsapp/WhatsAppService.js +269 -0
- package/lib/esm/comms/whatsapp/WhatsAppService.js.map +1 -0
- package/lib/esm/comms/whatsapp/index.js +2 -0
- package/lib/esm/comms/whatsapp/index.js.map +1 -0
- package/lib/esm/index.js +3 -3
- package/lib/esm/io/confluence/ConfluenceService.js +312 -0
- package/lib/esm/io/confluence/ConfluenceService.js.map +1 -0
- package/lib/esm/io/confluence/index.js +2 -0
- package/lib/esm/io/confluence/index.js.map +1 -0
- package/lib/esm/io/environment.js +28 -0
- package/lib/esm/io/environment.js.map +1 -1
- package/lib/esm/io/google-docs/GoogleDocsService.js +270 -0
- package/lib/esm/io/google-docs/GoogleDocsService.js.map +1 -0
- package/lib/esm/io/google-docs/index.js +2 -0
- package/lib/esm/io/google-docs/index.js.map +1 -0
- package/lib/esm/io/index.js +5 -0
- package/lib/esm/io/index.js.map +1 -1
- package/lib/esm/io/jira/JiraService.js +349 -0
- package/lib/esm/io/jira/JiraService.js.map +1 -0
- package/lib/esm/io/jira/index.js +2 -0
- package/lib/esm/io/jira/index.js.map +1 -0
- package/lib/esm/io/microsoft-excel/MicrosoftExcelService.js +248 -0
- package/lib/esm/io/microsoft-excel/MicrosoftExcelService.js.map +1 -0
- package/lib/esm/io/microsoft-excel/index.js +2 -0
- package/lib/esm/io/microsoft-excel/index.js.map +1 -0
- package/lib/esm/io/microsoft-sharepoint/MicrosoftSharePointService.js +256 -0
- package/lib/esm/io/microsoft-sharepoint/MicrosoftSharePointService.js.map +1 -0
- package/lib/esm/io/microsoft-sharepoint/index.js +2 -0
- package/lib/esm/io/microsoft-sharepoint/index.js.map +1 -0
- package/lib/esm/sftp/aws/index.js +7 -0
- package/lib/esm/sftp/aws/index.js.map +1 -0
- package/lib/esm/sftp/ssh2/index.js +7 -0
- package/lib/esm/sftp/ssh2/index.js.map +1 -0
- package/lib/types/calendar/environment.d.cts +48 -0
- package/lib/types/calendar/environment.d.mts +48 -0
- package/lib/types/calendar/google-calendar/GoogleCalendarService.d.cts +316 -0
- package/lib/types/calendar/google-calendar/GoogleCalendarService.d.mts +316 -0
- package/lib/types/calendar/google-calendar/index.d.cts +2 -0
- package/lib/types/calendar/google-calendar/index.d.mts +2 -0
- package/lib/types/comms/discord/DiscordService.d.cts +285 -0
- package/lib/types/comms/discord/DiscordService.d.mts +285 -0
- package/lib/types/comms/discord/index.d.cts +1 -0
- package/lib/types/comms/discord/index.d.mts +1 -0
- package/lib/types/comms/environment.d.cts +34 -8
- package/lib/types/comms/environment.d.mts +34 -8
- package/lib/types/comms/index.d.cts +3 -0
- package/lib/types/comms/index.d.mts +3 -0
- package/lib/types/comms/outlook/MicrosoftOutlookService.d.cts +282 -0
- package/lib/types/comms/outlook/MicrosoftOutlookService.d.mts +282 -0
- package/lib/types/comms/outlook/index.d.cts +1 -0
- package/lib/types/comms/outlook/index.d.mts +1 -0
- package/lib/types/comms/whatsapp/WhatsAppService.d.cts +258 -0
- package/lib/types/comms/whatsapp/WhatsAppService.d.mts +258 -0
- package/lib/types/comms/whatsapp/index.d.cts +1 -0
- package/lib/types/comms/whatsapp/index.d.mts +1 -0
- package/lib/types/index.d.cts +2 -2
- package/lib/types/index.d.mts +2 -2
- package/lib/types/io/confluence/ConfluenceService.d.cts +250 -0
- package/lib/types/io/confluence/ConfluenceService.d.mts +250 -0
- package/lib/types/io/confluence/index.d.cts +1 -0
- package/lib/types/io/confluence/index.d.mts +1 -0
- package/lib/types/io/environment.d.cts +52 -12
- package/lib/types/io/environment.d.mts +52 -12
- package/lib/types/io/google-docs/GoogleDocsService.d.cts +188 -0
- package/lib/types/io/google-docs/GoogleDocsService.d.mts +188 -0
- package/lib/types/io/google-docs/index.d.cts +1 -0
- package/lib/types/io/google-docs/index.d.mts +1 -0
- package/lib/types/io/index.d.cts +5 -0
- package/lib/types/io/index.d.mts +5 -0
- package/lib/types/io/jira/JiraService.d.cts +300 -0
- package/lib/types/io/jira/JiraService.d.mts +300 -0
- package/lib/types/io/jira/index.d.cts +1 -0
- package/lib/types/io/jira/index.d.mts +1 -0
- package/lib/types/io/microsoft-excel/MicrosoftExcelService.d.cts +230 -0
- package/lib/types/io/microsoft-excel/MicrosoftExcelService.d.mts +230 -0
- package/lib/types/io/microsoft-excel/index.d.cts +1 -0
- package/lib/types/io/microsoft-excel/index.d.mts +1 -0
- package/lib/types/io/microsoft-sharepoint/MicrosoftSharePointService.d.cts +226 -0
- package/lib/types/io/microsoft-sharepoint/MicrosoftSharePointService.d.mts +226 -0
- package/lib/types/io/microsoft-sharepoint/index.d.cts +1 -0
- package/lib/types/io/microsoft-sharepoint/index.d.mts +1 -0
- package/lib/types/sftp/aws/index.d.cts +6 -0
- package/lib/types/sftp/aws/index.d.mts +6 -0
- package/lib/types/sftp/ssh2/index.d.cts +6 -0
- package/lib/types/sftp/ssh2/index.d.mts +6 -0
- package/package.json +263 -59
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import { HttpApiService, type HttpApiServiceConfig } from "../../shared/http/index.d.cts";
|
|
2
|
+
/**
|
|
3
|
+
* @description Configuration for the Confluence service
|
|
4
|
+
* @summary Extends {@link HttpApiServiceConfig} with the API `token`, the
|
|
5
|
+
* optional `username` that enables Basic authentication, and the required
|
|
6
|
+
* site `baseUrl`. When omitted, the `io.confluence` environment slice supplies
|
|
7
|
+
* the same values (plus optional `timeout`).
|
|
8
|
+
* @category IO
|
|
9
|
+
* @memberOf module:integrations/io/confluence/service
|
|
10
|
+
*/
|
|
11
|
+
export interface ConfluenceServiceConfig extends HttpApiServiceConfig {
|
|
12
|
+
/**
|
|
13
|
+
* @description Confluence API token
|
|
14
|
+
* @summary Used as the Basic-auth password when `username` is set, otherwise as a bearer token.
|
|
15
|
+
*/
|
|
16
|
+
token?: string;
|
|
17
|
+
/**
|
|
18
|
+
* @description Confluence account username for Basic authentication
|
|
19
|
+
*/
|
|
20
|
+
username?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* @description Input for creating a Confluence page
|
|
24
|
+
* @summary Carries the target `spaceKey`, page `title`, storage-format body,
|
|
25
|
+
* and optional `parentId` of the ancestor page.
|
|
26
|
+
* @category IO
|
|
27
|
+
* @memberOf module:integrations/io/confluence/service
|
|
28
|
+
*/
|
|
29
|
+
export interface ConfluencePageInput {
|
|
30
|
+
/**
|
|
31
|
+
* @description Space key that owns the new page
|
|
32
|
+
*/
|
|
33
|
+
spaceKey: string;
|
|
34
|
+
/**
|
|
35
|
+
* @description Page title (unique within the space)
|
|
36
|
+
*/
|
|
37
|
+
title: string;
|
|
38
|
+
/**
|
|
39
|
+
* @description Page body in Confluence storage format
|
|
40
|
+
*/
|
|
41
|
+
body: string;
|
|
42
|
+
/**
|
|
43
|
+
* @description Optional parent page ID
|
|
44
|
+
*/
|
|
45
|
+
parentId?: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* @description Input for updating a Confluence page
|
|
49
|
+
* @summary Carries the `pageId`, new `title` and storage-format body, and an
|
|
50
|
+
* optional `version`. When `version` is omitted the service fetches the
|
|
51
|
+
* current version and submits the next one.
|
|
52
|
+
* @category IO
|
|
53
|
+
* @memberOf module:integrations/io/confluence/service
|
|
54
|
+
*/
|
|
55
|
+
export interface ConfluencePageUpdate {
|
|
56
|
+
/**
|
|
57
|
+
* @description ID of the page to update
|
|
58
|
+
*/
|
|
59
|
+
pageId: string;
|
|
60
|
+
/**
|
|
61
|
+
* @description New page title
|
|
62
|
+
*/
|
|
63
|
+
title: string;
|
|
64
|
+
/**
|
|
65
|
+
* @description New page body in Confluence storage format
|
|
66
|
+
*/
|
|
67
|
+
body: string;
|
|
68
|
+
/**
|
|
69
|
+
* @description Explicit new version number (auto-incremented when omitted)
|
|
70
|
+
*/
|
|
71
|
+
version?: number;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* @description Input for a Confluence CQL search
|
|
75
|
+
* @summary Carries the `cql` query and an optional result `limit`.
|
|
76
|
+
* @category IO
|
|
77
|
+
* @memberOf module:integrations/io/confluence/service
|
|
78
|
+
*/
|
|
79
|
+
export interface ConfluenceSearchInput {
|
|
80
|
+
/**
|
|
81
|
+
* @description Confluence Query Language expression
|
|
82
|
+
*/
|
|
83
|
+
cql: string;
|
|
84
|
+
/**
|
|
85
|
+
* @description Maximum number of results
|
|
86
|
+
*/
|
|
87
|
+
limit?: number;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* @description Confluence REST API integration service
|
|
91
|
+
* @summary An undecorated HTTP service for reading, creating, updating, and
|
|
92
|
+
* deleting pages, listing spaces, and running CQL searches. The site base URL
|
|
93
|
+
* and API token are required; supplying a `username` switches authentication to
|
|
94
|
+
* Basic, and transport failures are mapped to decaf errors via
|
|
95
|
+
* {@link httpError}.
|
|
96
|
+
* @class ConfluenceService
|
|
97
|
+
* @extends HttpApiService
|
|
98
|
+
* @category IO
|
|
99
|
+
* @example
|
|
100
|
+
* ```ts
|
|
101
|
+
* import { ConfluenceService } from "@decaf-ts/integrations/io/confluence";
|
|
102
|
+
*
|
|
103
|
+
* const confluence = new ConfluenceService();
|
|
104
|
+
* await confluence.initialize({
|
|
105
|
+
* baseUrl: "https://example.atlassian.net/wiki",
|
|
106
|
+
* username: process.env.CONFLUENCE_USERNAME,
|
|
107
|
+
* token: process.env.GRAPH_CREDENTIAL_CONFLUENCE_TOKEN,
|
|
108
|
+
* });
|
|
109
|
+
* const page = await confluence.getPage("123456");
|
|
110
|
+
* ```
|
|
111
|
+
* @mermaid
|
|
112
|
+
* sequenceDiagram
|
|
113
|
+
* autonumber
|
|
114
|
+
* participant Caller
|
|
115
|
+
* participant Service as ConfluenceService
|
|
116
|
+
* participant API as Confluence REST API
|
|
117
|
+
* Caller->>Service: updatePage(input)
|
|
118
|
+
* activate Service
|
|
119
|
+
* Service->>Service: requireCredentials()
|
|
120
|
+
* opt version omitted
|
|
121
|
+
* Service->>API: GET /rest/api/content/{id}?expand=version
|
|
122
|
+
* activate API
|
|
123
|
+
* API-->>Service: current version
|
|
124
|
+
* deactivate API
|
|
125
|
+
* end
|
|
126
|
+
* Service->>API: PUT /rest/api/content/{id}
|
|
127
|
+
* activate API
|
|
128
|
+
* API-->>Service: updated page
|
|
129
|
+
* deactivate API
|
|
130
|
+
* Service-->>Caller: updated page
|
|
131
|
+
* deactivate Service
|
|
132
|
+
* @memberOf module:integrations/io/confluence/service
|
|
133
|
+
*/
|
|
134
|
+
export declare class ConfluenceService extends HttpApiService<ConfluenceServiceConfig> {
|
|
135
|
+
/**
|
|
136
|
+
* @description The provider name used in error messages
|
|
137
|
+
*/
|
|
138
|
+
protected readonly serviceName = "Confluence";
|
|
139
|
+
/**
|
|
140
|
+
* @description The default base URL for Confluence
|
|
141
|
+
* @summary Returns an empty string; Confluence is site-hosted, so the
|
|
142
|
+
* resolved `baseUrl` (from config or `io.confluence.baseUrl`) is required.
|
|
143
|
+
* @returns {string} An empty string.
|
|
144
|
+
*/
|
|
145
|
+
protected defaultBaseUrl(): string;
|
|
146
|
+
/**
|
|
147
|
+
* @description Builds the Confluence authentication headers
|
|
148
|
+
* @summary Uses HTTP Basic (`username:token`) when both values are present,
|
|
149
|
+
* otherwise a bearer token when only `token` is present, otherwise no
|
|
150
|
+
* headers.
|
|
151
|
+
* @param {ConfluenceServiceConfig} config - The resolved service configuration.
|
|
152
|
+
* @returns {Record<string, string>} The authorization headers.
|
|
153
|
+
*/
|
|
154
|
+
protected authHeaders(config: ConfluenceServiceConfig): Record<string, string>;
|
|
155
|
+
/**
|
|
156
|
+
* @description Reads the Confluence credentials and defaults from the environment
|
|
157
|
+
* @summary Reads the `io.confluence` slice and returns a partial config when
|
|
158
|
+
* an API token is configured, `undefined` otherwise. Values pass through
|
|
159
|
+
* `envString`/`envNumber` to reject unset-leaf proxies.
|
|
160
|
+
* @returns {Partial<ConfluenceServiceConfig> | undefined} A partial config, or `undefined` when no Confluence token is configured.
|
|
161
|
+
*/
|
|
162
|
+
protected configFromEnvironment(): Partial<ConfluenceServiceConfig> | undefined;
|
|
163
|
+
/**
|
|
164
|
+
* @description Asserts that the Confluence token and site base URL are configured
|
|
165
|
+
* @summary Called by every operation before it touches the network.
|
|
166
|
+
* @returns {void}
|
|
167
|
+
* @throws {InternalError} When no API token or base URL is configured.
|
|
168
|
+
*/
|
|
169
|
+
protected requireCredentials(): void;
|
|
170
|
+
/**
|
|
171
|
+
* @description Wraps a body in the Confluence storage representation
|
|
172
|
+
* @summary Produces the `{ storage: { value, representation } }` envelope
|
|
173
|
+
* the content API expects.
|
|
174
|
+
* @param {string} body - The Confluence storage-format body.
|
|
175
|
+
* @returns {Record<string, unknown>} The storage body envelope.
|
|
176
|
+
*/
|
|
177
|
+
private storageBody;
|
|
178
|
+
/**
|
|
179
|
+
* @description Fetches a Confluence page
|
|
180
|
+
* @summary `GET`s `/rest/api/content/<id>` with the requested `expand`
|
|
181
|
+
* fields (default `body.storage,version`).
|
|
182
|
+
* @param {string} pageId - The page ID.
|
|
183
|
+
* @param {string} [expand] - Comma-separated fields to expand; defaults to `"body.storage,version"`.
|
|
184
|
+
* @returns {Promise<unknown>} The page payload.
|
|
185
|
+
* @throws {InternalError} When credentials are missing or the page ID is empty.
|
|
186
|
+
* @throws {NotFoundError} When the page does not exist (HTTP 404).
|
|
187
|
+
* @throws {BadRequestError} When the API rejects the request.
|
|
188
|
+
*/
|
|
189
|
+
getPage(pageId: string, expand?: string): Promise<unknown>;
|
|
190
|
+
/**
|
|
191
|
+
* @description Lists Confluence spaces
|
|
192
|
+
* @summary `GET`s `/rest/api/space` with a result `limit` (default `25`).
|
|
193
|
+
* @param {number} [limit] - Maximum number of spaces to return; defaults to `25`.
|
|
194
|
+
* @returns {Promise<unknown>} The space collection payload.
|
|
195
|
+
* @throws {InternalError} When credentials are missing.
|
|
196
|
+
* @throws {BadRequestError} When the API rejects the request.
|
|
197
|
+
*/
|
|
198
|
+
listSpaces(limit?: number): Promise<unknown>;
|
|
199
|
+
/**
|
|
200
|
+
* @description Creates a Confluence page
|
|
201
|
+
* @summary `POST`s a `page` content entry in the target space, optionally
|
|
202
|
+
* under a parent, with the body in storage format.
|
|
203
|
+
* @param {ConfluencePageInput} input - The space, title, body, and optional parent.
|
|
204
|
+
* @returns {Promise<unknown>} The created page payload.
|
|
205
|
+
* @throws {InternalError} When credentials are missing, or the space key or title is empty.
|
|
206
|
+
* @throws {BadRequestError} When the API rejects the page.
|
|
207
|
+
* @example
|
|
208
|
+
* ```ts
|
|
209
|
+
* await confluence.createPage({
|
|
210
|
+
* spaceKey: "OPS",
|
|
211
|
+
* title: "Release 1.2.0",
|
|
212
|
+
* body: "<p>Details…</p>",
|
|
213
|
+
* });
|
|
214
|
+
* ```
|
|
215
|
+
*/
|
|
216
|
+
createPage(input: ConfluencePageInput): Promise<unknown>;
|
|
217
|
+
/**
|
|
218
|
+
* @description Updates a Confluence page
|
|
219
|
+
* @summary `PUT`s the new title and storage body. When `version` is omitted
|
|
220
|
+
* the current version is read first and the next number is submitted, as
|
|
221
|
+
* Confluence requires optimistic versioning.
|
|
222
|
+
* @param {ConfluencePageUpdate} input - The page, new title/body, and optional version.
|
|
223
|
+
* @returns {Promise<unknown>} The updated page payload.
|
|
224
|
+
* @throws {InternalError} When credentials are missing, or the page ID or title is empty.
|
|
225
|
+
* @throws {NotFoundError} When the page does not exist (HTTP 404).
|
|
226
|
+
* @throws {ConflictError} When the submitted version is stale (HTTP 409).
|
|
227
|
+
* @throws {BadRequestError} When the API rejects the update.
|
|
228
|
+
*/
|
|
229
|
+
updatePage(input: ConfluencePageUpdate): Promise<unknown>;
|
|
230
|
+
/**
|
|
231
|
+
* @description Deletes a Confluence page
|
|
232
|
+
* @summary `DELETE`s the content entry and returns `{ deleted: true, pageId }`.
|
|
233
|
+
* @param {string} pageId - The page ID to delete.
|
|
234
|
+
* @returns {Promise<unknown>} `{ deleted: true, pageId }` on success.
|
|
235
|
+
* @throws {InternalError} When credentials are missing or the page ID is empty.
|
|
236
|
+
* @throws {NotFoundError} When the page does not exist (HTTP 404).
|
|
237
|
+
* @throws {BadRequestError} When the API rejects the deletion.
|
|
238
|
+
*/
|
|
239
|
+
deletePage(pageId: string): Promise<unknown>;
|
|
240
|
+
/**
|
|
241
|
+
* @description Searches Confluence content with CQL
|
|
242
|
+
* @summary `GET`s `/rest/api/content/search` with the CQL expression and an
|
|
243
|
+
* optional `limit`.
|
|
244
|
+
* @param {ConfluenceSearchInput} input - The CQL query and result limit.
|
|
245
|
+
* @returns {Promise<unknown>} The search result payload.
|
|
246
|
+
* @throws {InternalError} When credentials are missing or the CQL query is empty.
|
|
247
|
+
* @throws {BadRequestError} When the CQL query is invalid.
|
|
248
|
+
*/
|
|
249
|
+
search(input: ConfluenceSearchInput): Promise<unknown>;
|
|
250
|
+
}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import { HttpApiService, type HttpApiServiceConfig } from "../../shared/http/index.d.mts";
|
|
2
|
+
/**
|
|
3
|
+
* @description Configuration for the Confluence service
|
|
4
|
+
* @summary Extends {@link HttpApiServiceConfig} with the API `token`, the
|
|
5
|
+
* optional `username` that enables Basic authentication, and the required
|
|
6
|
+
* site `baseUrl`. When omitted, the `io.confluence` environment slice supplies
|
|
7
|
+
* the same values (plus optional `timeout`).
|
|
8
|
+
* @category IO
|
|
9
|
+
* @memberOf module:integrations/io/confluence/service
|
|
10
|
+
*/
|
|
11
|
+
export interface ConfluenceServiceConfig extends HttpApiServiceConfig {
|
|
12
|
+
/**
|
|
13
|
+
* @description Confluence API token
|
|
14
|
+
* @summary Used as the Basic-auth password when `username` is set, otherwise as a bearer token.
|
|
15
|
+
*/
|
|
16
|
+
token?: string;
|
|
17
|
+
/**
|
|
18
|
+
* @description Confluence account username for Basic authentication
|
|
19
|
+
*/
|
|
20
|
+
username?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* @description Input for creating a Confluence page
|
|
24
|
+
* @summary Carries the target `spaceKey`, page `title`, storage-format body,
|
|
25
|
+
* and optional `parentId` of the ancestor page.
|
|
26
|
+
* @category IO
|
|
27
|
+
* @memberOf module:integrations/io/confluence/service
|
|
28
|
+
*/
|
|
29
|
+
export interface ConfluencePageInput {
|
|
30
|
+
/**
|
|
31
|
+
* @description Space key that owns the new page
|
|
32
|
+
*/
|
|
33
|
+
spaceKey: string;
|
|
34
|
+
/**
|
|
35
|
+
* @description Page title (unique within the space)
|
|
36
|
+
*/
|
|
37
|
+
title: string;
|
|
38
|
+
/**
|
|
39
|
+
* @description Page body in Confluence storage format
|
|
40
|
+
*/
|
|
41
|
+
body: string;
|
|
42
|
+
/**
|
|
43
|
+
* @description Optional parent page ID
|
|
44
|
+
*/
|
|
45
|
+
parentId?: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* @description Input for updating a Confluence page
|
|
49
|
+
* @summary Carries the `pageId`, new `title` and storage-format body, and an
|
|
50
|
+
* optional `version`. When `version` is omitted the service fetches the
|
|
51
|
+
* current version and submits the next one.
|
|
52
|
+
* @category IO
|
|
53
|
+
* @memberOf module:integrations/io/confluence/service
|
|
54
|
+
*/
|
|
55
|
+
export interface ConfluencePageUpdate {
|
|
56
|
+
/**
|
|
57
|
+
* @description ID of the page to update
|
|
58
|
+
*/
|
|
59
|
+
pageId: string;
|
|
60
|
+
/**
|
|
61
|
+
* @description New page title
|
|
62
|
+
*/
|
|
63
|
+
title: string;
|
|
64
|
+
/**
|
|
65
|
+
* @description New page body in Confluence storage format
|
|
66
|
+
*/
|
|
67
|
+
body: string;
|
|
68
|
+
/**
|
|
69
|
+
* @description Explicit new version number (auto-incremented when omitted)
|
|
70
|
+
*/
|
|
71
|
+
version?: number;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* @description Input for a Confluence CQL search
|
|
75
|
+
* @summary Carries the `cql` query and an optional result `limit`.
|
|
76
|
+
* @category IO
|
|
77
|
+
* @memberOf module:integrations/io/confluence/service
|
|
78
|
+
*/
|
|
79
|
+
export interface ConfluenceSearchInput {
|
|
80
|
+
/**
|
|
81
|
+
* @description Confluence Query Language expression
|
|
82
|
+
*/
|
|
83
|
+
cql: string;
|
|
84
|
+
/**
|
|
85
|
+
* @description Maximum number of results
|
|
86
|
+
*/
|
|
87
|
+
limit?: number;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* @description Confluence REST API integration service
|
|
91
|
+
* @summary An undecorated HTTP service for reading, creating, updating, and
|
|
92
|
+
* deleting pages, listing spaces, and running CQL searches. The site base URL
|
|
93
|
+
* and API token are required; supplying a `username` switches authentication to
|
|
94
|
+
* Basic, and transport failures are mapped to decaf errors via
|
|
95
|
+
* {@link httpError}.
|
|
96
|
+
* @class ConfluenceService
|
|
97
|
+
* @extends HttpApiService
|
|
98
|
+
* @category IO
|
|
99
|
+
* @example
|
|
100
|
+
* ```ts
|
|
101
|
+
* import { ConfluenceService } from "@decaf-ts/integrations/io/confluence";
|
|
102
|
+
*
|
|
103
|
+
* const confluence = new ConfluenceService();
|
|
104
|
+
* await confluence.initialize({
|
|
105
|
+
* baseUrl: "https://example.atlassian.net/wiki",
|
|
106
|
+
* username: process.env.CONFLUENCE_USERNAME,
|
|
107
|
+
* token: process.env.GRAPH_CREDENTIAL_CONFLUENCE_TOKEN,
|
|
108
|
+
* });
|
|
109
|
+
* const page = await confluence.getPage("123456");
|
|
110
|
+
* ```
|
|
111
|
+
* @mermaid
|
|
112
|
+
* sequenceDiagram
|
|
113
|
+
* autonumber
|
|
114
|
+
* participant Caller
|
|
115
|
+
* participant Service as ConfluenceService
|
|
116
|
+
* participant API as Confluence REST API
|
|
117
|
+
* Caller->>Service: updatePage(input)
|
|
118
|
+
* activate Service
|
|
119
|
+
* Service->>Service: requireCredentials()
|
|
120
|
+
* opt version omitted
|
|
121
|
+
* Service->>API: GET /rest/api/content/{id}?expand=version
|
|
122
|
+
* activate API
|
|
123
|
+
* API-->>Service: current version
|
|
124
|
+
* deactivate API
|
|
125
|
+
* end
|
|
126
|
+
* Service->>API: PUT /rest/api/content/{id}
|
|
127
|
+
* activate API
|
|
128
|
+
* API-->>Service: updated page
|
|
129
|
+
* deactivate API
|
|
130
|
+
* Service-->>Caller: updated page
|
|
131
|
+
* deactivate Service
|
|
132
|
+
* @memberOf module:integrations/io/confluence/service
|
|
133
|
+
*/
|
|
134
|
+
export declare class ConfluenceService extends HttpApiService<ConfluenceServiceConfig> {
|
|
135
|
+
/**
|
|
136
|
+
* @description The provider name used in error messages
|
|
137
|
+
*/
|
|
138
|
+
protected readonly serviceName = "Confluence";
|
|
139
|
+
/**
|
|
140
|
+
* @description The default base URL for Confluence
|
|
141
|
+
* @summary Returns an empty string; Confluence is site-hosted, so the
|
|
142
|
+
* resolved `baseUrl` (from config or `io.confluence.baseUrl`) is required.
|
|
143
|
+
* @returns {string} An empty string.
|
|
144
|
+
*/
|
|
145
|
+
protected defaultBaseUrl(): string;
|
|
146
|
+
/**
|
|
147
|
+
* @description Builds the Confluence authentication headers
|
|
148
|
+
* @summary Uses HTTP Basic (`username:token`) when both values are present,
|
|
149
|
+
* otherwise a bearer token when only `token` is present, otherwise no
|
|
150
|
+
* headers.
|
|
151
|
+
* @param {ConfluenceServiceConfig} config - The resolved service configuration.
|
|
152
|
+
* @returns {Record<string, string>} The authorization headers.
|
|
153
|
+
*/
|
|
154
|
+
protected authHeaders(config: ConfluenceServiceConfig): Record<string, string>;
|
|
155
|
+
/**
|
|
156
|
+
* @description Reads the Confluence credentials and defaults from the environment
|
|
157
|
+
* @summary Reads the `io.confluence` slice and returns a partial config when
|
|
158
|
+
* an API token is configured, `undefined` otherwise. Values pass through
|
|
159
|
+
* `envString`/`envNumber` to reject unset-leaf proxies.
|
|
160
|
+
* @returns {Partial<ConfluenceServiceConfig> | undefined} A partial config, or `undefined` when no Confluence token is configured.
|
|
161
|
+
*/
|
|
162
|
+
protected configFromEnvironment(): Partial<ConfluenceServiceConfig> | undefined;
|
|
163
|
+
/**
|
|
164
|
+
* @description Asserts that the Confluence token and site base URL are configured
|
|
165
|
+
* @summary Called by every operation before it touches the network.
|
|
166
|
+
* @returns {void}
|
|
167
|
+
* @throws {InternalError} When no API token or base URL is configured.
|
|
168
|
+
*/
|
|
169
|
+
protected requireCredentials(): void;
|
|
170
|
+
/**
|
|
171
|
+
* @description Wraps a body in the Confluence storage representation
|
|
172
|
+
* @summary Produces the `{ storage: { value, representation } }` envelope
|
|
173
|
+
* the content API expects.
|
|
174
|
+
* @param {string} body - The Confluence storage-format body.
|
|
175
|
+
* @returns {Record<string, unknown>} The storage body envelope.
|
|
176
|
+
*/
|
|
177
|
+
private storageBody;
|
|
178
|
+
/**
|
|
179
|
+
* @description Fetches a Confluence page
|
|
180
|
+
* @summary `GET`s `/rest/api/content/<id>` with the requested `expand`
|
|
181
|
+
* fields (default `body.storage,version`).
|
|
182
|
+
* @param {string} pageId - The page ID.
|
|
183
|
+
* @param {string} [expand] - Comma-separated fields to expand; defaults to `"body.storage,version"`.
|
|
184
|
+
* @returns {Promise<unknown>} The page payload.
|
|
185
|
+
* @throws {InternalError} When credentials are missing or the page ID is empty.
|
|
186
|
+
* @throws {NotFoundError} When the page does not exist (HTTP 404).
|
|
187
|
+
* @throws {BadRequestError} When the API rejects the request.
|
|
188
|
+
*/
|
|
189
|
+
getPage(pageId: string, expand?: string): Promise<unknown>;
|
|
190
|
+
/**
|
|
191
|
+
* @description Lists Confluence spaces
|
|
192
|
+
* @summary `GET`s `/rest/api/space` with a result `limit` (default `25`).
|
|
193
|
+
* @param {number} [limit] - Maximum number of spaces to return; defaults to `25`.
|
|
194
|
+
* @returns {Promise<unknown>} The space collection payload.
|
|
195
|
+
* @throws {InternalError} When credentials are missing.
|
|
196
|
+
* @throws {BadRequestError} When the API rejects the request.
|
|
197
|
+
*/
|
|
198
|
+
listSpaces(limit?: number): Promise<unknown>;
|
|
199
|
+
/**
|
|
200
|
+
* @description Creates a Confluence page
|
|
201
|
+
* @summary `POST`s a `page` content entry in the target space, optionally
|
|
202
|
+
* under a parent, with the body in storage format.
|
|
203
|
+
* @param {ConfluencePageInput} input - The space, title, body, and optional parent.
|
|
204
|
+
* @returns {Promise<unknown>} The created page payload.
|
|
205
|
+
* @throws {InternalError} When credentials are missing, or the space key or title is empty.
|
|
206
|
+
* @throws {BadRequestError} When the API rejects the page.
|
|
207
|
+
* @example
|
|
208
|
+
* ```ts
|
|
209
|
+
* await confluence.createPage({
|
|
210
|
+
* spaceKey: "OPS",
|
|
211
|
+
* title: "Release 1.2.0",
|
|
212
|
+
* body: "<p>Details…</p>",
|
|
213
|
+
* });
|
|
214
|
+
* ```
|
|
215
|
+
*/
|
|
216
|
+
createPage(input: ConfluencePageInput): Promise<unknown>;
|
|
217
|
+
/**
|
|
218
|
+
* @description Updates a Confluence page
|
|
219
|
+
* @summary `PUT`s the new title and storage body. When `version` is omitted
|
|
220
|
+
* the current version is read first and the next number is submitted, as
|
|
221
|
+
* Confluence requires optimistic versioning.
|
|
222
|
+
* @param {ConfluencePageUpdate} input - The page, new title/body, and optional version.
|
|
223
|
+
* @returns {Promise<unknown>} The updated page payload.
|
|
224
|
+
* @throws {InternalError} When credentials are missing, or the page ID or title is empty.
|
|
225
|
+
* @throws {NotFoundError} When the page does not exist (HTTP 404).
|
|
226
|
+
* @throws {ConflictError} When the submitted version is stale (HTTP 409).
|
|
227
|
+
* @throws {BadRequestError} When the API rejects the update.
|
|
228
|
+
*/
|
|
229
|
+
updatePage(input: ConfluencePageUpdate): Promise<unknown>;
|
|
230
|
+
/**
|
|
231
|
+
* @description Deletes a Confluence page
|
|
232
|
+
* @summary `DELETE`s the content entry and returns `{ deleted: true, pageId }`.
|
|
233
|
+
* @param {string} pageId - The page ID to delete.
|
|
234
|
+
* @returns {Promise<unknown>} `{ deleted: true, pageId }` on success.
|
|
235
|
+
* @throws {InternalError} When credentials are missing or the page ID is empty.
|
|
236
|
+
* @throws {NotFoundError} When the page does not exist (HTTP 404).
|
|
237
|
+
* @throws {BadRequestError} When the API rejects the deletion.
|
|
238
|
+
*/
|
|
239
|
+
deletePage(pageId: string): Promise<unknown>;
|
|
240
|
+
/**
|
|
241
|
+
* @description Searches Confluence content with CQL
|
|
242
|
+
* @summary `GET`s `/rest/api/content/search` with the CQL expression and an
|
|
243
|
+
* optional `limit`.
|
|
244
|
+
* @param {ConfluenceSearchInput} input - The CQL query and result limit.
|
|
245
|
+
* @returns {Promise<unknown>} The search result payload.
|
|
246
|
+
* @throws {InternalError} When credentials are missing or the CQL query is empty.
|
|
247
|
+
* @throws {BadRequestError} When the CQL query is invalid.
|
|
248
|
+
*/
|
|
249
|
+
search(input: ConfluenceSearchInput): Promise<unknown>;
|
|
250
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./ConfluenceService.d.cts";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./ConfluenceService.d.mts";
|
|
@@ -2,22 +2,29 @@
|
|
|
2
2
|
* @module integrations/io/environment
|
|
3
3
|
* @summary Environment contract and accumulated environment for the io integration services.
|
|
4
4
|
* @description Declares the `IoEnvironmentShape` consumed by the Airtable,
|
|
5
|
-
* Google Sheets,
|
|
6
|
-
*
|
|
7
|
-
* `LoggedEnvironment.accumulate`.
|
|
8
|
-
*
|
|
9
|
-
* `envString`/`envNumber` helpers from
|
|
10
|
-
* unset-leaf proxies.
|
|
5
|
+
* Google Sheets, GraphQL, Microsoft Excel, Confluence, Jira, Google Docs, and
|
|
6
|
+
* Microsoft SharePoint services' `configFromEnvironment()` implementations and
|
|
7
|
+
* the `IoEnvironment` singleton created via `LoggedEnvironment.accumulate`.
|
|
8
|
+
* Services read their credentials and defaults from the matching
|
|
9
|
+
* `io.<provider>` slice, using the `envString`/`envNumber` helpers from
|
|
10
|
+
* `shared/environmentValue` to reject unset-leaf proxies. The matching public
|
|
11
|
+
* subpath exports are `@decaf-ts/integrations/io/microsoft-excel`,
|
|
12
|
+
* `@decaf-ts/integrations/io/confluence`,
|
|
13
|
+
* `@decaf-ts/integrations/io/jira`,
|
|
14
|
+
* `@decaf-ts/integrations/io/google-docs`, and
|
|
15
|
+
* `@decaf-ts/integrations/io/microsoft-sharepoint`.
|
|
11
16
|
*/
|
|
12
17
|
/**
|
|
13
18
|
* @description Environment shape for the io integration services
|
|
14
19
|
* @summary Defines the `io` root with one slice per provider (`airtable`,
|
|
15
|
-
* `googleSheets`, `graphql`
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
20
|
+
* `googleSheets`, `graphql`, `microsoftExcel`, `confluence`, `jira`,
|
|
21
|
+
* `googleDocs`, `microsoftSharePoint`). Each slice carries the provider's
|
|
22
|
+
* required credentials (`token`, plus `baseId`/`apiKey`/`endpoint`/`username`
|
|
23
|
+
* where applicable) plus an optional `baseUrl` override and `timeout`. Fields
|
|
24
|
+
* are typed as required here so `LoggedEnvironment.accumulate` registers them;
|
|
25
|
+
* absent values resolve to proxy placeholders at runtime and must pass through
|
|
26
|
+
* `envString`/`envNumber`. Values are credential references supplied by the
|
|
27
|
+
* environment, never literals embedded in source.
|
|
21
28
|
* @memberOf module:integrations/io/environment
|
|
22
29
|
*/
|
|
23
30
|
export interface IoEnvironmentShape {
|
|
@@ -39,6 +46,39 @@ export interface IoEnvironmentShape {
|
|
|
39
46
|
token: string;
|
|
40
47
|
timeout?: number;
|
|
41
48
|
};
|
|
49
|
+
/** Microsoft Graph access token for Excel workbooks (`io/microsoft-excel`). */
|
|
50
|
+
microsoftExcel: {
|
|
51
|
+
token: string;
|
|
52
|
+
baseUrl: string;
|
|
53
|
+
timeout?: number;
|
|
54
|
+
};
|
|
55
|
+
/** Confluence API token, optional Basic-auth username, and site base URL (`io/confluence`). */
|
|
56
|
+
confluence: {
|
|
57
|
+
username: string;
|
|
58
|
+
token: string;
|
|
59
|
+
baseUrl: string;
|
|
60
|
+
timeout?: number;
|
|
61
|
+
};
|
|
62
|
+
/** Jira API token, optional Basic-auth username, and site base URL (`io/jira`). */
|
|
63
|
+
jira: {
|
|
64
|
+
username: string;
|
|
65
|
+
token: string;
|
|
66
|
+
baseUrl: string;
|
|
67
|
+
timeout?: number;
|
|
68
|
+
};
|
|
69
|
+
/** Google Docs OAuth token or API key (`io/google-docs`). */
|
|
70
|
+
googleDocs: {
|
|
71
|
+
token: string;
|
|
72
|
+
apiKey: string;
|
|
73
|
+
baseUrl: string;
|
|
74
|
+
timeout?: number;
|
|
75
|
+
};
|
|
76
|
+
/** Microsoft Graph access token for SharePoint (`io/microsoft-sharepoint`). */
|
|
77
|
+
microsoftSharePoint: {
|
|
78
|
+
token: string;
|
|
79
|
+
baseUrl: string;
|
|
80
|
+
timeout?: number;
|
|
81
|
+
};
|
|
42
82
|
};
|
|
43
83
|
}
|
|
44
84
|
/**
|
|
@@ -2,22 +2,29 @@
|
|
|
2
2
|
* @module integrations/io/environment
|
|
3
3
|
* @summary Environment contract and accumulated environment for the io integration services.
|
|
4
4
|
* @description Declares the `IoEnvironmentShape` consumed by the Airtable,
|
|
5
|
-
* Google Sheets,
|
|
6
|
-
*
|
|
7
|
-
* `LoggedEnvironment.accumulate`.
|
|
8
|
-
*
|
|
9
|
-
* `envString`/`envNumber` helpers from
|
|
10
|
-
* unset-leaf proxies.
|
|
5
|
+
* Google Sheets, GraphQL, Microsoft Excel, Confluence, Jira, Google Docs, and
|
|
6
|
+
* Microsoft SharePoint services' `configFromEnvironment()` implementations and
|
|
7
|
+
* the `IoEnvironment` singleton created via `LoggedEnvironment.accumulate`.
|
|
8
|
+
* Services read their credentials and defaults from the matching
|
|
9
|
+
* `io.<provider>` slice, using the `envString`/`envNumber` helpers from
|
|
10
|
+
* `shared/environmentValue` to reject unset-leaf proxies. The matching public
|
|
11
|
+
* subpath exports are `@decaf-ts/integrations/io/microsoft-excel`,
|
|
12
|
+
* `@decaf-ts/integrations/io/confluence`,
|
|
13
|
+
* `@decaf-ts/integrations/io/jira`,
|
|
14
|
+
* `@decaf-ts/integrations/io/google-docs`, and
|
|
15
|
+
* `@decaf-ts/integrations/io/microsoft-sharepoint`.
|
|
11
16
|
*/
|
|
12
17
|
/**
|
|
13
18
|
* @description Environment shape for the io integration services
|
|
14
19
|
* @summary Defines the `io` root with one slice per provider (`airtable`,
|
|
15
|
-
* `googleSheets`, `graphql`
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
20
|
+
* `googleSheets`, `graphql`, `microsoftExcel`, `confluence`, `jira`,
|
|
21
|
+
* `googleDocs`, `microsoftSharePoint`). Each slice carries the provider's
|
|
22
|
+
* required credentials (`token`, plus `baseId`/`apiKey`/`endpoint`/`username`
|
|
23
|
+
* where applicable) plus an optional `baseUrl` override and `timeout`. Fields
|
|
24
|
+
* are typed as required here so `LoggedEnvironment.accumulate` registers them;
|
|
25
|
+
* absent values resolve to proxy placeholders at runtime and must pass through
|
|
26
|
+
* `envString`/`envNumber`. Values are credential references supplied by the
|
|
27
|
+
* environment, never literals embedded in source.
|
|
21
28
|
* @memberOf module:integrations/io/environment
|
|
22
29
|
*/
|
|
23
30
|
export interface IoEnvironmentShape {
|
|
@@ -39,6 +46,39 @@ export interface IoEnvironmentShape {
|
|
|
39
46
|
token: string;
|
|
40
47
|
timeout?: number;
|
|
41
48
|
};
|
|
49
|
+
/** Microsoft Graph access token for Excel workbooks (`io/microsoft-excel`). */
|
|
50
|
+
microsoftExcel: {
|
|
51
|
+
token: string;
|
|
52
|
+
baseUrl: string;
|
|
53
|
+
timeout?: number;
|
|
54
|
+
};
|
|
55
|
+
/** Confluence API token, optional Basic-auth username, and site base URL (`io/confluence`). */
|
|
56
|
+
confluence: {
|
|
57
|
+
username: string;
|
|
58
|
+
token: string;
|
|
59
|
+
baseUrl: string;
|
|
60
|
+
timeout?: number;
|
|
61
|
+
};
|
|
62
|
+
/** Jira API token, optional Basic-auth username, and site base URL (`io/jira`). */
|
|
63
|
+
jira: {
|
|
64
|
+
username: string;
|
|
65
|
+
token: string;
|
|
66
|
+
baseUrl: string;
|
|
67
|
+
timeout?: number;
|
|
68
|
+
};
|
|
69
|
+
/** Google Docs OAuth token or API key (`io/google-docs`). */
|
|
70
|
+
googleDocs: {
|
|
71
|
+
token: string;
|
|
72
|
+
apiKey: string;
|
|
73
|
+
baseUrl: string;
|
|
74
|
+
timeout?: number;
|
|
75
|
+
};
|
|
76
|
+
/** Microsoft Graph access token for SharePoint (`io/microsoft-sharepoint`). */
|
|
77
|
+
microsoftSharePoint: {
|
|
78
|
+
token: string;
|
|
79
|
+
baseUrl: string;
|
|
80
|
+
timeout?: number;
|
|
81
|
+
};
|
|
42
82
|
};
|
|
43
83
|
}
|
|
44
84
|
/**
|