@nangohq/providers 0.48.3 → 0.48.4

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nangohq/providers",
3
- "version": "0.48.3",
3
+ "version": "0.48.4",
4
4
  "description": "Nango's providers.yaml and getters",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
package/providers.yaml CHANGED
@@ -694,9 +694,6 @@ aws-iam:
694
694
  auth_mode: BASIC
695
695
  proxy:
696
696
  base_url: https://iam.amazonaws.com
697
- verification:
698
- method: GET
699
- endpoint: /?Action=ListUsers
700
697
  connection_config:
701
698
  region: ${connectionConfig.region}
702
699
  retry:
@@ -792,6 +789,41 @@ bamboohr-basic:
792
789
  default_value: x
793
790
  hidden: true
794
791
 
792
+ basecamp:
793
+ display_name: Basecamp
794
+ categories:
795
+ - productivity
796
+ auth_mode: OAUTH2
797
+ authorization_url: https://launchpad.37signals.com/authorization/new
798
+ token_url: https://launchpad.37signals.com/authorization/token
799
+ authorization_params:
800
+ type: web_server
801
+ token_params:
802
+ type: web_server
803
+ refresh_params:
804
+ type: refresh
805
+ proxy:
806
+ base_url: https://3.basecampapi.com/${connectionConfig.accountId}
807
+ headers:
808
+ user-agent: ${connectionConfig.appDetails} || App (support@nango.dev)
809
+ retry:
810
+ after: 'retry-after'
811
+ docs: https://docs.nango.dev/integrations/all/basecamp
812
+ docs_connect: https://docs.nango.dev/integrations/all/basecamp/connect
813
+ connection_config:
814
+ appDetails:
815
+ type: string
816
+ title: App Details
817
+ description: The details of your app
818
+ automated: true
819
+ accountId:
820
+ type: string
821
+ title: Account ID
822
+ description: Your Account ID
823
+ example: '5899981'
824
+ pattern: '^[0-9]+$'
825
+ doc_section: '#step-1-finding-your-account-id'
826
+
795
827
  battlenet:
796
828
  display_name: Battle.net
797
829
  categories:
@@ -2325,7 +2357,7 @@ emarsys:
2325
2357
  pattern: '^[a-zA-Z0-9-]+$'
2326
2358
 
2327
2359
  emarsys-oauth:
2328
- display_name: Emarsys (Ouath)
2360
+ display_name: Emarsys (OAuth)
2329
2361
  categories:
2330
2362
  - marketing
2331
2363
  auth_mode: OAUTH2_CC
@@ -3028,6 +3060,23 @@ garmin:
3028
3060
  base_url: https://apis.garmin.com
3029
3061
  docs: https://docs.nango.dev/integrations/all/garmin
3030
3062
 
3063
+ gebruder-weiss:
3064
+ display_name: Gebrüder Weiss
3065
+ categories:
3066
+ - erp
3067
+ auth_mode: OAUTH2_CC
3068
+ authorization_url: https://my.api.gw-world.com/authorize
3069
+ token_url: https://my.api.gw-world.com/token
3070
+ token_request_auth_method: basic
3071
+ scope_separator: ' '
3072
+ token_params:
3073
+ grant_type: client_credentials
3074
+ proxy:
3075
+ headers:
3076
+ accept-language: en-US
3077
+ base_url: https://my.api.gw-world.com
3078
+ docs: https://docs.nango.dev/integrations/all/gebruder-weiss
3079
+
3031
3080
  gerrit:
3032
3081
  display_name: Gerrit
3033
3082
  categories:
@@ -3116,6 +3165,7 @@ github-app:
3116
3165
  description: The public link of your GitHub App
3117
3166
  format: uri
3118
3167
  pattern: '^https?://.*$'
3168
+ automated: true
3119
3169
  installation_id:
3120
3170
  type: string
3121
3171
  title: Installation ID
@@ -3146,6 +3196,7 @@ github-app-oauth:
3146
3196
  description: The public link of your GitHub App
3147
3197
  format: uri
3148
3198
  pattern: '^https?://.*$'
3199
+ automated: true
3149
3200
  installation_id:
3150
3201
  type: string
3151
3202
  title: Installation ID
@@ -4357,6 +4408,26 @@ loops-so:
4357
4408
  pattern: '^[a-f0-9]{32}$'
4358
4409
  example: d2d561f5ff80136f69b4b5a31b9fb3c9
4359
4410
 
