@rosen-bridge/utils 0.0.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/lib/constants.d.ts +0 -1
  3. package/dist/lib/constants.d.ts.map +1 -1
  4. package/dist/lib/constants.js +1 -2
  5. package/dist/lib/downloadRosenAssets.d.ts +6 -3
  6. package/dist/lib/downloadRosenAssets.d.ts.map +1 -1
  7. package/dist/lib/downloadRosenAssets.js +15 -10
  8. package/dist/lib/downloadTssBinary.d.ts +13 -0
  9. package/dist/lib/downloadTssBinary.d.ts.map +1 -0
  10. package/dist/lib/downloadTssBinary.js +45 -0
  11. package/dist/lib/index.d.ts +1 -0
  12. package/dist/lib/index.d.ts.map +1 -1
  13. package/dist/lib/index.js +2 -1
  14. package/dist/lib/types/index.d.ts +1 -0
  15. package/dist/lib/types/index.d.ts.map +1 -1
  16. package/dist/lib/types/index.js +1 -1
  17. package/dist/lib/utils/github.d.ts +318 -6
  18. package/dist/lib/utils/github.d.ts.map +1 -1
  19. package/dist/lib/utils/github.js +53 -9
  20. package/dist/lib/utils/rosen.d.ts +5 -0
  21. package/dist/lib/utils/rosen.d.ts.map +1 -1
  22. package/dist/lib/utils/rosen.js +6 -1
  23. package/dist/tsconfig.build.tsbuildinfo +1 -1
  24. package/dist/tsconfig.tsbuildinfo +1 -0
  25. package/lib/constants.ts +0 -1
  26. package/lib/downloadRosenAssets.ts +21 -10
  27. package/lib/downloadTssBinary.ts +61 -0
  28. package/lib/index.ts +1 -0
  29. package/lib/types/index.ts +2 -0
  30. package/lib/utils/github.ts +74 -8
  31. package/lib/utils/rosen.ts +7 -0
  32. package/package.json +3 -4
  33. package/tests/data/octokit.data.ts +88 -1
  34. package/tests/downloadRosenAssets.spec.ts +39 -9
  35. package/tests/downloadTssBinary.spec.ts +153 -0
  36. package/tests/mocks/octokit.mock.ts +20 -2
  37. package/tests/utils/github.spec.ts +192 -20
  38. package/tests/utils/rosen.spec.ts +39 -1
package/CHANGELOG.md ADDED
@@ -0,0 +1,13 @@
1
+ # @rosen-bridge/utils
2
+
3
+ ## 0.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - add a method to download tss binary via a prefix tag
8
+
9
+ ## 0.1.0
10
+
11
+ ### Minor Changes
12
+
13
+ - Add option to `downloadRosenAssets` to download releases by tag
@@ -1,4 +1,3 @@
1
1
  export declare const DEFAULT_RELEASES_FETCHING_PAGE_SIZE = 5;
2
2
  export declare const ROSEN_BRIDGE_ORGANIZATION = "rosen-bridge";
3
- export declare const CONTRACT_REPO_NAME = "contract";
4
3
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../lib/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mCAAmC,IAAI,CAAC;AACrD,eAAO,MAAM,yBAAyB,iBAAiB,CAAC;AACxD,eAAO,MAAM,kBAAkB,aAAa,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../lib/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mCAAmC,IAAI,CAAC;AACrD,eAAO,MAAM,yBAAyB,iBAAiB,CAAC"}
@@ -1,4 +1,3 @@
1
1
  export const DEFAULT_RELEASES_FETCHING_PAGE_SIZE = 5;
2
2
  export const ROSEN_BRIDGE_ORGANIZATION = 'rosen-bridge';
3
- export const CONTRACT_REPO_NAME = 'contract';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBRyxDQUFDLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsY0FBYyxDQUFDO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLFVBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBERUZBVUxUX1JFTEVBU0VTX0ZFVENISU5HX1BBR0VfU0laRSA9IDU7XG5leHBvcnQgY29uc3QgUk9TRU5fQlJJREdFX09SR0FOSVpBVElPTiA9ICdyb3Nlbi1icmlkZ2UnO1xuZXhwb3J0IGNvbnN0IENPTlRSQUNUX1JFUE9fTkFNRSA9ICdjb250cmFjdCc7XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBRyxDQUFDLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVMRUFTRVNfRkVUQ0hJTkdfUEFHRV9TSVpFID0gNTtcbmV4cG9ydCBjb25zdCBST1NFTl9CUklER0VfT1JHQU5JWkFUSU9OID0gJ3Jvc2VuLWJyaWRnZSc7XG4iXX0=
@@ -2,9 +2,12 @@
2
2
  * Download all required Rosen assets (tokenMap and all chain address files) to a specific path
3
3
  * @param chainType chain type (e.g. mainnet, testnet, etc.)
4
4
  * @param includePrereleases weather to include prereleases into account when searching for a matching release in GitHub
5
- * @param destinationPath path to folder in which the files will be saved
6
- * @param nameSuffix an optional suffix to append to saved files names
5
+ * @param config configs for including prereleases, adding name suffix, and getting specific release by tag
7
6
  */
8
- declare const downloadRosenAssets: (chainType: string, destinationPath: string, includePrereleases?: boolean, nameSuffix?: string) => Promise<void>;
7
+ declare const downloadRosenAssets: (chainType: string, destinationPath: string, config?: {
8
+ includePrereleases?: boolean;
9
+ nameSuffix?: string;
10
+ tag?: string;
11
+ }) => Promise<void>;
9
12
  export default downloadRosenAssets;
10
13
  //# sourceMappingURL=downloadRosenAssets.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"downloadRosenAssets.d.ts","sourceRoot":"","sources":["../../lib/downloadRosenAssets.ts"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH,QAAA,MAAM,mBAAmB,cACZ,MAAM,mBACA,MAAM,6CAEV,MAAM,kBAmCpB,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"downloadRosenAssets.d.ts","sourceRoot":"","sources":["../../lib/downloadRosenAssets.ts"],"names":[],"mappings":"AAaA;;;;;GAKG;AACH,QAAA,MAAM,mBAAmB,cACZ,MAAM,mBACA,MAAM,WACd;IACP,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,kBAsCF,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -1,32 +1,37 @@
1
1
  import download from 'download';
2
- import { findLatestRelease, findLatestStableRelease } from './utils/github';
2
+ import { findLatestRelease, findLatestStableRelease, getReleaseByTag, } from './utils/github';
3
3
  import { isValidAssetName, truncateAssetName } from './utils/rosen';
4
4
  import { RosenAssetsDownloadError } from './error';
