@helmdesk/sdk 0.1.0 → 0.2.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 +231 -34
- package/dist/client.d.ts +9 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +24 -0
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/types/customers.d.ts +41 -0
- package/dist/types/customers.d.ts.map +1 -0
- package/dist/types/customers.js +2 -0
- package/dist/types/customers.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
# @helmdesk/sdk
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/@helmdesk/sdk)
|
|
4
|
+
[](https://github.com/MoloksInc/helmdesk/blob/main/LICENSE)
|
|
5
|
+
[](https://www.typescriptlang.org/)
|
|
6
|
+
|
|
7
|
+
The official Node.js/TypeScript SDK for [Helmdesk](https://helmdesk.dev) -- a unified helpdesk, transactional email gateway, and knowledge base built for developers.
|
|
4
8
|
|
|
5
9
|
## Install
|
|
6
10
|
|
|
@@ -8,55 +12,248 @@ Official Node.js SDK for the [Helmdesk](https://helmdesk.dev) API — helpdesk,
|
|
|
8
12
|
npm install @helmdesk/sdk
|
|
9
13
|
```
|
|
10
14
|
|
|
11
|
-
## Quick
|
|
15
|
+
## Quick Start
|
|
12
16
|
|
|
13
17
|
```ts
|
|
14
|
-
import { HelmdeskClient } from
|
|
18
|
+
import { HelmdeskClient } from "@helmdesk/sdk";
|
|
19
|
+
|
|
20
|
+
const helmdesk = new HelmdeskClient({ apiKey: process.env.HELMDESK_API_KEY! });
|
|
21
|
+
|
|
22
|
+
const ticket = await helmdesk.tickets.create({
|
|
23
|
+
subject: "Cannot login",
|
|
24
|
+
body: "Getting a 403 error on the dashboard.",
|
|
25
|
+
customerEmail: "jane@example.com",
|
|
26
|
+
});
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## API Reference
|
|
15
30
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
31
|
+
### Tickets
|
|
32
|
+
|
|
33
|
+
Manage support tickets -- create, list, update, and reply.
|
|
34
|
+
|
|
35
|
+
**List tickets**
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
const { tickets, total } = await helmdesk.tickets.list({
|
|
39
|
+
status: "open",
|
|
40
|
+
priority: "high",
|
|
41
|
+
search: "login",
|
|
42
|
+
page: 1,
|
|
43
|
+
limit: 25,
|
|
44
|
+
});
|
|
45
|
+
```
|
|
19
46
|
|
|
20
|
-
|
|
21
|
-
await helmdesk.emails.send({
|
|
22
|
-
templateKey: 'welcome',
|
|
23
|
-
to: { email: 'user@example.com', name: 'Jane' },
|
|
24
|
-
variables: { activationUrl: 'https://...' },
|
|
25
|
-
})
|
|
47
|
+
**Get a ticket**
|
|
26
48
|
|
|
27
|
-
|
|
49
|
+
```ts
|
|
50
|
+
const ticket = await helmdesk.tickets.get("ticket_id");
|
|
51
|
+
// Returns full detail: messages, tags, customer info
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**Create a ticket**
|
|
55
|
+
|
|
56
|
+
```ts
|
|
28
57
|
const ticket = await helmdesk.tickets.create({
|
|
29
|
-
subject:
|
|
30
|
-
body:
|
|
31
|
-
customerEmail:
|
|
32
|
-
|
|
58
|
+
subject: "Billing question",
|
|
59
|
+
body: "I was charged twice for my last invoice.",
|
|
60
|
+
customerEmail: "user@example.com",
|
|
61
|
+
customerName: "Jane Doe",
|
|
62
|
+
priority: "high",
|
|
63
|
+
category: "billing",
|
|
64
|
+
});
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Update a ticket**
|
|
68
|
+
|
|
69
|
+
```ts
|
|
70
|
+
const updated = await helmdesk.tickets.update("ticket_id", {
|
|
71
|
+
status: "resolved",
|
|
72
|
+
priority: "low",
|
|
73
|
+
category: "howto",
|
|
74
|
+
});
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**Add a message to a ticket**
|
|
78
|
+
|
|
79
|
+
```ts
|
|
80
|
+
const message = await helmdesk.tickets.addMessage("ticket_id", {
|
|
81
|
+
body: "We've fixed the issue. Please try again.",
|
|
82
|
+
});
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Emails
|
|
86
|
+
|
|
87
|
+
Send transactional emails using Handlebars templates managed in your Helmdesk dashboard.
|
|
88
|
+
|
|
89
|
+
**Send an email**
|
|
90
|
+
|
|
91
|
+
```ts
|
|
92
|
+
const result = await helmdesk.emails.send({
|
|
93
|
+
templateKey: "welcome",
|
|
94
|
+
to: { email: "jane@example.com", name: "Jane" },
|
|
95
|
+
variables: { activationUrl: "https://app.example.com/activate?token=abc" },
|
|
96
|
+
environment: "production",
|
|
97
|
+
});
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**Preview an email**
|
|
101
|
+
|
|
102
|
+
```ts
|
|
103
|
+
const { subject, html } = await helmdesk.emails.preview({
|
|
104
|
+
templateKey: "welcome",
|
|
105
|
+
variables: { activationUrl: "https://example.com" },
|
|
106
|
+
});
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
**Get a template's variable schema**
|
|
110
|
+
|
|
111
|
+
```ts
|
|
112
|
+
const schema = await helmdesk.emails.getTemplateSchema("welcome");
|
|
113
|
+
// schema.variables: [{ name: 'activationUrl', type: 'string', required: true }]
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Articles
|
|
117
|
+
|
|
118
|
+
Search your published knowledge base articles.
|
|
33
119
|
|
|
34
|
-
|
|
35
|
-
const
|
|
120
|
+
```ts
|
|
121
|
+
const { articles, total } = await helmdesk.articles.search({
|
|
122
|
+
q: "reset password",
|
|
123
|
+
category: "account",
|
|
124
|
+
page: 1,
|
|
125
|
+
limit: 10,
|
|
126
|
+
});
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Customers
|
|
36
130
|
|
|
37
|
-
|
|
131
|
+
Track and manage customer profiles across tickets and emails.
|
|
132
|
+
|
|
133
|
+
**List customers**
|
|
134
|
+
|
|
135
|
+
```ts
|
|
136
|
+
const { customers, total } = await helmdesk.customers.list({
|
|
137
|
+
search: "jane",
|
|
138
|
+
plan: "pro",
|
|
139
|
+
page: 1,
|
|
140
|
+
limit: 25,
|
|
141
|
+
});
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
**Get a customer**
|
|
145
|
+
|
|
146
|
+
```ts
|
|
147
|
+
const customer = await helmdesk.customers.get("customer_id");
|
|
148
|
+
// Includes recentTickets array
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**Upsert a customer**
|
|
152
|
+
|
|
153
|
+
```ts
|
|
154
|
+
const customer = await helmdesk.customers.upsert({
|
|
155
|
+
email: "jane@example.com",
|
|
156
|
+
name: "Jane Doe",
|
|
157
|
+
plan: "pro",
|
|
158
|
+
metadata: JSON.stringify({ companyId: "acme-123" }),
|
|
159
|
+
});
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Error Handling
|
|
163
|
+
|
|
164
|
+
All API errors throw a `HelmdeskError` with structured fields for programmatic handling.
|
|
165
|
+
|
|
166
|
+
```ts
|
|
167
|
+
import { HelmdeskClient, HelmdeskError } from "@helmdesk/sdk";
|
|
168
|
+
|
|
169
|
+
try {
|
|
170
|
+
await helmdesk.tickets.get("nonexistent_id");
|
|
171
|
+
} catch (err) {
|
|
172
|
+
if (err instanceof HelmdeskError) {
|
|
173
|
+
console.error(err.status); // 404
|
|
174
|
+
console.error(err.code); // 'not_found'
|
|
175
|
+
console.error(err.message); // 'Ticket not found'
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Idempotency
|
|
181
|
+
|
|
182
|
+
The `emails.send()` method accepts an optional `idempotencyKey` to safely retry email sends without duplicates. If a request with the same key has already been processed, the API returns the original result.
|
|
183
|
+
|
|
184
|
+
```ts
|
|
185
|
+
await helmdesk.emails.send(
|
|
186
|
+
{
|
|
187
|
+
templateKey: "order-confirmation",
|
|
188
|
+
to: { email: "buyer@example.com" },
|
|
189
|
+
variables: { orderId: "ORD-4821" },
|
|
190
|
+
},
|
|
191
|
+
{ idempotencyKey: "order-4821-confirmation" }
|
|
192
|
+
);
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## Template Import
|
|
196
|
+
|
|
197
|
+
Import Handlebars `.hbs` files as templates, layouts, or partials directly from your codebase or CI pipeline.
|
|
198
|
+
|
|
199
|
+
**Project-scoped template**
|
|
200
|
+
|
|
201
|
+
```ts
|
|
38
202
|
await helmdesk.emails.templates.import(
|
|
39
|
-
'<h1>
|
|
40
|
-
|
|
41
|
-
{
|
|
42
|
-
|
|
203
|
+
'<h1>Welcome, {{name}}</h1><p>Thanks for signing up.</p>',
|
|
204
|
+
"welcome.hbs",
|
|
205
|
+
{
|
|
206
|
+
type: "template",
|
|
207
|
+
subject: "Welcome to {{brandName}}!",
|
|
208
|
+
}
|
|
209
|
+
);
|
|
43
210
|
```
|
|
44
211
|
|
|
45
|
-
|
|
212
|
+
**Account-scoped partial (shared across all projects)**
|
|
213
|
+
|
|
214
|
+
```ts
|
|
215
|
+
await helmdesk.emails.templates.import(
|
|
216
|
+
'<footer>{{companyName}} | {{unsubscribeLink}}</footer>',
|
|
217
|
+
"footer.hbs",
|
|
218
|
+
{
|
|
219
|
+
type: "partial",
|
|
220
|
+
scope: "account",
|
|
221
|
+
}
|
|
222
|
+
);
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Import options:
|
|
226
|
+
|
|
227
|
+
| Option | Type | Description |
|
|
228
|
+
|---|---|---|
|
|
229
|
+
| `type` | `'template' \| 'layout' \| 'partial'` | File type. Defaults to `'template'`. |
|
|
230
|
+
| `scope` | `'project' \| 'account'` | Project-scoped or shared across all projects. Defaults to `'project'`. |
|
|
231
|
+
| `key` | `string` | Override the template key. Defaults to the filename without `.hbs`. |
|
|
232
|
+
| `name` | `string` | Override the display name. |
|
|
233
|
+
| `subject` | `string` | Subject line. Can also be set via a `{{!-- subject: ... --}}` comment in the template. |
|
|
234
|
+
|
|
235
|
+
## Runtime Support
|
|
236
|
+
|
|
237
|
+
The SDK uses the native `fetch` API with no Node.js-specific dependencies.
|
|
238
|
+
|
|
239
|
+
- Node.js 18+
|
|
240
|
+
- Deno
|
|
241
|
+
- Bun
|
|
242
|
+
- Cloudflare Workers
|
|
243
|
+
|
|
244
|
+
## Why Helmdesk?
|
|
46
245
|
|
|
47
|
-
|
|
48
|
-
- `helmdesk.emails` — send, preview, getTemplateSchema
|
|
49
|
-
- `helmdesk.emails.templates` — import (project or account scope)
|
|
50
|
-
- `helmdesk.articles` — search
|
|
246
|
+
Most helpdesk tools are built for sales teams, not developers. They charge per seat, lock AI behind usage fees, and offer no API-first workflow.
|
|
51
247
|
|
|
52
|
-
|
|
248
|
+
Intercom starts at $29/seat with an additional $0.99 per AI resolution. HelpScout charges $25/user plus $0.75 per AI interaction. Crisp costs $95/workspace for their business tier.
|
|
53
249
|
|
|
54
|
-
-
|
|
55
|
-
- Works in Deno, Bun, and Cloudflare Workers
|
|
250
|
+
Helmdesk is $19/month for up to 5 projects. AI features are included at every tier -- no per-resolution fees, no per-seat pricing. You get a helpdesk, transactional email gateway, and knowledge base in one platform with a full API and this SDK from day one.
|
|
56
251
|
|
|
57
|
-
##
|
|
252
|
+
## Links
|
|
58
253
|
|
|
59
|
-
|
|
254
|
+
- [Homepage](https://helmdesk.dev)
|
|
255
|
+
- [Documentation](https://helmdesk.dev/docs)
|
|
256
|
+
- [Pricing](https://helmdesk.dev/pricing)
|
|
60
257
|
|
|
61
258
|
## License
|
|
62
259
|
|
package/dist/client.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Ticket, TicketDetail, TicketListResult, TicketListFilters, CreateTicketInput, UpdateTicketInput, CreateMessageInput, TicketMessage } from './types/tickets';
|
|
2
2
|
import type { SendEmailInput, SendEmailResult, PreviewEmailInput, PreviewEmailResult, TemplateSchema, ImportResult, ImportOptions } from './types/emails';
|
|
3
3
|
import type { ArticleSearchResult, ArticleSearchFilters } from './types/articles';
|
|
4
|
+
import type { Customer, CustomerWithTickets, CustomerListResult, CustomerListFilters, UpsertCustomerInput } from './types/customers';
|
|
4
5
|
export interface HelmdeskClientOptions {
|
|
5
6
|
apiKey: string;
|
|
6
7
|
baseUrl?: string;
|
|
@@ -11,6 +12,7 @@ export declare class HelmdeskClient {
|
|
|
11
12
|
readonly tickets: TicketsResource;
|
|
12
13
|
readonly emails: EmailsResource;
|
|
13
14
|
readonly articles: ArticlesResource;
|
|
15
|
+
readonly customers: CustomersResource;
|
|
14
16
|
constructor(options: HelmdeskClientOptions);
|
|
15
17
|
/** Make a JSON API request. Used internally by resource classes. */
|
|
16
18
|
request<T>(method: string, path: string, options?: {
|
|
@@ -64,6 +66,13 @@ declare class TemplatesResource {
|
|
|
64
66
|
*/
|
|
65
67
|
import(fileContent: string | Blob, fileName: string, options?: ImportOptions): Promise<ImportResult>;
|
|
66
68
|
}
|
|
69
|
+
declare class CustomersResource {
|
|
70
|
+
private client;
|
|
71
|
+
constructor(client: HelmdeskClient);
|
|
72
|
+
list(filters?: CustomerListFilters): Promise<CustomerListResult>;
|
|
73
|
+
get(customerId: string): Promise<CustomerWithTickets>;
|
|
74
|
+
upsert(input: UpsertCustomerInput): Promise<Customer>;
|
|
75
|
+
}
|
|
67
76
|
declare class ArticlesResource {
|
|
68
77
|
private client;
|
|
69
78
|
constructor(client: HelmdeskClient);
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,MAAM,EACN,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACd,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,aAAa,EACd,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -5,6 +5,7 @@ export class HelmdeskClient {
|
|
|
5
5
|
tickets;
|
|
6
6
|
emails;
|
|
7
7
|
articles;
|
|
8
|
+
customers;
|
|
8
9
|
constructor(options) {
|
|
9
10
|
if (!options.apiKey)
|
|
10
11
|
throw new Error('apiKey is required');
|
|
@@ -13,6 +14,7 @@ export class HelmdeskClient {
|
|
|
13
14
|
this.tickets = new TicketsResource(this);
|
|
14
15
|
this.emails = new EmailsResource(this);
|
|
15
16
|
this.articles = new ArticlesResource(this);
|
|
17
|
+
this.customers = new CustomersResource(this);
|
|
16
18
|
}
|
|
17
19
|
/** Make a JSON API request. Used internally by resource classes. */
|
|
18
20
|
async request(method, path, options) {
|
|
@@ -165,6 +167,28 @@ class TemplatesResource {
|
|
|
165
167
|
return this.client.upload(path, formData);
|
|
166
168
|
}
|
|
167
169
|
}
|
|
170
|
+
class CustomersResource {
|
|
171
|
+
client;
|
|
172
|
+
constructor(client) {
|
|
173
|
+
this.client = client;
|
|
174
|
+
}
|
|
175
|
+
async list(filters) {
|
|
176
|
+
return this.client.request('GET', '/customers', {
|
|
177
|
+
params: {
|
|
178
|
+
search: filters?.search,
|
|
179
|
+
plan: filters?.plan,
|
|
180
|
+
page: filters?.page?.toString(),
|
|
181
|
+
limit: filters?.limit?.toString(),
|
|
182
|
+
},
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
async get(customerId) {
|
|
186
|
+
return this.client.request('GET', `/customers/${customerId}`);
|
|
187
|
+
}
|
|
188
|
+
async upsert(input) {
|
|
189
|
+
return this.client.request('PUT', '/customers', { body: input });
|
|
190
|
+
}
|
|
191
|
+
}
|
|
168
192
|
class ArticlesResource {
|
|
169
193
|
client;
|
|
170
194
|
constructor(client) {
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,5 +3,6 @@ export type { HelmdeskClientOptions } from './client';
|
|
|
3
3
|
export type { Ticket, TicketDetail, TicketMessage, TicketListResult, TicketListFilters, CreateTicketInput, UpdateTicketInput, CreateMessageInput, } from './types/tickets';
|
|
4
4
|
export type { SendEmailInput, SendEmailResult, PreviewEmailInput, PreviewEmailResult, TemplateSchema, TemplateVariable, ImportOptions, ImportResult, } from './types/emails';
|
|
5
5
|
export type { ArticleSearchResult, ArticleSearchFilters, } from './types/articles';
|
|
6
|
+
export type { Customer, CustomerWithTickets, CustomerListResult, CustomerListFilters, UpsertCustomerInput, } from './types/customers';
|
|
6
7
|
export type { HelmdeskError } from './types/errors';
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACzC,YAAY,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AACrD,YAAY,EACV,MAAM,EACN,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,iBAAiB,CAAA;AACxB,YAAY,EACV,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,YAAY,GACb,MAAM,gBAAgB,CAAA;AACvB,YAAY,EACV,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,kBAAkB,CAAA;AACzB,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACzC,YAAY,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AACrD,YAAY,EACV,MAAM,EACN,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,iBAAiB,CAAA;AACxB,YAAY,EACV,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,YAAY,GACb,MAAM,gBAAgB,CAAA;AACvB,YAAY,EACV,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,kBAAkB,CAAA;AACzB,YAAY,EACV,QAAQ,EACR,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export interface Customer {
|
|
2
|
+
id: string;
|
|
3
|
+
email: string;
|
|
4
|
+
name?: string | null;
|
|
5
|
+
plan?: string | null;
|
|
6
|
+
avatarUrl?: string | null;
|
|
7
|
+
metadata?: string | null;
|
|
8
|
+
lastSeenAt?: string | null;
|
|
9
|
+
createdAt: string;
|
|
10
|
+
updatedAt: string;
|
|
11
|
+
}
|
|
12
|
+
export interface CustomerWithTickets extends Customer {
|
|
13
|
+
recentTickets: {
|
|
14
|
+
id: string;
|
|
15
|
+
number: number;
|
|
16
|
+
subject: string;
|
|
17
|
+
status: string;
|
|
18
|
+
createdAt: string;
|
|
19
|
+
}[];
|
|
20
|
+
}
|
|
21
|
+
export interface CustomerListResult {
|
|
22
|
+
customers: (Customer & {
|
|
23
|
+
ticketCount: number;
|
|
24
|
+
})[];
|
|
25
|
+
total: number;
|
|
26
|
+
page: number;
|
|
27
|
+
limit: number;
|
|
28
|
+
}
|
|
29
|
+
export interface CustomerListFilters {
|
|
30
|
+
search?: string;
|
|
31
|
+
plan?: string;
|
|
32
|
+
page?: number;
|
|
33
|
+
limit?: number;
|
|
34
|
+
}
|
|
35
|
+
export interface UpsertCustomerInput {
|
|
36
|
+
email: string;
|
|
37
|
+
name?: string;
|
|
38
|
+
plan?: string;
|
|
39
|
+
metadata?: string;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=customers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customers.d.ts","sourceRoot":"","sources":["../../src/types/customers.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,mBAAoB,SAAQ,QAAQ;IACnD,aAAa,EAAE;QACb,EAAE,EAAE,MAAM,CAAA;QACV,MAAM,EAAE,MAAM,CAAA;QACd,OAAO,EAAE,MAAM,CAAA;QACf,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,EAAE,MAAM,CAAA;KAClB,EAAE,CAAA;CACJ;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,CAAC,QAAQ,GAAG;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAA;IACjD,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customers.js","sourceRoot":"","sources":["../../src/types/customers.ts"],"names":[],"mappings":""}
|