@dcl/opscli 1.0.0-3806607733.commit-30a772c → 1.0.0-3932976398.commit-a4b8069

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -52,6 +52,23 @@ Raw data for rollout "_site" for domain "play.decentraland.zone"
52
52
  ```
53
53
 
54
54
 
55
+
56
+ ### `download-entity`
57
+
58
+ Downloads a specific entity from a content server, as specified in https://adr.decentraland.org/adr/ADR-79
59
+
60
+ It creates an extra file named `.metadata` including the deployment metadata. Which in some cases (wearables) is not present as a file in the deployed entity.
61
+
62
+ In the specified folder, it will create one
63
+
64
+ ```
65
+ $ npx @dcl/opscli download-entity \
66
+ --content-server https://play.decentraland.org/content \
67
+ --pointer=0,0 \
68
+ --pointer=urn:decentraland:off-chain:base-avatars:brown_pants \
69
+ --out ~/Downloads
70
+ ```
71
+
55
72
  ### `query-rollout`
56
73
 
57
74
  Usage:
package/dist/bin.js CHANGED
@@ -12,6 +12,7 @@ const commands = {
12
12
  "update-renderer-upm": "./commands/update-renderer-upm",
13
13
  "secret-manager": "./commands/secret-manager",
14
14
  "parameters-manager": "./commands/parameters-manager",
15
+ "download-entity": "./commands/download-entity",
15
16
  "circleci": "./commands/circleci"
16
17
  };
17
18
  async function main() {
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";;;;AAEA,MAAa,QAAS,SAAQ,KAAK;CAAG;AAAtC,4BAAsC;AAEtC,MAAM,QAAQ,GAAG;IACf,eAAe,EAAE,0BAA0B;IAC3C,uBAAuB,EAAE,kCAAkC;IAC3D,qBAAqB,EAAE,gCAAgC;IACvD,qBAAqB,EAAE,gCAAgC;IACvD,gBAAgB,EAAE,2BAA2B;IAC7C,oBAAoB,EAAE,+BAA+B;IACrD,UAAU,EAAE,qBAAqB;CAClC,CAAA;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAA0B,CAAA;IAE5D,IAAI,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;QAC1C,MAAM,IAAI,QAAQ,CAChB,kCAAkC;YAChC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;iBAClB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,GAAG,CAAC,GAAG,IAAI,CAAC;iBAC3C,IAAI,CAAC,EAAE,CAAC,CACd,CAAA;KACF;IAED,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAA;IAEjD,MAAM,EAAE,EAAE,CAAA;AACZ,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,IAAI,GAAG,YAAY,QAAQ,EAAE;QAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;KACzB;SAAM;QACL,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;KACnB;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";;;;AAEA,MAAa,QAAS,SAAQ,KAAK;CAAG;AAAtC,4BAAsC;AAEtC,MAAM,QAAQ,GAAG;IACf,eAAe,EAAE,0BAA0B;IAC3C,uBAAuB,EAAE,kCAAkC;IAC3D,qBAAqB,EAAE,gCAAgC;IACvD,qBAAqB,EAAE,gCAAgC;IACvD,gBAAgB,EAAE,2BAA2B;IAC7C,oBAAoB,EAAE,+BAA+B;IACrD,iBAAiB,EAAE,4BAA4B;IAC/C,UAAU,EAAE,qBAAqB;CAClC,CAAA;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAA0B,CAAA;IAE5D,IAAI,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;QAC1C,MAAM,IAAI,QAAQ,CAChB,kCAAkC;YAChC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;iBAClB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,GAAG,CAAC,GAAG,IAAI,CAAC;iBAC3C,IAAI,CAAC,EAAE,CAAC,CACd,CAAA;KACF;IAED,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAA;IAEjD,MAAM,EAAE,EAAE,CAAA;AACZ,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,IAAI,GAAG,YAAY,QAAQ,EAAE;QAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;KACzB;SAAM;QACL,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;KACnB;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ declare const _default: () => Promise<void>;
2
+ export default _default;
3
+ //# sourceMappingURL=download-entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download-entity.d.ts","sourceRoot":"","sources":["../../src/commands/download-entity.ts"],"names":[],"mappings":";AAKA,wBAoBC"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ const arg_1 = __importDefault(require("arg"));
26
+ const path_1 = __importStar(require("path"));
27
+ const assert_1 = require("../helpers/assert");
28
+ const downloads_1 = require("../helpers/downloads");
29
+ exports.default = async () => {
30
+ const args = (0, arg_1.default)({
31
+ "--pointer": [String],
32
+ "--content-server": String,
33
+ "--out": String,
34
+ });
35
+ const pointers = args["--pointer"];
36
+ (0, assert_1.assert)(pointers.length > 0, "--pointer is missing");
37
+ const server = (args["--content-server"] || "https://peer.decentraland.org/content").replace(/\/$/, "");
38
+ const out = args["--out"] || process.cwd();
39
+ const entities = await (0, downloads_1.getEntities)(pointers, server);
40
+ for (const entity of entities) {
41
+ const destFolder = (0, path_1.resolve)(out, entity.pointers[0]) + path_1.default.sep;
42
+ console.log(`\nDownloading entity with pointers ${entity.pointers.join(',')} into ${destFolder}`);
43
+ await (0, downloads_1.downloadEntityAndMetadata)(entity, server, out);
44
+ }
45
+ };
46
+ //# sourceMappingURL=download-entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download-entity.js","sourceRoot":"","sources":["../../src/commands/download-entity.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,8CAAqB;AACrB,6CAAoC;AACpC,8CAA0C;AAC1C,oDAA6E;AAE7E,kBAAe,KAAK,IAAI,EAAE;IACxB,MAAM,IAAI,GAAG,IAAA,aAAG,EAAC;QACf,WAAW,EAAE,CAAC,MAAM,CAAC;QACrB,kBAAkB,EAAE,MAAM;QAC1B,OAAO,EAAE,MAAM;KAChB,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAE,CAAA;IAEnC,IAAA,eAAM,EAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,sBAAsB,CAAC,CAAA;IAEnD,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,uCAAuC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACvG,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;IAE1C,MAAM,QAAQ,GAAG,MAAM,IAAA,uBAAW,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IACpD,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE;QAC7B,MAAM,UAAU,GAAG,IAAA,cAAO,EAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,cAAI,CAAC,GAAG,CAAA;QAC9D,OAAO,CAAC,GAAG,CAAC,sCAAsC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,UAAU,EAAE,CAAC,CAAA;QACjG,MAAM,IAAA,qCAAyB,EAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;KACrD;AACH,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { Entity } from "@dcl/schemas";
2
+ export declare function downloadEntity(entity: Entity, server: string, destFolder: string): Promise<void>;
3
+ export declare const downloadFile: (server: string, cid: string, filepath: string) => Promise<void>;
4
+ export declare function getEntities(pointers: string[], sourceServer: string): Promise<Entity[]>;
5
+ export declare function downloadEntityAndMetadata(entity: Entity, server: string, destFolder: string): Promise<void>;
6
+ //# sourceMappingURL=downloads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"downloads.d.ts","sourceRoot":"","sources":["../../src/helpers/downloads.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAYtF;AAED,eAAO,MAAM,YAAY,WAA2B,MAAM,OAAO,MAAM,YAAY,MAAM,kBAMxF,CAAA;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAe7F;AAED,wBAAsB,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAKjG"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.downloadEntityAndMetadata = exports.getEntities = exports.downloadFile = exports.downloadEntity = void 0;
4
+ const undici_1 = require("undici");
5
+ const path_1 = require("path");
6
+ const promises_1 = require("fs/promises");
7
+ const fs_1 = require("fs");
8
+ async function downloadEntity(entity, server, destFolder) {
9
+ await (0, promises_1.mkdir)(destFolder, { recursive: true });
10
+ for (const x of entity.content) {
11
+ const out = (0, path_1.resolve)(destFolder, x.file);
12
+ if (!(0, fs_1.existsSync)(out)) {
13
+ await (0, exports.downloadFile)(server, x.hash, out);
14
+ }
15
+ else {
16
+ console.log(` ⚠️ File ${out} already exists, it won't be replaced by remote copy`);
17
+ process.exitCode = 1;
18
+ }
19
+ }
20
+ }
21
+ exports.downloadEntity = downloadEntity;
22
+ const downloadFile = async function (server, cid, filepath) {
23
+ const data = await (await (0, undici_1.fetch)(server + "/contents/" + cid)).arrayBuffer();
24
+ await (0, promises_1.mkdir)((0, path_1.dirname)(filepath), { recursive: true });
25
+ await (0, promises_1.writeFile)(filepath, Buffer.from(data));
26
+ };
27
+ exports.downloadFile = downloadFile;
28
+ async function getEntities(pointers, sourceServer) {
29
+ const url = `${sourceServer}/entities/active`;
30
+ const res = await (0, undici_1.fetch)(url, {
31
+ method: "post",
32
+ body: JSON.stringify({ pointers }),
33
+ headers: { "content-type": "application/json" },
34
+ });
35
+ const response = await res.text();
36
+ if (!res.ok) {
37
+ throw new Error("Error fetching list of active entities: " + response);
38
+ }
39
+ return JSON.parse(response);
40
+ }
41
+ exports.getEntities = getEntities;
42
+ async function downloadEntityAndMetadata(entity, server, destFolder) {
43
+ await downloadEntity(entity, server, destFolder);
44
+ await (0, promises_1.writeFile)((0, path_1.resolve)(destFolder, ".metadata"), JSON.stringify(entity.metadata, null, 2));
45
+ console.log("> Entity downloaded to " + destFolder);
46
+ }
47
+ exports.downloadEntityAndMetadata = downloadEntityAndMetadata;
48
+ //# sourceMappingURL=downloads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"downloads.js","sourceRoot":"","sources":["../../src/helpers/downloads.ts"],"names":[],"mappings":";;;AAAA,mCAA8B;AAC9B,+BAAuC;AACvC,0CAA8C;AAC9C,2BAA+B;AAGxB,KAAK,UAAU,cAAc,CAAC,MAAc,EAAE,MAAc,EAAE,UAAkB;IACrF,MAAM,IAAA,gBAAK,EAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAE5C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE;QAC9B,MAAM,GAAG,GAAG,IAAA,cAAO,EAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;QACvC,IAAI,CAAC,IAAA,eAAU,EAAC,GAAG,CAAC,EAAE;YACpB,MAAM,IAAA,oBAAY,EAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;SACxC;aAAM;YACL,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,sDAAsD,CAAC,CAAA;YACnF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;SACrB;KACF;AACH,CAAC;AAZD,wCAYC;AAEM,MAAM,YAAY,GAAG,KAAK,WAAW,MAAc,EAAE,GAAW,EAAE,QAAgB;IACvF,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,IAAA,cAAK,EAAC,MAAM,GAAG,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;IAE3E,MAAM,IAAA,gBAAK,EAAC,IAAA,cAAO,EAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAEnD,MAAM,IAAA,oBAAS,EAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AAC9C,CAAC,CAAA;AANY,QAAA,YAAY,gBAMxB;AAEM,KAAK,UAAU,WAAW,CAAC,QAAkB,EAAE,YAAoB;IACxE,MAAM,GAAG,GAAG,GAAG,YAAY,kBAAkB,CAAA;IAC7C,MAAM,GAAG,GAAG,MAAM,IAAA,cAAK,EAAC,GAAG,EAAE;QAC3B,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;QAClC,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;IAEjC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;QACX,MAAM,IAAI,KAAK,CAAC,0CAA0C,GAAG,QAAQ,CAAC,CAAA;KACvE;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;AAC7B,CAAC;AAfD,kCAeC;AAEM,KAAK,UAAU,yBAAyB,CAAC,MAAc,EAAE,MAAc,EAAE,UAAkB;IAChG,MAAM,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;IAEhD,MAAM,IAAA,oBAAS,EAAC,IAAA,cAAO,EAAC,UAAU,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAC3F,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,UAAU,CAAC,CAAA;AACrD,CAAC;AALD,8DAKC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dcl/opscli",
3
- "version": "1.0.0-3806607733.commit-30a772c",
3
+ "version": "1.0.0-3932976398.commit-a4b8069",
4
4
  "description": "base component",
5
5
  "bin": "dist/bin.js",
6
6
  "main": "dist/index.js",
@@ -33,12 +33,13 @@
33
33
  "typescript": "^4.3.5"
34
34
  },
35
35
  "dependencies": {
36
+ "@dcl/schemas": "^6.4.2",
36
37
  "arg": "^5.0.2",
37
38
  "simple-git": "^3.14.0",
38
- "undici": "^5.10.0"
39
+ "undici": "^5.15.0"
39
40
  },
40
41
  "files": [
41
42
  "dist"
42
43
  ],
43
- "commit": "30a772c206a53d41a733b05d19b0c129ff3642b2"
44
+ "commit": "a4b80691bde977e63a4830ed728c64a9e7a53ab8"
44
45
  }