@stackbit/dev-common 1.0.19-staging.2 → 1.0.19-staging.3

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/dist/index.d.ts CHANGED
@@ -4,4 +4,5 @@ export { default as socketService } from './services/socket-service';
4
4
  export * from './cms/content-store-adapter';
5
5
  export { CollectionItem, CollectionItemWithModel, SiteMap, Collections, Schema } from './types/index';
6
6
  export { checkAndLogNewerVersions, checkAndLogContentSourceVersions } from './utils/version-utils';
7
+ export * from './utils/remote-content-source';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACrE,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACtG,OAAO,EAAE,wBAAwB,EAAE,gCAAgC,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACrE,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACtG,OAAO,EAAE,wBAAwB,EAAE,gCAAgC,EAAE,MAAM,uBAAuB,CAAC;AACnG,cAAc,+BAA+B,CAAC"}
package/dist/index.js CHANGED
@@ -28,4 +28,5 @@ __exportStar(require("./cms/content-store-adapter"), exports);
28
28
  var version_utils_1 = require("./utils/version-utils");
29
29
  Object.defineProperty(exports, "checkAndLogNewerVersions", { enumerable: true, get: function () { return version_utils_1.checkAndLogNewerVersions; } });
30
30
  Object.defineProperty(exports, "checkAndLogContentSourceVersions", { enumerable: true, get: function () { return version_utils_1.checkAndLogContentSourceVersions; } });
