@betty-blocks/cli 26.0.0-beta.18 → 26.0.0-beta.19

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 (152) hide show
  1. package/assets/app-functions/wasm-template/.wasm-functions +0 -0
  2. package/assets/app-functions/wasm-template/functions/say-hello/1.0/Cargo.lock +449 -0
  3. package/assets/app-functions/wasm-template/functions/say-hello/1.0/Cargo.toml +10 -0
  4. package/assets/app-functions/wasm-template/functions/say-hello/1.0/Justfile +6 -0
  5. package/assets/app-functions/wasm-template/functions/say-hello/1.0/function.json +35 -0
  6. package/assets/app-functions/wasm-template/functions/say-hello/1.0/src/lib.rs +19 -0
  7. package/assets/app-functions/wasm-template/functions/say-hello/1.0/wit/world.wit +13 -0
  8. package/build/bb-blocks-new.d.ts +1 -0
  9. package/build/bb-blocks-publish.d.ts +1 -0
  10. package/build/bb-blocks-publish.js +6 -6
  11. package/build/bb-blocks-publish.js.map +1 -1
  12. package/build/bb-blocks-release.d.ts +1 -0
  13. package/build/bb-blocks.d.ts +1 -0
  14. package/build/bb-bundle-init.d.ts +1 -0
  15. package/build/bb-bundle.d.ts +1 -0
  16. package/build/bb-components-build.d.ts +1 -0
  17. package/build/bb-components-create.d.ts +1 -0
  18. package/build/bb-components-generate.d.ts +1 -0
  19. package/build/bb-components-publish-bundle.d.ts +1 -0
  20. package/build/bb-components-publish-bundle.js +1 -1
  21. package/build/bb-components-publish-bundle.js.map +1 -1
  22. package/build/bb-components-publish.d.ts +1 -0
  23. package/build/bb-components-publish.js +1 -1
  24. package/build/bb-components-publish.js.map +1 -1
  25. package/build/bb-components-serve.d.ts +1 -0
  26. package/build/bb-components.d.ts +1 -0
  27. package/build/bb-functions-bump.d.ts +1 -0
  28. package/build/bb-functions-bump.js +15 -42
  29. package/build/bb-functions-bump.js.map +1 -1
  30. package/build/bb-functions-init.d.ts +1 -0
  31. package/build/bb-functions-init.js +17 -39
  32. package/build/bb-functions-init.js.map +1 -1
  33. package/build/bb-functions-login.d.ts +1 -0
  34. package/build/bb-functions-logout.d.ts +1 -0
  35. package/build/bb-functions-new.d.ts +1 -0
  36. package/build/bb-functions-new.js +15 -12
  37. package/build/bb-functions-new.js.map +1 -1
  38. package/build/bb-functions-publish.d.ts +1 -0
  39. package/build/bb-functions-publish.js +34 -29
  40. package/build/bb-functions-publish.js.map +1 -1
  41. package/build/bb-functions-validate.d.ts +1 -0
  42. package/build/bb-functions-validate.js +4 -2
  43. package/build/bb-functions-validate.js.map +1 -1
  44. package/build/bb-functions.d.ts +1 -0
  45. package/build/bb-functions.js +2 -6
  46. package/build/bb-functions.js.map +1 -1
  47. package/build/bb.d.ts +2 -0
  48. package/build/blocks/blockDefinitions.d.ts +10 -0
  49. package/build/blocks/blockDefinitions.js +13 -8
  50. package/build/blocks/blockDefinitions.js.map +1 -1
  51. package/build/blocks/publishBlocks.d.ts +2 -0
  52. package/build/blocks/publishBlocks.js +3 -5
  53. package/build/blocks/publishBlocks.js.map +1 -1
  54. package/build/blocks/releaseBlocks.d.ts +5 -0
  55. package/build/components/bb-components-functions.d.ts +10 -0
  56. package/build/{functions → components}/bb-components-functions.js +1 -1
  57. package/build/components/bb-components-functions.js.map +1 -0
  58. package/build/components/comments.d.ts +3 -0
  59. package/build/components/compatibility.d.ts +7 -0
  60. package/build/components/transformers/index.d.ts +3 -0
  61. package/build/components-build/index.d.ts +2 -0
  62. package/build/components-build/reportDiagnostics.d.ts +2 -0
  63. package/build/components-build/styles.d.ts +4 -0
  64. package/build/functions/config.d.ts +67 -0
  65. package/build/functions/createWasmDefinitionFiles.d.ts +4 -0
  66. package/build/functions/createWasmDefinitionFiles.js +61 -0
  67. package/build/functions/createWasmDefinitionFiles.js.map +1 -0
  68. package/build/functions/functionDefinitions.d.ts +23 -0
  69. package/build/functions/functionDefinitions.js +68 -19
  70. package/build/functions/functionDefinitions.js.map +1 -1
  71. package/build/functions/functionVersionBump.d.ts +19 -0
  72. package/build/functions/functionVersionBump.js +62 -0
  73. package/build/functions/functionVersionBump.js.map +1 -0
  74. package/build/functions/publishAppFunctions.d.ts +13 -0
  75. package/build/functions/publishAppFunctions.js +4 -6
  76. package/build/functions/publishAppFunctions.js.map +1 -1
  77. package/build/functions/publishWasmBlockStoreFunctions.d.ts +1 -0
  78. package/build/functions/publishWasmBlockStoreFunctions.js +100 -0
  79. package/build/functions/publishWasmBlockStoreFunctions.js.map +1 -0
  80. package/build/functions/utils.d.ts +2 -0
  81. package/build/functions/validateFunctions.d.ts +3 -0
  82. package/build/functions/validateFunctions.js +20 -0
  83. package/build/functions/validateFunctions.js.map +1 -0
  84. package/build/functions/validations.d.ts +30 -0
  85. package/build/functions/validations.js +40 -7
  86. package/build/functions/validations.js.map +1 -1
  87. package/build/interactions/compatibility.d.ts +3 -0
  88. package/build/interactions/diagnostics.d.ts +2 -0
  89. package/build/types.d.ts +377 -0
  90. package/build/types.js.map +1 -1
  91. package/build/utils/arguments.d.ts +2 -0
  92. package/build/utils/checkPackageVersion.d.ts +1 -0
  93. package/build/utils/checkUpdateAvailable.d.ts +1 -0
  94. package/build/utils/fusionAuth.d.ts +21 -0
  95. package/build/utils/hash.d.ts +2 -0
  96. package/build/utils/login.d.ts +15 -0
  97. package/build/utils/pick.d.ts +7 -0
  98. package/build/utils/readFilesByType.d.ts +2 -0
  99. package/build/utils/rootDir.d.ts +2 -0
  100. package/build/utils/rootDir.js +1 -1
  101. package/build/utils/rootDir.js.map +1 -1
  102. package/build/utils/serveComponentSet.d.ts +3 -0
  103. package/build/utils/transpile.d.ts +2 -0
  104. package/build/utils/uploadBlob.d.ts +24 -0
  105. package/build/utils/validation.d.ts +4 -0
  106. package/build/validations/component.d.ts +3 -0
  107. package/build/validations/constants.d.ts +16 -0
  108. package/build/validations/function-block-validations/index.d.ts +22 -0
  109. package/build/validations/function-block-validations/index.js +3 -1
  110. package/build/validations/function-block-validations/index.js.map +1 -1
  111. package/build/validations/interaction.d.ts +3 -0
  112. package/build/validations/prefab/action.d.ts +2 -0
  113. package/build/validations/prefab/component.d.ts +10 -0
  114. package/build/validations/prefab/componentOption.d.ts +3 -0
  115. package/build/validations/prefab/interaction.d.ts +2 -0
  116. package/build/validations/prefab/linkedOption.d.ts +3 -0
  117. package/build/validations/prefab/linkedPartial.d.ts +3 -0
  118. package/build/validations/prefab/variable.d.ts +3 -0
  119. package/build/validations/prefab.d.ts +17 -0
  120. package/build/validations/styles.d.ts +6 -0
  121. package/package.json +31 -34
  122. package/assets/app-functions/templates/test/helpers.js +0 -3
  123. package/assets/app-functions/templates/test/say-hello.test.js +0 -4
  124. package/assets/functions/packer/package.json +0 -9
  125. package/assets/functions/packer/webpack.config.js +0 -12
  126. package/assets/functions/templates/functions.json +0 -14
  127. package/assets/functions/templates/package.json +0 -11
  128. package/assets/functions/templates/src/all-users.js +0 -14
  129. package/assets/functions/templates/src/get-json.js +0 -9
  130. package/assets/functions/templates/src/index.js +0 -5
  131. package/assets/functions/templates/src/say-hello.js +0 -13
  132. package/build/bb-functions-build.js +0 -56
  133. package/build/bb-functions-build.js.map +0 -1
  134. package/build/functions/acquireAppFunctionsProject.js +0 -14
  135. package/build/functions/acquireAppFunctionsProject.js.map +0 -1
  136. package/build/functions/acquireCustomFunctionsProject.js +0 -15
  137. package/build/functions/acquireCustomFunctionsProject.js.map +0 -1
  138. package/build/functions/bb-components-functions.js.map +0 -1
  139. package/build/functions/icons.js +0 -42
  140. package/build/functions/icons.js.map +0 -1
  141. package/build/functions/publishCustomFunctions.js +0 -95
  142. package/build/functions/publishCustomFunctions.js.map +0 -1
  143. package/build/functions/publishFunctions.js +0 -98
  144. package/build/functions/publishFunctions.js.map +0 -1
  145. package/build/functions/versions.js +0 -48
  146. package/build/functions/versions.js.map +0 -1
  147. package/build/utils/ide.js +0 -145
  148. package/build/utils/ide.js.map +0 -1
  149. /package/assets/app-functions/{templates → js-template}/.app-functions +0 -0
  150. /package/assets/app-functions/{templates → js-template}/functions/say-hello/1.0/function.json +0 -0
  151. /package/assets/app-functions/{templates → js-template}/functions/say-hello/1.0/index.js +0 -0
  152. /package/assets/app-functions/{templates → js-template}/package.json +0 -0