4411
+ lucid-scim:
4412
+ display_name: Lucid(SCIM)
4413
+ categories:
4414
+ - productivity
4415
+ auth_mode: API_KEY
4416
+ proxy:
4417
+ base_url: https://users.lucid.app/scim
4418
+ headers:
4419
+ authorization: Bearer ${apiKey}
4420
+ accept: application/json
4421
+ content-type: application/json
4422
+ docs: https://docs.nango.dev/integrations/all/lucid
4423
+ docs_connect: https://docs.nango.dev/integrations/all/lucid-scim/connect
4424
+ credentials:
4425
+ apiKey:
4426
+ type: string
4427
+ title: API Key
4428
+ description: The SCIM API key generated from the Lucid admin panel
4429
+ doc_section: '#step-1-generate-the-bearer-token'
4430
+
4360
4431
  luma:
4361
4432
  display_name: Luma
4362
4433
  categories:
@@ -4423,6 +4494,7 @@ make:
4423
4494
  method: GET
4424
4495
  endpoint: /users/me
4425
4496
  docs: https://docs.nango.dev/integrations/all/make
4497
+ docs_connect: https://docs.nango.dev/integrations/all/make/connect
4426
4498
  connection_config:
4427
4499
  environmentUrl:
4428
4500
  type: string
@@ -4430,11 +4502,13 @@ make:
4430
4502
  description: The domain of your Make account
4431
4503
  format: hostname
4432
4504
  prefix: https://
4505
+ doc_section: '#step-2-finding-your-domain'
4433
4506
  credentials:
4434
4507
  apiKey:
4435
4508
  type: string
4436
4509
  title: API Key
4437
4510
  description: The API key for your Make account
4511
+ doc_section: '#step-1-generating-an-api-key'
4438
4512
 
4439
4513
  mailgun:
4440
4514
  display_name: Mailgun
@@ -4447,6 +4521,7 @@ mailgun:
4447
4521
  method: GET
4448
4522
  endpoint: /v4/domains
4449
4523
  docs: https://docs.nango.dev/integrations/all/mailgun
4524
+ docs_connect: https://docs.nango.dev/integrations/all/mailgun/connect
4450
4525
  connection_config:
4451
4526
  region:
4452
4527
  type: string
@@ -4454,6 +4529,7 @@ mailgun:
4454
4529
  description: The region of your Mailgun account
4455
4530
  pattern: '^[a-z]+$'
4456
4531
  example: us
4532
+ doc_section: '#step-1-finding-your-mailgun-region'
4457
4533
 
4458
4534
  mailchimp:
4459
4535
  display_name: Mailchimp
@@ -4496,11 +4572,13 @@ manatal:
4496
4572
  link_path_in_response_body: next
4497
4573
  response_path: results
4498
4574
  docs: https://docs.nango.dev/integrations/all/manatal
4575
+ docs_connect: https://docs.nango.dev/integrations/all/manatal/connect
4499
4576
  credentials:
4500
4577
  apiKey:
4501
4578
  type: string
4502
4579
  title: API Key
4503
4580
  description: The API key for your Manatal account
4581
+ doc_section: '#step-2-generate-an-api-key'
4504
4582
 
4505
4583
  marketo:
4506
4584
  display_name: Marketo
@@ -4574,6 +4652,7 @@ medallia:
4574
4652
  after: 'x-ratelimit-reset'
4575
4653
  base_url: https://${connectionConfig.gatewayUrl}.apis.medallia.com
4576
4654
  docs: https://docs.nango.dev/integrations/all/medallia
4655
+ docs_connect: https://docs.nango.dev/integrations/all/medallia/connect
4577
4656
  connection_config:
4578
4657
  reportingInstance:
4579
4658
  type: string
@@ -4581,16 +4660,19 @@ medallia:
4581
4660
  description: The domain of your Medallia account
4582
4661
  format: hostname
4583
4662
  prefix: https://
4663
+ doc_section: '#step-3-connect-your-medallia-account'
4584
4664
  tenantName:
4585
4665
  type: string
4586
4666
  title: Tenant Name
4587
4667
  description: The tenant name of your Medallia account
4668
+ doc_section: '#step-3-connect-your-medallia-account'
4588
4669
  gatewayUrl:
4589
4670
  type: string
4590
4671
  title: Gateway URL
4591
4672
  description: The gateway URL of your Medallia account
4592
4673
  format: hostname
4593
4674
  prefix: https://
