patchwork-os 0.2.0-alpha.25 → 0.2.0-alpha.27
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/deploy/bootstrap-vps.sh +1 -1
- package/deploy/deploy-dashboard.sh +164 -0
- package/deploy/deploy-landing.sh +79 -0
- package/dist/ccPermissions.js +6 -4
- package/dist/ccPermissions.js.map +1 -1
- package/dist/commands/recipe.js +1 -1
- package/dist/commands/recipe.js.map +1 -1
- package/dist/commands/recipeInstall.d.ts +72 -0
- package/dist/commands/recipeInstall.js +339 -0
- package/dist/commands/recipeInstall.js.map +1 -0
- package/dist/connectors/datadog.d.ts +116 -0
- package/dist/connectors/datadog.js +385 -0
- package/dist/connectors/datadog.js.map +1 -0
- package/dist/connectors/hubspot.d.ts +112 -0
- package/dist/connectors/hubspot.js +408 -0
- package/dist/connectors/hubspot.js.map +1 -0
- package/dist/connectors/intercom.d.ts +102 -0
- package/dist/connectors/intercom.js +402 -0
- package/dist/connectors/intercom.js.map +1 -0
- package/dist/connectors/stripe.d.ts +116 -0
- package/dist/connectors/stripe.js +379 -0
- package/dist/connectors/stripe.js.map +1 -0
- package/dist/index.js +33 -26
- package/dist/index.js.map +1 -1
- package/dist/recipes/manifest.d.ts +47 -0
- package/dist/recipes/manifest.js +141 -0
- package/dist/recipes/manifest.js.map +1 -0
- package/dist/recipes/schemaGenerator.js +3 -3
- package/dist/recipes/schemaGenerator.js.map +1 -1
- package/dist/recipes/tools/datadog.d.ts +6 -0
- package/dist/recipes/tools/datadog.js +239 -0
- package/dist/recipes/tools/datadog.js.map +1 -0
- package/dist/recipes/tools/hubspot.d.ts +6 -0
- package/dist/recipes/tools/hubspot.js +232 -0
- package/dist/recipes/tools/hubspot.js.map +1 -0
- package/dist/recipes/tools/index.d.ts +4 -0
- package/dist/recipes/tools/index.js +4 -0
- package/dist/recipes/tools/index.js.map +1 -1
- package/dist/recipes/tools/intercom.d.ts +6 -0
- package/dist/recipes/tools/intercom.js +226 -0
- package/dist/recipes/tools/intercom.js.map +1 -0
- package/dist/recipes/tools/stripe.d.ts +6 -0
- package/dist/recipes/tools/stripe.js +265 -0
- package/dist/recipes/tools/stripe.js.map +1 -0
- package/dist/recipes/yamlRunner.js +28 -0
- package/dist/recipes/yamlRunner.js.map +1 -1
- package/dist/schemas/dry-run-plan.v1.json +1 -1
- package/dist/schemas/recipe.v1.json +1 -1
- package/dist/server.js +155 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/searchTools.js +1 -1
- package/dist/tools/searchTools.js.map +1 -1
- package/dist/tools/testTraceToSource.js +2 -2
- package/dist/tools/testTraceToSource.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Intercom connector — read/write Intercom conversations via the Intercom REST API v2.10.
|
|
3
|
+
*
|
|
4
|
+
* Auth: Bearer access token (single workspace).
|
|
5
|
+
* - Env var: INTERCOM_ACCESS_TOKEN
|
|
6
|
+
* - Stored: getSecretJsonSync("intercom") → IntercomTokens
|
|
7
|
+
* - Header: Authorization: Bearer <token>, Intercom-Version: 2.10
|
|
8
|
+
*
|
|
9
|
+
* Tools: listConversations, getConversation, replyToConversation, closeConversation, listContacts
|
|
10
|
+
*
|
|
11
|
+
* Extends BaseConnector for unified auth, retry, rate-limit, error handling.
|
|
12
|
+
*/
|
|
13
|
+
import { BaseConnector, } from "./baseConnector.js";
|
|
14
|
+
import { deleteSecretJsonSync, getSecretJsonSync, storeSecretJsonSync, } from "./tokenStorage.js";
|
|
15
|
+
const BASE_URL = "https://api.intercom.io";
|
|
16
|
+
const INTERCOM_VERSION = "2.10";
|
|
17
|
+
export class IntercomConnector extends BaseConnector {
|
|
18
|
+
providerName = "intercom";
|
|
19
|
+
getOAuthConfig() {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
async authenticate() {
|
|
23
|
+
const tokens = loadTokens();
|
|
24
|
+
if (!tokens) {
|
|
25
|
+
throw new Error("Intercom not connected. Run: patchwork-os connect intercom or set INTERCOM_ACCESS_TOKEN");
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
token: tokens.accessToken,
|
|
29
|
+
scopes: ["read", "write"],
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
async healthCheck() {
|
|
33
|
+
try {
|
|
34
|
+
const result = await this.apiCall(async (token) => {
|
|
35
|
+
const res = await fetch(`${BASE_URL}/me`, {
|
|
36
|
+
headers: this.buildHeaders(token),
|
|
37
|
+
});
|
|
38
|
+
if (!res.ok)
|
|
39
|
+
throw new Error(`HTTP ${res.status}`);
|
|
40
|
+
return res.json();
|
|
41
|
+
});
|
|
42
|
+
if ("error" in result)
|
|
43
|
+
return { ok: false, error: result.error };
|
|
44
|
+
return { ok: true };
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
return { ok: false, error: this.normalizeError(err) };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
normalizeError(error) {
|
|
51
|
+
if (error instanceof Response) {
|
|
52
|
+
const s = error.status;
|
|
53
|
+
if (s === 401)
|
|
54
|
+
return {
|
|
55
|
+
code: "auth_expired",
|
|
56
|
+
message: "Intercom authentication expired — reconnect",
|
|
57
|
+
retryable: false,
|
|
58
|
+
suggestedAction: "patchwork-os connect intercom",
|
|
59
|
+
};
|
|
60
|
+
if (s === 403)
|
|
61
|
+
return {
|
|
62
|
+
code: "permission_denied",
|
|
63
|
+
message: "Insufficient Intercom permissions",
|
|
64
|
+
retryable: false,
|
|
65
|
+
};
|
|
66
|
+
if (s === 404)
|
|
67
|
+
return {
|
|
68
|
+
code: "not_found",
|
|
69
|
+
message: "Intercom resource not found",
|
|
70
|
+
retryable: false,
|
|
71
|
+
};
|
|
72
|
+
if (s === 429)
|
|
73
|
+
return {
|
|
74
|
+
code: "rate_limited",
|
|
75
|
+
message: "Intercom API rate limit exceeded",
|
|
76
|
+
retryable: true,
|
|
77
|
+
suggestedAction: "Wait and retry",
|
|
78
|
+
};
|
|
79
|
+
return {
|
|
80
|
+
code: "provider_error",
|
|
81
|
+
message: `Intercom API error: HTTP ${s}`,
|
|
82
|
+
retryable: s >= 500,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
if (error instanceof Error) {
|
|
86
|
+
if (error.message.includes("ENOTFOUND") ||
|
|
87
|
+
error.message.includes("ECONNREFUSED")) {
|
|
88
|
+
return {
|
|
89
|
+
code: "network_error",
|
|
90
|
+
message: `Cannot connect to Intercom: ${error.message}`,
|
|
91
|
+
retryable: true,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
code: "provider_error",
|
|
97
|
+
message: error instanceof Error ? error.message : String(error),
|
|
98
|
+
retryable: false,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
getStatus() {
|
|
102
|
+
const tokens = loadTokens();
|
|
103
|
+
return {
|
|
104
|
+
id: "intercom",
|
|
105
|
+
status: tokens ? "connected" : "disconnected",
|
|
106
|
+
lastSync: tokens?.connected_at,
|
|
107
|
+
workspace: tokens?.workspaceName,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
// ── API Methods ────────────────────────────────────────────────────────────
|
|
111
|
+
async listConversations(params = {}) {
|
|
112
|
+
const result = await this.apiCall(async (token) => {
|
|
113
|
+
const qs = new URLSearchParams({
|
|
114
|
+
per_page: String(params.perPage ?? 20),
|
|
115
|
+
});
|
|
116
|
+
if (params.status)
|
|
117
|
+
qs.set("status", params.status);
|
|
118
|
+
if (params.assigneeId)
|
|
119
|
+
qs.set("assignee_id", params.assigneeId);
|
|
120
|
+
const res = await fetch(`${BASE_URL}/conversations?${qs}`, {
|
|
121
|
+
headers: this.buildHeaders(token),
|
|
122
|
+
});
|
|
123
|
+
this.updateRateLimitFromHeaders({
|
|
124
|
+
"x-ratelimit-remaining": res.headers.get("x-ratelimit-remaining") ?? undefined,
|
|
125
|
+
"retry-after": res.headers.get("retry-after") ?? undefined,
|
|
126
|
+
});
|
|
127
|
+
if (!res.ok)
|
|
128
|
+
throw res;
|
|
129
|
+
return res.json();
|
|
130
|
+
});
|
|
131
|
+
if ("error" in result)
|
|
132
|
+
throw new Error(result.error.message);
|
|
133
|
+
return result.data;
|
|
134
|
+
}
|
|
135
|
+
async getConversation(conversationId) {
|
|
136
|
+
const result = await this.apiCall(async (token) => {
|
|
137
|
+
const res = await fetch(`${BASE_URL}/conversations/${conversationId}`, {
|
|
138
|
+
headers: this.buildHeaders(token),
|
|
139
|
+
});
|
|
140
|
+
if (!res.ok)
|
|
141
|
+
throw res;
|
|
142
|
+
return res.json();
|
|
143
|
+
});
|
|
144
|
+
if ("error" in result)
|
|
145
|
+
throw new Error(result.error.message);
|
|
146
|
+
return result.data;
|
|
147
|
+
}
|
|
148
|
+
async replyToConversation(conversationId, body, type = "comment") {
|
|
149
|
+
const result = await this.apiCall(async (token) => {
|
|
150
|
+
const res = await fetch(`${BASE_URL}/conversations/${conversationId}/reply`, {
|
|
151
|
+
method: "POST",
|
|
152
|
+
headers: {
|
|
153
|
+
...this.buildHeaders(token),
|
|
154
|
+
"Content-Type": "application/json",
|
|
155
|
+
},
|
|
156
|
+
body: JSON.stringify({ type: "admin", message_type: type, body }),
|
|
157
|
+
});
|
|
158
|
+
if (!res.ok)
|
|
159
|
+
throw res;
|
|
160
|
+
return res.json();
|
|
161
|
+
});
|
|
162
|
+
if ("error" in result)
|
|
163
|
+
throw new Error(result.error.message);
|
|
164
|
+
return result.data;
|
|
165
|
+
}
|
|
166
|
+
async closeConversation(conversationId) {
|
|
167
|
+
const result = await this.apiCall(async (token) => {
|
|
168
|
+
const res = await fetch(`${BASE_URL}/conversations/${conversationId}/parts`, {
|
|
169
|
+
method: "POST",
|
|
170
|
+
headers: {
|
|
171
|
+
...this.buildHeaders(token),
|
|
172
|
+
"Content-Type": "application/json",
|
|
173
|
+
},
|
|
174
|
+
body: JSON.stringify({ type: "admin", message_type: "close" }),
|
|
175
|
+
});
|
|
176
|
+
if (!res.ok)
|
|
177
|
+
throw res;
|
|
178
|
+
return res.json();
|
|
179
|
+
});
|
|
180
|
+
if ("error" in result)
|
|
181
|
+
throw new Error(result.error.message);
|
|
182
|
+
return result.data;
|
|
183
|
+
}
|
|
184
|
+
async listContacts(params = {}) {
|
|
185
|
+
const result = await this.apiCall(async (token) => {
|
|
186
|
+
if (params.query) {
|
|
187
|
+
const res = await fetch(`${BASE_URL}/contacts/search`, {
|
|
188
|
+
method: "POST",
|
|
189
|
+
headers: {
|
|
190
|
+
...this.buildHeaders(token),
|
|
191
|
+
"Content-Type": "application/json",
|
|
192
|
+
},
|
|
193
|
+
body: JSON.stringify({
|
|
194
|
+
query: {
|
|
195
|
+
operator: "AND",
|
|
196
|
+
value: [{ field: "name", operator: "~", value: params.query }],
|
|
197
|
+
},
|
|
198
|
+
}),
|
|
199
|
+
});
|
|
200
|
+
if (!res.ok)
|
|
201
|
+
throw res;
|
|
202
|
+
return res.json();
|
|
203
|
+
}
|
|
204
|
+
const qs = new URLSearchParams({
|
|
205
|
+
per_page: String(params.perPage ?? 20),
|
|
206
|
+
});
|
|
207
|
+
const res = await fetch(`${BASE_URL}/contacts?${qs}`, {
|
|
208
|
+
headers: this.buildHeaders(token),
|
|
209
|
+
});
|
|
210
|
+
if (!res.ok)
|
|
211
|
+
throw res;
|
|
212
|
+
return res.json();
|
|
213
|
+
});
|
|
214
|
+
if ("error" in result)
|
|
215
|
+
throw new Error(result.error.message);
|
|
216
|
+
return result.data;
|
|
217
|
+
}
|
|
218
|
+
async searchContacts(query) {
|
|
219
|
+
const result = await this.apiCall(async (token) => {
|
|
220
|
+
const res = await fetch(`${BASE_URL}/contacts/search`, {
|
|
221
|
+
method: "POST",
|
|
222
|
+
headers: {
|
|
223
|
+
...this.buildHeaders(token),
|
|
224
|
+
"Content-Type": "application/json",
|
|
225
|
+
},
|
|
226
|
+
body: JSON.stringify({
|
|
227
|
+
query: {
|
|
228
|
+
operator: "OR",
|
|
229
|
+
value: [
|
|
230
|
+
{ field: "email", operator: "=", value: query },
|
|
231
|
+
{ field: "name", operator: "~", value: query },
|
|
232
|
+
],
|
|
233
|
+
},
|
|
234
|
+
}),
|
|
235
|
+
});
|
|
236
|
+
if (!res.ok)
|
|
237
|
+
throw res;
|
|
238
|
+
return res.json();
|
|
239
|
+
});
|
|
240
|
+
if ("error" in result)
|
|
241
|
+
throw new Error(result.error.message);
|
|
242
|
+
return result.data;
|
|
243
|
+
}
|
|
244
|
+
// ── Helpers ────────────────────────────────────────────────────────────────
|
|
245
|
+
buildHeaders(token) {
|
|
246
|
+
return {
|
|
247
|
+
Authorization: `Bearer ${token}`,
|
|
248
|
+
Accept: "application/json",
|
|
249
|
+
"Intercom-Version": INTERCOM_VERSION,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
// ── Token persistence ────────────────────────────────────────────────────────
|
|
254
|
+
export function loadTokens() {
|
|
255
|
+
const envToken = process.env.INTERCOM_ACCESS_TOKEN;
|
|
256
|
+
if (envToken) {
|
|
257
|
+
return {
|
|
258
|
+
accessToken: envToken,
|
|
259
|
+
connected_at: new Date().toISOString(),
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
return getSecretJsonSync("intercom");
|
|
263
|
+
}
|
|
264
|
+
export function saveTokens(tokens) {
|
|
265
|
+
storeSecretJsonSync("intercom", tokens);
|
|
266
|
+
}
|
|
267
|
+
export function clearTokens() {
|
|
268
|
+
try {
|
|
269
|
+
deleteSecretJsonSync("intercom");
|
|
270
|
+
}
|
|
271
|
+
catch {
|
|
272
|
+
// ignore
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
// ── Singleton instance ───────────────────────────────────────────────────────
|
|
276
|
+
let _instance = null;
|
|
277
|
+
function resetIntercomConnector() {
|
|
278
|
+
_instance = null;
|
|
279
|
+
}
|
|
280
|
+
export function getIntercomConnector() {
|
|
281
|
+
if (!_instance) {
|
|
282
|
+
_instance = new IntercomConnector();
|
|
283
|
+
}
|
|
284
|
+
return _instance;
|
|
285
|
+
}
|
|
286
|
+
export { getIntercomConnector as intercom };
|
|
287
|
+
/**
|
|
288
|
+
* POST /connections/intercom/connect { accessToken }
|
|
289
|
+
*/
|
|
290
|
+
export async function handleIntercomConnect(body) {
|
|
291
|
+
let accessToken;
|
|
292
|
+
try {
|
|
293
|
+
const parsed = JSON.parse(body);
|
|
294
|
+
if (typeof parsed.accessToken !== "string" || !parsed.accessToken) {
|
|
295
|
+
return {
|
|
296
|
+
status: 400,
|
|
297
|
+
contentType: "application/json",
|
|
298
|
+
body: JSON.stringify({ ok: false, error: "accessToken is required" }),
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
accessToken = parsed.accessToken;
|
|
302
|
+
}
|
|
303
|
+
catch {
|
|
304
|
+
return {
|
|
305
|
+
status: 400,
|
|
306
|
+
contentType: "application/json",
|
|
307
|
+
body: JSON.stringify({ ok: false, error: "Invalid JSON body" }),
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
try {
|
|
311
|
+
const res = await fetch(`${BASE_URL}/me`, {
|
|
312
|
+
headers: {
|
|
313
|
+
Authorization: `Bearer ${accessToken}`,
|
|
314
|
+
Accept: "application/json",
|
|
315
|
+
"Intercom-Version": INTERCOM_VERSION,
|
|
316
|
+
},
|
|
317
|
+
});
|
|
318
|
+
if (!res.ok) {
|
|
319
|
+
return {
|
|
320
|
+
status: 401,
|
|
321
|
+
contentType: "application/json",
|
|
322
|
+
body: JSON.stringify({
|
|
323
|
+
ok: false,
|
|
324
|
+
error: `Credentials rejected by Intercom (HTTP ${res.status}) — check accessToken`,
|
|
325
|
+
}),
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
const me = (await res.json());
|
|
329
|
+
const workspaceName = me.app?.name ?? me.name ?? "unknown";
|
|
330
|
+
const tokens = {
|
|
331
|
+
accessToken,
|
|
332
|
+
workspaceName,
|
|
333
|
+
connected_at: new Date().toISOString(),
|
|
334
|
+
};
|
|
335
|
+
saveTokens(tokens);
|
|
336
|
+
resetIntercomConnector();
|
|
337
|
+
return {
|
|
338
|
+
status: 200,
|
|
339
|
+
contentType: "application/json",
|
|
340
|
+
body: JSON.stringify({
|
|
341
|
+
ok: true,
|
|
342
|
+
workspaceName,
|
|
343
|
+
connectedAt: tokens.connected_at,
|
|
344
|
+
}),
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
catch (err) {
|
|
348
|
+
return {
|
|
349
|
+
status: 500,
|
|
350
|
+
contentType: "application/json",
|
|
351
|
+
body: JSON.stringify({
|
|
352
|
+
ok: false,
|
|
353
|
+
error: err instanceof Error ? err.message : String(err),
|
|
354
|
+
}),
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* POST /connections/intercom/test
|
|
360
|
+
*/
|
|
361
|
+
export async function handleIntercomTest() {
|
|
362
|
+
const tokens = loadTokens();
|
|
363
|
+
if (!tokens) {
|
|
364
|
+
return {
|
|
365
|
+
status: 400,
|
|
366
|
+
contentType: "application/json",
|
|
367
|
+
body: JSON.stringify({ ok: false, error: "Intercom not connected" }),
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
try {
|
|
371
|
+
const connector = getIntercomConnector();
|
|
372
|
+
const check = await connector.healthCheck();
|
|
373
|
+
return {
|
|
374
|
+
status: check.ok ? 200 : 401,
|
|
375
|
+
contentType: "application/json",
|
|
376
|
+
body: JSON.stringify(check.ok ? { ok: true } : { ok: false, error: check.error?.message }),
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
catch (err) {
|
|
380
|
+
return {
|
|
381
|
+
status: 500,
|
|
382
|
+
contentType: "application/json",
|
|
383
|
+
body: JSON.stringify({
|
|
384
|
+
ok: false,
|
|
385
|
+
error: err instanceof Error ? err.message : String(err),
|
|
386
|
+
}),
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* DELETE /connections/intercom
|
|
392
|
+
*/
|
|
393
|
+
export function handleIntercomDisconnect() {
|
|
394
|
+
clearTokens();
|
|
395
|
+
resetIntercomConnector();
|
|
396
|
+
return {
|
|
397
|
+
status: 200,
|
|
398
|
+
contentType: "application/json",
|
|
399
|
+
body: JSON.stringify({ ok: true }),
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
//# sourceMappingURL=intercom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intercom.js","sourceRoot":"","sources":["../../src/connectors/intercom.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stripe connector — read-only access to Stripe data via the Stripe REST API v1.
|
|
3
|
+
*
|
|
4
|
+
* Auth: Basic auth where username=secret_key, password="".
|
|
5
|
+
* - Env var: STRIPE_SECRET_KEY
|
|
6
|
+
* - Stored: getSecretJsonSync("stripe") → StripeTokens
|
|
7
|
+
*
|
|
8
|
+
* Tools: listCharges, getCharge, listCustomers, getCustomer, listSubscriptions, listInvoices
|
|
9
|
+
*
|
|
10
|
+
* Extends BaseConnector for unified auth, retry, rate-limit, error handling.
|
|
11
|
+
*/
|
|
12
|
+
import { type AuthContext, BaseConnector, type ConnectorError, type ConnectorStatus } from "./baseConnector.js";
|
|
13
|
+
export interface StripeTokens {
|
|
14
|
+
secretKey: string;
|
|
15
|
+
accountId?: string;
|
|
16
|
+
accountName?: string;
|
|
17
|
+
connected_at: string;
|
|
18
|
+
}
|
|
19
|
+
export interface StripeCharge {
|
|
20
|
+
id: string;
|
|
21
|
+
amount: number;
|
|
22
|
+
currency: string;
|
|
23
|
+
status: string;
|
|
24
|
+
customer: string | null;
|
|
25
|
+
description: string | null;
|
|
26
|
+
created: number;
|
|
27
|
+
paid: boolean;
|
|
28
|
+
refunded: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface StripeCustomer {
|
|
31
|
+
id: string;
|
|
32
|
+
email: string | null;
|
|
33
|
+
name: string | null;
|
|
34
|
+
created: number;
|
|
35
|
+
currency: string | null;
|
|
36
|
+
balance: number;
|
|
37
|
+
}
|
|
38
|
+
export interface StripeSubscription {
|
|
39
|
+
id: string;
|
|
40
|
+
customer: string;
|
|
41
|
+
status: string;
|
|
42
|
+
current_period_start: number;
|
|
43
|
+
current_period_end: number;
|
|
44
|
+
created: number;
|
|
45
|
+
cancel_at_period_end: boolean;
|
|
46
|
+
}
|
|
47
|
+
export interface StripeInvoice {
|
|
48
|
+
id: string;
|
|
49
|
+
customer: string;
|
|
50
|
+
status: string | null;
|
|
51
|
+
amount_due: number;
|
|
52
|
+
amount_paid: number;
|
|
53
|
+
currency: string;
|
|
54
|
+
created: number;
|
|
55
|
+
due_date: number | null;
|
|
56
|
+
}
|
|
57
|
+
export interface StripeListResult<T> {
|
|
58
|
+
data: T[];
|
|
59
|
+
has_more: boolean;
|
|
60
|
+
}
|
|
61
|
+
export declare class StripeConnector extends BaseConnector {
|
|
62
|
+
readonly providerName = "stripe";
|
|
63
|
+
private tokens;
|
|
64
|
+
protected getOAuthConfig(): null;
|
|
65
|
+
authenticate(): Promise<AuthContext>;
|
|
66
|
+
healthCheck(): Promise<{
|
|
67
|
+
ok: boolean;
|
|
68
|
+
error?: ConnectorError;
|
|
69
|
+
}>;
|
|
70
|
+
normalizeError(error: unknown): ConnectorError;
|
|
71
|
+
getStatus(): ConnectorStatus;
|
|
72
|
+
listCharges(params?: {
|
|
73
|
+
limit?: number;
|
|
74
|
+
customerId?: string;
|
|
75
|
+
status?: string;
|
|
76
|
+
}): Promise<StripeListResult<StripeCharge>>;
|
|
77
|
+
getCharge(chargeId: string): Promise<StripeCharge>;
|
|
78
|
+
listCustomers(params?: {
|
|
79
|
+
limit?: number;
|
|
80
|
+
email?: string;
|
|
81
|
+
}): Promise<StripeListResult<StripeCustomer>>;
|
|
82
|
+
getCustomer(customerId: string): Promise<StripeCustomer>;
|
|
83
|
+
listSubscriptions(params?: {
|
|
84
|
+
limit?: number;
|
|
85
|
+
customerId?: string;
|
|
86
|
+
status?: string;
|
|
87
|
+
}): Promise<StripeListResult<StripeSubscription>>;
|
|
88
|
+
listInvoices(params?: {
|
|
89
|
+
limit?: number;
|
|
90
|
+
customerId?: string;
|
|
91
|
+
status?: string;
|
|
92
|
+
}): Promise<StripeListResult<StripeInvoice>>;
|
|
93
|
+
private buildHeaders;
|
|
94
|
+
}
|
|
95
|
+
export declare function loadTokens(): StripeTokens | null;
|
|
96
|
+
export declare function saveTokens(tokens: StripeTokens): void;
|
|
97
|
+
export declare function clearTokens(): void;
|
|
98
|
+
export declare function getStripeConnector(): StripeConnector;
|
|
99
|
+
export { getStripeConnector as stripe };
|
|
100
|
+
export interface ConnectorHandlerResult {
|
|
101
|
+
status: number;
|
|
102
|
+
body: string;
|
|
103
|
+
contentType?: string;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* POST /connections/stripe/connect { secretKey }
|
|
107
|
+
*/
|
|
108
|
+
export declare function handleStripeConnect(body: string): Promise<ConnectorHandlerResult>;
|
|
109
|
+
/**
|
|
110
|
+
* POST /connections/stripe/test
|
|
111
|
+
*/
|
|
112
|
+
export declare function handleStripeTest(): Promise<ConnectorHandlerResult>;
|
|
113
|
+
/**
|
|
114
|
+
* DELETE /connections/stripe
|
|
115
|
+
*/
|
|
116
|
+
export declare function handleStripeDisconnect(): ConnectorHandlerResult;
|