@dugjason/front-node 0.1.0-alpha.2 → 0.1.0-beta.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 +110 -213
- package/dist/client.d.ts +8 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +23 -11
- package/dist/client.js.map +1 -1
- package/dist/core/client.d.ts +36 -0
- package/dist/core/client.d.ts.map +1 -0
- package/dist/core/client.js +89 -0
- package/dist/core/client.js.map +1 -0
- package/dist/core/errors.d.ts +55 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +124 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/paginator.d.ts +88 -0
- package/dist/core/paginator.d.ts.map +1 -0
- package/dist/core/paginator.js +129 -0
- package/dist/core/paginator.js.map +1 -0
- package/dist/core/resource.d.ts +143 -0
- package/dist/core/resource.d.ts.map +1 -0
- package/dist/core/resource.js +132 -0
- package/dist/core/resource.js.map +1 -0
- package/dist/endpoints/accounts.d.ts +34 -0
- package/dist/endpoints/accounts.d.ts.map +1 -0
- package/dist/endpoints/accounts.js +85 -0
- package/dist/endpoints/accounts.js.map +1 -0
- package/dist/endpoints/analytics.d.ts +32 -0
- package/dist/endpoints/analytics.d.ts.map +1 -0
- package/dist/endpoints/analytics.js +48 -0
- package/dist/endpoints/analytics.js.map +1 -0
- package/dist/endpoints/applications.d.ts +15 -0
- package/dist/endpoints/applications.d.ts.map +1 -0
- package/dist/endpoints/applications.js +17 -0
- package/dist/endpoints/applications.js.map +1 -0
- package/dist/endpoints/attachments.d.ts +8 -0
- package/dist/endpoints/attachments.d.ts.map +1 -0
- package/dist/endpoints/attachments.js +10 -0
- package/dist/endpoints/attachments.js.map +1 -0
- package/dist/endpoints/channels.d.ts +41 -0
- package/dist/endpoints/channels.d.ts.map +1 -0
- package/dist/endpoints/channels.js +64 -0
- package/dist/endpoints/channels.js.map +1 -0
- package/dist/endpoints/comments.d.ts +30 -0
- package/dist/endpoints/comments.d.ts.map +1 -0
- package/dist/endpoints/comments.js +45 -0
- package/dist/endpoints/comments.js.map +1 -0
- package/dist/endpoints/contacts.d.ts +46 -0
- package/dist/endpoints/contacts.d.ts.map +1 -0
- package/dist/endpoints/contacts.js +99 -0
- package/dist/endpoints/contacts.js.map +1 -0
- package/dist/endpoints/conversations.d.ts +77 -0
- package/dist/endpoints/conversations.d.ts.map +1 -0
- package/dist/endpoints/conversations.js +221 -0
- package/dist/endpoints/conversations.js.map +1 -0
- package/dist/endpoints/drafts.d.ts +12 -0
- package/dist/endpoints/drafts.d.ts.map +1 -0
- package/dist/endpoints/drafts.js +26 -0
- package/dist/endpoints/drafts.js.map +1 -0
- package/dist/endpoints/events.d.ts +13 -0
- package/dist/endpoints/events.d.ts.map +1 -0
- package/dist/endpoints/events.js +21 -0
- package/dist/endpoints/events.js.map +1 -0
- package/dist/endpoints/inboxes.d.ts +42 -0
- package/dist/endpoints/inboxes.d.ts.map +1 -0
- package/dist/endpoints/inboxes.js +83 -0
- package/dist/endpoints/inboxes.js.map +1 -0
- package/dist/endpoints/knowledge-base-articles.d.ts +8 -0
- package/dist/endpoints/knowledge-base-articles.d.ts.map +1 -0
- package/dist/endpoints/knowledge-base-articles.js +10 -0
- package/dist/endpoints/knowledge-base-articles.js.map +1 -0
- package/dist/endpoints/knowledge-bases.d.ts +50 -0
- package/dist/endpoints/knowledge-bases.d.ts.map +1 -0
- package/dist/endpoints/knowledge-bases.js +131 -0
- package/dist/endpoints/knowledge-bases.js.map +1 -0
- package/dist/endpoints/links.d.ts +30 -0
- package/dist/endpoints/links.d.ts.map +1 -0
- package/dist/endpoints/links.js +67 -0
- package/dist/endpoints/links.js.map +1 -0
- package/dist/endpoints/message-template-folders.d.ts +38 -0
- package/dist/endpoints/message-template-folders.d.ts.map +1 -0
- package/dist/endpoints/message-template-folders.js +114 -0
- package/dist/endpoints/message-template-folders.js.map +1 -0
- package/dist/endpoints/message-templates.d.ts +30 -0
- package/dist/endpoints/message-templates.d.ts.map +1 -0
- package/dist/endpoints/message-templates.js +69 -0
- package/dist/endpoints/message-templates.js.map +1 -0
- package/dist/endpoints/messages.d.ts +21 -0
- package/dist/endpoints/messages.d.ts.map +1 -0
- package/dist/endpoints/messages.js +31 -0
- package/dist/endpoints/messages.js.map +1 -0
- package/dist/endpoints/rules.d.ts +16 -0
- package/dist/endpoints/rules.d.ts.map +1 -0
- package/dist/endpoints/rules.js +21 -0
- package/dist/endpoints/rules.js.map +1 -0
- package/dist/endpoints/shifts.d.ts +46 -0
- package/dist/endpoints/shifts.d.ts.map +1 -0
- package/dist/endpoints/shifts.js +70 -0
- package/dist/endpoints/shifts.js.map +1 -0
- package/dist/endpoints/signatures.d.ts +36 -0
- package/dist/endpoints/signatures.d.ts.map +1 -0
- package/dist/endpoints/signatures.js +52 -0
- package/dist/endpoints/signatures.js.map +1 -0
- package/dist/endpoints/statuses.d.ts +15 -0
- package/dist/endpoints/statuses.d.ts.map +1 -0
- package/dist/endpoints/statuses.js +22 -0
- package/dist/endpoints/statuses.js.map +1 -0
- package/dist/endpoints/tags.d.ts +30 -0
- package/dist/endpoints/tags.d.ts.map +1 -0
- package/dist/endpoints/tags.js +49 -0
- package/dist/endpoints/tags.js.map +1 -0
- package/dist/endpoints/teammate-groups.d.ts +47 -0
- package/dist/endpoints/teammate-groups.d.ts.map +1 -0
- package/dist/endpoints/teammate-groups.js +101 -0
- package/dist/endpoints/teammate-groups.js.map +1 -0
- package/dist/endpoints/teammates.d.ts +28 -0
- package/dist/endpoints/teammates.d.ts.map +1 -0
- package/dist/endpoints/teammates.js +59 -0
- package/dist/endpoints/teammates.js.map +1 -0
- package/dist/endpoints/teams.d.ts +37 -0
- package/dist/endpoints/teams.d.ts.map +1 -0
- package/dist/endpoints/teams.js +79 -0
- package/dist/endpoints/teams.js.map +1 -0
- package/dist/front.d.ts +85 -21
- package/dist/front.d.ts.map +1 -1
- package/dist/front.js +137 -33
- package/dist/front.js.map +1 -1
- package/dist/generated/client/client.gen.d.ts +3 -0
- package/dist/generated/client/client.gen.d.ts.map +1 -0
- package/dist/generated/client/client.gen.js +204 -0
- package/dist/generated/client/client.gen.js.map +1 -0
- package/dist/generated/client/index.d.ts +8 -0
- package/dist/generated/client/index.d.ts.map +1 -0
- package/dist/generated/client/index.js +6 -0
- package/dist/generated/client/index.js.map +1 -0
- package/dist/generated/client/types.gen.d.ts +125 -0
- package/dist/generated/client/types.gen.d.ts.map +1 -0
- package/dist/generated/client/types.gen.js +3 -0
- package/dist/generated/client/types.gen.js.map +1 -0
- package/dist/generated/client/utils.gen.d.ts +39 -0
- package/dist/generated/client/utils.gen.d.ts.map +1 -0
- package/dist/generated/client/utils.gen.js +230 -0
- package/dist/generated/client/utils.gen.js.map +1 -0
- package/dist/generated/client.gen.d.ts +13 -0
- package/dist/generated/client.gen.d.ts.map +1 -0
- package/dist/generated/client.gen.js +6 -0
- package/dist/generated/client.gen.js.map +1 -0
- package/dist/generated/core/auth.gen.d.ts +19 -0
- package/dist/generated/core/auth.gen.d.ts.map +1 -0
- package/dist/generated/core/auth.gen.js +15 -0
- package/dist/generated/core/auth.gen.js.map +1 -0
- package/dist/generated/core/bodySerializer.gen.d.ts +18 -0
- package/dist/generated/core/bodySerializer.gen.d.ts.map +1 -0
- package/dist/generated/core/bodySerializer.gen.js +58 -0
- package/dist/generated/core/bodySerializer.gen.js.map +1 -0
- package/dist/generated/core/params.gen.d.ts +34 -0
- package/dist/generated/core/params.gen.d.ts.map +1 -0
- package/dist/generated/core/params.gen.js +89 -0
- package/dist/generated/core/params.gen.js.map +1 -0
- package/dist/generated/core/pathSerializer.gen.d.ts +34 -0
- package/dist/generated/core/pathSerializer.gen.d.ts.map +1 -0
- package/dist/generated/core/pathSerializer.gen.js +115 -0
- package/dist/generated/core/pathSerializer.gen.js.map +1 -0
- package/dist/generated/core/serverSentEvents.gen.d.ts +72 -0
- package/dist/generated/core/serverSentEvents.gen.d.ts.map +1 -0
- package/dist/generated/core/serverSentEvents.gen.js +136 -0
- package/dist/generated/core/serverSentEvents.gen.js.map +1 -0
- package/dist/generated/core/types.gen.d.ts +79 -0
- package/dist/generated/core/types.gen.d.ts.map +1 -0
- package/dist/generated/core/types.gen.js +3 -0
- package/dist/generated/core/types.gen.js.map +1 -0
- package/dist/generated/core/utils.gen.d.ts +15 -0
- package/dist/generated/core/utils.gen.d.ts.map +1 -0
- package/dist/generated/core/utils.gen.js +70 -0
- package/dist/generated/core/utils.gen.js.map +1 -0
- package/dist/generated/sdk.gen.d.ts +1292 -0
- package/dist/generated/sdk.gen.d.ts.map +1 -0
- package/dist/generated/sdk.gen.js +4202 -0
- package/dist/generated/sdk.gen.js.map +1 -0
- package/dist/generated/types.gen.d.ts +8492 -0
- package/dist/generated/types.gen.d.ts.map +1 -0
- package/dist/generated/types.gen.js +149 -0
- package/dist/generated/types.gen.js.map +1 -0
- package/dist/index.d.ts +26 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -8
- package/dist/index.js.map +1 -1
- package/dist/resources/accounts.d.ts +14 -37
- package/dist/resources/accounts.d.ts.map +1 -1
- package/dist/resources/accounts.js +34 -54
- package/dist/resources/accounts.js.map +1 -1
- package/dist/resources/analytics.d.ts +36 -0
- package/dist/resources/analytics.d.ts.map +1 -0
- package/dist/resources/analytics.js +82 -0
- package/dist/resources/analytics.js.map +1 -0
- package/dist/resources/applications.d.ts +9 -0
- package/dist/resources/applications.d.ts.map +1 -0
- package/dist/resources/applications.js +13 -0
- package/dist/resources/applications.js.map +1 -0
- package/dist/resources/channels.d.ts +18 -0
- package/dist/resources/channels.d.ts.map +1 -0
- package/dist/resources/channels.js +35 -0
- package/dist/resources/channels.js.map +1 -0
- package/dist/resources/comments.d.ts +18 -0
- package/dist/resources/comments.d.ts.map +1 -0
- package/dist/resources/comments.js +36 -0
- package/dist/resources/comments.js.map +1 -0
- package/dist/resources/contacts.d.ts +16 -0
- package/dist/resources/contacts.d.ts.map +1 -0
- package/dist/resources/contacts.js +37 -0
- package/dist/resources/contacts.js.map +1 -0
- package/dist/resources/conversations.d.ts +22 -39
- package/dist/resources/conversations.d.ts.map +1 -1
- package/dist/resources/conversations.js +52 -52
- package/dist/resources/conversations.js.map +1 -1
- package/dist/resources/drafts.d.ts +13 -25
- package/dist/resources/drafts.d.ts.map +1 -1
- package/dist/resources/drafts.js +31 -34
- package/dist/resources/drafts.js.map +1 -1
- package/dist/resources/events.d.ts +23 -0
- package/dist/resources/events.d.ts.map +1 -0
- package/dist/resources/events.js +28 -0
- package/dist/resources/events.js.map +1 -0
- package/dist/resources/inboxes.d.ts +12 -0
- package/dist/resources/inboxes.d.ts.map +1 -0
- package/dist/resources/inboxes.js +25 -0
- package/dist/resources/inboxes.js.map +1 -0
- package/dist/resources/knowledge-base-articles.d.ts +15 -0
- package/dist/resources/knowledge-base-articles.d.ts.map +1 -0
- package/dist/resources/knowledge-base-articles.js +34 -0
- package/dist/resources/knowledge-base-articles.js.map +1 -0
- package/dist/resources/knowledge-base-categories.d.ts +16 -0
- package/dist/resources/knowledge-base-categories.d.ts.map +1 -0
- package/dist/resources/knowledge-base-categories.js +37 -0
- package/dist/resources/knowledge-base-categories.js.map +1 -0
- package/dist/resources/knowledge-bases.d.ts +15 -0
- package/dist/resources/knowledge-bases.d.ts.map +1 -0
- package/dist/resources/knowledge-bases.js +35 -0
- package/dist/resources/knowledge-bases.js.map +1 -0
- package/dist/resources/links.d.ts +12 -0
- package/dist/resources/links.d.ts.map +1 -0
- package/dist/resources/links.js +25 -0
- package/dist/resources/links.js.map +1 -0
- package/dist/resources/message-template-folders.d.ts +13 -0
- package/dist/resources/message-template-folders.d.ts.map +1 -0
- package/dist/resources/message-template-folders.js +41 -0
- package/dist/resources/message-template-folders.js.map +1 -0
- package/dist/resources/message-templates.d.ts +16 -0
- package/dist/resources/message-templates.d.ts.map +1 -0
- package/dist/resources/message-templates.js +50 -0
- package/dist/resources/message-templates.js.map +1 -0
- package/dist/resources/messages.d.ts +36 -0
- package/dist/resources/messages.d.ts.map +1 -0
- package/dist/resources/messages.js +55 -0
- package/dist/resources/messages.js.map +1 -0
- package/dist/resources/rules.d.ts +11 -0
- package/dist/resources/rules.d.ts.map +1 -0
- package/dist/resources/rules.js +22 -0
- package/dist/resources/rules.js.map +1 -0
- package/dist/resources/shifts.d.ts +14 -0
- package/dist/resources/shifts.d.ts.map +1 -0
- package/dist/resources/shifts.js +31 -0
- package/dist/resources/shifts.js.map +1 -0
- package/dist/resources/signatures.d.ts +17 -0
- package/dist/resources/signatures.d.ts.map +1 -0
- package/dist/resources/signatures.js +51 -0
- package/dist/resources/signatures.js.map +1 -0
- package/dist/resources/statuses.d.ts +13 -0
- package/dist/resources/statuses.d.ts.map +1 -0
- package/dist/resources/statuses.js +28 -0
- package/dist/resources/statuses.js.map +1 -0
- package/dist/resources/tags.d.ts +15 -61
- package/dist/resources/tags.d.ts.map +1 -1
- package/dist/resources/tags.js +50 -88
- package/dist/resources/tags.js.map +1 -1
- package/dist/resources/teammate-groups.d.ts +17 -0
- package/dist/resources/teammate-groups.d.ts.map +1 -0
- package/dist/resources/teammate-groups.js +25 -0
- package/dist/resources/teammate-groups.js.map +1 -0
- package/dist/resources/teammates.d.ts +15 -27
- package/dist/resources/teammates.d.ts.map +1 -1
- package/dist/resources/teammates.js +37 -34
- package/dist/resources/teammates.js.map +1 -1
- package/dist/resources/teams.d.ts +11 -0
- package/dist/resources/teams.d.ts.map +1 -0
- package/dist/resources/teams.js +28 -0
- package/dist/resources/teams.js.map +1 -0
- package/dist/types.d.ts +13 -222
- package/dist/types.d.ts.map +1 -1
- package/package.json +9 -4
package/README.md
CHANGED
|
@@ -7,34 +7,30 @@ A modern TypeScript SDK for the [Front.com API](https://dev.frontapp.com/referen
|
|
|
7
7
|
```bash
|
|
8
8
|
npm install @dugjason/front-node
|
|
9
9
|
# or
|
|
10
|
-
pnpm
|
|
11
|
-
# or
|
|
12
|
-
yarn add @dugjason/front-node
|
|
10
|
+
pnpm add @dugjason/front-node
|
|
13
11
|
```
|
|
14
12
|
|
|
15
13
|
## Quick Start
|
|
16
14
|
|
|
17
15
|
```typescript
|
|
18
|
-
import { Front } from
|
|
16
|
+
import { Front } from " @dugjason/front-node"
|
|
19
17
|
|
|
20
18
|
// Initialize with API key (required)
|
|
21
|
-
const front = new Front({
|
|
22
|
-
apiKey: process.env.FRONT_API_KEY || 'your-api-key'
|
|
23
|
-
});
|
|
19
|
+
const front = new Front({ apiKey: "your-api-key" })
|
|
24
20
|
|
|
25
21
|
// Get token details
|
|
26
|
-
const tokenInfo = await front.me()
|
|
22
|
+
const tokenInfo = await front.me()
|
|
27
23
|
|
|
28
24
|
// Fetch a conversation
|
|
29
|
-
const conversation = await front.conversations.fetch(
|
|
25
|
+
const { conversation } = await front.conversations.fetch("cnv_12345")
|
|
30
26
|
|
|
31
27
|
// List teammates
|
|
32
|
-
const teammates = await front.teammates.list()
|
|
28
|
+
const { teammates } = await front.teammates.list()
|
|
33
29
|
|
|
34
30
|
// Update a teammate
|
|
35
|
-
await front.teammates.update(teammates
|
|
31
|
+
await front.teammates.update(teammates[0].id, {
|
|
36
32
|
is_available: true
|
|
37
|
-
})
|
|
33
|
+
})
|
|
38
34
|
```
|
|
39
35
|
|
|
40
36
|
## Authentication
|
|
@@ -48,34 +44,73 @@ OAuth provides automatic token refresh and is required for public integrations:
|
|
|
48
44
|
```typescript
|
|
49
45
|
const front = new Front({
|
|
50
46
|
oauth: {
|
|
51
|
-
clientId:
|
|
52
|
-
clientSecret:
|
|
53
|
-
accessToken:
|
|
54
|
-
refreshToken:
|
|
47
|
+
clientId: "your-oauth-client-id",
|
|
48
|
+
clientSecret: "your-oauth-client-secret",
|
|
49
|
+
accessToken: "your-current-access-token",
|
|
50
|
+
refreshToken: "your-refresh-token",
|
|
55
51
|
|
|
56
52
|
// Optional: Called when tokens are refreshed
|
|
57
53
|
onTokenRefresh: async (tokens) => {
|
|
58
54
|
// Save new tokens to your database
|
|
59
|
-
await saveTokensToDatabase(tokens)
|
|
55
|
+
await saveTokensToDatabase(tokens)
|
|
60
56
|
}
|
|
61
57
|
}
|
|
62
|
-
})
|
|
58
|
+
})
|
|
63
59
|
```
|
|
64
60
|
|
|
65
|
-
The SDK automatically refreshes tokens when they expire (
|
|
61
|
+
The SDK automatically refreshes tokens when they expire (Front issues OAuth access tokens with a 1hr TTL) and calls your `onTokenRefresh` callback with the new tokens.
|
|
66
62
|
|
|
67
63
|
### 2. API Key (Simple Setup)
|
|
68
64
|
|
|
69
65
|
For testing or single-instance usage:
|
|
70
66
|
|
|
71
67
|
```typescript
|
|
72
|
-
//
|
|
73
|
-
const front = new Front({
|
|
74
|
-
|
|
75
|
-
|
|
68
|
+
// Specify your API key when initializing the client
|
|
69
|
+
const front = new Front({ apiKey: "your-api-key" })
|
|
70
|
+
|
|
71
|
+
// Or omit the auth, and we'll load it from `process.env.FRONT_API_KEY` automatically
|
|
72
|
+
const front = new Front()
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Response Signature
|
|
76
|
+
|
|
77
|
+
All requests have similar return object structure.
|
|
78
|
+
The response will contain;
|
|
79
|
+
* a `response` object containing the raw response from the API
|
|
80
|
+
* the returned object(s) as either an object, list or an iterable list
|
|
81
|
+
|
|
82
|
+
### Single Object Responses
|
|
83
|
+
|
|
84
|
+
In cases where we're creating or fetching a single resource the response will contain an object matching the name of the resource. For example;
|
|
85
|
+
```typescript
|
|
86
|
+
const { tag } = front.tags.create({ ... })
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### List Responses
|
|
90
|
+
|
|
91
|
+
For lists of resources, we return a `page` containing `items`.
|
|
92
|
+
In some cases the Front API only returns a single page of resources (no pagination), but in others you can use the iterator to page through all results;
|
|
93
|
+
|
|
94
|
+
```typescript
|
|
95
|
+
const { page } = await front.accounts.list()
|
|
96
|
+
for (const account of page.items) {
|
|
97
|
+
await doSomething(account)
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Resource Classes
|
|
102
|
+
|
|
103
|
+
Resources are returned as instances of classes, such as a `Teammate` or `Message`. This allows us to support class instance methods such as `.update()` or .delete() methods on class resources.
|
|
104
|
+
For example, we can fetch a tag then update it;
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
// Fetch the tag
|
|
108
|
+
let { tag } = await front.tags.get(tagId)
|
|
76
109
|
|
|
77
|
-
//
|
|
78
|
-
|
|
110
|
+
// Then we can update it either using the class instance
|
|
111
|
+
tag = await tag.update({ highlight: "red" })
|
|
112
|
+
// or using the same `front.tags...` method
|
|
113
|
+
tag = await front.tags.update(tagId, { highlight: "red" })
|
|
79
114
|
```
|
|
80
115
|
|
|
81
116
|
## API Reference
|
|
@@ -84,58 +119,50 @@ const front = new Front({ apiKey: 'your-api-key' });
|
|
|
84
119
|
|
|
85
120
|
```typescript
|
|
86
121
|
// Get details about the current API token
|
|
87
|
-
const tokenInfo = await front.me()
|
|
88
|
-
console.log(
|
|
89
|
-
console.log(
|
|
122
|
+
const tokenInfo = await front.me()
|
|
123
|
+
console.log("Company name:", tokenInfo.name) // Company name
|
|
124
|
+
console.log("Company ID:", tokenInfo.id) // Company ID (e.g., 'cmp_123')
|
|
90
125
|
```
|
|
91
126
|
|
|
92
127
|
### Conversations
|
|
93
128
|
|
|
94
129
|
```typescript
|
|
95
130
|
// List conversations
|
|
96
|
-
const conversations = await front.conversations.list({
|
|
131
|
+
const { page: conversations } = await front.conversations.list({
|
|
132
|
+
q: "status:unassigned"
|
|
97
133
|
limit: 50,
|
|
98
|
-
|
|
99
|
-
});
|
|
134
|
+
})
|
|
100
135
|
|
|
101
136
|
// Fetch a specific conversation
|
|
102
|
-
const conversation = await front.conversations.fetch(
|
|
137
|
+
const { conversation } = await front.conversations.fetch("cnv_123")
|
|
103
138
|
|
|
104
139
|
// Update a conversation
|
|
105
|
-
await front.conversations.update(
|
|
106
|
-
status:
|
|
107
|
-
})
|
|
140
|
+
await front.conversations.update("cnv_123", {
|
|
141
|
+
status: "archived"
|
|
142
|
+
})
|
|
108
143
|
|
|
109
144
|
// Get conversation messages
|
|
110
|
-
const messages = await front.conversations.
|
|
145
|
+
const { page: messages } = await front.conversations.listMessages("cnv_123")
|
|
111
146
|
|
|
112
147
|
// Get conversation events
|
|
113
|
-
const events = await front.conversations.
|
|
148
|
+
const { page: events } = await front.conversations.listEvents("cnv_123")
|
|
114
149
|
```
|
|
115
150
|
|
|
116
151
|
### Teammates
|
|
117
152
|
|
|
118
153
|
```typescript
|
|
119
154
|
// List all teammates
|
|
120
|
-
const teammates = await front.teammates.list()
|
|
155
|
+
const { page: teammates } = await front.teammates.list()
|
|
121
156
|
|
|
122
157
|
// Fetch a specific teammate
|
|
123
|
-
const teammate = await front.teammates.fetch(
|
|
158
|
+
const { teammate } = await front.teammates.fetch("tea_123")
|
|
124
159
|
|
|
125
160
|
// Update a teammate
|
|
126
|
-
await front.teammates.update(
|
|
127
|
-
first_name:
|
|
128
|
-
last_name:
|
|
161
|
+
await front.teammates.update("tea_123", {
|
|
162
|
+
first_name: "John",
|
|
163
|
+
last_name: "Doe",
|
|
129
164
|
is_available: true
|
|
130
|
-
})
|
|
131
|
-
|
|
132
|
-
// Get teammate's inboxes
|
|
133
|
-
const inboxes = await front.teammates.getInboxes('tea_123');
|
|
134
|
-
|
|
135
|
-
// Get teammate's conversations
|
|
136
|
-
const conversations = await front.teammates.getConversations('tea_123', {
|
|
137
|
-
limit: 10
|
|
138
|
-
});
|
|
165
|
+
})
|
|
139
166
|
```
|
|
140
167
|
|
|
141
168
|
### Drafts
|
|
@@ -144,163 +171,23 @@ The drafts API allows you to create, edit, list, and delete draft messages. Draf
|
|
|
144
171
|
|
|
145
172
|
```typescript
|
|
146
173
|
// Create a new draft in a channel (starts a new conversation)
|
|
147
|
-
const
|
|
148
|
-
body:
|
|
149
|
-
subject:
|
|
150
|
-
to: [
|
|
151
|
-
cc: [
|
|
152
|
-
author_id:
|
|
153
|
-
mode:
|
|
174
|
+
const { draft } = await front.drafts.create("cha_123", {
|
|
175
|
+
body: "This is a new draft message",
|
|
176
|
+
subject: "Draft Subject",
|
|
177
|
+
to: ["customer@example.com"],
|
|
178
|
+
cc: ["manager@company.com"],
|
|
179
|
+
author_id: "tea_123",
|
|
180
|
+
mode: "private", // 'private' or 'shared'
|
|
154
181
|
should_add_default_signature: true
|
|
155
|
-
})
|
|
182
|
+
})
|
|
156
183
|
|
|
157
184
|
// Create a draft reply to an existing conversation
|
|
158
|
-
const
|
|
159
|
-
body:
|
|
160
|
-
channel_id:
|
|
161
|
-
author_id:
|
|
162
|
-
mode:
|
|
163
|
-
})
|
|
164
|
-
|
|
165
|
-
// List drafts in a conversation
|
|
166
|
-
const drafts = await front.drafts.list('cnv_123', {
|
|
167
|
-
limit: 10
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
// Edit/update a draft
|
|
171
|
-
const updatedDraft = await front.drafts.edit('msg_123', {
|
|
172
|
-
body: 'Updated draft content',
|
|
173
|
-
subject: 'Updated Subject',
|
|
174
|
-
channel_id: 'cha_123',
|
|
175
|
-
version: 'draft-version-token', // Required for safe updates
|
|
176
|
-
mode: 'shared'
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
// Delete a draft
|
|
180
|
-
await front.drafts.delete('msg_123', {
|
|
181
|
-
version: 'draft-version-token' // Required for safe deletion
|
|
182
|
-
});
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
**Important Notes about Drafts:**
|
|
186
|
-
- The `version` field is required for editing and deleting drafts to ensure safe concurrent operations
|
|
187
|
-
- Draft modes: `private` (visible to author only) or `shared` (visible to all teammates with access)
|
|
188
|
-
- When creating drafts in channels, you're starting a new conversation
|
|
189
|
-
- When creating draft replies, you're adding to an existing conversation
|
|
190
|
-
- Attachments can be included when creating drafts using base64-encoded data
|
|
191
|
-
|
|
192
|
-
## OAuth Token Management
|
|
193
|
-
|
|
194
|
-
When using OAuth, the SDK provides several utilities for token management:
|
|
195
|
-
|
|
196
|
-
```typescript
|
|
197
|
-
// Check if using OAuth
|
|
198
|
-
const isOAuth = front.isUsingOAuth();
|
|
199
|
-
|
|
200
|
-
// Get OAuth manager for advanced operations
|
|
201
|
-
const oauthManager = front.getOAuthManager();
|
|
202
|
-
if (oauthManager) {
|
|
203
|
-
// Force token refresh
|
|
204
|
-
const newToken = oauthManager.getAccessToken();
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
// Update OAuth configuration (e.g., after manual token refresh)
|
|
208
|
-
front.updateOAuthConfig({
|
|
209
|
-
accessToken: 'new-access-token',
|
|
210
|
-
refreshToken: 'new-refresh-token',
|
|
211
|
-
});
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
### Token Refresh Callback
|
|
215
|
-
|
|
216
|
-
The `onTokenRefresh` callback is crucial for OAuth implementations - it allows the SDK to notify your application when tokens are automatically refreshed, so you can save the updated tokens to your database or storage system.
|
|
217
|
-
|
|
218
|
-
**Example with database storage:**
|
|
219
|
-
```typescript
|
|
220
|
-
// Function to save tokens to your database
|
|
221
|
-
async function saveTokensToDatabase(userId: string, tokens: OAuthTokens) {
|
|
222
|
-
await db.users.update(userId, {
|
|
223
|
-
frontAccessToken: tokens.access_token,
|
|
224
|
-
frontRefreshToken: tokens.refresh_token,
|
|
225
|
-
updatedAt: new Date()
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
const front = new Front({
|
|
230
|
-
oauth: {
|
|
231
|
-
clientId: 'your-client-id',
|
|
232
|
-
clientSecret: 'your-client-secret',
|
|
233
|
-
accessToken: 'current-access-token',
|
|
234
|
-
refreshToken: 'current-refresh-token',
|
|
235
|
-
|
|
236
|
-
// SDK calls this whenever tokens are refreshed
|
|
237
|
-
onTokenRefresh: async (tokens) => {
|
|
238
|
-
console.log('Front SDK refreshed tokens, saving to database...');
|
|
239
|
-
await saveTokensToDatabase(currentUserId, tokens);
|
|
240
|
-
console.log('Tokens saved successfully');
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
});
|
|
244
|
-
|
|
245
|
-
// When any API call triggers a token refresh, your callback will be called
|
|
246
|
-
const conversations = await front.conversations.list(); // May trigger refresh + callback
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
### Concurrent Token Refresh Protection
|
|
250
|
-
|
|
251
|
-
The SDK uses an internal `refreshPromise` mechanism to prevent multiple simultaneous token refresh attempts. This ensures that if multiple API calls happen simultaneously when a token is expired, only one refresh request is made to the OAuth server, and your `onTokenRefresh` callback is only called once.
|
|
252
|
-
|
|
253
|
-
**How it works:**
|
|
254
|
-
- When the first API call detects an expired token, it starts the refresh process
|
|
255
|
-
- Any subsequent API calls that also detect the expired token will wait for the same refresh promise to complete
|
|
256
|
-
- Once the refresh is complete, `onTokenRefresh` is called once with the new tokens
|
|
257
|
-
- All waiting calls then proceed with the refreshed token
|
|
258
|
-
|
|
259
|
-
**Practical Example:**
|
|
260
|
-
```typescript
|
|
261
|
-
let refreshCount = 0;
|
|
262
|
-
|
|
263
|
-
const front = new Front({
|
|
264
|
-
oauth: {
|
|
265
|
-
clientId: 'your-client-id',
|
|
266
|
-
clientSecret: 'your-client-secret',
|
|
267
|
-
accessToken: 'expired-token',
|
|
268
|
-
refreshToken: 'your-refresh-token',
|
|
269
|
-
onTokenRefresh: async (tokens) => {
|
|
270
|
-
refreshCount++;
|
|
271
|
-
console.log(`Token refresh #${refreshCount}:`, tokens);
|
|
272
|
-
await saveTokensToDatabase(currentUserId, tokens);
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
});
|
|
276
|
-
|
|
277
|
-
// These calls happen simultaneously when token is expired
|
|
278
|
-
// Only ONE refresh request will be made, callback called once
|
|
279
|
-
const [conversations, teammates, accounts] = await Promise.all([
|
|
280
|
-
front.conversations.list(), // Triggers token refresh
|
|
281
|
-
front.teammates.list(), // Waits for existing refresh
|
|
282
|
-
front.accounts.list() // Waits for existing refresh
|
|
283
|
-
]);
|
|
284
|
-
|
|
285
|
-
console.log(`Refresh count: ${refreshCount}`); // Will be 1, not 3
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
This prevents rate limiting issues with the OAuth provider and ensures your database isn't hit with duplicate token updates.
|
|
289
|
-
|
|
290
|
-
## Configuration
|
|
291
|
-
|
|
292
|
-
```typescript
|
|
293
|
-
const front = new Front({
|
|
294
|
-
apiKey: 'your-api-key', // For API key auth
|
|
295
|
-
baseUrl: 'https://api2.frontapp.com', // optional, defaults to Front's API
|
|
296
|
-
oauth: { // For OAuth auth
|
|
297
|
-
clientId: 'your-client-id',
|
|
298
|
-
clientSecret: 'your-client-secret',
|
|
299
|
-
accessToken: 'current-access-token',
|
|
300
|
-
refreshToken: 'current-refresh-token',
|
|
301
|
-
onTokenRefresh: async (tokens) => { /* save tokens */ }
|
|
302
|
-
}
|
|
303
|
-
});
|
|
185
|
+
const { draft: reply } = await front.drafts.createReply("cnv_123", {
|
|
186
|
+
body: "This is a draft reply",
|
|
187
|
+
channel_id: "cha_123",
|
|
188
|
+
author_id: "tea_123",
|
|
189
|
+
mode: "shared"
|
|
190
|
+
})
|
|
304
191
|
```
|
|
305
192
|
|
|
306
193
|
## Error Handling
|
|
@@ -309,11 +196,13 @@ The SDK throws structured errors with helpful information:
|
|
|
309
196
|
|
|
310
197
|
```typescript
|
|
311
198
|
try {
|
|
312
|
-
const conversation = await front.conversations.fetch(
|
|
199
|
+
const { conversation } = await front.conversations.fetch("invalid-id")
|
|
313
200
|
} catch (error) {
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
201
|
+
if (error instanceof FrontError) {
|
|
202
|
+
console.error("Status:", error.status)
|
|
203
|
+
console.error("Message:", error.message)
|
|
204
|
+
console.error("Code:", error.code)
|
|
205
|
+
}
|
|
317
206
|
}
|
|
318
207
|
```
|
|
319
208
|
|
|
@@ -322,15 +211,23 @@ try {
|
|
|
322
211
|
The SDK is built with TypeScript and provides full type definitions:
|
|
323
212
|
|
|
324
213
|
```typescript
|
|
325
|
-
import { Front,
|
|
214
|
+
import { Front, type Account, type Contact } from "@dugjason/front-node"
|
|
326
215
|
|
|
327
|
-
const front = new Front({ apiKey:
|
|
216
|
+
const front = new Front({ apiKey: "your-api-key" })
|
|
328
217
|
|
|
329
218
|
// Full type safety
|
|
330
|
-
|
|
331
|
-
|
|
219
|
+
let account: Account
|
|
220
|
+
let contacts: Array<Contact>
|
|
221
|
+
const accountRes = await front.accounts.fetch("acc_123")
|
|
222
|
+
account = accountRes.account
|
|
223
|
+
const contactsRes = front.accounts.listContacts("acc_123")
|
|
224
|
+
contacts = contactsRes.page.items
|
|
332
225
|
```
|
|
333
226
|
|
|
227
|
+
## Pagination
|
|
228
|
+
|
|
229
|
+
The SDK supports robust pagination using iterators.
|
|
230
|
+
|
|
334
231
|
## Releases
|
|
335
232
|
|
|
336
233
|
This package uses automated publishing with manual version management. When changes are merged to the main branch, the current version in `package.json` is automatically published to npm.
|
package/dist/client.d.ts
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import { OAuthTokenManager } from "./oauth";
|
|
2
|
-
import type { FrontConfig
|
|
2
|
+
import type { FrontConfig } from "./types";
|
|
3
3
|
export declare class FrontClient {
|
|
4
4
|
private apiKey?;
|
|
5
|
-
private baseUrl;
|
|
6
5
|
private oauthManager?;
|
|
7
6
|
constructor(config: FrontConfig);
|
|
8
|
-
|
|
7
|
+
private setApiKey;
|
|
8
|
+
request<T>(options: {
|
|
9
|
+
method: string;
|
|
10
|
+
path: string;
|
|
11
|
+
body?: unknown;
|
|
12
|
+
params?: Record<string, unknown>;
|
|
13
|
+
}): Promise<T>;
|
|
9
14
|
private requestWithRetry;
|
|
10
15
|
/**
|
|
11
16
|
* Calculate retry delay based on retry-after header and exponential backoff
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,SAAS,CAAA;AAUtD,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,CAAQ;IACvB,OAAO,CAAC,YAAY,CAAC,CAAmB;gBAE5B,MAAM,EAAE,WAAW;IAkB/B,OAAO,CAAC,SAAS;IASX,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE;QACxB,MAAM,EAAE,MAAM,CAAA;QACd,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,CAAC,EAAE,OAAO,CAAA;QACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KACjC,GAAG,OAAO,CAAC,CAAC,CAAC;YAIA,gBAAgB;IAgG9B;;OAEG;IACH,OAAO,CAAC,aAAa;IAyBrB;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAgBnC;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;YACW,cAAc;IAyBtB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIlE,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAIjD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAIhD,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAIlD,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAIzD;;OAEG;IACH,eAAe,IAAI,iBAAiB,GAAG,SAAS;IAIhD;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,SAAS,EAAE,WAAW,CAAC,GAAG,IAAI;CAMzE"}
|
package/dist/client.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { client } from "./generated/client.gen";
|
|
1
2
|
import { OAuthTokenManager } from "./oauth";
|
|
2
3
|
// Rate limiting configuration
|
|
3
4
|
const RATE_LIMIT_CONFIG = {
|
|
@@ -8,29 +9,40 @@ const RATE_LIMIT_CONFIG = {
|
|
|
8
9
|
};
|
|
9
10
|
export class FrontClient {
|
|
10
11
|
apiKey;
|
|
11
|
-
baseUrl;
|
|
12
12
|
oauthManager;
|
|
13
13
|
constructor(config) {
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
client.setConfig({
|
|
15
|
+
baseUrl: config.baseUrl || "https://api2.frontapp.com",
|
|
16
|
+
});
|
|
17
|
+
if (config.apiKey) {
|
|
18
|
+
this.setApiKey(config.apiKey);
|
|
19
|
+
}
|
|
20
|
+
if (config.oauth) {
|
|
16
21
|
// OAuth configuration provided
|
|
17
22
|
this.oauthManager = new OAuthTokenManager(config.oauth);
|
|
18
23
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
if (!this.apiKey) {
|
|
23
|
-
throw new Error("API key is required when not using OAuth. Provide apiKey via config or FRONT_API_KEY environment variable.");
|
|
24
|
-
}
|
|
24
|
+
// Maybe exit here if no auth method is provided
|
|
25
|
+
if (!this.apiKey && !this.oauthManager) {
|
|
26
|
+
throw new Error("API key or OAuth configuration is required");
|
|
25
27
|
}
|
|
26
28
|
}
|
|
29
|
+
setApiKey(apiKey) {
|
|
30
|
+
this.apiKey = apiKey;
|
|
31
|
+
client.setConfig({
|
|
32
|
+
headers: {
|
|
33
|
+
Authorization: `Bearer ${apiKey}`,
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
}
|
|
27
37
|
async request(options) {
|
|
28
38
|
return this.requestWithRetry(options, 0);
|
|
29
39
|
}
|
|
30
40
|
async requestWithRetry(options, retryCount) {
|
|
31
41
|
const { method, path, body, params } = options;
|
|
32
42
|
// Build URL with query parameters
|
|
33
|
-
const
|
|
43
|
+
const baseUrl = client.getConfig().baseUrl ??
|
|
44
|
+
"https://api2.frontapp.com";
|
|
45
|
+
const url = new URL(path, baseUrl);
|
|
34
46
|
if (params) {
|
|
35
47
|
Object.entries(params).forEach(([key, value]) => {
|
|
36
48
|
if (value !== undefined && value !== null) {
|
|
@@ -59,7 +71,7 @@ export class FrontClient {
|
|
|
59
71
|
fetchOptions.body = JSON.stringify(body);
|
|
60
72
|
}
|
|
61
73
|
try {
|
|
62
|
-
const response = await fetch(url
|
|
74
|
+
const response = await fetch(url, fetchOptions);
|
|
63
75
|
// Handle token expiration for OAuth
|
|
64
76
|
if (response.status === 401 && this.oauthManager) {
|
|
65
77
|
// Token might be expired, try to refresh and retry once
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAG3C,8BAA8B;AAC9B,MAAM,iBAAiB,GAAG;IACxB,UAAU,EAAE,CAAC;IACb,SAAS,EAAE,KAAK,EAAE,WAAW;IAC7B,QAAQ,EAAE,MAAM,EAAE,aAAa;IAC/B,YAAY,EAAE,GAAG,EAAE,8CAA8C;CACzD,CAAA;AAEV,MAAM,OAAO,WAAW;IACd,MAAM,CAAS;IACf,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Client as GeneratedClient } from "../generated/client/types.gen";
|
|
2
|
+
import type { FrontConfig } from "../types";
|
|
3
|
+
/**
|
|
4
|
+
* Core HTTP client used by the SDK's handwritten resources.
|
|
5
|
+
*
|
|
6
|
+
* Responsibilities:
|
|
7
|
+
* - Configure and expose the generated HTTP client
|
|
8
|
+
* - Inject authentication (API key or OAuth) into every request
|
|
9
|
+
* - Refresh OAuth tokens on 401 responses and retry once
|
|
10
|
+
* - Normalize thrown errors into `FrontError` subclasses
|
|
11
|
+
*/
|
|
12
|
+
export declare class APIClient {
|
|
13
|
+
private readonly gen;
|
|
14
|
+
private apiKey?;
|
|
15
|
+
private oauthManager?;
|
|
16
|
+
private readonly maxRetries;
|
|
17
|
+
/**
|
|
18
|
+
* Create a new API client.
|
|
19
|
+
*
|
|
20
|
+
* @param config - Front configuration including API key or OAuth settings and optional overrides
|
|
21
|
+
*/
|
|
22
|
+
constructor(config?: FrontConfig & {
|
|
23
|
+
maxRetries?: number;
|
|
24
|
+
});
|
|
25
|
+
/**
|
|
26
|
+
* Access the configured generated client for low-level operations.
|
|
27
|
+
*/
|
|
28
|
+
getGenClient(): GeneratedClient;
|
|
29
|
+
/**
|
|
30
|
+
* Resolve the current auth token used for requests.
|
|
31
|
+
*
|
|
32
|
+
* @throws FrontError when credentials are missing
|
|
33
|
+
*/
|
|
34
|
+
private getAuthToken;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAG9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAK3C;;;;;;;;GAQG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAiB;IACrC,OAAO,CAAC,MAAM,CAAC,CAAQ;IACvB,OAAO,CAAC,YAAY,CAAC,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IAEnC;;;;OAIG;gBACS,MAAM,CAAC,EAAE,WAAW,GAAG;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAoD1D;;OAEG;IACH,YAAY,IAAI,eAAe;IAI/B;;;;OAIG;YACW,YAAY;CAK3B"}
|