@vobiz-ai/n8n-nodes-vobiz 0.1.1 → 0.2.0
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 +71 -6
- package/dist/nodes/Vobiz/Vobiz.node.d.ts +2 -0
- package/dist/nodes/Vobiz/Vobiz.node.js +25 -1
- package/dist/nodes/Vobiz/Vobiz.node.js.map +1 -1
- package/dist/nodes/Vobiz/Vobiz.node.json +4 -1
- package/dist/nodes/Vobiz/descriptions/CallDescription.js +10 -1
- package/dist/nodes/Vobiz/descriptions/CallDescription.js.map +1 -1
- package/dist/nodes/Vobiz/descriptions/SubAccountDescription.d.ts +3 -0
- package/dist/nodes/Vobiz/descriptions/SubAccountDescription.js +461 -0
- package/dist/nodes/Vobiz/descriptions/SubAccountDescription.js.map +1 -0
- package/dist/nodes/Vobiz/operations.js +28 -2
- package/dist/nodes/Vobiz/operations.js.map +1 -1
- package/dist/nodes/Vobiz/subAccounts.d.ts +10 -0
- package/dist/nodes/Vobiz/subAccounts.js +329 -0
- package/dist/nodes/Vobiz/subAccounts.js.map +1 -0
- package/dist/nodes/VobizCallAnsweredTrigger/VobizCallAnsweredTrigger.node.js +597 -36
- package/dist/nodes/VobizCallAnsweredTrigger/VobizCallAnsweredTrigger.node.js.map +1 -1
- package/dist/nodes/VobizCallAnsweredTrigger/VobizCallAnsweredTrigger.node.json +5 -1
- package/dist/nodes/VobizKycTrigger/VobizKycTrigger.node.d.ts +18 -0
- package/dist/nodes/VobizKycTrigger/VobizKycTrigger.node.js +202 -0
- package/dist/nodes/VobizKycTrigger/VobizKycTrigger.node.js.map +1 -0
- package/dist/nodes/VobizKycTrigger/VobizKycTrigger.node.json +27 -0
- package/dist/nodes/VobizWhatsAppTrigger/VobizWhatsAppTrigger.node.d.ts +2 -2
- package/dist/nodes/VobizWhatsAppTrigger/VobizWhatsAppTrigger.node.js +4 -13
- package/dist/nodes/VobizWhatsAppTrigger/VobizWhatsAppTrigger.node.js.map +1 -1
- package/dist/nodes/shared/callScript.d.ts +38 -0
- package/dist/nodes/shared/callScript.js +93 -11
- package/dist/nodes/shared/callScript.js.map +1 -1
- package/dist/nodes/shared/signature.d.ts +6 -0
- package/dist/nodes/shared/signature.js +60 -0
- package/dist/nodes/shared/signature.js.map +1 -0
- package/dist/nodes/shared/subAccounts.d.ts +12 -0
- package/dist/nodes/shared/subAccounts.js +64 -0
- package/dist/nodes/shared/subAccounts.js.map +1 -0
- package/dist/nodes/shared/transport.d.ts +7 -6
- package/dist/nodes/shared/transport.js +23 -3
- package/dist/nodes/shared/transport.js.map +1 -1
- package/dist/package.json +10 -5
- package/package.json +10 -5
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
[](LICENSE.md)
|
|
4
4
|
[](https://docs.n8n.io/integrations/community-nodes/)
|
|
5
5
|
|
|
6
|
-
Bring [Vobiz](https://www.vobiz.ai) voice and WhatsApp into your [n8n](https://n8n.io) workflows. Place calls that speak a message, answer incoming calls, act the moment a call is answered or ends, pull call records and recordings,
|
|
6
|
+
Bring [Vobiz](https://www.vobiz.ai) voice and WhatsApp into your [n8n](https://n8n.io) workflows. Place calls that speak a message, answer incoming calls, act the moment a call is answered or ends, pull call records and recordings, send and receive WhatsApp messages, and set up sub-accounts for your customers or teams, KYC included, all without writing code or running a server of your own.
|
|
7
7
|
|
|
8
8
|
**Package:** `@vobiz-ai/n8n-nodes-vobiz`
|
|
9
9
|
|
|
@@ -27,10 +27,11 @@ Bring [Vobiz](https://www.vobiz.ai) voice and WhatsApp into your [n8n](https://n
|
|
|
27
27
|
|
|
28
28
|
| Node | Type | Use it to |
|
|
29
29
|
|---|---|---|
|
|
30
|
-
| **Vobiz** | Action | Make calls; get call records and summaries; get and download recordings; send WhatsApp messages |
|
|
30
|
+
| **Vobiz** | Action | Make calls; get call records and summaries; get and download recordings; send WhatsApp messages; create and manage sub-accounts, give them numbers, and run their KYC |
|
|
31
31
|
| **Vobiz Trigger** | Trigger (checks every minute) | Start a workflow when any call on your account ends, or when a recording is ready |
|
|
32
32
|
| **Vobiz Call Answered Trigger** | Trigger (instant) | Tell Vobiz what to say when a call is answered, answer incoming calls on your numbers, and start a workflow the moment a call is answered or ends |
|
|
33
33
|
| **Vobiz WhatsApp Trigger** | Trigger (instant) | Start a workflow when a customer messages you on WhatsApp, or when a message you sent is delivered, read or fails |
|
|
34
|
+
| **Vobiz KYC Trigger** | Trigger (instant) | Start a workflow when a customer sub-account passes or fails KYC, or its KYC link expires |
|
|
34
35
|
|
|
35
36
|
The **Vobiz** node can also be used as a tool by n8n's AI Agent.
|
|
36
37
|
|
|
@@ -73,13 +74,28 @@ You need a Vobiz account.
|
|
|
73
74
|
|
|
74
75
|
| Resource | Operation | What it does |
|
|
75
76
|
|---|---|---|
|
|
76
|
-
| Call | Make | Calls a number from one of your Vobiz numbers. Optionally say a different message on each call, hang up if voicemail answers, and set the ring timeout, time limit, caller name and keypad digits to send. |
|
|
77
|
+
| Call | Make | Calls a number from one of your Vobiz numbers. Optionally say a different message on each call, connect the person who answers to another number (**Connect To**, for a call between two people), hang up if voicemail answers, and set the ring timeout, time limit, caller name and keypad digits to send. |
|
|
77
78
|
| Call Record | Get | One finished call: numbers, times, duration, cost and how it ended. |
|
|
78
79
|
| Call Record | Get Many | Call records, newest first, filtered by date, direction, number, minimum duration, hangup cause or campaign. |
|
|
79
80
|
| Call Record | Get Summary | Totals for a period: calls, answered calls, answer rate, minutes and cost. |
|
|
80
81
|
| Recording | Get / Get Many | Recording details, for one call or all calls, optionally filtered by recording type. |
|
|
81
82
|
| Recording | Download | The audio file as binary data, ready for Google Drive, Slack or email. |
|
|
82
83
|
| WhatsApp Message | Send | A text, image, audio, video, document or sticker, or an approved template with its variables. |
|
|
84
|
+
| Sub-Account | Create | A sub-account with its own Auth ID and Auth Token, for a customer, a team or a test environment. |
|
|
85
|
+
| Sub-Account | Get / Get Many / Update / Delete | Read, rename, change the permissions or rate limit of, switch off, or delete sub-accounts. A switched-off sub-account keeps its numbers. |
|
|
86
|
+
| Sub-Account | Assign Number / Unassign Number | Give one of your numbers to a sub-account, or take it back. |
|
|
87
|
+
| Sub-Account | Start KYC / Get KYC Status | Send a customer the Vobiz KYC page, by email or as a link, and check whether they have passed and can make calls. |
|
|
88
|
+
|
|
89
|
+
#### Sub-accounts
|
|
90
|
+
|
|
91
|
+
A sub-account is a separate account under yours, with its own Auth ID (`SA_…`), Auth Token, numbers and call records. Its usage is billed to your main account. Manage sub-accounts with your **main account's** credential (`MA_…`).
|
|
92
|
+
|
|
93
|
+
- **KYC:** a *personal use* sub-account shares your KYC and can make calls at once, which suits your own teams and testing. A *customer use* sub-account is for a customer who must be verified in their own name: it needs an email address, and it cannot make calls until their KYC passes. **Start KYC** sends them the Vobiz KYC page; the **Vobiz KYC Trigger** tells you the result.
|
|
94
|
+
- **The Auth Token is shown once.** **Create** returns it in its output; Vobiz never shows it again. Save it straight away, for example in a Vobiz credential for the sub-account. n8n also keeps it in that run's execution data.
|
|
95
|
+
- **Acting as a sub-account:** to make calls or read call records as the sub-account, add another Vobiz credential with the sub-account's Auth ID and Auth Token, and pick it in the node.
|
|
96
|
+
- **Taking a number back** works only if the number has had no calls for 15 days. Vobiz keeps a number that was used recently with the sub-account, so people who still dial it don't reach someone else. Unassign Number says until when.
|
|
97
|
+
- **Switching a sub-account to customer use** blocks its calls at once, until its own KYC passes.
|
|
98
|
+
- **Delete is permanent:** Vobiz revokes the sub-account's Auth ID and Auth Token at once.
|
|
83
99
|
|
|
84
100
|
### Vobiz Trigger
|
|
85
101
|
|
|
@@ -99,11 +115,23 @@ Your n8n phone line. When a call is answered, Vobiz asks this trigger what to do
|
|
|
99
115
|
- optionally followed by an audio file;
|
|
100
116
|
- or replaced entirely by your own Vobiz XML.
|
|
101
117
|
|
|
118
|
+
After the message, **Then** decides what happens, with no XML to write:
|
|
119
|
+
|
|
120
|
+
| Then | What the caller gets |
|
|
121
|
+
|---|---|
|
|
122
|
+
| **Hang Up** | The message, and the call ends. |
|
|
123
|
+
| **Forward to a Number** | Connected to a number, such as an agent's phone. Several numbers ring together, and the first to answer gets the call. If nobody answers, the caller hears a message, or can leave a voicemail. |
|
|
124
|
+
| **Ask to Press a Key (Menu)** | The message as a menu, such as *"Press 1 for sales, 2 for our hours"*. Each key can forward the call, say a message, or take a voicemail. A wrong key gets the menu once more. |
|
|
125
|
+
| **Record a Voicemail** | A beep, then a recording of up to 2 minutes (the caller can press # to finish), then a thank-you. |
|
|
126
|
+
|
|
127
|
+
Menus, forwarding and voicemail need the workflow to be **published**: Vobiz sends the key, the forwarding result and the recording to the trigger's Production URL.
|
|
128
|
+
|
|
102
129
|
Settings:
|
|
103
130
|
|
|
104
|
-
- **Trigger On:** *Call Answered*, *Call Ended*,
|
|
131
|
+
- **Trigger On:** *Call Answered*, *Call Ended*, *Key Pressed*, *Forward Finished* and *Voicemail Recorded*, in any mix. *Call Ended* fires the moment the call finishes, with its duration, whether it was answered and how it ended. *Key Pressed* gives the key. *Forward Finished* says whether the number answered. *Voicemail Recorded* gives the recording's `recording_id` and length; pass the ID to *Vobiz → Recording → Download* to get the audio.
|
|
105
132
|
- **Outgoing calls:** paste the trigger's **Production URL** into **Answer URL** on *Vobiz → Call → Make*.
|
|
106
133
|
- **Incoming calls:** choose numbers in **Answer Incoming Calls On**. They are connected when you publish the workflow and released when you unpublish it.
|
|
134
|
+
- **Require Vobiz Signature** (on by default): Vobiz signs every call event with your Auth Token. The trigger checks that signature, so someone who learns its address cannot start your workflow with made-up calls. A signature that does not match is always refused. Turn this off only if your Vobiz account sends events without a signature.
|
|
107
135
|
|
|
108
136
|
When the workflow is published, the trigger creates a Vobiz application for its address, named `n8n-call-answered-…`. It removes the application when the workflow is unpublished.
|
|
109
137
|
|
|
@@ -123,6 +151,17 @@ Starts a workflow when a customer sends you a WhatsApp message (**Message Receiv
|
|
|
123
151
|
- Every event is checked against a signature made with a secret only this trigger knows. Forged events are refused.
|
|
124
152
|
- You can limit it to one WhatsApp channel.
|
|
125
153
|
|
|
154
|
+
### Vobiz KYC Trigger
|
|
155
|
+
|
|
156
|
+
Starts a workflow when a customer sub-account's KYC moves on: **KYC Started**, **Documents Submitted**, **KYC Completed**, **KYC Failed**, **Link Expired** or **Link Revoked**.
|
|
157
|
+
|
|
158
|
+
1. Publish the workflow, open the trigger, and copy its **Production URL**.
|
|
159
|
+
2. On *Vobiz → Sub-Account → Start KYC*, paste it into **Options → Webhook URL**. Vobiz then reports that customer's KYC to the trigger.
|
|
160
|
+
|
|
161
|
+
- Use your **main account's** credential: Vobiz signs each KYC event with that account's Auth Token, and the trigger checks the signature. Forged events are refused, and so are unsigned ones while **Require Vobiz Signature** is on.
|
|
162
|
+
- You can limit it to one sub-account.
|
|
163
|
+
- The output names the sub-account (`sub_account_id`) and the result (`status`), so the next node knows which customer it was. It also passes on any `metadata` Vobiz sends back. To check that the customer can now make calls, add *Vobiz → Sub-Account → Get KYC Status*.
|
|
164
|
+
|
|
126
165
|
## Quick start: a call that speaks
|
|
127
166
|
|
|
128
167
|
When a call is answered, Vobiz asks a web address what to say. The Call Answered Trigger is that address.
|
|
@@ -133,18 +172,31 @@ When a call is answered, Vobiz asks a web address what to say. The Call Answered
|
|
|
133
172
|
4. To say something different on each call, fill in **Message** on Make a Call, for example `Hi {{ $json.name }}, your appointment is tomorrow at 10.` It replaces the trigger's message for that call.
|
|
134
173
|
5. To act once the call is over, for example to log it or send a WhatsApp follow-up, tick **Call Ended** in the trigger's **Trigger On**.
|
|
135
174
|
|
|
175
|
+
### A call between two people
|
|
176
|
+
|
|
177
|
+
n8n cannot talk on a call itself, so Vobiz rings two phones and connects them: first the one in **To**, then the one in **Connect To**.
|
|
178
|
+
|
|
179
|
+
1. Set up the Call Answered Trigger once, as above, and paste its **Production URL** into **Answer URL** on Make a Call.
|
|
180
|
+
2. In Make a Call, put your own phone (or your agent's) in **To**, and the person to talk to in **Connect To**. Both can come from your data, such as `{{ $json.phone }}` from a sheet or CRM row.
|
|
181
|
+
3. Leave **Message** empty to connect straight away, or set one, such as *"Connecting you to Asha"*, to hear it first.
|
|
182
|
+
|
|
183
|
+
When the first phone answers, Vobiz rings the second, showing your Vobiz number, and connects them. If the second phone does not answer, the first hears the trigger's **No Answer Message** (or can leave a voicemail). Each connected phone is billed as its own call.
|
|
184
|
+
|
|
136
185
|
## Example workflows
|
|
137
186
|
|
|
138
187
|
- **Appointment reminders:** Google Sheets or a schedule → *Vobiz: Make a Call* with a personalised message.
|
|
139
188
|
- **Log every call:** *Vobiz Trigger (Call Ended)* → Google Sheets or your CRM.
|
|
140
189
|
- **Missed-call follow-up:** *Vobiz Call Answered Trigger (Call Ended)* → If not answered → *Vobiz: Send* a WhatsApp template.
|
|
190
|
+
- **Phone menu with voicemail to email:** *Vobiz Call Answered Trigger* (Then: Menu; 1 forwards to sales, 2 takes a voicemail; Trigger On: Voicemail Recorded) → *Vobiz: Recording → Download* → Gmail.
|
|
191
|
+
- **Agent missed the call:** *Vobiz Call Answered Trigger* (Then: Forward; Trigger On: Forward Finished) → If not answered → Slack.
|
|
141
192
|
- **Recordings to cloud storage:** *Vobiz Trigger (Recording Ready, Download Recording on)* → Google Drive.
|
|
142
193
|
- **WhatsApp auto-reply:** *Vobiz WhatsApp Trigger (Message Received)* → *Vobiz: Send* a WhatsApp text.
|
|
143
194
|
- **Daily call report:** Schedule → *Vobiz: Call Record → Get Summary* → Slack.
|
|
195
|
+
- **Customer onboarding:** a sign-up form → *Vobiz: Sub-Account → Create* (customer use) → *Start KYC* by email. Then *Vobiz KYC Trigger (KYC Completed)* → *Assign Number* → a WhatsApp welcome.
|
|
144
196
|
|
|
145
197
|
## Good to know
|
|
146
198
|
|
|
147
|
-
- **Instant triggers need a public address.** Vobiz sends events over the internet, so the Call Answered and
|
|
199
|
+
- **Instant triggers need a public address.** Vobiz sends events over the internet, so the Call Answered, WhatsApp and KYC triggers need n8n to be reachable over HTTPS. This works automatically on n8n Cloud. On self-hosted n8n, set `WEBHOOK_URL` to your public address.
|
|
148
200
|
- **If your public address changes**, for example with a tunnel that gets a new address on every restart, unpublish and publish your trigger workflows again so Vobiz uses the new address.
|
|
149
201
|
- **WhatsApp's 24-hour rule.** Free-form messages can only be sent within 24 hours of the customer's last message. For a first message, or outside that window, send an approved template. A free-form message sent outside the window is reported as `failed` in a *Message Status Changed* event.
|
|
150
202
|
- **Recordings are private.** Their links need your Vobiz credential, so use **Recording → Download**, or **Download Recording** on the trigger, to get the file.
|
|
@@ -157,7 +209,10 @@ When a call is answered, Vobiz asks a web address what to say. The Call Answered
|
|
|
157
209
|
|
|
158
210
|
- Your Auth ID and Auth Token are kept in n8n's encrypted credential store and are sent only to Vobiz.
|
|
159
211
|
- Recording downloads send your credential only to Vobiz hosts, never to any other domain.
|
|
212
|
+
- Call events to the Call Answered Trigger are verified against Vobiz's `X-Vobiz-Signature-V3` (or V2) header, an HMAC-SHA256 of the trigger's address and a nonce, keyed with your Auth Token. Forged events are rejected with 403, and so are unsigned ones while **Require Vobiz Signature** is on.
|
|
160
213
|
- WhatsApp events are verified with HMAC-SHA256, using a secret created for each subscription. Unsigned or forged events are rejected.
|
|
214
|
+
- KYC events to the KYC Trigger are verified against Vobiz's `X-Vobiz-Signature` header, an HMAC-SHA256 of the raw body keyed with your main account's Auth Token. Forged events are rejected with 401, and so are unsigned ones while **Require Vobiz Signature** is on.
|
|
215
|
+
- A new sub-account's Auth Token is passed on only by **Create**, the one time Vobiz shows it. Every other sub-account operation leaves the token out of its output.
|
|
161
216
|
- The package has no runtime dependencies beyond n8n itself.
|
|
162
217
|
|
|
163
218
|
## Troubleshooting
|
|
@@ -171,7 +226,15 @@ When a call is answered, Vobiz asks a web address what to say. The Call Answered
|
|
|
171
226
|
| `Your Vobiz balance is too low for this` | Your account balance | Top up in the Vobiz console |
|
|
172
227
|
| `The template "…" is PENDING_REVIEW, not approved` | Meta hasn't approved the template yet | Wait for approval, or choose another template |
|
|
173
228
|
| `No recent call matches these filters` | No matching call yet | Make and answer a call, wait a minute, and fetch again |
|
|
229
|
+
| The phone rings, then silence, and n8n's log says `a request was refused: it had no Vobiz signature` | Your Vobiz account sends call events without a signature | Turn off **Require Vobiz Signature** on the Call Answered Trigger |
|
|
230
|
+
| n8n's log says `a request was refused: its Vobiz signature did not match` | The trigger's credential is for a different Vobiz account than the call, or `WEBHOOK_URL` is not the address Vobiz calls | Use the credential of the account that owns the number, and set `WEBHOOK_URL` to n8n's public address |
|
|
174
231
|
| Triggers stop receiving events after n8n restarts | n8n's public address changed | Unpublish and publish the workflow again |
|
|
232
|
+
| Publishing fails with `"…" in Forward To is not a phone number with its country code` | A number in **Forward To** is written without its country code, or is not a number | Write it like `+919876543210` |
|
|
233
|
+
| A menu or voicemail call goes silent after the message | The workflow is not published, so Vobiz's follow-up gets no answer | Publish the workflow, and use its **Production URL** |
|
|
234
|
+
| `Sub-accounts are managed with the main account's credential` | The node uses a sub-account's credential (`SA_…`) | Pick the main account's credential (`MA_…`) |
|
|
235
|
+
| `This sub-account does not belong to the account in this credential` | The sub-account was made by another main account | Use the credential of the main account that created it |
|
|
236
|
+
| `Vobiz keeps +91… with the sub-account until …` | The number had a call in the last 15 days | Try again after that date |
|
|
237
|
+
| n8n's log says `Vobiz KYC Trigger: an event was refused: its Vobiz signature did not match` | The trigger's credential is not the main account that owns the sub-account | Pick that main account's credential in the trigger |
|
|
175
238
|
|
|
176
239
|
## Compatibility
|
|
177
240
|
|
|
@@ -179,6 +242,8 @@ Built with [`@n8n/node-cli`](https://www.npmjs.com/package/@n8n/node-cli) and te
|
|
|
179
242
|
|
|
180
243
|
## Development
|
|
181
244
|
|
|
245
|
+
Use a current Node.js 24 (see `.nvmrc`; 24.21 or newer). The npm bundled with older 24.x releases (11.9 and earlier) rejects the lockfile in `npm ci`.
|
|
246
|
+
|
|
182
247
|
```bash
|
|
183
248
|
git clone https://github.com/vobiz-ai/Vobiz-n8n-nodes.git
|
|
184
249
|
cd Vobiz-n8n-nodes
|
|
@@ -188,7 +253,7 @@ npm run lint # n8n's lint rules
|
|
|
188
253
|
npm test # unit tests against a mock Vobiz API
|
|
189
254
|
```
|
|
190
255
|
|
|
191
|
-
`npm run test:e2e` runs the built nodes inside a real n8n against the mock API, so nothing is called, texted or billed. To run a local n8n with the nodes loaded and test against a real Vobiz account, see [TESTING.md](TESTING.md).
|
|
256
|
+
`npm run test:e2e` runs the built nodes inside a real n8n against the mock API, so nothing is called, texted or billed. To run a local n8n with the nodes loaded and test against a real Vobiz account, run `npm run n8n` (Windows, macOS or Linux) and see [TESTING.md](TESTING.md).
|
|
192
257
|
|
|
193
258
|
Issues and pull requests are welcome.
|
|
194
259
|
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import type { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
|
|
2
2
|
import { searchNumbers } from './operations';
|
|
3
|
+
import { searchSubAccounts } from '../shared/subAccounts';
|
|
3
4
|
import { searchWhatsAppChannels, searchWhatsAppTemplates } from '../shared/whatsapp';
|
|
4
5
|
export declare class Vobiz implements INodeType {
|
|
5
6
|
description: INodeTypeDescription;
|
|
6
7
|
methods: {
|
|
7
8
|
listSearch: {
|
|
8
9
|
searchNumbers: typeof searchNumbers;
|
|
10
|
+
searchSubAccounts: typeof searchSubAccounts;
|
|
9
11
|
searchWhatsAppChannels: typeof searchWhatsAppChannels;
|
|
10
12
|
searchWhatsAppTemplates: typeof searchWhatsAppTemplates;
|
|
11
13
|
};
|
|
@@ -5,9 +5,22 @@ const n8n_workflow_1 = require("n8n-workflow");
|
|
|
5
5
|
const CallDescription_1 = require("./descriptions/CallDescription");
|
|
6
6
|
const CallRecordDescription_1 = require("./descriptions/CallRecordDescription");
|
|
7
7
|
const RecordingDescription_1 = require("./descriptions/RecordingDescription");
|
|
8
|
+
const SubAccountDescription_1 = require("./descriptions/SubAccountDescription");
|
|
8
9
|
const WhatsAppMessageDescription_1 = require("./descriptions/WhatsAppMessageDescription");
|
|
9
10
|
const operations_1 = require("./operations");
|
|
11
|
+
const subAccounts_1 = require("./subAccounts");
|
|
12
|
+
const subAccounts_2 = require("../shared/subAccounts");
|
|
10
13
|
const whatsapp_1 = require("../shared/whatsapp");
|
|
14
|
+
const SUB_ACCOUNT_OPERATIONS = new Map([
|
|
15
|
+
['assignNumber', subAccounts_1.assignNumber],
|
|
16
|
+
['create', subAccounts_1.createSubAccount],
|
|
17
|
+
['delete', subAccounts_1.deleteSubAccount],
|
|
18
|
+
['get', subAccounts_1.getSubAccount],
|
|
19
|
+
['getKycStatus', subAccounts_1.getKycStatus],
|
|
20
|
+
['startKyc', subAccounts_1.startKyc],
|
|
21
|
+
['unassignNumber', subAccounts_1.unassignNumber],
|
|
22
|
+
['update', subAccounts_1.updateSubAccount],
|
|
23
|
+
]);
|
|
11
24
|
class Vobiz {
|
|
12
25
|
constructor() {
|
|
13
26
|
this.description = {
|
|
@@ -17,7 +30,7 @@ class Vobiz {
|
|
|
17
30
|
group: ['output'],
|
|
18
31
|
version: 1,
|
|
19
32
|
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
|
|
20
|
-
description: 'Make calls, get call records and recordings,
|
|
33
|
+
description: 'Make calls, get call records and recordings, send WhatsApp messages, and manage sub-accounts with Vobiz',
|
|
21
34
|
defaults: {
|
|
22
35
|
name: 'Vobiz',
|
|
23
36
|
},
|
|
@@ -40,6 +53,7 @@ class Vobiz {
|
|
|
40
53
|
{ name: 'Call', value: 'call' },
|
|
41
54
|
{ name: 'Call Record', value: 'callRecord' },
|
|
42
55
|
{ name: 'Recording', value: 'recording' },
|
|
56
|
+
{ name: 'Sub-Account', value: 'subAccount' },
|
|
43
57
|
{ name: 'WhatsApp Message', value: 'whatsAppMessage' },
|
|
44
58
|
],
|
|
45
59
|
default: 'call',
|
|
@@ -50,6 +64,8 @@ class Vobiz {
|
|
|
50
64
|
...CallRecordDescription_1.callRecordFields,
|
|
51
65
|
...RecordingDescription_1.recordingOperations,
|
|
52
66
|
...RecordingDescription_1.recordingFields,
|
|
67
|
+
...SubAccountDescription_1.subAccountOperations,
|
|
68
|
+
...SubAccountDescription_1.subAccountFields,
|
|
53
69
|
...WhatsAppMessageDescription_1.whatsAppMessageOperations,
|
|
54
70
|
...WhatsAppMessageDescription_1.whatsAppMessageFields,
|
|
55
71
|
],
|
|
@@ -57,6 +73,7 @@ class Vobiz {
|
|
|
57
73
|
this.methods = {
|
|
58
74
|
listSearch: {
|
|
59
75
|
searchNumbers: operations_1.searchNumbers,
|
|
76
|
+
searchSubAccounts: subAccounts_2.searchSubAccounts,
|
|
60
77
|
searchWhatsAppChannels: whatsapp_1.searchWhatsAppChannels,
|
|
61
78
|
searchWhatsAppTemplates: whatsapp_1.searchWhatsAppTemplates,
|
|
62
79
|
},
|
|
@@ -96,6 +113,13 @@ class Vobiz {
|
|
|
96
113
|
else if (resource === 'whatsAppMessage' && operation === 'send') {
|
|
97
114
|
returnData.push(await operations_1.sendWhatsAppMessage.call(this, i, whatsApp));
|
|
98
115
|
}
|
|
116
|
+
else if (resource === 'subAccount' && operation === 'getAll') {
|
|
117
|
+
returnData.push(...(await subAccounts_1.getManySubAccounts.call(this, i)));
|
|
118
|
+
}
|
|
119
|
+
else if (resource === 'subAccount' && SUB_ACCOUNT_OPERATIONS.has(operation)) {
|
|
120
|
+
const subAccountOperation = SUB_ACCOUNT_OPERATIONS.get(operation);
|
|
121
|
+
returnData.push(await subAccountOperation.call(this, i));
|
|
122
|
+
}
|
|
99
123
|
else {
|
|
100
124
|
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The operation "${operation}" is not supported for "${resource}"`, { itemIndex: i });
|
|
101
125
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Vobiz.node.js","sourceRoot":"","sources":["../../../nodes/Vobiz/Vobiz.node.ts"],"names":[],"mappings":";;;AAMA,+CAAqF;AAErF,oEAA4E;AAC5E,gFAA8F;AAC9F,8EAA2F;AAC3F,0FAGmD;AACnD,6CAWsB;AACtB,iDAAqF;
|
|
1
|
+
{"version":3,"file":"Vobiz.node.js","sourceRoot":"","sources":["../../../nodes/Vobiz/Vobiz.node.ts"],"names":[],"mappings":";;;AAMA,+CAAqF;AAErF,oEAA4E;AAC5E,gFAA8F;AAC9F,8EAA2F;AAC3F,gFAA8F;AAC9F,0FAGmD;AACnD,6CAWsB;AACtB,+CAUuB;AACvB,uDAA0D;AAC1D,iDAAqF;AAIrF,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAA8B;IACnE,CAAC,cAAc,EAAE,0BAAY,CAAC;IAC9B,CAAC,QAAQ,EAAE,8BAAgB,CAAC;IAC5B,CAAC,QAAQ,EAAE,8BAAgB,CAAC;IAC5B,CAAC,KAAK,EAAE,2BAAa,CAAC;IACtB,CAAC,cAAc,EAAE,0BAAY,CAAC;IAC9B,CAAC,UAAU,EAAE,sBAAQ,CAAC;IACtB,CAAC,gBAAgB,EAAE,4BAAc,CAAC;IAClC,CAAC,QAAQ,EAAE,8BAAgB,CAAC;CAC5B,CAAC,CAAC;AAEH,MAAa,KAAK;IAAlB;QACC,gBAAW,GAAyB;YACnC,WAAW,EAAE,OAAO;YACpB,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,qBAAqB,EAAE;YAC9D,KAAK,EAAE,CAAC,QAAQ,CAAC;YACjB,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,8DAA8D;YACxE,WAAW,EACV,yGAAyG;YAC1G,QAAQ,EAAE;gBACT,IAAI,EAAE,OAAO;aACb;YACD,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YAClC,OAAO,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YACnC,WAAW,EAAE;gBACZ;oBACC,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE,IAAI;iBACd;aACD;YACD,UAAU,EAAE;gBACX;oBACC,WAAW,EAAE,UAAU;oBACvB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,SAAS;oBACf,gBAAgB,EAAE,IAAI;oBACtB,OAAO,EAAE;wBACR,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;wBAC/B,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,YAAY,EAAE;wBAC5C,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;wBACzC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,YAAY,EAAE;wBAC5C,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,iBAAiB,EAAE;qBACtD;oBACD,OAAO,EAAE,MAAM;iBACf;gBACD,GAAG,gCAAc;gBACjB,GAAG,4BAAU;gBACb,GAAG,4CAAoB;gBACvB,GAAG,wCAAgB;gBACnB,GAAG,0CAAmB;gBACtB,GAAG,sCAAe;gBAClB,GAAG,4CAAoB;gBACvB,GAAG,wCAAgB;gBACnB,GAAG,sDAAyB;gBAC5B,GAAG,kDAAqB;aACxB;SACD,CAAC;QAEF,YAAO,GAAG;YACT,UAAU,EAAE;gBACX,aAAa,EAAb,0BAAa;gBACb,iBAAiB,EAAjB,+BAAiB;gBACjB,sBAAsB,EAAtB,iCAAsB;gBACtB,uBAAuB,EAAvB,kCAAuB;aACvB;SACD,CAAC;IA4DH,CAAC;IA1DA,KAAK,CAAC,OAAO;;;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,UAAU,GAAyB,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,4BAAe,CAAC,IAAI,CAAC,CAAC;QAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC;gBACJ,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAW,CAAC;gBAChE,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAW,CAAC;gBAElE,IAAI,QAAQ,KAAK,MAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;oBACjD,UAAU,CAAC,IAAI,CAAC,MAAM,qBAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC/C,CAAC;qBAAM,IAAI,QAAQ,KAAK,YAAY,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;oBAC7D,UAAU,CAAC,IAAI,CAAC,MAAM,0BAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACpD,CAAC;qBAAM,IAAI,QAAQ,KAAK,YAAY,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;oBAChE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,+BAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9D,CAAC;qBAAM,IAAI,QAAQ,KAAK,YAAY,IAAI,SAAS,KAAK,YAAY,EAAE,CAAC;oBACpE,UAAU,CAAC,IAAI,CAAC,MAAM,2BAAc,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACrD,CAAC;qBAAM,IAAI,QAAQ,KAAK,WAAW,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;oBAC5D,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,yBAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtF,CAAC;qBAAM,IAAI,QAAQ,KAAK,WAAW,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;oBAC/D,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,8BAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7D,CAAC;qBAAM,IAAI,QAAQ,KAAK,WAAW,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;oBACjE,UAAU,CAAC,IAAI,CAAC,MAAM,kCAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC5D,CAAC;qBAAM,IAAI,QAAQ,KAAK,iBAAiB,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;oBACnE,UAAU,CAAC,IAAI,CAAC,MAAM,gCAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACpE,CAAC;qBAAM,IAAI,QAAQ,KAAK,YAAY,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;oBAChE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,gCAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9D,CAAC;qBAAM,IAAI,QAAQ,KAAK,YAAY,IAAI,sBAAsB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC/E,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,GAAG,CAAC,SAAS,CAAwB,CAAC;oBACzF,UAAU,CAAC,IAAI,CAAC,MAAM,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC1D,CAAC;qBAAM,CAAC;oBACP,MAAM,IAAI,iCAAkB,CAC3B,IAAI,CAAC,OAAO,EAAE,EACd,kBAAkB,SAAS,2BAA2B,QAAQ,GAAG,EACjE,EAAE,SAAS,EAAE,CAAC,EAAE,CAChB,CAAC;gBACH,CAAC;YACF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;oBAC3B,UAAU,CAAC,IAAI,CAAC;wBACf,IAAI,EAAE,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE;wBACzC,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;qBACvB,CAAC,CAAC;oBACH,SAAS;gBACV,CAAC;gBACD,IAAI,KAAK,YAAY,2BAAY,IAAI,KAAK,YAAY,iCAAkB,EAAE,CAAC;oBAE1E,MAAM,KAAK,GAAG,KAAK,CAAC;oBACpB,YAAA,KAAK,CAAC,OAAO,EAAC,SAAS,uCAAT,SAAS,GAAK,CAAC,EAAC;oBAC9B,MAAM,KAAK,CAAC;gBACb,CAAC;gBACD,MAAM,IAAI,iCAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAc,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;YAChF,CAAC;QACF,CAAC;QAED,OAAO,CAAC,UAAU,CAAC,CAAC;IACrB,CAAC;CACD;AArHD,sBAqHC"}
|
|
@@ -80,7 +80,16 @@ exports.callFields = [
|
|
|
80
80
|
typeOptions: { rows: 3 },
|
|
81
81
|
default: '',
|
|
82
82
|
placeholder: 'e.g. Hi Asha, your appointment is tomorrow at 10 am.',
|
|
83
|
-
description: 'What to say when the call is answered. Works when the Answer URL is a Vobiz Call Answered Trigger. Leave empty to use the message set on the trigger.',
|
|
83
|
+
description: 'What to say when the call is answered. Works when the Answer URL is a Vobiz Call Answered Trigger. Leave empty to use the message set on the trigger, or, with Connect To, to say nothing.',
|
|
84
|
+
displayOptions: showForMake,
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
displayName: 'Connect To',
|
|
88
|
+
name: 'connectTo',
|
|
89
|
+
type: 'string',
|
|
90
|
+
default: '',
|
|
91
|
+
placeholder: 'e.g. +919876543210',
|
|
92
|
+
description: 'For a call between two people: once the person in To answers, connect them to this number. They hear the Message first, if you set one. Needs a Vobiz Call Answered Trigger as the Answer URL. Separate several numbers with commas: they all ring, and the first to answer is connected.',
|
|
84
93
|
displayOptions: showForMake,
|
|
85
94
|
},
|
|
86
95
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CallDescription.js","sourceRoot":"","sources":["../../../../nodes/Vobiz/descriptions/CallDescription.ts"],"names":[],"mappings":";;;AAEA,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;AAE7D,QAAA,cAAc,GAAsB;IAChD;QACC,WAAW,EAAE,WAAW;QACxB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,SAAS;QACf,gBAAgB,EAAE,IAAI;QACtB,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE;QAChD,OAAO,EAAE;YACR;gBACC,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,MAAM;gBACb,WAAW,EAAE,wDAAwD;gBACrE,MAAM,EAAE,aAAa;aACrB;SACD;QACD,OAAO,EAAE,MAAM;KACf;CACD,CAAC;AAEW,QAAA,UAAU,GAAsB;IAC5C;QACC,WAAW,EAAE,aAAa;QAC1B,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;QACpC,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,qEAAqE;QAClF,cAAc,EAAE,WAAW;QAC3B,KAAK,EAAE;YACN;gBACC,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,EAAE,gBAAgB,EAAE,eAAe,EAAE,UAAU,EAAE,IAAI,EAAE;aACpE;YACD;gBACC,WAAW,EAAE,QAAQ;gBACrB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,oBAAoB;gBACjC,UAAU,EAAE;oBACX;wBACC,IAAI,EAAE,OAAO;wBACb,UAAU,EAAE;4BACX,KAAK,EAAE,4BAA4B;4BACnC,YAAY,EAAE,gEAAgE;yBAC9E;qBACD;iBACD;aACD;SACD;KACD;IACD;QACC,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,oBAAoB;QACjC,WAAW,EAAE,iDAAiD;QAC9D,cAAc,EAAE,WAAW;KAC3B;IACD;QACC,WAAW,EAAE,YAAY;QACzB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,2DAA2D;QACxE,WAAW,EACV,sMAAsM;QACvM,cAAc,EAAE,WAAW;KAC3B;IACD;QACC,WAAW,EAAE,SAAS;QACtB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;QACxB,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,sDAAsD;QACnE,WAAW,EACV,
|
|
1
|
+
{"version":3,"file":"CallDescription.js","sourceRoot":"","sources":["../../../../nodes/Vobiz/descriptions/CallDescription.ts"],"names":[],"mappings":";;;AAEA,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;AAE7D,QAAA,cAAc,GAAsB;IAChD;QACC,WAAW,EAAE,WAAW;QACxB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,SAAS;QACf,gBAAgB,EAAE,IAAI;QACtB,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE;QAChD,OAAO,EAAE;YACR;gBACC,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,MAAM;gBACb,WAAW,EAAE,wDAAwD;gBACrE,MAAM,EAAE,aAAa;aACrB;SACD;QACD,OAAO,EAAE,MAAM;KACf;CACD,CAAC;AAEW,QAAA,UAAU,GAAsB;IAC5C;QACC,WAAW,EAAE,aAAa;QAC1B,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;QACpC,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,qEAAqE;QAClF,cAAc,EAAE,WAAW;QAC3B,KAAK,EAAE;YACN;gBACC,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,EAAE,gBAAgB,EAAE,eAAe,EAAE,UAAU,EAAE,IAAI,EAAE;aACpE;YACD;gBACC,WAAW,EAAE,QAAQ;gBACrB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,oBAAoB;gBACjC,UAAU,EAAE;oBACX;wBACC,IAAI,EAAE,OAAO;wBACb,UAAU,EAAE;4BACX,KAAK,EAAE,4BAA4B;4BACnC,YAAY,EAAE,gEAAgE;yBAC9E;qBACD;iBACD;aACD;SACD;KACD;IACD;QACC,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,oBAAoB;QACjC,WAAW,EAAE,iDAAiD;QAC9D,cAAc,EAAE,WAAW;KAC3B;IACD;QACC,WAAW,EAAE,YAAY;QACzB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,2DAA2D;QACxE,WAAW,EACV,sMAAsM;QACvM,cAAc,EAAE,WAAW;KAC3B;IACD;QACC,WAAW,EAAE,SAAS;QACtB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;QACxB,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,sDAAsD;QACnE,WAAW,EACV,4LAA4L;QAC7L,cAAc,EAAE,WAAW;KAC3B;IACD;QACC,WAAW,EAAE,YAAY;QACzB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,oBAAoB;QACjC,WAAW,EACV,2RAA2R;QAC5R,cAAc,EAAE,WAAW;KAC3B;IACD;QACC,WAAW,EAAE,SAAS;QACtB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,YAAY;QACzB,OAAO,EAAE,EAAE;QACX,cAAc,EAAE,WAAW;QAC3B,OAAO,EAAE;YACR;gBACC,WAAW,EAAE,eAAe;gBAC5B,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE;oBACR,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;oBAC7B,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;iBAC/B;gBACD,OAAO,EAAE,MAAM;gBACf,WAAW,EAAE,8EAA8E;aAC3F;YACD;gBACC,WAAW,EAAE,aAAa;gBAC1B,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,gGAAgG;aAC7G;YACD;gBACC,WAAW,EAAE,sBAAsB;gBACnC,IAAI,EAAE,mBAAmB;gBACzB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,KAAK;gBACd,WAAW,EACV,iOAAiO;aAClO;YACD;gBACC,WAAW,EAAE,YAAY;gBACzB,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EACV,wJAAwJ;aACzJ;YACD;gBACC,WAAW,EAAE,wBAAwB;gBACrC,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE;gBAC3C,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,iDAAiD;aAC9D;YACD;gBACC,WAAW,EAAE,aAAa;gBAC1B,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,UAAU;gBACvB,WAAW,EACV,+IAA+I;aAChJ;YACD;gBACC,WAAW,EAAE,sBAAsB;gBACnC,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;gBAC7B,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,6CAA6C;aAC1D;SACD;KACD;CACD,CAAC"}
|