31
+ __exportStar(require("./utils/remote-content-source"), exports);
31
32
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,0CAAoD;AAA3C,iHAAA,OAAO,OAAU;AAC1B,yCAAyC;AAAhC,+FAAA,MAAM,OAAA;AACf,4DAAqE;AAA5D,gIAAA,OAAO,OAAiB;AACjC,8DAA4C;AAE5C,uDAAmG;AAA1F,yHAAA,wBAAwB,OAAA;AAAE,iIAAA,gCAAgC,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,0CAAoD;AAA3C,iHAAA,OAAO,OAAU;AAC1B,yCAAyC;AAAhC,+FAAA,MAAM,OAAA;AACf,4DAAqE;AAA5D,gIAAA,OAAO,OAAiB;AACjC,8DAA4C;AAE5C,uDAAmG;AAA1F,yHAAA,wBAAwB,OAAA;AAAE,iIAAA,gCAAgC,OAAA;AACnE,gEAA8C"}
@@ -0,0 +1,40 @@
1
+ import { Logger } from '@stackbit/types';
2
+ export type Extension = {
3
+ id: number;
4
+ integrationName: string;
5
+ integrationSlug: string;
6
+ lightLogoPath: string;
7
+ darkLogoPath: string;
8
+ createdAt: string;
9
+ updatedAt: string;
10
+ teamInstallationId: number;
11
+ siteId: string;
12
+ dataLayerId: string;
13
+ configurationType: 'create';
14
+ config: Record<string, string>;
15
+ sourceUrl: string;
16
+ name: string;
17
+ hostSiteUrl: string;
18
+ prefix: string;
19
+ };
20
+ type GetContentSourceParams = {
21
+ siteId: string;
22
+ teamId: string;
23
+ netlifyAccessToken?: string;
24
+ projectId?: string;
25
+ apiSecret?: string;
26
+ logger: Logger;
27
+ baseURL: string;
28
+ };
29
+ export declare const getRemoteContentSources: ({ siteId, teamId, projectId, netlifyAccessToken, apiSecret, logger, baseURL }: GetContentSourceParams) => Promise<Extension[]>;
30
+ export declare const installRemoteContentSources: ({ extensions, rootDir, logger }: {
31
+ extensions: Extension[];
32
+ rootDir: string;
33
+ logger: Logger;
34
+ }) => Promise<{
35
+ path: string;
36
+ id: number;
37
+ config: Record<string, unknown>;
38
+ }[]>;
39
+ export {};
40
+ //# sourceMappingURL=remote-content-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-content-source.d.ts","sourceRoot":"","sources":["../../src/utils/remote-content-source.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGzC,MAAM,MAAM,SAAS,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,QAAQ,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,sBAAsB,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,uBAAuB,kFAAyF,sBAAsB,yBAwBlJ,CAAC;AAEF,eAAO,MAAM,2BAA2B;gBAKxB,SAAS,EAAE;aACd,MAAM;YACP,MAAM;MACd,QAAQ;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,EAAE,CAqB1E,CAAC"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.installRemoteContentSources = exports.getRemoteContentSources = void 0;
7
+ const url_1 = require("url");
8
+ const crypto_1 = __importDefault(require("crypto"));
9
+ const axios_1 = __importDefault(require("axios"));
10
+ const cms_core_1 = require("@stackbit/cms-core");
11
+ const getRemoteContentSources = async ({ siteId, teamId, projectId, netlifyAccessToken, apiSecret, logger, baseURL }) => {
12
+ try {
13
+ const headers = {
14
+ 'Content-Type': 'application/json',
15
+ Authorization: `Bearer ${apiSecret ?? netlifyAccessToken}`
16
+ };
17
+ let urlPath = 'core/site-extensions-config';
18
+ if (netlifyAccessToken) {
19
+ headers['x-nf-request-id'] = crypto_1.default.randomBytes(16).toString('hex');
20
+ }
21
+ else {
22
+ urlPath = `${urlPath}/${projectId}`;
23
+ }
24
+ const url = new url_1.URL(urlPath, baseURL);
25
+ url.searchParams.set('configuration_type', 'create');
26
+ url.searchParams.set('site_id', siteId);
27
+ url.searchParams.set('team_id', teamId);
28
+ const response = await (0, axios_1.default)(url.toString(), { headers });
29
+ return response.data;
30
+ }
31
+ catch (error) {
32
+ logger.debug('Error fetching remote content sources', { error });
33
+ return [];
34
+ }
35
+ };
36
+ exports.getRemoteContentSources = getRemoteContentSources;
37
+ const installRemoteContentSources = async ({ extensions, rootDir, logger }) => {
38
+ const modulesToInstall = extensions.map((extension, index) => `${extension.integrationSlug}-connector@${extension.sourceUrl}?v=${Math.random()}-${index}`);
39
+ const result = extensions.map((extension) => ({
40
+ id: extension.id,
41
+ config: extension.config,
42
+ path: `${rootDir}/.stackbit/.cache/remote-content-sources/node_modules/${extension.integrationSlug}-connector/netlify-create.js`
43
+ }));
44
+ const runCommand = (0, cms_core_1.getCommandRunner)({ env: process.env });
45
+ try {
46
+ await runCommand('npm', ['install', ...modulesToInstall, '--no-save', '--prefix', '.stackbit/.cache/remote-content-sources', '--exact'], {
47
+ env: process.env,
48
+ cwd: rootDir,
49
+ logger
50
+ });
51
+ return result;
52
+ }
53
+ catch (error) {
54
+ logger.error(`Error installing remote content sources: ${modulesToInstall.join(',')}`, error);
55
+ return [];
56
+ }
57
+ };
58
+ exports.installRemoteContentSources = installRemoteContentSources;
59
+ //# sourceMappingURL=remote-content-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-content-source.js","sourceRoot":"","sources":["../../src/utils/remote-content-source.ts"],"names":[],"mappings":";;;;;;AAAA,6BAA0B;AAC1B,oDAA4B;AAC5B,kDAA0B;AAE1B,iDAAsD;AA+B/C,MAAM,uBAAuB,GAAG,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAA0B,EAAE,EAAE;IACnJ,IAAI;QACA,MAAM,OAAO,GAA2B;YACpC,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,SAAS,IAAI,kBAAkB,EAAE;SAC7D,CAAC;QACF,IAAI,OAAO,GAAG,6BAA6B,CAAC;QAE5C,IAAI,kBAAkB,EAAE;YACpB,OAAO,CAAC,iBAAiB,CAAC,GAAG,gBAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SACvE;aAAM;YACH,OAAO,GAAG,GAAG,OAAO,IAAI,SAAS,EAAE,CAAC;SACvC;QAED,MAAM,GAAG,GAAG,IAAI,SAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACtC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;QACrD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACxC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,MAAM,IAAA,eAAK,EAAc,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACvE,OAAO,QAAQ,CAAC,IAAI,CAAC;KACxB;IAAC,OAAO,KAAK,EAAE;QACZ,MAAM,CAAC,KAAK,CAAC,uCAAuC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACjE,OAAO,EAAE,CAAC;KACb;AACL,CAAC,CAAC;AAxBW,QAAA,uBAAuB,2BAwBlC;AAEK,MAAM,2BAA2B,GAAG,KAAK,EAAE,EAC9C,UAAU,EACV,OAAO,EACP,MAAM,EAKT,EAA4E,EAAE;IAC3E,MAAM,gBAAgB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC,eAAe,cAAc,SAAS,CAAC,SAAS,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC;IAC3J,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC1C,EAAE,EAAE,SAAS,CAAC,EAAE;QAChB,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,IAAI,EAAE,GAAG,OAAO,yDAAyD,SAAS,CAAC,eAAe,8BAA8B;KACnI,CAAC,CAAC,CAAC;IAEJ,MAAM,UAAU,GAAG,IAAA,2BAAgB,EAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1D,IAAI;QACA,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,GAAG,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,yCAAyC,EAAE,SAAS,CAAC,EAAE;YACrI,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,GAAG,EAAE,OAAO;YACZ,MAAM;SACT,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;KACjB;IAAC,OAAO,KAAK,EAAE;QACZ,MAAM,CAAC,KAAK,CAAC,4CAA4C,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC9F,OAAO,EAAE,CAAC;KACb;AACL,CAAC,CAAC;AA7BW,QAAA,2BAA2B,+BA6BtC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stackbit/dev-common",
3
- "version": "1.0.19-staging.2",
3
+ "version": "1.0.19-staging.3",
4
4
  "description": "stackbit-dev",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -19,13 +19,13 @@
