@fjall/util 0.1.10 → 0.1.16

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