@fjall/util 0.1.10 → 0.1.18

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.
@@ -1,3 +1,4 @@
1
+ import { Account } from "@aws-sdk/client-organizations";
1
2
  type Provider = "aws";
2
3
  type ServiceConfig = {
3
4
  id: string;
@@ -8,6 +9,7 @@ type ServiceConfig = {
8
9
  type ProviderAccount = {
9
10
  id: string;
10
11
  name: string;
12
+ environment: string;
11
13
  };
12
14
  type RootConfig = {
13
15
  version?: number;
@@ -19,17 +21,24 @@ type RootConfig = {
19
21
  providerAccounts?: ProviderAccount[];
20
22
  };
21
23
  /**
22
- * Config class for loading and saving .fjall-config.json file
24
+ * Config class for loading and saving fjall-config.json file
23
25
  */
24
26
  export declare class Config {
25
- config: RootConfig;
26
- constructor(config?: object);
27
+ rootConfig: RootConfig;
28
+ existingAccountsConfig: Account[];
29
+ constructor(rootConfig?: object, existingAccountsConfig?: Account[]);
27
30
  isDevelopment(): boolean;
28
31
  /**
29
32
  * Load config file into memory as a raw JSON string
30
33
  * @returns Config as JSON string or NULL if no config file accessible
31
34
  */
32
35
  private static loadConfigFile;
36
+ /**
37
+ * Tries to load the config file from the given path, if unncessuful it tries exactly two directories higher
38
+ * This is neccessary to ensure fjall apps can load the config file themselves
39
+ * @param configFile
40
+ */
41
+ private static tryLoadConfigFile;
33
42
  /**
34
43
  * Load configuration from file
35
44
  *
@@ -63,5 +72,8 @@ export declare class Config {
63
72
  setProvider(provider: Provider): void;
64
73
  addProviderAccount(account: ProviderAccount): void;
65
74
  getProviderAccount(accountName: string): ProviderAccount | null | undefined;
75
+ setExistingAccounts(region: string): Promise<void>;
76
+ getExistingAccounts(): Account[];
77
+ getAWSAccountId(): Promise<string | undefined>;
66
78
  }
67
79
  export {};
@@ -2,42 +2,61 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Config = void 0;
4
4
  const fs = require("fs");
5
+ const client_organizations_1 = require("@aws-sdk/client-organizations");
6
+ const client_sts_1 = require("@aws-sdk/client-sts");
5
7
  /**
6
8
  * The current base-version of any newly created config file
7
9
  */
8
10
  const BASE_CONFIG_VERSION = 0.1;
9
11
  /**
10
- * Config class for loading and saving .fjall-config.json file
12
+ * Config class for loading and saving fjall-config.json file
11
13
  */
12
14
  class Config {
13
- constructor(config) {
14
- this.config = config
15
- ? config
15
+ constructor(rootConfig, existingAccountsConfig) {
16
+ this.rootConfig = rootConfig
17
+ ? rootConfig
16
18
  : {
17
19
  version: BASE_CONFIG_VERSION,
18
20
  services: {},
19
21
  providerAccounts: [],
20
22
  };
23
+ this.existingAccountsConfig = existingAccountsConfig
24
+ ? existingAccountsConfig
25
+ : [];
21
26
  }
22
27
  isDevelopment() {
23
- return !!this.config?.development;
28
+ return !!this.rootConfig?.development;
24
29
  }
25
30
  /**
26
31
  * Load config file into memory as a raw JSON string
27
32
  * @returns Config as JSON string or NULL if no config file accessible
28
33
  */
29
- static loadConfigFile() {
34
+ static loadConfigFile(configFile) {
30
35
  try {
31
- fs.accessSync(".fjall/.fjall-config.json", fs.constants.R_OK | fs.constants.W_OK);
32
- return fs.readFileSync(".fjall/.fjall-config.json", {
36
+ fs.accessSync(configFile, fs.constants.R_OK | fs.constants.W_OK);
37
+ return fs.readFileSync(configFile, {
33
38
  encoding: "utf8",
34
39
  });
35
40
  }
36
41
  catch (err) {
37
- console.log("Expected config file does not exist or cannot be read.");
42
+ // console.log(
43
+ // `Expected file '${configFile}' does not exist or cannot be read.`
44
+ // );
38
45
  return null;
39
46
  }
40
47
  }
48
+ /**
49
+ * Tries to load the config file from the given path, if unncessuful it tries exactly two directories higher
50
+ * This is neccessary to ensure fjall apps can load the config file themselves
51
+ * @param configFile
52
+ */
53
+ static tryLoadConfigFile(configFile) {
54
+ let config = Config.loadConfigFile(configFile);
55
+ if (config)
56
+ return config;
57
+ // Try one directory higher
58
+ return Config.loadConfigFile(`../../${configFile}`);
59
+ }
41
60
  /**
42
61
  * Load configuration from file
43
62
  *
@@ -45,23 +64,32 @@ class Config {
45
64
  */
46
65
  static loadConfig() {
47
66
  try {
48
- const configJson = this.loadConfigFile();
49
- return configJson ? new Config(JSON.parse(configJson)) : new Config();
67
+ const rootConfigJson = Config.tryLoadConfigFile("fjall/fjall-config.json");
68
+ const existingAccountJson = Config.tryLoadConfigFile("fjall/accounts-config.json");
69
+ const rootConfig = rootConfigJson
70
+ ? JSON.parse(rootConfigJson)
71
+ : undefined;
72
+ const existingAccountsConfig = existingAccountJson
73
+ ? JSON.parse(existingAccountJson)
74
+ : undefined;
75
+ return new Config(rootConfig, existingAccountsConfig);
50
76
  }
51
77
  catch (err) {
52
- console.log("Unable to parse config file. Aborting.");
53
- process.exit();
78
+ console.error("Unable to parse config file. Aborting.", err);
79
+ process.exit(1);
54
80
  }
55
81
  }
56
82
  /**
57
83
  * Save configuration to file
58
84
  */
59
85
  saveConfig() {
60
- // Ensure .fjall directory exists
61
- fs.mkdirSync(".fjall", { recursive: true }); // recursive: true prevents error if directory already exists
62
- // JSON-ify config and write to file
63
- const jsonString = JSON.stringify(this.config, null, 2);
64
- fs.writeFileSync(".fjall/.fjall-config.json", jsonString);
86
+ // Ensure fjall directory exists
87
+ fs.mkdirSync("fjall", { recursive: true }); // recursive: true prevents error if directory already exists
88
+ // JSON-ify config and write root config to file
89
+ const rootJsonString = JSON.stringify(this.rootConfig, null, 2);
90
+ fs.writeFileSync("fjall/fjall-config.json", rootJsonString);
91
+ const existingAccountsJsonString = JSON.stringify(this.existingAccountsConfig, null, 2);
92
+ fs.writeFileSync("fjall/accounts-config.json", existingAccountsJsonString);
65
93
  }
66
94
  /**
67
95
  * Set the schema version used for this config file
@@ -69,7 +97,7 @@ class Config {
69
97
  * @param version Schema Version
70
98
  */
71
99
  setVersion(version) {
72
- this.config.version = version;
100
+ this.rootConfig.version = version;
73
101
  }
74
102
  /**
75
103
  * Add a new service to the config file
@@ -77,9 +105,9 @@ class Config {
77
105
  * @param config Service configuration properties
78
106
  */
79
107
  addService(serviceKey, config) {
80
- if (!this.config.services)
81
- this.config.services = {};
82
- this.config.services[serviceKey] = config;
108
+ if (!this.rootConfig.services)
109
+ this.rootConfig.services = {};
110
+ this.rootConfig.services[serviceKey] = config;
83
111
  }
84
112
  /**
85
113
  * Set config options on a previously defined service
@@ -88,33 +116,54 @@ class Config {
88
116
  * @param config Service configuration properties to set
89
117
  */
90
118
  setServiceOption(serviceKey, config) {
91
- if (!this.config.services)
92
- this.config.services = {};
93
- const service = this.config.services[serviceKey];
119
+ if (!this.rootConfig.services)
120
+ this.rootConfig.services = {};
121
+ const service = this.rootConfig.services[serviceKey];
94
122
  if (!service)
95
123
  return;
96
- this.config.services[serviceKey] = { ...service, ...config };
124
+ this.rootConfig.services[serviceKey] = { ...service, ...config };
97
125
  }
98
126
  getServiceConfig(serviceKey) {
99
- if (!this.config.services)
127
+ if (!this.rootConfig.services)
100
128
  return null;
101
- return this.config.services[serviceKey] || null;
129
+ return this.rootConfig.services[serviceKey] || null;
102
130
  }
103
131
  setProvider(provider) {
104
- this.config.provider = provider;
132
+ this.rootConfig.provider = provider;
105
133
  }
106
134
  addProviderAccount(account) {
107
- if (!this.config.providerAccounts)
108
- this.config.providerAccounts = [];
135
+ if (!this.rootConfig.providerAccounts)
136
+ this.rootConfig.providerAccounts = [];
109
137
  // ensure account name is always lowercase
110
138
  account.name = account.name.toLocaleLowerCase();
111
- this.config.providerAccounts.push(account);
139
+ this.rootConfig.providerAccounts.push(account);
112
140
  }
113
141
  getProviderAccount(accountName) {
114
- if (!this.config.providerAccounts)
142
+ // TODO: Fix null error
143
+ if (!this.rootConfig.providerAccounts)
115
144
  return null;
116
- return this.config.providerAccounts.find((account) => account.name.toLocaleLowerCase() === accountName.toLocaleLowerCase());
145
+ return this.rootConfig.providerAccounts.find((account) => account.name.toLocaleLowerCase() === accountName.toLocaleLowerCase());
146
+ }
147
+ async setExistingAccounts(region) {
148
+ // Make API Call
149
+ const client = new client_organizations_1.OrganizationsClient({
150
+ region: region,
151
+ });
152
+ const request = new client_organizations_1.ListAccountsCommand({
153
+ MaxResults: Number("20"),
154
+ });
155
+ const response = await client.send(request);
156
+ this.existingAccountsConfig = response.Accounts || [];
157
+ }
158
+ getExistingAccounts() {
159
+ return this.existingAccountsConfig;
160
+ }
161
+ async getAWSAccountId() {
162
+ const stsClient = new client_sts_1.STSClient({});
163
+ const request = new client_sts_1.GetCallerIdentityCommand({});
164
+ const response = await stsClient.send(request);
165
+ return response?.Account || undefined;
117
166
  }
118
167
  }
119
168
  exports.Config = Config;
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5QkFBeUI7QUF3QnpCOztHQUVHO0FBQ0gsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUM7QUFFaEM7O0dBRUc7QUFDSCxNQUFhLE1BQU07SUFHakIsWUFBWSxNQUFlO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTTtZQUNsQixDQUFDLENBQUMsTUFBTTtZQUNSLENBQUMsQ0FBQztnQkFDRSxPQUFPLEVBQUUsbUJBQW1CO2dCQUM1QixRQUFRLEVBQUUsRUFBRTtnQkFDWixnQkFBZ0IsRUFBRSxFQUFFO2FBQ3JCLENBQUM7SUFDUixDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7O09BR0c7SUFDSyxNQUFNLENBQUMsY0FBYztRQUMzQixJQUFJO1lBQ0YsRUFBRSxDQUFDLFVBQVUsQ0FDWCwyQkFBMkIsRUFDM0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ3RDLENBQUM7WUFFRixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsMkJBQTJCLEVBQUU7Z0JBQ2xELFFBQVEsRUFBRSxNQUFNO2FBQ2pCLENBQUMsQ0FBQztTQUNKO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDWixPQUFPLENBQUMsR0FBRyxDQUFDLHdEQUF3RCxDQUFDLENBQUM7WUFDdEUsT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFVBQVU7UUFDZixJQUFJO1lBQ0YsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3pDLE9BQU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxFQUFFLENBQUM7U0FDdkU7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0NBQXdDLENBQUMsQ0FBQztZQUN0RCxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDaEI7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVO1FBQ1IsaUNBQWlDO1FBQ2pDLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyw2REFBNkQ7UUFFMUcsb0NBQW9DO1FBQ3BDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEQsRUFBRSxDQUFDLGFBQWEsQ0FBQywyQkFBMkIsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFVBQVUsQ0FBQyxPQUFlO1FBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFVBQVUsQ0FBQyxVQUFrQixFQUFFLE1BQXFCO1FBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVE7WUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDckQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzVDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGdCQUFnQixDQUFDLFVBQWtCLEVBQUUsTUFBcUI7UUFDeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUTtZQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUVyRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFFckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO0lBQy9ELENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFrQjtRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdkMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDbEQsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUFrQjtRQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDbEMsQ0FBQztJQUVELGtCQUFrQixDQUFDLE9BQXdCO1FBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQjtZQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBRXJFLDBDQUEwQztRQUMxQyxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUVoRCxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsV0FBbUI7UUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDL0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDdEMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsQ0FDdkUsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTNIRCx3QkEySEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcblxudHlwZSBQcm92aWRlciA9IFwiYXdzXCI7XG5cbnR5cGUgU2VydmljZUNvbmZpZyA9IHtcbiAgaWQ6IHN0cmluZztcbiAgdHlwZT86IHN0cmluZztcbiAgdmVyc2lvbj86IG51bWJlcjtcbiAgb3B0aW9ucz86IG9iamVjdDtcbn07XG5cbnR5cGUgUHJvdmlkZXJBY2NvdW50ID0ge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG59O1xuXG50eXBlIFJvb3RDb25maWcgPSB7XG4gIHZlcnNpb24/OiBudW1iZXI7XG4gIGRldmVsb3BtZW50PzogYm9vbGVhbjtcbiAgc2VydmljZXM/OiB7IFtrZXk6IHN0cmluZ106IFNlcnZpY2VDb25maWcgfTtcbiAgcHJvdmlkZXI/OiBQcm92aWRlcjtcbiAgcHJvdmlkZXJBY2NvdW50cz86IFByb3ZpZGVyQWNjb3VudFtdO1xufTtcblxuLyoqXG4gKiBUaGUgY3VycmVudCBiYXNlLXZlcnNpb24gb2YgYW55IG5ld2x5IGNyZWF0ZWQgY29uZmlnIGZpbGVcbiAqL1xuY29uc3QgQkFTRV9DT05GSUdfVkVSU0lPTiA9IDAuMTtcblxuLyoqXG4gKiBDb25maWcgY2xhc3MgZm9yIGxvYWRpbmcgYW5kIHNhdmluZyAuZmphbGwtY29uZmlnLmpzb24gZmlsZVxuICovXG5leHBvcnQgY2xhc3MgQ29uZmlnIHtcbiAgY29uZmlnOiBSb290Q29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZz86IG9iamVjdCkge1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnXG4gICAgICA/IGNvbmZpZ1xuICAgICAgOiB7XG4gICAgICAgICAgdmVyc2lvbjogQkFTRV9DT05GSUdfVkVSU0lPTixcbiAgICAgICAgICBzZXJ2aWNlczoge30sXG4gICAgICAgICAgcHJvdmlkZXJBY2NvdW50czogW10sXG4gICAgICAgIH07XG4gIH1cblxuICBpc0RldmVsb3BtZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuY29uZmlnPy5kZXZlbG9wbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGNvbmZpZyBmaWxlIGludG8gbWVtb3J5IGFzIGEgcmF3IEpTT04gc3RyaW5nXG4gICAqIEByZXR1cm5zIENvbmZpZyBhcyBKU09OIHN0cmluZyBvciBOVUxMIGlmIG5vIGNvbmZpZyBmaWxlIGFjY2Vzc2libGVcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGxvYWRDb25maWdGaWxlKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHRyeSB7XG4gICAgICBmcy5hY2Nlc3NTeW5jKFxuICAgICAgICBcIi5mamFsbC8uZmphbGwtY29uZmlnLmpzb25cIixcbiAgICAgICAgZnMuY29uc3RhbnRzLlJfT0sgfCBmcy5jb25zdGFudHMuV19PS1xuICAgICAgKTtcblxuICAgICAgcmV0dXJuIGZzLnJlYWRGaWxlU3luYyhcIi5mamFsbC8uZmphbGwtY29uZmlnLmpzb25cIiwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiRXhwZWN0ZWQgY29uZmlnIGZpbGUgZG9lcyBub3QgZXhpc3Qgb3IgY2Fubm90IGJlIHJlYWQuXCIpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgY29uZmlndXJhdGlvbiBmcm9tIGZpbGVcbiAgICpcbiAgICogQHJldHVybnMgTG9hZGVkIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHN0YXRpYyBsb2FkQ29uZmlnKCk6IENvbmZpZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbmZpZ0pzb24gPSB0aGlzLmxvYWRDb25maWdGaWxlKCk7XG4gICAgICByZXR1cm4gY29uZmlnSnNvbiA/IG5ldyBDb25maWcoSlNPTi5wYXJzZShjb25maWdKc29uKSkgOiBuZXcgQ29uZmlnKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIlVuYWJsZSB0byBwYXJzZSBjb25maWcgZmlsZS4gQWJvcnRpbmcuXCIpO1xuICAgICAgcHJvY2Vzcy5leGl0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgY29uZmlndXJhdGlvbiB0byBmaWxlXG4gICAqL1xuICBzYXZlQ29uZmlnKCkge1xuICAgIC8vIEVuc3VyZSAuZmphbGwgZGlyZWN0b3J5IGV4aXN0c1xuICAgIGZzLm1rZGlyU3luYyhcIi5mamFsbFwiLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTsgLy8gcmVjdXJzaXZlOiB0cnVlIHByZXZlbnRzIGVycm9yIGlmIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0c1xuXG4gICAgLy8gSlNPTi1pZnkgY29uZmlnIGFuZCB3cml0ZSB0byBmaWxlXG4gICAgY29uc3QganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlnLCBudWxsLCAyKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKFwiLmZqYWxsLy5mamFsbC1jb25maWcuanNvblwiLCBqc29uU3RyaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHNjaGVtYSB2ZXJzaW9uIHVzZWQgZm9yIHRoaXMgY29uZmlnIGZpbGVcbiAgICpcbiAgICogQHBhcmFtIHZlcnNpb24gU2NoZW1hIFZlcnNpb25cbiAgICovXG4gIHNldFZlcnNpb24odmVyc2lvbjogbnVtYmVyKSB7XG4gICAgdGhpcy5jb25maWcudmVyc2lvbiA9IHZlcnNpb247XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IHNlcnZpY2UgdG8gdGhlIGNvbmZpZyBmaWxlXG4gICAqIEBwYXJhbSBzZXJ2aWNlS2V5IE5hbWUva2V5IG9mIHRoZSBzZXJ2aWNlXG4gICAqIEBwYXJhbSBjb25maWcgU2VydmljZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXNcbiAgICovXG4gIGFkZFNlcnZpY2Uoc2VydmljZUtleTogc3RyaW5nLCBjb25maWc6IFNlcnZpY2VDb25maWcpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLnNlcnZpY2VzKSB0aGlzLmNvbmZpZy5zZXJ2aWNlcyA9IHt9O1xuICAgIHRoaXMuY29uZmlnLnNlcnZpY2VzW3NlcnZpY2VLZXldID0gY29uZmlnO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBjb25maWcgb3B0aW9ucyBvbiBhIHByZXZpb3VzbHkgZGVmaW5lZCBzZXJ2aWNlXG4gICAqXG4gICAqIEBwYXJhbSBzZXJ2aWNlS2V5IE5hbWUva2V5IG9mIHRoZSBzZXJ2aWNlXG4gICAqIEBwYXJhbSBjb25maWcgU2VydmljZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgdG8gc2V0XG4gICAqL1xuICBzZXRTZXJ2aWNlT3B0aW9uKHNlcnZpY2VLZXk6IHN0cmluZywgY29uZmlnOiBTZXJ2aWNlQ29uZmlnKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5zZXJ2aWNlcykgdGhpcy5jb25maWcuc2VydmljZXMgPSB7fTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLmNvbmZpZy5zZXJ2aWNlc1tzZXJ2aWNlS2V5XTtcbiAgICBpZiAoIXNlcnZpY2UpIHJldHVybjtcblxuICAgIHRoaXMuY29uZmlnLnNlcnZpY2VzW3NlcnZpY2VLZXldID0geyAuLi5zZXJ2aWNlLCAuLi5jb25maWcgfTtcbiAgfVxuXG4gIGdldFNlcnZpY2VDb25maWcoc2VydmljZUtleTogc3RyaW5nKTogU2VydmljZUNvbmZpZyB8IG51bGwge1xuICAgIGlmICghdGhpcy5jb25maWcuc2VydmljZXMpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5zZXJ2aWNlc1tzZXJ2aWNlS2V5XSB8fCBudWxsO1xuICB9XG5cbiAgc2V0UHJvdmlkZXIocHJvdmlkZXI6IFByb3ZpZGVyKSB7XG4gICAgdGhpcy5jb25maWcucHJvdmlkZXIgPSBwcm92aWRlcjtcbiAgfVxuXG4gIGFkZFByb3ZpZGVyQWNjb3VudChhY2NvdW50OiBQcm92aWRlckFjY291bnQpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLnByb3ZpZGVyQWNjb3VudHMpIHRoaXMuY29uZmlnLnByb3ZpZGVyQWNjb3VudHMgPSBbXTtcblxuICAgIC8vIGVuc3VyZSBhY2NvdW50IG5hbWUgaXMgYWx3YXlzIGxvd2VyY2FzZVxuICAgIGFjY291bnQubmFtZSA9IGFjY291bnQubmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuXG4gICAgdGhpcy5jb25maWcucHJvdmlkZXJBY2NvdW50cy5wdXNoKGFjY291bnQpO1xuICB9XG5cbiAgZ2V0UHJvdmlkZXJBY2NvdW50KGFjY291bnROYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLnByb3ZpZGVyQWNjb3VudHMpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5wcm92aWRlckFjY291bnRzLmZpbmQoXG4gICAgICAoYWNjb3VudCkgPT5cbiAgICAgICAgYWNjb3VudC5uYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IGFjY291bnROYW1lLnRvTG9jYWxlTG93ZXJDYXNlKClcbiAgICApO1xuICB9XG59XG4iXX0=
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5QkFBeUI7QUFDekIsd0VBSXVDO0FBQ3ZDLG9EQUEwRTtBQXlCMUU7O0dBRUc7QUFDSCxNQUFNLG1CQUFtQixHQUFHLEdBQUcsQ0FBQztBQUVoQzs7R0FFRztBQUNILE1BQWEsTUFBTTtJQUlqQixZQUFZLFVBQW1CLEVBQUUsc0JBQWtDO1FBQ2pFLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVTtZQUMxQixDQUFDLENBQUMsVUFBVTtZQUNaLENBQUMsQ0FBQztnQkFDRSxPQUFPLEVBQUUsbUJBQW1CO2dCQUM1QixRQUFRLEVBQUUsRUFBRTtnQkFDWixnQkFBZ0IsRUFBRSxFQUFFO2FBQ3JCLENBQUM7UUFFTixJQUFJLENBQUMsc0JBQXNCLEdBQUcsc0JBQXNCO1lBQ2xELENBQUMsQ0FBQyxzQkFBc0I7WUFDeEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNULENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7T0FHRztJQUNLLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBa0I7UUFDOUMsSUFBSTtZQUNGLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFakUsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRTtnQkFDakMsUUFBUSxFQUFFLE1BQU07YUFDakIsQ0FBQyxDQUFDO1NBQ0o7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNaLGVBQWU7WUFDZixzRUFBc0U7WUFDdEUsS0FBSztZQUNMLE9BQU8sSUFBSSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNL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T0FBTyxHQUFHLElBQUksMENBQW1CLENBQUM7WUFDdEMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUM7U0FDekIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxRQUFRLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDO0lBQ3JDLENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZTtRQUNuQixNQUFNLFNBQVMsR0FBRyxJQUFJLHNCQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxxQ0FBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRCxNQUFNLFFBQVEsR0FBRyxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFL0MsT0FBTyxRQUFRLEVBQUUsT0FBTyxJQUFJLFNBQVMsQ0FBQztJQUN4QyxDQUFDO0NBQ0Y7QUEzTEQsd0JBMkxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQge1xuICBBY2NvdW50LFxuICBMaXN0QWNjb3VudHNDb21tYW5kLFxuICBPcmdhbml6YXRpb25zQ2xpZW50LFxufSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LW9yZ2FuaXphdGlvbnNcIjtcbmltcG9ydCB7IFNUU0NsaWVudCwgR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kIH0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1zdHNcIjtcblxudHlwZSBQcm92aWRlciA9IFwiYXdzXCI7XG5cbnR5cGUgU2VydmljZUNvbmZpZyA9IHtcbiAgaWQ6IHN0cmluZztcbiAgdHlwZT86IHN0cmluZztcbiAgdmVyc2lvbj86IG51bWJlcjtcbiAgb3B0aW9ucz86IG9iamVjdDtcbn07XG5cbnR5cGUgUHJvdmlkZXJBY2NvdW50ID0ge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG59O1xuXG50eXBlIFJvb3RDb25maWcgPSB7XG4gIHZlcnNpb24/OiBudW1iZXI7XG4gIGRldmVsb3BtZW50PzogYm9vbGVhbjtcbiAgc2VydmljZXM/OiB7IFtrZXk6IHN0cmluZ106IFNlcnZpY2VDb25maWcgfTtcbiAgcHJvdmlkZXI/OiBQcm92aWRlcjtcbiAgcHJvdmlkZXJBY2NvdW50cz86IFByb3ZpZGVyQWNjb3VudFtdO1xufTtcblxuLyoqXG4gKiBUaGUgY3VycmVudCBiYXNlLXZlcnNpb24gb2YgYW55IG5ld2x5IGNyZWF0ZWQgY29uZmlnIGZpbGVcbiAqL1xuY29uc3QgQkFTRV9DT05GSUdfVkVSU0lPTiA9IDAuMTtcblxuLyoqXG4gKiBDb25maWcgY2xhc3MgZm9yIGxvYWRpbmcgYW5kIHNhdmluZyBmamFsbC1jb25maWcuanNvbiBmaWxlXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25maWcge1xuICByb290Q29uZmlnOiBSb290Q29uZmlnO1xuICBleGlzdGluZ0FjY291bnRzQ29uZmlnOiBBY2NvdW50W107XG5cbiAgY29uc3RydWN0b3Iocm9vdENvbmZpZz86IG9iamVjdCwgZXhpc3RpbmdBY2NvdW50c0NvbmZpZz86IEFjY291bnRbXSkge1xuICAgIHRoaXMucm9vdENvbmZpZyA9IHJvb3RDb25maWdcbiAgICAgID8gcm9vdENvbmZpZ1xuICAgICAgOiB7XG4gICAgICAgICAgdmVyc2lvbjogQkFTRV9DT05GSUdfVkVSU0lPTixcbiAgICAgICAgICBzZXJ2aWNlczoge30sXG4gICAgICAgICAgcHJvdmlkZXJBY2NvdW50czogW10sXG4gICAgICAgIH07XG5cbiAgICB0aGlzLmV4aXN0aW5nQWNjb3VudHNDb25maWcgPSBleGlzdGluZ0FjY291bnRzQ29uZmlnXG4gICAgICA/IGV4aXN0aW5nQWNjb3VudHNDb25maWdcbiAgICAgIDogW107XG4gIH1cblxuICBpc0RldmVsb3BtZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucm9vdENvbmZpZz8uZGV2ZWxvcG1lbnQ7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBjb25maWcgZmlsZSBpbnRvIG1lbW9yeSBhcyBhIHJhdyBKU09OIHN0cmluZ1xuICAgKiBAcmV0dXJucyBDb25maWcgYXMgSlNPTiBzdHJpbmcgb3IgTlVMTCBpZiBubyBjb25maWcgZmlsZSBhY2Nlc3NpYmxlXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBsb2FkQ29uZmlnRmlsZShjb25maWdGaWxlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgZnMuYWNjZXNzU3luYyhjb25maWdGaWxlLCBmcy5jb25zdGFudHMuUl9PSyB8IGZzLmNvbnN0YW50cy5XX09LKTtcblxuICAgICAgcmV0dXJuIGZzLnJlYWRGaWxlU3luYyhjb25maWdGaWxlLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gY29uc29sZS5sb2coXG4gICAgICAvLyAgIGBFeHBlY3RlZCBmaWxlICcke2NvbmZpZ0ZpbGV9JyBkb2VzIG5vdCBleGlzdCBvciBjYW5ub3QgYmUgcmVhZC5gXG4gICAgICAvLyApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyaWVzIHRvIGxvYWQgdGhlIGNvbmZpZyBmaWxlIGZyb20gdGhlIGdpdmVuIHBhdGgsIGlmIHVubmNlc3N1ZnVsIGl0IHRyaWVzIGV4YWN0bHkgdHdvIGRpcmVjdG9yaWVzIGhpZ2hlclxuICAgKiBUaGlzIGlzIG5lY2Nlc3NhcnkgdG8gZW5zdXJlIGZqYWxsIGFwcHMgY2FuIGxvYWQgdGhlIGNvbmZpZyBmaWxlIHRoZW1zZWx2ZXNcbiAgICogQHBhcmFtIGNvbmZpZ0ZpbGVcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHRyeUxvYWRDb25maWdGaWxlKGNvbmZpZ0ZpbGU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGxldCBjb25maWcgPSBDb25maWcubG9hZENvbmZpZ0ZpbGUoY29uZmlnRmlsZSk7XG4gICAgaWYgKGNvbmZpZykgcmV0dXJuIGNvbmZpZztcblxuICAgIC8vIFRyeSBvbmUgZGlyZWN0b3J5IGhpZ2hlclxuICAgIHJldHVybiBDb25maWcubG9hZENvbmZpZ0ZpbGUoYC4uLy4uLyR7Y29uZmlnRmlsZX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGNvbmZpZ3VyYXRpb24gZnJvbSBmaWxlXG4gICAqXG4gICAqIEByZXR1cm5zIExvYWRlZCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBzdGF0aWMgbG9hZENvbmZpZygpOiBDb25maWcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByb290Q29uZmlnSnNvbiA9IENvbmZpZy50cnlMb2FkQ29uZmlnRmlsZShcbiAgICAgICAgXCJmamFsbC9mamFsbC1jb25maWcuanNvblwiXG4gICAgICApO1xuICAgICAgY29uc3QgZXhpc3RpbmdBY2NvdW50SnNvbiA9IENvbmZpZy50cnlMb2FkQ29uZmlnRmlsZShcbiAgICAgICAgXCJmamFsbC9hY2NvdW50cy1jb25maWcuanNvblwiXG4gICAgICApO1xuXG4gICAgICBjb25zdCByb290Q29uZmlnID0gcm9vdENvbmZpZ0pzb25cbiAgICAgICAgPyBKU09OLnBhcnNlKHJvb3RDb25maWdKc29uKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGV4aXN0aW5nQWNjb3VudHNDb25maWcgPSBleGlzdGluZ0FjY291bnRKc29uXG4gICAgICAgID8gSlNPTi5wYXJzZShleGlzdGluZ0FjY291bnRKc29uKVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgcmV0dXJuIG5ldyBDb25maWcocm9vdENvbmZpZywgZXhpc3RpbmdBY2NvdW50c0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiVW5hYmxlIHRvIHBhcnNlIGNvbmZpZyBmaWxlLiBBYm9ydGluZy5cIiwgZXJyKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBjb25maWd1cmF0aW9uIHRvIGZpbGVcbiAgICovXG4gIHNhdmVDb25maWcoKSB7XG4gICAgLy8gRW5zdXJlIGZqYWxsIGRpcmVjdG9yeSBleGlzdHNcbiAgICBmcy5ta2RpclN5bmMoXCJmamFsbFwiLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTsgLy8gcmVjdXJzaXZlOiB0cnVlIHByZXZlbnRzIGVycm9yIGlmIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0c1xuXG4gICAgLy8gSlNPTi1pZnkgY29uZmlnIGFuZCB3cml0ZSByb290IGNvbmZpZyB0byBmaWxlXG4gICAgY29uc3Qgcm9vdEpzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLnJvb3RDb25maWcsIG51bGwsIDIpO1xuICAgIGZzLndyaXRlRmlsZVN5bmMoXCJmamFsbC9mamFsbC1jb25maWcuanNvblwiLCByb290SnNvblN0cmluZyk7XG5cbiAgICBjb25zdCBleGlzdGluZ0FjY291bnRzSnNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAgdGhpcy5leGlzdGluZ0FjY291bnRzQ29uZmlnLFxuICAgICAgbnVsbCxcbiAgICAgIDJcbiAgICApO1xuICAgIGZzLndyaXRlRmlsZVN5bmMoXCJmamFsbC9hY2NvdW50cy1jb25maWcuanNvblwiLCBleGlzdGluZ0FjY291bnRzSnNvblN0cmluZyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBzY2hlbWEgdmVyc2lvbiB1c2VkIGZvciB0aGlzIGNvbmZpZyBmaWxlXG4gICAqXG4gICAqIEBwYXJhbSB2ZXJzaW9uIFNjaGVtYSBWZXJzaW9uXG4gICAqL1xuICBzZXRWZXJzaW9uKHZlcnNpb246IG51bWJlcikge1xuICAgIHRoaXMucm9vdENvbmZpZy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgc2VydmljZSB0byB0aGUgY29uZmlnIGZpbGVcbiAgICogQHBhcmFtIHNlcnZpY2VLZXkgTmFtZS9rZXkgb2YgdGhlIHNlcnZpY2VcbiAgICogQHBhcmFtIGNvbmZpZyBTZXJ2aWNlIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllc1xuICAgKi9cbiAgYWRkU2VydmljZShzZXJ2aWNlS2V5OiBzdHJpbmcsIGNvbmZpZzogU2VydmljZUNvbmZpZykge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnNlcnZpY2VzKSB0aGlzLnJvb3RDb25maWcuc2VydmljZXMgPSB7fTtcbiAgICB0aGlzLnJvb3RDb25maWcuc2VydmljZXNbc2VydmljZUtleV0gPSBjb25maWc7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGNvbmZpZyBvcHRpb25zIG9uIGEgcHJldmlvdXNseSBkZWZpbmVkIHNlcnZpY2VcbiAgICpcbiAgICogQHBhcmFtIHNlcnZpY2VLZXkgTmFtZS9rZXkgb2YgdGhlIHNlcnZpY2VcbiAgICogQHBhcmFtIGNvbmZpZyBTZXJ2aWNlIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcyB0byBzZXRcbiAgICovXG4gIHNldFNlcnZpY2VPcHRpb24oc2VydmljZUtleTogc3RyaW5nLCBjb25maWc6IFNlcnZpY2VDb25maWcpIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5zZXJ2aWNlcykgdGhpcy5yb290Q29uZmlnLnNlcnZpY2VzID0ge307XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy5yb290Q29uZmlnLnNlcnZpY2VzW3NlcnZpY2VLZXldO1xuICAgIGlmICghc2VydmljZSkgcmV0dXJuO1xuXG4gICAgdGhpcy5yb290Q29uZmlnLnNlcnZpY2VzW3NlcnZpY2VLZXldID0geyAuLi5zZXJ2aWNlLCAuLi5jb25maWcgfTtcbiAgfVxuXG4gIGdldFNlcnZpY2VDb25maWcoc2VydmljZUtleTogc3RyaW5nKTogU2VydmljZUNvbmZpZyB8IG51bGwge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnNlcnZpY2VzKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5yb290Q29uZmlnLnNlcnZpY2VzW3NlcnZpY2VLZXldIHx8IG51bGw7XG4gIH1cblxuICBzZXRQcm92aWRlcihwcm92aWRlcjogUHJvdmlkZXIpIHtcbiAgICB0aGlzLnJvb3RDb25maWcucHJvdmlkZXIgPSBwcm92aWRlcjtcbiAgfVxuXG4gIGFkZFByb3ZpZGVyQWNjb3VudChhY2NvdW50OiBQcm92aWRlckFjY291bnQpIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzKVxuICAgICAgdGhpcy5yb290Q29uZmlnLnByb3ZpZGVyQWNjb3VudHMgPSBbXTtcblxuICAgIC8vIGVuc3VyZSBhY2NvdW50IG5hbWUgaXMgYWx3YXlzIGxvd2VyY2FzZVxuICAgIGFjY291bnQubmFtZSA9IGFjY291bnQubmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuXG4gICAgdGhpcy5yb290Q29uZmlnLnByb3ZpZGVyQWNjb3VudHMucHVzaChhY2NvdW50KTtcbiAgfVxuXG4gIGdldFByb3ZpZGVyQWNjb3VudChhY2NvdW50TmFtZTogc3RyaW5nKSB7XG4gICAgLy8gVE9ETzogRml4IG51bGwgZXJyb3JcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5yb290Q29uZmlnLnByb3ZpZGVyQWNjb3VudHMuZmluZChcbiAgICAgIChhY2NvdW50KSA9PlxuICAgICAgICBhY2NvdW50Lm5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gYWNjb3VudE5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBzZXRFeGlzdGluZ0FjY291bnRzKHJlZ2lvbjogc3RyaW5nKSB7XG4gICAgLy8gTWFrZSBBUEkgQ2FsbFxuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBPcmdhbml6YXRpb25zQ2xpZW50KHtcbiAgICAgIHJlZ2lvbjogcmVnaW9uLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgTGlzdEFjY291bnRzQ29tbWFuZCh7XG4gICAgICBNYXhSZXN1bHRzOiBOdW1iZXIoXCIyMFwiKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnNlbmQocmVxdWVzdCk7XG4gICAgdGhpcy5leGlzdGluZ0FjY291bnRzQ29uZmlnID0gcmVzcG9uc2UuQWNjb3VudHMgfHwgW107XG4gIH1cblxuICBnZXRFeGlzdGluZ0FjY291bnRzKCk6IEFjY291bnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuZXhpc3RpbmdBY2NvdW50c0NvbmZpZztcbiAgfVxuXG4gIGFzeW5jIGdldEFXU0FjY291bnRJZCgpIHtcbiAgICBjb25zdCBzdHNDbGllbnQgPSBuZXcgU1RTQ2xpZW50KHt9KTtcbiAgICBjb25zdCByZXF1ZXN0ID0gbmV3IEdldENhbGxlcklkZW50aXR5Q29tbWFuZCh7fSk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzdHNDbGllbnQuc2VuZChyZXF1ZXN0KTtcblxuICAgIHJldHVybiByZXNwb25zZT8uQWNjb3VudCB8fCB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,23 +1,31 @@
1
1
  {
2
- "name": "@fjall/util",
3
- "version": "0.1.10",
4
- "description": "Common utility methods",
5
- "main": "dist/index.js",
6
- "types": "dist/index.d.ts",
7
- "files": [
8
- "dist/"
9
- ],
10
- "scripts": {
11
- "clean": "rm -rf ./dist",
12
- "build": "npm run clean && npx tsc",
13
- "watch": "npm run build && npx tsc-watch",
14
- "publish": "npm run build && npm publish --access restricted"
15
- },
16
- "author": "",
17
- "license": "ISC",
18
- "devDependencies": {
19
- "@types/node": "^18.19.34",
20
- "tsc-watch": "^6.0.0",
21
- "typescript": "^4.9.4"
22
- }
2
+ "name": "@fjall/util",
3
+ "version": "0.1.18",
4
+ "description": "Common utility methods",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist/"
9
+ ],
10
+ "scripts": {
11
+ "clean": "rm -rf ./dist",
12
+ "build": "npm run clean && npx tsc",
13
+ "watch": "npm run build && npx tsc-watch",
14
+ "publish": "npm run build && npm publish --access restricted"
15
+ },
16
+ "author": "",
17
+ "license": "ISC",
18
+ "devDependencies": {
19
+ "@aws-sdk/client-organizations": "^3.699.0",
20
+ "@types/node": "^18.19.34",
21
+ "tsc-watch": "^6.0.0",
22
+ "typescript": "^4.9.4"
23
+ },
24
+ "dependencies": {
25
+ "@aws-sdk/client-organizations": "^3.709.0",
26
+ "@aws-sdk/client-sts": "^3.731.1"
27
+ },
28
+ "overrides": {
29
+ "@smithy/core": "2.5.5"
30
+ }
23
31
  }