@@ -1,95 +0,0 @@
1
- import { spawn } from 'child_process';
2
- import fs from 'fs-extra';
3
- import ora from 'ora';
4
- import os from 'os';
5
- import path from 'path';
6
- import vm from 'vm';
7
- import IDE from '../utils/ide';
8
- import Config from './config';
9
- import { resolveMissingFunction, storeCustomFunctions, } from './publishFunctions';
10
- const workingDir = process.cwd();
11
- const groomMetaData = async (config) => {
12
- console.log('Grooming functions.json ...');
13
- const buildDir = path.join(os.tmpdir(), config.buildDir);
14
- const customJsFile = path.join(buildDir, 'dist', 'custom.js');
15
- const customJs = fs.readFileSync(customJsFile, 'utf8');
16
- const script = new vm.Script(`${customJs}; fn = custom;`);
17
- const ctx = { fn: {} };
18
- script.runInNewContext(ctx);
19
- const customFunctions = ctx.fn;
20
- const functionsJsonFile = path.join(workingDir, 'functions.json');
21
- const metaData = fs.readJsonSync(functionsJsonFile);
22
- const groomedMetaData = await Object.keys(customFunctions).reduce(async (promise, name) => promise.then(async (groomed) => {
23
- groomed[name] = metaData[name];
24
- if (!groomed[name]) {
25
- const matches = customFunctions[name]
26
- .toString()
27
- .match(/await context\((["'])(.*?)\1\)/g);
28
- const defaultInputVariables = (matches ?? [])
29
- .map((m) => `${m.slice(15, -2)}:string`)
30
- .join(' ');
31
- groomed = await resolveMissingFunction({
32
- defaultInputVariables,
33
- groomed,
34
- metaData,
35
- name,
36
- });
37
- }
38
- return groomed;
39
- }), Promise.resolve({}));
40
- fs.writeFileSync(functionsJsonFile, JSON.stringify(groomedMetaData, null, 2));
41
- return groomedMetaData;
42
- };
43
- const publishFunctions = async (config, metaData, bumpRevision) => {
44
- const ide = new IDE(config);
45
- const revision = await storeCustomFunctions(ide, metaData, bumpRevision);
46
- const buildDir = path.join(os.tmpdir(), config.buildDir);
47
- const customJsFile = path.join(buildDir, 'dist', 'custom.js');
48
- await ide.post(`custom_functions/${revision}`, { multiPartData: [{ file: customJsFile, name: 'code' }] }, `Uploading "${revision}.js" ...`);
49
- const actions = (await ide.get('actions'));
50
- await actions.reduce(async (promise, { id, use_new_runtime, description }) => {
51
- await promise;
52
- if (use_new_runtime) {
53
- return ide.put(`actions/${id}`, { json: { record: { description } } }, `Compiling action "${description}" ...`);
54
- }
55
- return Promise.resolve(null);
56
- }, Promise.resolve(null));
57
- };
58
- const cleanMetaData = () => {
59
- const functionsJsonFile = path.join(workingDir, 'functions.json');
60
- const metaData = fs.readJsonSync(functionsJsonFile);
61
- Object.keys(metaData).forEach((name) => {
62
- delete metaData[name].replace;
63
- });
64
- fs.writeFileSync(functionsJsonFile, JSON.stringify(metaData, null, 2));
65
- };
66
- const publishCustomFunctions = (host, bumpRevision, skipBuild) => {
67
- const config = new Config();
68
- console.log(`Publishing to ${config.host} (${config.zone}) ...`);
69
- new Promise((resolve) => {
70
- if (skipBuild) {
71
- resolve(undefined);
72
- }
73
- else {
74
- const building = ora(`Building custom functions bundle (this can take a while) ...`).start();
75
- const build = spawn('bb functions build', {
76
- shell: true,
77
- });
78
- build.on('close', () => {
79
- building.succeed();
80
- resolve(undefined);
81
- });
82
- }
83
- })
84
- .then(() => groomMetaData(config))
85
- .then((metaData) => publishFunctions(config, metaData, bumpRevision))
86
- .then(cleanMetaData)
87
- .then(() => {
88
- console.log('Done.');
89
- })
90
- .catch((error) => {
91
- throw new Error(`${error}\nAbort.`);
92
- });
93
- };
94
- export default publishCustomFunctions;
95
- //# sourceMappingURL=publishCustomFunctions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"publishCustomFunctions.js","sourceRoot":"","sources":["../../src/functions/publishCustomFunctions.ts"],"names":[],"mappings":"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"}
@@ -1,98 +0,0 @@
1
- import prompts from 'prompts';
2
- import IDE from '../utils/ide';
3
- const resolveMissingFunction = async ({ defaultInputVariables, groomed, metaData, name, }) => {
4
- const { replace } = (await prompts({
5
- active: 'replace',
6
- inactive: 'add',
7
- initial: false,
8
- message: `Function "${name}" is missing. What do you want to do?`,
9
- name: 'replace',
10
- type: 'toggle',
11
- }));
12
- if (replace) {
13
- const choices = Object.keys(metaData).filter((key) => !groomed[key]);
14
- let replacedFunction;
15
- if (choices.length === 1) {
16
- const confirm = await prompts({
17
- initial: true,
18
- message: `Replace "${choices[0]}"?`,
19
- name: 'value',
20
- type: 'confirm',
21
- });
22
- if (confirm.value)
23
- [replacedFunction] = choices;
24
- else
25
- throw new Error('Abort.');
26
- }
27
- else {
28
- replacedFunction = (await prompts({
29
- choices: choices.map((key) => ({ title: key, value: key })),
30
- initial: 0,
31
- message: 'Replace',
32
- name: 'value',
33
- type: 'select',
34
- })).value;
35
- }
36
- groomed[name] = metaData[replacedFunction];
37
- groomed[name].replace = replacedFunction;
38
- // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
39
- delete metaData[replacedFunction];
40
- }
41
- else {
42
- const { returnType, inputVariables } = await prompts([
43
- {
44
- choices: [
45
- { title: 'string', value: 'string' },
46
- { title: 'integer', value: 'integer' },
47
- { title: 'boolean', value: 'boolean' },
48
- ],
49
- initial: 0,
50
- message: `What is the return type of the function?`,
51
- name: 'returnType',
52
- type: 'select',
53
- },
54
- {
55
- initial: defaultInputVariables,
56
- message: 'What are the input variables? (`name:type name:type ...`)',
57
- name: 'inputVariables',
58
- type: 'text',
59
- },
60
- ]);
61
- groomed[name] = {
62
- inputVariables: inputVariables
63
- .split(/(\s|,)/)
64
- .reduce((variables, variable) => {
65
- if (variable.length) {
66
- const [varName, varType] = variable.split(':');
67
- variables[varName] = varType;
68
- }
69
- return variables;
70
- }, {}),
71
- returnType,
72
- };
73
- }
74
- return groomed;
75
- };
76
- const storeCustomFunctions = async (ide, metaData, bumpRevision) => {
77
- const customFunctions = (await ide.get('bootstrap/custom_functions'));
78
- const revision = customFunctions.reduce((rev, func) => Math.max(rev, func.revision), 0) +
79
- (bumpRevision ? 1 : 0);
80
- const ids = customFunctions.reduce((map, { id, name }) => ({ ...map, [name]: id }), {});
81
- await Object.keys(metaData).reduce(async (promise, name) => {
82
- await promise;
83
- const { replace, returnType, inputVariables } = metaData[name];
84
- const id = ids[replace ?? name];
85
- const method = id ? 'put' : 'post';
86
- const action = id ? 'Updating' : 'Creating';
87
- const params = {
88
- input_variables: inputVariables,
89
- name,
90
- return_type: returnType,
91
- revision,
92
- };
93
- return ide[method](`custom_functions/${id || 'new'}`, { json: { record: params } }, `${action} custom function "${replace ?? name}" ...`);
94
- }, Promise.resolve(null));
95
- return revision;
96
- };
97
- export { resolveMissingFunction, storeCustomFunctions };
98
- //# sourceMappingURL=publishFunctions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"publishFunctions.js","sourceRoot":"","sources":["../../src/functions/publishFunctions.ts"],"names":[],"mappings":"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"}
@@ -1,48 +0,0 @@
1
- import { kebab } from 'case';
2
- import chalk from 'chalk';
3
- import fs from 'fs-extra';
4
- import path from 'path';
5
- import { functionDefinition, functionDefinitionPath, functionDirs, isFunctionVersion, } from './functionDefinitions';
6
- const check = chalk.green(`✔`);
7
- const cross = chalk.red(`✖`);
8
- const migrate = (functionsPath, verbose = false) => {
9
- const log = (msg) => {
10
- if (verbose) {
11
- console.log(msg);
12
- }
13
- };
14
- log('Checking for unversioned functions ...');
15
- functionDirs(functionsPath, true).forEach((functionPath) => {
16
- const definition = functionDefinition(functionPath, functionsPath);
17
- const { name } = definition;
18
- let { version } = definition;
19
- let postfix = kebab(name);
20
- if (isFunctionVersion(functionPath, functionsPath)) {
21
- postfix = `-${version}`;
22
- }
23
- else {
24
- version = '1.0';
25
- postfix = ` => ${path.join(name, version)}`;
26
- try {
27
- delete definition.schema.name;
28
- fs.writeJSONSync(functionDefinitionPath(functionPath), definition.schema, {
29
- spaces: 2,
30
- });
31
- const tmpDir = '.tmp';
32
- const tempDir = path.join(tmpDir, `${kebab(name)}-${version}`);
33
- const targetDir = path.join(functionsPath, kebab(name));
34
- fs.ensureDirSync(tmpDir);
35
- fs.renameSync(functionPath, tempDir);
36
- fs.mkdirSync(targetDir);
37
- fs.moveSync(tempDir, path.join(targetDir, version));
38
- }
39
- catch {
40
- log(`${cross} Failed to version: ${name}`);
41
- return;
42
- }
43
- }
44
- log(`${check} Version: ${name}${postfix}`);
45
- });
46
- };
47
- export { migrate };
48
- //# sourceMappingURL=versions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"versions.js","sourceRoot":"","sources":["../../src/functions/versions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,YAAY,EACZ,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE7B,MAAM,OAAO,GAAG,CAAC,aAAqB,EAAE,OAAO,GAAG,KAAK,EAAQ,EAAE;IAC/D,MAAM,GAAG,GAAG,CAAC,GAAW,EAAQ,EAAE;QAChC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC;IAEF,GAAG,CAAC,wCAAwC,CAAC,CAAC;IAE9C,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE;QACzD,MAAM,UAAU,GAAG,kBAAkB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;QACnE,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC;QAE5B,IAAI,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;QAC7B,IAAI,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QAE1B,IAAI,iBAAiB,CAAC,YAAY,EAAE,aAAa,CAAC,EAAE,CAAC;YACnD,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,KAAK,CAAC;YAChB,OAAO,GAAG,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;YAE5C,IAAI,CAAC;gBACH,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;gBAE9B,EAAE,CAAC,aAAa,CACd,sBAAsB,CAAC,YAAY,CAAC,EACpC,UAAU,CAAC,MAAM,EACjB;oBACE,MAAM,EAAE,CAAC;iBACV,CACF,CAAC;gBAEF,MAAM,MAAM,GAAG,MAAM,CAAC;gBACtB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;gBAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBAExD,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBACzB,EAAE,CAAC,UAAU,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;gBACrC,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;gBACxB,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;YACtD,CAAC;YAAC,MAAM,CAAC;gBACP,GAAG,CAAC,GAAG,KAAK,uBAAuB,IAAI,EAAE,CAAC,CAAC;gBAC3C,OAAO;YACT,CAAC;QACH,CAAC;QAED,GAAG,CAAC,GAAG,KAAK,aAAa,IAAI,GAAG,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -1,145 +0,0 @@
1
- import fs from 'fs-extra';
2
- import ora from 'ora';
3
- import os from 'os';
4
- import path from 'path';
5
- import prompts from 'prompts';
6
- import Webhead, {} from 'webhead';
7
- import Config from '../functions/config';
8
- import FusionAuth from './fusionAuth';
9
- class IDE {
10
- configFile;
11
- config;
12
- webhead;
13
- fusionAuth;
14
- loggedIn;
15
- constructor(config) {
16
- this.configFile = path.join(os.homedir(), '.bb-cli');
17
- this.config = config;
18
- if (!fs.pathExistsSync(this.configFile)) {
19
- fs.writeFileSync(this.configFile, JSON.stringify({ cookies: [] }, null, 2));
20
- }
21
- this.webhead = Webhead({
22
- beforeSend: ({ method, url, options }, { csrfToken }) => {
23
- if (method !== 'GET' && csrfToken) {
24
- options.headers ??= {};
25
- options.headers['X-Csrf-Token'] = csrfToken;
26
- }
27
- return { method, options, url };
28
- },
29
- complete: (_parameters, session, webhead) => {
30
- if (!session.csrfToken) {
31
- const match = webhead.text().match(/Betty\.CSRF = '(.*?)'/);
32
- if (match) {
33
- const [, csrfToken] = match;
34
- session.csrfToken = csrfToken;
35
- }
36
- }
37
- },
38
- jarFile: this.configFile,
39
- });
40
- this.fusionAuth = new FusionAuth(this.config, async () => this.relogin());
41
- }
42
- async get(requestPath, label) {
43
- return this.request({
44
- label,
45
- method: 'get',
46
- requestPath,
47
- });
48
- }
49
- async post(requestPath, options, label) {
50
- return this.request({
51
- label,
52
- method: 'post',
53
- options,
54
- requestPath,
55
- });
56
- }
57
- async put(requestPath, options, label) {
58
- return this.request({
59
- label,
60
- method: 'put',
61
- options,
62
- requestPath,
63
- });
64
- }
65
- async request({ label, method, options, requestPath, }) {
66
- await this.ensureLogin();
67
- const spinner = label ? ora(label).start() : undefined;
68
- const { statusCode } = await this.webhead[method](`${this.config.host}/api/${requestPath}`, options);
69
- if (spinner) {
70
- spinner[statusCode.toString().match(/^2/) ? 'succeed' : 'fail']();
71
- }
72
- return this.webhead.json() ?? this.webhead.text();
73
- }
74
- async relogin() {
75
- this.loggedIn = false;
76
- this.webhead.clearCookies();
77
- await this.ensureLogin();
78
- }
79
- async ensureLogin() {
80
- if (this.loggedIn)
81
- return;
82
- await this.webhead.get(this.config.host);
83
- if (this.webhead.text().match('redirect_location')) {
84
- await this.webhead.get('/login');
85
- }
86
- let email = '';
87
- let password = '';
88
- const ensureAuth = async () => {
89
- const cassieLogin = !!this.webhead.$('form [name="username"]').length;
90
- const fusionAuthLogin = !!this.webhead.$('form [name="loginId"]').length;
91
- if (cassieLogin || fusionAuthLogin) {
92
- const config = fs.readJsonSync(this.configFile);
93
- const credentials = await prompts([
94
- {
95
- initial: config.email,
96
- message: 'Fill in your e-mail address',
97
- name: 'email',
98
- type: 'text',
99
- },
100
- {
101
- message: 'Fill in your password',
102
- name: 'password',
103
- type: 'password',
104
- },
105
- ]);
106
- ({ email, password } = credentials);
107
- config.email = email;
108
- fs.writeFileSync(this.configFile, JSON.stringify(config, null, 2));
109
- const identifier = cassieLogin ? 'username' : 'loginId';
110
- const input = {
111
- [identifier]: email,
112
- password,
113
- };
114
- await this.webhead.submit('form', input);
115
- await ensureAuth();
116
- }
117
- };
118
- const ensure2FA = async () => {
119
- const cassie2FA = !!this.webhead.$('form[name="otp"]').length;
120
- const fusionAuth2FA = !!this.webhead.$('form[id="2fa-form"]').length;
121
- if (cassie2FA || fusionAuth2FA) {
122
- const { code } = await prompts([
123
- {
124
- message: 'Fill in your 2FA code',
125
- name: 'code',
126
- type: 'text',
127
- },
128
- ]);
129
- const name = cassie2FA ? 'otp' : 'code';
130
- const input = {
131
- [name]: code,
132
- };
133
- await this.webhead.submit('form[name="otp"],form[id="2fa-form"]', input);
134
- await ensure2FA();
135
- }
136
- };
137
- await ensureAuth();
138
- await ensure2FA();
139
- this.fusionAuth.loginId = email;
140
- this.fusionAuth.password = password;
141
- this.loggedIn = true;
142
- }
143
- }
144
- export default IDE;
145
- //# sourceMappingURL=ide.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ide.js","sourceRoot":"","sources":["../../src/utils/ide.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,OAAO,EAAE,EAIf,MAAM,SAAS,CAAC;AAEjB,OAAO,MAAM,MAAM,qBAAqB,CAAC;AACzC,OAAO,UAAU,MAAM,cAAc,CAAC;AAWtC,MAAM,GAAG;IACC,UAAU,CAAS;IAEnB,MAAM,CAAS;IAEhB,OAAO,CAAkB;IAEzB,UAAU,CAAa;IAEtB,QAAQ,CAAW;IAE3B,YAAY,MAAc;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;QAErD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACxC,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CACzC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACrB,UAAU,EAAE,CACV,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAA4B,EAClD,EAAE,SAAS,EAAa,EACxB,EAAE;gBACF,IAAI,MAAM,KAAK,KAAK,IAAI,SAAS,EAAE,CAAC;oBAClC,OAAO,CAAC,OAAO,KAAK,EAAE,CAAC;oBAEvB,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;gBAC9C,CAAC;gBACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;YAClC,CAAC;YACD,QAAQ,EAAE,CACR,WAAqC,EACrC,OAAkB,EAClB,OAAwB,EACxB,EAAE;gBACF,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;oBACvB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;oBAC5D,IAAI,KAAK,EAAE,CAAC;wBACV,MAAM,CAAC,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC;wBAC5B,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;oBAChC,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,EAAE,IAAI,CAAC,UAAU;SACzB,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAC9B,IAAI,CAAC,MAAM,EACX,KAAK,IAAmB,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAC1C,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CACP,WAAmB,EACnB,KAAc;QAEd,OAAO,IAAI,CAAC,OAAO,CAAC;YAClB,KAAK;YACL,MAAM,EAAE,KAAK;YACb,WAAW;SACZ,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CACR,WAAmB,EACnB,OAAoB,EACpB,KAAc;QAEd,OAAO,IAAI,CAAC,OAAO,CAAC;YAClB,KAAK;YACL,MAAM,EAAE,MAAM;YACd,OAAO;YACP,WAAW;SACZ,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG,CACP,WAAmB,EACnB,OAAoB,EACpB,KAAc;QAEd,OAAO,IAAI,CAAC,OAAO,CAAC;YAClB,KAAK;YACL,MAAM,EAAE,KAAK;YACb,OAAO;YACP,WAAW;SACZ,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,EACpB,KAAK,EACL,MAAM,EACN,OAAO,EACP,WAAW,GACE;QACb,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEzB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAEvD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAC/C,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,QAAQ,WAAW,EAAE,EACxC,OAAO,CACR,CAAC;QAEF,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACpE,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACpD,CAAC;IAEO,KAAK,CAAC,OAAO;QACnB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAC5B,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,WAAW;QACvB,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE1B,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEzC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,QAAQ,GAAG,EAAE,CAAC;QAElB,MAAM,UAAU,GAAG,KAAK,IAAmB,EAAE;YAC3C,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,MAAM,CAAC;YACtE,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,MAAM,CAAC;YAEzE,IAAI,WAAW,IAAI,eAAe,EAAE,CAAC;gBACnC,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAChD,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC;oBAChC;wBACE,OAAO,EAAE,MAAM,CAAC,KAAK;wBACrB,OAAO,EAAE,6BAA6B;wBACtC,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,MAAM;qBACb;oBACD;wBACE,OAAO,EAAE,uBAAuB;wBAChC,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,UAAU;qBACjB;iBACF,CAAC,CAAC;gBAEH,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC,CAAC;gBAEpC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;gBACrB,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAEnE,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;gBACxD,MAAM,KAAK,GAAG;oBACZ,CAAC,UAAU,CAAC,EAAE,KAAK;oBACnB,QAAQ;iBACT,CAAC;gBAEF,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBAEzC,MAAM,UAAU,EAAE,CAAC;YACrB,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,SAAS,GAAG,KAAK,IAAmB,EAAE;YAC1C,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC;YAC9D,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC;YAErE,IAAI,SAAS,IAAI,aAAa,EAAE,CAAC;gBAC/B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC;oBAC7B;wBACE,OAAO,EAAE,uBAAuB;wBAChC,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,MAAM;qBACb;iBACF,CAAC,CAAC;gBAEH,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;gBACxC,MAAM,KAAK,GAAG;oBACZ,CAAC,IAAI,CAAC,EAAE,IAAI;iBACb,CAAC;gBAEF,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CACvB,sCAAsC,EACtC,KAAK,CACN,CAAC;gBAEF,MAAM,SAAS,EAAE,CAAC;YACpB,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,UAAU,EAAE,CAAC;QACnB,MAAM,SAAS,EAAE,CAAC;QAElB,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEpC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;CACF;AAED,eAAe,GAAG,CAAC"}