4675
+ doc_section: '#step-3-connect-your-medallia-account'
4594
4676
 
4595
4677
  metabase:
4596
4678
  display_name: Metabase
@@ -4605,6 +4687,7 @@ metabase:
4605
4687
  method: GET
4606
4688
  endpoint: /api/database
4607
4689
  docs: https://docs.nango.dev/integrations/all/metabase
4690
+ docs_connect: https://docs.nango.dev/integrations/all/metabase/connect
4608
4691
  connection_config:
4609
4692
  domain:
4610
4693
  type: string
@@ -4612,11 +4695,13 @@ metabase:
4612
4695
  description: The domain (without the extension) of your Metabase account
4613
4696
  pattern: '^[a-z0-9.-]+$'
4614
4697
  example: metabase
4698
+ doc_section: '#step-2-finding-your-metabase-domain'
4615
4699
  credentials:
4616
4700
  apiKey:
4617
4701
  type: string
4618
4702
  title: API Key
4619
4703
  description: The API key for your Metabase account
4704
+ doc_section: '#step-1-generating-an-api-key'
4620
4705
 
4621
4706
  microsoft:
4622
4707
  display_name: Microsoft
@@ -4678,6 +4763,36 @@ microsoft-tenant-specific:
4678
4763
  title: Tenant
4679
4764
  description: The tenant of your Microsoft account
4680
4765
 
4766
+ microsoft-business-central:
4767
+ display_name: Microsoft Business Central
4768
+ categories:
4769
+ - erp
4770
+ auth_mode: OAUTH2_CC
4771
+ token_url: https://login.microsoftonline.com/${connectionConfig.tenantId}/oauth2/v2.0/token
4772
+ token_params:
4773
+ grant_type: client_credentials
4774
+ proxy:
4775
+ base_url: https://api.businesscentral.dynamics.com/v2.0/${connectionConfig.tenantId}/${connectionConfig.environmentName}
4776
+ docs: https://docs.nango.dev/integrations/all/microsoft-business-central
4777
+ docs_connect: https://docs.nango.dev/integrations/all/microsoft-business-central/connect
4778
+ connection_config:
4779
+ tenantId:
4780
+ type: string
4781
+ title: Tenant ID
4782
+ description: The unique identifier for your organization that uses Microsoft services
4783
+ format: uuid
4784
+ example: a1b2c3d4-e5f6-47a8-9b0c-d1234567890f
4785
+ doc_section: '#step-1-finding-your-tenant-id'
4786
+ order: 1
4787
+ environmentName:
4788
+ type: string
4789
+ title: Enrivonment Name
4790
+ description: The environment name to your organization
4791
+ example: production
4792
+ pattern: '^[a-zA-Z0-9-_]+$'
4793
+ doc_section: '#step-2-finding-your-enrivonment-name'
4794
+ order: 2
4795
+
4681
4796
  microsoft-ads:
4682
4797
  display_name: Microsoft Ads
4683
4798
  alias: microsoft
@@ -4724,6 +4839,7 @@ mindbody:
4724
4839
  method: GET
4725
4840
  endpoint: /public/v6/site/locations
4726
4841
  docs: https://docs.nango.dev/integrations/all/mindbody
4842
+ docs_connect: https://docs.nango.dev/integrations/all/mindbody/connect
4727
4843
  credentials:
4728
4844
  apiKey:
4729
4845
  type: string
@@ -4731,6 +4847,7 @@ mindbody:
4731
4847
  description: The API key for your Mindbody account
4732
4848
  pattern: '^[a-f0-9]{32}$'
4733
4849
  example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4
4850
+ doc_section: '#step-2-generate-api-key'
4734
4851
  connection_config:
4735
4852
  siteId:
4736
4853
  type: string
@@ -4738,12 +4855,14 @@ mindbody:
4738
4855
  description: The site ID for your Mindbody account
4739
4856
  pattern: '^\d+$'
4740
4857
  example: '-99'
4858
+ doc_section: '#step-3-obtain-site-id-and-staff-user-token'
4741
4859
  staffUserToken:
4742
4860
  type: string
4743
4861
  title: Staff User Token
4744
4862
  description: The staff user token for your Mindbody account
4745
4863
  pattern: '^[a-f0-9]{32}$'
4746
4864
  example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4
4865
+ doc_section: '#step-3-obtain-site-id-and-staff-user-token'
4747
4866
 
4748
4867
  mixpanel:
4749
4868
  display_name: Mixpanel
