@base44-preview/cli 0.0.32-pr.251.fd02def → 0.0.32-pr.252.3b64eaf
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 +77 -265
- package/dist/cli/index.js.map +14 -15
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -17468,7 +17468,7 @@ var require_lodash2 = __commonJS((exports, module) => {
|
|
|
17468
17468
|
function nth(array2, n2) {
|
|
17469
17469
|
return array2 && array2.length ? baseNth(array2, toInteger(n2)) : undefined2;
|
|
17470
17470
|
}
|
|
17471
|
-
var
|
|
17471
|
+
var pull = baseRest(pullAll);
|
|
17472
17472
|
function pullAll(array2, values2) {
|
|
17473
17473
|
return array2 && array2.length && values2 && values2.length ? basePullAll(array2, values2) : array2;
|
|
17474
17474
|
}
|
|
@@ -19233,7 +19233,7 @@ __p += '`;
|
|
|
19233
19233
|
lodash.pickBy = pickBy;
|
|
19234
19234
|
lodash.property = property;
|
|
19235
19235
|
lodash.propertyOf = propertyOf;
|
|
19236
|
-
lodash.pull =
|
|
19236
|
+
lodash.pull = pull;
|
|
19237
19237
|
lodash.pullAll = pullAll;
|
|
19238
19238
|
lodash.pullAllBy = pullAllBy;
|
|
19239
19239
|
lodash.pullAllWith = pullAllWith;
|
|
@@ -185051,8 +185051,8 @@ var TikTokConnectorSchema = exports_external.object({
|
|
|
185051
185051
|
type: exports_external.literal("tiktok"),
|
|
185052
185052
|
scopes: exports_external.array(exports_external.string()).default([])
|
|
185053
185053
|
});
|
|
185054
|
-
var
|
|
185055
|
-
type: exports_external.literal("
|
|
185054
|
+
var GoogleBigQueryConnectorSchema = exports_external.object({
|
|
185055
|
+
type: exports_external.literal("googlebigquery"),
|
|
185056
185056
|
scopes: exports_external.array(exports_external.string()).default([])
|
|
185057
185057
|
});
|
|
185058
185058
|
var CustomTypeSchema = exports_external.string().min(1).regex(/^[a-z0-9_-]+$/i);
|
|
@@ -185067,13 +185067,13 @@ var ConnectorResourceSchema = exports_external.union([
|
|
|
185067
185067
|
GoogleSheetsConnectorSchema,
|
|
185068
185068
|
GoogleDocsConnectorSchema,
|
|
185069
185069
|
GoogleSlidesConnectorSchema,
|
|
185070
|
+
GoogleBigQueryConnectorSchema,
|
|
185070
185071
|
SlackConnectorSchema,
|
|
185071
185072
|
NotionConnectorSchema,
|
|
185072
185073
|
SalesforceConnectorSchema,
|
|
185073
185074
|
HubspotConnectorSchema,
|
|
185074
185075
|
LinkedInConnectorSchema,
|
|
185075
185076
|
TikTokConnectorSchema,
|
|
185076
|
-
StripeConnectorSchema,
|
|
185077
185077
|
GenericConnectorSchema
|
|
185078
185078
|
]);
|
|
185079
185079
|
var KnownIntegrationTypes = [
|
|
@@ -185083,13 +185083,13 @@ var KnownIntegrationTypes = [
|
|
|
185083
185083
|
"googlesheets",
|
|
185084
185084
|
"googledocs",
|
|
185085
185085
|
"googleslides",
|
|
185086
|
+
"googlebigquery",
|
|
185086
185087
|
"slack",
|
|
185087
185088
|
"notion",
|
|
185088
185089
|
"salesforce",
|
|
185089
185090
|
"hubspot",
|
|
185090
185091
|
"linkedin",
|
|
185091
|
-
"tiktok"
|
|
185092
|
-
"stripe"
|
|
185092
|
+
"tiktok"
|
|
185093
185093
|
];
|
|
185094
185094
|
var IntegrationTypeSchema = exports_external.union([
|
|
185095
185095
|
exports_external.enum(KnownIntegrationTypes),
|
|
@@ -185142,18 +185142,6 @@ var RemoveConnectorResponseSchema = exports_external.object({
|
|
|
185142
185142
|
status: data.status,
|
|
185143
185143
|
integrationType: data.integration_type
|
|
185144
185144
|
}));
|
|
185145
|
-
var STRIPE_CONNECTOR_TYPE = "stripe";
|
|
185146
|
-
var InstallStripeResponseSchema = exports_external.object({
|
|
185147
|
-
already_installed: exports_external.boolean(),
|
|
185148
|
-
claim_url: exports_external.string().nullable()
|
|
185149
|
-
});
|
|
185150
|
-
var StripeStatusResponseSchema = exports_external.object({
|
|
185151
|
-
stripe_mode: exports_external.enum(["sandbox", "live"]).nullable(),
|
|
185152
|
-
sandbox_claim_url: exports_external.string().nullable().optional()
|
|
185153
|
-
});
|
|
185154
|
-
var RemoveStripeResponseSchema = exports_external.object({
|
|
185155
|
-
success: exports_external.boolean()
|
|
185156
|
-
});
|
|
185157
185145
|
|
|
185158
185146
|
// src/core/resources/connector/api.ts
|
|
185159
185147
|
async function listConnectors() {
|
|
@@ -185221,54 +185209,6 @@ async function removeConnector(integrationType) {
|
|
|
185221
185209
|
}
|
|
185222
185210
|
return result.data;
|
|
185223
185211
|
}
|
|
185224
|
-
async function installStripe() {
|
|
185225
|
-
const appClient = getAppClient();
|
|
185226
|
-
let response;
|
|
185227
|
-
try {
|
|
185228
|
-
response = await appClient.post("payments/stripe/install", {
|
|
185229
|
-
timeout: 60000
|
|
185230
|
-
});
|
|
185231
|
-
} catch (error48) {
|
|
185232
|
-
throw await ApiError.fromHttpError(error48, "installing Stripe");
|
|
185233
|
-
}
|
|
185234
|
-
const result = InstallStripeResponseSchema.safeParse(await response.json());
|
|
185235
|
-
if (!result.success) {
|
|
185236
|
-
throw new SchemaValidationError("Invalid response from server", result.error);
|
|
185237
|
-
}
|
|
185238
|
-
return result.data;
|
|
185239
|
-
}
|
|
185240
|
-
async function getStripeStatus() {
|
|
185241
|
-
const appClient = getAppClient();
|
|
185242
|
-
let response;
|
|
185243
|
-
try {
|
|
185244
|
-
response = await appClient.get("payments/stripe/status", {
|
|
185245
|
-
timeout: 60000
|
|
185246
|
-
});
|
|
185247
|
-
} catch (error48) {
|
|
185248
|
-
throw await ApiError.fromHttpError(error48, "checking Stripe integration status");
|
|
185249
|
-
}
|
|
185250
|
-
const result = StripeStatusResponseSchema.safeParse(await response.json());
|
|
185251
|
-
if (!result.success) {
|
|
185252
|
-
throw new SchemaValidationError("Invalid response from server", result.error);
|
|
185253
|
-
}
|
|
185254
|
-
return result.data;
|
|
185255
|
-
}
|
|
185256
|
-
async function removeStripe() {
|
|
185257
|
-
const appClient = getAppClient();
|
|
185258
|
-
let response;
|
|
185259
|
-
try {
|
|
185260
|
-
response = await appClient.delete("payments/stripe", {
|
|
185261
|
-
timeout: 60000
|
|
185262
|
-
});
|
|
185263
|
-
} catch (error48) {
|
|
185264
|
-
throw await ApiError.fromHttpError(error48, "removing Stripe integration");
|
|
185265
|
-
}
|
|
185266
|
-
const result = RemoveStripeResponseSchema.safeParse(await response.json());
|
|
185267
|
-
if (!result.success) {
|
|
185268
|
-
throw new SchemaValidationError("Invalid response from server", result.error);
|
|
185269
|
-
}
|
|
185270
|
-
return result.data;
|
|
185271
|
-
}
|
|
185272
185212
|
// src/core/resources/connector/config.ts
|
|
185273
185213
|
import { join as join4 } from "node:path";
|
|
185274
185214
|
import { isDeepStrictEqual } from "node:util";
|
|
@@ -185317,7 +185257,7 @@ async function readAllConnectors(connectorsDir) {
|
|
|
185317
185257
|
async function writeConnectors(connectorsDir, remoteConnectors) {
|
|
185318
185258
|
const entries = await readConnectorFiles(connectorsDir);
|
|
185319
185259
|
const typeToEntry = buildTypeToEntryMap(entries);
|
|
185320
|
-
const newTypes = new Set(remoteConnectors.map((c) => c.
|
|
185260
|
+
const newTypes = new Set(remoteConnectors.map((c) => c.integrationType));
|
|
185321
185261
|
const deleted = [];
|
|
185322
185262
|
for (const [type, entry] of typeToEntry) {
|
|
185323
185263
|
if (!newTypes.has(type)) {
|
|
@@ -185327,44 +185267,22 @@ async function writeConnectors(connectorsDir, remoteConnectors) {
|
|
|
185327
185267
|
}
|
|
185328
185268
|
const written = [];
|
|
185329
185269
|
for (const connector of remoteConnectors) {
|
|
185330
|
-
const existing = typeToEntry.get(connector.
|
|
185331
|
-
|
|
185270
|
+
const existing = typeToEntry.get(connector.integrationType);
|
|
185271
|
+
const localConnector = {
|
|
185272
|
+
type: connector.integrationType,
|
|
185273
|
+
scopes: connector.scopes
|
|
185274
|
+
};
|
|
185275
|
+
if (existing && isDeepStrictEqual(existing.data, localConnector)) {
|
|
185332
185276
|
continue;
|
|
185333
185277
|
}
|
|
185334
|
-
const filePath = existing?.filePath ?? join4(connectorsDir, `${connector.
|
|
185335
|
-
await writeJsonFile(filePath,
|
|
185336
|
-
written.push(connector.
|
|
185278
|
+
const filePath = existing?.filePath ?? join4(connectorsDir, `${connector.integrationType}.${CONFIG_FILE_EXTENSION}`);
|
|
185279
|
+
await writeJsonFile(filePath, localConnector);
|
|
185280
|
+
written.push(connector.integrationType);
|
|
185337
185281
|
}
|
|
185338
185282
|
return { written, deleted };
|
|
185339
185283
|
}
|
|
185340
|
-
// src/core/resources/connector/pull.ts
|
|
185341
|
-
async function pullAllConnectors() {
|
|
185342
|
-
const [oauthResponse, stripeStatus] = await Promise.all([
|
|
185343
|
-
listConnectors(),
|
|
185344
|
-
getStripeStatus()
|
|
185345
|
-
]);
|
|
185346
|
-
const connectors = oauthResponse.integrations.map((i) => ({
|
|
185347
|
-
type: i.integrationType,
|
|
185348
|
-
scopes: i.scopes
|
|
185349
|
-
}));
|
|
185350
|
-
if (stripeStatus.stripe_mode !== null) {
|
|
185351
|
-
connectors.push({ type: STRIPE_CONNECTOR_TYPE, scopes: [] });
|
|
185352
|
-
}
|
|
185353
|
-
return connectors;
|
|
185354
|
-
}
|
|
185355
185284
|
// src/core/resources/connector/push.ts
|
|
185356
185285
|
async function pushConnectors(connectors) {
|
|
185357
|
-
const stripeConnector = connectors.find((c) => c.type === STRIPE_CONNECTOR_TYPE);
|
|
185358
|
-
const oauthConnectors = connectors.filter((c) => c.type !== STRIPE_CONNECTOR_TYPE);
|
|
185359
|
-
const oauthResults = await syncOAuthConnectors(oauthConnectors);
|
|
185360
|
-
const stripeResult = await syncStripeConnector(stripeConnector);
|
|
185361
|
-
const results = [...oauthResults];
|
|
185362
|
-
if (stripeResult) {
|
|
185363
|
-
results.push(stripeResult);
|
|
185364
|
-
}
|
|
185365
|
-
return { results };
|
|
185366
|
-
}
|
|
185367
|
-
async function syncOAuthConnectors(connectors) {
|
|
185368
185286
|
const results = [];
|
|
185369
185287
|
const upstream = await listConnectors();
|
|
185370
185288
|
const localTypes = new Set(connectors.map((c) => c.type));
|
|
@@ -185397,62 +185315,7 @@ async function syncOAuthConnectors(connectors) {
|
|
|
185397
185315
|
}
|
|
185398
185316
|
}
|
|
185399
185317
|
}
|
|
185400
|
-
return results;
|
|
185401
|
-
}
|
|
185402
|
-
async function syncStripeConnector(localStripe) {
|
|
185403
|
-
const remoteStatus = await fetchStripeRemoteStatus();
|
|
185404
|
-
if (remoteStatus === "error") {
|
|
185405
|
-
return localStripe ? stripeError("Failed to check Stripe integration status") : null;
|
|
185406
|
-
}
|
|
185407
|
-
const isRemoteInstalled = remoteStatus.stripe_mode !== null;
|
|
185408
|
-
const needsInstall = localStripe && !isRemoteInstalled;
|
|
185409
|
-
const alreadySynced = localStripe && isRemoteInstalled;
|
|
185410
|
-
const needsRemoval = !localStripe && isRemoteInstalled;
|
|
185411
|
-
if (needsInstall) {
|
|
185412
|
-
return handleStripeInstall();
|
|
185413
|
-
}
|
|
185414
|
-
if (alreadySynced) {
|
|
185415
|
-
return stripeSynced();
|
|
185416
|
-
}
|
|
185417
|
-
if (needsRemoval) {
|
|
185418
|
-
return handleStripeRemoval();
|
|
185419
|
-
}
|
|
185420
|
-
return null;
|
|
185421
|
-
}
|
|
185422
|
-
async function fetchStripeRemoteStatus() {
|
|
185423
|
-
try {
|
|
185424
|
-
return await getStripeStatus();
|
|
185425
|
-
} catch {
|
|
185426
|
-
return "error";
|
|
185427
|
-
}
|
|
185428
|
-
}
|
|
185429
|
-
async function handleStripeInstall() {
|
|
185430
|
-
try {
|
|
185431
|
-
const result = await installStripe();
|
|
185432
|
-
return stripeProvisioned(result.claim_url ?? undefined);
|
|
185433
|
-
} catch (err) {
|
|
185434
|
-
return stripeError(err instanceof Error ? err.message : String(err));
|
|
185435
|
-
}
|
|
185436
|
-
}
|
|
185437
|
-
async function handleStripeRemoval() {
|
|
185438
|
-
try {
|
|
185439
|
-
await removeStripe();
|
|
185440
|
-
return stripeRemoved();
|
|
185441
|
-
} catch (err) {
|
|
185442
|
-
return stripeError(err instanceof Error ? err.message : String(err));
|
|
185443
|
-
}
|
|
185444
|
-
}
|
|
185445
|
-
function stripeSynced() {
|
|
185446
|
-
return { type: STRIPE_CONNECTOR_TYPE, action: "synced" };
|
|
185447
|
-
}
|
|
185448
|
-
function stripeProvisioned(claimUrl) {
|
|
185449
|
-
return { type: STRIPE_CONNECTOR_TYPE, action: "provisioned", claimUrl };
|
|
185450
|
-
}
|
|
185451
|
-
function stripeRemoved() {
|
|
185452
|
-
return { type: STRIPE_CONNECTOR_TYPE, action: "removed" };
|
|
185453
|
-
}
|
|
185454
|
-
function stripeError(error48) {
|
|
185455
|
-
return { type: STRIPE_CONNECTOR_TYPE, action: "error", error: error48 };
|
|
185318
|
+
return { results };
|
|
185456
185319
|
}
|
|
185457
185320
|
function getConnectorSyncResult(type, response) {
|
|
185458
185321
|
if (response.error === "different_user") {
|
|
@@ -185470,7 +185333,7 @@ function getConnectorSyncResult(type, response) {
|
|
|
185470
185333
|
type,
|
|
185471
185334
|
action: "needs_oauth",
|
|
185472
185335
|
redirectUrl: response.redirectUrl,
|
|
185473
|
-
connectionId: response.connectionId ??
|
|
185336
|
+
connectionId: response.connectionId ?? undefined
|
|
185474
185337
|
};
|
|
185475
185338
|
}
|
|
185476
185339
|
return { type, action: "synced" };
|
|
@@ -185483,7 +185346,10 @@ var connectorResource = {
|
|
|
185483
185346
|
// src/core/resources/entity/schema.ts
|
|
185484
185347
|
var FieldConditionSchema = exports_external.union([
|
|
185485
185348
|
exports_external.string(),
|
|
185486
|
-
exports_external.
|
|
185349
|
+
exports_external.number(),
|
|
185350
|
+
exports_external.boolean(),
|
|
185351
|
+
exports_external.null(),
|
|
185352
|
+
exports_external.looseObject({
|
|
185487
185353
|
$in: exports_external.unknown().optional(),
|
|
185488
185354
|
$nin: exports_external.unknown().optional(),
|
|
185489
185355
|
$ne: exports_external.unknown().optional(),
|
|
@@ -185500,6 +185366,15 @@ var rlsConditionAllowedKeys = new Set([
|
|
|
185500
185366
|
"user_condition",
|
|
185501
185367
|
"created_by",
|
|
185502
185368
|
"created_by_id",
|
|
185369
|
+
"id",
|
|
185370
|
+
"_id",
|
|
185371
|
+
"created_date",
|
|
185372
|
+
"updated_date",
|
|
185373
|
+
"app_id",
|
|
185374
|
+
"entity_name",
|
|
185375
|
+
"is_deleted",
|
|
185376
|
+
"deleted_date",
|
|
185377
|
+
"environment",
|
|
185503
185378
|
"$or",
|
|
185504
185379
|
"$and",
|
|
185505
185380
|
"$nor"
|
|
@@ -185528,60 +185403,33 @@ var isValidFieldCondition = (value) => {
|
|
|
185528
185403
|
}
|
|
185529
185404
|
return false;
|
|
185530
185405
|
};
|
|
185531
|
-
var RefineRLSConditionSchema = RLSConditionSchema.refine((val) => Object.entries(val).every(([key, value]) =>
|
|
185532
|
-
if (rlsConditionAllowedKeys.has(key)) {
|
|
185533
|
-
return true;
|
|
185534
|
-
}
|
|
185535
|
-
if (!key.startsWith("data.")) {
|
|
185536
|
-
return false;
|
|
185537
|
-
}
|
|
185538
|
-
return isValidFieldCondition(value);
|
|
185539
|
-
}), "Keys must be known RLS keys or match data.* pattern with valid value");
|
|
185406
|
+
var RefineRLSConditionSchema = RLSConditionSchema.refine((val) => Object.entries(val).every(([key, value]) => rlsConditionAllowedKeys.has(key) || isValidFieldCondition(value)), "Field condition values must be a primitive or an operator object ($in, $nin, $ne, $all)");
|
|
185540
185407
|
var RLSRuleSchema = exports_external.union([exports_external.boolean(), RefineRLSConditionSchema]);
|
|
185541
|
-
var EntityRLSSchema = exports_external.
|
|
185408
|
+
var EntityRLSSchema = exports_external.looseObject({
|
|
185542
185409
|
create: RLSRuleSchema.optional(),
|
|
185543
185410
|
read: RLSRuleSchema.optional(),
|
|
185544
185411
|
update: RLSRuleSchema.optional(),
|
|
185545
185412
|
delete: RLSRuleSchema.optional(),
|
|
185546
185413
|
write: RLSRuleSchema.optional()
|
|
185547
185414
|
});
|
|
185548
|
-
var FieldRLSSchema = exports_external.
|
|
185415
|
+
var FieldRLSSchema = exports_external.looseObject({
|
|
185549
185416
|
read: RLSRuleSchema.optional(),
|
|
185550
185417
|
write: RLSRuleSchema.optional(),
|
|
185551
185418
|
create: RLSRuleSchema.optional(),
|
|
185552
185419
|
update: RLSRuleSchema.optional(),
|
|
185553
185420
|
delete: RLSRuleSchema.optional()
|
|
185554
185421
|
});
|
|
185555
|
-
var
|
|
185556
|
-
|
|
185557
|
-
"number",
|
|
185558
|
-
"integer",
|
|
185559
|
-
"boolean",
|
|
185560
|
-
"array",
|
|
185561
|
-
"object"
|
|
185562
|
-
]);
|
|
185563
|
-
var StringFormatSchema = exports_external.enum([
|
|
185564
|
-
"date",
|
|
185565
|
-
"date-time",
|
|
185566
|
-
"time",
|
|
185567
|
-
"email",
|
|
185568
|
-
"uri",
|
|
185569
|
-
"hostname",
|
|
185570
|
-
"ipv4",
|
|
185571
|
-
"ipv6",
|
|
185572
|
-
"uuid"
|
|
185573
|
-
]);
|
|
185574
|
-
var PropertyDefinitionSchema = exports_external.object({
|
|
185575
|
-
type: PropertyTypeSchema,
|
|
185422
|
+
var PropertyDefinitionSchema = exports_external.looseObject({
|
|
185423
|
+
type: exports_external.string().optional(),
|
|
185576
185424
|
title: exports_external.string().optional(),
|
|
185577
185425
|
description: exports_external.string().optional(),
|
|
185578
185426
|
minLength: exports_external.number().int().min(0).optional(),
|
|
185579
185427
|
maxLength: exports_external.number().int().min(0).optional(),
|
|
185580
185428
|
pattern: exports_external.string().optional(),
|
|
185581
|
-
format:
|
|
185429
|
+
format: exports_external.string().optional(),
|
|
185582
185430
|
minimum: exports_external.number().optional(),
|
|
185583
185431
|
maximum: exports_external.number().optional(),
|
|
185584
|
-
enum: exports_external.array(exports_external.
|
|
185432
|
+
enum: exports_external.array(exports_external.unknown()).optional(),
|
|
185585
185433
|
enumNames: exports_external.array(exports_external.string()).optional(),
|
|
185586
185434
|
default: exports_external.unknown().optional(),
|
|
185587
185435
|
$ref: exports_external.string().optional(),
|
|
@@ -185594,12 +185442,12 @@ var PropertyDefinitionSchema = exports_external.object({
|
|
|
185594
185442
|
return exports_external.record(exports_external.string(), PropertyDefinitionSchema).optional();
|
|
185595
185443
|
}
|
|
185596
185444
|
});
|
|
185597
|
-
var EntitySchema = exports_external.
|
|
185598
|
-
type: exports_external.literal("object"),
|
|
185599
|
-
name: exports_external.string().regex(/^[a-zA-Z0-9]+$/, "Entity name must be alphanumeric only"),
|
|
185445
|
+
var EntitySchema = exports_external.looseObject({
|
|
185446
|
+
type: exports_external.literal("object").default("object"),
|
|
185447
|
+
name: exports_external.string().min(1).regex(/^[a-zA-Z0-9]+$/, "Entity name must be alphanumeric only"),
|
|
185600
185448
|
title: exports_external.string().optional(),
|
|
185601
185449
|
description: exports_external.string().optional(),
|
|
185602
|
-
properties: exports_external.record(exports_external.string(), PropertyDefinitionSchema),
|
|
185450
|
+
properties: exports_external.record(exports_external.string(), PropertyDefinitionSchema).default({}),
|
|
185603
185451
|
required: exports_external.array(exports_external.string()).optional(),
|
|
185604
185452
|
rls: EntityRLSSchema.optional()
|
|
185605
185453
|
});
|
|
@@ -193779,10 +193627,6 @@ function getDashboardUrl(projectId) {
|
|
|
193779
193627
|
const id = projectId ?? getAppConfig().id;
|
|
193780
193628
|
return `${getBase44ApiUrl()}/apps/${id}/editor/workspace/overview`;
|
|
193781
193629
|
}
|
|
193782
|
-
function getConnectorsUrl(projectId) {
|
|
193783
|
-
const id = projectId ?? getAppConfig().id;
|
|
193784
|
-
return `${getBase44ApiUrl()}/apps/${id}/editor/workspace/app-connections`;
|
|
193785
|
-
}
|
|
193786
193630
|
// src/cli/commands/agents/pull.ts
|
|
193787
193631
|
async function pullAgentsAction() {
|
|
193788
193632
|
const { project: project2 } = await readProjectConfig();
|
|
@@ -193887,13 +193731,13 @@ async function pullConnectorsAction() {
|
|
|
193887
193731
|
const configDir = dirname8(project2.configPath);
|
|
193888
193732
|
const connectorsDir = join10(configDir, project2.connectorsDir);
|
|
193889
193733
|
const remoteConnectors = await runTask("Fetching connectors from Base44", async () => {
|
|
193890
|
-
return await
|
|
193734
|
+
return await listConnectors();
|
|
193891
193735
|
}, {
|
|
193892
193736
|
successMessage: "Connectors fetched successfully",
|
|
193893
193737
|
errorMessage: "Failed to fetch connectors"
|
|
193894
193738
|
});
|
|
193895
193739
|
const { written, deleted } = await runTask("Syncing connector files", async () => {
|
|
193896
|
-
return await writeConnectors(connectorsDir, remoteConnectors);
|
|
193740
|
+
return await writeConnectors(connectorsDir, remoteConnectors.integrations);
|
|
193897
193741
|
}, {
|
|
193898
193742
|
successMessage: "Connector files synced successfully",
|
|
193899
193743
|
errorMessage: "Failed to sync connector files"
|
|
@@ -193908,7 +193752,7 @@ async function pullConnectorsAction() {
|
|
|
193908
193752
|
M2.info("All connectors are already up to date");
|
|
193909
193753
|
}
|
|
193910
193754
|
return {
|
|
193911
|
-
outroMessage: `Pulled ${remoteConnectors.length} connectors to ${connectorsDir}`
|
|
193755
|
+
outroMessage: `Pulled ${remoteConnectors.integrations.length} connectors to ${connectorsDir}`
|
|
193912
193756
|
};
|
|
193913
193757
|
}
|
|
193914
193758
|
function getConnectorsPullCommand(context) {
|
|
@@ -194527,7 +194371,7 @@ var open_default = open;
|
|
|
194527
194371
|
var POLL_INTERVAL_MS = 2000;
|
|
194528
194372
|
var POLL_TIMEOUT_MS = 2 * 60 * 1000;
|
|
194529
194373
|
function filterPendingOAuth(results) {
|
|
194530
|
-
return results.filter((r2) => r2.action === "needs_oauth" && !!r2.connectionId);
|
|
194374
|
+
return results.filter((r2) => r2.action === "needs_oauth" && !!r2.redirectUrl && !!r2.connectionId);
|
|
194531
194375
|
}
|
|
194532
194376
|
async function runOAuthFlowWithSkip(connector2) {
|
|
194533
194377
|
await open_default(connector2.redirectUrl);
|
|
@@ -194609,49 +194453,32 @@ Opening browser for ${connector2.type}...`);
|
|
|
194609
194453
|
function printSummary(results, oauthOutcomes) {
|
|
194610
194454
|
const synced = [];
|
|
194611
194455
|
const added = [];
|
|
194612
|
-
const provisioned = [];
|
|
194613
194456
|
const removed = [];
|
|
194614
194457
|
const skipped = [];
|
|
194615
194458
|
const failed = [];
|
|
194616
194459
|
for (const r2 of results) {
|
|
194617
|
-
|
|
194618
|
-
|
|
194619
|
-
|
|
194620
|
-
|
|
194621
|
-
|
|
194622
|
-
|
|
194623
|
-
|
|
194624
|
-
|
|
194625
|
-
|
|
194626
|
-
|
|
194627
|
-
|
|
194628
|
-
|
|
194629
|
-
|
|
194630
|
-
|
|
194631
|
-
|
|
194632
|
-
|
|
194633
|
-
|
|
194634
|
-
|
|
194635
|
-
skipped.push(r2.type);
|
|
194636
|
-
} else if (oauthStatus === "PENDING") {
|
|
194637
|
-
failed.push({ type: r2.type, error: "authorization timed out" });
|
|
194638
|
-
} else if (oauthStatus === "FAILED") {
|
|
194639
|
-
failed.push({ type: r2.type, error: "authorization failed" });
|
|
194640
|
-
} else {
|
|
194641
|
-
failed.push({ type: r2.type, error: "needs authorization" });
|
|
194642
|
-
}
|
|
194643
|
-
break;
|
|
194460
|
+
const oauthStatus = oauthOutcomes.get(r2.type);
|
|
194461
|
+
if (r2.action === "synced") {
|
|
194462
|
+
synced.push(r2.type);
|
|
194463
|
+
} else if (r2.action === "removed") {
|
|
194464
|
+
removed.push(r2.type);
|
|
194465
|
+
} else if (r2.action === "error") {
|
|
194466
|
+
failed.push({ type: r2.type, error: r2.error });
|
|
194467
|
+
} else if (r2.action === "needs_oauth") {
|
|
194468
|
+
if (oauthStatus === "ACTIVE") {
|
|
194469
|
+
added.push(r2.type);
|
|
194470
|
+
} else if (oauthStatus === "SKIPPED") {
|
|
194471
|
+
skipped.push(r2.type);
|
|
194472
|
+
} else if (oauthStatus === "PENDING") {
|
|
194473
|
+
failed.push({ type: r2.type, error: "authorization timed out" });
|
|
194474
|
+
} else if (oauthStatus === "FAILED") {
|
|
194475
|
+
failed.push({ type: r2.type, error: "authorization failed" });
|
|
194476
|
+
} else {
|
|
194477
|
+
failed.push({ type: r2.type, error: "needs authorization" });
|
|
194644
194478
|
}
|
|
194645
194479
|
}
|
|
194646
194480
|
}
|
|
194647
194481
|
M2.info(theme.styles.bold("Summary:"));
|
|
194648
|
-
for (const i2 of provisioned) {
|
|
194649
|
-
M2.success(`Provisioned: ${i2.type}`);
|
|
194650
|
-
if (i2.claimUrl) {
|
|
194651
|
-
M2.info(` Claim your Stripe account: ${theme.colors.links(i2.claimUrl)}`);
|
|
194652
|
-
}
|
|
194653
|
-
M2.info(` Connectors dashboard: ${theme.colors.links(getConnectorsUrl())}`);
|
|
194654
|
-
}
|
|
194655
194482
|
if (synced.length > 0) {
|
|
194656
194483
|
M2.success(`Synced: ${synced.join(", ")}`);
|
|
194657
194484
|
}
|
|
@@ -194665,7 +194492,7 @@ function printSummary(results, oauthOutcomes) {
|
|
|
194665
194492
|
M2.warn(`Skipped: ${skipped.join(", ")}`);
|
|
194666
194493
|
}
|
|
194667
194494
|
for (const r2 of failed) {
|
|
194668
|
-
M2.error(`Failed: ${r2.type} - ${r2.error}`);
|
|
194495
|
+
M2.error(`Failed: ${r2.type}${r2.error ? ` - ${r2.error}` : ""}`);
|
|
194669
194496
|
}
|
|
194670
194497
|
}
|
|
194671
194498
|
async function pushConnectorsAction() {
|
|
@@ -194699,7 +194526,7 @@ function getConnectorsPushCommand(context) {
|
|
|
194699
194526
|
|
|
194700
194527
|
// src/cli/commands/connectors/index.ts
|
|
194701
194528
|
function getConnectorsCommand(context) {
|
|
194702
|
-
return new Command("connectors").description("Manage project connectors").addCommand(getConnectorsPullCommand(context)).addCommand(getConnectorsPushCommand(context));
|
|
194529
|
+
return new Command("connectors").description("Manage project connectors (OAuth integrations)").addCommand(getConnectorsPullCommand(context)).addCommand(getConnectorsPushCommand(context));
|
|
194703
194530
|
}
|
|
194704
194531
|
|
|
194705
194532
|
// src/cli/commands/dashboard/open.ts
|
|
@@ -195015,11 +194842,15 @@ ${summaryLines.join(`
|
|
|
195015
194842
|
successMessage: theme.colors.base44Orange("Deployment completed"),
|
|
195016
194843
|
errorMessage: "Deployment failed"
|
|
195017
194844
|
});
|
|
195018
|
-
const
|
|
195019
|
-
|
|
195020
|
-
|
|
195021
|
-
|
|
195022
|
-
|
|
194845
|
+
const needsOAuth = filterPendingOAuth(result.connectorResults ?? []);
|
|
194846
|
+
if (needsOAuth.length > 0) {
|
|
194847
|
+
const oauthOutcomes = await promptOAuthFlows(needsOAuth, {
|
|
194848
|
+
skipPrompt: options.yes || !!process.env.CI
|
|
194849
|
+
});
|
|
194850
|
+
const allAuthorized = oauthOutcomes.size > 0 && [...oauthOutcomes.values()].every((s) => s === "ACTIVE");
|
|
194851
|
+
if (!allAuthorized) {
|
|
194852
|
+
M2.info("Some connectors still require authorization. Run 'base44 connectors push' or open the links above in your browser.");
|
|
194853
|
+
}
|
|
195023
194854
|
}
|
|
195024
194855
|
M2.message(`${theme.styles.header("Dashboard")}: ${theme.colors.links(getDashboardUrl())}`);
|
|
195025
194856
|
if (result.appUrl) {
|
|
@@ -195032,25 +194863,6 @@ function getDeployCommand(context) {
|
|
|
195032
194863
|
await runCommand(() => deployAction(options), { requireAuth: true }, context);
|
|
195033
194864
|
});
|
|
195034
194865
|
}
|
|
195035
|
-
async function handleOAuthConnectors(connectorResults, options) {
|
|
195036
|
-
const needsOAuth = filterPendingOAuth(connectorResults);
|
|
195037
|
-
if (needsOAuth.length === 0)
|
|
195038
|
-
return;
|
|
195039
|
-
const oauthOutcomes = await promptOAuthFlows(needsOAuth, {
|
|
195040
|
-
skipPrompt: options.yes || !!process.env.CI
|
|
195041
|
-
});
|
|
195042
|
-
const allAuthorized = oauthOutcomes.size > 0 && [...oauthOutcomes.values()].every((s) => s === "ACTIVE");
|
|
195043
|
-
if (!allAuthorized) {
|
|
195044
|
-
M2.info("Some connectors still require authorization. Run 'base44 connectors push' or open the links above in your browser.");
|
|
195045
|
-
}
|
|
195046
|
-
}
|
|
195047
|
-
function printStripeResult(r2) {
|
|
195048
|
-
M2.success(`Provisioned: Stripe`);
|
|
195049
|
-
if (r2.claimUrl) {
|
|
195050
|
-
M2.info(` Claim your Stripe account: ${theme.colors.links(r2.claimUrl)}`);
|
|
195051
|
-
}
|
|
195052
|
-
M2.info(` Connectors dashboard: ${theme.colors.links(getConnectorsUrl())}`);
|
|
195053
|
-
}
|
|
195054
194866
|
|
|
195055
194867
|
// src/cli/commands/project/link.ts
|
|
195056
194868
|
function validateNonInteractiveFlags2(command) {
|
|
@@ -199939,4 +199751,4 @@ export {
|
|
|
199939
199751
|
CLIExitError
|
|
199940
199752
|
};
|
|
199941
199753
|
|
|
199942
|
-
//# debugId=
|
|
199754
|
+
//# debugId=AF03C92ADCD7DDC664756E2164756E21
|