@appsemble/cli 0.20.8 → 0.20.11
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/__fixtures__/getBlockConfigFromTypeScript/comments/index.ts +40 -0
- package/__fixtures__/getBlockConfigFromTypeScript/comments/tsconfig.json +7 -0
- package/__fixtures__/getBlockConfigFromTypeScript/duplicateActions/index.ts +34 -0
- package/__fixtures__/getBlockConfigFromTypeScript/duplicateActions/tsconfig.json +7 -0
- package/__fixtures__/getBlockConfigFromTypeScript/duplicateEventEmitters/index.ts +34 -0
- package/__fixtures__/getBlockConfigFromTypeScript/duplicateEventEmitters/tsconfig.json +7 -0
- package/__fixtures__/getBlockConfigFromTypeScript/duplicateEventListeners/index.ts +34 -0
- package/__fixtures__/getBlockConfigFromTypeScript/duplicateEventListeners/tsconfig.json +7 -0
- package/__fixtures__/getBlockConfigFromTypeScript/duplicateParameters/index.ts +34 -0
- package/__fixtures__/getBlockConfigFromTypeScript/duplicateParameters/tsconfig.json +7 -0
- package/__fixtures__/getBlockConfigFromTypeScript/fontawesomeParameters/index.ts +11 -0
- package/__fixtures__/getBlockConfigFromTypeScript/fontawesomeParameters/tsconfig.json +7 -0
- package/__fixtures__/getBlockConfigFromTypeScript/tsError/index.ts +4 -0
- package/__fixtures__/getBlockConfigFromTypeScript/tsError/tsconfig.json +8 -0
- package/__fixtures__/getBlockConfigFromTypeScript/valid/index.ts +28 -0
- package/__fixtures__/getBlockConfigFromTypeScript/valid/tsconfig.json +7 -0
- package/__fixtures__/makePayload/no-icon/output/block.js +1 -0
- package/__fixtures__/makePayload/with-icon/icon.svg +2 -0
- package/__fixtures__/makePayload/with-icon/output/block.js +1 -0
- package/assets/appsemblerc.schema.json +150 -0
- package/changed/added/.gitkeep +0 -0
- package/changed/changed/.gitkeep +0 -0
- package/changed/deprecated/.gitkeep +0 -0
- package/changed/fixed/.gitkeep +0 -0
- package/changed/removed/.gitkeep +0 -0
- package/changed/security/.gitkeep +0 -0
- package/{dist/commands → commands}/app/create.d.ts +0 -0
- package/{dist/commands → commands}/app/create.js +0 -0
- package/commands/app/create.js.map +1 -0
- package/commands/app/create.ts +104 -0
- package/{dist/commands → commands}/app/extract-messages.d.ts +0 -0
- package/{dist/commands → commands}/app/extract-messages.js +0 -0
- package/commands/app/extract-messages.js.map +1 -0
- package/commands/app/extract-messages.ts +56 -0
- package/{dist/commands → commands}/app/index.d.ts +0 -0
- package/{dist/commands → commands}/app/index.js +0 -0
- package/commands/app/index.js.map +1 -0
- package/commands/app/index.ts +14 -0
- package/{dist/commands → commands}/app/update.d.ts +0 -0
- package/{dist/commands → commands}/app/update.js +0 -0
- package/commands/app/update.js.map +1 -0
- package/commands/app/update.ts +111 -0
- package/{dist/commands → commands}/asset/create.d.ts +0 -0
- package/{dist/commands → commands}/asset/create.js +0 -0
- package/commands/asset/create.js.map +1 -0
- package/commands/asset/create.ts +84 -0
- package/{dist/commands → commands}/asset/index.d.ts +0 -0
- package/{dist/commands → commands}/asset/index.js +0 -0
- package/commands/asset/index.js.map +1 -0
- package/commands/asset/index.ts +12 -0
- package/{dist/commands → commands}/block/build.d.ts +0 -0
- package/{dist/commands → commands}/block/build.js +0 -0
- package/commands/block/build.js.map +1 -0
- package/commands/block/build.ts +32 -0
- package/{dist/commands → commands}/block/extract-messages.d.ts +0 -0
- package/{dist/commands → commands}/block/extract-messages.js +0 -0
- package/commands/block/extract-messages.js.map +1 -0
- package/commands/block/extract-messages.ts +41 -0
- package/{dist/commands → commands}/block/index.d.ts +0 -0
- package/{dist/commands → commands}/block/index.js +0 -0
- package/commands/block/index.js.map +1 -0
- package/commands/block/index.ts +14 -0
- package/{dist/commands → commands}/block/publish.d.ts +0 -0
- package/{dist/commands → commands}/block/publish.js +0 -0
- package/commands/block/publish.js.map +1 -0
- package/commands/block/publish.ts +58 -0
- package/{dist/commands → commands}/cleanupResources.d.ts +0 -0
- package/{dist/commands → commands}/cleanupResources.js +0 -0
- package/commands/cleanupResources.js.map +1 -0
- package/commands/cleanupResources.ts +45 -0
- package/{dist/commands → commands}/config/get.d.ts +0 -0
- package/{dist/commands → commands}/config/get.js +0 -0
- package/commands/config/get.js.map +1 -0
- package/commands/config/get.ts +26 -0
- package/{dist/commands → commands}/config/index.d.ts +0 -0
- package/{dist/commands → commands}/config/index.js +0 -0
- package/commands/config/index.js.map +1 -0
- package/commands/config/index.ts +13 -0
- package/{dist/commands → commands}/config/set.d.ts +0 -0
- package/{dist/commands → commands}/config/set.js +0 -0
- package/commands/config/set.js.map +1 -0
- package/commands/config/set.ts +44 -0
- package/{dist/commands → commands}/login.d.ts +0 -0
- package/{dist/commands → commands}/login.js +0 -0
- package/commands/login.js.map +1 -0
- package/commands/login.ts +5 -0
- package/{dist/commands → commands}/logout.d.ts +0 -0
- package/{dist/commands → commands}/logout.js +0 -0
- package/commands/logout.js.map +1 -0
- package/commands/logout.ts +5 -0
- package/{dist/commands → commands}/migrate.d.ts +0 -0
- package/{dist/commands → commands}/migrate.js +5 -2
- package/commands/migrate.js.map +1 -0
- package/commands/migrate.ts +50 -0
- package/{dist/commands → commands}/organization/create.d.ts +0 -0
- package/{dist/commands → commands}/organization/create.js +0 -0
- package/commands/organization/create.js.map +1 -0
- package/commands/organization/create.ts +65 -0
- package/{dist/commands → commands}/organization/index.d.ts +0 -0
- package/{dist/commands → commands}/organization/index.js +0 -0
- package/commands/organization/index.js.map +1 -0
- package/commands/organization/index.ts +13 -0
- package/{dist/commands → commands}/organization/update.d.ts +0 -0
- package/{dist/commands → commands}/organization/update.js +0 -0
- package/commands/organization/update.js.map +1 -0
- package/commands/organization/update.ts +65 -0
- package/{dist/commands → commands}/resource/create.d.ts +0 -0
- package/{dist/commands → commands}/resource/create.js +0 -0
- package/commands/resource/create.js.map +1 -0
- package/commands/resource/create.ts +78 -0
- package/{dist/commands → commands}/resource/index.d.ts +0 -0
- package/{dist/commands → commands}/resource/index.js +0 -0
- package/commands/resource/index.js.map +1 -0
- package/commands/resource/index.ts +13 -0
- package/{dist/commands → commands}/resource/update.d.ts +0 -0
- package/{dist/commands → commands}/resource/update.js +0 -0
- package/commands/resource/update.js.map +1 -0
- package/commands/resource/update.ts +77 -0
- package/{dist/commands → commands}/runCronJobs.d.ts +0 -0
- package/{dist/commands → commands}/runCronJobs.js +0 -0
- package/commands/runCronJobs.js.map +1 -0
- package/commands/runCronJobs.ts +45 -0
- package/{dist/commands → commands}/start.d.ts +0 -0
- package/{dist/commands → commands}/start.js +4 -0
- package/commands/start.js.map +1 -0
- package/commands/start.ts +140 -0
- package/{dist/commands → commands}/team/create.d.ts +0 -0
- package/{dist/commands → commands}/team/create.js +0 -0
- package/commands/team/create.js.map +1 -0
- package/commands/team/create.ts +60 -0
- package/{dist/commands → commands}/team/delete.d.ts +0 -0
- package/{dist/commands → commands}/team/delete.js +0 -0
- package/commands/team/delete.js.map +1 -0
- package/commands/team/delete.ts +54 -0
- package/{dist/commands → commands}/team/index.d.ts +0 -0
- package/{dist/commands → commands}/team/index.js +0 -0
- package/commands/team/index.js.map +1 -0
- package/commands/team/index.ts +15 -0
- package/{dist/commands → commands}/team/member/delete.d.ts +0 -0
- package/{dist/commands → commands}/team/member/delete.js +0 -0
- package/commands/team/member/delete.js.map +1 -0
- package/commands/team/member/delete.ts +61 -0
- package/{dist/commands → commands}/team/member/index.d.ts +0 -0
- package/{dist/commands → commands}/team/member/index.js +0 -0
- package/commands/team/member/index.js.map +1 -0
- package/commands/team/member/index.ts +14 -0
- package/{dist/commands → commands}/team/member/invite.d.ts +0 -0
- package/{dist/commands → commands}/team/member/invite.js +0 -0
- package/commands/team/member/invite.js.map +1 -0
- package/commands/team/member/invite.ts +61 -0
- package/{dist/commands → commands}/team/member/update.d.ts +0 -0
- package/{dist/commands → commands}/team/member/update.js +0 -0
- package/commands/team/member/update.js.map +1 -0
- package/commands/team/member/update.ts +70 -0
- package/{dist/commands → commands}/team/update.d.ts +0 -0
- package/{dist/commands → commands}/team/update.js +0 -0
- package/commands/team/update.js.map +1 -0
- package/commands/team/update.ts +60 -0
- package/index.d.ts +2 -0
- package/{dist/index.js → index.js} +2 -6
- package/index.js.map +1 -0
- package/index.ts +74 -0
- package/jest.config.js +1 -0
- package/jest.setup.d.ts +1 -0
- package/jest.setup.js +6 -0
- package/jest.setup.js.map +1 -0
- package/jest.setup.ts +4 -0
- package/lib/__snapshots__/getBlockConfigFromTypeScript.test.ts.snap +3872 -0
- package/{dist/lib → lib}/app.d.ts +17 -17
- package/{dist/lib → lib}/app.js +29 -29
- package/lib/app.js.map +1 -0
- package/lib/app.ts +797 -0
- package/{dist/lib → lib}/asset.d.ts +0 -0
- package/{dist/lib → lib}/asset.js +0 -0
- package/lib/asset.js.map +1 -0
- package/lib/asset.ts +43 -0
- package/{dist/lib → lib}/authentication.d.ts +3 -3
- package/{dist/lib → lib}/authentication.js +47 -15
- package/lib/authentication.js.map +1 -0
- package/lib/authentication.ts +193 -0
- package/{dist/lib → lib}/block.d.ts +16 -16
- package/{dist/lib → lib}/block.js +35 -26
- package/lib/block.js.map +1 -0
- package/lib/block.test.d.ts +1 -0
- package/lib/block.test.js +106 -0
- package/lib/block.test.js.map +1 -0
- package/lib/block.test.ts +103 -0
- package/lib/block.ts +384 -0
- package/{dist/lib → lib}/coercers.d.ts +2 -2
- package/{dist/lib → lib}/coercers.js +2 -2
- package/lib/coercers.js.map +1 -0
- package/lib/coercers.test.d.ts +1 -0
- package/lib/coercers.test.js +28 -0
- package/lib/coercers.test.js.map +1 -0
- package/lib/coercers.test.ts +27 -0
- package/lib/coercers.ts +57 -0
- package/{dist/lib → lib}/getBlockConfigFromTypeScript.d.ts +1 -1
- package/{dist/lib → lib}/getBlockConfigFromTypeScript.js +38 -36
- package/lib/getBlockConfigFromTypeScript.js.map +1 -0
- package/lib/getBlockConfigFromTypeScript.test.d.ts +1 -0
- package/lib/getBlockConfigFromTypeScript.test.js +238 -0
- package/lib/getBlockConfigFromTypeScript.test.js.map +1 -0
- package/lib/getBlockConfigFromTypeScript.test.ts +281 -0
- package/lib/getBlockConfigFromTypeScript.ts +354 -0
- package/{dist/lib → lib}/initAxios.d.ts +1 -1
- package/{dist/lib → lib}/initAxios.js +3 -4
- package/lib/initAxios.js.map +1 -0
- package/lib/initAxios.ts +16 -0
- package/{dist/lib → lib}/loadWebpackConfig.d.ts +3 -3
- package/{dist/lib → lib}/loadWebpackConfig.js +3 -3
- package/lib/loadWebpackConfig.js.map +1 -0
- package/lib/loadWebpackConfig.ts +59 -0
- package/{dist/lib → lib}/organization.d.ts +1 -1
- package/{dist/lib → lib}/organization.js +0 -0
- package/lib/organization.js.map +1 -0
- package/lib/organization.ts +105 -0
- package/{dist/lib → lib}/output.d.ts +0 -0
- package/{dist/lib → lib}/output.js +0 -0
- package/lib/output.js.map +1 -0
- package/lib/output.ts +19 -0
- package/{dist/lib → lib}/processCss.d.ts +1 -1
- package/{dist/lib → lib}/processCss.js +3 -3
- package/lib/processCss.js.map +1 -0
- package/lib/processCss.ts +24 -0
- package/{dist/lib → lib}/resource.d.ts +0 -0
- package/{dist/lib → lib}/resource.js +1 -1
- package/lib/resource.js.map +1 -0
- package/lib/resource.ts +128 -0
- package/{dist/lib → lib}/serverImport.d.ts +1 -1
- package/{dist/lib → lib}/serverImport.js +2 -2
- package/lib/serverImport.js.map +1 -0
- package/lib/serverImport.ts +43 -0
- package/{dist/lib → lib}/team.d.ts +0 -0
- package/{dist/lib → lib}/team.js +0 -0
- package/lib/team.js.map +1 -0
- package/lib/team.ts +152 -0
- package/package.json +14 -12
- package/tsconfig.json +10 -0
- package/{dist/types.d.ts → types.d.ts} +0 -0
- package/{dist/types.js → types.js} +0 -0
- package/types.js.map +1 -0
- package/types.ts +110 -0
- package/dist/commands/app/create.js.map +0 -1
- package/dist/commands/app/extract-messages.js.map +0 -1
- package/dist/commands/app/index.js.map +0 -1
- package/dist/commands/app/update.js.map +0 -1
- package/dist/commands/asset/create.js.map +0 -1
- package/dist/commands/asset/index.js.map +0 -1
- package/dist/commands/block/build.js.map +0 -1
- package/dist/commands/block/extract-messages.js.map +0 -1
- package/dist/commands/block/index.js.map +0 -1
- package/dist/commands/block/publish.js.map +0 -1
- package/dist/commands/cleanupResources.js.map +0 -1
- package/dist/commands/config/get.js.map +0 -1
- package/dist/commands/config/index.js.map +0 -1
- package/dist/commands/config/set.js.map +0 -1
- package/dist/commands/login.js.map +0 -1
- package/dist/commands/logout.js.map +0 -1
- package/dist/commands/migrate.js.map +0 -1
- package/dist/commands/organization/create.js.map +0 -1
- package/dist/commands/organization/index.js.map +0 -1
- package/dist/commands/organization/update.js.map +0 -1
- package/dist/commands/resource/create.js.map +0 -1
- package/dist/commands/resource/index.js.map +0 -1
- package/dist/commands/resource/update.js.map +0 -1
- package/dist/commands/runCronJobs.js.map +0 -1
- package/dist/commands/start.js.map +0 -1
- package/dist/commands/team/create.js.map +0 -1
- package/dist/commands/team/delete.js.map +0 -1
- package/dist/commands/team/index.js.map +0 -1
- package/dist/commands/team/member/delete.js.map +0 -1
- package/dist/commands/team/member/index.js.map +0 -1
- package/dist/commands/team/member/invite.js.map +0 -1
- package/dist/commands/team/member/update.js.map +0 -1
- package/dist/commands/team/update.js.map +0 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.js.map +0 -1
- package/dist/lib/app.js.map +0 -1
- package/dist/lib/asset.js.map +0 -1
- package/dist/lib/authentication.js.map +0 -1
- package/dist/lib/block.js.map +0 -1
- package/dist/lib/coercers.js.map +0 -1
- package/dist/lib/getBlockConfigFromTypeScript.js.map +0 -1
- package/dist/lib/initAxios.js.map +0 -1
- package/dist/lib/loadWebpackConfig.js.map +0 -1
- package/dist/lib/organization.js.map +0 -1
- package/dist/lib/output.js.map +0 -1
- package/dist/lib/processCss.js.map +0 -1
- package/dist/lib/readPackageJson.d.ts +0 -9
- package/dist/lib/readPackageJson.js +0 -16
- package/dist/lib/readPackageJson.js.map +0 -1
- package/dist/lib/resource.js.map +0 -1
- package/dist/lib/serverImport.js.map +0 -1
- package/dist/lib/team.js.map +0 -1
- package/dist/types.js.map +0 -1
|
File without changes
|
|
File without changes
|
package/lib/asset.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset.js","sourceRoot":"","sources":["asset.ts"],"names":[],"mappings":";;;;;;AAAA,2BAAsC;AAEtC,sDAA+C;AAC/C,4CAA6C;AAC7C,kDAA0B;AAC1B,0DAAiC;AAyB1B,KAAK,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAqB;IAChF,MAAM,QAAQ,GAAG,IAAI,mBAAQ,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,IAAA,qBAAgB,EAAC,IAAI,CAAC,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC9B,IAAI,IAAI,EAAE;QACR,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAA,iBAAS,EAAC,IAAI,CAAC,CAAC,CAAC;KAC1C;IAED,MAAM,EACJ,IAAI,EAAE,EAAE,EAAE,EAAE,GACb,GAAG,MAAM,eAAK,CAAC,IAAI,CAAiB,aAAa,KAAK,SAAS,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IACjG,mBAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,cAAc,IAAA,iBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACnF,CAAC;AAZD,kCAYC"}
|
package/lib/asset.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { createReadStream } from 'fs';
|
|
2
|
+
|
|
3
|
+
import { logger } from '@appsemble/node-utils';
|
|
4
|
+
import { normalize } from '@appsemble/utils';
|
|
5
|
+
import axios from 'axios';
|
|
6
|
+
import FormData from 'form-data';
|
|
7
|
+
|
|
8
|
+
interface CreateAssetParams {
|
|
9
|
+
/**
|
|
10
|
+
* The name of the asset being uploaded.
|
|
11
|
+
* This must be a unique name for the app. If left empty, the ID is used instead.
|
|
12
|
+
*/
|
|
13
|
+
name: string;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The path in which the resource JSON is located.
|
|
17
|
+
*/
|
|
18
|
+
path: string;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* The ID of the app to create a resource entry for.
|
|
22
|
+
*/
|
|
23
|
+
appId: number;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* The remote server to create the app on.
|
|
27
|
+
*/
|
|
28
|
+
remote: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export async function createAsset({ appId, name, path, remote }: CreateAssetParams): Promise<void> {
|
|
32
|
+
const formData = new FormData();
|
|
33
|
+
const file = createReadStream(path);
|
|
34
|
+
formData.append('file', file);
|
|
35
|
+
if (name) {
|
|
36
|
+
formData.append('name', normalize(name));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const {
|
|
40
|
+
data: { id },
|
|
41
|
+
} = await axios.post<{ id: string }>(`/api/apps/${appId}/assets`, formData, { baseURL: remote });
|
|
42
|
+
logger.info(`Created asset ${id}${name ? ` with name ${normalize(name)}` : ''}`);
|
|
43
|
+
}
|
|
@@ -5,9 +5,9 @@ export declare function remove({ remote }: BaseArguments): Promise<void>;
|
|
|
5
5
|
/**
|
|
6
6
|
* Login to the server using OAuth2 client credentials.
|
|
7
7
|
*
|
|
8
|
-
* @param remote
|
|
9
|
-
* @param scope
|
|
8
|
+
* @param remote Host to fetch token from.
|
|
9
|
+
* @param scope The OAuth2 scope to request. This may be space separated to request
|
|
10
10
|
* multiple scopes.
|
|
11
|
-
* @param inputCredentials
|
|
11
|
+
* @param inputCredentials Client credentials passed from the command line.
|
|
12
12
|
*/
|
|
13
13
|
export declare function authenticate(remote: string, scope: string, inputCredentials: string): Promise<void>;
|
|
@@ -27,9 +27,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
29
|
exports.authenticate = exports.remove = exports.login = exports.CREDENTIALS_ENV_VAR = void 0;
|
|
30
|
+
const os_1 = require("os");
|
|
30
31
|
const node_utils_1 = require("@appsemble/node-utils");
|
|
31
32
|
const axios_1 = __importDefault(require("axios"));
|
|
32
|
-
const inquirer_1 = require("inquirer");
|
|
33
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
34
|
+
const koa_1 = __importDefault(require("koa"));
|
|
35
|
+
const open_1 = __importDefault(require("open"));
|
|
36
|
+
const raw_body_1 = __importDefault(require("raw-body"));
|
|
33
37
|
exports.CREDENTIALS_ENV_VAR = 'APPSEMBLE_CLIENT_CREDENTIALS';
|
|
34
38
|
const authorizedRemotes = new Set();
|
|
35
39
|
function validate(credentials) {
|
|
@@ -38,6 +42,41 @@ function validate(credentials) {
|
|
|
38
42
|
function getService(remote) {
|
|
39
43
|
return `appsemble://${new URL(remote).host}`;
|
|
40
44
|
}
|
|
45
|
+
function waitForCredentials(url) {
|
|
46
|
+
return new Promise((resolve) => {
|
|
47
|
+
const app = new koa_1.default();
|
|
48
|
+
let server;
|
|
49
|
+
app.use(async (ctx) => {
|
|
50
|
+
ctx.set({
|
|
51
|
+
'access-control-allow-headers': '*',
|
|
52
|
+
'access-control-allow-methods': 'post',
|
|
53
|
+
'access-control-allow-origin': url.origin,
|
|
54
|
+
});
|
|
55
|
+
if (ctx.method === 'OPTIONS') {
|
|
56
|
+
ctx.status = 204;
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
ctx.assert(ctx.path === '/', 404);
|
|
60
|
+
ctx.assert(ctx.method === 'POST', 405);
|
|
61
|
+
ctx.assert(ctx.is('json'), 415);
|
|
62
|
+
let credentials;
|
|
63
|
+
try {
|
|
64
|
+
({ credentials } = JSON.parse(await (0, raw_body_1.default)(ctx.req, { encoding: 'utf8' })));
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
ctx.throw(400, 'Invalid JSON');
|
|
68
|
+
}
|
|
69
|
+
ctx.assert(typeof credentials === 'string' && validate(credentials), 400, 'Invalid client credentials');
|
|
70
|
+
ctx.status = 204;
|
|
71
|
+
server.close();
|
|
72
|
+
resolve(credentials);
|
|
73
|
+
});
|
|
74
|
+
server = app.listen();
|
|
75
|
+
url.searchParams.set('callback', String(server.address().port));
|
|
76
|
+
url.searchParams.set('description', (0, os_1.hostname)());
|
|
77
|
+
(0, open_1.default)(String(url));
|
|
78
|
+
});
|
|
79
|
+
}
|
|
41
80
|
async function getKeytar() {
|
|
42
81
|
try {
|
|
43
82
|
return await Promise.resolve().then(() => __importStar(require('keytar')));
|
|
@@ -65,7 +104,7 @@ async function getClientCredentials(remote, inputCredentials) {
|
|
|
65
104
|
[choice] = choices;
|
|
66
105
|
}
|
|
67
106
|
else {
|
|
68
|
-
({ choice } = await
|
|
107
|
+
({ choice } = await inquirer_1.default.prompt([
|
|
69
108
|
{
|
|
70
109
|
name: 'choice',
|
|
71
110
|
message: 'Select client id to use',
|
|
@@ -87,15 +126,8 @@ async function login({ clientCredentials, remote }) {
|
|
|
87
126
|
credentials = clientCredentials;
|
|
88
127
|
}
|
|
89
128
|
else {
|
|
90
|
-
node_utils_1.logger.info(`
|
|
91
|
-
|
|
92
|
-
{
|
|
93
|
-
name: 'credentials',
|
|
94
|
-
type: 'password',
|
|
95
|
-
message: 'Enter client credentials',
|
|
96
|
-
validate,
|
|
97
|
-
},
|
|
98
|
-
]));
|
|
129
|
+
node_utils_1.logger.info(`Opening ${url}`);
|
|
130
|
+
credentials = await waitForCredentials(url);
|
|
99
131
|
}
|
|
100
132
|
const [clientId, clientSecret] = credentials.split(':');
|
|
101
133
|
await setPassword(getService(remote), clientId, clientSecret);
|
|
@@ -109,7 +141,7 @@ async function remove({ remote }) {
|
|
|
109
141
|
node_utils_1.logger.warn('No client credentials are currently in use.');
|
|
110
142
|
return;
|
|
111
143
|
}
|
|
112
|
-
const { clientIds } = await
|
|
144
|
+
const { clientIds } = await inquirer_1.default.prompt([
|
|
113
145
|
{
|
|
114
146
|
name: 'clientIds',
|
|
115
147
|
message: 'Select client ids to delete',
|
|
@@ -126,10 +158,10 @@ exports.remove = remove;
|
|
|
126
158
|
/**
|
|
127
159
|
* Login to the server using OAuth2 client credentials.
|
|
128
160
|
*
|
|
129
|
-
* @param remote
|
|
130
|
-
* @param scope
|
|
161
|
+
* @param remote Host to fetch token from.
|
|
162
|
+
* @param scope The OAuth2 scope to request. This may be space separated to request
|
|
131
163
|
* multiple scopes.
|
|
132
|
-
* @param inputCredentials
|
|
164
|
+
* @param inputCredentials Client credentials passed from the command line.
|
|
133
165
|
*/
|
|
134
166
|
async function authenticate(remote, scope, inputCredentials) {
|
|
135
167
|
const credentials = await getClientCredentials(remote, inputCredentials);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authentication.js","sourceRoot":"","sources":["authentication.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,2BAA8B;AAE9B,sDAA+D;AAE/D,kDAA0B;AAC1B,wDAAgC;AAChC,8CAAmC;AACnC,gDAAwB;AACxB,wDAA2B;AAId,QAAA,mBAAmB,GAAG,8BAA8B,CAAC;AAElE,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;AAE5C,SAAS,QAAQ,CAAC,WAAmB;IACnC,OAAO,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,OAAO,eAAe,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAQ;IAClC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,GAAG,GAAG,IAAI,aAAG,EAAE,CAAC;QAEtB,IAAI,MAAc,CAAC;QACnB,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAY,EAAE,EAAE;YAC7B,GAAG,CAAC,GAAG,CAAC;gBACN,8BAA8B,EAAE,GAAG;gBACnC,8BAA8B,EAAE,MAAM;gBACtC,6BAA6B,EAAE,GAAG,CAAC,MAAM;aAC1C,CAAC,CAAC;YACH,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE;gBAC5B,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;gBACjB,OAAO;aACR;YACD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC;YAClC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,GAAG,CAAC,CAAC;YACvC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;YAChC,IAAI,WAAmB,CAAC;YACxB,IAAI;gBACF,CAAC,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAA,kBAAG,EAAC,GAAG,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;aAC1E;YAAC,MAAM;gBACN,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;aAChC;YACD,GAAG,CAAC,MAAM,CACR,OAAO,WAAW,KAAK,QAAQ,IAAI,QAAQ,CAAC,WAAW,CAAC,EACxD,GAAG,EACH,4BAA4B,CAC7B,CAAC;YACF,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;YACjB,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,WAAW,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QAEtB,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAE,MAAM,CAAC,OAAO,EAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;QACjF,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,IAAA,aAAQ,GAAE,CAAC,CAAC;QAChD,IAAA,cAAI,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,IAAI;QACF,OAAO,wDAAa,QAAQ,GAAC,CAAC;KAC/B;IAAC,MAAM;QACN,MAAM,IAAI,2BAAc,CACtB,uIAAuI,CACxI,CAAC;KACH;AACH,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,MAAc,EAAE,gBAAwB;IAC1E,IAAI,gBAAgB,EAAE;QACpB,OAAO,gBAAgB,CAAC;KACzB;IAED,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,2BAAmB,CAAC,CAAC;IACxD,IAAI,cAAc,EAAE;QAClB,mBAAM,CAAC,IAAI,CAAC,oCAAoC,2BAAmB,uBAAuB,CAAC,CAAC;QAC5F,OAAO,cAAc,CAAC;KACvB;IAED,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,SAAS,EAAE,CAAC;IAC9C,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;QACxB,MAAM,IAAI,2BAAc,CACtB,iFAAiF,MAAM,EAAE,CAC1F,CAAC;KACH;IACD,IAAI,MAAM,CAAC;IACX,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;QACxB,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;KACpB;SAAM;QACL,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;YAClC;gBACE,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,yBAAyB;gBAClC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;gBACjE,IAAI,EAAE,MAAM;aACb;SACF,CAAC,CAAC,CAAC;KACL;IACD,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;AAChD,CAAC;AAEM,KAAK,UAAU,KAAK,CAAC,EAAE,iBAAiB,EAAE,MAAM,EAAiB;IACtE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,SAAS,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,8BAA8B,EAAE,MAAM,CAAC,CAAC;IAC5D,IAAI,WAAW,GAAG,iBAAiB,CAAC;IACpC,IAAI,WAAW,EAAE;QACf,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE;YAChC,MAAM,IAAI,2BAAc,CACtB,uEAAuE,GAAG,EAAE,CAC7E,CAAC;SACH;QACD,WAAW,GAAG,iBAAiB,CAAC;KACjC;SAAM;QACL,mBAAM,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;QAC9B,WAAW,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC;KAC7C;IACD,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC9D,mBAAM,CAAC,IAAI,CAAC,uCAAuC,QAAQ,KAAK,CAAC,CAAC;AACpE,CAAC;AAlBD,sBAkBC;AAEM,KAAK,UAAU,MAAM,CAAC,EAAE,MAAM,EAAiB;IACpD,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,MAAM,SAAS,EAAE,CAAC;IAC9D,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;QACxB,mBAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAC3D,OAAO;KACR;IACD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAA0B;QACnE;YACE,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,6BAA6B;YACtC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC;YAC9C,IAAI,EAAE,UAAU;SACjB;KACF,CAAC,CAAC;IACH,MAAM,OAAO,CAAC,GAAG,CACf,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QAC/B,MAAM,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;QACnD,mBAAM,CAAC,IAAI,CAAC,iCAAiC,QAAQ,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AArBD,wBAqBC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,YAAY,CAChC,MAAc,EACd,KAAa,EACb,gBAAwB;IAExB,MAAM,WAAW,GAAG,MAAM,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACzE,IAAI,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QACjC,mBAAM,CAAC,OAAO,CAAC,wBAAwB,MAAM,EAAE,CAAC,CAAC;QACjD,OAAO;KACR;IACD,mBAAM,CAAC,OAAO,CAAC,iBAAiB,MAAM,EAAE,CAAC,CAAC;IAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,eAAe,EACf,IAAI,eAAe,CAAC,EAAE,UAAU,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAChE;QACE,OAAO,EAAE,EAAE,aAAa,EAAE,SAAS,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE;QAClF,OAAO,EAAE,MAAM;KAChB,CACF,CAAC;IACF,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,eAAK,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACxC,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE;YAC7B,OAAO;gBACL,GAAG,MAAM;gBACT,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,YAAY,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE;aAC7E,CAAC;SACH;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,mBAAM,CAAC,IAAI,CAAC,gBAAgB,MAAM,eAAe,CAAC,CAAC;IACnD,mBAAM,CAAC,OAAO,CAAC,gBAAgB,KAAK,EAAE,CAAC,CAAC;AAC1C,CAAC;AA/BD,oCA+BC"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { AddressInfo, Server } from 'net';
|
|
2
|
+
import { hostname } from 'os';
|
|
3
|
+
|
|
4
|
+
import { AppsembleError, logger } from '@appsemble/node-utils';
|
|
5
|
+
import { TokenResponse } from '@appsemble/types';
|
|
6
|
+
import axios from 'axios';
|
|
7
|
+
import inquirer from 'inquirer';
|
|
8
|
+
import Koa, { Context } from 'koa';
|
|
9
|
+
import open from 'open';
|
|
10
|
+
import raw from 'raw-body';
|
|
11
|
+
|
|
12
|
+
import { BaseArguments } from '../types';
|
|
13
|
+
|
|
14
|
+
export const CREDENTIALS_ENV_VAR = 'APPSEMBLE_CLIENT_CREDENTIALS';
|
|
15
|
+
|
|
16
|
+
const authorizedRemotes = new Set<string>();
|
|
17
|
+
|
|
18
|
+
function validate(credentials: string): boolean {
|
|
19
|
+
return /.+:.+/.test(credentials);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function getService(remote: string): string {
|
|
23
|
+
return `appsemble://${new URL(remote).host}`;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function waitForCredentials(url: URL): Promise<string> {
|
|
27
|
+
return new Promise((resolve) => {
|
|
28
|
+
const app = new Koa();
|
|
29
|
+
|
|
30
|
+
let server: Server;
|
|
31
|
+
app.use(async (ctx: Context) => {
|
|
32
|
+
ctx.set({
|
|
33
|
+
'access-control-allow-headers': '*',
|
|
34
|
+
'access-control-allow-methods': 'post',
|
|
35
|
+
'access-control-allow-origin': url.origin,
|
|
36
|
+
});
|
|
37
|
+
if (ctx.method === 'OPTIONS') {
|
|
38
|
+
ctx.status = 204;
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
ctx.assert(ctx.path === '/', 404);
|
|
42
|
+
ctx.assert(ctx.method === 'POST', 405);
|
|
43
|
+
ctx.assert(ctx.is('json'), 415);
|
|
44
|
+
let credentials: string;
|
|
45
|
+
try {
|
|
46
|
+
({ credentials } = JSON.parse(await raw(ctx.req, { encoding: 'utf8' })));
|
|
47
|
+
} catch {
|
|
48
|
+
ctx.throw(400, 'Invalid JSON');
|
|
49
|
+
}
|
|
50
|
+
ctx.assert(
|
|
51
|
+
typeof credentials === 'string' && validate(credentials),
|
|
52
|
+
400,
|
|
53
|
+
'Invalid client credentials',
|
|
54
|
+
);
|
|
55
|
+
ctx.status = 204;
|
|
56
|
+
server.close();
|
|
57
|
+
resolve(credentials);
|
|
58
|
+
});
|
|
59
|
+
server = app.listen();
|
|
60
|
+
|
|
61
|
+
url.searchParams.set('callback', String((server.address() as AddressInfo).port));
|
|
62
|
+
url.searchParams.set('description', hostname());
|
|
63
|
+
open(String(url));
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
async function getKeytar(): Promise<typeof import('keytar')> {
|
|
68
|
+
try {
|
|
69
|
+
return await import('keytar');
|
|
70
|
+
} catch {
|
|
71
|
+
throw new AppsembleError(
|
|
72
|
+
'Couldn’t find module keytar. Either install libsecret and reinstall @appsemble/cli, or pass --client-credentials on the command line.',
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
async function getClientCredentials(remote: string, inputCredentials: string): Promise<string> {
|
|
78
|
+
if (inputCredentials) {
|
|
79
|
+
return inputCredentials;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const envCredentials = process.env[CREDENTIALS_ENV_VAR];
|
|
83
|
+
if (envCredentials) {
|
|
84
|
+
logger.info(`Detected client credentials from ${CREDENTIALS_ENV_VAR} environment variable`);
|
|
85
|
+
return envCredentials;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const { findCredentials } = await getKeytar();
|
|
89
|
+
const choices = await findCredentials(getService(remote));
|
|
90
|
+
if (choices.length === 0) {
|
|
91
|
+
throw new AppsembleError(
|
|
92
|
+
`No client credentials found. Register them using:\n\nappsemble login --remote ${remote}`,
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
let choice;
|
|
96
|
+
if (choices.length === 1) {
|
|
97
|
+
[choice] = choices;
|
|
98
|
+
} else {
|
|
99
|
+
({ choice } = await inquirer.prompt([
|
|
100
|
+
{
|
|
101
|
+
name: 'choice',
|
|
102
|
+
message: 'Select client id to use',
|
|
103
|
+
choices: choices.map((value) => ({ name: value.account, value })),
|
|
104
|
+
type: 'list',
|
|
105
|
+
},
|
|
106
|
+
]));
|
|
107
|
+
}
|
|
108
|
+
return `${choice.account}:${choice.password}`;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export async function login({ clientCredentials, remote }: BaseArguments): Promise<void> {
|
|
112
|
+
const { setPassword } = await getKeytar();
|
|
113
|
+
const url = new URL('/settings/client-credentials', remote);
|
|
114
|
+
let credentials = clientCredentials;
|
|
115
|
+
if (credentials) {
|
|
116
|
+
if (!validate(clientCredentials)) {
|
|
117
|
+
throw new AppsembleError(
|
|
118
|
+
`Invalid client credentials. Client credentials can be registered on ${url}`,
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
credentials = clientCredentials;
|
|
122
|
+
} else {
|
|
123
|
+
logger.info(`Opening ${url}`);
|
|
124
|
+
credentials = await waitForCredentials(url);
|
|
125
|
+
}
|
|
126
|
+
const [clientId, clientSecret] = credentials.split(':');
|
|
127
|
+
await setPassword(getService(remote), clientId, clientSecret);
|
|
128
|
+
logger.info(`Successfully stored credentials for ${clientId} 🕶`);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export async function remove({ remote }: BaseArguments): Promise<void> {
|
|
132
|
+
const { deletePassword, findCredentials } = await getKeytar();
|
|
133
|
+
const choices = await findCredentials(getService(remote));
|
|
134
|
+
if (choices.length === 0) {
|
|
135
|
+
logger.warn('No client credentials are currently in use.');
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const { clientIds } = await inquirer.prompt<{ clientIds: string[] }>([
|
|
139
|
+
{
|
|
140
|
+
name: 'clientIds',
|
|
141
|
+
message: 'Select client ids to delete',
|
|
142
|
+
choices: choices.map(({ account }) => account),
|
|
143
|
+
type: 'checkbox',
|
|
144
|
+
},
|
|
145
|
+
]);
|
|
146
|
+
await Promise.all(
|
|
147
|
+
clientIds.map(async (clientId) => {
|
|
148
|
+
await deletePassword(getService(remote), clientId);
|
|
149
|
+
logger.info(`Successfully delete client id ${clientId}`);
|
|
150
|
+
}),
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Login to the server using OAuth2 client credentials.
|
|
156
|
+
*
|
|
157
|
+
* @param remote Host to fetch token from.
|
|
158
|
+
* @param scope The OAuth2 scope to request. This may be space separated to request
|
|
159
|
+
* multiple scopes.
|
|
160
|
+
* @param inputCredentials Client credentials passed from the command line.
|
|
161
|
+
*/
|
|
162
|
+
export async function authenticate(
|
|
163
|
+
remote: string,
|
|
164
|
+
scope: string,
|
|
165
|
+
inputCredentials: string,
|
|
166
|
+
): Promise<void> {
|
|
167
|
+
const credentials = await getClientCredentials(remote, inputCredentials);
|
|
168
|
+
if (authorizedRemotes.has(remote)) {
|
|
169
|
+
logger.verbose(`Already logged in to ${remote}`);
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
logger.verbose(`Logging in to ${remote}`);
|
|
173
|
+
const { data } = await axios.post<TokenResponse>(
|
|
174
|
+
'/oauth2/token',
|
|
175
|
+
new URLSearchParams({ grant_type: 'client_credentials', scope }),
|
|
176
|
+
{
|
|
177
|
+
headers: { authorization: `Basic ${Buffer.from(credentials).toString('base64')}` },
|
|
178
|
+
baseURL: remote,
|
|
179
|
+
},
|
|
180
|
+
);
|
|
181
|
+
authorizedRemotes.add(remote);
|
|
182
|
+
axios.interceptors.request.use((config) => {
|
|
183
|
+
if (config.baseURL === remote) {
|
|
184
|
+
return {
|
|
185
|
+
...config,
|
|
186
|
+
headers: { authorization: `Bearer ${data.access_token}`, ...config.headers },
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
return config;
|
|
190
|
+
});
|
|
191
|
+
logger.info(`Logged in to ${remote} successfully`);
|
|
192
|
+
logger.verbose(`Login scope: ${scope}`);
|
|
193
|
+
}
|
|
@@ -4,14 +4,14 @@ import { Stats } from 'webpack';
|
|
|
4
4
|
/**
|
|
5
5
|
* Builds a block using Webpack.
|
|
6
6
|
*
|
|
7
|
-
* @param config
|
|
7
|
+
* @param config The config of the block to build.
|
|
8
8
|
* @returns The Webpack stats object.
|
|
9
9
|
*/
|
|
10
10
|
export declare function buildBlock(config: BlockConfig): Promise<Stats>;
|
|
11
11
|
/**
|
|
12
12
|
* Get the block configuration from a block directory.
|
|
13
13
|
*
|
|
14
|
-
* @param dir
|
|
14
|
+
* @param dir The directory in which to search for the configuration file.
|
|
15
15
|
* @returns The block configuration.
|
|
16
16
|
*/
|
|
17
17
|
export declare function getBlockConfig(dir: string): Promise<BlockConfig>;
|
|
@@ -20,42 +20,42 @@ export declare function getBlockConfig(dir: string): Promise<BlockConfig>;
|
|
|
20
20
|
*
|
|
21
21
|
* Both Lerna and Yarn workspaces are supported.
|
|
22
22
|
*
|
|
23
|
-
* @param root
|
|
23
|
+
* @param root The project root in which to find workspaces.
|
|
24
24
|
* @returns Discovered Appsemble blocks.
|
|
25
25
|
*/
|
|
26
26
|
export declare function discoverBlocks(root: string): Promise<BlockConfig[]>;
|
|
27
27
|
/**
|
|
28
28
|
* Configure the payload for a new block version upload.
|
|
29
29
|
*
|
|
30
|
-
* @param config
|
|
30
|
+
* @param config The block configuration
|
|
31
31
|
* @returns The payload that should be sent to the version endpoint.
|
|
32
32
|
*/
|
|
33
33
|
export declare function makePayload(config: BlockConfig): Promise<FormData>;
|
|
34
34
|
/**
|
|
35
35
|
* Publish a new block version.
|
|
36
36
|
*
|
|
37
|
-
* @param config
|
|
38
|
-
* @param ignoreConflict
|
|
37
|
+
* @param config The block configuration
|
|
38
|
+
* @param ignoreConflict Prevent the command from crashing when a conflict has been detected.
|
|
39
39
|
*/
|
|
40
40
|
export declare function publishBlock(config: BlockConfig, ignoreConflict: boolean): Promise<void>;
|
|
41
41
|
/**
|
|
42
42
|
* Uploads an app block theme
|
|
43
43
|
*
|
|
44
|
-
* @param filePath
|
|
45
|
-
* @param organization
|
|
46
|
-
* @param appId
|
|
47
|
-
* @param block
|
|
48
|
-
* @param remote
|
|
49
|
-
* @param force
|
|
44
|
+
* @param filePath The path of the index.css file
|
|
45
|
+
* @param organization The ID of the organization the block belongs to.
|
|
46
|
+
* @param appId The ID of the app to upload the theme for.
|
|
47
|
+
* @param block The name of the block.
|
|
48
|
+
* @param remote The HTTP origin to upload the theme to.
|
|
49
|
+
* @param force Force update the theme if the app is locked.
|
|
50
50
|
*/
|
|
51
51
|
export declare function uploadAppBlockTheme(filePath: string, organization: string, appId: number, block: string, remote: string, force: boolean): Promise<void>;
|
|
52
52
|
/**
|
|
53
53
|
* Traverses the directory at a given path for app block themes and uploads them.
|
|
54
54
|
*
|
|
55
|
-
* @param path
|
|
56
|
-
* @param appId
|
|
57
|
-
* @param remote
|
|
58
|
-
* @param force
|
|
55
|
+
* @param path The path of the app.
|
|
56
|
+
* @param appId The ID of the app.
|
|
57
|
+
* @param remote The HTTP origin to upload the themes to.
|
|
58
|
+
* @param force Force update the theme if the app is locked.
|
|
59
59
|
*/
|
|
60
60
|
export declare function traverseBlockThemes(path: string, appId: number, remote: string, force: boolean): Promise<void>;
|
|
61
61
|
export declare function processBlockMessages(config: BlockConfig, languages: string[]): Promise<void>;
|
|
@@ -5,15 +5,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.processBlockMessages = exports.traverseBlockThemes = exports.uploadAppBlockTheme = exports.publishBlock = exports.makePayload = exports.discoverBlocks = exports.getBlockConfig = exports.buildBlock = void 0;
|
|
7
7
|
const fs_1 = require("fs");
|
|
8
|
+
const promises_1 = require("fs/promises");
|
|
8
9
|
const path_1 = require("path");
|
|
9
10
|
const util_1 = require("util");
|
|
10
11
|
const node_utils_1 = require("@appsemble/node-utils");
|
|
11
12
|
const utils_1 = require("@appsemble/utils");
|
|
12
13
|
const axios_1 = __importDefault(require("axios"));
|
|
13
|
-
const chalk_1 = require("chalk");
|
|
14
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
14
15
|
const cosmiconfig_1 = require("cosmiconfig");
|
|
15
16
|
const form_data_1 = __importDefault(require("form-data"));
|
|
16
|
-
const fs_extra_1 = require("fs-extra");
|
|
17
17
|
const webpack_1 = require("webpack");
|
|
18
18
|
const getBlockConfigFromTypeScript_1 = require("./getBlockConfigFromTypeScript");
|
|
19
19
|
const loadWebpackConfig_1 = require("./loadWebpackConfig");
|
|
@@ -21,14 +21,14 @@ const processCss_1 = require("./processCss");
|
|
|
21
21
|
/**
|
|
22
22
|
* Builds a block using Webpack.
|
|
23
23
|
*
|
|
24
|
-
* @param config
|
|
24
|
+
* @param config The config of the block to build.
|
|
25
25
|
* @returns The Webpack stats object.
|
|
26
26
|
*/
|
|
27
27
|
async function buildBlock(config) {
|
|
28
28
|
const conf = await (0, loadWebpackConfig_1.loadWebpackConfig)(config, 'production', (0, path_1.join)(config.dir, config.output));
|
|
29
|
-
if (
|
|
29
|
+
if ((0, fs_1.existsSync)(conf.output.path)) {
|
|
30
30
|
node_utils_1.logger.warn(`Removing ${conf.output.path}`);
|
|
31
|
-
await (0,
|
|
31
|
+
await (0, promises_1.rm)(conf.output.path, { force: true, recursive: true });
|
|
32
32
|
}
|
|
33
33
|
node_utils_1.logger.info(`Building ${config.name}@${config.version} 🔨`);
|
|
34
34
|
const compiler = (0, webpack_1.webpack)(conf);
|
|
@@ -51,7 +51,7 @@ exports.buildBlock = buildBlock;
|
|
|
51
51
|
/**
|
|
52
52
|
* Get the block configuration from a block directory.
|
|
53
53
|
*
|
|
54
|
-
* @param dir
|
|
54
|
+
* @param dir The directory in which to search for the configuration file.
|
|
55
55
|
* @returns The block configuration.
|
|
56
56
|
*/
|
|
57
57
|
async function getBlockConfig(dir) {
|
|
@@ -64,11 +64,11 @@ async function getBlockConfig(dir) {
|
|
|
64
64
|
node_utils_1.logger.info(`Found configuration file: ${filepath}`);
|
|
65
65
|
const [pkg] = await (0, node_utils_1.readData)((0, path_1.join)(dir, 'package.json'));
|
|
66
66
|
if (!pkg.private) {
|
|
67
|
-
node_utils_1.logger.warn(`It is ${chalk_1.underline.yellow('highly recommended')} to set “${
|
|
67
|
+
node_utils_1.logger.warn(`It is ${chalk_1.default.underline.yellow('highly recommended')} to set “${chalk_1.default.green('"private"')}: ${chalk_1.default.cyan('true')}” in package.json`);
|
|
68
68
|
}
|
|
69
69
|
let longDescription;
|
|
70
70
|
if ((0, fs_1.existsSync)((0, path_1.join)(dir, 'README.md'))) {
|
|
71
|
-
longDescription = await
|
|
71
|
+
longDescription = await (0, promises_1.readFile)((0, path_1.join)(dir, 'README.md'), 'utf8');
|
|
72
72
|
}
|
|
73
73
|
const result = {
|
|
74
74
|
description: pkg.description,
|
|
@@ -88,7 +88,7 @@ exports.getBlockConfig = getBlockConfig;
|
|
|
88
88
|
*
|
|
89
89
|
* Both Lerna and Yarn workspaces are supported.
|
|
90
90
|
*
|
|
91
|
-
* @param root
|
|
91
|
+
* @param root The project root in which to find workspaces.
|
|
92
92
|
* @returns Discovered Appsemble blocks.
|
|
93
93
|
*/
|
|
94
94
|
async function discoverBlocks(root) {
|
|
@@ -104,7 +104,7 @@ exports.discoverBlocks = discoverBlocks;
|
|
|
104
104
|
/**
|
|
105
105
|
* Configure the payload for a new block version upload.
|
|
106
106
|
*
|
|
107
|
-
* @param config
|
|
107
|
+
* @param config The block configuration
|
|
108
108
|
* @returns The payload that should be sent to the version endpoint.
|
|
109
109
|
*/
|
|
110
110
|
async function makePayload(config) {
|
|
@@ -113,7 +113,7 @@ async function makePayload(config) {
|
|
|
113
113
|
const form = new form_data_1.default();
|
|
114
114
|
const { description, layout, longDescription, name, version, visibility } = config;
|
|
115
115
|
const { actions, events, messages, parameters } = (0, getBlockConfigFromTypeScript_1.getBlockConfigFromTypeScript)(config);
|
|
116
|
-
const files = await
|
|
116
|
+
const files = await (0, promises_1.readdir)(dir);
|
|
117
117
|
const icon = files.find((entry) => entry.match(/^icon\.(png|svg)$/));
|
|
118
118
|
function append(field, value) {
|
|
119
119
|
if (value) {
|
|
@@ -148,7 +148,7 @@ async function makePayload(config) {
|
|
|
148
148
|
const messageKeys = Object.keys(messages).sort(utils_1.compareStrings);
|
|
149
149
|
const messagesResult = {};
|
|
150
150
|
const messagesPath = (0, path_1.join)(dir, 'i18n');
|
|
151
|
-
const translations = (await
|
|
151
|
+
const translations = (await (0, promises_1.readdir)(messagesPath)).map((language) => language.toLowerCase());
|
|
152
152
|
if (!translations.includes('en.json')) {
|
|
153
153
|
throw new node_utils_1.AppsembleError('Could not find ‘en.json’. Try running extract-messages');
|
|
154
154
|
}
|
|
@@ -170,6 +170,15 @@ async function makePayload(config) {
|
|
|
170
170
|
}
|
|
171
171
|
form.append('messages', JSON.stringify(messagesResult));
|
|
172
172
|
}
|
|
173
|
+
if (files.includes('examples')) {
|
|
174
|
+
await (0, node_utils_1.opendirSafe)((0, path_1.join)(dir, 'examples'), async (file, stat) => {
|
|
175
|
+
if (!stat.isFile() || !file.endsWith('.yaml')) {
|
|
176
|
+
throw new node_utils_1.AppsembleError(`Expected ${file} to be a YAML file`);
|
|
177
|
+
}
|
|
178
|
+
node_utils_1.logger.info(`Adding example file ${file}`);
|
|
179
|
+
form.append('examples', await (0, promises_1.readFile)(file, 'utf8'));
|
|
180
|
+
}, { allowMissing: true });
|
|
181
|
+
}
|
|
173
182
|
await (0, node_utils_1.opendirSafe)(distPath, (fullpath, stat) => {
|
|
174
183
|
if (!stat.isFile()) {
|
|
175
184
|
return;
|
|
@@ -187,8 +196,8 @@ exports.makePayload = makePayload;
|
|
|
187
196
|
/**
|
|
188
197
|
* Publish a new block version.
|
|
189
198
|
*
|
|
190
|
-
* @param config
|
|
191
|
-
* @param ignoreConflict
|
|
199
|
+
* @param config The block configuration
|
|
200
|
+
* @param ignoreConflict Prevent the command from crashing when a conflict has been detected.
|
|
192
201
|
*/
|
|
193
202
|
async function publishBlock(config, ignoreConflict) {
|
|
194
203
|
node_utils_1.logger.info(`Publishing ${config.name}@${config.version}…`);
|
|
@@ -209,12 +218,12 @@ exports.publishBlock = publishBlock;
|
|
|
209
218
|
/**
|
|
210
219
|
* Uploads an app block theme
|
|
211
220
|
*
|
|
212
|
-
* @param filePath
|
|
213
|
-
* @param organization
|
|
214
|
-
* @param appId
|
|
215
|
-
* @param block
|
|
216
|
-
* @param remote
|
|
217
|
-
* @param force
|
|
221
|
+
* @param filePath The path of the index.css file
|
|
222
|
+
* @param organization The ID of the organization the block belongs to.
|
|
223
|
+
* @param appId The ID of the app to upload the theme for.
|
|
224
|
+
* @param block The name of the block.
|
|
225
|
+
* @param remote The HTTP origin to upload the theme to.
|
|
226
|
+
* @param force Force update the theme if the app is locked.
|
|
218
227
|
*/
|
|
219
228
|
async function uploadAppBlockTheme(filePath, organization, appId, block, remote, force) {
|
|
220
229
|
node_utils_1.logger.info(`Upload ${organization}/${block} stylesheet for app ${appId}`);
|
|
@@ -226,10 +235,10 @@ exports.uploadAppBlockTheme = uploadAppBlockTheme;
|
|
|
226
235
|
/**
|
|
227
236
|
* Traverses the directory at a given path for app block themes and uploads them.
|
|
228
237
|
*
|
|
229
|
-
* @param path
|
|
230
|
-
* @param appId
|
|
231
|
-
* @param remote
|
|
232
|
-
* @param force
|
|
238
|
+
* @param path The path of the app.
|
|
239
|
+
* @param appId The ID of the app.
|
|
240
|
+
* @param remote The HTTP origin to upload the themes to.
|
|
241
|
+
* @param force Force update the theme if the app is locked.
|
|
233
242
|
*/
|
|
234
243
|
async function traverseBlockThemes(path, appId, remote, force) {
|
|
235
244
|
node_utils_1.logger.verbose(`Searching themes in ${path}`);
|
|
@@ -258,8 +267,8 @@ async function traverseBlockThemes(path, appId, remote, force) {
|
|
|
258
267
|
exports.traverseBlockThemes = traverseBlockThemes;
|
|
259
268
|
async function processBlockMessages(config, languages) {
|
|
260
269
|
const path = (0, path_1.join)(config.dir, 'i18n');
|
|
261
|
-
await
|
|
262
|
-
const dir = await
|
|
270
|
+
await (0, promises_1.mkdir)(path, { recursive: true });
|
|
271
|
+
const dir = await (0, promises_1.readdir)(path);
|
|
263
272
|
const { messages } = (0, getBlockConfigFromTypeScript_1.getBlockConfigFromTypeScript)(config);
|
|
264
273
|
if (!messages) {
|
|
265
274
|
node_utils_1.logger.warn(`Block ${config.name} has no messages.`);
|
package/lib/block.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block.js","sourceRoot":"","sources":["block.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|