@base44-preview/cli 0.0.30-pr.211.eb36cd7 → 0.0.30-pr.214.2479e76
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 +140 -99
- package/dist/cli/index.js.map +10 -10
- 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 join12(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 = join12;
|
|
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" ? join12(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 join12(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: join12,
|
|
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" ? join14(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 join14(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: join14,
|
|
126467
126467
|
line: line3,
|
|
126468
126468
|
softline: softline2,
|
|
126469
126469
|
hardline: hardline4,
|
|
@@ -137148,7 +137148,7 @@ var {
|
|
|
137148
137148
|
} = import__.default;
|
|
137149
137149
|
|
|
137150
137150
|
// src/cli/commands/agents/pull.ts
|
|
137151
|
-
import { dirname as dirname7, join as
|
|
137151
|
+
import { dirname as dirname7, join as join9 } from "node:path";
|
|
137152
137152
|
|
|
137153
137153
|
// node_modules/@clack/core/dist/index.mjs
|
|
137154
137154
|
var import_sisteransi = __toESM(require_src(), 1);
|
|
@@ -153650,7 +153650,7 @@ var generateGlobTasks = normalizeArguments(generateTasks);
|
|
|
153650
153650
|
var generateGlobTasksSync = normalizeArgumentsSync(generateTasksSync);
|
|
153651
153651
|
|
|
153652
153652
|
// src/core/project/config.ts
|
|
153653
|
-
import { dirname as dirname4, join as
|
|
153653
|
+
import { dirname as dirname4, join as join5 } from "node:path";
|
|
153654
153654
|
|
|
153655
153655
|
// src/core/resources/agent/schema.ts
|
|
153656
153656
|
var EntityOperationSchema = exports_external.enum(["create", "update", "delete", "read"]);
|
|
@@ -153911,6 +153911,9 @@ async function listConnectors() {
|
|
|
153911
153911
|
}
|
|
153912
153912
|
return result.data;
|
|
153913
153913
|
}
|
|
153914
|
+
async function fetchConnectors() {
|
|
153915
|
+
return await listConnectors();
|
|
153916
|
+
}
|
|
153914
153917
|
async function setConnector(integrationType, scopes) {
|
|
153915
153918
|
const appClient = getAppClient();
|
|
153916
153919
|
let response;
|
|
@@ -153963,6 +153966,7 @@ async function removeConnector(integrationType) {
|
|
|
153963
153966
|
return result.data;
|
|
153964
153967
|
}
|
|
153965
153968
|
// src/core/resources/connector/config.ts
|
|
153969
|
+
import { join as join3 } from "node:path";
|
|
153966
153970
|
async function readConnectorFile(connectorPath) {
|
|
153967
153971
|
const parsed = await readJsonFile(connectorPath);
|
|
153968
153972
|
const result = ConnectorResourceSchema.safeParse(parsed);
|
|
@@ -153995,6 +153999,31 @@ async function readAllConnectors(connectorsDir) {
|
|
|
153995
153999
|
}
|
|
153996
154000
|
return connectors;
|
|
153997
154001
|
}
|
|
154002
|
+
async function writeConnectors(connectorsDir, remoteConnectors) {
|
|
154003
|
+
const existingConnectors = await readAllConnectors(connectorsDir);
|
|
154004
|
+
const newTypes = new Set(remoteConnectors.map((c) => c.integration_type));
|
|
154005
|
+
const toDelete = existingConnectors.filter((c) => !newTypes.has(c.type));
|
|
154006
|
+
for (const connector of toDelete) {
|
|
154007
|
+
const files = await globby(`${connector.type}.${CONFIG_FILE_EXTENSION_GLOB}`, {
|
|
154008
|
+
cwd: connectorsDir,
|
|
154009
|
+
absolute: true
|
|
154010
|
+
});
|
|
154011
|
+
for (const filePath of files) {
|
|
154012
|
+
await deleteFile(filePath);
|
|
154013
|
+
}
|
|
154014
|
+
}
|
|
154015
|
+
for (const connector of remoteConnectors) {
|
|
154016
|
+
const filePath = join3(connectorsDir, `${connector.integration_type}.${CONFIG_FILE_EXTENSION}`);
|
|
154017
|
+
const localConnector = {
|
|
154018
|
+
type: connector.integration_type,
|
|
154019
|
+
scopes: connector.scopes
|
|
154020
|
+
};
|
|
154021
|
+
await writeJsonFile(filePath, localConnector);
|
|
154022
|
+
}
|
|
154023
|
+
const written = remoteConnectors.map((c) => c.integration_type);
|
|
154024
|
+
const deleted = toDelete.map((c) => c.type);
|
|
154025
|
+
return { written, deleted };
|
|
154026
|
+
}
|
|
153998
154027
|
// node_modules/open/index.js
|
|
153999
154028
|
import process11 from "node:process";
|
|
154000
154029
|
import path4 from "node:path";
|
|
@@ -155059,7 +155088,7 @@ async function deployFunctions(functions) {
|
|
|
155059
155088
|
return result.data;
|
|
155060
155089
|
}
|
|
155061
155090
|
// src/core/resources/function/config.ts
|
|
155062
|
-
import { dirname as dirname3, join as
|
|
155091
|
+
import { dirname as dirname3, join as join4 } from "node:path";
|
|
155063
155092
|
async function readFunctionConfig(configPath) {
|
|
155064
155093
|
const parsed = await readJsonFile(configPath);
|
|
155065
155094
|
const result = FunctionConfigSchema.safeParse(parsed);
|
|
@@ -155071,7 +155100,7 @@ async function readFunctionConfig(configPath) {
|
|
|
155071
155100
|
async function readFunction(configPath) {
|
|
155072
155101
|
const config5 = await readFunctionConfig(configPath);
|
|
155073
155102
|
const functionDir = dirname3(configPath);
|
|
155074
|
-
const entryPath =
|
|
155103
|
+
const entryPath = join4(functionDir, config5.entry);
|
|
155075
155104
|
if (!await pathExists(entryPath)) {
|
|
155076
155105
|
throw new FileNotFoundError(`Function entry file not found: ${entryPath} (referenced in ${configPath})`);
|
|
155077
155106
|
}
|
|
@@ -155160,10 +155189,10 @@ async function readProjectConfig(projectRoot) {
|
|
|
155160
155189
|
const project = result.data;
|
|
155161
155190
|
const configDir = dirname4(configPath);
|
|
155162
155191
|
const [entities, functions, agents, connectors] = await Promise.all([
|
|
155163
|
-
entityResource.readAll(
|
|
155164
|
-
functionResource.readAll(
|
|
155165
|
-
agentResource.readAll(
|
|
155166
|
-
connectorResource.readAll(
|
|
155192
|
+
entityResource.readAll(join5(configDir, project.entitiesDir)),
|
|
155193
|
+
functionResource.readAll(join5(configDir, project.functionsDir)),
|
|
155194
|
+
agentResource.readAll(join5(configDir, project.agentsDir)),
|
|
155195
|
+
connectorResource.readAll(join5(configDir, project.connectorsDir))
|
|
155167
155196
|
]);
|
|
155168
155197
|
return {
|
|
155169
155198
|
project: { ...project, root, configPath },
|
|
@@ -155260,7 +155289,7 @@ async function readAppConfig(projectRoot) {
|
|
|
155260
155289
|
// src/core/project/template.ts
|
|
155261
155290
|
var import_ejs = __toESM(require_ejs(), 1);
|
|
155262
155291
|
var import_front_matter = __toESM(require_front_matter(), 1);
|
|
155263
|
-
import { dirname as dirname5, join as
|
|
155292
|
+
import { dirname as dirname5, join as join6 } from "node:path";
|
|
155264
155293
|
async function listTemplates() {
|
|
155265
155294
|
const parsed = await readJsonFile(getTemplatesIndexPath());
|
|
155266
155295
|
const result = TemplatesConfigSchema.safeParse(parsed);
|
|
@@ -155270,23 +155299,23 @@ async function listTemplates() {
|
|
|
155270
155299
|
return result.data.templates;
|
|
155271
155300
|
}
|
|
155272
155301
|
async function renderTemplate(template, destPath, data) {
|
|
155273
|
-
const templateDir =
|
|
155302
|
+
const templateDir = join6(getTemplatesDir(), template.path);
|
|
155274
155303
|
const files = await globby("**/*", {
|
|
155275
155304
|
cwd: templateDir,
|
|
155276
155305
|
dot: true,
|
|
155277
155306
|
onlyFiles: true
|
|
155278
155307
|
});
|
|
155279
155308
|
for (const file2 of files) {
|
|
155280
|
-
const srcPath =
|
|
155309
|
+
const srcPath = join6(templateDir, file2);
|
|
155281
155310
|
try {
|
|
155282
155311
|
if (file2.endsWith(".ejs")) {
|
|
155283
155312
|
const rendered = await import_ejs.default.renderFile(srcPath, data);
|
|
155284
155313
|
const { attributes, body } = import_front_matter.default(rendered);
|
|
155285
|
-
const destFile = attributes.outputFileName ?
|
|
155286
|
-
const destFilePath =
|
|
155314
|
+
const destFile = attributes.outputFileName ? join6(dirname5(file2), attributes.outputFileName) : file2.replace(/\.ejs$/, "");
|
|
155315
|
+
const destFilePath = join6(destPath, destFile);
|
|
155287
155316
|
await writeFile(destFilePath, body);
|
|
155288
155317
|
} else {
|
|
155289
|
-
const destFilePath =
|
|
155318
|
+
const destFilePath = join6(destPath, file2);
|
|
155290
155319
|
await copyFile(srcPath, destFilePath);
|
|
155291
155320
|
}
|
|
155292
155321
|
} catch (error48) {
|
|
@@ -155376,7 +155405,7 @@ async function getSiteFilePaths(outputDir) {
|
|
|
155376
155405
|
// src/core/site/deploy.ts
|
|
155377
155406
|
import { randomUUID } from "node:crypto";
|
|
155378
155407
|
import { tmpdir } from "node:os";
|
|
155379
|
-
import { join as
|
|
155408
|
+
import { join as join8 } from "node:path";
|
|
155380
155409
|
|
|
155381
155410
|
// node_modules/@isaacs/fs-minipass/dist/esm/index.js
|
|
155382
155411
|
import EE from "events";
|
|
@@ -161141,7 +161170,7 @@ var mkdirSync = (dir, opt) => {
|
|
|
161141
161170
|
};
|
|
161142
161171
|
|
|
161143
161172
|
// node_modules/tar/dist/esm/path-reservations.js
|
|
161144
|
-
import { join as
|
|
161173
|
+
import { join as join7 } from "node:path";
|
|
161145
161174
|
|
|
161146
161175
|
// node_modules/tar/dist/esm/normalize-unicode.js
|
|
161147
161176
|
var normalizeCache = Object.create(null);
|
|
@@ -161174,7 +161203,7 @@ var getDirs = (path10) => {
|
|
|
161174
161203
|
const dirs = path10.split("/").slice(0, -1).reduce((set2, path11) => {
|
|
161175
161204
|
const s = set2[set2.length - 1];
|
|
161176
161205
|
if (s !== undefined) {
|
|
161177
|
-
path11 =
|
|
161206
|
+
path11 = join7(s, path11);
|
|
161178
161207
|
}
|
|
161179
161208
|
set2.push(path11 || "/");
|
|
161180
161209
|
return set2;
|
|
@@ -161188,7 +161217,7 @@ class PathReservations {
|
|
|
161188
161217
|
#running = new Set;
|
|
161189
161218
|
reserve(paths, fn) {
|
|
161190
161219
|
paths = isWindows2 ? ["win32 parallelization disabled"] : paths.map((p2) => {
|
|
161191
|
-
return stripTrailingSlashes(
|
|
161220
|
+
return stripTrailingSlashes(join7(normalizeUnicode(p2)));
|
|
161192
161221
|
});
|
|
161193
161222
|
const dirs = new Set(paths.map((path10) => getDirs(path10)).reduce((a, b3) => a.concat(b3)));
|
|
161194
161223
|
this.#reservations.set(fn, { dirs, paths });
|
|
@@ -162223,7 +162252,7 @@ async function deploySite(siteOutputDir) {
|
|
|
162223
162252
|
]
|
|
162224
162253
|
});
|
|
162225
162254
|
}
|
|
162226
|
-
const archivePath =
|
|
162255
|
+
const archivePath = join8(tmpdir(), `base44-site-${randomUUID()}.tar.gz`);
|
|
162227
162256
|
try {
|
|
162228
162257
|
await createArchive(siteOutputDir, archivePath);
|
|
162229
162258
|
return await uploadSite(archivePath);
|
|
@@ -162240,26 +162269,24 @@ async function createArchive(pathToArchive, targetArchivePath) {
|
|
|
162240
162269
|
}
|
|
162241
162270
|
// src/core/project/deploy.ts
|
|
162242
162271
|
function hasResourcesToDeploy(projectData) {
|
|
162243
|
-
const { project, entities, functions, agents
|
|
162272
|
+
const { project, entities, functions, agents } = projectData;
|
|
162244
162273
|
const hasSite = Boolean(project.site?.outputDirectory);
|
|
162245
162274
|
const hasEntities = entities.length > 0;
|
|
162246
162275
|
const hasFunctions = functions.length > 0;
|
|
162247
162276
|
const hasAgents = agents.length > 0;
|
|
162248
|
-
|
|
162249
|
-
return hasEntities || hasFunctions || hasAgents || hasConnectors || hasSite;
|
|
162277
|
+
return hasEntities || hasFunctions || hasAgents || hasSite;
|
|
162250
162278
|
}
|
|
162251
162279
|
async function deployAll(projectData) {
|
|
162252
|
-
const { project, entities, functions, agents
|
|
162280
|
+
const { project, entities, functions, agents } = projectData;
|
|
162253
162281
|
await entityResource.push(entities);
|
|
162254
162282
|
await functionResource.push(functions);
|
|
162255
162283
|
await agentResource.push(agents);
|
|
162256
|
-
const { results: connectorResults } = await pushConnectors(connectors);
|
|
162257
162284
|
if (project.site?.outputDirectory) {
|
|
162258
162285
|
const outputDir = resolve(project.root, project.site.outputDirectory);
|
|
162259
162286
|
const { appUrl } = await deploySite(outputDir);
|
|
162260
|
-
return { appUrl
|
|
162287
|
+
return { appUrl };
|
|
162261
162288
|
}
|
|
162262
|
-
return {
|
|
162289
|
+
return {};
|
|
162263
162290
|
}
|
|
162264
162291
|
// src/core/clients/base44-client.ts
|
|
162265
162292
|
var retriedRequests = new WeakSet;
|
|
@@ -169796,7 +169823,7 @@ function getDashboardUrl(projectId) {
|
|
|
169796
169823
|
async function pullAgentsAction() {
|
|
169797
169824
|
const { project: project2 } = await readProjectConfig();
|
|
169798
169825
|
const configDir = dirname7(project2.configPath);
|
|
169799
|
-
const agentsDir =
|
|
169826
|
+
const agentsDir = join9(configDir, project2.agentsDir);
|
|
169800
169827
|
const remoteAgents = await runTask("Fetching agents from Base44", async () => {
|
|
169801
169828
|
return await fetchAgents();
|
|
169802
169829
|
}, {
|
|
@@ -169889,48 +169916,47 @@ function getWhoamiCommand(context) {
|
|
|
169889
169916
|
});
|
|
169890
169917
|
}
|
|
169891
169918
|
|
|
169892
|
-
// src/cli/commands/connectors/
|
|
169893
|
-
|
|
169894
|
-
|
|
169895
|
-
}
|
|
169896
|
-
|
|
169897
|
-
const
|
|
169898
|
-
|
|
169899
|
-
return
|
|
169900
|
-
}
|
|
169901
|
-
|
|
169902
|
-
|
|
169903
|
-
|
|
169904
|
-
|
|
169905
|
-
|
|
169906
|
-
if (options?.skipPrompt) {
|
|
169907
|
-
return outcomes;
|
|
169919
|
+
// src/cli/commands/connectors/pull.ts
|
|
169920
|
+
import { dirname as dirname8, join as join10 } from "node:path";
|
|
169921
|
+
async function pullConnectorsAction() {
|
|
169922
|
+
const { project: project2 } = await readProjectConfig();
|
|
169923
|
+
const configDir = dirname8(project2.configPath);
|
|
169924
|
+
const connectorsDir = join10(configDir, project2.connectorsDir);
|
|
169925
|
+
const remoteConnectors = await runTask("Fetching connectors from Base44", async () => {
|
|
169926
|
+
return await fetchConnectors();
|
|
169927
|
+
}, {
|
|
169928
|
+
successMessage: "Connectors fetched successfully",
|
|
169929
|
+
errorMessage: "Failed to fetch connectors"
|
|
169930
|
+
});
|
|
169931
|
+
if (remoteConnectors.integrations.length === 0) {
|
|
169932
|
+
return { outroMessage: "No connectors found on Base44" };
|
|
169908
169933
|
}
|
|
169909
|
-
const
|
|
169910
|
-
|
|
169934
|
+
const { written, deleted } = await runTask("Writing connector files", async () => {
|
|
169935
|
+
return await writeConnectors(connectorsDir, remoteConnectors.integrations);
|
|
169936
|
+
}, {
|
|
169937
|
+
successMessage: "Connector files written successfully",
|
|
169938
|
+
errorMessage: "Failed to write connector files"
|
|
169911
169939
|
});
|
|
169912
|
-
if (
|
|
169913
|
-
|
|
169940
|
+
if (written.length > 0) {
|
|
169941
|
+
M2.success(`Written: ${written.join(", ")}`);
|
|
169914
169942
|
}
|
|
169915
|
-
|
|
169916
|
-
M2.
|
|
169917
|
-
Opening browser for ${connector2.type}...`);
|
|
169918
|
-
const oauthResult = await runTask(`Waiting for ${connector2.type} authorization...`, async () => {
|
|
169919
|
-
return await runOAuthFlow({
|
|
169920
|
-
type: connector2.type,
|
|
169921
|
-
redirectUrl: connector2.redirectUrl,
|
|
169922
|
-
connectionId: connector2.connectionId
|
|
169923
|
-
});
|
|
169924
|
-
}, {
|
|
169925
|
-
successMessage: `${connector2.type} authorization complete`,
|
|
169926
|
-
errorMessage: `${connector2.type} authorization failed`
|
|
169927
|
-
});
|
|
169928
|
-
outcomes.set(connector2.type, oauthResult.status);
|
|
169943
|
+
if (deleted.length > 0) {
|
|
169944
|
+
M2.warn(`Deleted: ${deleted.join(", ")}`);
|
|
169929
169945
|
}
|
|
169930
|
-
return
|
|
169946
|
+
return {
|
|
169947
|
+
outroMessage: `Pulled ${remoteConnectors.integrations.length} connectors to ${connectorsDir}`
|
|
169948
|
+
};
|
|
169949
|
+
}
|
|
169950
|
+
function getConnectorsPullCommand(context) {
|
|
169951
|
+
return new Command("pull").description("Pull connectors from Base44 to local files (replaces all local connector configs)").action(async () => {
|
|
169952
|
+
await runCommand(pullConnectorsAction, { requireAuth: true }, context);
|
|
169953
|
+
});
|
|
169931
169954
|
}
|
|
169932
169955
|
|
|
169933
169956
|
// src/cli/commands/connectors/push.ts
|
|
169957
|
+
function isPendingOAuth(r2) {
|
|
169958
|
+
return r2.action === "needs_oauth" && !!r2.redirectUrl && !!r2.connectionId;
|
|
169959
|
+
}
|
|
169934
169960
|
function printSummary(results, oauthOutcomes) {
|
|
169935
169961
|
const synced = [];
|
|
169936
169962
|
const added = [];
|
|
@@ -169982,14 +170008,42 @@ async function pushConnectorsAction() {
|
|
|
169982
170008
|
const { results } = await runTask("Pushing connectors to Base44", async () => {
|
|
169983
170009
|
return await pushConnectors(connectors);
|
|
169984
170010
|
});
|
|
169985
|
-
const
|
|
170011
|
+
const oauthOutcomes = new Map;
|
|
170012
|
+
const needsOAuth = results.filter(isPendingOAuth);
|
|
169986
170013
|
let outroMessage = "Connectors pushed to Base44";
|
|
169987
|
-
|
|
169988
|
-
|
|
169989
|
-
|
|
169990
|
-
|
|
170014
|
+
if (needsOAuth.length > 0) {
|
|
170015
|
+
M2.info("");
|
|
170016
|
+
M2.warn(`${needsOAuth.length} connector(s) require authorization in your browser:`);
|
|
170017
|
+
for (const connector2 of needsOAuth) {
|
|
170018
|
+
M2.info(` ${connector2.type}: ${theme.styles.dim(connector2.redirectUrl)}`);
|
|
170019
|
+
}
|
|
169991
170020
|
const pending = needsOAuth.map((c3) => c3.type).join(", ");
|
|
169992
|
-
|
|
170021
|
+
if (process.env.CI) {
|
|
170022
|
+
outroMessage = `Skipped OAuth in CI. Pending: ${pending}. Run 'base44 connectors push' locally to authorize.`;
|
|
170023
|
+
} else {
|
|
170024
|
+
const shouldAuth = await ye({
|
|
170025
|
+
message: "Open browser to authorize now?"
|
|
170026
|
+
});
|
|
170027
|
+
if (pD(shouldAuth) || !shouldAuth) {
|
|
170028
|
+
outroMessage = `Authorization skipped. Pending: ${pending}. Run 'base44 connectors push' again to complete.`;
|
|
170029
|
+
} else {
|
|
170030
|
+
for (const connector2 of needsOAuth) {
|
|
170031
|
+
M2.info(`
|
|
170032
|
+
Opening browser for ${connector2.type}...`);
|
|
170033
|
+
const oauthResult = await runTask(`Waiting for ${connector2.type} authorization...`, async () => {
|
|
170034
|
+
return await runOAuthFlow({
|
|
170035
|
+
type: connector2.type,
|
|
170036
|
+
redirectUrl: connector2.redirectUrl,
|
|
170037
|
+
connectionId: connector2.connectionId
|
|
170038
|
+
});
|
|
170039
|
+
}, {
|
|
170040
|
+
successMessage: `${connector2.type} authorization complete`,
|
|
170041
|
+
errorMessage: `${connector2.type} authorization failed`
|
|
170042
|
+
});
|
|
170043
|
+
oauthOutcomes.set(connector2.type, oauthResult.status);
|
|
170044
|
+
}
|
|
170045
|
+
}
|
|
170046
|
+
}
|
|
169993
170047
|
}
|
|
169994
170048
|
printSummary(results, oauthOutcomes);
|
|
169995
170049
|
return { outroMessage };
|
|
@@ -170002,7 +170056,7 @@ function getConnectorsPushCommand(context) {
|
|
|
170002
170056
|
|
|
170003
170057
|
// src/cli/commands/connectors/index.ts
|
|
170004
170058
|
function getConnectorsCommand(context) {
|
|
170005
|
-
return new Command("connectors").description("Manage project connectors (OAuth integrations)").addCommand(getConnectorsPushCommand(context));
|
|
170059
|
+
return new Command("connectors").description("Manage project connectors (OAuth integrations)").addCommand(getConnectorsPullCommand(context)).addCommand(getConnectorsPushCommand(context));
|
|
170006
170060
|
}
|
|
170007
170061
|
|
|
170008
170062
|
// src/cli/commands/dashboard/open.ts
|
|
@@ -170096,7 +170150,7 @@ function getFunctionsDeployCommand(context) {
|
|
|
170096
170150
|
}
|
|
170097
170151
|
|
|
170098
170152
|
// src/cli/commands/project/create.ts
|
|
170099
|
-
import { basename as basename3, join as
|
|
170153
|
+
import { basename as basename3, join as join11, resolve as resolve2 } from "node:path";
|
|
170100
170154
|
var import_lodash = __toESM(require_lodash(), 1);
|
|
170101
170155
|
var DEFAULT_TEMPLATE_ID = "backend-only";
|
|
170102
170156
|
async function getTemplateById(templateId) {
|
|
@@ -170232,7 +170286,7 @@ async function executeCreate({
|
|
|
170232
170286
|
updateMessage("Building project...");
|
|
170233
170287
|
await execa({ cwd: resolvedPath, shell: true })`${buildCommand}`;
|
|
170234
170288
|
updateMessage("Deploying site...");
|
|
170235
|
-
return await deploySite(
|
|
170289
|
+
return await deploySite(join11(resolvedPath, outputDirectory));
|
|
170236
170290
|
}, {
|
|
170237
170291
|
successMessage: theme.colors.base44Orange("Site deployed successfully"),
|
|
170238
170292
|
errorMessage: "Failed to deploy site"
|
|
@@ -170280,7 +170334,7 @@ async function deployAction(options) {
|
|
|
170280
170334
|
outroMessage: "No resources found to deploy"
|
|
170281
170335
|
};
|
|
170282
170336
|
}
|
|
170283
|
-
const { project: project2, entities, functions, agents
|
|
170337
|
+
const { project: project2, entities, functions, agents } = projectData;
|
|
170284
170338
|
const summaryLines = [];
|
|
170285
170339
|
if (entities.length > 0) {
|
|
170286
170340
|
summaryLines.push(` - ${entities.length} ${entities.length === 1 ? "entity" : "entities"}`);
|
|
@@ -170291,9 +170345,6 @@ async function deployAction(options) {
|
|
|
170291
170345
|
if (agents.length > 0) {
|
|
170292
170346
|
summaryLines.push(` - ${agents.length} ${agents.length === 1 ? "agent" : "agents"}`);
|
|
170293
170347
|
}
|
|
170294
|
-
if (connectors.length > 0) {
|
|
170295
|
-
summaryLines.push(` - ${connectors.length} ${connectors.length === 1 ? "connector" : "connectors"}`);
|
|
170296
|
-
}
|
|
170297
170348
|
if (project2.site?.outputDirectory) {
|
|
170298
170349
|
summaryLines.push(` - Site from ${project2.site.outputDirectory}`);
|
|
170299
170350
|
}
|
|
@@ -170318,16 +170369,6 @@ ${summaryLines.join(`
|
|
|
170318
170369
|
successMessage: theme.colors.base44Orange("Deployment completed"),
|
|
170319
170370
|
errorMessage: "Deployment failed"
|
|
170320
170371
|
});
|
|
170321
|
-
const needsOAuth = filterPendingOAuth(result.connectorResults ?? []);
|
|
170322
|
-
if (needsOAuth.length > 0) {
|
|
170323
|
-
const oauthOutcomes = await promptOAuthFlows(needsOAuth, {
|
|
170324
|
-
skipPrompt: options.yes || !!process.env.CI
|
|
170325
|
-
});
|
|
170326
|
-
if (oauthOutcomes.size === 0) {
|
|
170327
|
-
const pending = needsOAuth.map((c3) => c3.type).join(", ");
|
|
170328
|
-
M2.info(`To authorize, run 'base44 connectors push' or open the links above in your browser.`);
|
|
170329
|
-
}
|
|
170330
|
-
}
|
|
170331
170372
|
M2.message(`${theme.styles.header("Dashboard")}: ${theme.colors.links(getDashboardUrl())}`);
|
|
170332
170373
|
if (result.appUrl) {
|
|
170333
170374
|
M2.message(`${theme.styles.header("App URL")}: ${theme.colors.links(result.appUrl)}`);
|
|
@@ -170335,7 +170376,7 @@ ${summaryLines.join(`
|
|
|
170335
170376
|
return { outroMessage: "App deployed successfully" };
|
|
170336
170377
|
}
|
|
170337
170378
|
function getDeployCommand(context) {
|
|
170338
|
-
return new Command("deploy").description("Deploy all project resources (entities, functions, agents,
|
|
170379
|
+
return new Command("deploy").description("Deploy all project resources (entities, functions, agents, and site)").option("-y, --yes", "Skip confirmation prompt").action(async (options) => {
|
|
170339
170380
|
await runCommand(() => deployAction(options), { requireAuth: true }, context);
|
|
170340
170381
|
});
|
|
170341
170382
|
}
|
|
@@ -170626,10 +170667,10 @@ function toPascalCase(name2) {
|
|
|
170626
170667
|
return name2.split(/[-_\s]+/).map((w9) => w9.charAt(0).toUpperCase() + w9.slice(1)).join("");
|
|
170627
170668
|
}
|
|
170628
170669
|
// src/core/types/update-project.ts
|
|
170629
|
-
import { join as
|
|
170670
|
+
import { join as join14 } from "node:path";
|
|
170630
170671
|
var TYPES_INCLUDE_PATH = `${PROJECT_SUBDIR}/${TYPES_OUTPUT_SUBDIR}/*.d.ts`;
|
|
170631
170672
|
async function updateProjectConfig(projectRoot) {
|
|
170632
|
-
const tsconfigPath =
|
|
170673
|
+
const tsconfigPath = join14(projectRoot, "tsconfig.json");
|
|
170633
170674
|
if (!await pathExists(tsconfigPath)) {
|
|
170634
170675
|
return false;
|
|
170635
170676
|
}
|
|
@@ -170729,7 +170770,7 @@ function nanoid3(size = 21) {
|
|
|
170729
170770
|
}
|
|
170730
170771
|
|
|
170731
170772
|
// node_modules/posthog-node/dist/extensions/error-tracking/modifiers/module.node.mjs
|
|
170732
|
-
import { dirname as
|
|
170773
|
+
import { dirname as dirname11, posix, sep } from "path";
|
|
170733
170774
|
function createModulerModifier() {
|
|
170734
170775
|
const getModuleFromFileName = createGetModuleFromFilename();
|
|
170735
170776
|
return async (frames) => {
|
|
@@ -170738,7 +170779,7 @@ function createModulerModifier() {
|
|
|
170738
170779
|
return frames;
|
|
170739
170780
|
};
|
|
170740
170781
|
}
|
|
170741
|
-
function createGetModuleFromFilename(basePath = process.argv[1] ?
|
|
170782
|
+
function createGetModuleFromFilename(basePath = process.argv[1] ? dirname11(process.argv[1]) : process.cwd(), isWindows4 = sep === "\\") {
|
|
170742
170783
|
const normalizedBase = isWindows4 ? normalizeWindowsPath2(basePath) : basePath;
|
|
170743
170784
|
return (filename) => {
|
|
170744
170785
|
if (!filename)
|
|
@@ -174957,4 +174998,4 @@ export {
|
|
|
174957
174998
|
CLIExitError
|
|
174958
174999
|
};
|
|
174959
175000
|
|
|
174960
|
-
//# debugId=
|
|
175001
|
+
//# debugId=32B5EDD5767F60C664756E2164756E21
|