19
19
  "dependencies": {
20
20
  "@iarna/toml": "^2.2.5",
21
21
  "@stackbit/artisanal-names": "^1.0.1",
22
- "@stackbit/cms-contentful": "1.0.18-staging.2",
23
- "@stackbit/cms-core": "3.1.8-staging.2",
24
- "@stackbit/cms-git": "1.0.18-staging.2",
25
- "@stackbit/cms-sanity": "0.2.75-staging.2",
26
- "@stackbit/sdk": "2.1.5-staging.2",
22
+ "@stackbit/cms-contentful": "1.0.18-staging.3",
23
+ "@stackbit/cms-core": "3.1.8-staging.3",
24
+ "@stackbit/cms-git": "1.0.18-staging.3",
25
+ "@stackbit/cms-sanity": "0.2.75-staging.3",
26
+ "@stackbit/sdk": "2.1.5-staging.3",
27
27
  "@stackbit/types": "2.1.2-staging.1",
28
- "@stackbit/utils": "0.7.4-staging.1",
28
+ "@stackbit/utils": "0.7.4-staging.2",
29
29
  "axios": "^1.7.7",
30
30
  "chalk": "^4.0.1",
31
31
  "configstore": "^5",
@@ -52,5 +52,5 @@
52
52
  "@types/lodash": "^4.14.178",
53
53
  "@types/uuid": "^8.3.4"
54
54
  },
55
- "gitHead": "1afc9b5e353f47cd779cba5eaa572a3a727c3516"
55
+ "gitHead": "efe455b58275dfbaa0fdb3ebf338e7c025fde7cd"
56
56
  }
package/src/index.ts CHANGED
@@ -4,3 +4,4 @@ export { default as socketService } from './services/socket-service';
4
4
  export * from './cms/content-store-adapter';