5
+ const repo = 'contract';
5
6
  /**
6
7
  * Download all required Rosen assets (tokenMap and all chain address files) to a specific path
7
8
  * @param chainType chain type (e.g. mainnet, testnet, etc.)
8
9
  * @param includePrereleases weather to include prereleases into account when searching for a matching release in GitHub
9
- * @param destinationPath path to folder in which the files will be saved
10
- * @param nameSuffix an optional suffix to append to saved files names
10
+ * @param config configs for including prereleases, adding name suffix, and getting specific release by tag
11
11
  */
12
- const downloadRosenAssets = async (chainType, destinationPath, includePrereleases = false, nameSuffix) => {
12
+ const downloadRosenAssets = async (chainType, destinationPath, config) => {
13
+ const getRelease = () => {
14
+ if (config?.tag)
15
+ return getReleaseByTag(repo, config.tag);
16
+ if (config?.includePrereleases)
17
+ return findLatestRelease(repo, chainType);
18
+ return findLatestStableRelease(repo, chainType);
19
+ };
13
20
  try {
14
- const release = includePrereleases
15
- ? await findLatestRelease(chainType)
16
- : await findLatestStableRelease(chainType);
21
+ const release = await getRelease();
17
22
  if (release) {
18
23
  await Promise.all([
19
24
  ...(release &&
20
25
  release.assets
21
26
  .filter((asset) => isValidAssetName(chainType)(asset.name))
22
27
  .map(async (asset) => download(asset.browser_download_url, destinationPath, {
23
- filename: truncateAssetName(asset.name, nameSuffix),
28
+ filename: truncateAssetName(asset.name, config?.nameSuffix),
24
29
  }))),
25
30
  ]);
26
31
  }
27
32
  else {
28
33
  console.error(`No release found for [${chainType}] chain type.`);
29
- if (!includePrereleases) {
34
+ if (!config?.includePrereleases) {
30
35
  console.error('Please note that `includePrereleases` is set to false. There may be some matching releases in prereleases.');
31
36
  }
32
37
  }
@@ -40,4 +45,4 @@ const downloadRosenAssets = async (chainType, destinationPath, includePrerelease
40
45
  }
41
46
  };
42
47
  export default downloadRosenAssets;
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG93bmxvYWRSb3NlbkFzc2V0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9kb3dubG9hZFJvc2VuQXNzZXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sUUFBUSxNQUFNLFVBQVUsQ0FBQztBQUVoQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFcEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRW5EOzs7Ozs7R0FNRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxFQUMvQixTQUFpQixFQUNqQixlQUF1QixFQUN2QixrQkFBa0IsR0FBRyxLQUFLLEVBQzFCLFVBQW1CLEVBQ25CLEVBQUU7SUFDRixJQUFJO1FBQ0YsTUFBTSxPQUFPLEdBQUcsa0JBQWtCO1lBQ2hDLENBQUMsQ0FBQyxNQUFNLGlCQUFpQixDQUFDLFNBQVMsQ0FBQztZQUNwQyxDQUFDLENBQUMsTUFBTSx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU3QyxJQUFJLE9BQU8sRUFBRTtZQUNYLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDaEIsR0FBRyxDQUFDLE9BQU87b0JBQ1QsT0FBTyxDQUFDLE1BQU07eUJBQ1gsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7eUJBQzFELEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDbkIsUUFBUSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxlQUFlLEVBQUU7d0JBQ3BELFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQztxQkFDcEQsQ0FBQyxDQUNILENBQUM7YUFDUCxDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsU0FBUyxlQUFlLENBQUMsQ0FBQztZQUNqRSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQ3ZCLE9BQU8sQ0FBQyxLQUFLLENBQ1gsNEdBQTRHLENBQzdHLENBQUM7YUFDSDtTQUNGO0tBQ0Y7SUFBQyxPQUFPLEtBQUssRUFBRTtRQUNkLE9BQU8sQ0FBQyxLQUFLLENBQ1gsNERBQTRELEtBQUssRUFBRSxDQUNwRSxDQUFDO1FBQ0YsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFO1lBQzFCLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVCO1FBQ0QsTUFBTSxJQUFJLHdCQUF3QixDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzFEO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsZUFBZSxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkb3dubG9hZCBmcm9tICdkb3dubG9hZCc7XG5cbmltcG9ydCB7IGZpbmRMYXRlc3RSZWxlYXNlLCBmaW5kTGF0ZXN0U3RhYmxlUmVsZWFzZSB9IGZyb20gJy4vdXRpbHMvZ2l0aHViJztcbmltcG9ydCB7IGlzVmFsaWRBc3NldE5hbWUsIHRydW5jYXRlQXNzZXROYW1lIH0gZnJvbSAnLi91dGlscy9yb3Nlbic7XG5cbmltcG9ydCB7IFJvc2VuQXNzZXRzRG93bmxvYWRFcnJvciB9IGZyb20gJy4vZXJyb3InO1xuXG4vKipcbiAqIERvd25sb2FkIGFsbCByZXF1aXJlZCBSb3NlbiBhc3NldHMgKHRva2VuTWFwIGFuZCBhbGwgY2hhaW4gYWRkcmVzcyBmaWxlcykgdG8gYSBzcGVjaWZpYyBwYXRoXG4gKiBAcGFyYW0gY2hhaW5UeXBlIGNoYWluIHR5cGUgKGUuZy4gbWFpbm5ldCwgdGVzdG5ldCwgZXRjLilcbiAqIEBwYXJhbSBpbmNsdWRlUHJlcmVsZWFzZXMgd2VhdGhlciB0byBpbmNsdWRlIHByZXJlbGVhc2VzIGludG8gYWNjb3VudCB3aGVuIHNlYXJjaGluZyBmb3IgYSBtYXRjaGluZyByZWxlYXNlIGluIEdpdEh1YlxuICogQHBhcmFtIGRlc3RpbmF0aW9uUGF0aCBwYXRoIHRvIGZvbGRlciBpbiB3aGljaCB0aGUgZmlsZXMgd2lsbCBiZSBzYXZlZFxuICogQHBhcmFtIG5hbWVTdWZmaXggYW4gb3B0aW9uYWwgc3VmZml4IHRvIGFwcGVuZCB0byBzYXZlZCBmaWxlcyBuYW1lc1xuICovXG5jb25zdCBkb3dubG9hZFJvc2VuQXNzZXRzID0gYXN5bmMgKFxuICBjaGFpblR5cGU6IHN0cmluZyxcbiAgZGVzdGluYXRpb25QYXRoOiBzdHJpbmcsXG4gIGluY2x1ZGVQcmVyZWxlYXNlcyA9IGZhbHNlLFxuICBuYW1lU3VmZml4Pzogc3RyaW5nXG4pID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZWxlYXNlID0gaW5jbHVkZVByZXJlbGVhc2VzXG4gICAgICA/IGF3YWl0IGZpbmRMYXRlc3RSZWxlYXNlKGNoYWluVHlwZSlcbiAgICAgIDogYXdhaXQgZmluZExhdGVzdFN0YWJsZVJlbGVhc2UoY2hhaW5UeXBlKTtcblxuICAgIGlmIChyZWxlYXNlKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIC4uLihyZWxlYXNlICYmXG4gICAgICAgICAgcmVsZWFzZS5hc3NldHNcbiAgICAgICAgICAgIC5maWx0ZXIoKGFzc2V0KSA9PiBpc1ZhbGlkQXNzZXROYW1lKGNoYWluVHlwZSkoYXNzZXQubmFtZSkpXG4gICAgICAgICAgICAubWFwKGFzeW5jIChhc3NldCkgPT5cbiAgICAgICAgICAgICAgZG93bmxvYWQoYXNzZXQuYnJvd3Nlcl9kb3dubG9hZF91cmwsIGRlc3RpbmF0aW9uUGF0aCwge1xuICAgICAgICAgICAgICAgIGZpbGVuYW1lOiB0cnVuY2F0ZUFzc2V0TmFtZShhc3NldC5uYW1lLCBuYW1lU3VmZml4KSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICkpLFxuICAgICAgXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYE5vIHJlbGVhc2UgZm91bmQgZm9yIFske2NoYWluVHlwZX1dIGNoYWluIHR5cGUuYCk7XG4gICAgICBpZiAoIWluY2x1ZGVQcmVyZWxlYXNlcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICdQbGVhc2Ugbm90ZSB0aGF0IGBpbmNsdWRlUHJlcmVsZWFzZXNgIGlzIHNldCB0byBmYWxzZS4gVGhlcmUgbWF5IGJlIHNvbWUgbWF0Y2hpbmcgcmVsZWFzZXMgaW4gcHJlcmVsZWFzZXMuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgYEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byBkb3dubG9hZCBSb3NlbiBhc3NldHM6ICR7ZXJyb3J9YFxuICAgICk7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3Iuc3RhY2spO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUm9zZW5Bc3NldHNEb3dubG9hZEVycm9yKCcnLCB7IGNhdXNlOiBlcnJvciB9KTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZG93bmxvYWRSb3NlbkFzc2V0cztcbiJdfQ==
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG93bmxvYWRSb3NlbkFzc2V0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9kb3dubG9hZFJvc2VuQXNzZXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sUUFBUSxNQUFNLFVBQVUsQ0FBQztBQUVoQyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLHVCQUF1QixFQUN2QixlQUFlLEdBQ2hCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVuRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUM7QUFFeEI7Ozs7O0dBS0c7QUFDSCxNQUFNLG1CQUFtQixHQUFHLEtBQUssRUFDL0IsU0FBaUIsRUFDakIsZUFBdUIsRUFDdkIsTUFJQyxFQUNELEVBQUU7SUFDRixNQUFNLFVBQVUsR0FBRyxHQUFHLEVBQUU7UUFDdEIsSUFBSSxNQUFNLEVBQUUsR0FBRztZQUFFLE9BQU8sZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUQsSUFBSSxNQUFNLEVBQUUsa0JBQWtCO1lBQUUsT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDMUUsT0FBTyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbEQsQ0FBQyxDQUFDO0lBQ0YsSUFBSTtRQUNGLE1BQU0sT0FBTyxHQUFHLE1BQU0sVUFBVSxFQUFFLENBQUM7UUFFbkMsSUFBSSxPQUFPLEVBQUU7WUFDWCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQ2hCLEdBQUcsQ0FBQyxPQUFPO29CQUNULE9BQU8sQ0FBQyxNQUFNO3lCQUNYLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO3lCQUMxRCxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQ25CLFFBQVEsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsZUFBZSxFQUFFO3dCQUNwRCxRQUFRLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDO3FCQUM1RCxDQUFDLENBQ0gsQ0FBQzthQUNQLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxPQUFPLENBQUMsS0FBSyxDQUFDLHlCQUF5QixTQUFTLGVBQWUsQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUU7Z0JBQy9CLE9BQU8sQ0FBQyxLQUFLLENBQ1gsNEdBQTRHLENBQzdHLENBQUM7YUFDSDtTQUNGO0tBQ0Y7SUFBQyxPQUFPLEtBQUssRUFBRTtRQUNkLE9BQU8sQ0FBQyxLQUFLLENBQ1gsNERBQTRELEtBQUssRUFBRSxDQUNwRSxDQUFDO1FBQ0YsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFO1lBQzFCLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVCO1FBQ0QsTUFBTSxJQUFJLHdCQUF3QixDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzFEO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsZUFBZSxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkb3dubG9hZCBmcm9tICdkb3dubG9hZCc7XG5cbmltcG9ydCB7XG4gIGZpbmRMYXRlc3RSZWxlYXNlLFxuICBmaW5kTGF0ZXN0U3RhYmxlUmVsZWFzZSxcbiAgZ2V0UmVsZWFzZUJ5VGFnLFxufSBmcm9tICcuL3V0aWxzL2dpdGh1Yic7XG5pbXBvcnQgeyBpc1ZhbGlkQXNzZXROYW1lLCB0cnVuY2F0ZUFzc2V0TmFtZSB9IGZyb20gJy4vdXRpbHMvcm9zZW4nO1xuXG5pbXBvcnQgeyBSb3NlbkFzc2V0c0Rvd25sb2FkRXJyb3IgfSBmcm9tICcuL2Vycm9yJztcblxuY29uc3QgcmVwbyA9ICdjb250cmFjdCc7XG5cbi8qKlxuICogRG93bmxvYWQgYWxsIHJlcXVpcmVkIFJvc2VuIGFzc2V0cyAodG9rZW5NYXAgYW5kIGFsbCBjaGFpbiBhZGRyZXNzIGZpbGVzKSB0byBhIHNwZWNpZmljIHBhdGhcbiAqIEBwYXJhbSBjaGFpblR5cGUgY2hhaW4gdHlwZSAoZS5nLiBtYWlubmV0LCB0ZXN0bmV0LCBldGMuKVxuICogQHBhcmFtIGluY2x1ZGVQcmVyZWxlYXNlcyB3ZWF0aGVyIHRvIGluY2x1ZGUgcHJlcmVsZWFzZXMgaW50byBhY2NvdW50IHdoZW4gc2VhcmNoaW5nIGZvciBhIG1hdGNoaW5nIHJlbGVhc2UgaW4gR2l0SHViXG4gKiBAcGFyYW0gY29uZmlnIGNvbmZpZ3MgZm9yIGluY2x1ZGluZyBwcmVyZWxlYXNlcywgYWRkaW5nIG5hbWUgc3VmZml4LCBhbmQgZ2V0dGluZyBzcGVjaWZpYyByZWxlYXNlIGJ5IHRhZ1xuICovXG5jb25zdCBkb3dubG9hZFJvc2VuQXNzZXRzID0gYXN5bmMgKFxuICBjaGFpblR5cGU6IHN0cmluZyxcbiAgZGVzdGluYXRpb25QYXRoOiBzdHJpbmcsXG4gIGNvbmZpZz86IHtcbiAgICBpbmNsdWRlUHJlcmVsZWFzZXM/OiBib29sZWFuO1xuICAgIG5hbWVTdWZmaXg/OiBzdHJpbmc7XG4gICAgdGFnPzogc3RyaW5nO1xuICB9XG4pID0+IHtcbiAgY29uc3QgZ2V0UmVsZWFzZSA9ICgpID0+IHtcbiAgICBpZiAoY29uZmlnPy50YWcpIHJldHVybiBnZXRSZWxlYXNlQnlUYWcocmVwbywgY29uZmlnLnRhZyk7XG4gICAgaWYgKGNvbmZpZz8uaW5jbHVkZVByZXJlbGVhc2VzKSByZXR1cm4gZmluZExhdGVzdFJlbGVhc2UocmVwbywgY2hhaW5UeXBlKTtcbiAgICByZXR1cm4gZmluZExhdGVzdFN0YWJsZVJlbGVhc2UocmVwbywgY2hhaW5UeXBlKTtcbiAgfTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZWxlYXNlID0gYXdhaXQgZ2V0UmVsZWFzZSgpO1xuXG4gICAgaWYgKHJlbGVhc2UpIHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgLi4uKHJlbGVhc2UgJiZcbiAgICAgICAgICByZWxlYXNlLmFzc2V0c1xuICAgICAgICAgICAgLmZpbHRlcigoYXNzZXQpID0+IGlzVmFsaWRBc3NldE5hbWUoY2hhaW5UeXBlKShhc3NldC5uYW1lKSlcbiAgICAgICAgICAgIC5tYXAoYXN5bmMgKGFzc2V0KSA9PlxuICAgICAgICAgICAgICBkb3dubG9hZChhc3NldC5icm93c2VyX2Rvd25sb2FkX3VybCwgZGVzdGluYXRpb25QYXRoLCB7XG4gICAgICAgICAgICAgICAgZmlsZW5hbWU6IHRydW5jYXRlQXNzZXROYW1lKGFzc2V0Lm5hbWUsIGNvbmZpZz8ubmFtZVN1ZmZpeCksXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApKSxcbiAgICAgIF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBObyByZWxlYXNlIGZvdW5kIGZvciBbJHtjaGFpblR5cGV9XSBjaGFpbiB0eXBlLmApO1xuICAgICAgaWYgKCFjb25maWc/LmluY2x1ZGVQcmVyZWxlYXNlcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICdQbGVhc2Ugbm90ZSB0aGF0IGBpbmNsdWRlUHJlcmVsZWFzZXNgIGlzIHNldCB0byBmYWxzZS4gVGhlcmUgbWF5IGJlIHNvbWUgbWF0Y2hpbmcgcmVsZWFzZXMgaW4gcHJlcmVsZWFzZXMuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgYEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byBkb3dubG9hZCBSb3NlbiBhc3NldHM6ICR7ZXJyb3J9YFxuICAgICk7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3Iuc3RhY2spO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUm9zZW5Bc3NldHNEb3dubG9hZEVycm9yKCcnLCB7IGNhdXNlOiBlcnJvciB9KTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZG93bmxvYWRSb3NlbkFzc2V0cztcbiJdfQ==
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Download release asset by tag to a specific path
3
+ * @param destinationPath where writes files
4
+ * @param config configs for including prereleases, set osName, getting specific release by tag or by regex tag
5
+ */
6
+ declare const downloadTssBinary: (destinationPath: string, config: {
7
+ osName: string;
8
+ tag: string;
9
+ regex: boolean;
10
+ includePrereleases?: boolean;
11
+ }) => Promise<void>;
12
+ export { downloadTssBinary };
13
+ //# sourceMappingURL=downloadTssBinary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"downloadTssBinary.d.ts","sourceRoot":"","sources":["../../lib/downloadTssBinary.ts"],"names":[],"mappings":"AAaA;;;;GAIG;AACH,QAAA,MAAM,iBAAiB,oBACJ,MAAM,UACf;IACN,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,kBAiCF,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,45 @@
1
+ import download from 'download';
2
+ import { findLatestReleaseByPrefixTag, findLatestStableReleaseByPrefixTag, getReleaseByTag, } from './utils/github';
3
+ import { isValidOS } from './utils/rosen';
4
+ import { RosenAssetsDownloadError } from './error';
5
+ const repo = 'sign-protocols';
6
+ /**
7
+ * Download release asset by tag to a specific path
8
+ * @param destinationPath where writes files
9
+ * @param config configs for including prereleases, set osName, getting specific release by tag or by regex tag
10
+ */
11
+ const downloadTssBinary = async (destinationPath, config) => {
12
+ const getRelease = () => {
13
+ if (config.regex) {
14
+ if (config?.includePrereleases)
15
+ return findLatestReleaseByPrefixTag(repo, config.tag);
16
+ else
17
+ return findLatestStableReleaseByPrefixTag(repo, config.tag);
18
+ }
19
+ else
20
+ return getReleaseByTag(repo, config.tag);
21
+ };
22
+ try {
23
+ const release = await getRelease();
24
+ if (release) {
25
+ await Promise.all([
26
+ ...(release &&
27
+ release.assets
28
+ .filter((asset) => isValidOS(config.osName)(asset.name))
29
+ .map(async (asset) => download(asset.browser_download_url, destinationPath))),
30
+ ]);
31
+ }
32
+ else {
33
+ console.error(`No release found for [${config.osName}] OS name.`);
34
+ }
35
+ }
36
+ catch (error) {
37
+ console.error(`An error occurred while trying to download release assets: ${error}`);
38
+ if (error instanceof Error) {
39
+ console.error(error.stack);
40
+ }
41
+ throw new RosenAssetsDownloadError('', { cause: error });
42
+ }
43
+ };
44
+ export { downloadTssBinary };
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG93bmxvYWRUc3NCaW5hcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvZG93bmxvYWRUc3NCaW5hcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxRQUFRLE1BQU0sVUFBVSxDQUFDO0FBRWhDLE9BQU8sRUFDTCw0QkFBNEIsRUFDNUIsa0NBQWtDLEVBQ2xDLGVBQWUsR0FDaEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVuRCxNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FBQztBQUU5Qjs7OztHQUlHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLEVBQzdCLGVBQXVCLEVBQ3ZCLE1BS0MsRUFDRCxFQUFFO0lBQ0YsTUFBTSxVQUFVLEdBQUcsR0FBRyxFQUFFO1FBQ3RCLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTtZQUNoQixJQUFJLE1BQU0sRUFBRSxrQkFBa0I7Z0JBQzVCLE9BQU8sNEJBQTRCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzs7Z0JBQ25ELE9BQU8sa0NBQWtDLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNsRTs7WUFBTSxPQUFPLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xELENBQUMsQ0FBQztJQUNGLElBQUk7UUFDRixNQUFNLE9BQU8sR0FBRyxNQUFNLFVBQVUsRUFBRSxDQUFDO1FBRW5DLElBQUksT0FBTyxFQUFFO1lBQ1gsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO2dCQUNoQixHQUFHLENBQUMsT0FBTztvQkFDVCxPQUFPLENBQUMsTUFBTTt5QkFDWCxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO3lCQUN2RCxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQ25CLFFBQVEsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsZUFBZSxDQUFDLENBQ3RELENBQUM7YUFDUCxDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsTUFBTSxDQUFDLE1BQU0sWUFBWSxDQUFDLENBQUM7U0FDbkU7S0FDRjtJQUFDLE9BQU8sS0FBSyxFQUFFO1FBQ2QsT0FBTyxDQUFDLEtBQUssQ0FDWCw4REFBOEQsS0FBSyxFQUFFLENBQ3RFLENBQUM7UUFDRixJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUU7WUFDMUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUI7UUFDRCxNQUFNLElBQUksd0JBQXdCLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDMUQ7QUFDSCxDQUFDLENBQUM7QUFFRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkb3dubG9hZCBmcm9tICdkb3dubG9hZCc7XG5cbmltcG9ydCB7XG4gIGZpbmRMYXRlc3RSZWxlYXNlQnlQcmVmaXhUYWcsXG4gIGZpbmRMYXRlc3RTdGFibGVSZWxlYXNlQnlQcmVmaXhUYWcsXG4gIGdldFJlbGVhc2VCeVRhZyxcbn0gZnJvbSAnLi91dGlscy9naXRodWInO1xuaW1wb3J0IHsgaXNWYWxpZE9TIH0gZnJvbSAnLi91dGlscy9yb3Nlbic7XG5cbmltcG9ydCB7IFJvc2VuQXNzZXRzRG93bmxvYWRFcnJvciB9IGZyb20gJy4vZXJyb3InO1xuXG5jb25zdCByZXBvID0gJ3NpZ24tcHJvdG9jb2xzJztcblxuLyoqXG4gKiBEb3dubG9hZCByZWxlYXNlIGFzc2V0IGJ5IHRhZyB0byBhIHNwZWNpZmljIHBhdGhcbiAqIEBwYXJhbSBkZXN0aW5hdGlvblBhdGggd2hlcmUgd3JpdGVzIGZpbGVzXG4gKiBAcGFyYW0gY29uZmlnIGNvbmZpZ3MgZm9yIGluY2x1ZGluZyBwcmVyZWxlYXNlcywgc2V0IG9zTmFtZSwgZ2V0dGluZyBzcGVjaWZpYyByZWxlYXNlIGJ5IHRhZyBvciBieSByZWdleCB0YWdcbiAqL1xuY29uc3QgZG93bmxvYWRUc3NCaW5hcnkgPSBhc3luYyAoXG4gIGRlc3RpbmF0aW9uUGF0aDogc3RyaW5nLFxuICBjb25maWc6IHtcbiAgICBvc05hbWU6IHN0cmluZztcbiAgICB0YWc6IHN0cmluZztcbiAgICByZWdleDogYm9vbGVhbjtcbiAgICBpbmNsdWRlUHJlcmVsZWFzZXM/OiBib29sZWFuO1xuICB9XG4pID0+IHtcbiAgY29uc3QgZ2V0UmVsZWFzZSA9ICgpID0+IHtcbiAgICBpZiAoY29uZmlnLnJlZ2V4KSB7XG4gICAgICBpZiAoY29uZmlnPy5pbmNsdWRlUHJlcmVsZWFzZXMpXG4gICAgICAgIHJldHVybiBmaW5kTGF0ZXN0UmVsZWFzZUJ5UHJlZml4VGFnKHJlcG8sIGNvbmZpZy50YWcpO1xuICAgICAgZWxzZSByZXR1cm4gZmluZExhdGVzdFN0YWJsZVJlbGVhc2VCeVByZWZpeFRhZyhyZXBvLCBjb25maWcudGFnKTtcbiAgICB9IGVsc2UgcmV0dXJuIGdldFJlbGVhc2VCeVRhZyhyZXBvLCBjb25maWcudGFnKTtcbiAgfTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZWxlYXNlID0gYXdhaXQgZ2V0UmVsZWFzZSgpO1xuXG4gICAgaWYgKHJlbGVhc2UpIHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgLi4uKHJlbGVhc2UgJiZcbiAgICAgICAgICByZWxlYXNlLmFzc2V0c1xuICAgICAgICAgICAgLmZpbHRlcigoYXNzZXQpID0+IGlzVmFsaWRPUyhjb25maWcub3NOYW1lKShhc3NldC5uYW1lKSlcbiAgICAgICAgICAgIC5tYXAoYXN5bmMgKGFzc2V0KSA9PlxuICAgICAgICAgICAgICBkb3dubG9hZChhc3NldC5icm93c2VyX2Rvd25sb2FkX3VybCwgZGVzdGluYXRpb25QYXRoKVxuICAgICAgICAgICAgKSksXG4gICAgICBdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihgTm8gcmVsZWFzZSBmb3VuZCBmb3IgWyR7Y29uZmlnLm9zTmFtZX1dIE9TIG5hbWUuYCk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIGRvd25sb2FkIHJlbGVhc2UgYXNzZXRzOiAke2Vycm9yfWBcbiAgICApO1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yLnN0YWNrKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFJvc2VuQXNzZXRzRG93bmxvYWRFcnJvcignJywgeyBjYXVzZTogZXJyb3IgfSk7XG4gIH1cbn07XG5cbmV4cG9ydCB7IGRvd25sb2FkVHNzQmluYXJ5IH07XG4iXX0=
@@ -1,3 +1,4 @@
1
1
  export { default as downloadRosenAssets } from './downloadRosenAssets';
2
+ export * from './downloadTssBinary';
2
3
  export { RosenAssetsDownloadError } from './error';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvE,cAAc,qBAAqB,CAAC;AAEpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC"}
package/dist/lib/index.js CHANGED
@@ -1,3 +1,4 @@
1
1
  export { default as downloadRosenAssets } from './downloadRosenAssets';
2
+ export * from './downloadTssBinary';
2
3
  export { RosenAssetsDownloadError } from './error';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sSUFBSSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXZFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGRlZmF1bHQgYXMgZG93bmxvYWRSb3NlbkFzc2V0cyB9IGZyb20gJy4vZG93bmxvYWRSb3NlbkFzc2V0cyc7XG5cbmV4cG9ydCB7IFJvc2VuQXNzZXRzRG93bmxvYWRFcnJvciB9IGZyb20gJy4vZXJyb3InO1xuIl19
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sSUFBSSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZFLGNBQWMscUJBQXFCLENBQUM7QUFFcEMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZGVmYXVsdCBhcyBkb3dubG9hZFJvc2VuQXNzZXRzIH0gZnJvbSAnLi9kb3dubG9hZFJvc2VuQXNzZXRzJztcbmV4cG9ydCAqIGZyb20gJy4vZG93bmxvYWRUc3NCaW5hcnknO1xuXG5leHBvcnQgeyBSb3NlbkFzc2V0c0Rvd25sb2FkRXJyb3IgfSBmcm9tICcuL2Vycm9yJztcbiJdfQ==
@@ -2,5 +2,6 @@ import { Octokit } from 'octokit';
2
2
  export type ArrayElement<T extends any[]> = T extends (infer Element)[] ? Element : never;
3
3
  type GithubReleases = Awaited<ReturnType<InstanceType<typeof Octokit>['rest']['repos']['listReleases']>>['data'];
4
4
  export type GithubRelease = ArrayElement<GithubReleases>;
5
+ export type SupportedRepo = 'contract' | 'sign-protocols';
5
6
  export {};
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,OAAO,CAAC,EAAE,GACnE,OAAO,GACP,KAAK,CAAC;AAEV,KAAK,cAAc,GAAG,OAAO,CAC3B,UAAU,CAAC,YAAY,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAC1E,CAAC,MAAM,CAAC,CAAC;AAEV,MAAM,MAAM,aAAa,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,OAAO,CAAC,EAAE,GACnE,OAAO,GACP,KAAK,CAAC;AAEV,KAAK,cAAc,GAAG,OAAO,CAC3B,UAAU,CAAC,YAAY,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAC1E,CAAC,MAAM,CAAC,CAAC;AAEV,MAAM,MAAM,aAAa,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;AAEzD,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,gBAAgB,CAAC"}
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9jdG9raXQgfSBmcm9tICdvY3Rva2l0JztcblxuZXhwb3J0IHR5cGUgQXJyYXlFbGVtZW50PFQgZXh0ZW5kcyBhbnlbXT4gPSBUIGV4dGVuZHMgKGluZmVyIEVsZW1lbnQpW11cbiAgPyBFbGVtZW50XG4gIDogbmV2ZXI7XG5cbnR5cGUgR2l0aHViUmVsZWFzZXMgPSBBd2FpdGVkPFxuICBSZXR1cm5UeXBlPEluc3RhbmNlVHlwZTx0eXBlb2YgT2N0b2tpdD5bJ3Jlc3QnXVsncmVwb3MnXVsnbGlzdFJlbGVhc2VzJ10+XG4+WydkYXRhJ107XG5cbmV4cG9ydCB0eXBlIEdpdGh1YlJlbGVhc2UgPSBBcnJheUVsZW1lbnQ8R2l0aHViUmVsZWFzZXM+O1xuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9jdG9raXQgfSBmcm9tICdvY3Rva2l0JztcblxuZXhwb3J0IHR5cGUgQXJyYXlFbGVtZW50PFQgZXh0ZW5kcyBhbnlbXT4gPSBUIGV4dGVuZHMgKGluZmVyIEVsZW1lbnQpW11cbiAgPyBFbGVtZW50XG4gIDogbmV2ZXI7XG5cbnR5cGUgR2l0aHViUmVsZWFzZXMgPSBBd2FpdGVkPFxuICBSZXR1cm5UeXBlPEluc3RhbmNlVHlwZTx0eXBlb2YgT2N0b2tpdD5bJ3Jlc3QnXVsncmVwb3MnXVsnbGlzdFJlbGVhc2VzJ10+XG4+WydkYXRhJ107XG5cbmV4cG9ydCB0eXBlIEdpdGh1YlJlbGVhc2UgPSBBcnJheUVsZW1lbnQ8R2l0aHViUmVsZWFzZXM+O1xuXG5leHBvcnQgdHlwZSBTdXBwb3J0ZWRSZXBvID0gJ2NvbnRyYWN0JyB8ICdzaWduLXByb3RvY29scyc7XG4iXX0=
@@ -1,10 +1,11 @@
1
- import { GithubRelease } from '../types';
1
+ import { GithubRelease, SupportedRepo } from '../types';
2
2
  /**
3
3
  * Fetch a page of releases from Github Api in each iteration until there are no
4
4
  * more releases.
5
+ * @param repoName
5
6
  * @param pageSize
6
7
  */
7
- declare function fetchReleasesPage(pageSize?: number): AsyncGenerator<{
8
+ declare function fetchReleasesPage(repoName: SupportedRepo, pageSize?: number): AsyncGenerator<{
8
9
  url: string;
9
10
  html_url: string;
10
11
  assets_url: string;
@@ -101,9 +102,10 @@ declare function fetchReleasesPage(pageSize?: number): AsyncGenerator<{
101
102
  /**
102
103
  * Find the last release matching the predicate. If all releases are iterated and
103
104
  * no matching release is found, return null.
105
+ * @param repoName
104
106
  * @param predicate
105
107
  */
106
- declare const findLastRelease: (predicate?: (release: GithubRelease) => boolean) => Promise<{
108
+ declare const findLastRelease: (repoName: SupportedRepo, predicate?: (release: GithubRelease) => boolean) => Promise<{
107
109
  url: string;
108
110
  html_url: string;
109
111
  assets_url: string;
@@ -197,6 +199,105 @@ declare const findLastRelease: (predicate?: (release: GithubRelease) => boolean)
197
199
  rocket: number;
198
200
  } | undefined;
199
201
  } | null>;
202
+ /**
203
+ * get a GitHub release by its tag
204
+ * @param repoName
205
+ * @param tag
206
+ */
207
+ declare const getReleaseByTag: (repoName: SupportedRepo, tag: string) => Promise<{
208
+ url: string;
209
+ html_url: string;
210
+ assets_url: string;
211
+ upload_url: string;
212
+ tarball_url: string | null;
213
+ zipball_url: string | null;
214
+ id: number;
215
+ node_id: string;
216
+ tag_name: string;
217
+ target_commitish: string;
218
+ name: string | null;
219
+ body?: string | null | undefined;
220
+ draft: boolean;
221
+ prerelease: boolean;
222
+ created_at: string;
223
+ published_at: string | null;
224
+ author: {
225
+ name?: string | null | undefined;
226
+ email?: string | null | undefined;
227
+ login: string;
228
+ id: number;
229
+ node_id: string;
230
+ avatar_url: string;
231
+ gravatar_id: string | null;
232
+ url: string;
233
+ html_url: string;
234
+ followers_url: string;
235
+ following_url: string;
236
+ gists_url: string;
237
+ starred_url: string;
238
+ subscriptions_url: string;
239
+ organizations_url: string;
240
+ repos_url: string;
241
+ events_url: string;
242
+ received_events_url: string;
243
+ type: string;
244
+ site_admin: boolean;
245
+ starred_at?: string | undefined;
246
+ };
247
+ assets: {
248
+ url: string;
249
+ browser_download_url: string;
250
+ id: number;
251
+ node_id: string;
252
+ name: string;
253
+ label: string | null;
254
+ state: "uploaded" | "open";
255
+ content_type: string;
256
+ size: number;
257
+ download_count: number;
258
+ created_at: string;
259
+ updated_at: string;
260
+ uploader: {
261
+ name?: string | null | undefined;
262
+ email?: string | null | undefined;
263
+ login: string;
264
+ id: number;
265
+ node_id: string;
266
+ avatar_url: string;
267
+ gravatar_id: string | null;
268
+ url: string;
269
+ html_url: string;
270
+ followers_url: string;
271
+ following_url: string;
272
+ gists_url: string;
273
+ starred_url: string;
274
+ subscriptions_url: string;
275
+ organizations_url: string;
276
+ repos_url: string;
277
+ events_url: string;
278
+ received_events_url: string;
279
+ type: string;
280
+ site_admin: boolean;
281
+ starred_at?: string | undefined;
282
+ } | null;
283
+ }[];
284
+ body_html?: string | undefined;
285
+ body_text?: string | undefined;
286
+ mentions_count?: number | undefined;
287
+ discussion_url?: string | undefined;
288
+ reactions?: {
289
+ url: string;
290
+ total_count: number;
291
+ "+1": number;
292
+ "-1": number;
293
+ laugh: number;
294
+ confused: number;
295
+ heart: number;
296
+ hooray: number;
297
+ eyes: number;
298
+ rocket: number;
299
+ } | undefined;
300
+ }>;
200
301
  /**
201
302
  * Return a function which checks if a release has at least one asset for a
202
303
  * specific chain type
@@ -210,12 +311,24 @@ declare const hasAssetForChainType: (chainType: string) => (release: GithubRelea
210
311
  * @param chainType
211
312
  */
212
313
  declare const isStableReleaseForChainType: (chainType: string) => (release: GithubRelease) => boolean;
314
+ /**
315
+ * Return a function which checks if tagPrefix is matched with release tag_name
316
+ * @param tagPrefix
317
+ */
318
+ declare const hasMatchedTagPrefix: (tagPrefix: string) => (release: GithubRelease) => boolean;
319
+ /**
320
+ * Return a function which checks if a release is a stable (that is, non-prerelease),
321
+ * and tagPrefix is matched with release tag_name
322
+ * @param tagPrefix
323
+ */
324
+ declare const isStableReleaseForRegexTagType: (tagPrefix: string) => (release: GithubRelease) => boolean;
213
325
  /**
214
326
  * Find latest release (prerelease or non-prerelease) having some asset matching
215
327
  * a specific chain type
328
+ * @param repoName
216
329
  * @param chainType
217
330
  */
218
- declare const findLatestRelease: (chainType: string) => Promise<{
331
+ declare const findLatestRelease: (repoName: SupportedRepo, chainType: string) => Promise<{
219
332
  url: string;
220
333
  html_url: string;
221
334
  assets_url: string;
@@ -312,9 +425,208 @@ declare const findLatestRelease: (chainType: string) => Promise<{
312
425
  /**
313
426
  * Find latest stable (that is, non-prerelease) release having some asset matching
314
427
  * a specific chain type
428
+ * @param repoName
315
429
  * @param chainType
316
430
  */
317
- declare const findLatestStableRelease: (chainType: string) => Promise<{
431
+ declare const findLatestStableRelease: (repoName: SupportedRepo, chainType: string) => Promise<{
432
+ url: string;
433
+ html_url: string;
434
+ assets_url: string;
435
+ upload_url: string;
436
+ tarball_url: string | null;
437
+ zipball_url: string | null;
438
+ id: number;
439
+ node_id: string;
440
+ tag_name: string;
441
+ target_commitish: string;
442
+ name: string | null;
443
+ body?: string | null | undefined;
444
+ draft: boolean;
445
+ prerelease: boolean;
446
+ created_at: string;
447
+ published_at: string | null;
448
+ author: {
449
+ name?: string | null | undefined;
450
+ email?: string | null | undefined;
451
+ login: string;
452
+ id: number;
453
+ node_id: string;
454
+ avatar_url: string;
455
+ gravatar_id: string | null;
456
+ url: string;
457
+ html_url: string;
458
+ followers_url: string;
459
+ following_url: string;
460
+ gists_url: string;
461
+ starred_url: string;
462
+ subscriptions_url: string;
463
+ organizations_url: string;
464
+ repos_url: string;
465
+ events_url: string;
466
+ received_events_url: string;
467
+ type: string;
468
+ site_admin: boolean;
469
+ starred_at?: string | undefined;
470
+ };
471
+ assets: {
472
+ url: string;
473
+ browser_download_url: string;
474
+ id: number;
475
+ node_id: string;
476
+ name: string;
477
+ label: string | null;
478
+ state: "uploaded" | "open";
479
+ content_type: string;
480
+ size: number;
481
+ download_count: number;
482
+ created_at: string;
483
+ updated_at: string;
484
+ uploader: {
485
+ name?: string | null | undefined;
486
+ email?: string | null | undefined;
487
+ login: string;
488
+ id: number;
489
+ node_id: string;
490
+ avatar_url: string;
491
+ gravatar_id: string | null;
492
+ url: string;
493
+ html_url: string;
494
+ followers_url: string;
495
+ following_url: string;
496
+ gists_url: string;
497
+ starred_url: string;
498
+ subscriptions_url: string;
499
+ organizations_url: string;
500
+ repos_url: string;
501
+ events_url: string;
502
+ received_events_url: string;
503
+ type: string;
504
+ site_admin: boolean;
505
+ starred_at?: string | undefined;
506
+ } | null;
507
+ }[];
508
+ body_html?: string | undefined;
509
+ body_text?: string | undefined;
510
+ mentions_count?: number | undefined;
511
+ discussion_url?: string | undefined;
512
+ reactions?: {
513
+ url: string;
514
+ total_count: number;
515
+ "+1": number;
516
+ "-1": number;
517
+ laugh: number;
518
+ confused: number;
519
+ heart: number;
520
+ hooray: number;
521
+ eyes: number;
522
+ rocket: number;
523
+ } | undefined;
524
+ } | null>;
525
+ /**
526
+ * Find the latest stable (that is, non-prerelease) release that tagPrefix is matched with release tag_name
527
+ * @param repoName
528
+ * @param tagPrefix
529
+ */
530
+ declare const findLatestStableReleaseByPrefixTag: (repoName: SupportedRepo, tagPrefix: string) => Promise<{
531
+ url: string;
532
+ html_url: string;
533
+ assets_url: string;
534
+ upload_url: string;
535
+ tarball_url: string | null;
536
+ zipball_url: string | null;
537
+ id: number;
538
+ node_id: string;
539
+ tag_name: string;
540
+ target_commitish: string;
541
+ name: string | null;
542
+ body?: string | null | undefined;
543
+ draft: boolean;
544
+ prerelease: boolean;
545
+ created_at: string;
546
+ published_at: string | null;
547
+ author: {
548
+ name?: string | null | undefined;
549
+ email?: string | null | undefined;
550
+ login: string;
551
+ id: number;
552
+ node_id: string;
553
+ avatar_url: string;
554
+ gravatar_id: string | null;
555
+ url: string;
556
+ html_url: string;
557
+ followers_url: string;
558
+ following_url: string;
559
+ gists_url: string;
560
+ starred_url: string;
561
+ subscriptions_url: string;
562
+ organizations_url: string;
563
+ repos_url: string;
564
+ events_url: string;
565
+ received_events_url: string;
566
+ type: string;
567
+ site_admin: boolean;
568
+ starred_at?: string | undefined;
569
+ };
570
+ assets: {
571
+ url: string;
572
+ browser_download_url: string;
573
+ id: number;
574
+ node_id: string;
575
+ name: string;
576
+ label: string | null;
577
+ state: "uploaded" | "open";
578
+ content_type: string;
579
+ size: number;
580
+ download_count: number;
581
+ created_at: string;
582
+ updated_at: string;
583
+ uploader: {
584
+ name?: string | null | undefined;
585
+ email?: string | null | undefined;
586
+ login: string;
587
+ id: number;
588
+ node_id: string;
589
+ avatar_url: string;
590
+ gravatar_id: string | null;
591
+ url: string;
592
+ html_url: string;
593
+ followers_url: string;
594
+ following_url: string;
595
+ gists_url: string;
596
+ starred_url: string;
597
+ subscriptions_url: string;
598
+ organizations_url: string;
599
+ repos_url: string;
600
+ events_url: string;
601
+ received_events_url: string;
602
+ type: string;
603
+ site_admin: boolean;
604
+ starred_at?: string | undefined;
605
+ } | null;
606
+ }[];
607
+ body_html?: string | undefined;
608
+ body_text?: string | undefined;
609
+ mentions_count?: number | undefined;
610
+ discussion_url?: string | undefined;
611
+ reactions?: {
612
+ url: string;
613
+ total_count: number;
614
+ "+1": number;
615
+ "-1": number;
616
+ laugh: number;
617
+ confused: number;
618
+ heart: number;
619
+ hooray: number;
620
+ eyes: number;
621
+ rocket: number;
622
+ } | undefined;
623
+ } | null>;
624
+ /**
625
+ * Find the latest release that tagPrefix is matched with release tag_name
626
+ * @param repoName
627
+ * @param tagPrefix
628
+ */
629
+ declare const findLatestReleaseByPrefixTag: (repoName: SupportedRepo, tagPrefix: string) => Promise<{
318
630
  url: string;
319
631
  html_url: string;
320
632
  assets_url: string;
@@ -408,5 +720,5 @@ declare const findLatestStableRelease: (chainType: string) => Promise<{
408
720
  rocket: number;
409
721
  } | undefined;
410
722
  } | null>;
411
- export { fetchReleasesPage, findLastRelease, findLatestRelease, findLatestStableRelease, hasAssetForChainType, isStableReleaseForChainType, };
723
+ export { fetchReleasesPage, findLastRelease, findLatestRelease, findLatestStableRelease, findLatestStableReleaseByPrefixTag, findLatestReleaseByPrefixTag, getReleaseByTag, hasAssetForChainType, isStableReleaseForChainType, isStableReleaseForRegexTagType, hasMatchedTagPrefix, };
412
724
  //# sourceMappingURL=github.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../lib/utils/github.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;GAIG;AACH,iBAAgB,iBAAiB,CAC/B,QAAQ,SAAsC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAqB/C;AAED;;;;GAIG;AACH,QAAA,MAAM,eAAe,yBACE,aAAa,KAAK,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAY/C,CAAC;AAEF;;;;;GAKG;AACH,QAAA,MAAM,oBAAoB,cAAe,MAAM,eAAe,aAAa,YACE,CAAC;AAE9E;;;;GAIG;AACH,QAAA,MAAM,2BAA2B,cACnB,MAAM,eAAe,aAAa,YACmB,CAAC;AAEpE;;;;GAIG;AACH,QAAA,MAAM,iBAAiB,cAAqB,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SACA,CAAC;AAEnD;;;;GAIG;AACH,QAAA,MAAM,uBAAuB,cAAqB,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SACC,CAAC;AAE1D,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,2BAA2B,GAC5B,CAAC"}
1
+ {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../lib/utils/github.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAExD;;;;;GAKG;AACH,iBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,aAAa,EACvB,QAAQ,SAAsC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAqB/C;AAED;;;;;GAKG;AACH,QAAA,MAAM,eAAe,aACT,aAAa,wBACF,aAAa,KAAK,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAY/C,CAAC;AAEF;;;;GAIG;AACH,QAAA,MAAM,eAAe,aAAoB,aAAa,OAAO,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASlE,CAAC;AAEF;;;;;GAKG;AACH,QAAA,MAAM,oBAAoB,cAAe,MAAM,eAAe,aAAa,YACE,CAAC;AAE9E;;;;GAIG;AACH,QAAA,MAAM,2BAA2B,cACnB,MAAM,eAAe,aAAa,YACmB,CAAC;AAEpE;;;GAGG;AACH,QAAA,MAAM,mBAAmB,cAAe,MAAM,eAAe,aAAa,YAGzE,CAAC;AAEF;;;;GAIG;AACH,QAAA,MAAM,8BAA8B,cACtB,MAAM,eAAe,aAAa,YACkB,CAAC;AAEnE;;;;;GAKG;AACH,QAAA,MAAM,iBAAiB,aAAoB,aAAa,aAAa,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SACf,CAAC;AAE7D;;;;;GAKG;AACH,QAAA,MAAM,uBAAuB,aACjB,aAAa,aACZ,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SACmD,CAAC;AAEvE;;;;GAIG;AACH,QAAA,MAAM,kCAAkC,aAC5B,aAAa,aACZ,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SACsD,CAAC;AAE1E;;;;GAIG;AACH,QAAA,MAAM,4BAA4B,aACtB,aAAa,aACZ,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAC2C,CAAC;AAE/D,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,uBAAuB,EACvB,kCAAkC,EAClC,4BAA4B,EAC5B,eAAe,EACf,oBAAoB,EACpB,2BAA2B,EAC3B,8BAA8B,EAC9B,mBAAmB,GACpB,CAAC"}