@@ -4897,6 +5016,7 @@ next-cloud-ocs:
4897
5016
  headers:
4898
5017
  'ocs-apirequest': 'true'
4899
5018
  docs: http://docs.nango.dev/integrations/all/next-cloud
5019
+ docs_connect: https://docs.nango.dev/integrations/all/next-cloud-ocs/connect
4900
5020
  connection_config:
4901
5021
  domain:
4902
5022
  type: string
@@ -4904,6 +5024,7 @@ next-cloud-ocs:
4904
5024
  description: The domain of your Next Cloud account
4905
5025
  format: hostname
4906
5026
  prefix: https://
5027
+ doc_section: '#step-1-locate-your-next-cloud-domain'
4907
5028
 
4908
5029
  notion:
4909
5030
  display_name: Notion
@@ -4978,6 +5099,51 @@ odoo:
4978
5099
  format: hostname
4979
5100
  prefix: https://
4980
5101
 
5102
+ odoo-cc:
5103
+ display_name: Odoo (Client Credentials)
5104
+ categories:
5105
+ - erp
5106
+ auth_mode: TWO_STEP
5107
+ body_format: form
5108
+ token_url: https://${connectionConfig.serverUrl}/restapi/1.0/common/oauth2/access_token
5109
+ token_params:
5110
+ client_id: ${credential.consumerId}
5111
+ client_secret: ${credential.consumerSecret}
5112
+ grant_type: client_credentials
5113
+ token_headers:
5114
+ content-type: application/x-www-form-urlencoded
5115
+ token_response:
5116
+ token: access_token
5117
+ token_expiration: access_token_validity
5118
+ token_expiration_strategy: expireIn
5119
+ proxy:
5120
+ base_url: https://${connectionConfig.serverUrl}/restapi
5121
+ docs: https://docs.nango.dev/integrations/all/odoo
5122
+ docs_connect: https://docs.nango.dev/integrations/all/odoo/connect
5123
+ credentials:
5124
+ consumerId:
5125
+ type: string
5126
+ title: Consumer ID
5127
+ description: Your App Consumer ID
5128
+ secret: true
5129
+ doc_section: '#step-2-generating-your-odoo-client-credentials'
5130
+ consumerSecret:
5131
+ type: string
5132
+ title: Consumer Secret
5133
+ description: Your App Consumer Secret
5134
+ secret: true
5135
+ doc_section: '#step-2-generating-your-odoo-client-credentials'
5136
+ connection_config:
5137
+ serverUrl:
5138
+ type: string
5139
+ title: Domain
5140
+ description: The domain to your Odoo account
5141
+ format: hostname
5142
+ example: example.odoo.com
5143
+ prefix: https://
5144
+ order: 1
5145
+ doc_section: '#step-1-finding-your-odoo-domain'
5146
+
4981
5147
  okta:
4982
5148
  display_name: Okta
4983
5149
  auth_mode: OAUTH2
@@ -5059,11 +5225,13 @@ openai:
5059
5225
  retry:
5060
5226
  after: 'x-ratelimit-reset-requests'
5061
5227
  docs: https://docs.nango.dev/integrations/all/openai
5228
+ docs_connect: https://docs.nango.dev/integrations/all/openai/connect
5062
5229
  credentials:
5063
5230
  apiKey:
5064
5231
  type: string
5065
5232
  title: API Key
5066
5233
  description: The API key for your OpenAI account
5234
+ doc_section: '#step-1-retrieve-your-openai-api-key'
5067
5235
 
5068
5236
  ory:
5069
5237
  display_name: Ory
@@ -5734,6 +5902,26 @@ rapidapi:
5734
5902
  suffix: .p.rapidapi.com
5735
5903
  prefix: https://
5736
5904
 
5905
+ recharge:
5906
+ display_name: Recharge
5907
+ categories:
5908
+ - e-commerce
5909
+ auth_mode: API_KEY
5910
+ proxy:
5911
+ headers:
5912
+ x-recharge-access-token: ${apiKey}
5913
+ base_url: https://api.rechargeapps.com
5914
+ docs: https://docs.nango.dev/integrations/all/recharge
5915
+ docs_connect: https://docs.nango.dev/integrations/all/recharge/connect
5916
+ credentials:
5917
+ apiKey:
5918
+ type: string
5919
+ title: API Token
5920
+ description: The API Token for your Recharge account
5921
+ example: sk_test_1p1_**************************************************
5922
+ pattern: '^[a-zA-Z0-9_]+$'
5923
+ doc_section: '#step-1-generating-your-api-token'
5924
+
5737
5925
  reddit:
5738
5926
  display_name: Reddit
5739
5927
  categories:
package/dist/http.d.ts DELETED
@@ -1 +0,0 @@
1
- export declare function isValidURL(str: string): boolean;
package/dist/http.js DELETED
@@ -1,11 +0,0 @@
1
- export function isValidURL(str) {
2
- try {
3
- // TODO: replace with canParse after we drop v18
4
- new URL(str);
5
- return true;
6
- }
7
- catch {
8
- return false;
9
- }
10
- }
11
- //# sourceMappingURL=http.js.map
package/dist/http.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../lib/http.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,GAAW;IAClC,IAAI,CAAC;QACD,gDAAgD;QAChD,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACb,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC"}
package/dist/path.d.ts DELETED
@@ -1 +0,0 @@
1
- export declare const projectRoot: string;
package/dist/path.js DELETED
@@ -1,5 +0,0 @@
1
- import { fileURLToPath } from 'node:url';
2
- import path from 'node:path';
3
- const __filename = fileURLToPath(import.meta.url);
4
- export const projectRoot = path.join(__filename, '../../../..');
5
- //# sourceMappingURL=path.js.map
package/dist/path.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"path.js","sourceRoot":"","sources":["../lib/path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { Provider } from '@nangohq/types';
2
- export declare function updateProviderCache(update: Record<string, Provider>): void;
3
- export declare function getProviders(): Record<string, Provider> | undefined;
4
- export declare function getProvider(providerName: string): Provider | null;
package/dist/providers.js DELETED
@@ -1,45 +0,0 @@
1
- import path from 'node:path';
2
- import fs from 'node:fs';
3
- import yaml from 'js-yaml';
4
- import { projectRoot } from './path.js';
5
- let providers = undefined;
6
- export function updateProviderCache(update) {
7
- providers = update;
8
- }
9
- export function getProviders() {
10
- if (!providers) {
11
- providers = loadProvidersYaml();
12
- }
13
- return providers;
14
- }
15
- export function getProvider(providerName) {
16
- const providers = getProviders();
17
- return providers?.[providerName] ?? null;
18
- }
19
- function loadProvidersYaml() {
20
- try {
21
- const providersYamlPath = path.join(projectRoot, 'packages', 'shared-public', 'providers.yaml');
22
- const fileEntries = yaml.load(fs.readFileSync(providersYamlPath).toString());
23
- if (fileEntries == null) {
24
- throw new Error('provider_template_loading_failed');
25
- }
26
- for (const key in fileEntries) {
27
- const entry = fileEntries[key];
28
- if (entry && 'alias' in entry) {
29
- if (Object.keys(entry).length <= 0) {
30
- console.error('Failed to find alias', entry.alias);
31
- continue;
32
- }
33
- const { alias, ...overrides } = entry;
34
- const aliasData = fileEntries[entry.alias];
35
- fileEntries[key] = { ...aliasData, ...overrides };
36
- }
37
- }
38
- return fileEntries;
39
- }
40
- catch (err) {
41
- console.error('Failed to load providers.yaml', err);
42
- }
43
- return;
44
- }
45
- //# sourceMappingURL=providers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"providers.js","sourceRoot":"","sources":["../lib/providers.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,IAAI,SAAS,GAAyC,SAAS,CAAC;AAEhE,MAAM,UAAU,mBAAmB,CAAC,MAAgC;IAChE,SAAS,GAAG,MAAM,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,YAAY;IACxB,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,SAAS,GAAG,iBAAiB,EAAE,CAAC;IACpC,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,YAAoB;IAC5C,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,OAAO,SAAS,EAAE,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC;AAC7C,CAAC;AAED,SAAS,iBAAiB;IACtB,IAAI,CAAC;QACD,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC;QAChG,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,CAA6C,CAAC;QAEzH,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACxD,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAE/B,IAAI,KAAK,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;gBAC5B,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;oBACjC,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;oBACnD,SAAS;gBACb,CAAC;gBAED,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,GAAG,KAAK,CAAC;gBACtC,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAa,CAAC;gBACvD,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,GAAG,SAAS,EAAE,CAAC;YACtD,CAAC;QACL,CAAC;QAED,OAAO,WAAuC,CAAC;IACnD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAC;IACxD,CAAC;IACD,OAAO;AACX,CAAC"}