5
5
  export { CollectionItem, CollectionItemWithModel, SiteMap, Collections, Schema } from './types/index';
6
6
  export { checkAndLogNewerVersions, checkAndLogContentSourceVersions } from './utils/version-utils';
7
+ export * from './utils/remote-content-source';
@@ -0,0 +1,91 @@
1
+ import { URL } from 'url';
2
+ import crypto from 'crypto';
3
+ import axios from 'axios';
4
+ import { Logger } from '@stackbit/types';
5
+ import { getCommandRunner } from '@stackbit/cms-core';
6
+
7
+ export type Extension = {
8
+ id: number;
9
+ integrationName: string;
10
+ integrationSlug: string;
11
+ lightLogoPath: string;
12
+ darkLogoPath: string;
13
+ createdAt: string;
14
+ updatedAt: string;
15
+ teamInstallationId: number;
16
+ siteId: string;
17
+ dataLayerId: string;
18
+ configurationType: 'create';
19
+ config: Record<string, string>;
20
+ sourceUrl: string;
21
+ name: string;
22
+ hostSiteUrl: string;
23
+ prefix: string;
24
+ };
25
+
26
+ type GetContentSourceParams = {
27
+ siteId: string;
28
+ teamId: string;
29
+ netlifyAccessToken?: string;
30
+ projectId?: string;
31
+ apiSecret?: string;
32
+ logger: Logger;
33
+ baseURL: string;
34
+ };
35
+
36
+ export const getRemoteContentSources = async ({ siteId, teamId, projectId, netlifyAccessToken, apiSecret, logger, baseURL }: GetContentSourceParams) => {
37
+ try {
38
+ const headers: Record<string, string> = {
39
+ 'Content-Type': 'application/json',
40
+ Authorization: `Bearer ${apiSecret ?? netlifyAccessToken}`
41
+ };
42
+ let urlPath = 'core/site-extensions-config';
43
+
44
+ if (netlifyAccessToken) {
45
+ headers['x-nf-request-id'] = crypto.randomBytes(16).toString('hex');
46
+ } else {
47
+ urlPath = `${urlPath}/${projectId}`;
48
+ }
49
+
50
+ const url = new URL(urlPath, baseURL);
51
+ url.searchParams.set('configuration_type', 'create');
52
+ url.searchParams.set('site_id', siteId);
53
+ url.searchParams.set('team_id', teamId);
54
+ const response = await axios<Extension[]>(url.toString(), { headers });
55
+ return response.data;
56
+ } catch (error) {
57
+ logger.debug('Error fetching remote content sources', { error });
58
+ return [];
59
+ }
60
+ };
61
+
62
+ export const installRemoteContentSources = async ({
63
+ extensions,
64
+ rootDir,
65
+ logger
66
+ }: {
67
+ extensions: Extension[];
68
+ rootDir: string;
69
+ logger: Logger;
70
+ }): Promise<{ path: string; id: number; config: Record<string, unknown> }[]> => {
71
+ const modulesToInstall = extensions.map((extension, index) => `${extension.integrationSlug}-connector@${extension.sourceUrl}?v=${Math.random()}-${index}`);
72
+ const result = extensions.map((extension) => ({
73
+ id: extension.id,
74
+ config: extension.config,
75
+ path: `${rootDir}/.stackbit/.cache/remote-content-sources/node_modules/${extension.integrationSlug}-connector/netlify-create.js`
76
+ }));
77
+
78
+ const runCommand = getCommandRunner({ env: process.env });
79
+ try {
80
+ await runCommand('npm', ['install', ...modulesToInstall, '--no-save', '--prefix', '.stackbit/.cache/remote-content-sources', '--exact'], {
81
+ env: process.env,
82
+ cwd: rootDir,
83
+ logger
84
+ });
85
+
86
+ return result;
87
+ } catch (error) {
88
+ logger.error(`Error installing remote content sources: ${modulesToInstall.join(',')}`, error);
89
+ return [];
90
+ }
91
+ };