@base44-preview/cli 0.0.31-pr.214.ad2828d → 0.0.31-pr.217.335fc35
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/cli/index.js +108 -156
- package/dist/cli/index.js.map +7 -8
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -17446,7 +17446,7 @@ var require_lodash2 = __commonJS((exports, module) => {
|
|
|
17446
17446
|
}
|
|
17447
17447
|
return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, undefined2, comparator) : [];
|
|
17448
17448
|
});
|
|
17449
|
-
function
|
|
17449
|
+
function join10(array2, separator) {
|
|
17450
17450
|
return array2 == null ? "" : nativeJoin.call(array2, separator);
|
|
17451
17451
|
}
|
|
17452
17452
|
function last(array2) {
|
|
@@ -19378,7 +19378,7 @@ __p += '`;
|
|
|
19378
19378
|
lodash.isUndefined = isUndefined;
|
|
19379
19379
|
lodash.isWeakMap = isWeakMap;
|
|
19380
19380
|
lodash.isWeakSet = isWeakSet;
|
|
19381
|
-
lodash.join =
|
|
19381
|
+
lodash.join = join10;
|
|
19382
19382
|
lodash.kebabCase = kebabCase2;
|
|
19383
19383
|
lodash.last = last;
|
|
19384
19384
|
lodash.lastIndexOf = lastIndexOf;
|
|
@@ -20007,7 +20007,7 @@ function cleanDoc(doc2) {
|
|
|
20007
20007
|
return mapDoc(doc2, (currentDoc) => cleanDocFn(currentDoc));
|
|
20008
20008
|
}
|
|
20009
20009
|
function replaceEndOfLine(doc2, replacement = literalline) {
|
|
20010
|
-
return mapDoc(doc2, (currentDoc) => typeof currentDoc === "string" ?
|
|
20010
|
+
return mapDoc(doc2, (currentDoc) => typeof currentDoc === "string" ? join10(replacement, currentDoc.split(`
|
|
20011
20011
|
`)) : currentDoc);
|
|
20012
20012
|
}
|
|
20013
20013
|
function canBreakFn(doc2) {
|
|
@@ -20087,7 +20087,7 @@ function indentIfBreak(contents, options) {
|
|
|
20087
20087
|
negate: options.negate
|
|
20088
20088
|
};
|
|
20089
20089
|
}
|
|
20090
|
-
function
|
|
20090
|
+
function join10(separator, docs) {
|
|
20091
20091
|
assertDoc(separator);
|
|
20092
20092
|
assertDocArray(docs);
|
|
20093
20093
|
const parts = [];
|
|
@@ -20798,7 +20798,7 @@ var init_doc = __esm(() => {
|
|
|
20798
20798
|
MODE_FLAT = Symbol("MODE_FLAT");
|
|
20799
20799
|
DOC_FILL_PRINTED_LENGTH = Symbol("DOC_FILL_PRINTED_LENGTH");
|
|
20800
20800
|
builders = {
|
|
20801
|
-
join:
|
|
20801
|
+
join: join10,
|
|
20802
20802
|
line,
|
|
20803
20803
|
softline,
|
|
20804
20804
|
hardline,
|
|
@@ -125712,7 +125712,7 @@ Expected it to be ${EXPECTED_TYPE_VALUES}.`;
|
|
|
125712
125712
|
return mapDoc2(doc2, (currentDoc) => cleanDocFn2(currentDoc));
|
|
125713
125713
|
}
|
|
125714
125714
|
function replaceEndOfLine2(doc2, replacement = literalline2) {
|
|
125715
|
-
return mapDoc2(doc2, (currentDoc) => typeof currentDoc === "string" ?
|
|
125715
|
+
return mapDoc2(doc2, (currentDoc) => typeof currentDoc === "string" ? join12(replacement, currentDoc.split(`
|
|
125716
125716
|
`)) : currentDoc);
|
|
125717
125717
|
}
|
|
125718
125718
|
function canBreakFn2(doc2) {
|
|
@@ -125798,7 +125798,7 @@ Expected it to be ${EXPECTED_TYPE_VALUES}.`;
|
|
|
125798
125798
|
negate: options8.negate
|
|
125799
125799
|
};
|
|
125800
125800
|
}
|
|
125801
|
-
function
|
|
125801
|
+
function join12(separator, docs) {
|
|
125802
125802
|
assertDoc2(separator);
|
|
125803
125803
|
assertDocArray2(docs);
|
|
125804
125804
|
const parts = [];
|
|
@@ -126463,7 +126463,7 @@ Expected it to be ${EXPECTED_TYPE_VALUES}.`;
|
|
|
126463
126463
|
}
|
|
126464
126464
|
}
|
|
126465
126465
|
var builders2 = {
|
|
126466
|
-
join:
|
|
126466
|
+
join: join12,
|
|
126467
126467
|
line: line3,
|
|
126468
126468
|
softline: softline2,
|
|
126469
126469
|
hardline: hardline4,
|
|
@@ -155678,10 +155678,10 @@ var require_view = __commonJS((exports, module) => {
|
|
|
155678
155678
|
var debug = require_src4()("express:view");
|
|
155679
155679
|
var path18 = __require("node:path");
|
|
155680
155680
|
var fs28 = __require("node:fs");
|
|
155681
|
-
var
|
|
155681
|
+
var dirname10 = path18.dirname;
|
|
155682
155682
|
var basename4 = path18.basename;
|
|
155683
155683
|
var extname2 = path18.extname;
|
|
155684
|
-
var
|
|
155684
|
+
var join13 = path18.join;
|
|
155685
155685
|
var resolve5 = path18.resolve;
|
|
155686
155686
|
module.exports = View;
|
|
155687
155687
|
function View(name2, options8) {
|
|
@@ -155717,7 +155717,7 @@ var require_view = __commonJS((exports, module) => {
|
|
|
155717
155717
|
for (var i5 = 0;i5 < roots.length && !path19; i5++) {
|
|
155718
155718
|
var root2 = roots[i5];
|
|
155719
155719
|
var loc = resolve5(root2, name2);
|
|
155720
|
-
var dir =
|
|
155720
|
+
var dir = dirname10(loc);
|
|
155721
155721
|
var file2 = basename4(loc);
|
|
155722
155722
|
path19 = this.resolve(dir, file2);
|
|
155723
155723
|
}
|
|
@@ -155743,12 +155743,12 @@ var require_view = __commonJS((exports, module) => {
|
|
|
155743
155743
|
};
|
|
155744
155744
|
View.prototype.resolve = function resolve6(dir, file2) {
|
|
155745
155745
|
var ext = this.ext;
|
|
155746
|
-
var path19 =
|
|
155746
|
+
var path19 = join13(dir, file2);
|
|
155747
155747
|
var stat2 = tryStat(path19);
|
|
155748
155748
|
if (stat2 && stat2.isFile()) {
|
|
155749
155749
|
return path19;
|
|
155750
155750
|
}
|
|
155751
|
-
path19 =
|
|
155751
|
+
path19 = join13(dir, basename4(file2, ext), "index" + ext);
|
|
155752
155752
|
stat2 = tryStat(path19);
|
|
155753
155753
|
if (stat2 && stat2.isFile()) {
|
|
155754
155754
|
return path19;
|
|
@@ -159443,7 +159443,7 @@ var require_send = __commonJS((exports, module) => {
|
|
|
159443
159443
|
var Stream2 = __require("stream");
|
|
159444
159444
|
var util2 = __require("util");
|
|
159445
159445
|
var extname2 = path18.extname;
|
|
159446
|
-
var
|
|
159446
|
+
var join13 = path18.join;
|
|
159447
159447
|
var normalize = path18.normalize;
|
|
159448
159448
|
var resolve5 = path18.resolve;
|
|
159449
159449
|
var sep = path18.sep;
|
|
@@ -159615,7 +159615,7 @@ var require_send = __commonJS((exports, module) => {
|
|
|
159615
159615
|
return res;
|
|
159616
159616
|
}
|
|
159617
159617
|
parts = path19.split(sep);
|
|
159618
|
-
path19 = normalize(
|
|
159618
|
+
path19 = normalize(join13(root2, path19));
|
|
159619
159619
|
} else {
|
|
159620
159620
|
if (UP_PATH_REGEXP.test(path19)) {
|
|
159621
159621
|
debug('malicious path "%s"', path19);
|
|
@@ -159755,7 +159755,7 @@ var require_send = __commonJS((exports, module) => {
|
|
|
159755
159755
|
return self2.onStatError(err);
|
|
159756
159756
|
return self2.error(404);
|
|
159757
159757
|
}
|
|
159758
|
-
var p4 =
|
|
159758
|
+
var p4 = join13(path19, self2._index[i5]);
|
|
159759
159759
|
debug('stat "%s"', p4);
|
|
159760
159760
|
fs28.stat(p4, function(err2, stat2) {
|
|
159761
159761
|
if (err2)
|
|
@@ -162834,7 +162834,7 @@ var {
|
|
|
162834
162834
|
} = import__.default;
|
|
162835
162835
|
|
|
162836
162836
|
// src/cli/commands/agents/pull.ts
|
|
162837
|
-
import { dirname as dirname7, join as
|
|
162837
|
+
import { dirname as dirname7, join as join8 } from "node:path";
|
|
162838
162838
|
|
|
162839
162839
|
// node_modules/@clack/core/dist/index.mjs
|
|
162840
162840
|
var import_sisteransi = __toESM(require_src(), 1);
|
|
@@ -184871,7 +184871,7 @@ var generateGlobTasks = normalizeArguments(generateTasks);
|
|
|
184871
184871
|
var generateGlobTasksSync = normalizeArgumentsSync(generateTasksSync);
|
|
184872
184872
|
|
|
184873
184873
|
// src/core/project/config.ts
|
|
184874
|
-
import { dirname as dirname5, join as
|
|
184874
|
+
import { dirname as dirname5, join as join5 } from "node:path";
|
|
184875
184875
|
|
|
184876
184876
|
// src/core/resources/agent/schema.ts
|
|
184877
184877
|
var EntityOperationSchema = exports_external.enum(["create", "update", "delete", "read"]);
|
|
@@ -185145,9 +185145,6 @@ async function listConnectors() {
|
|
|
185145
185145
|
}
|
|
185146
185146
|
return result.data;
|
|
185147
185147
|
}
|
|
185148
|
-
async function fetchConnectors() {
|
|
185149
|
-
return await listConnectors();
|
|
185150
|
-
}
|
|
185151
185148
|
async function setConnector(integrationType, scopes) {
|
|
185152
185149
|
const appClient = getAppClient();
|
|
185153
185150
|
let response;
|
|
@@ -185200,8 +185197,6 @@ async function removeConnector(integrationType) {
|
|
|
185200
185197
|
return result.data;
|
|
185201
185198
|
}
|
|
185202
185199
|
// src/core/resources/connector/config.ts
|
|
185203
|
-
import { join as join4 } from "node:path";
|
|
185204
|
-
import { isDeepStrictEqual } from "node:util";
|
|
185205
185200
|
async function readConnectorFile(connectorPath) {
|
|
185206
185201
|
const parsed = await readJsonFile(connectorPath);
|
|
185207
185202
|
const result = ConnectorResourceSchema.safeParse(parsed);
|
|
@@ -185210,7 +185205,7 @@ async function readConnectorFile(connectorPath) {
|
|
|
185210
185205
|
}
|
|
185211
185206
|
return result.data;
|
|
185212
185207
|
}
|
|
185213
|
-
async function
|
|
185208
|
+
async function readAllConnectors(connectorsDir) {
|
|
185214
185209
|
if (!await pathExists(connectorsDir)) {
|
|
185215
185210
|
return [];
|
|
185216
185211
|
}
|
|
@@ -185218,66 +185213,24 @@ async function readConnectorFiles(connectorsDir) {
|
|
|
185218
185213
|
cwd: connectorsDir,
|
|
185219
185214
|
absolute: true
|
|
185220
185215
|
});
|
|
185221
|
-
|
|
185222
|
-
|
|
185223
|
-
|
|
185224
|
-
})));
|
|
185216
|
+
const connectors = await Promise.all(files.map((filePath) => readConnectorFile(filePath)));
|
|
185217
|
+
assertNoDuplicateConnectors(connectors);
|
|
185218
|
+
return connectors;
|
|
185225
185219
|
}
|
|
185226
|
-
|
|
185227
|
-
const entries = await readConnectorFiles(connectorsDir);
|
|
185220
|
+
function assertNoDuplicateConnectors(connectors) {
|
|
185228
185221
|
const types = new Set;
|
|
185229
|
-
for (const
|
|
185230
|
-
if (types.has(
|
|
185231
|
-
throw new InvalidInputError(`Duplicate connector type "${
|
|
185222
|
+
for (const connector of connectors) {
|
|
185223
|
+
if (types.has(connector.type)) {
|
|
185224
|
+
throw new InvalidInputError(`Duplicate connector type "${connector.type}"`, {
|
|
185232
185225
|
hints: [
|
|
185233
185226
|
{
|
|
185234
|
-
message: `Remove duplicate connectors with type "${
|
|
185227
|
+
message: `Remove duplicate connectors with type "${connector.type}" - only one connector per type is allowed`
|
|
185235
185228
|
}
|
|
185236
185229
|
]
|
|
185237
185230
|
});
|
|
185238
185231
|
}
|
|
185239
|
-
types.add(
|
|
185232
|
+
types.add(connector.type);
|
|
185240
185233
|
}
|
|
185241
|
-
return entries.map((e2) => e2.data);
|
|
185242
|
-
}
|
|
185243
|
-
async function writeConnectors(connectorsDir, remoteConnectors) {
|
|
185244
|
-
const entries = await readConnectorFiles(connectorsDir);
|
|
185245
|
-
const typeToEntry = new Map;
|
|
185246
|
-
for (const entry of entries) {
|
|
185247
|
-
if (typeToEntry.has(entry.data.type)) {
|
|
185248
|
-
throw new InvalidInputError(`Duplicate connector type "${entry.data.type}"`, {
|
|
185249
|
-
hints: [
|
|
185250
|
-
{
|
|
185251
|
-
message: `Remove duplicate connectors with type "${entry.data.type}" - only one connector per type is allowed`
|
|
185252
|
-
}
|
|
185253
|
-
]
|
|
185254
|
-
});
|
|
185255
|
-
}
|
|
185256
|
-
typeToEntry.set(entry.data.type, entry);
|
|
185257
|
-
}
|
|
185258
|
-
const newTypes = new Set(remoteConnectors.map((c) => c.integration_type));
|
|
185259
|
-
const deleted = [];
|
|
185260
|
-
for (const [type, entry] of typeToEntry) {
|
|
185261
|
-
if (!newTypes.has(type)) {
|
|
185262
|
-
await deleteFile(entry.filePath);
|
|
185263
|
-
deleted.push(type);
|
|
185264
|
-
}
|
|
185265
|
-
}
|
|
185266
|
-
const written = [];
|
|
185267
|
-
for (const connector of remoteConnectors) {
|
|
185268
|
-
const existing = typeToEntry.get(connector.integration_type);
|
|
185269
|
-
const localConnector = {
|
|
185270
|
-
type: connector.integration_type,
|
|
185271
|
-
scopes: connector.scopes
|
|
185272
|
-
};
|
|
185273
|
-
if (existing && isDeepStrictEqual(existing.data, localConnector)) {
|
|
185274
|
-
continue;
|
|
185275
|
-
}
|
|
185276
|
-
const filePath = existing?.filePath ?? join4(connectorsDir, `${connector.integration_type}.${CONFIG_FILE_EXTENSION}`);
|
|
185277
|
-
await writeJsonFile(filePath, localConnector);
|
|
185278
|
-
written.push(connector.integration_type);
|
|
185279
|
-
}
|
|
185280
|
-
return { written, deleted };
|
|
185281
185234
|
}
|
|
185282
185235
|
// src/core/resources/connector/push.ts
|
|
185283
185236
|
async function pushConnectors(connectors) {
|
|
@@ -185618,7 +185571,7 @@ async function deployFunctions(functions) {
|
|
|
185618
185571
|
return result.data;
|
|
185619
185572
|
}
|
|
185620
185573
|
// src/core/resources/function/config.ts
|
|
185621
|
-
import { dirname as dirname4, join as
|
|
185574
|
+
import { dirname as dirname4, join as join4 } from "node:path";
|
|
185622
185575
|
async function readFunctionConfig(configPath) {
|
|
185623
185576
|
const parsed = await readJsonFile(configPath);
|
|
185624
185577
|
const result = FunctionConfigSchema.safeParse(parsed);
|
|
@@ -185630,7 +185583,7 @@ async function readFunctionConfig(configPath) {
|
|
|
185630
185583
|
async function readFunction(configPath) {
|
|
185631
185584
|
const config5 = await readFunctionConfig(configPath);
|
|
185632
185585
|
const functionDir = dirname4(configPath);
|
|
185633
|
-
const entryPath =
|
|
185586
|
+
const entryPath = join4(functionDir, config5.entry);
|
|
185634
185587
|
if (!await pathExists(entryPath)) {
|
|
185635
185588
|
throw new FileNotFoundError(`Function entry file not found: ${entryPath} (referenced in ${configPath})`);
|
|
185636
185589
|
}
|
|
@@ -185719,10 +185672,10 @@ async function readProjectConfig(projectRoot) {
|
|
|
185719
185672
|
const project = result.data;
|
|
185720
185673
|
const configDir = dirname5(configPath);
|
|
185721
185674
|
const [entities, functions, agents, connectors] = await Promise.all([
|
|
185722
|
-
entityResource.readAll(
|
|
185723
|
-
functionResource.readAll(
|
|
185724
|
-
agentResource.readAll(
|
|
185725
|
-
connectorResource.readAll(
|
|
185675
|
+
entityResource.readAll(join5(configDir, project.entitiesDir)),
|
|
185676
|
+
functionResource.readAll(join5(configDir, project.functionsDir)),
|
|
185677
|
+
agentResource.readAll(join5(configDir, project.agentsDir)),
|
|
185678
|
+
connectorResource.readAll(join5(configDir, project.connectorsDir))
|
|
185726
185679
|
]);
|
|
185727
185680
|
return {
|
|
185728
185681
|
project: { ...project, root, configPath },
|
|
@@ -185819,7 +185772,7 @@ async function readAppConfig(projectRoot) {
|
|
|
185819
185772
|
// src/core/project/template.ts
|
|
185820
185773
|
var import_ejs = __toESM(require_ejs(), 1);
|
|
185821
185774
|
var import_front_matter = __toESM(require_front_matter(), 1);
|
|
185822
|
-
import { dirname as dirname6, join as
|
|
185775
|
+
import { dirname as dirname6, join as join6 } from "node:path";
|
|
185823
185776
|
async function listTemplates() {
|
|
185824
185777
|
const parsed = await readJsonFile(getTemplatesIndexPath());
|
|
185825
185778
|
const result = TemplatesConfigSchema.safeParse(parsed);
|
|
@@ -185829,23 +185782,23 @@ async function listTemplates() {
|
|
|
185829
185782
|
return result.data.templates;
|
|
185830
185783
|
}
|
|
185831
185784
|
async function renderTemplate(template, destPath, data) {
|
|
185832
|
-
const templateDir =
|
|
185785
|
+
const templateDir = join6(getTemplatesDir(), template.path);
|
|
185833
185786
|
const files = await globby("**/*", {
|
|
185834
185787
|
cwd: templateDir,
|
|
185835
185788
|
dot: true,
|
|
185836
185789
|
onlyFiles: true
|
|
185837
185790
|
});
|
|
185838
185791
|
for (const file2 of files) {
|
|
185839
|
-
const srcPath =
|
|
185792
|
+
const srcPath = join6(templateDir, file2);
|
|
185840
185793
|
try {
|
|
185841
185794
|
if (file2.endsWith(".ejs")) {
|
|
185842
185795
|
const rendered = await import_ejs.default.renderFile(srcPath, data);
|
|
185843
185796
|
const { attributes, body } = import_front_matter.default(rendered);
|
|
185844
|
-
const destFile = attributes.outputFileName ?
|
|
185845
|
-
const destFilePath =
|
|
185797
|
+
const destFile = attributes.outputFileName ? join6(dirname6(file2), attributes.outputFileName) : file2.replace(/\.ejs$/, "");
|
|
185798
|
+
const destFilePath = join6(destPath, destFile);
|
|
185846
185799
|
await writeFile(destFilePath, body);
|
|
185847
185800
|
} else {
|
|
185848
|
-
const destFilePath =
|
|
185801
|
+
const destFilePath = join6(destPath, file2);
|
|
185849
185802
|
await copyFile(srcPath, destFilePath);
|
|
185850
185803
|
}
|
|
185851
185804
|
} catch (error48) {
|
|
@@ -185947,7 +185900,7 @@ async function getSiteFilePaths(outputDir) {
|
|
|
185947
185900
|
// src/core/site/deploy.ts
|
|
185948
185901
|
import { randomUUID } from "node:crypto";
|
|
185949
185902
|
import { tmpdir } from "node:os";
|
|
185950
|
-
import { join as
|
|
185903
|
+
import { join as join7 } from "node:path";
|
|
185951
185904
|
async function deploySite(siteOutputDir) {
|
|
185952
185905
|
if (!await pathExists(siteOutputDir)) {
|
|
185953
185906
|
throw new FileNotFoundError(`Output directory does not exist: ${siteOutputDir}. Make sure to build your project first.`, {
|
|
@@ -185964,7 +185917,7 @@ async function deploySite(siteOutputDir) {
|
|
|
185964
185917
|
]
|
|
185965
185918
|
});
|
|
185966
185919
|
}
|
|
185967
|
-
const archivePath =
|
|
185920
|
+
const archivePath = join7(tmpdir(), `base44-site-${randomUUID()}.tar.gz`);
|
|
185968
185921
|
try {
|
|
185969
185922
|
await createArchive(siteOutputDir, archivePath);
|
|
185970
185923
|
return await uploadSite(archivePath);
|
|
@@ -193641,7 +193594,7 @@ function getDashboardUrl(projectId) {
|
|
|
193641
193594
|
async function pullAgentsAction() {
|
|
193642
193595
|
const { project: project2 } = await readProjectConfig();
|
|
193643
193596
|
const configDir = dirname7(project2.configPath);
|
|
193644
|
-
const agentsDir =
|
|
193597
|
+
const agentsDir = join8(configDir, project2.agentsDir);
|
|
193645
193598
|
const remoteAgents = await runTask("Fetching agents from Base44", async () => {
|
|
193646
193599
|
return await fetchAgents();
|
|
193647
193600
|
}, {
|
|
@@ -193734,43 +193687,6 @@ function getWhoamiCommand(context) {
|
|
|
193734
193687
|
});
|
|
193735
193688
|
}
|
|
193736
193689
|
|
|
193737
|
-
// src/cli/commands/connectors/pull.ts
|
|
193738
|
-
import { dirname as dirname8, join as join10 } from "node:path";
|
|
193739
|
-
async function pullConnectorsAction() {
|
|
193740
|
-
const { project: project2 } = await readProjectConfig();
|
|
193741
|
-
const configDir = dirname8(project2.configPath);
|
|
193742
|
-
const connectorsDir = join10(configDir, project2.connectorsDir);
|
|
193743
|
-
const remoteConnectors = await runTask("Fetching connectors from Base44", async () => {
|
|
193744
|
-
return await fetchConnectors();
|
|
193745
|
-
}, {
|
|
193746
|
-
successMessage: "Connectors fetched successfully",
|
|
193747
|
-
errorMessage: "Failed to fetch connectors"
|
|
193748
|
-
});
|
|
193749
|
-
const { written, deleted } = await runTask("Syncing connector files", async () => {
|
|
193750
|
-
return await writeConnectors(connectorsDir, remoteConnectors.integrations);
|
|
193751
|
-
}, {
|
|
193752
|
-
successMessage: "Connector files synced successfully",
|
|
193753
|
-
errorMessage: "Failed to sync connector files"
|
|
193754
|
-
});
|
|
193755
|
-
if (written.length > 0) {
|
|
193756
|
-
M2.success(`Written: ${written.join(", ")}`);
|
|
193757
|
-
}
|
|
193758
|
-
if (deleted.length > 0) {
|
|
193759
|
-
M2.warn(`Deleted: ${deleted.join(", ")}`);
|
|
193760
|
-
}
|
|
193761
|
-
if (written.length === 0 && deleted.length === 0) {
|
|
193762
|
-
M2.info("All connectors are already up to date");
|
|
193763
|
-
}
|
|
193764
|
-
return {
|
|
193765
|
-
outroMessage: `Pulled ${remoteConnectors.integrations.length} connectors to ${connectorsDir}`
|
|
193766
|
-
};
|
|
193767
|
-
}
|
|
193768
|
-
function getConnectorsPullCommand(context) {
|
|
193769
|
-
return new Command("pull").description("Pull connectors from Base44 to local files (replaces all local connector configs)").action(async () => {
|
|
193770
|
-
await runCommand(pullConnectorsAction, { requireAuth: true }, context);
|
|
193771
|
-
});
|
|
193772
|
-
}
|
|
193773
|
-
|
|
193774
193690
|
// node_modules/open/index.js
|
|
193775
193691
|
import process20 from "node:process";
|
|
193776
193692
|
import path16 from "node:path";
|
|
@@ -194378,6 +194294,52 @@ defineLazyProperty(apps, "safari", () => detectPlatformBinary({
|
|
|
194378
194294
|
var open_default = open;
|
|
194379
194295
|
|
|
194380
194296
|
// src/cli/commands/connectors/push.ts
|
|
194297
|
+
var POLL_INTERVAL_MS = 2000;
|
|
194298
|
+
var POLL_TIMEOUT_MS = 2 * 60 * 1000;
|
|
194299
|
+
async function runOAuthFlowWithSkip(params) {
|
|
194300
|
+
await open_default(params.redirectUrl);
|
|
194301
|
+
let finalStatus = "PENDING";
|
|
194302
|
+
let skipped = false;
|
|
194303
|
+
const s = Y2();
|
|
194304
|
+
const originalExit = process.exit;
|
|
194305
|
+
process.exit = () => {
|
|
194306
|
+
skipped = true;
|
|
194307
|
+
s.stop(`${params.type} skipped`);
|
|
194308
|
+
};
|
|
194309
|
+
s.start(`Waiting for ${params.type} authorization... (Esc to skip)`);
|
|
194310
|
+
try {
|
|
194311
|
+
await pWaitFor(async () => {
|
|
194312
|
+
if (skipped) {
|
|
194313
|
+
finalStatus = "SKIPPED";
|
|
194314
|
+
return true;
|
|
194315
|
+
}
|
|
194316
|
+
const response = await getOAuthStatus(params.type, params.connectionId);
|
|
194317
|
+
finalStatus = response.status;
|
|
194318
|
+
return response.status !== "PENDING";
|
|
194319
|
+
}, {
|
|
194320
|
+
interval: POLL_INTERVAL_MS,
|
|
194321
|
+
timeout: POLL_TIMEOUT_MS
|
|
194322
|
+
}).catch((err) => {
|
|
194323
|
+
if (err instanceof TimeoutError2) {
|
|
194324
|
+
finalStatus = "PENDING";
|
|
194325
|
+
} else {
|
|
194326
|
+
throw err;
|
|
194327
|
+
}
|
|
194328
|
+
});
|
|
194329
|
+
} finally {
|
|
194330
|
+
process.exit = originalExit;
|
|
194331
|
+
if (!skipped) {
|
|
194332
|
+
if (finalStatus === "ACTIVE") {
|
|
194333
|
+
s.stop(`${params.type} authorization complete`);
|
|
194334
|
+
} else if (finalStatus === "FAILED") {
|
|
194335
|
+
s.stop(`${params.type} authorization failed`);
|
|
194336
|
+
} else {
|
|
194337
|
+
s.stop(`${params.type} authorization timed out`);
|
|
194338
|
+
}
|
|
194339
|
+
}
|
|
194340
|
+
}
|
|
194341
|
+
return { type: params.type, status: finalStatus };
|
|
194342
|
+
}
|
|
194381
194343
|
function isPendingOAuth(r2) {
|
|
194382
194344
|
return r2.action === "needs_oauth" && !!r2.redirectUrl && !!r2.connectionId;
|
|
194383
194345
|
}
|
|
@@ -194385,6 +194347,7 @@ function printSummary(results, oauthOutcomes) {
|
|
|
194385
194347
|
const synced = [];
|
|
194386
194348
|
const added = [];
|
|
194387
194349
|
const removed = [];
|
|
194350
|
+
const skipped = [];
|
|
194388
194351
|
const failed = [];
|
|
194389
194352
|
for (const r2 of results) {
|
|
194390
194353
|
const oauthStatus = oauthOutcomes.get(r2.type);
|
|
@@ -194397,6 +194360,8 @@ function printSummary(results, oauthOutcomes) {
|
|
|
194397
194360
|
} else if (r2.action === "needs_oauth") {
|
|
194398
194361
|
if (oauthStatus === "ACTIVE") {
|
|
194399
194362
|
added.push(r2.type);
|
|
194363
|
+
} else if (oauthStatus === "SKIPPED") {
|
|
194364
|
+
skipped.push(r2.type);
|
|
194400
194365
|
} else if (oauthStatus === "PENDING") {
|
|
194401
194366
|
failed.push({ type: r2.type, error: "authorization timed out" });
|
|
194402
194367
|
} else if (oauthStatus === "FAILED") {
|
|
@@ -194417,6 +194382,9 @@ function printSummary(results, oauthOutcomes) {
|
|
|
194417
194382
|
if (removed.length > 0) {
|
|
194418
194383
|
M2.info(theme.styles.dim(`Removed: ${removed.join(", ")}`));
|
|
194419
194384
|
}
|
|
194385
|
+
if (skipped.length > 0) {
|
|
194386
|
+
M2.warn(`Skipped: ${skipped.join(", ")}`);
|
|
194387
|
+
}
|
|
194420
194388
|
for (const r2 of failed) {
|
|
194421
194389
|
M2.error(`Failed: ${r2.type}${r2.error ? ` - ${r2.error}` : ""}`);
|
|
194422
194390
|
}
|
|
@@ -194457,28 +194425,12 @@ async function pushConnectorsAction() {
|
|
|
194457
194425
|
try {
|
|
194458
194426
|
M2.info(`
|
|
194459
194427
|
Opening browser for '${connector2.type}'...`);
|
|
194460
|
-
await
|
|
194461
|
-
|
|
194462
|
-
|
|
194463
|
-
|
|
194464
|
-
const response = await getOAuthStatus(connector2.type, connector2.connectionId);
|
|
194465
|
-
finalStatus = response.status;
|
|
194466
|
-
return response.status !== "PENDING";
|
|
194467
|
-
}, {
|
|
194468
|
-
interval: 2000,
|
|
194469
|
-
timeout: 2 * 60 * 1000
|
|
194470
|
-
});
|
|
194471
|
-
}, {
|
|
194472
|
-
successMessage: `'${connector2.type}' authorization complete`,
|
|
194473
|
-
errorMessage: `'${connector2.type}' authorization failed`
|
|
194474
|
-
}).catch((err) => {
|
|
194475
|
-
if (err instanceof TimeoutError2) {
|
|
194476
|
-
finalStatus = "PENDING";
|
|
194477
|
-
} else {
|
|
194478
|
-
throw err;
|
|
194479
|
-
}
|
|
194428
|
+
const oauthResult = await runOAuthFlowWithSkip({
|
|
194429
|
+
type: connector2.type,
|
|
194430
|
+
redirectUrl: connector2.redirectUrl,
|
|
194431
|
+
connectionId: connector2.connectionId
|
|
194480
194432
|
});
|
|
194481
|
-
oauthOutcomes.set(connector2.type,
|
|
194433
|
+
oauthOutcomes.set(connector2.type, oauthResult.status);
|
|
194482
194434
|
} catch (err) {
|
|
194483
194435
|
M2.error(`Failed to authorize '${connector2.type}': ${err instanceof Error ? err.message : String(err)}`);
|
|
194484
194436
|
oauthOutcomes.set(connector2.type, "FAILED");
|
|
@@ -194497,7 +194449,7 @@ function getConnectorsPushCommand(context) {
|
|
|
194497
194449
|
|
|
194498
194450
|
// src/cli/commands/connectors/index.ts
|
|
194499
194451
|
function getConnectorsCommand(context) {
|
|
194500
|
-
return new Command("connectors").description("Manage project connectors (OAuth integrations)").addCommand(
|
|
194452
|
+
return new Command("connectors").description("Manage project connectors (OAuth integrations)").addCommand(getConnectorsPushCommand(context));
|
|
194501
194453
|
}
|
|
194502
194454
|
|
|
194503
194455
|
// src/cli/commands/dashboard/open.ts
|
|
@@ -194591,7 +194543,7 @@ function getFunctionsDeployCommand(context) {
|
|
|
194591
194543
|
}
|
|
194592
194544
|
|
|
194593
194545
|
// src/cli/commands/project/create.ts
|
|
194594
|
-
import { basename as basename3, join as
|
|
194546
|
+
import { basename as basename3, join as join9, resolve as resolve2 } from "node:path";
|
|
194595
194547
|
var import_lodash = __toESM(require_lodash(), 1);
|
|
194596
194548
|
var DEFAULT_TEMPLATE_ID = "backend-only";
|
|
194597
194549
|
async function getTemplateById(templateId) {
|
|
@@ -194727,7 +194679,7 @@ async function executeCreate({
|
|
|
194727
194679
|
updateMessage("Building project...");
|
|
194728
194680
|
await execa({ cwd: resolvedPath, shell: true })`${buildCommand}`;
|
|
194729
194681
|
updateMessage("Deploying site...");
|
|
194730
|
-
return await deploySite(
|
|
194682
|
+
return await deploySite(join9(resolvedPath, outputDirectory));
|
|
194731
194683
|
}, {
|
|
194732
194684
|
successMessage: theme.colors.base44Orange("Site deployed successfully"),
|
|
194733
194685
|
errorMessage: "Failed to deploy site"
|
|
@@ -195108,10 +195060,10 @@ function toPascalCase(name2) {
|
|
|
195108
195060
|
return name2.split(/[-_\s]+/).map((w9) => w9.charAt(0).toUpperCase() + w9.slice(1)).join("");
|
|
195109
195061
|
}
|
|
195110
195062
|
// src/core/types/update-project.ts
|
|
195111
|
-
import { join as
|
|
195063
|
+
import { join as join12 } from "node:path";
|
|
195112
195064
|
var TYPES_INCLUDE_PATH = `${PROJECT_SUBDIR}/${TYPES_OUTPUT_SUBDIR}/*.d.ts`;
|
|
195113
195065
|
async function updateProjectConfig(projectRoot) {
|
|
195114
|
-
const tsconfigPath =
|
|
195066
|
+
const tsconfigPath = join12(projectRoot, "tsconfig.json");
|
|
195115
195067
|
if (!await pathExists(tsconfigPath)) {
|
|
195116
195068
|
return false;
|
|
195117
195069
|
}
|
|
@@ -195480,7 +195432,7 @@ function nanoid3(size = 21) {
|
|
|
195480
195432
|
}
|
|
195481
195433
|
|
|
195482
195434
|
// node_modules/posthog-node/dist/extensions/error-tracking/modifiers/module.node.mjs
|
|
195483
|
-
import { dirname as
|
|
195435
|
+
import { dirname as dirname10, posix, sep } from "path";
|
|
195484
195436
|
function createModulerModifier() {
|
|
195485
195437
|
const getModuleFromFileName = createGetModuleFromFilename();
|
|
195486
195438
|
return async (frames) => {
|
|
@@ -195489,7 +195441,7 @@ function createModulerModifier() {
|
|
|
195489
195441
|
return frames;
|
|
195490
195442
|
};
|
|
195491
195443
|
}
|
|
195492
|
-
function createGetModuleFromFilename(basePath = process.argv[1] ?
|
|
195444
|
+
function createGetModuleFromFilename(basePath = process.argv[1] ? dirname10(process.argv[1]) : process.cwd(), isWindows4 = sep === "\\") {
|
|
195493
195445
|
const normalizedBase = isWindows4 ? normalizeWindowsPath2(basePath) : basePath;
|
|
195494
195446
|
return (filename) => {
|
|
195495
195447
|
if (!filename)
|
|
@@ -199708,4 +199660,4 @@ export {
|
|
|
199708
199660
|
CLIExitError
|
|
199709
199661
|
};
|
|
199710
199662
|
|
|
199711
|
-
//# debugId=
|
|
199663
|
+
//# debugId=2F410FC4ADBC6DC764756E2164756E21
|