@keystrokehq/zendesk 0.0.1
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/README.md +188 -0
- package/dist/_official/index.d.mts +2 -0
- package/dist/_official/index.mjs +3 -0
- package/dist/_runtime/index.d.mts +1531 -0
- package/dist/_runtime/index.mjs +39 -0
- package/dist/chunk-DQk6qfdC.mjs +18 -0
- package/dist/client.d.mts +41 -0
- package/dist/client.mjs +137 -0
- package/dist/custom/connection.d.mts +2 -0
- package/dist/custom/connection.mjs +3 -0
- package/dist/custom/jobs.d.mts +8 -0
- package/dist/custom/jobs.mjs +8 -0
- package/dist/custom/organizations.d.mts +8 -0
- package/dist/custom/organizations.mjs +17 -0
- package/dist/custom/search.d.mts +8 -0
- package/dist/custom/search.mjs +11 -0
- package/dist/custom/tickets.d.mts +8 -0
- package/dist/custom/tickets.mjs +18 -0
- package/dist/custom/triggers.d.mts +2 -0
- package/dist/custom/triggers.mjs +3 -0
- package/dist/custom/users.d.mts +8 -0
- package/dist/custom/users.mjs +18 -0
- package/dist/custom.d.mts +7 -0
- package/dist/custom.mjs +8 -0
- package/dist/errors-BPAyL8gM.mjs +38 -0
- package/dist/events.d.mts +47 -0
- package/dist/events.mjs +58 -0
- package/dist/factory-BOeuadDj.mjs +9 -0
- package/dist/index.d.mts +1 -0
- package/dist/index.mjs +1 -0
- package/dist/integration-BGHdDCMn.mjs +83 -0
- package/dist/integration-BYDT8ccc.d.mts +98 -0
- package/dist/jobs-9tdPkCE1.d.mts +43 -0
- package/dist/jobs-BjDRvbsd.mjs +36 -0
- package/dist/messaging.d.mts +1 -0
- package/dist/messaging.mjs +1 -0
- package/dist/organizations-BHCFYHgM.mjs +277 -0
- package/dist/organizations-Ct_354Ea.d.mts +355 -0
- package/dist/platform/connection.d.mts +2 -0
- package/dist/platform/connection.mjs +3 -0
- package/dist/platform/jobs.d.mts +8 -0
- package/dist/platform/jobs.mjs +8 -0
- package/dist/platform/organizations.d.mts +8 -0
- package/dist/platform/organizations.mjs +17 -0
- package/dist/platform/search.d.mts +8 -0
- package/dist/platform/search.mjs +11 -0
- package/dist/platform/tickets.d.mts +8 -0
- package/dist/platform/tickets.mjs +18 -0
- package/dist/platform/triggers.d.mts +2 -0
- package/dist/platform/triggers.mjs +3 -0
- package/dist/platform/users.d.mts +8 -0
- package/dist/platform/users.mjs +18 -0
- package/dist/platform.d.mts +7 -0
- package/dist/platform.mjs +8 -0
- package/dist/schemas.d.mts +287 -0
- package/dist/schemas.mjs +101 -0
- package/dist/search-BpPJ9ccR.mjs +85 -0
- package/dist/search-CpISWBay.d.mts +83 -0
- package/dist/shared-BmxcJmfq.mjs +12 -0
- package/dist/tickets-BnTr_JO7.mjs +387 -0
- package/dist/tickets-DWxLBQOd.d.mts +633 -0
- package/dist/triggers-BIrYDGYF.d.mts +37 -0
- package/dist/triggers-ELU-gyey.mjs +107 -0
- package/dist/users-4ecCBdGw.d.mts +423 -0
- package/dist/users-BDj0GBC8.mjs +323 -0
- package/dist/verification.d.mts +9 -0
- package/dist/verification.mjs +41 -0
- package/package.json +172 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { t as jobs_exports } from "../platform/jobs.mjs";
|
|
2
|
+
import { t as organizations_exports } from "../platform/organizations.mjs";
|
|
3
|
+
import { t as search_exports } from "../platform/search.mjs";
|
|
4
|
+
import { t as tickets_exports } from "../platform/tickets.mjs";
|
|
5
|
+
import { n as platformPolling, r as platformWebhooks, t as customPolling } from "../triggers-ELU-gyey.mjs";
|
|
6
|
+
import { t as users_exports } from "../platform/users.mjs";
|
|
7
|
+
import { t as jobs_exports$1 } from "../custom/jobs.mjs";
|
|
8
|
+
import { t as organizations_exports$1 } from "../custom/organizations.mjs";
|
|
9
|
+
import { t as search_exports$1 } from "../custom/search.mjs";
|
|
10
|
+
import { t as tickets_exports$1 } from "../custom/tickets.mjs";
|
|
11
|
+
import { t as users_exports$1 } from "../custom/users.mjs";
|
|
12
|
+
|
|
13
|
+
//#region src/_runtime/index.ts
|
|
14
|
+
const zendeskRuntimeOperations = Object.freeze({
|
|
15
|
+
platform: Object.freeze({
|
|
16
|
+
...tickets_exports,
|
|
17
|
+
...users_exports,
|
|
18
|
+
...organizations_exports,
|
|
19
|
+
...search_exports,
|
|
20
|
+
...jobs_exports
|
|
21
|
+
}),
|
|
22
|
+
custom: Object.freeze({
|
|
23
|
+
...tickets_exports$1,
|
|
24
|
+
...users_exports$1,
|
|
25
|
+
...organizations_exports$1,
|
|
26
|
+
...search_exports$1,
|
|
27
|
+
...jobs_exports$1
|
|
28
|
+
})
|
|
29
|
+
});
|
|
30
|
+
const zendeskRuntimeTriggers = Object.freeze({
|
|
31
|
+
platform: Object.freeze({
|
|
32
|
+
polling: { recentTickets: platformPolling.recentTickets },
|
|
33
|
+
webhooks: { userCreated: platformWebhooks.userCreated }
|
|
34
|
+
}),
|
|
35
|
+
custom: Object.freeze({ polling: { recentTickets: customPolling.recentTickets } })
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
//#endregion
|
|
39
|
+
export { zendeskRuntimeOperations, zendeskRuntimeTriggers };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __exportAll = (all, no_symbols) => {
|
|
4
|
+
let target = {};
|
|
5
|
+
for (var name in all) {
|
|
6
|
+
__defProp(target, name, {
|
|
7
|
+
get: all[name],
|
|
8
|
+
enumerable: true
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
if (!no_symbols) {
|
|
12
|
+
__defProp(target, Symbol.toStringTag, { value: "Module" });
|
|
13
|
+
}
|
|
14
|
+
return target;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
//#endregion
|
|
18
|
+
export { __exportAll as t };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { n as ZendeskPlatformCredentials, t as ZendeskCustomCredentials } from "./integration-BYDT8ccc.mjs";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
|
|
4
|
+
//#region src/client.d.ts
|
|
5
|
+
type ZendeskQueryPrimitive = string | number | boolean;
|
|
6
|
+
type ZendeskQueryValue = ZendeskQueryPrimitive | readonly ZendeskQueryPrimitive[] | null | undefined;
|
|
7
|
+
interface ZendeskPlatformAuth {
|
|
8
|
+
readonly kind: 'platform';
|
|
9
|
+
readonly subdomain: string;
|
|
10
|
+
readonly accessToken: string;
|
|
11
|
+
readonly credentialDefinitionId: string;
|
|
12
|
+
}
|
|
13
|
+
interface ZendeskCustomAuth {
|
|
14
|
+
readonly kind: 'custom';
|
|
15
|
+
readonly subdomain: string;
|
|
16
|
+
readonly email: string;
|
|
17
|
+
readonly apiToken: string;
|
|
18
|
+
readonly credentialDefinitionId: string;
|
|
19
|
+
}
|
|
20
|
+
type ZendeskAuth = ZendeskPlatformAuth | ZendeskCustomAuth;
|
|
21
|
+
interface ZendeskRequestOptions<TSchema extends z.ZodTypeAny> {
|
|
22
|
+
readonly method: 'DELETE' | 'GET' | 'POST' | 'PUT';
|
|
23
|
+
readonly path: string;
|
|
24
|
+
readonly schema: TSchema;
|
|
25
|
+
readonly body?: unknown;
|
|
26
|
+
readonly query?: Readonly<Record<string, ZendeskQueryValue>>;
|
|
27
|
+
}
|
|
28
|
+
declare function buildZendeskBaseUrl(subdomain: string): string;
|
|
29
|
+
declare function normalizeZendeskPlatformCredentials(credentials: ZendeskPlatformCredentials): ZendeskPlatformAuth;
|
|
30
|
+
declare function normalizeZendeskCustomCredentials(credentials: ZendeskCustomCredentials): ZendeskCustomAuth;
|
|
31
|
+
declare function createZendeskAuthHeader(auth: ZendeskAuth): string;
|
|
32
|
+
declare function createZendeskClient(auth: ZendeskAuth): Readonly<{
|
|
33
|
+
request: <TSchema extends z.ZodTypeAny>(options: ZendeskRequestOptions<TSchema>) => Promise<z.core.output<TSchema>>;
|
|
34
|
+
get: <TSchema extends z.ZodTypeAny>(options: Omit<ZendeskRequestOptions<TSchema>, "method">) => Promise<z.core.output<TSchema>>;
|
|
35
|
+
post: <TSchema extends z.ZodTypeAny>(options: Omit<ZendeskRequestOptions<TSchema>, "method">) => Promise<z.core.output<TSchema>>;
|
|
36
|
+
put: <TSchema extends z.ZodTypeAny>(options: Omit<ZendeskRequestOptions<TSchema>, "method">) => Promise<z.core.output<TSchema>>;
|
|
37
|
+
delete: <TSchema extends z.ZodTypeAny>(options: Omit<ZendeskRequestOptions<TSchema>, "method">) => Promise<z.core.output<TSchema>>;
|
|
38
|
+
}>;
|
|
39
|
+
type ZendeskClient = ReturnType<typeof createZendeskClient>;
|
|
40
|
+
//#endregion
|
|
41
|
+
export { ZendeskAuth, ZendeskClient, ZendeskCustomAuth, ZendeskPlatformAuth, ZendeskRequestOptions, buildZendeskBaseUrl, createZendeskAuthHeader, createZendeskClient, normalizeZendeskCustomCredentials, normalizeZendeskPlatformCredentials };
|
package/dist/client.mjs
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { n as ZendeskAsyncJobLimitError, r as ZendeskRateLimitError, t as ZendeskApiError } from "./errors-BPAyL8gM.mjs";
|
|
2
|
+
import { i as zendeskPlatform, t as zendeskCustom } from "./integration-BGHdDCMn.mjs";
|
|
3
|
+
import { CredentialRevokedError } from "@keystrokehq/core/errors";
|
|
4
|
+
|
|
5
|
+
//#region src/client.ts
|
|
6
|
+
function normalizeZendeskSubdomain(subdomain) {
|
|
7
|
+
return subdomain.trim().toLowerCase().replace(/^https?:\/\//, "").replace(/\.zendesk\.com$/, "").replace(/\/.*$/, "");
|
|
8
|
+
}
|
|
9
|
+
function buildZendeskBaseUrl(subdomain) {
|
|
10
|
+
return `https://${normalizeZendeskSubdomain(subdomain)}.zendesk.com/api/v2`;
|
|
11
|
+
}
|
|
12
|
+
function normalizeZendeskPlatformCredentials(credentials) {
|
|
13
|
+
return {
|
|
14
|
+
kind: "platform",
|
|
15
|
+
subdomain: normalizeZendeskSubdomain(credentials.ZENDESK_SUBDOMAIN),
|
|
16
|
+
accessToken: credentials.ZENDESK_ACCESS_TOKEN,
|
|
17
|
+
credentialDefinitionId: zendeskPlatform.id
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function normalizeZendeskCustomCredentials(credentials) {
|
|
21
|
+
return {
|
|
22
|
+
kind: "custom",
|
|
23
|
+
subdomain: normalizeZendeskSubdomain(credentials.ZENDESK_SUBDOMAIN),
|
|
24
|
+
email: credentials.ZENDESK_EMAIL,
|
|
25
|
+
apiToken: credentials.ZENDESK_API_TOKEN,
|
|
26
|
+
credentialDefinitionId: zendeskCustom.id
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function createZendeskAuthHeader(auth) {
|
|
30
|
+
if (auth.kind === "platform") return `Bearer ${auth.accessToken}`;
|
|
31
|
+
return `Basic ${Buffer.from(`${auth.email}/token:${auth.apiToken}`).toString("base64")}`;
|
|
32
|
+
}
|
|
33
|
+
function appendQueryValue(url, key, value) {
|
|
34
|
+
if (value === void 0 || value === null) return;
|
|
35
|
+
if (Array.isArray(value)) {
|
|
36
|
+
for (const item of value) url.searchParams.append(key, String(item));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
url.searchParams.set(key, String(value));
|
|
40
|
+
}
|
|
41
|
+
function buildZendeskUrl(auth, path, query) {
|
|
42
|
+
const normalizedPath = path.startsWith("/") ? path : `/${path}`;
|
|
43
|
+
const url = new URL(`${buildZendeskBaseUrl(auth.subdomain)}${normalizedPath}`);
|
|
44
|
+
for (const [key, value] of Object.entries(query ?? {})) appendQueryValue(url, key, value);
|
|
45
|
+
return url.toString();
|
|
46
|
+
}
|
|
47
|
+
function maybeParseRetryAfter(value) {
|
|
48
|
+
if (!value) return;
|
|
49
|
+
const parsed = Number.parseInt(value, 10);
|
|
50
|
+
return Number.isFinite(parsed) ? parsed : void 0;
|
|
51
|
+
}
|
|
52
|
+
function isTooManyJobsError(payload) {
|
|
53
|
+
if (!payload || typeof payload !== "object") return false;
|
|
54
|
+
return payload.error === "TooManyJobs";
|
|
55
|
+
}
|
|
56
|
+
function extractZendeskErrorDescription(payload) {
|
|
57
|
+
if (!payload || typeof payload !== "object") return;
|
|
58
|
+
const record = payload;
|
|
59
|
+
const description = typeof record.description === "string" && record.description || typeof record.error === "string" && record.error || typeof record.message === "string" && record.message;
|
|
60
|
+
return description ? description : void 0;
|
|
61
|
+
}
|
|
62
|
+
function buildZendeskErrorMessage(method, path, status, payload) {
|
|
63
|
+
const description = extractZendeskErrorDescription(payload);
|
|
64
|
+
if (description) return `Zendesk API call failed while calling \`${method} ${path}\`: ${description}`;
|
|
65
|
+
return `Zendesk API call failed while calling \`${method} ${path}\` with status ${status}.`;
|
|
66
|
+
}
|
|
67
|
+
async function parseResponseBody(response) {
|
|
68
|
+
if (response.status === 204) return {};
|
|
69
|
+
const text = await response.text();
|
|
70
|
+
if (text.length === 0) return {};
|
|
71
|
+
try {
|
|
72
|
+
return JSON.parse(text);
|
|
73
|
+
} catch {
|
|
74
|
+
return text;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async function requestZendesk(auth, options) {
|
|
78
|
+
const response = await fetch(buildZendeskUrl(auth, options.path, options.query), {
|
|
79
|
+
method: options.method,
|
|
80
|
+
headers: {
|
|
81
|
+
Accept: "application/json",
|
|
82
|
+
Authorization: createZendeskAuthHeader(auth),
|
|
83
|
+
...options.body ? { "Content-Type": "application/json" } : {}
|
|
84
|
+
},
|
|
85
|
+
...options.body ? { body: JSON.stringify(options.body) } : {}
|
|
86
|
+
});
|
|
87
|
+
const payload = await parseResponseBody(response);
|
|
88
|
+
if (response.status === 401) throw new CredentialRevokedError(auth.credentialDefinitionId, `Zendesk authentication failed while calling \`${options.method} ${options.path}\`. The stored credentials for ${auth.credentialDefinitionId} may be revoked or expired.`);
|
|
89
|
+
if (response.status === 403) {
|
|
90
|
+
const detailMessage = extractZendeskErrorDescription(payload);
|
|
91
|
+
const suffix = detailMessage ? `: ${detailMessage}` : ".";
|
|
92
|
+
throw new ZendeskApiError(`Zendesk permission denied while calling \`${options.method} ${options.path}\`${suffix} The stored credentials for ${auth.credentialDefinitionId} are valid but lack the required role or scope for this action.`, {
|
|
93
|
+
status: response.status,
|
|
94
|
+
details: payload
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
if (response.status === 429) {
|
|
98
|
+
if (isTooManyJobsError(payload)) throw new ZendeskAsyncJobLimitError(buildZendeskErrorMessage(options.method, options.path, response.status, payload), {
|
|
99
|
+
currentJobIds: payload.current_job_ids,
|
|
100
|
+
resetAfterSeconds: maybeParseRetryAfter(response.headers.get("retry-after")),
|
|
101
|
+
details: payload
|
|
102
|
+
});
|
|
103
|
+
throw new ZendeskRateLimitError(buildZendeskErrorMessage(options.method, options.path, response.status, payload), {
|
|
104
|
+
retryAfterSeconds: maybeParseRetryAfter(response.headers.get("retry-after")),
|
|
105
|
+
details: payload
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
if (!response.ok) throw new ZendeskApiError(buildZendeskErrorMessage(options.method, options.path, response.status, payload), {
|
|
109
|
+
status: response.status,
|
|
110
|
+
details: payload
|
|
111
|
+
});
|
|
112
|
+
return options.schema.parse(payload);
|
|
113
|
+
}
|
|
114
|
+
function createZendeskClient(auth) {
|
|
115
|
+
return Object.freeze({
|
|
116
|
+
request: (options) => requestZendesk(auth, options),
|
|
117
|
+
get: (options) => requestZendesk(auth, {
|
|
118
|
+
...options,
|
|
119
|
+
method: "GET"
|
|
120
|
+
}),
|
|
121
|
+
post: (options) => requestZendesk(auth, {
|
|
122
|
+
...options,
|
|
123
|
+
method: "POST"
|
|
124
|
+
}),
|
|
125
|
+
put: (options) => requestZendesk(auth, {
|
|
126
|
+
...options,
|
|
127
|
+
method: "PUT"
|
|
128
|
+
}),
|
|
129
|
+
delete: (options) => requestZendesk(auth, {
|
|
130
|
+
...options,
|
|
131
|
+
method: "DELETE"
|
|
132
|
+
})
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
//#endregion
|
|
137
|
+
export { buildZendeskBaseUrl, createZendeskAuthHeader, createZendeskClient, normalizeZendeskCustomCredentials, normalizeZendeskPlatformCredentials };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { t as customGetJobStatus } from "../jobs-9tdPkCE1.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/custom/jobs.d.ts
|
|
4
|
+
declare namespace jobs_d_exports {
|
|
5
|
+
export { customGetJobStatus as getJobStatus };
|
|
6
|
+
}
|
|
7
|
+
//#endregion
|
|
8
|
+
export { customGetJobStatus as getJobStatus, jobs_d_exports as t };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { t as __exportAll } from "../chunk-DQk6qfdC.mjs";
|
|
2
|
+
import { t as customGetJobStatus } from "../jobs-BjDRvbsd.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/custom/jobs.ts
|
|
5
|
+
var jobs_exports = /* @__PURE__ */ __exportAll({ getJobStatus: () => customGetJobStatus });
|
|
6
|
+
|
|
7
|
+
//#endregion
|
|
8
|
+
export { customGetJobStatus as getJobStatus, jobs_exports as t };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { a as customDeleteOrganization, c as customUpdateOrganization, i as customCreateOrganization, n as customCountOrganizations, o as customGetOrganization, r as customCreateManyOrganizations, s as customListOrganizations, t as customAutocompleteOrganizations } from "../organizations-Ct_354Ea.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/custom/organizations.d.ts
|
|
4
|
+
declare namespace organizations_d_exports {
|
|
5
|
+
export { customAutocompleteOrganizations as autocompleteOrganizations, customCountOrganizations as countOrganizations, customCreateManyOrganizations as createManyOrganizations, customCreateOrganization as createOrganization, customDeleteOrganization as deleteOrganization, customGetOrganization as getOrganization, customListOrganizations as listOrganizations, customUpdateOrganization as updateOrganization };
|
|
6
|
+
}
|
|
7
|
+
//#endregion
|
|
8
|
+
export { customAutocompleteOrganizations as autocompleteOrganizations, customCountOrganizations as countOrganizations, customCreateManyOrganizations as createManyOrganizations, customCreateOrganization as createOrganization, customDeleteOrganization as deleteOrganization, customGetOrganization as getOrganization, customListOrganizations as listOrganizations, organizations_d_exports as t, customUpdateOrganization as updateOrganization };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { t as __exportAll } from "../chunk-DQk6qfdC.mjs";
|
|
2
|
+
import { a as customDeleteOrganization, c as customUpdateOrganization, i as customCreateOrganization, n as customCountOrganizations, o as customGetOrganization, r as customCreateManyOrganizations, s as customListOrganizations, t as customAutocompleteOrganizations } from "../organizations-BHCFYHgM.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/custom/organizations.ts
|
|
5
|
+
var organizations_exports = /* @__PURE__ */ __exportAll({
|
|
6
|
+
autocompleteOrganizations: () => customAutocompleteOrganizations,
|
|
7
|
+
countOrganizations: () => customCountOrganizations,
|
|
8
|
+
createManyOrganizations: () => customCreateManyOrganizations,
|
|
9
|
+
createOrganization: () => customCreateOrganization,
|
|
10
|
+
deleteOrganization: () => customDeleteOrganization,
|
|
11
|
+
getOrganization: () => customGetOrganization,
|
|
12
|
+
listOrganizations: () => customListOrganizations,
|
|
13
|
+
updateOrganization: () => customUpdateOrganization
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
//#endregion
|
|
17
|
+
export { customAutocompleteOrganizations as autocompleteOrganizations, customCountOrganizations as countOrganizations, customCreateManyOrganizations as createManyOrganizations, customCreateOrganization as createOrganization, customDeleteOrganization as deleteOrganization, customGetOrganization as getOrganization, customListOrganizations as listOrganizations, organizations_exports as t, customUpdateOrganization as updateOrganization };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { n as customSearch, t as customCountSearchResults } from "../search-CpISWBay.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/custom/search.d.ts
|
|
4
|
+
declare namespace search_d_exports {
|
|
5
|
+
export { customCountSearchResults as countSearchResults, customSearch as search };
|
|
6
|
+
}
|
|
7
|
+
//#endregion
|
|
8
|
+
export { customCountSearchResults as countSearchResults, customSearch as search, search_d_exports as t };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { t as __exportAll } from "../chunk-DQk6qfdC.mjs";
|
|
2
|
+
import { n as customSearch, t as customCountSearchResults } from "../search-BpPJ9ccR.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/custom/search.ts
|
|
5
|
+
var search_exports = /* @__PURE__ */ __exportAll({
|
|
6
|
+
countSearchResults: () => customCountSearchResults,
|
|
7
|
+
search: () => customSearch
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
//#endregion
|
|
11
|
+
export { customCountSearchResults as countSearchResults, customSearch as search, search_exports as t };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { a as customListTickets, c as customUpdateManyTickets, i as customGetTicket, l as customUpdateTicket, n as customCreateTicket, o as customMergeTickets, r as customDeleteTicket, s as customReplyToTicket, t as customCreateManyTickets } from "../tickets-DWxLBQOd.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/custom/tickets.d.ts
|
|
4
|
+
declare namespace tickets_d_exports {
|
|
5
|
+
export { customCreateManyTickets as createManyTickets, customCreateTicket as createTicket, customDeleteTicket as deleteTicket, customGetTicket as getTicket, customListTickets as listTickets, customMergeTickets as mergeTickets, customReplyToTicket as replyToTicket, customUpdateManyTickets as updateManyTickets, customUpdateTicket as updateTicket };
|
|
6
|
+
}
|
|
7
|
+
//#endregion
|
|
8
|
+
export { customCreateManyTickets as createManyTickets, customCreateTicket as createTicket, customDeleteTicket as deleteTicket, customGetTicket as getTicket, customListTickets as listTickets, customMergeTickets as mergeTickets, customReplyToTicket as replyToTicket, tickets_d_exports as t, customUpdateManyTickets as updateManyTickets, customUpdateTicket as updateTicket };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { t as __exportAll } from "../chunk-DQk6qfdC.mjs";
|
|
2
|
+
import { a as customListTickets, c as customUpdateManyTickets, i as customGetTicket, l as customUpdateTicket, n as customCreateTicket, o as customMergeTickets, r as customDeleteTicket, s as customReplyToTicket, t as customCreateManyTickets } from "../tickets-BnTr_JO7.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/custom/tickets.ts
|
|
5
|
+
var tickets_exports = /* @__PURE__ */ __exportAll({
|
|
6
|
+
createManyTickets: () => customCreateManyTickets,
|
|
7
|
+
createTicket: () => customCreateTicket,
|
|
8
|
+
deleteTicket: () => customDeleteTicket,
|
|
9
|
+
getTicket: () => customGetTicket,
|
|
10
|
+
listTickets: () => customListTickets,
|
|
11
|
+
mergeTickets: () => customMergeTickets,
|
|
12
|
+
replyToTicket: () => customReplyToTicket,
|
|
13
|
+
updateManyTickets: () => customUpdateManyTickets,
|
|
14
|
+
updateTicket: () => customUpdateTicket
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
//#endregion
|
|
18
|
+
export { customCreateManyTickets as createManyTickets, customCreateTicket as createTicket, customDeleteTicket as deleteTicket, customGetTicket as getTicket, customListTickets as listTickets, customMergeTickets as mergeTickets, customReplyToTicket as replyToTicket, tickets_exports as t, customUpdateManyTickets as updateManyTickets, customUpdateTicket as updateTicket };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { a as customGetUser, c as customUpdateManyUsers, i as customGetCurrentUser, l as customUpdateUser, n as customCreateUser, o as customListUsers, r as customDeleteUser, s as customSearchUsers, t as customCreateManyUsers } from "../users-4ecCBdGw.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/custom/users.d.ts
|
|
4
|
+
declare namespace users_d_exports {
|
|
5
|
+
export { customCreateManyUsers as createManyUsers, customCreateUser as createUser, customDeleteUser as deleteUser, customGetCurrentUser as getCurrentUser, customGetUser as getUser, customListUsers as listUsers, customSearchUsers as searchUsers, customUpdateManyUsers as updateManyUsers, customUpdateUser as updateUser };
|
|
6
|
+
}
|
|
7
|
+
//#endregion
|
|
8
|
+
export { customCreateManyUsers as createManyUsers, customCreateUser as createUser, customDeleteUser as deleteUser, customGetCurrentUser as getCurrentUser, customGetUser as getUser, customListUsers as listUsers, customSearchUsers as searchUsers, users_d_exports as t, customUpdateManyUsers as updateManyUsers, customUpdateUser as updateUser };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { t as __exportAll } from "../chunk-DQk6qfdC.mjs";
|
|
2
|
+
import { a as customGetUser, c as customUpdateManyUsers, i as customGetCurrentUser, l as customUpdateUser, n as customCreateUser, o as customListUsers, r as customDeleteUser, s as customSearchUsers, t as customCreateManyUsers } from "../users-BDj0GBC8.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/custom/users.ts
|
|
5
|
+
var users_exports = /* @__PURE__ */ __exportAll({
|
|
6
|
+
createManyUsers: () => customCreateManyUsers,
|
|
7
|
+
createUser: () => customCreateUser,
|
|
8
|
+
deleteUser: () => customDeleteUser,
|
|
9
|
+
getCurrentUser: () => customGetCurrentUser,
|
|
10
|
+
getUser: () => customGetUser,
|
|
11
|
+
listUsers: () => customListUsers,
|
|
12
|
+
searchUsers: () => customSearchUsers,
|
|
13
|
+
updateManyUsers: () => customUpdateManyUsers,
|
|
14
|
+
updateUser: () => customUpdateUser
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
//#endregion
|
|
18
|
+
export { customCreateManyUsers as createManyUsers, customCreateUser as createUser, customDeleteUser as deleteUser, customGetCurrentUser as getCurrentUser, customGetUser as getUser, customListUsers as listUsers, customSearchUsers as searchUsers, users_exports as t, customUpdateManyUsers as updateManyUsers, customUpdateUser as updateUser };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { t as jobs_d_exports } from "./custom/jobs.mjs";
|
|
2
|
+
import { t as organizations_d_exports } from "./custom/organizations.mjs";
|
|
3
|
+
import { t as search_d_exports } from "./custom/search.mjs";
|
|
4
|
+
import { t as tickets_d_exports } from "./custom/tickets.mjs";
|
|
5
|
+
import { t as customPolling } from "./triggers-BIrYDGYF.mjs";
|
|
6
|
+
import { t as users_d_exports } from "./custom/users.mjs";
|
|
7
|
+
export { jobs_d_exports as jobs, organizations_d_exports as organizations, customPolling as polling, search_d_exports as search, tickets_d_exports as tickets, users_d_exports as users };
|
package/dist/custom.mjs
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { t as customPolling } from "./triggers-ELU-gyey.mjs";
|
|
2
|
+
import { t as jobs_exports } from "./custom/jobs.mjs";
|
|
3
|
+
import { t as organizations_exports } from "./custom/organizations.mjs";
|
|
4
|
+
import { t as search_exports } from "./custom/search.mjs";
|
|
5
|
+
import { t as tickets_exports } from "./custom/tickets.mjs";
|
|
6
|
+
import { t as users_exports } from "./custom/users.mjs";
|
|
7
|
+
|
|
8
|
+
export { jobs_exports as jobs, organizations_exports as organizations, customPolling as polling, search_exports as search, tickets_exports as tickets, users_exports as users };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
//#region src/errors.ts
|
|
2
|
+
var ZendeskApiError = class extends Error {
|
|
3
|
+
status;
|
|
4
|
+
details;
|
|
5
|
+
constructor(message, options) {
|
|
6
|
+
super(message, options?.cause ? { cause: options.cause } : void 0);
|
|
7
|
+
this.name = "ZendeskApiError";
|
|
8
|
+
this.status = options?.status;
|
|
9
|
+
this.details = options?.details;
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
var ZendeskRateLimitError = class extends ZendeskApiError {
|
|
13
|
+
retryAfterSeconds;
|
|
14
|
+
constructor(message, options) {
|
|
15
|
+
super(message, {
|
|
16
|
+
status: 429,
|
|
17
|
+
details: options?.details
|
|
18
|
+
});
|
|
19
|
+
this.name = "ZendeskRateLimitError";
|
|
20
|
+
this.retryAfterSeconds = options?.retryAfterSeconds;
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
var ZendeskAsyncJobLimitError = class extends ZendeskApiError {
|
|
24
|
+
currentJobIds;
|
|
25
|
+
resetAfterSeconds;
|
|
26
|
+
constructor(message, options) {
|
|
27
|
+
super(message, {
|
|
28
|
+
status: 429,
|
|
29
|
+
details: options?.details
|
|
30
|
+
});
|
|
31
|
+
this.name = "ZendeskAsyncJobLimitError";
|
|
32
|
+
this.currentJobIds = options?.currentJobIds ?? [];
|
|
33
|
+
this.resetAfterSeconds = options?.resetAfterSeconds;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
//#endregion
|
|
38
|
+
export { ZendeskAsyncJobLimitError as n, ZendeskRateLimitError as r, ZendeskApiError as t };
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { ZendeskWebhookEvent, zendeskTicketPollingResponseSchema } from "./schemas.mjs";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
|
|
4
|
+
//#region src/events.d.ts
|
|
5
|
+
declare const zendeskUserCreatedEventSchema: z.ZodObject<{
|
|
6
|
+
eventId: z.ZodString;
|
|
7
|
+
type: z.ZodLiteral<"user.created">;
|
|
8
|
+
userId: z.ZodOptional<z.ZodNumber>;
|
|
9
|
+
subject: z.ZodString;
|
|
10
|
+
timestamp: z.ZodString;
|
|
11
|
+
detail: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
12
|
+
}, z.core.$strip>;
|
|
13
|
+
type ZendeskUserCreatedEvent = z.infer<typeof zendeskUserCreatedEventSchema>;
|
|
14
|
+
declare function mapZendeskUserCreatedEvent(payload: ZendeskWebhookEvent): ZendeskUserCreatedEvent | null;
|
|
15
|
+
declare const zendeskRecentTicketsEventSchema: z.ZodObject<{
|
|
16
|
+
eventId: z.ZodString;
|
|
17
|
+
type: z.ZodLiteral<"ticket.poll">;
|
|
18
|
+
tickets: z.ZodArray<z.ZodObject<{
|
|
19
|
+
id: z.ZodCoercedNumber<unknown>;
|
|
20
|
+
url: z.ZodOptional<z.ZodString>;
|
|
21
|
+
subject: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
22
|
+
description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
23
|
+
status: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
24
|
+
priority: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
25
|
+
requester_id: z.ZodOptional<z.ZodNullable<z.ZodCoercedNumber<unknown>>>;
|
|
26
|
+
submitter_id: z.ZodOptional<z.ZodNullable<z.ZodCoercedNumber<unknown>>>;
|
|
27
|
+
assignee_id: z.ZodOptional<z.ZodNullable<z.ZodCoercedNumber<unknown>>>;
|
|
28
|
+
organization_id: z.ZodOptional<z.ZodNullable<z.ZodCoercedNumber<unknown>>>;
|
|
29
|
+
type: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
30
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
31
|
+
created_at: z.ZodOptional<z.ZodString>;
|
|
32
|
+
updated_at: z.ZodOptional<z.ZodString>;
|
|
33
|
+
comment: z.ZodOptional<z.ZodObject<{
|
|
34
|
+
id: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
35
|
+
body: z.ZodOptional<z.ZodString>;
|
|
36
|
+
html_body: z.ZodOptional<z.ZodString>;
|
|
37
|
+
plain_body: z.ZodOptional<z.ZodString>;
|
|
38
|
+
public: z.ZodOptional<z.ZodBoolean>;
|
|
39
|
+
author_id: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
40
|
+
created_at: z.ZodOptional<z.ZodString>;
|
|
41
|
+
}, z.core.$strip>>;
|
|
42
|
+
}, z.core.$strip>>;
|
|
43
|
+
}, z.core.$strip>;
|
|
44
|
+
type ZendeskRecentTicketsEvent = z.infer<typeof zendeskRecentTicketsEventSchema>;
|
|
45
|
+
declare function mapZendeskRecentTicketsEvent(payload: z.output<typeof zendeskTicketPollingResponseSchema>): ZendeskRecentTicketsEvent | null;
|
|
46
|
+
//#endregion
|
|
47
|
+
export { ZendeskRecentTicketsEvent, ZendeskUserCreatedEvent, mapZendeskRecentTicketsEvent, mapZendeskUserCreatedEvent, zendeskRecentTicketsEventSchema, zendeskUserCreatedEventSchema };
|
package/dist/events.mjs
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { zendeskTicketSchema } from "./schemas.mjs";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
|
|
4
|
+
//#region src/events.ts
|
|
5
|
+
function extractNumericId(value) {
|
|
6
|
+
if (typeof value === "number" && Number.isFinite(value)) return value;
|
|
7
|
+
if (typeof value === "string" && value.trim().length > 0) {
|
|
8
|
+
const parsed = Number(value);
|
|
9
|
+
return Number.isFinite(parsed) ? parsed : void 0;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
const zendeskUserCreatedEventSchema = z.object({
|
|
13
|
+
eventId: z.string(),
|
|
14
|
+
type: z.literal("user.created"),
|
|
15
|
+
userId: z.number().int().nonnegative().optional(),
|
|
16
|
+
subject: z.string(),
|
|
17
|
+
timestamp: z.string(),
|
|
18
|
+
detail: z.record(z.string(), z.unknown())
|
|
19
|
+
});
|
|
20
|
+
const ZENDESK_USER_CREATED_EVENT_TYPES = new Set(["user.created", "zen:event-type:user.created"]);
|
|
21
|
+
function isZendeskUserCreatedEventType(type) {
|
|
22
|
+
const normalized = type.trim().toLowerCase();
|
|
23
|
+
if (ZENDESK_USER_CREATED_EVENT_TYPES.has(normalized)) return true;
|
|
24
|
+
return normalized.split(":").at(-1) === "user.created";
|
|
25
|
+
}
|
|
26
|
+
function mapZendeskUserCreatedEvent(payload) {
|
|
27
|
+
if (!isZendeskUserCreatedEventType(payload.type)) return null;
|
|
28
|
+
return {
|
|
29
|
+
eventId: payload.id,
|
|
30
|
+
type: "user.created",
|
|
31
|
+
userId: extractNumericId(payload.detail.id),
|
|
32
|
+
subject: payload.subject,
|
|
33
|
+
timestamp: payload.time,
|
|
34
|
+
detail: payload.detail
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const zendeskRecentTicketsEventSchema = z.object({
|
|
38
|
+
eventId: z.string(),
|
|
39
|
+
type: z.literal("ticket.poll"),
|
|
40
|
+
tickets: z.array(zendeskTicketSchema)
|
|
41
|
+
});
|
|
42
|
+
function buildTicketPollEventId(tickets) {
|
|
43
|
+
if (tickets.length === 0) return;
|
|
44
|
+
return tickets.map((ticket) => String(ticket.id)).sort((left, right) => left.localeCompare(right)).join(",");
|
|
45
|
+
}
|
|
46
|
+
function mapZendeskRecentTicketsEvent(payload) {
|
|
47
|
+
if (payload.tickets.length === 0) return null;
|
|
48
|
+
const eventId = buildTicketPollEventId(payload.tickets);
|
|
49
|
+
if (!eventId) return null;
|
|
50
|
+
return {
|
|
51
|
+
eventId,
|
|
52
|
+
type: "ticket.poll",
|
|
53
|
+
tickets: payload.tickets
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
//#endregion
|
|
58
|
+
export { mapZendeskRecentTicketsEvent, mapZendeskUserCreatedEvent, zendeskRecentTicketsEventSchema, zendeskUserCreatedEventSchema };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { i as zendeskPlatform, t as zendeskCustom } from "./integration-BGHdDCMn.mjs";
|
|
2
|
+
import { createOfficialOperationFactory } from "@keystrokehq/integration-authoring/official";
|
|
3
|
+
|
|
4
|
+
//#region src/factory.ts
|
|
5
|
+
const zendeskPlatformOperation = createOfficialOperationFactory(zendeskPlatform);
|
|
6
|
+
const zendeskCustomOperation = createOfficialOperationFactory(zendeskCustom);
|
|
7
|
+
|
|
8
|
+
//#endregion
|
|
9
|
+
export { zendeskPlatformOperation as n, zendeskCustomOperation as t };
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { defineOfficialIntegration } from "@keystrokehq/integration-authoring/official";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { CredentialSet } from "@keystrokehq/core";
|
|
4
|
+
|
|
5
|
+
//#region src/_official/provider-app.ts
|
|
6
|
+
const zendeskPlatformAppCredentialSet = new CredentialSet({
|
|
7
|
+
id: "zendesk-platform-app",
|
|
8
|
+
exposure: "platform-only",
|
|
9
|
+
name: "Zendesk Platform App",
|
|
10
|
+
auth: z.object({
|
|
11
|
+
clientId: z.string().min(1),
|
|
12
|
+
clientSecret: z.string().min(1),
|
|
13
|
+
webhookSigningSecret: z.string().min(1)
|
|
14
|
+
})
|
|
15
|
+
});
|
|
16
|
+
const zendeskPlatformProviderSeed = {
|
|
17
|
+
provider: "zendesk",
|
|
18
|
+
appRef: "zendesk-platform",
|
|
19
|
+
displayName: "Zendesk Platform",
|
|
20
|
+
credentialSetName: "Keystroke Zendesk Platform App",
|
|
21
|
+
envShape: {
|
|
22
|
+
KEYSTROKE_PLATFORM_ZENDESK_CLIENT_ID: z.string().optional(),
|
|
23
|
+
KEYSTROKE_PLATFORM_ZENDESK_CLIENT_SECRET: z.string().optional(),
|
|
24
|
+
KEYSTROKE_PLATFORM_ZENDESK_WEBHOOK_SIGNING_SECRET: z.string().optional()
|
|
25
|
+
},
|
|
26
|
+
requiredEnvKeys: [
|
|
27
|
+
"KEYSTROKE_PLATFORM_ZENDESK_CLIENT_ID",
|
|
28
|
+
"KEYSTROKE_PLATFORM_ZENDESK_CLIENT_SECRET",
|
|
29
|
+
"KEYSTROKE_PLATFORM_ZENDESK_WEBHOOK_SIGNING_SECRET"
|
|
30
|
+
],
|
|
31
|
+
externalAppIdEnvKey: "KEYSTROKE_PLATFORM_ZENDESK_CLIENT_ID",
|
|
32
|
+
buildCredentials: (env) => ({
|
|
33
|
+
clientId: env.KEYSTROKE_PLATFORM_ZENDESK_CLIENT_ID,
|
|
34
|
+
clientSecret: env.KEYSTROKE_PLATFORM_ZENDESK_CLIENT_SECRET,
|
|
35
|
+
webhookSigningSecret: env.KEYSTROKE_PLATFORM_ZENDESK_WEBHOOK_SIGNING_SECRET
|
|
36
|
+
})
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
//#endregion
|
|
40
|
+
//#region src/integration.ts
|
|
41
|
+
const zendeskSubdomainSchema = z.string().trim().min(1).regex(/^[a-zA-Z0-9-]+$/, { error: "Zendesk subdomain must contain only letters, numbers, and hyphens" });
|
|
42
|
+
const zendeskPlatformAuthSchema = z.object({
|
|
43
|
+
ZENDESK_ACCESS_TOKEN: z.string().min(1),
|
|
44
|
+
ZENDESK_SUBDOMAIN: zendeskSubdomainSchema
|
|
45
|
+
});
|
|
46
|
+
const zendeskCustomAuthSchema = z.object({
|
|
47
|
+
ZENDESK_SUBDOMAIN: zendeskSubdomainSchema,
|
|
48
|
+
ZENDESK_EMAIL: z.email(),
|
|
49
|
+
ZENDESK_API_TOKEN: z.string().min(1)
|
|
50
|
+
});
|
|
51
|
+
const zendeskPlatformOfficialIntegration = {
|
|
52
|
+
id: "zendesk-platform",
|
|
53
|
+
publicId: "zendesk",
|
|
54
|
+
name: "Zendesk Platform",
|
|
55
|
+
description: "Zendesk Support integration via Keystroke-managed OAuth for tickets, users, organizations, search, and triggers",
|
|
56
|
+
auth: zendeskPlatformAuthSchema,
|
|
57
|
+
connections: [{
|
|
58
|
+
id: "oauth",
|
|
59
|
+
kind: "oauth",
|
|
60
|
+
tokenType: "refreshable",
|
|
61
|
+
authUrl: "https://{subdomain}.zendesk.com/oauth/authorizations/new",
|
|
62
|
+
tokenUrl: "https://{subdomain}.zendesk.com/oauth/tokens",
|
|
63
|
+
revokeUrl: "https://{subdomain}.zendesk.com/api/v2/oauth/tokens/current",
|
|
64
|
+
scopes: ["read", "write"],
|
|
65
|
+
vault: { accessToken: "ZENDESK_ACCESS_TOKEN" }
|
|
66
|
+
}]
|
|
67
|
+
};
|
|
68
|
+
const zendeskCustomOfficialIntegration = {
|
|
69
|
+
id: "zendesk-custom",
|
|
70
|
+
name: "Zendesk Custom",
|
|
71
|
+
description: "Zendesk Support integration via bring-your-own API token for tickets, users, organizations, and search",
|
|
72
|
+
auth: zendeskCustomAuthSchema
|
|
73
|
+
};
|
|
74
|
+
const zendeskPlatformBundle = defineOfficialIntegration({
|
|
75
|
+
...zendeskPlatformOfficialIntegration,
|
|
76
|
+
internal: { providerApp: zendeskPlatformAppCredentialSet }
|
|
77
|
+
});
|
|
78
|
+
const zendeskCustomBundle = defineOfficialIntegration(zendeskCustomOfficialIntegration);
|
|
79
|
+
const zendeskPlatform = zendeskPlatformBundle.credentialSet;
|
|
80
|
+
const zendeskCustom = zendeskCustomBundle.credentialSet;
|
|
81
|
+
|
|
82
|
+
//#endregion
|
|
83
|
+
export { zendeskPlatformBundle as a, zendeskPlatformProviderSeed as c, zendeskPlatform as i, zendeskCustomBundle as n, zendeskPlatformOfficialIntegration as o, zendeskCustomOfficialIntegration as r, zendeskPlatformAppCredentialSet as s, zendeskCustom as t };
|