@appconda/nextjs 1.0.112 → 1.0.113
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 +3 -3
- package/dist/actions/actionClient.d.ts +0 -10
- package/dist/actions/actionClient.js +0 -38
- package/dist/actions/auth.d.ts +0 -1
- package/dist/actions/auth.js +0 -6
- package/dist/actions/authOptions.d.ts +0 -5
- package/dist/actions/authOptions.js +0 -235
- package/dist/actions/index.d.ts +0 -3
- package/dist/actions/index.js +0 -4
- package/dist/actions/nextAuthHandler.d.ts +0 -1
- package/dist/actions/nextAuthHandler.js +0 -6
- package/dist/actions/nodes.d.ts +0 -4
- package/dist/actions/nodes.js +0 -15
- package/dist/client.d.ts +0 -141
- package/dist/client.js +0 -335
- package/dist/decorators/Cache.d.ts +0 -1
- package/dist/decorators/Cache.js +0 -79
- package/dist/decorators/CacheKey.d.ts +0 -1
- package/dist/decorators/CacheKey.js +0 -9
- package/dist/decorators/Invalidate.d.ts +0 -1
- package/dist/decorators/Invalidate.js +0 -47
- package/dist/enums/api-service.d.ts +0 -13
- package/dist/enums/api-service.js +0 -15
- package/dist/enums/api.d.ts +0 -5
- package/dist/enums/api.js +0 -7
- package/dist/enums/auth-method.d.ts +0 -9
- package/dist/enums/auth-method.js +0 -11
- package/dist/enums/authentication-factor.d.ts +0 -6
- package/dist/enums/authentication-factor.js +0 -7
- package/dist/enums/authenticator-type.d.ts +0 -3
- package/dist/enums/authenticator-type.js +0 -4
- package/dist/enums/browser.d.ts +0 -16
- package/dist/enums/browser.js +0 -18
- package/dist/enums/compression.d.ts +0 -5
- package/dist/enums/compression.js +0 -7
- package/dist/enums/credit-card.d.ts +0 -18
- package/dist/enums/credit-card.js +0 -20
- package/dist/enums/database-usage-range.d.ts +0 -5
- package/dist/enums/database-usage-range.js +0 -7
- package/dist/enums/email-template-locale.d.ts +0 -133
- package/dist/enums/email-template-locale.js +0 -135
- package/dist/enums/email-template-type.d.ts +0 -9
- package/dist/enums/email-template-type.js +0 -11
- package/dist/enums/entities/EntityLimitType.d.ts +0 -4
- package/dist/enums/entities/EntityLimitType.js +0 -6
- package/dist/enums/entities/PropertyAttributeName.d.ts +0 -27
- package/dist/enums/entities/PropertyAttributeName.js +0 -29
- package/dist/enums/entities/PropertyCondition.d.ts +0 -7
- package/dist/enums/entities/PropertyCondition.js +0 -10
- package/dist/enums/entities/PropertyType.d.ts +0 -12
- package/dist/enums/entities/PropertyType.js +0 -18
- package/dist/enums/entities/PropertyValueType.d.ts +0 -6
- package/dist/enums/entities/PropertyValueType.js +0 -8
- package/dist/enums/entities/RowAccess.d.ts +0 -2
- package/dist/enums/entities/RowAccess.js +0 -2
- package/dist/enums/entities/ViewFilterCondition.d.ts +0 -12
- package/dist/enums/entities/ViewFilterCondition.js +0 -14
- package/dist/enums/execution-method.d.ts +0 -8
- package/dist/enums/execution-method.js +0 -10
- package/dist/enums/flag.d.ts +0 -197
- package/dist/enums/flag.js +0 -199
- package/dist/enums/function-usage-range.d.ts +0 -5
- package/dist/enums/function-usage-range.js +0 -7
- package/dist/enums/image-format.d.ts +0 -7
- package/dist/enums/image-format.js +0 -9
- package/dist/enums/image-gravity.d.ts +0 -11
- package/dist/enums/image-gravity.js +0 -13
- package/dist/enums/index-type.d.ts +0 -5
- package/dist/enums/index-type.js +0 -7
- package/dist/enums/messaging-provider-type.d.ts +0 -5
- package/dist/enums/messaging-provider-type.js +0 -7
- package/dist/enums/name.d.ts +0 -14
- package/dist/enums/name.js +0 -16
- package/dist/enums/o-auth-provider copy.d.ts +0 -41
- package/dist/enums/o-auth-provider copy.js +0 -43
- package/dist/enums/o-auth-provider.d.ts +0 -41
- package/dist/enums/o-auth-provider.js +0 -42
- package/dist/enums/password-hash.d.ts +0 -13
- package/dist/enums/password-hash.js +0 -15
- package/dist/enums/platform-type.d.ts +0 -17
- package/dist/enums/platform-type.js +0 -19
- package/dist/enums/project-usage-range.d.ts +0 -4
- package/dist/enums/project-usage-range.js +0 -6
- package/dist/enums/region.d.ts +0 -4
- package/dist/enums/region.js +0 -6
- package/dist/enums/relation-mutate.d.ts +0 -5
- package/dist/enums/relation-mutate.js +0 -7
- package/dist/enums/relationship-type.d.ts +0 -6
- package/dist/enums/relationship-type.js +0 -8
- package/dist/enums/resource-type.d.ts +0 -4
- package/dist/enums/resource-type.js +0 -6
- package/dist/enums/runtime.d.ts +0 -48
- package/dist/enums/runtime.js +0 -50
- package/dist/enums/s-m-t-p-secure.d.ts +0 -3
- package/dist/enums/s-m-t-p-secure.js +0 -5
- package/dist/enums/shared/ApplicationLayout.d.ts +0 -4
- package/dist/enums/shared/ApplicationLayout.js +0 -6
- package/dist/enums/shared/Colors.d.ts +0 -24
- package/dist/enums/shared/Colors.js +0 -26
- package/dist/enums/shared/InputType.d.ts +0 -6
- package/dist/enums/shared/InputType.js +0 -8
- package/dist/enums/shared/Periodicity.d.ts +0 -7
- package/dist/enums/shared/Periodicity.js +0 -9
- package/dist/enums/shared/SvgIcon.d.ts +0 -37
- package/dist/enums/shared/SvgIcon.js +0 -39
- package/dist/enums/shared/Theme.d.ts +0 -4
- package/dist/enums/shared/Theme.js +0 -6
- package/dist/enums/sms-template-locale.d.ts +0 -133
- package/dist/enums/sms-template-locale.js +0 -135
- package/dist/enums/sms-template-type.d.ts +0 -6
- package/dist/enums/sms-template-type.js +0 -8
- package/dist/enums/smtp-encryption.d.ts +0 -5
- package/dist/enums/smtp-encryption.js +0 -7
- package/dist/enums/storage-usage-range.d.ts +0 -5
- package/dist/enums/storage-usage-range.js +0 -7
- package/dist/enums/subscriptions/PricingModel.d.ts +0 -11
- package/dist/enums/subscriptions/PricingModel.js +0 -12
- package/dist/enums/subscriptions/SubscriptionBillingPeriod.d.ts +0 -10
- package/dist/enums/subscriptions/SubscriptionBillingPeriod.js +0 -11
- package/dist/enums/subscriptions/SubscriptionFeatureLimitType.d.ts +0 -10
- package/dist/enums/subscriptions/SubscriptionFeatureLimitType.js +0 -13
- package/dist/enums/subscriptions/SubscriptionPriceType.d.ts +0 -7
- package/dist/enums/subscriptions/SubscriptionPriceType.js +0 -8
- package/dist/enums/tenants/LinkedAccountStatus.d.ts +0 -5
- package/dist/enums/tenants/LinkedAccountStatus.js +0 -7
- package/dist/enums/tenants/TenantUserJoined.d.ts +0 -6
- package/dist/enums/tenants/TenantUserJoined.js +0 -8
- package/dist/enums/tenants/TenantUserStatus.d.ts +0 -6
- package/dist/enums/tenants/TenantUserStatus.js +0 -8
- package/dist/enums/tenants/TenantUserType.d.ts +0 -5
- package/dist/enums/tenants/TenantUserType.js +0 -7
- package/dist/enums/user-usage-range.d.ts +0 -5
- package/dist/enums/user-usage-range.js +0 -7
- package/dist/getAppcondaClient.d.ts +0 -2
- package/dist/getAppcondaClient.js +0 -44
- package/dist/getSDKForCurrentUser.d.ts +0 -43
- package/dist/getSDKForCurrentUser.js +0 -76
- package/dist/getSDKForService.d.ts +0 -6
- package/dist/getSDKForService.js +0 -51
- package/dist/getSDKForTenant.d.ts +0 -20
- package/dist/getSDKForTenant.js +0 -44
- package/dist/id.d.ts +0 -20
- package/dist/id.js +0 -45
- package/dist/index.d.ts +0 -44
- package/dist/index.js +0 -42
- package/dist/inputFile.d.ts +0 -6
- package/dist/inputFile.js +0 -17
- package/dist/lib/Cache/Adapter.d.ts +0 -10
- package/dist/lib/Cache/Adapter.js +0 -2
- package/dist/lib/Cache/Adapters/Filesystem.d.ts +0 -16
- package/dist/lib/Cache/Adapters/Filesystem.js +0 -103
- package/dist/lib/Cache/Adapters/Memory.d.ts +0 -18
- package/dist/lib/Cache/Adapters/Memory.js +0 -47
- package/dist/lib/Cache/Adapters/None.d.ts +0 -12
- package/dist/lib/Cache/Adapters/None.js +0 -28
- package/dist/lib/Cache/Adapters/Sharding.d.ts +0 -17
- package/dist/lib/Cache/Adapters/Sharding.js +0 -73
- package/dist/lib/Cache/Cache.d.ts +0 -16
- package/dist/lib/Cache/Cache.js +0 -52
- package/dist/lib/Cache/index.d.ts +0 -4
- package/dist/lib/Cache/index.js +0 -5
- package/dist/lib/Cache/test.d.ts +0 -0
- package/dist/lib/Cache/test.js +0 -1
- package/dist/lib/Registry/Registry.d.ts +0 -38
- package/dist/lib/Registry/Registry.js +0 -56
- package/dist/lib/Registry/index.d.ts +0 -1
- package/dist/lib/Registry/index.js +0 -2
- package/dist/lib/Services.d.ts +0 -6
- package/dist/lib/Services.js +0 -14
- package/dist/lib/crypto.d.ts +0 -23
- package/dist/lib/crypto.js +0 -78
- package/dist/lib/env.d.ts +0 -1
- package/dist/lib/env.js +0 -137
- package/dist/lib/errors.d.ts +0 -70
- package/dist/lib/errors.js +0 -76
- package/dist/lib/index.d.ts +0 -2
- package/dist/lib/index.js +0 -3
- package/dist/lib/jwt.d.ts +0 -12
- package/dist/lib/jwt.js +0 -103
- package/dist/models.d.ts +0 -3272
- package/dist/models.js +0 -2
- package/dist/modules/account/actions.d.ts +0 -25
- package/dist/modules/account/actions.js +0 -18
- package/dist/modules/account/enums/authentication-factor.d.ts +0 -6
- package/dist/modules/account/enums/authentication-factor.js +0 -8
- package/dist/modules/account/enums/authenticator-type.d.ts +0 -3
- package/dist/modules/account/enums/authenticator-type.js +0 -5
- package/dist/modules/account/enums/o-auth-provider.d.ts +0 -41
- package/dist/modules/account/enums/o-auth-provider.js +0 -43
- package/dist/modules/account/index.d.ts +0 -3
- package/dist/modules/account/index.js +0 -4
- package/dist/modules/account/schema.d.ts +0 -17
- package/dist/modules/account/schema.js +0 -8
- package/dist/modules/account/service.d.ts +0 -530
- package/dist/modules/account/service.js +0 -1260
- package/dist/modules/account/types.d.ts +0 -411
- package/dist/modules/account/types.js +0 -2
- package/dist/modules/acl/service.d.ts +0 -26
- package/dist/modules/acl/service.js +0 -27
- package/dist/modules/agent/action.d.ts +0 -53
- package/dist/modules/agent/action.js +0 -64
- package/dist/modules/agent/index.d.ts +0 -4
- package/dist/modules/agent/index.js +0 -5
- package/dist/modules/agent/schema.d.ts +0 -48
- package/dist/modules/agent/schema.js +0 -21
- package/dist/modules/agent/service.d.ts +0 -12
- package/dist/modules/agent/service.js +0 -22
- package/dist/modules/agent/types.d.ts +0 -11
- package/dist/modules/agent/types.js +0 -2
- package/dist/modules/ai/index.d.ts +0 -1
- package/dist/modules/ai/index.js +0 -2
- package/dist/modules/ai/node/actions.d.ts +0 -4
- package/dist/modules/ai/node/actions.js +0 -16
- package/dist/modules/ai/node/index.d.ts +0 -2
- package/dist/modules/ai/node/index.js +0 -3
- package/dist/modules/ai/node/service.d.ts +0 -5
- package/dist/modules/ai/node/service.js +0 -12
- package/dist/modules/index.d.ts +0 -6
- package/dist/modules/index.js +0 -7
- package/dist/modules/task/action.d.ts +0 -168
- package/dist/modules/task/action.js +0 -163
- package/dist/modules/task/index.d.ts +0 -4
- package/dist/modules/task/index.js +0 -5
- package/dist/modules/task/schema.d.ts +0 -107
- package/dist/modules/task/schema.js +0 -44
- package/dist/modules/task/service.d.ts +0 -19
- package/dist/modules/task/service.js +0 -43
- package/dist/modules/task/types.d.ts +0 -84
- package/dist/modules/task/types.js +0 -2
- package/dist/modules/tenant/actions.d.ts +0 -45
- package/dist/modules/tenant/actions.js +0 -38
- package/dist/modules/tenant/index.d.ts +0 -3
- package/dist/modules/tenant/index.js +0 -4
- package/dist/modules/tenant/tenant.d.ts +0 -32
- package/dist/modules/tenant/tenant.js +0 -125
- package/dist/modules/tenant/types.d.ts +0 -11
- package/dist/modules/tenant/types.js +0 -2
- package/dist/modules/waitlist/action.d.ts +0 -69
- package/dist/modules/waitlist/action.js +0 -78
- package/dist/modules/waitlist/index.d.ts +0 -4
- package/dist/modules/waitlist/index.js +0 -5
- package/dist/modules/waitlist/schema.d.ts +0 -39
- package/dist/modules/waitlist/schema.js +0 -18
- package/dist/modules/waitlist/service.d.ts +0 -13
- package/dist/modules/waitlist/service.js +0 -28
- package/dist/modules/waitlist/types.d.ts +0 -14
- package/dist/modules/waitlist/types.js +0 -2
- package/dist/permission.d.ts +0 -43
- package/dist/permission.js +0 -54
- package/dist/query.d.ts +0 -194
- package/dist/query.js +0 -204
- package/dist/role.d.ts +0 -70
- package/dist/role.js +0 -94
- package/dist/schemas/nodes.d.ts +0 -0
- package/dist/schemas/nodes.js +0 -1
- package/dist/service-client.d.ts +0 -7
- package/dist/service-client.js +0 -14
- package/dist/service.d.ts +0 -11
- package/dist/service.js +0 -23
- package/dist/services/account.d.ts +0 -530
- package/dist/services/account.js +0 -1259
- package/dist/services/applets.d.ts +0 -9
- package/dist/services/applets.js +0 -40
- package/dist/services/avatars.d.ts +0 -115
- package/dist/services/avatars.js +0 -251
- package/dist/services/chat-flow.d.ts +0 -7
- package/dist/services/chat-flow.js +0 -26
- package/dist/services/community.d.ts +0 -19
- package/dist/services/community.js +0 -69
- package/dist/services/configuration.d.ts +0 -5
- package/dist/services/configuration.js +0 -11
- package/dist/services/databases.d.ts +0 -613
- package/dist/services/databases.js +0 -1736
- package/dist/services/functions.d.ts +0 -319
- package/dist/services/functions.js +0 -810
- package/dist/services/graphql.d.ts +0 -25
- package/dist/services/graphql.js +0 -57
- package/dist/services/health.d.ts +0 -231
- package/dist/services/health.js +0 -463
- package/dist/services/locale.d.ts +0 -80
- package/dist/services/locale.js +0 -144
- package/dist/services/messaging.d.ts +0 -685
- package/dist/services/messaging.js +0 -1920
- package/dist/services/node.d.ts +0 -5
- package/dist/services/node.js +0 -11
- package/dist/services/permissions.d.ts +0 -20
- package/dist/services/permissions.js +0 -90
- package/dist/services/pricing.d.ts +0 -15
- package/dist/services/pricing.js +0 -21
- package/dist/services/projects.d.ts +0 -542
- package/dist/services/projects.js +0 -1526
- package/dist/services/roles.d.ts +0 -19
- package/dist/services/roles.js +0 -72
- package/dist/services/schema.d.ts +0 -17
- package/dist/services/schema.js +0 -48
- package/dist/services/storage.d.ts +0 -189
- package/dist/services/storage.js +0 -474
- package/dist/services/subscription.d.ts +0 -15
- package/dist/services/subscription.js +0 -30
- package/dist/services/teams.d.ts +0 -167
- package/dist/services/teams.js +0 -395
- package/dist/services/tenant-subscription.d.ts +0 -12
- package/dist/services/tenant-subscription.js +0 -52
- package/dist/services/tenant.d.ts +0 -32
- package/dist/services/tenant.js +0 -124
- package/dist/services/users.d.ts +0 -499
- package/dist/services/users.js +0 -1283
package/dist/services/health.js
DELETED
@@ -1,463 +0,0 @@
|
|
1
|
-
import { AppcondaException } from '../client';
|
2
|
-
export class Health {
|
3
|
-
constructor(client) {
|
4
|
-
this.client = client;
|
5
|
-
}
|
6
|
-
/**
|
7
|
-
* Get HTTP
|
8
|
-
*
|
9
|
-
* Check the Appconda HTTP server is up and responsive.
|
10
|
-
*
|
11
|
-
* @throws {AppcondaException}
|
12
|
-
* @returns {Promise<Models.HealthStatus>}
|
13
|
-
*/
|
14
|
-
async get() {
|
15
|
-
const apiPath = '/health';
|
16
|
-
const payload = {};
|
17
|
-
const uri = new URL(this.client.config.endpoint + apiPath);
|
18
|
-
const apiHeaders = {
|
19
|
-
'content-type': 'application/json',
|
20
|
-
};
|
21
|
-
return await this.client.call('get', uri, apiHeaders, payload);
|
22
|
-
}
|
23
|
-
/**
|
24
|
-
* Get antivirus
|
25
|
-
*
|
26
|
-
* Check the Appconda Antivirus server is up and connection is successful.
|
27
|
-
*
|
28
|
-
* @throws {AppcondaException}
|
29
|
-
* @returns {Promise<Models.HealthAntivirus>}
|
30
|
-
*/
|
31
|
-
async getAntivirus() {
|
32
|
-
const apiPath = '/health/anti-virus';
|
33
|
-
const payload = {};
|
34
|
-
const uri = new URL(this.client.config.endpoint + apiPath);
|
35
|
-
const apiHeaders = {
|
36
|
-
'content-type': 'application/json',
|
37
|
-
};
|
38
|
-
return await this.client.call('get', uri, apiHeaders, payload);
|
39
|
-
}
|
40
|
-
/**
|
41
|
-
* Get cache
|
42
|
-
*
|
43
|
-
* Check the Appconda in-memory cache servers are up and connection is successful.
|
44
|
-
*
|
45
|
-
* @throws {AppcondaException}
|
46
|
-
* @returns {Promise<Models.HealthStatus>}
|
47
|
-
*/
|
48
|
-
async getCache() {
|
49
|
-
const apiPath = '/health/cache';
|
50
|
-
const payload = {};
|
51
|
-
const uri = new URL(this.client.config.endpoint + apiPath);
|
52
|
-
const apiHeaders = {
|
53
|
-
'content-type': 'application/json',
|
54
|
-
};
|
55
|
-
return await this.client.call('get', uri, apiHeaders, payload);
|
56
|
-
}
|
57
|
-
/**
|
58
|
-
* Get the SSL certificate for a domain
|
59
|
-
*
|
60
|
-
* Get the SSL certificate for a domain
|
61
|
-
*
|
62
|
-
* @param {string} domain
|
63
|
-
* @throws {AppcondaException}
|
64
|
-
* @returns {Promise<Models.HealthCertificate>}
|
65
|
-
*/
|
66
|
-
async getCertificate(domain) {
|
67
|
-
const apiPath = '/health/certificate';
|
68
|
-
const payload = {};
|
69
|
-
if (typeof domain !== 'undefined') {
|
70
|
-
payload['domain'] = domain;
|
71
|
-
}
|
72
|
-
const uri = new URL(this.client.config.endpoint + apiPath);
|
73
|
-
const apiHeaders = {
|
74
|
-
'content-type': 'application/json',
|
75
|
-
};
|
76
|
-
return await this.client.call('get', uri, apiHeaders, payload);
|
77
|
-
}
|
78
|
-
/**
|
79
|
-
* Get DB
|
80
|
-
*
|
81
|
-
* Check the Appconda database servers are up and connection is successful.
|
82
|
-
*
|
83
|
-
* @throws {AppcondaException}
|
84
|
-
* @returns {Promise<Models.HealthStatus>}
|
85
|
-
*/
|
86
|
-
async getDB() {
|
87
|
-
const apiPath = '/health/db';
|
88
|
-
const payload = {};
|
89
|
-
const uri = new URL(this.client.config.endpoint + apiPath);
|
90
|
-
const apiHeaders = {
|
91
|
-
'content-type': 'application/json',
|
92
|
-
};
|
93
|
-
return await this.client.call('get', uri, apiHeaders, payload);
|
94
|
-
}
|
95
|
-
/**
|
96
|
-
* Get pubsub
|
97
|
-
*
|
98
|
-
* Check the Appconda pub-sub servers are up and connection is successful.
|
99
|
-
*
|
100
|
-
* @throws {AppcondaException}
|
101
|
-
* @returns {Promise<Models.HealthStatus>}
|
102
|
-
*/
|
103
|
-
async getPubSub() {
|
104
|
-
const apiPath = '/health/pubsub';
|
105
|
-
const payload = {};
|
106
|
-
const uri = new URL(this.client.config.endpoint + apiPath);
|
107
|
-
const apiHeaders = {
|
108
|
-
'content-type': 'application/json',
|
109
|
-
};
|
110
|
-
return await this.client.call('get', uri, apiHeaders, payload);
|
111
|
-
}
|
112
|
-
/**
|
113
|
-
* Get queue
|
114
|
-
*
|
115
|
-
* Check the Appconda queue messaging servers are up and connection is successful.
|
116
|
-
*
|
117
|
-
* @throws {AppcondaException}
|
118
|
-
* @returns {Promise<Models.HealthStatus>}
|
119
|
-
*/
|
120
|
-
async getQueue() {
|
121
|
-
const apiPath = '/health/queue';
|
122
|
-
const payload = {};
|
123
|
-
const uri = new URL(this.client.config.endpoint + apiPath);
|
124
|
-
const apiHeaders = {
|
125
|
-
'content-type': 'application/json',
|
126
|
-
};
|
127
|
-
return await this.client.call('get', uri, apiHeaders, payload);
|
128
|
-
}
|
129
|
-
/**
|
130
|
-
* Get builds queue
|
131
|
-
*
|
132
|
-
* Get the number of builds that are waiting to be processed in the Appconda internal queue server.
|
133
|
-
*
|
134
|
-
* @param {number} threshold
|
135
|
-
* @throws {AppcondaException}
|
136
|
-
* @returns {Promise<Models.HealthQueue>}
|
137
|
-
*/
|
138
|
-
async getQueueBuilds(threshold) {
|
139
|
-
const apiPath = '/health/queue/builds';
|
140
|
-
const payload = {};
|
141
|
-
if (typeof threshold !== 'undefined') {
|
142
|
-
payload['threshold'] = threshold;
|
143
|
-
}
|
144
|
-
const uri = new URL(this.client.config.endpoint + apiPath);
|
145
|
-
const apiHeaders = {
|
146
|
-
'content-type': 'application/json',
|
147
|
-
};
|
148
|
-
return await this.client.call('get', uri, apiHeaders, payload);
|
149
|
-
}
|
150
|
-
/**
|
151
|
-
* Get certificates queue
|
152
|
-
*
|
153
|
-
* Get the number of certificates that are waiting to be issued against [Letsencrypt](https://letsencrypt.org/) in the Appconda internal queue server.
|
154
|
-
*
|
155
|
-
* @param {number} threshold
|
156
|
-
* @throws {AppcondaException}
|
157
|
-
* @returns {Promise<Models.HealthQueue>}
|
158
|
-
*/
|
159
|
-
async getQueueCertificates(threshold) {
|
160
|
-
const apiPath = '/health/queue/certificates';
|
161
|
-
const payload = {};
|
162
|
-
if (typeof threshold !== 'undefined') {
|
163
|
-
payload['threshold'] = threshold;
|
164
|
-
}
|
165
|
-
const uri = new URL(this.client.config.endpoint + apiPath);
|
166
|
-
const apiHeaders = {
|
167
|
-
'content-type': 'application/json',
|
168
|
-
};
|
169
|
-
return await this.client.call('get', uri, apiHeaders, payload);
|
170
|
-
}
|
171
|
-
/**
|
172
|
-
* Get databases queue
|
173
|
-
*
|
174
|
-
* Get the number of database changes that are waiting to be processed in the Appconda internal queue server.
|
175
|
-
*
|
176
|
-
* @param {string} name
|
177
|
-
* @param {number} threshold
|
178
|
-
* @throws {AppcondaException}
|
179
|
-
* @returns {Promise<Models.HealthQueue>}
|
180
|
-
*/
|
181
|
-
async getQueueDatabases(name, threshold) {
|
182
|
-
const apiPath = '/health/queue/databases';
|
183
|
-
const payload = {};
|
184
|
-
if (typeof name !== 'undefined') {
|
185
|
-
payload['name'] = name;
|
186
|
-
}
|
187
|
-
if (typeof threshold !== 'undefined') {
|
188
|
-
payload['threshold'] = threshold;
|
189
|
-
}
|
190
|
-
const uri = new URL(this.client.config.endpoint + apiPath);
|
191
|
-
const apiHeaders = {
|
192
|
-
'content-type': 'application/json',
|
193
|
-
};
|
194
|
-
return await this.client.call('get', uri, apiHeaders, payload);
|
195
|
-
}
|
196
|
-
/**
|
197
|
-
* Get deletes queue
|
198
|
-
*
|
199
|
-
* Get the number of background destructive changes that are waiting to be processed in the Appconda internal queue server.
|
200
|
-
*
|
201
|
-
* @param {number} threshold
|
202
|
-
* @throws {AppcondaException}
|
203
|
-
* @returns {Promise<Models.HealthQueue>}
|
204
|
-
*/
|
205
|
-
async getQueueDeletes(threshold) {
|
206
|
-
const apiPath = '/health/queue/deletes';
|
207
|
-
const payload = {};
|
208
|
-
if (typeof threshold !== 'undefined') {
|
209
|
-
payload['threshold'] = threshold;
|
210
|
-
}
|
211
|
-
const uri = new URL(this.client.config.endpoint + apiPath);
|
212
|
-
const apiHeaders = {
|
213
|
-
'content-type': 'application/json',
|
214
|
-
};
|
215
|
-
return await this.client.call('get', uri, apiHeaders, payload);
|
216
|
-
}
|
217
|
-
/**
|
218
|
-
* Get number of failed queue jobs
|
219
|
-
*
|
220
|
-
* Returns the amount of failed jobs in a given queue.
|
221
|
-
|
222
|
-
*
|
223
|
-
* @param {Name} name
|
224
|
-
* @param {number} threshold
|
225
|
-
* @throws {AppcondaException}
|
226
|
-
* @returns {Promise<Models.HealthQueue>}
|
227
|
-
*/
|
228
|
-
async getFailedJobs(name, threshold) {
|
229
|
-
if (typeof name === 'undefined') {
|
230
|
-
throw new AppcondaException('Missing required parameter: "name"');
|
231
|
-
}
|
232
|
-
const apiPath = '/health/queue/failed/{name}'.replace('{name}', name);
|
233
|
-
const payload = {};
|
234
|
-
if (typeof threshold !== 'undefined') {
|
235
|
-
payload['threshold'] = threshold;
|
236
|
-
}
|
237
|
-
const uri = new URL(this.client.config.endpoint + apiPath);
|
238
|
-
const apiHeaders = {
|
239
|
-
'content-type': 'application/json',
|
240
|
-
};
|
241
|
-
return await this.client.call('get', uri, apiHeaders, payload);
|
242
|
-
}
|
243
|
-
/**
|
244
|
-
* Get functions queue
|
245
|
-
*
|
246
|
-
* Get the number of function executions that are waiting to be processed in the Appconda internal queue server.
|
247
|
-
*
|
248
|
-
* @param {number} threshold
|
249
|
-
* @throws {AppcondaException}
|
250
|
-
* @returns {Promise<Models.HealthQueue>}
|
251
|
-
*/
|
252
|
-
async getQueueFunctions(threshold) {
|
253
|
-
const apiPath = '/health/queue/functions';
|
254
|
-
const payload = {};
|
255
|
-
if (typeof threshold !== 'undefined') {
|
256
|
-
payload['threshold'] = threshold;
|
257
|
-
}
|
258
|
-
const uri = new URL(this.client.config.endpoint + apiPath);
|
259
|
-
const apiHeaders = {
|
260
|
-
'content-type': 'application/json',
|
261
|
-
};
|
262
|
-
return await this.client.call('get', uri, apiHeaders, payload);
|
263
|
-
}
|
264
|
-
/**
|
265
|
-
* Get logs queue
|
266
|
-
*
|
267
|
-
* Get the number of logs that are waiting to be processed in the Appconda internal queue server.
|
268
|
-
*
|
269
|
-
* @param {number} threshold
|
270
|
-
* @throws {AppcondaException}
|
271
|
-
* @returns {Promise<Models.HealthQueue>}
|
272
|
-
*/
|
273
|
-
async getQueueLogs(threshold) {
|
274
|
-
const apiPath = '/health/queue/logs';
|
275
|
-
const payload = {};
|
276
|
-
if (typeof threshold !== 'undefined') {
|
277
|
-
payload['threshold'] = threshold;
|
278
|
-
}
|
279
|
-
const uri = new URL(this.client.config.endpoint + apiPath);
|
280
|
-
const apiHeaders = {
|
281
|
-
'content-type': 'application/json',
|
282
|
-
};
|
283
|
-
return await this.client.call('get', uri, apiHeaders, payload);
|
284
|
-
}
|
285
|
-
/**
|
286
|
-
* Get mails queue
|
287
|
-
*
|
288
|
-
* Get the number of mails that are waiting to be processed in the Appconda internal queue server.
|
289
|
-
*
|
290
|
-
* @param {number} threshold
|
291
|
-
* @throws {AppcondaException}
|
292
|
-
* @returns {Promise<Models.HealthQueue>}
|
293
|
-
*/
|
294
|
-
async getQueueMails(threshold) {
|
295
|
-
const apiPath = '/health/queue/mails';
|
296
|
-
const payload = {};
|
297
|
-
if (typeof threshold !== 'undefined') {
|
298
|
-
payload['threshold'] = threshold;
|
299
|
-
}
|
300
|
-
const uri = new URL(this.client.config.endpoint + apiPath);
|
301
|
-
const apiHeaders = {
|
302
|
-
'content-type': 'application/json',
|
303
|
-
};
|
304
|
-
return await this.client.call('get', uri, apiHeaders, payload);
|
305
|
-
}
|
306
|
-
/**
|
307
|
-
* Get messaging queue
|
308
|
-
*
|
309
|
-
* Get the number of messages that are waiting to be processed in the Appconda internal queue server.
|
310
|
-
*
|
311
|
-
* @param {number} threshold
|
312
|
-
* @throws {AppcondaException}
|
313
|
-
* @returns {Promise<Models.HealthQueue>}
|
314
|
-
*/
|
315
|
-
async getQueueMessaging(threshold) {
|
316
|
-
const apiPath = '/health/queue/messaging';
|
317
|
-
const payload = {};
|
318
|
-
if (typeof threshold !== 'undefined') {
|
319
|
-
payload['threshold'] = threshold;
|
320
|
-
}
|
321
|
-
const uri = new URL(this.client.config.endpoint + apiPath);
|
322
|
-
const apiHeaders = {
|
323
|
-
'content-type': 'application/json',
|
324
|
-
};
|
325
|
-
return await this.client.call('get', uri, apiHeaders, payload);
|
326
|
-
}
|
327
|
-
/**
|
328
|
-
* Get migrations queue
|
329
|
-
*
|
330
|
-
* Get the number of migrations that are waiting to be processed in the Appconda internal queue server.
|
331
|
-
*
|
332
|
-
* @param {number} threshold
|
333
|
-
* @throws {AppcondaException}
|
334
|
-
* @returns {Promise<Models.HealthQueue>}
|
335
|
-
*/
|
336
|
-
async getQueueMigrations(threshold) {
|
337
|
-
const apiPath = '/health/queue/migrations';
|
338
|
-
const payload = {};
|
339
|
-
if (typeof threshold !== 'undefined') {
|
340
|
-
payload['threshold'] = threshold;
|
341
|
-
}
|
342
|
-
const uri = new URL(this.client.config.endpoint + apiPath);
|
343
|
-
const apiHeaders = {
|
344
|
-
'content-type': 'application/json',
|
345
|
-
};
|
346
|
-
return await this.client.call('get', uri, apiHeaders, payload);
|
347
|
-
}
|
348
|
-
/**
|
349
|
-
* Get usage queue
|
350
|
-
*
|
351
|
-
* Get the number of metrics that are waiting to be processed in the Appconda internal queue server.
|
352
|
-
*
|
353
|
-
* @param {number} threshold
|
354
|
-
* @throws {AppcondaException}
|
355
|
-
* @returns {Promise<Models.HealthQueue>}
|
356
|
-
*/
|
357
|
-
async getQueueUsage(threshold) {
|
358
|
-
const apiPath = '/health/queue/usage';
|
359
|
-
const payload = {};
|
360
|
-
if (typeof threshold !== 'undefined') {
|
361
|
-
payload['threshold'] = threshold;
|
362
|
-
}
|
363
|
-
const uri = new URL(this.client.config.endpoint + apiPath);
|
364
|
-
const apiHeaders = {
|
365
|
-
'content-type': 'application/json',
|
366
|
-
};
|
367
|
-
return await this.client.call('get', uri, apiHeaders, payload);
|
368
|
-
}
|
369
|
-
/**
|
370
|
-
* Get usage dump queue
|
371
|
-
*
|
372
|
-
* Get the number of projects containing metrics that are waiting to be processed in the Appconda internal queue server.
|
373
|
-
*
|
374
|
-
* @param {number} threshold
|
375
|
-
* @throws {AppcondaException}
|
376
|
-
* @returns {Promise<Models.HealthQueue>}
|
377
|
-
*/
|
378
|
-
async getQueueUsageDump(threshold) {
|
379
|
-
const apiPath = '/health/queue/usage-dump';
|
380
|
-
const payload = {};
|
381
|
-
if (typeof threshold !== 'undefined') {
|
382
|
-
payload['threshold'] = threshold;
|
383
|
-
}
|
384
|
-
const uri = new URL(this.client.config.endpoint + apiPath);
|
385
|
-
const apiHeaders = {
|
386
|
-
'content-type': 'application/json',
|
387
|
-
};
|
388
|
-
return await this.client.call('get', uri, apiHeaders, payload);
|
389
|
-
}
|
390
|
-
/**
|
391
|
-
* Get webhooks queue
|
392
|
-
*
|
393
|
-
* Get the number of webhooks that are waiting to be processed in the Appconda internal queue server.
|
394
|
-
*
|
395
|
-
* @param {number} threshold
|
396
|
-
* @throws {AppcondaException}
|
397
|
-
* @returns {Promise<Models.HealthQueue>}
|
398
|
-
*/
|
399
|
-
async getQueueWebhooks(threshold) {
|
400
|
-
const apiPath = '/health/queue/webhooks';
|
401
|
-
const payload = {};
|
402
|
-
if (typeof threshold !== 'undefined') {
|
403
|
-
payload['threshold'] = threshold;
|
404
|
-
}
|
405
|
-
const uri = new URL(this.client.config.endpoint + apiPath);
|
406
|
-
const apiHeaders = {
|
407
|
-
'content-type': 'application/json',
|
408
|
-
};
|
409
|
-
return await this.client.call('get', uri, apiHeaders, payload);
|
410
|
-
}
|
411
|
-
/**
|
412
|
-
* Get storage
|
413
|
-
*
|
414
|
-
* Check the Appconda storage device is up and connection is successful.
|
415
|
-
*
|
416
|
-
* @throws {AppcondaException}
|
417
|
-
* @returns {Promise<Models.HealthStatus>}
|
418
|
-
*/
|
419
|
-
async getStorage() {
|
420
|
-
const apiPath = '/health/storage';
|
421
|
-
const payload = {};
|
422
|
-
const uri = new URL(this.client.config.endpoint + apiPath);
|
423
|
-
const apiHeaders = {
|
424
|
-
'content-type': 'application/json',
|
425
|
-
};
|
426
|
-
return await this.client.call('get', uri, apiHeaders, payload);
|
427
|
-
}
|
428
|
-
/**
|
429
|
-
* Get local storage
|
430
|
-
*
|
431
|
-
* Check the Appconda local storage device is up and connection is successful.
|
432
|
-
*
|
433
|
-
* @throws {AppcondaException}
|
434
|
-
* @returns {Promise<Models.HealthStatus>}
|
435
|
-
*/
|
436
|
-
async getStorageLocal() {
|
437
|
-
const apiPath = '/health/storage/local';
|
438
|
-
const payload = {};
|
439
|
-
const uri = new URL(this.client.config.endpoint + apiPath);
|
440
|
-
const apiHeaders = {
|
441
|
-
'content-type': 'application/json',
|
442
|
-
};
|
443
|
-
return await this.client.call('get', uri, apiHeaders, payload);
|
444
|
-
}
|
445
|
-
/**
|
446
|
-
* Get time
|
447
|
-
*
|
448
|
-
* Check the Appconda server time is synced with Google remote NTP server. We use this technology to smoothly handle leap seconds with no disruptive events. The [Network Time Protocol](https://en.wikipedia.org/wiki/Network_Time_Protocol) (NTP) is used by hundreds of millions of computers and devices to synchronize their clocks over the Internet. If your computer sets its own clock, it likely uses NTP.
|
449
|
-
*
|
450
|
-
* @throws {AppcondaException}
|
451
|
-
* @returns {Promise<Models.HealthTime>}
|
452
|
-
*/
|
453
|
-
async getTime() {
|
454
|
-
const apiPath = '/health/time';
|
455
|
-
const payload = {};
|
456
|
-
const uri = new URL(this.client.config.endpoint + apiPath);
|
457
|
-
const apiHeaders = {
|
458
|
-
'content-type': 'application/json',
|
459
|
-
};
|
460
|
-
return await this.client.call('get', uri, apiHeaders, payload);
|
461
|
-
}
|
462
|
-
}
|
463
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL2hlYWx0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQXdDLE1BQU0sV0FBVyxDQUFDO0FBSXBGLE1BQU0sT0FBTyxNQUFNO0lBR2YsWUFBWSxNQUFjO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLEdBQUc7UUFDTCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUM7UUFDMUIsTUFBTSxPQUFPLEdBQVksRUFBRSxDQUFDO1FBQzVCLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUUzRCxNQUFNLFVBQVUsR0FBaUM7WUFDN0MsY0FBYyxFQUFFLGtCQUFrQjtTQUNyQyxDQUFBO1FBRUQsT0FBTyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUN6QixLQUFLLEVBQ0wsR0FBRyxFQUNILFVBQVUsRUFDVixPQUFPLENBQ1YsQ0FBQztJQUNOLENBQUM7SUFDRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLFlBQVk7UUFDZCxNQUFNLE9BQU8sR0FBRyxvQkFBb0IsQ0FBQztRQUNyQyxNQUFNLE9BQU8sR0FBWSxFQUFFLENBQUM7UUFDNUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBRTNELE1BQU0sVUFBVSxHQUFpQztZQUM3QyxjQUFjLEVBQUUsa0JBQWtCO1NBQ3JDLENBQUE7UUFFRCxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3pCLEtBQUssRUFDTCxHQUFHLEVBQ0gsVUFB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LEVBQ0gsVUFBVSxFQUNWLE9BQU8sQ0FDVixDQUFDO0lBQ04sQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwY29uZGFFeGNlcHRpb24sIENsaWVudCwgdHlwZSBQYXlsb2FkLCBVcGxvYWRQcm9ncmVzcyB9IGZyb20gJy4uL2NsaWVudCc7XG5pbXBvcnQgdHlwZSB7IE1vZGVscyB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBOYW1lIH0gZnJvbSAnLi4vZW51bXMvbmFtZSc7XG5cbmV4cG9ydCBjbGFzcyBIZWFsdGgge1xuICAgIGNsaWVudDogQ2xpZW50O1xuXG4gICAgY29uc3RydWN0b3IoY2xpZW50OiBDbGllbnQpIHtcbiAgICAgICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IEhUVFBcbiAgICAgKlxuICAgICAqIENoZWNrIHRoZSBBcHBjb25kYSBIVFRQIHNlcnZlciBpcyB1cCBhbmQgcmVzcG9uc2l2ZS5cbiAgICAgKlxuICAgICAqIEB0aHJvd3Mge0FwcGNvbmRhRXhjZXB0aW9ufVxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPE1vZGVscy5IZWFsdGhTdGF0dXM+fVxuICAgICAqL1xuICAgIGFzeW5jIGdldCgpOiBQcm9taXNlPE1vZGVscy5IZWFsdGhTdGF0dXM+IHtcbiAgICAgICAgY29uc3QgYXBpUGF0aCA9ICcvaGVhbHRoJztcbiAgICAgICAgY29uc3QgcGF5bG9hZDogUGF5bG9hZCA9IHt9O1xuICAgICAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuY2xpZW50LmNvbmZpZy5lbmRwb2ludCArIGFwaVBhdGgpO1xuXG4gICAgICAgIGNvbnN0IGFwaUhlYWRlcnM6IHsgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2xpZW50LmNhbGwoXG4gICAgICAgICAgICAnZ2V0JyxcbiAgICAgICAgICAgIHVyaSxcbiAgICAgICAgICAgIGFwaUhlYWRlcnMsXG4gICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgYW50aXZpcnVzXG4gICAgICpcbiAgICAgKiBDaGVjayB0aGUgQXBwY29uZGEgQW50aXZpcnVzIHNlcnZlciBpcyB1cCBhbmQgY29ubmVjdGlvbiBpcyBzdWNjZXNzZnVsLlxuICAgICAqXG4gICAgICogQHRocm93cyB7QXBwY29uZGFFeGNlcHRpb259XG4gICAgICogQHJldHVybnMge1Byb21pc2U8TW9kZWxzLkhlYWx0aEFudGl2aXJ1cz59XG4gICAgICovXG4gICAgYXN5bmMgZ2V0QW50aXZpcnVzKCk6IFByb21pc2U8TW9kZWxzLkhlYWx0aEFudGl2aXJ1cz4ge1xuICAgICAgICBjb25zdCBhcGlQYXRoID0gJy9oZWFsdGgvYW50aS12aXJ1cyc7XG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IFBheWxvYWQgPSB7fTtcbiAgICAgICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLmNsaWVudC5jb25maWcuZW5kcG9pbnQgKyBhcGlQYXRoKTtcblxuICAgICAgICBjb25zdCBhcGlIZWFkZXJzOiB7IFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNsaWVudC5jYWxsKFxuICAgICAgICAgICAgJ2dldCcsXG4gICAgICAgICAgICB1cmksXG4gICAgICAgICAgICBhcGlIZWFkZXJzLFxuICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGNhY2hlXG4gICAgICpcbiAgICAgKiBDaGVjayB0aGUgQXBwY29uZGEgaW4tbWVtb3J5IGNhY2hlIHNlcnZlcnMgYXJlIHVwIGFuZCBjb25uZWN0aW9uIGlzIHN1Y2Nlc3NmdWwuXG4gICAgICpcbiAgICAgKiBAdGhyb3dzIHtBcHBjb25kYUV4Y2VwdGlvbn1cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxNb2RlbHMuSGVhbHRoU3RhdHVzPn1cbiAgICAgKi9cbiAgICBhc3luYyBnZXRDYWNoZSgpOiBQcm9taXNlPE1vZGVscy5IZWFsdGhTdGF0dXM+IHtcbiAgICAgICAgY29uc3QgYXBpUGF0aCA9ICcvaGVhbHRoL2NhY2hlJztcbiAgICAgICAgY29uc3QgcGF5bG9hZDogUGF5bG9hZCA9IHt9O1xuICAgICAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuY2xpZW50LmNvbmZpZy5lbmRwb2ludCArIGFwaVBhdGgpO1xuXG4gICAgICAgIGNvbnN0IGFwaUhlYWRlcnM6IHsgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2xpZW50LmNhbGwoXG4gICAgICAgICAgICAnZ2V0JyxcbiAgICAgICAgICAgIHVyaSxcbiAgICAgICAgICAgIGFwaUhlYWRlcnMsXG4gICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIFNTTCBjZXJ0aWZpY2F0ZSBmb3IgYSBkb21haW5cbiAgICAgKlxuICAgICAqIEdldCB0aGUgU1NMIGNlcnRpZmljYXRlIGZvciBhIGRvbWFpblxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRvbWFpblxuICAgICAqIEB0aHJvd3Mge0FwcGNvbmRhRXhjZXB0aW9ufVxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPE1vZGVscy5IZWFsdGhDZXJ0aWZpY2F0ZT59XG4gICAgICovXG4gICAgYXN5bmMgZ2V0Q2VydGlmaWNhdGUoZG9tYWluPzogc3RyaW5nKTogUHJvbWlzZTxNb2RlbHMuSGVhbHRoQ2VydGlmaWNhdGU+IHtcbiAgICAgICAgY29uc3QgYXBpUGF0aCA9ICcvaGVhbHRoL2NlcnRpZmljYXRlJztcbiAgICAgICAgY29uc3QgcGF5bG9hZDogUGF5bG9hZCA9IHt9O1xuICAgICAgICBpZiAodHlwZW9mIGRvbWFpbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHBheWxvYWRbJ2RvbWFpbiddID0gZG9tYWluO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodGhpcy5jbGllbnQuY29uZmlnLmVuZHBvaW50ICsgYXBpUGF0aCk7XG5cbiAgICAgICAgY29uc3QgYXBpSGVhZGVyczogeyBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jbGllbnQuY2FsbChcbiAgICAgICAgICAgICdnZXQnLFxuICAgICAgICAgICAgdXJpLFxuICAgICAgICAgICAgYXBpSGVhZGVycyxcbiAgICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgICk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBEQlxuICAgICAqXG4gICAgICogQ2hlY2sgdGhlIEFwcGNvbmRhIGRhdGFiYXNlIHNlcnZlcnMgYXJlIHVwIGFuZCBjb25uZWN0aW9uIGlzIHN1Y2Nlc3NmdWwuXG4gICAgICpcbiAgICAgKiBAdGhyb3dzIHtBcHBjb25kYUV4Y2VwdGlvbn1cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxNb2RlbHMuSGVhbHRoU3RhdHVzPn1cbiAgICAgKi9cbiAgICBhc3luYyBnZXREQigpOiBQcm9taXNlPE1vZGVscy5IZWFsdGhTdGF0dXM+IHtcbiAgICAgICAgY29uc3QgYXBpUGF0aCA9ICcvaGVhbHRoL2RiJztcbiAgICAgICAgY29uc3QgcGF5bG9hZDogUGF5bG9hZCA9IHt9O1xuICAgICAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuY2xpZW50LmNvbmZpZy5lbmRwb2ludCArIGFwaVBhdGgpO1xuXG4gICAgICAgIGNvbnN0IGFwaUhlYWRlcnM6IHsgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2xpZW50LmNhbGwoXG4gICAgICAgICAgICAnZ2V0JyxcbiAgICAgICAgICAgIHVyaSxcbiAgICAgICAgICAgIGFwaUhlYWRlcnMsXG4gICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgcHVic3ViXG4gICAgICpcbiAgICAgKiBDaGVjayB0aGUgQXBwY29uZGEgcHViLXN1YiBzZXJ2ZXJzIGFyZSB1cCBhbmQgY29ubmVjdGlvbiBpcyBzdWNjZXNzZnVsLlxuICAgICAqXG4gICAgICogQHRocm93cyB7QXBwY29uZGFFeGNlcHRpb259XG4gICAgICogQHJldHVybnMge1Byb21pc2U8TW9kZWxzLkhlYWx0aFN0YXR1cz59XG4gICAgICovXG4gICAgYXN5bmMgZ2V0UHViU3ViKCk6IFByb21pc2U8TW9kZWxzLkhlYWx0aFN0YXR1cz4ge1xuICAgICAgICBjb25zdCBhcGlQYXRoID0gJy9oZWFsdGgvcHVic3ViJztcbiAgICAgICAgY29uc3QgcGF5bG9hZDogUGF5bG9hZCA9IHt9O1xuICAgICAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuY2xpZW50LmNvbmZpZy5lbmRwb2ludCArIGFwaVBhdGgpO1xuXG4gICAgICAgIGNvbnN0IGFwaUhlYWRlcnM6IHsgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2xpZW50LmNhbGwoXG4gICAgICAgICAgICAnZ2V0JyxcbiAgICAgICAgICAgIHVyaSxcbiAgICAgICAgICAgIGFwaUhlYWRlcnMsXG4gICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgcXVldWVcbiAgICAgKlxuICAgICAqIENoZWNrIHRoZSBBcHBjb25kYSBxdWV1ZSBtZXNzYWdpbmcgc2VydmVycyBhcmUgdXAgYW5kIGNvbm5lY3Rpb24gaXMgc3VjY2Vzc2Z1bC5cbiAgICAgKlxuICAgICAqIEB0aHJvd3Mge0FwcGNvbmRhRXhjZXB0aW9ufVxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPE1vZGVscy5IZWFsdGhTdGF0dXM+fVxuICAgICAqL1xuICAgIGFzeW5jIGdldFF1ZXVlKCk6IFByb21pc2U8TW9kZWxzLkhlYWx0aFN0YXR1cz4ge1xuICAgICAgICBjb25zdCBhcGlQYXRoID0gJy9oZWFsdGgvcXVldWUnO1xuICAgICAgICBjb25zdCBwYXlsb2FkOiBQYXlsb2FkID0ge307XG4gICAgICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodGhpcy5jbGllbnQuY29uZmlnLmVuZHBvaW50ICsgYXBpUGF0aCk7XG5cbiAgICAgICAgY29uc3QgYXBpSGVhZGVyczogeyBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jbGllbnQuY2FsbChcbiAgICAgICAgICAgICdnZXQnLFxuICAgICAgICAgICAgdXJpLFxuICAgICAgICAgICAgYXBpSGVhZGVycyxcbiAgICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgICk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBidWlsZHMgcXVldWVcbiAgICAgKlxuICAgICAqIEdldCB0aGUgbnVtYmVyIG9mIGJ1aWxkcyB0aGF0IGFyZSB3YWl0aW5nIHRvIGJlIHByb2Nlc3NlZCBpbiB0aGUgQXBwY29uZGEgaW50ZXJuYWwgcXVldWUgc2VydmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRocmVzaG9sZFxuICAgICAqIEB0aHJvd3Mge0FwcGNvbmRhRXhjZXB0aW9ufVxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPE1vZGVscy5IZWFsdGhRdWV1ZT59XG4gICAgICovXG4gICAgYXN5bmMgZ2V0UXVldWVCdWlsZHModGhyZXNob2xkPzogbnVtYmVyKTogUHJvbWlzZTxNb2RlbHMuSGVhbHRoUXVldWU+IHtcbiAgICAgICAgY29uc3QgYXBpUGF0aCA9ICcvaGVhbHRoL3F1ZXVlL2J1aWxkcyc7XG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IFBheWxvYWQgPSB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiB0aHJlc2hvbGQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBwYXlsb2FkWyd0aHJlc2hvbGQnXSA9IHRocmVzaG9sZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuY2xpZW50LmNvbmZpZy5lbmRwb2ludCArIGFwaVBhdGgpO1xuXG4gICAgICAgIGNvbnN0IGFwaUhlYWRlcnM6IHsgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2xpZW50LmNhbGwoXG4gICAgICAgICAgICAnZ2V0JyxcbiAgICAgICAgICAgIHVyaSxcbiAgICAgICAgICAgIGFwaUhlYWRlcnMsXG4gICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgY2VydGlmaWNhdGVzIHF1ZXVlXG4gICAgICpcbiAgICAgKiBHZXQgdGhlIG51bWJlciBvZiBjZXJ0aWZpY2F0ZXMgdGhhdCBhcmUgd2FpdGluZyB0byBiZSBpc3N1ZWQgYWdhaW5zdCBbTGV0c2VuY3J5cHRdKGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnLykgaW4gdGhlIEFwcGNvbmRhIGludGVybmFsIHF1ZXVlIHNlcnZlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aHJlc2hvbGRcbiAgICAgKiBAdGhyb3dzIHtBcHBjb25kYUV4Y2VwdGlvbn1cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxNb2RlbHMuSGVhbHRoUXVldWU+fVxuICAgICAqL1xuICAgIGFzeW5jIGdldFF1ZXVlQ2VydGlmaWNhdGVzKHRocmVzaG9sZD86IG51bWJlcik6IFByb21pc2U8TW9kZWxzLkhlYWx0aFF1ZXVlPiB7XG4gICAgICAgIGNvbnN0IGFwaVBhdGggPSAnL2hlYWx0aC9xdWV1ZS9jZXJ0aWZpY2F0ZXMnO1xuICAgICAgICBjb25zdCBwYXlsb2FkOiBQYXlsb2FkID0ge307XG4gICAgICAgIGlmICh0eXBlb2YgdGhyZXNob2xkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcGF5bG9hZFsndGhyZXNob2xkJ10gPSB0aHJlc2hvbGQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLmNsaWVudC5jb25maWcuZW5kcG9pbnQgKyBhcGlQYXRoKTtcblxuICAgICAgICBjb25zdCBhcGlIZWFkZXJzOiB7IFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNsaWVudC5jYWxsKFxuICAgICAgICAgICAgJ2dldCcsXG4gICAgICAgICAgICB1cmksXG4gICAgICAgICAgICBhcGlIZWFkZXJzLFxuICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGRhdGFiYXNlcyBxdWV1ZVxuICAgICAqXG4gICAgICogR2V0IHRoZSBudW1iZXIgb2YgZGF0YWJhc2UgY2hhbmdlcyB0aGF0IGFyZSB3YWl0aW5nIHRvIGJlIHByb2Nlc3NlZCBpbiB0aGUgQXBwY29uZGEgaW50ZXJuYWwgcXVldWUgc2VydmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdGhyZXNob2xkXG4gICAgICogQHRocm93cyB7QXBwY29uZGFFeGNlcHRpb259XG4gICAgICogQHJldHVybnMge1Byb21pc2U8TW9kZWxzLkhlYWx0aFF1ZXVlPn1cbiAgICAgKi9cbiAgICBhc3luYyBnZXRRdWV1ZURhdGFiYXNlcyhuYW1lPzogc3RyaW5nLCB0aHJlc2hvbGQ/OiBudW1iZXIpOiBQcm9taXNlPE1vZGVscy5IZWFsdGhRdWV1ZT4ge1xuICAgICAgICBjb25zdCBhcGlQYXRoID0gJy9oZWFsdGgvcXVldWUvZGF0YWJhc2VzJztcbiAgICAgICAgY29uc3QgcGF5bG9hZDogUGF5bG9hZCA9IHt9O1xuICAgICAgICBpZiAodHlwZW9mIG5hbWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBwYXlsb2FkWyduYW1lJ10gPSBuYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGhyZXNob2xkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcGF5bG9hZFsndGhyZXNob2xkJ10gPSB0aHJlc2hvbGQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLmNsaWVudC5jb25maWcuZW5kcG9pbnQgKyBhcGlQYXRoKTtcblxuICAgICAgICBjb25zdCBhcGlIZWFkZXJzOiB7IFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNsaWVudC5jYWxsKFxuICAgICAgICAgICAgJ2dldCcsXG4gICAgICAgICAgICB1cmksXG4gICAgICAgICAgICBhcGlIZWFkZXJzLFxuICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGRlbGV0ZXMgcXVldWVcbiAgICAgKlxuICAgICAqIEdldCB0aGUgbnVtYmVyIG9mIGJhY2tncm91bmQgZGVzdHJ1Y3RpdmUgY2hhbmdlcyB0aGF0IGFyZSB3YWl0aW5nIHRvIGJlIHByb2Nlc3NlZCBpbiB0aGUgQXBwY29uZGEgaW50ZXJuYWwgcXVldWUgc2VydmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRocmVzaG9sZFxuICAgICAqIEB0aHJvd3Mge0FwcGNvbmRhRXhjZXB0aW9ufVxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPE1vZGVscy5IZWFsdGhRdWV1ZT59XG4gICAgICovXG4gICAgYXN5bmMgZ2V0UXVldWVEZWxldGVzKHRocmVzaG9sZD86IG51bWJlcik6IFByb21pc2U8TW9kZWxzLkhlYWx0aFF1ZXVlPiB7XG4gICAgICAgIGNvbnN0IGFwaVBhdGggPSAnL2hlYWx0aC9xdWV1ZS9kZWxldGVzJztcbiAgICAgICAgY29uc3QgcGF5bG9hZDogUGF5bG9hZCA9IHt9O1xuICAgICAgICBpZiAodHlwZW9mIHRocmVzaG9sZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHBheWxvYWRbJ3RocmVzaG9sZCddID0gdGhyZXNob2xkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodGhpcy5jbGllbnQuY29uZmlnLmVuZHBvaW50ICsgYXBpUGF0aCk7XG5cbiAgICAgICAgY29uc3QgYXBpSGVhZGVyczogeyBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jbGllbnQuY2FsbChcbiAgICAgICAgICAgICdnZXQnLFxuICAgICAgICAgICAgdXJpLFxuICAgICAgICAgICAgYXBpSGVhZGVycyxcbiAgICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgICk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBudW1iZXIgb2YgZmFpbGVkIHF1ZXVlIGpvYnNcbiAgICAgKlxuICAgICAqIFJldHVybnMgdGhlIGFtb3VudCBvZiBmYWlsZWQgam9icyBpbiBhIGdpdmVuIHF1ZXVlLlxuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge05hbWV9IG5hbWVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdGhyZXNob2xkXG4gICAgICogQHRocm93cyB7QXBwY29uZGFFeGNlcHRpb259XG4gICAgICogQHJldHVybnMge1Byb21pc2U8TW9kZWxzLkhlYWx0aFF1ZXVlPn1cbiAgICAgKi9cbiAgICBhc3luYyBnZXRGYWlsZWRKb2JzKG5hbWU6IE5hbWUsIHRocmVzaG9sZD86IG51bWJlcik6IFByb21pc2U8TW9kZWxzLkhlYWx0aFF1ZXVlPiB7XG4gICAgICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBcHBjb25kYUV4Y2VwdGlvbignTWlzc2luZyByZXF1aXJlZCBwYXJhbWV0ZXI6IFwibmFtZVwiJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXBpUGF0aCA9ICcvaGVhbHRoL3F1ZXVlL2ZhaWxlZC97bmFtZX0nLnJlcGxhY2UoJ3tuYW1lfScsIG5hbWUpO1xuICAgICAgICBjb25zdCBwYXlsb2FkOiBQYXlsb2FkID0ge307XG4gICAgICAgIGlmICh0eXBlb2YgdGhyZXNob2xkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcGF5bG9hZFsndGhyZXNob2xkJ10gPSB0aHJlc2hvbGQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLmNsaWVudC5jb25maWcuZW5kcG9pbnQgKyBhcGlQYXRoKTtcblxuICAgICAgICBjb25zdCBhcGlIZWFkZXJzOiB7IFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNsaWVudC5jYWxsKFxuICAgICAgICAgICAgJ2dldCcsXG4gICAgICAgICAgICB1cmksXG4gICAgICAgICAgICBhcGlIZWFkZXJzLFxuICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGZ1bmN0aW9ucyBxdWV1ZVxuICAgICAqXG4gICAgICogR2V0IHRoZSBudW1iZXIgb2YgZnVuY3Rpb24gZXhlY3V0aW9ucyB0aGF0IGFyZSB3YWl0aW5nIHRvIGJlIHByb2Nlc3NlZCBpbiB0aGUgQXBwY29uZGEgaW50ZXJuYWwgcXVldWUgc2VydmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRocmVzaG9sZFxuICAgICAqIEB0aHJvd3Mge0FwcGNvbmRhRXhjZXB0aW9ufVxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPE1vZGVscy5IZWFsdGhRdWV1ZT59XG4gICAgICovXG4gICAgYXN5bmMgZ2V0UXVldWVGdW5jdGlvbnModGhyZXNob2xkPzogbnVtYmVyKTogUHJvbWlzZTxNb2RlbHMuSGVhbHRoUXVldWU+IHtcbiAgICAgICAgY29uc3QgYXBpUGF0aCA9ICcvaGVhbHRoL3F1ZXVlL2Z1bmN0aW9ucyc7XG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IFBheWxvYWQgPSB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiB0aHJlc2hvbGQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBwYXlsb2FkWyd0aHJlc2hvbGQnXSA9IHRocmVzaG9sZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuY2xpZW50LmNvbmZpZy5lbmRwb2ludCArIGFwaVBhdGgpO1xuXG4gICAgICAgIGNvbnN0IGFwaUhlYWRlcnM6IHsgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2xpZW50LmNhbGwoXG4gICAgICAgICAgICAnZ2V0JyxcbiAgICAgICAgICAgIHVyaSxcbiAgICAgICAgICAgIGFwaUhlYWRlcnMsXG4gICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgbG9ncyBxdWV1ZVxuICAgICAqXG4gICAgICogR2V0IHRoZSBudW1iZXIgb2YgbG9ncyB0aGF0IGFyZSB3YWl0aW5nIHRvIGJlIHByb2Nlc3NlZCBpbiB0aGUgQXBwY29uZGEgaW50ZXJuYWwgcXVldWUgc2VydmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRocmVzaG9sZFxuICAgICAqIEB0aHJvd3Mge0FwcGNvbmRhRXhjZXB0aW9ufVxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPE1vZGVscy5IZWFsdGhRdWV1ZT59XG4gICAgICovXG4gICAgYXN5bmMgZ2V0UXVldWVMb2dzKHRocmVzaG9sZD86IG51bWJlcik6IFByb21pc2U8TW9kZWxzLkhlYWx0aFF1ZXVlPiB7XG4gICAgICAgIGNvbnN0IGFwaVBhdGggPSAnL2hlYWx0aC9xdWV1ZS9sb2dzJztcbiAgICAgICAgY29uc3QgcGF5bG9hZDogUGF5bG9hZCA9IHt9O1xuICAgICAgICBpZiAodHlwZW9mIHRocmVzaG9sZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHBheWxvYWRbJ3RocmVzaG9sZCddID0gdGhyZXNob2xkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodGhpcy5jbGllbnQuY29uZmlnLmVuZHBvaW50ICsgYXBpUGF0aCk7XG5cbiAgICAgICAgY29uc3QgYXBpSGVhZGVyczogeyBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jbGllbnQuY2FsbChcbiAgICAgICAgICAgICdnZXQnLFxuICAgICAgICAgICAgdXJpLFxuICAgICAgICAgICAgYXBpSGVhZGVycyxcbiAgICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgICk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBtYWlscyBxdWV1ZVxuICAgICAqXG4gICAgICogR2V0IHRoZSBudW1iZXIgb2YgbWFpbHMgdGhhdCBhcmUgd2FpdGluZyB0byBiZSBwcm9jZXNzZWQgaW4gdGhlIEFwcGNvbmRhIGludGVybmFsIHF1ZXVlIHNlcnZlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aHJlc2hvbGRcbiAgICAgKiBAdGhyb3dzIHtBcHBjb25kYUV4Y2VwdGlvbn1cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxNb2RlbHMuSGVhbHRoUXVldWU+fVxuICAgICAqL1xuICAgIGFzeW5jIGdldFF1ZXVlTWFpbHModGhyZXNob2xkPzogbnVtYmVyKTogUHJvbWlzZTxNb2RlbHMuSGVhbHRoUXVldWU+IHtcbiAgICAgICAgY29uc3QgYXBpUGF0aCA9ICcvaGVhbHRoL3F1ZXVlL21haWxzJztcbiAgICAgICAgY29uc3QgcGF5bG9hZDogUGF5bG9hZCA9IHt9O1xuICAgICAgICBpZiAodHlwZW9mIHRocmVzaG9sZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHBheWxvYWRbJ3RocmVzaG9sZCddID0gdGhyZXNob2xkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodGhpcy5jbGllbnQuY29uZmlnLmVuZHBvaW50ICsgYXBpUGF0aCk7XG5cbiAgICAgICAgY29uc3QgYXBpSGVhZGVyczogeyBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jbGllbnQuY2FsbChcbiAgICAgICAgICAgICdnZXQnLFxuICAgICAgICAgICAgdXJpLFxuICAgICAgICAgICAgYXBpSGVhZGVycyxcbiAgICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgICk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBtZXNzYWdpbmcgcXVldWVcbiAgICAgKlxuICAgICAqIEdldCB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHRoYXQgYXJlIHdhaXRpbmcgdG8gYmUgcHJvY2Vzc2VkIGluIHRoZSBBcHBjb25kYSBpbnRlcm5hbCBxdWV1ZSBzZXJ2ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdGhyZXNob2xkXG4gICAgICogQHRocm93cyB7QXBwY29uZGFFeGNlcHRpb259XG4gICAgICogQHJldHVybnMge1Byb21pc2U8TW9kZWxzLkhlYWx0aFF1ZXVlPn1cbiAgICAgKi9cbiAgICBhc3luYyBnZXRRdWV1ZU1lc3NhZ2luZyh0aHJlc2hvbGQ/OiBudW1iZXIpOiBQcm9taXNlPE1vZGVscy5IZWFsdGhRdWV1ZT4ge1xuICAgICAgICBjb25zdCBhcGlQYXRoID0gJy9oZWFsdGgvcXVldWUvbWVzc2FnaW5nJztcbiAgICAgICAgY29uc3QgcGF5bG9hZDogUGF5bG9hZCA9IHt9O1xuICAgICAgICBpZiAodHlwZW9mIHRocmVzaG9sZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHBheWxvYWRbJ3RocmVzaG9sZCddID0gdGhyZXNob2xkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodGhpcy5jbGllbnQuY29uZmlnLmVuZHBvaW50ICsgYXBpUGF0aCk7XG5cbiAgICAgICAgY29uc3QgYXBpSGVhZGVyczogeyBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jbGllbnQuY2FsbChcbiAgICAgICAgICAgICdnZXQnLFxuICAgICAgICAgICAgdXJpLFxuICAgICAgICAgICAgYXBpSGVhZGVycyxcbiAgICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgICk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBtaWdyYXRpb25zIHF1ZXVlXG4gICAgICpcbiAgICAgKiBHZXQgdGhlIG51bWJlciBvZiBtaWdyYXRpb25zIHRoYXQgYXJlIHdhaXRpbmcgdG8gYmUgcHJvY2Vzc2VkIGluIHRoZSBBcHBjb25kYSBpbnRlcm5hbCBxdWV1ZSBzZXJ2ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdGhyZXNob2xkXG4gICAgICogQHRocm93cyB7QXBwY29uZGFFeGNlcHRpb259XG4gICAgICogQHJldHVybnMge1Byb21pc2U8TW9kZWxzLkhlYWx0aFF1ZXVlPn1cbiAgICAgKi9cbiAgICBhc3luYyBnZXRRdWV1ZU1pZ3JhdGlvbnModGhyZXNob2xkPzogbnVtYmVyKTogUHJvbWlzZTxNb2RlbHMuSGVhbHRoUXVldWU+IHtcbiAgICAgICAgY29uc3QgYXBpUGF0aCA9ICcvaGVhbHRoL3F1ZXVlL21pZ3JhdGlvbnMnO1xuICAgICAgICBjb25zdCBwYXlsb2FkOiBQYXlsb2FkID0ge307XG4gICAgICAgIGlmICh0eXBlb2YgdGhyZXNob2xkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcGF5bG9hZFsndGhyZXNob2xkJ10gPSB0aHJlc2hvbGQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLmNsaWVudC5jb25maWcuZW5kcG9pbnQgKyBhcGlQYXRoKTtcblxuICAgICAgICBjb25zdCBhcGlIZWFkZXJzOiB7IFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNsaWVudC5jYWxsKFxuICAgICAgICAgICAgJ2dldCcsXG4gICAgICAgICAgICB1cmksXG4gICAgICAgICAgICBhcGlIZWFkZXJzLFxuICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHVzYWdlIHF1ZXVlXG4gICAgICpcbiAgICAgKiBHZXQgdGhlIG51bWJlciBvZiBtZXRyaWNzIHRoYXQgYXJlIHdhaXRpbmcgdG8gYmUgcHJvY2Vzc2VkIGluIHRoZSBBcHBjb25kYSBpbnRlcm5hbCBxdWV1ZSBzZXJ2ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdGhyZXNob2xkXG4gICAgICogQHRocm93cyB7QXBwY29uZGFFeGNlcHRpb259XG4gICAgICogQHJldHVybnMge1Byb21pc2U8TW9kZWxzLkhlYWx0aFF1ZXVlPn1cbiAgICAgKi9cbiAgICBhc3luYyBnZXRRdWV1ZVVzYWdlKHRocmVzaG9sZD86IG51bWJlcik6IFByb21pc2U8TW9kZWxzLkhlYWx0aFF1ZXVlPiB7XG4gICAgICAgIGNvbnN0IGFwaVBhdGggPSAnL2hlYWx0aC9xdWV1ZS91c2FnZSc7XG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IFBheWxvYWQgPSB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiB0aHJlc2hvbGQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBwYXlsb2FkWyd0aHJlc2hvbGQnXSA9IHRocmVzaG9sZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuY2xpZW50LmNvbmZpZy5lbmRwb2ludCArIGFwaVBhdGgpO1xuXG4gICAgICAgIGNvbnN0IGFwaUhlYWRlcnM6IHsgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2xpZW50LmNhbGwoXG4gICAgICAgICAgICAnZ2V0JyxcbiAgICAgICAgICAgIHVyaSxcbiAgICAgICAgICAgIGFwaUhlYWRlcnMsXG4gICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdXNhZ2UgZHVtcCBxdWV1ZVxuICAgICAqXG4gICAgICogR2V0IHRoZSBudW1iZXIgb2YgcHJvamVjdHMgY29udGFpbmluZyBtZXRyaWNzIHRoYXQgYXJlIHdhaXRpbmcgdG8gYmUgcHJvY2Vzc2VkIGluIHRoZSBBcHBjb25kYSBpbnRlcm5hbCBxdWV1ZSBzZXJ2ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdGhyZXNob2xkXG4gICAgICogQHRocm93cyB7QXBwY29uZGFFeGNlcHRpb259XG4gICAgICogQHJldHVybnMge1Byb21pc2U8TW9kZWxzLkhlYWx0aFF1ZXVlPn1cbiAgICAgKi9cbiAgICBhc3luYyBnZXRRdWV1ZVVzYWdlRHVtcCh0aHJlc2hvbGQ/OiBudW1iZXIpOiBQcm9taXNlPE1vZGVscy5IZWFsdGhRdWV1ZT4ge1xuICAgICAgICBjb25zdCBhcGlQYXRoID0gJy9oZWFsdGgvcXVldWUvdXNhZ2UtZHVtcCc7XG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IFBheWxvYWQgPSB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiB0aHJlc2hvbGQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBwYXlsb2FkWyd0aHJlc2hvbGQnXSA9IHRocmVzaG9sZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuY2xpZW50LmNvbmZpZy5lbmRwb2ludCArIGFwaVBhdGgpO1xuXG4gICAgICAgIGNvbnN0IGFwaUhlYWRlcnM6IHsgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2xpZW50LmNhbGwoXG4gICAgICAgICAgICAnZ2V0JyxcbiAgICAgICAgICAgIHVyaSxcbiAgICAgICAgICAgIGFwaUhlYWRlcnMsXG4gICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgd2ViaG9va3MgcXVldWVcbiAgICAgKlxuICAgICAqIEdldCB0aGUgbnVtYmVyIG9mIHdlYmhvb2tzIHRoYXQgYXJlIHdhaXRpbmcgdG8gYmUgcHJvY2Vzc2VkIGluIHRoZSBBcHBjb25kYSBpbnRlcm5hbCBxdWV1ZSBzZXJ2ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdGhyZXNob2xkXG4gICAgICogQHRocm93cyB7QXBwY29uZGFFeGNlcHRpb259XG4gICAgICogQHJldHVybnMge1Byb21pc2U8TW9kZWxzLkhlYWx0aFF1ZXVlPn1cbiAgICAgKi9cbiAgICBhc3luYyBnZXRRdWV1ZVdlYmhvb2tzKHRocmVzaG9sZD86IG51bWJlcik6IFByb21pc2U8TW9kZWxzLkhlYWx0aFF1ZXVlPiB7XG4gICAgICAgIGNvbnN0IGFwaVBhdGggPSAnL2hlYWx0aC9xdWV1ZS93ZWJob29rcyc7XG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IFBheWxvYWQgPSB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiB0aHJlc2hvbGQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBwYXlsb2FkWyd0aHJlc2hvbGQnXSA9IHRocmVzaG9sZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuY2xpZW50LmNvbmZpZy5lbmRwb2ludCArIGFwaVBhdGgpO1xuXG4gICAgICAgIGNvbnN0IGFwaUhlYWRlcnM6IHsgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2xpZW50LmNhbGwoXG4gICAgICAgICAgICAnZ2V0JyxcbiAgICAgICAgICAgIHVyaSxcbiAgICAgICAgICAgIGFwaUhlYWRlcnMsXG4gICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgc3RvcmFnZVxuICAgICAqXG4gICAgICogQ2hlY2sgdGhlIEFwcGNvbmRhIHN0b3JhZ2UgZGV2aWNlIGlzIHVwIGFuZCBjb25uZWN0aW9uIGlzIHN1Y2Nlc3NmdWwuXG4gICAgICpcbiAgICAgKiBAdGhyb3dzIHtBcHBjb25kYUV4Y2VwdGlvbn1cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxNb2RlbHMuSGVhbHRoU3RhdHVzPn1cbiAgICAgKi9cbiAgICBhc3luYyBnZXRTdG9yYWdlKCk6IFByb21pc2U8TW9kZWxzLkhlYWx0aFN0YXR1cz4ge1xuICAgICAgICBjb25zdCBhcGlQYXRoID0gJy9oZWFsdGgvc3RvcmFnZSc7XG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IFBheWxvYWQgPSB7fTtcbiAgICAgICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLmNsaWVudC5jb25maWcuZW5kcG9pbnQgKyBhcGlQYXRoKTtcblxuICAgICAgICBjb25zdCBhcGlIZWFkZXJzOiB7IFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNsaWVudC5jYWxsKFxuICAgICAgICAgICAgJ2dldCcsXG4gICAgICAgICAgICB1cmksXG4gICAgICAgICAgICBhcGlIZWFkZXJzLFxuICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGxvY2FsIHN0b3JhZ2VcbiAgICAgKlxuICAgICAqIENoZWNrIHRoZSBBcHBjb25kYSBsb2NhbCBzdG9yYWdlIGRldmljZSBpcyB1cCBhbmQgY29ubmVjdGlvbiBpcyBzdWNjZXNzZnVsLlxuICAgICAqXG4gICAgICogQHRocm93cyB7QXBwY29uZGFFeGNlcHRpb259XG4gICAgICogQHJldHVybnMge1Byb21pc2U8TW9kZWxzLkhlYWx0aFN0YXR1cz59XG4gICAgICovXG4gICAgYXN5bmMgZ2V0U3RvcmFnZUxvY2FsKCk6IFByb21pc2U8TW9kZWxzLkhlYWx0aFN0YXR1cz4ge1xuICAgICAgICBjb25zdCBhcGlQYXRoID0gJy9oZWFsdGgvc3RvcmFnZS9sb2NhbCc7XG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IFBheWxvYWQgPSB7fTtcbiAgICAgICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLmNsaWVudC5jb25maWcuZW5kcG9pbnQgKyBhcGlQYXRoKTtcblxuICAgICAgICBjb25zdCBhcGlIZWFkZXJzOiB7IFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNsaWVudC5jYWxsKFxuICAgICAgICAgICAgJ2dldCcsXG4gICAgICAgICAgICB1cmksXG4gICAgICAgICAgICBhcGlIZWFkZXJzLFxuICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRpbWVcbiAgICAgKlxuICAgICAqIENoZWNrIHRoZSBBcHBjb25kYSBzZXJ2ZXIgdGltZSBpcyBzeW5jZWQgd2l0aCBHb29nbGUgcmVtb3RlIE5UUCBzZXJ2ZXIuIFdlIHVzZSB0aGlzIHRlY2hub2xvZ3kgdG8gc21vb3RobHkgaGFuZGxlIGxlYXAgc2Vjb25kcyB3aXRoIG5vIGRpc3J1cHRpdmUgZXZlbnRzLiBUaGUgW05ldHdvcmsgVGltZSBQcm90b2NvbF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTmV0d29ya19UaW1lX1Byb3RvY29sKSAoTlRQKSBpcyB1c2VkIGJ5IGh1bmRyZWRzIG9mIG1pbGxpb25zIG9mIGNvbXB1dGVycyBhbmQgZGV2aWNlcyB0byBzeW5jaHJvbml6ZSB0aGVpciBjbG9ja3Mgb3ZlciB0aGUgSW50ZXJuZXQuIElmIHlvdXIgY29tcHV0ZXIgc2V0cyBpdHMgb3duIGNsb2NrLCBpdCBsaWtlbHkgdXNlcyBOVFAuXG4gICAgICpcbiAgICAgKiBAdGhyb3dzIHtBcHBjb25kYUV4Y2VwdGlvbn1cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxNb2RlbHMuSGVhbHRoVGltZT59XG4gICAgICovXG4gICAgYXN5bmMgZ2V0VGltZSgpOiBQcm9taXNlPE1vZGVscy5IZWFsdGhUaW1lPiB7XG4gICAgICAgIGNvbnN0IGFwaVBhdGggPSAnL2hlYWx0aC90aW1lJztcbiAgICAgICAgY29uc3QgcGF5bG9hZDogUGF5bG9hZCA9IHt9O1xuICAgICAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuY2xpZW50LmNvbmZpZy5lbmRwb2ludCArIGFwaVBhdGgpO1xuXG4gICAgICAgIGNvbnN0IGFwaUhlYWRlcnM6IHsgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2xpZW50LmNhbGwoXG4gICAgICAgICAgICAnZ2V0JyxcbiAgICAgICAgICAgIHVyaSxcbiAgICAgICAgICAgIGFwaUhlYWRlcnMsXG4gICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==
|
@@ -1,80 +0,0 @@
|
|
1
|
-
import { Client } from '../client';
|
2
|
-
import type { Models } from '../models';
|
3
|
-
export declare class Locale {
|
4
|
-
client: Client;
|
5
|
-
constructor(client: Client);
|
6
|
-
/**
|
7
|
-
* Get user locale
|
8
|
-
*
|
9
|
-
* Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.
|
10
|
-
|
11
|
-
([IP Geolocation by DB-IP](https://db-ip.com))
|
12
|
-
*
|
13
|
-
* @throws {AppcondaException}
|
14
|
-
* @returns {Promise<Models.Locale>}
|
15
|
-
*/
|
16
|
-
get(): Promise<Models.Locale>;
|
17
|
-
/**
|
18
|
-
* List Locale Codes
|
19
|
-
*
|
20
|
-
* List of all locale codes in [ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes).
|
21
|
-
*
|
22
|
-
* @throws {AppcondaException}
|
23
|
-
* @returns {Promise<Models.LocaleCodeList>}
|
24
|
-
*/
|
25
|
-
listCodes(): Promise<Models.LocaleCodeList>;
|
26
|
-
/**
|
27
|
-
* List continents
|
28
|
-
*
|
29
|
-
* List of all continents. You can use the locale header to get the data in a supported language.
|
30
|
-
*
|
31
|
-
* @throws {AppcondaException}
|
32
|
-
* @returns {Promise<Models.ContinentList>}
|
33
|
-
*/
|
34
|
-
listContinents(): Promise<Models.ContinentList>;
|
35
|
-
/**
|
36
|
-
* List countries
|
37
|
-
*
|
38
|
-
* List of all countries. You can use the locale header to get the data in a supported language.
|
39
|
-
*
|
40
|
-
* @throws {AppcondaException}
|
41
|
-
* @returns {Promise<Models.CountryList>}
|
42
|
-
*/
|
43
|
-
listCountries(): Promise<Models.CountryList>;
|
44
|
-
/**
|
45
|
-
* List EU countries
|
46
|
-
*
|
47
|
-
* List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.
|
48
|
-
*
|
49
|
-
* @throws {AppcondaException}
|
50
|
-
* @returns {Promise<Models.CountryList>}
|
51
|
-
*/
|
52
|
-
listCountriesEU(): Promise<Models.CountryList>;
|
53
|
-
/**
|
54
|
-
* List countries phone codes
|
55
|
-
*
|
56
|
-
* List of all countries phone codes. You can use the locale header to get the data in a supported language.
|
57
|
-
*
|
58
|
-
* @throws {AppcondaException}
|
59
|
-
* @returns {Promise<Models.PhoneList>}
|
60
|
-
*/
|
61
|
-
listCountriesPhones(): Promise<Models.PhoneList>;
|
62
|
-
/**
|
63
|
-
* List currencies
|
64
|
-
*
|
65
|
-
* List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.
|
66
|
-
*
|
67
|
-
* @throws {AppcondaException}
|
68
|
-
* @returns {Promise<Models.CurrencyList>}
|
69
|
-
*/
|
70
|
-
listCurrencies(): Promise<Models.CurrencyList>;
|
71
|
-
/**
|
72
|
-
* List languages
|
73
|
-
*
|
74
|
-
* List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.
|
75
|
-
*
|
76
|
-
* @throws {AppcondaException}
|
77
|
-
* @returns {Promise<Models.LanguageList>}
|
78
|
-
*/
|
79
|
-
listLanguages(): Promise<Models.LanguageList>;
|
80
|
-
}
|