@base44-preview/cli 0.0.25-pr.104.a8520b5 → 0.0.25-pr.104.e8c6c8b
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/README.md
CHANGED
|
@@ -53,8 +53,6 @@ The CLI will guide you through project setup. For step-by-step tutorials, see th
|
|
|
53
53
|
| [`entities push`](https://docs.base44.com/developers/references/cli/commands/entities-push) | Push local entity schemas to Base44 |
|
|
54
54
|
| [`functions deploy`](https://docs.base44.com/developers/references/cli/commands/functions-deploy) | Deploy local functions to Base44 |
|
|
55
55
|
| [`site deploy`](https://docs.base44.com/developers/references/cli/commands/site-deploy) | Deploy built site files to Base44 hosting |
|
|
56
|
-
| `connectors add [type]` | Connect an OAuth integration |
|
|
57
|
-
| `connectors remove [type]` | Disconnect an integration |
|
|
58
56
|
|
|
59
57
|
|
|
60
58
|
<!--| [`eject`](https://docs.base44.com/developers/references/cli/commands/eject) | Create a Base44 backend project from an existing Base44 app | -->
|
package/dist/index.js
CHANGED
|
@@ -8038,19 +8038,6 @@ var AuthValidationError = class extends Error {
|
|
|
8038
8038
|
this.name = "AuthValidationError";
|
|
8039
8039
|
}
|
|
8040
8040
|
};
|
|
8041
|
-
var ConnectorApiError = class extends Error {
|
|
8042
|
-
constructor(message, cause) {
|
|
8043
|
-
super(message);
|
|
8044
|
-
this.cause = cause;
|
|
8045
|
-
this.name = "ConnectorApiError";
|
|
8046
|
-
}
|
|
8047
|
-
};
|
|
8048
|
-
var ConnectorValidationError = class extends Error {
|
|
8049
|
-
constructor(message) {
|
|
8050
|
-
super(message);
|
|
8051
|
-
this.name = "ConnectorValidationError";
|
|
8052
|
-
}
|
|
8053
|
-
};
|
|
8054
8041
|
|
|
8055
8042
|
//#endregion
|
|
8056
8043
|
//#region src/core/consts.ts
|
|
@@ -10905,11 +10892,11 @@ var require_fill_range = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
10905
10892
|
negatives: [],
|
|
10906
10893
|
positives: []
|
|
10907
10894
|
};
|
|
10908
|
-
let push$
|
|
10895
|
+
let push$2 = (num) => parts[num < 0 ? "negatives" : "positives"].push(Math.abs(num));
|
|
10909
10896
|
let range = [];
|
|
10910
10897
|
let index = 0;
|
|
10911
10898
|
while (descending ? a$1 >= b$2 : a$1 <= b$2) {
|
|
10912
|
-
if (options.toRegex === true && step > 1) push$
|
|
10899
|
+
if (options.toRegex === true && step > 1) push$2(a$1);
|
|
10913
10900
|
else range.push(pad(format$1(a$1, index), maxLen, toNumber));
|
|
10914
10901
|
a$1 = descending ? a$1 - step : a$1 + step;
|
|
10915
10902
|
index++;
|
|
@@ -11161,7 +11148,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
11161
11148
|
* Helpers
|
|
11162
11149
|
*/
|
|
11163
11150
|
const advance = () => input[index++];
|
|
11164
|
-
const push$
|
|
11151
|
+
const push$2 = (node) => {
|
|
11165
11152
|
if (node.type === "text" && prev.type === "dot") prev.type = "text";
|
|
11166
11153
|
if (prev && prev.type === "text" && node.type === "text") {
|
|
11167
11154
|
prev.value += node.value;
|
|
@@ -11173,7 +11160,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
11173
11160
|
prev = node;
|
|
11174
11161
|
return node;
|
|
11175
11162
|
};
|
|
11176
|
-
push$
|
|
11163
|
+
push$2({ type: "bos" });
|
|
11177
11164
|
while (index < length) {
|
|
11178
11165
|
block = stack[stack.length - 1];
|
|
11179
11166
|
value = advance();
|
|
@@ -11185,7 +11172,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
11185
11172
|
* Escaped chars
|
|
11186
11173
|
*/
|
|
11187
11174
|
if (value === CHAR_BACKSLASH) {
|
|
11188
|
-
push$
|
|
11175
|
+
push$2({
|
|
11189
11176
|
type: "text",
|
|
11190
11177
|
value: (options.keepEscaping ? value : "") + advance()
|
|
11191
11178
|
});
|
|
@@ -11195,7 +11182,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
11195
11182
|
* Right square bracket (literal): ']'
|
|
11196
11183
|
*/
|
|
11197
11184
|
if (value === CHAR_RIGHT_SQUARE_BRACKET) {
|
|
11198
|
-
push$
|
|
11185
|
+
push$2({
|
|
11199
11186
|
type: "text",
|
|
11200
11187
|
value: "\\" + value
|
|
11201
11188
|
});
|
|
@@ -11222,7 +11209,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
11222
11209
|
if (brackets === 0) break;
|
|
11223
11210
|
}
|
|
11224
11211
|
}
|
|
11225
|
-
push$
|
|
11212
|
+
push$2({
|
|
11226
11213
|
type: "text",
|
|
11227
11214
|
value
|
|
11228
11215
|
});
|
|
@@ -11232,12 +11219,12 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
11232
11219
|
* Parentheses
|
|
11233
11220
|
*/
|
|
11234
11221
|
if (value === CHAR_LEFT_PARENTHESES) {
|
|
11235
|
-
block = push$
|
|
11222
|
+
block = push$2({
|
|
11236
11223
|
type: "paren",
|
|
11237
11224
|
nodes: []
|
|
11238
11225
|
});
|
|
11239
11226
|
stack.push(block);
|
|
11240
|
-
push$
|
|
11227
|
+
push$2({
|
|
11241
11228
|
type: "text",
|
|
11242
11229
|
value
|
|
11243
11230
|
});
|
|
@@ -11245,14 +11232,14 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
11245
11232
|
}
|
|
11246
11233
|
if (value === CHAR_RIGHT_PARENTHESES) {
|
|
11247
11234
|
if (block.type !== "paren") {
|
|
11248
|
-
push$
|
|
11235
|
+
push$2({
|
|
11249
11236
|
type: "text",
|
|
11250
11237
|
value
|
|
11251
11238
|
});
|
|
11252
11239
|
continue;
|
|
11253
11240
|
}
|
|
11254
11241
|
block = stack.pop();
|
|
11255
|
-
push$
|
|
11242
|
+
push$2({
|
|
11256
11243
|
type: "text",
|
|
11257
11244
|
value
|
|
11258
11245
|
});
|
|
@@ -11277,7 +11264,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
11277
11264
|
}
|
|
11278
11265
|
value += next;
|
|
11279
11266
|
}
|
|
11280
|
-
push$
|
|
11267
|
+
push$2({
|
|
11281
11268
|
type: "text",
|
|
11282
11269
|
value
|
|
11283
11270
|
});
|
|
@@ -11288,7 +11275,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
11288
11275
|
*/
|
|
11289
11276
|
if (value === CHAR_LEFT_CURLY_BRACE) {
|
|
11290
11277
|
depth++;
|
|
11291
|
-
block = push$
|
|
11278
|
+
block = push$2({
|
|
11292
11279
|
type: "brace",
|
|
11293
11280
|
open: true,
|
|
11294
11281
|
close: false,
|
|
@@ -11299,7 +11286,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
11299
11286
|
nodes: []
|
|
11300
11287
|
});
|
|
11301
11288
|
stack.push(block);
|
|
11302
|
-
push$
|
|
11289
|
+
push$2({
|
|
11303
11290
|
type: "open",
|
|
11304
11291
|
value
|
|
11305
11292
|
});
|
|
@@ -11310,7 +11297,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
11310
11297
|
*/
|
|
11311
11298
|
if (value === CHAR_RIGHT_CURLY_BRACE) {
|
|
11312
11299
|
if (block.type !== "brace") {
|
|
11313
|
-
push$
|
|
11300
|
+
push$2({
|
|
11314
11301
|
type: "text",
|
|
11315
11302
|
value
|
|
11316
11303
|
});
|
|
@@ -11319,7 +11306,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
11319
11306
|
const type = "close";
|
|
11320
11307
|
block = stack.pop();
|
|
11321
11308
|
block.close = true;
|
|
11322
|
-
push$
|
|
11309
|
+
push$2({
|
|
11323
11310
|
type,
|
|
11324
11311
|
value
|
|
11325
11312
|
});
|
|
@@ -11339,7 +11326,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
11339
11326
|
value: stringify(block)
|
|
11340
11327
|
}];
|
|
11341
11328
|
}
|
|
11342
|
-
push$
|
|
11329
|
+
push$2({
|
|
11343
11330
|
type: "comma",
|
|
11344
11331
|
value
|
|
11345
11332
|
});
|
|
@@ -11352,7 +11339,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
11352
11339
|
if (value === CHAR_DOT && depth > 0 && block.commas === 0) {
|
|
11353
11340
|
const siblings = block.nodes;
|
|
11354
11341
|
if (depth === 0 || siblings.length === 0) {
|
|
11355
|
-
push$
|
|
11342
|
+
push$2({
|
|
11356
11343
|
type: "text",
|
|
11357
11344
|
value
|
|
11358
11345
|
});
|
|
@@ -11380,7 +11367,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
11380
11367
|
block.ranges--;
|
|
11381
11368
|
continue;
|
|
11382
11369
|
}
|
|
11383
|
-
push$
|
|
11370
|
+
push$2({
|
|
11384
11371
|
type: "dot",
|
|
11385
11372
|
value
|
|
11386
11373
|
});
|
|
@@ -11389,7 +11376,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
11389
11376
|
/**
|
|
11390
11377
|
* Text
|
|
11391
11378
|
*/
|
|
11392
|
-
push$
|
|
11379
|
+
push$2({
|
|
11393
11380
|
type: "text",
|
|
11394
11381
|
value
|
|
11395
11382
|
});
|
|
@@ -11410,7 +11397,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
11410
11397
|
parent.nodes.splice(index$1, 1, ...block.nodes);
|
|
11411
11398
|
}
|
|
11412
11399
|
} while (stack.length > 0);
|
|
11413
|
-
push$
|
|
11400
|
+
push$2({ type: "eos" });
|
|
11414
11401
|
return ast;
|
|
11415
11402
|
};
|
|
11416
11403
|
module.exports = parse;
|
|
@@ -12169,7 +12156,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12169
12156
|
* characters are plain text. This improves performance and simplifies
|
|
12170
12157
|
* lookbehinds.
|
|
12171
12158
|
*/
|
|
12172
|
-
const push$
|
|
12159
|
+
const push$2 = (tok) => {
|
|
12173
12160
|
if (prev.type === "globstar") {
|
|
12174
12161
|
const isBrace = state.braces > 0 && (tok.type === "comma" || tok.type === "brace");
|
|
12175
12162
|
const isExtglob = tok.extglob === true || extglobs.length && (tok.type === "pipe" || tok.type === "paren");
|
|
@@ -12203,12 +12190,12 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12203
12190
|
token.output = state.output;
|
|
12204
12191
|
const output = (opts.capture ? "(" : "") + token.open;
|
|
12205
12192
|
increment$1("parens");
|
|
12206
|
-
push$
|
|
12193
|
+
push$2({
|
|
12207
12194
|
type,
|
|
12208
12195
|
value: value$1,
|
|
12209
12196
|
output: state.output ? "" : ONE_CHAR
|
|
12210
12197
|
});
|
|
12211
|
-
push$
|
|
12198
|
+
push$2({
|
|
12212
12199
|
type: "paren",
|
|
12213
12200
|
extglob: true,
|
|
12214
12201
|
value: advance(),
|
|
@@ -12229,7 +12216,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12229
12216
|
}).output})${extglobStar})`;
|
|
12230
12217
|
if (token.prev.type === "bos") state.negatedExtglob = true;
|
|
12231
12218
|
}
|
|
12232
|
-
push$
|
|
12219
|
+
push$2({
|
|
12233
12220
|
type: "paren",
|
|
12234
12221
|
extglob: true,
|
|
12235
12222
|
value,
|
|
@@ -12285,7 +12272,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12285
12272
|
if (next === "." || next === ";") continue;
|
|
12286
12273
|
if (!next) {
|
|
12287
12274
|
value += "\\";
|
|
12288
|
-
push$
|
|
12275
|
+
push$2({
|
|
12289
12276
|
type: "text",
|
|
12290
12277
|
value
|
|
12291
12278
|
});
|
|
@@ -12301,7 +12288,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12301
12288
|
if (opts.unescape === true) value = advance();
|
|
12302
12289
|
else value += advance();
|
|
12303
12290
|
if (state.brackets === 0) {
|
|
12304
|
-
push$
|
|
12291
|
+
push$2({
|
|
12305
12292
|
type: "text",
|
|
12306
12293
|
value
|
|
12307
12294
|
});
|
|
@@ -12353,7 +12340,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12353
12340
|
*/
|
|
12354
12341
|
if (value === "\"") {
|
|
12355
12342
|
state.quotes = state.quotes === 1 ? 0 : 1;
|
|
12356
|
-
if (opts.keepQuotes === true) push$
|
|
12343
|
+
if (opts.keepQuotes === true) push$2({
|
|
12357
12344
|
type: "text",
|
|
12358
12345
|
value
|
|
12359
12346
|
});
|
|
@@ -12364,7 +12351,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12364
12351
|
*/
|
|
12365
12352
|
if (value === "(") {
|
|
12366
12353
|
increment$1("parens");
|
|
12367
|
-
push$
|
|
12354
|
+
push$2({
|
|
12368
12355
|
type: "paren",
|
|
12369
12356
|
value
|
|
12370
12357
|
});
|
|
@@ -12377,7 +12364,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12377
12364
|
extglobClose(extglobs.pop());
|
|
12378
12365
|
continue;
|
|
12379
12366
|
}
|
|
12380
|
-
push$
|
|
12367
|
+
push$2({
|
|
12381
12368
|
type: "paren",
|
|
12382
12369
|
value,
|
|
12383
12370
|
output: state.parens ? ")" : "\\)"
|
|
@@ -12393,7 +12380,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12393
12380
|
if (opts.nobracket !== true && opts.strictBrackets === true) throw new SyntaxError(syntaxError("closing", "]"));
|
|
12394
12381
|
value = `\\${value}`;
|
|
12395
12382
|
} else increment$1("brackets");
|
|
12396
|
-
push$
|
|
12383
|
+
push$2({
|
|
12397
12384
|
type: "bracket",
|
|
12398
12385
|
value
|
|
12399
12386
|
});
|
|
@@ -12401,7 +12388,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12401
12388
|
}
|
|
12402
12389
|
if (value === "]") {
|
|
12403
12390
|
if (opts.nobracket === true || prev && prev.type === "bracket" && prev.value.length === 1) {
|
|
12404
|
-
push$
|
|
12391
|
+
push$2({
|
|
12405
12392
|
type: "text",
|
|
12406
12393
|
value,
|
|
12407
12394
|
output: `\\${value}`
|
|
@@ -12410,7 +12397,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12410
12397
|
}
|
|
12411
12398
|
if (state.brackets === 0) {
|
|
12412
12399
|
if (opts.strictBrackets === true) throw new SyntaxError(syntaxError("opening", "["));
|
|
12413
|
-
push$
|
|
12400
|
+
push$2({
|
|
12414
12401
|
type: "text",
|
|
12415
12402
|
value,
|
|
12416
12403
|
output: `\\${value}`
|
|
@@ -12447,13 +12434,13 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12447
12434
|
tokensIndex: state.tokens.length
|
|
12448
12435
|
};
|
|
12449
12436
|
braces.push(open$1);
|
|
12450
|
-
push$
|
|
12437
|
+
push$2(open$1);
|
|
12451
12438
|
continue;
|
|
12452
12439
|
}
|
|
12453
12440
|
if (value === "}") {
|
|
12454
12441
|
const brace = braces[braces.length - 1];
|
|
12455
12442
|
if (opts.nobrace === true || !brace) {
|
|
12456
|
-
push$
|
|
12443
|
+
push$2({
|
|
12457
12444
|
type: "text",
|
|
12458
12445
|
value,
|
|
12459
12446
|
output: value
|
|
@@ -12480,7 +12467,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12480
12467
|
state.output = out;
|
|
12481
12468
|
for (const t of toks) state.output += t.output || t.value;
|
|
12482
12469
|
}
|
|
12483
|
-
push$
|
|
12470
|
+
push$2({
|
|
12484
12471
|
type: "brace",
|
|
12485
12472
|
value,
|
|
12486
12473
|
output
|
|
@@ -12494,7 +12481,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12494
12481
|
*/
|
|
12495
12482
|
if (value === "|") {
|
|
12496
12483
|
if (extglobs.length > 0) extglobs[extglobs.length - 1].conditions++;
|
|
12497
|
-
push$
|
|
12484
|
+
push$2({
|
|
12498
12485
|
type: "text",
|
|
12499
12486
|
value
|
|
12500
12487
|
});
|
|
@@ -12510,7 +12497,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12510
12497
|
brace.comma = true;
|
|
12511
12498
|
output = "|";
|
|
12512
12499
|
}
|
|
12513
|
-
push$
|
|
12500
|
+
push$2({
|
|
12514
12501
|
type: "comma",
|
|
12515
12502
|
value,
|
|
12516
12503
|
output
|
|
@@ -12529,7 +12516,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12529
12516
|
prev = bos;
|
|
12530
12517
|
continue;
|
|
12531
12518
|
}
|
|
12532
|
-
push$
|
|
12519
|
+
push$2({
|
|
12533
12520
|
type: "slash",
|
|
12534
12521
|
value,
|
|
12535
12522
|
output: SLASH_LITERAL
|
|
@@ -12550,14 +12537,14 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12550
12537
|
continue;
|
|
12551
12538
|
}
|
|
12552
12539
|
if (state.braces + state.parens === 0 && prev.type !== "bos" && prev.type !== "slash") {
|
|
12553
|
-
push$
|
|
12540
|
+
push$2({
|
|
12554
12541
|
type: "text",
|
|
12555
12542
|
value,
|
|
12556
12543
|
output: DOT_LITERAL
|
|
12557
12544
|
});
|
|
12558
12545
|
continue;
|
|
12559
12546
|
}
|
|
12560
|
-
push$
|
|
12547
|
+
push$2({
|
|
12561
12548
|
type: "dot",
|
|
12562
12549
|
value,
|
|
12563
12550
|
output: DOT_LITERAL
|
|
@@ -12577,7 +12564,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12577
12564
|
let output = value;
|
|
12578
12565
|
if (next === "<" && !utils.supportsLookbehinds()) throw new Error("Node.js v10 or higher is required for regex lookbehinds");
|
|
12579
12566
|
if (prev.value === "(" && !/[!=<:]/.test(next) || next === "<" && !/<([!=]|\w+>)/.test(remaining())) output = `\\${value}`;
|
|
12580
|
-
push$
|
|
12567
|
+
push$2({
|
|
12581
12568
|
type: "text",
|
|
12582
12569
|
value,
|
|
12583
12570
|
output
|
|
@@ -12585,14 +12572,14 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12585
12572
|
continue;
|
|
12586
12573
|
}
|
|
12587
12574
|
if (opts.dot !== true && (prev.type === "slash" || prev.type === "bos")) {
|
|
12588
|
-
push$
|
|
12575
|
+
push$2({
|
|
12589
12576
|
type: "qmark",
|
|
12590
12577
|
value,
|
|
12591
12578
|
output: QMARK_NO_DOT
|
|
12592
12579
|
});
|
|
12593
12580
|
continue;
|
|
12594
12581
|
}
|
|
12595
|
-
push$
|
|
12582
|
+
push$2({
|
|
12596
12583
|
type: "qmark",
|
|
12597
12584
|
value,
|
|
12598
12585
|
output: QMARK
|
|
@@ -12623,7 +12610,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12623
12610
|
continue;
|
|
12624
12611
|
}
|
|
12625
12612
|
if (prev && prev.value === "(" || opts.regex === false) {
|
|
12626
|
-
push$
|
|
12613
|
+
push$2({
|
|
12627
12614
|
type: "plus",
|
|
12628
12615
|
value,
|
|
12629
12616
|
output: PLUS_LITERAL
|
|
@@ -12631,13 +12618,13 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12631
12618
|
continue;
|
|
12632
12619
|
}
|
|
12633
12620
|
if (prev && (prev.type === "bracket" || prev.type === "paren" || prev.type === "brace") || state.parens > 0) {
|
|
12634
|
-
push$
|
|
12621
|
+
push$2({
|
|
12635
12622
|
type: "plus",
|
|
12636
12623
|
value
|
|
12637
12624
|
});
|
|
12638
12625
|
continue;
|
|
12639
12626
|
}
|
|
12640
|
-
push$
|
|
12627
|
+
push$2({
|
|
12641
12628
|
type: "plus",
|
|
12642
12629
|
value: PLUS_LITERAL
|
|
12643
12630
|
});
|
|
@@ -12648,7 +12635,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12648
12635
|
*/
|
|
12649
12636
|
if (value === "@") {
|
|
12650
12637
|
if (opts.noextglob !== true && peek() === "(" && peek(2) !== "?") {
|
|
12651
|
-
push$
|
|
12638
|
+
push$2({
|
|
12652
12639
|
type: "at",
|
|
12653
12640
|
extglob: true,
|
|
12654
12641
|
value,
|
|
@@ -12656,7 +12643,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12656
12643
|
});
|
|
12657
12644
|
continue;
|
|
12658
12645
|
}
|
|
12659
|
-
push$
|
|
12646
|
+
push$2({
|
|
12660
12647
|
type: "text",
|
|
12661
12648
|
value
|
|
12662
12649
|
});
|
|
@@ -12672,7 +12659,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12672
12659
|
value += match[0];
|
|
12673
12660
|
state.index += match[0].length;
|
|
12674
12661
|
}
|
|
12675
|
-
push$
|
|
12662
|
+
push$2({
|
|
12676
12663
|
type: "text",
|
|
12677
12664
|
value
|
|
12678
12665
|
});
|
|
@@ -12706,7 +12693,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12706
12693
|
const isStart = prior.type === "slash" || prior.type === "bos";
|
|
12707
12694
|
const afterStar = before && (before.type === "star" || before.type === "globstar");
|
|
12708
12695
|
if (opts.bash === true && (!isStart || rest[0] && rest[0] !== "/")) {
|
|
12709
|
-
push$
|
|
12696
|
+
push$2({
|
|
12710
12697
|
type: "star",
|
|
12711
12698
|
value,
|
|
12712
12699
|
output: ""
|
|
@@ -12716,7 +12703,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12716
12703
|
const isBrace = state.braces > 0 && (prior.type === "comma" || prior.type === "brace");
|
|
12717
12704
|
const isExtglob = extglobs.length && (prior.type === "pipe" || prior.type === "paren");
|
|
12718
12705
|
if (!isStart && prior.type !== "paren" && !isBrace && !isExtglob) {
|
|
12719
|
-
push$
|
|
12706
|
+
push$2({
|
|
12720
12707
|
type: "star",
|
|
12721
12708
|
value,
|
|
12722
12709
|
output: ""
|
|
@@ -12759,7 +12746,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12759
12746
|
state.output += prior.output + prev.output;
|
|
12760
12747
|
state.globstar = true;
|
|
12761
12748
|
consume(value + advance());
|
|
12762
|
-
push$
|
|
12749
|
+
push$2({
|
|
12763
12750
|
type: "slash",
|
|
12764
12751
|
value: "/",
|
|
12765
12752
|
output: ""
|
|
@@ -12773,7 +12760,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12773
12760
|
state.output = prev.output;
|
|
12774
12761
|
state.globstar = true;
|
|
12775
12762
|
consume(value + advance());
|
|
12776
|
-
push$
|
|
12763
|
+
push$2({
|
|
12777
12764
|
type: "slash",
|
|
12778
12765
|
value: "/",
|
|
12779
12766
|
output: ""
|
|
@@ -12797,12 +12784,12 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12797
12784
|
if (opts.bash === true) {
|
|
12798
12785
|
token.output = ".*?";
|
|
12799
12786
|
if (prev.type === "bos" || prev.type === "slash") token.output = nodot + token.output;
|
|
12800
|
-
push$
|
|
12787
|
+
push$2(token);
|
|
12801
12788
|
continue;
|
|
12802
12789
|
}
|
|
12803
12790
|
if (prev && (prev.type === "bracket" || prev.type === "paren") && opts.regex === true) {
|
|
12804
12791
|
token.output = value;
|
|
12805
|
-
push$
|
|
12792
|
+
push$2(token);
|
|
12806
12793
|
continue;
|
|
12807
12794
|
}
|
|
12808
12795
|
if (state.index === state.start || prev.type === "slash" || prev.type === "dot") {
|
|
@@ -12821,7 +12808,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12821
12808
|
prev.output += ONE_CHAR;
|
|
12822
12809
|
}
|
|
12823
12810
|
}
|
|
12824
|
-
push$
|
|
12811
|
+
push$2(token);
|
|
12825
12812
|
}
|
|
12826
12813
|
while (state.brackets > 0) {
|
|
12827
12814
|
if (opts.strictBrackets === true) throw new SyntaxError(syntaxError("closing", "]"));
|
|
@@ -12838,7 +12825,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
12838
12825
|
state.output = utils.escapeLast(state.output, "{");
|
|
12839
12826
|
decrement("braces");
|
|
12840
12827
|
}
|
|
12841
|
-
if (opts.strictSlashes !== true && (prev.type === "star" || prev.type === "bracket")) push$
|
|
12828
|
+
if (opts.strictSlashes !== true && (prev.type === "star" || prev.type === "bracket")) push$2({
|
|
12842
12829
|
type: "maybe_slash",
|
|
12843
12830
|
value: "",
|
|
12844
12831
|
output: `${SLASH_LITERAL}?`
|
|
@@ -14542,7 +14529,7 @@ var require_queue = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
14542
14529
|
var _running = 0;
|
|
14543
14530
|
var errorHandler = null;
|
|
14544
14531
|
var self$1 = {
|
|
14545
|
-
push: push$
|
|
14532
|
+
push: push$2,
|
|
14546
14533
|
drain: noop,
|
|
14547
14534
|
saturated: noop,
|
|
14548
14535
|
pause,
|
|
@@ -14612,7 +14599,7 @@ var require_queue = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
14612
14599
|
function idle() {
|
|
14613
14600
|
return _running === 0 && self$1.length() === 0;
|
|
14614
14601
|
}
|
|
14615
|
-
function push$
|
|
14602
|
+
function push$2(value, done) {
|
|
14616
14603
|
var current = cache$2.get();
|
|
14617
14604
|
current.context = context;
|
|
14618
14605
|
current.release = release;
|
|
@@ -14733,11 +14720,11 @@ var require_queue = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
14733
14720
|
var queue = fastqueue(context, asyncWrapper, _concurrency);
|
|
14734
14721
|
var pushCb = queue.push;
|
|
14735
14722
|
var unshiftCb = queue.unshift;
|
|
14736
|
-
queue.push = push$
|
|
14723
|
+
queue.push = push$2;
|
|
14737
14724
|
queue.unshift = unshift$1;
|
|
14738
14725
|
queue.drained = drained;
|
|
14739
14726
|
return queue;
|
|
14740
|
-
function push$
|
|
14727
|
+
function push$2(value) {
|
|
14741
14728
|
var p$1 = new Promise(function(resolve$1, reject) {
|
|
14742
14729
|
pushCb(value, function(err, result) {
|
|
14743
14730
|
if (err) {
|
|
@@ -16954,7 +16941,8 @@ const ProjectConfigSchema = object({
|
|
|
16954
16941
|
site: SiteConfigSchema.optional(),
|
|
16955
16942
|
entitiesDir: string().optional().default("entities"),
|
|
16956
16943
|
functionsDir: string().optional().default("functions"),
|
|
16957
|
-
agentsDir: string().optional().default("agents")
|
|
16944
|
+
agentsDir: string().optional().default("agents"),
|
|
16945
|
+
connectors: array(string()).optional()
|
|
16958
16946
|
});
|
|
16959
16947
|
const AppConfigSchema = object({ id: string().min(1, "id cannot be empty") });
|
|
16960
16948
|
const CreateProjectResponseSchema = looseObject({ id: string() });
|
|
@@ -28864,7 +28852,7 @@ var Yallist = class Yallist {
|
|
|
28864
28852
|
this.length++;
|
|
28865
28853
|
}
|
|
28866
28854
|
push(...args) {
|
|
28867
|
-
for (let i$1 = 0, l$1 = args.length; i$1 < l$1; i$1++) push(this, args[i$1]);
|
|
28855
|
+
for (let i$1 = 0, l$1 = args.length; i$1 < l$1; i$1++) push$1(this, args[i$1]);
|
|
28868
28856
|
return this.length;
|
|
28869
28857
|
}
|
|
28870
28858
|
unshift(...args) {
|
|
@@ -29042,7 +29030,7 @@ function insertAfter(self$1, node, value) {
|
|
|
29042
29030
|
self$1.length++;
|
|
29043
29031
|
return inserted;
|
|
29044
29032
|
}
|
|
29045
|
-
function push(self$1, item) {
|
|
29033
|
+
function push$1(self$1, item) {
|
|
29046
29034
|
self$1.tail = new Node(item, self$1.tail, void 0, self$1);
|
|
29047
29035
|
if (!self$1.head) self$1.head = self$1.tail;
|
|
29048
29036
|
self$1.length++;
|
|
@@ -30806,7 +30794,7 @@ function getAppClient() {
|
|
|
30806
30794
|
|
|
30807
30795
|
//#endregion
|
|
30808
30796
|
//#region src/core/clients/schemas.ts
|
|
30809
|
-
const ApiErrorSchema
|
|
30797
|
+
const ApiErrorSchema = object({
|
|
30810
30798
|
error_type: string().optional(),
|
|
30811
30799
|
message: union([string(), record(string(), unknown())]).optional(),
|
|
30812
30800
|
detail: union([
|
|
@@ -39291,7 +39279,13 @@ const InitiateResponseSchema = object({
|
|
|
39291
39279
|
already_authorized: boolean().nullish(),
|
|
39292
39280
|
other_user_email: string().nullish(),
|
|
39293
39281
|
error: string().nullish()
|
|
39294
|
-
})
|
|
39282
|
+
}).transform((data) => ({
|
|
39283
|
+
redirectUrl: data.redirect_url,
|
|
39284
|
+
connectionId: data.connection_id,
|
|
39285
|
+
alreadyAuthorized: data.already_authorized,
|
|
39286
|
+
otherUserEmail: data.other_user_email,
|
|
39287
|
+
error: data.error
|
|
39288
|
+
}));
|
|
39295
39289
|
/**
|
|
39296
39290
|
* Response from GET /api/apps/{app_id}/external-auth/status
|
|
39297
39291
|
*/
|
|
@@ -39329,13 +39323,6 @@ const ConnectorSchema = object({
|
|
|
39329
39323
|
* Response from GET /api/apps/{app_id}/external-auth/list
|
|
39330
39324
|
*/
|
|
39331
39325
|
const ListResponseSchema = object({ integrations: array(ConnectorSchema) });
|
|
39332
|
-
/**
|
|
39333
|
-
* Generic API error response
|
|
39334
|
-
*/
|
|
39335
|
-
const ApiErrorSchema = object({
|
|
39336
|
-
error: string(),
|
|
39337
|
-
detail: string().nullish()
|
|
39338
|
-
});
|
|
39339
39326
|
|
|
39340
39327
|
//#endregion
|
|
39341
39328
|
//#region src/core/connectors/api.ts
|
|
@@ -39344,92 +39331,39 @@ const ApiErrorSchema = object({
|
|
|
39344
39331
|
* Returns a redirect URL to open in the browser.
|
|
39345
39332
|
*/
|
|
39346
39333
|
async function initiateOAuth(integrationType, scopes = null) {
|
|
39347
|
-
const
|
|
39348
|
-
|
|
39349
|
-
|
|
39350
|
-
|
|
39351
|
-
|
|
39352
|
-
throwHttpErrors: false
|
|
39353
|
-
});
|
|
39354
|
-
const json = await response.json();
|
|
39355
|
-
if (!response.ok) {
|
|
39356
|
-
const errorResult = ApiErrorSchema.safeParse(json);
|
|
39357
|
-
if (errorResult.success) throw new ConnectorApiError(errorResult.data.error);
|
|
39358
|
-
throw new ConnectorApiError(`Failed to initiate OAuth: ${response.status} ${response.statusText}`);
|
|
39359
|
-
}
|
|
39360
|
-
const result = InitiateResponseSchema.safeParse(json);
|
|
39361
|
-
if (!result.success) throw new ConnectorValidationError(`Invalid initiate response from server: ${result.error.message}`);
|
|
39362
|
-
return result.data;
|
|
39334
|
+
const json = await (await getAppClient().post("external-auth/initiate", { json: {
|
|
39335
|
+
integration_type: integrationType,
|
|
39336
|
+
scopes
|
|
39337
|
+
} })).json();
|
|
39338
|
+
return InitiateResponseSchema.parse(json);
|
|
39363
39339
|
}
|
|
39364
39340
|
/**
|
|
39365
39341
|
* Checks the status of an OAuth connection attempt.
|
|
39366
39342
|
*/
|
|
39367
39343
|
async function checkOAuthStatus(integrationType, connectionId) {
|
|
39368
|
-
const
|
|
39369
|
-
|
|
39370
|
-
|
|
39371
|
-
|
|
39372
|
-
|
|
39373
|
-
throwHttpErrors: false
|
|
39374
|
-
});
|
|
39375
|
-
const json = await response.json();
|
|
39376
|
-
if (!response.ok) {
|
|
39377
|
-
const errorResult = ApiErrorSchema.safeParse(json);
|
|
39378
|
-
if (errorResult.success) throw new ConnectorApiError(errorResult.data.error);
|
|
39379
|
-
throw new ConnectorApiError(`Failed to check OAuth status: ${response.status} ${response.statusText}`);
|
|
39380
|
-
}
|
|
39381
|
-
const result = StatusResponseSchema.safeParse(json);
|
|
39382
|
-
if (!result.success) throw new ConnectorValidationError(`Invalid status response from server: ${result.error.message}`);
|
|
39383
|
-
return result.data;
|
|
39344
|
+
const json = await (await getAppClient().get("external-auth/status", { searchParams: {
|
|
39345
|
+
integration_type: integrationType,
|
|
39346
|
+
connection_id: connectionId
|
|
39347
|
+
} })).json();
|
|
39348
|
+
return StatusResponseSchema.parse(json);
|
|
39384
39349
|
}
|
|
39385
39350
|
/**
|
|
39386
39351
|
* Lists all connected integrations for the current app.
|
|
39387
39352
|
*/
|
|
39388
39353
|
async function listConnectors() {
|
|
39389
|
-
const
|
|
39390
|
-
|
|
39391
|
-
if (!response.ok) {
|
|
39392
|
-
const errorResult = ApiErrorSchema.safeParse(json);
|
|
39393
|
-
if (errorResult.success) throw new ConnectorApiError(errorResult.data.error);
|
|
39394
|
-
throw new ConnectorApiError(`Failed to list connectors: ${response.status} ${response.statusText}`);
|
|
39395
|
-
}
|
|
39396
|
-
const result = ListResponseSchema.safeParse(json);
|
|
39397
|
-
if (!result.success) throw new ConnectorValidationError(`Invalid list response from server: ${result.error.message}`);
|
|
39398
|
-
return result.data.integrations;
|
|
39399
|
-
}
|
|
39400
|
-
/**
|
|
39401
|
-
* Disconnects (soft delete) a connector integration.
|
|
39402
|
-
*/
|
|
39403
|
-
async function disconnectConnector(integrationType) {
|
|
39404
|
-
const response = await getAppClient().delete(`external-auth/integrations/${integrationType}`, { throwHttpErrors: false });
|
|
39405
|
-
if (!response.ok) {
|
|
39406
|
-
const json = await response.json();
|
|
39407
|
-
const errorResult = ApiErrorSchema.safeParse(json);
|
|
39408
|
-
if (errorResult.success) throw new ConnectorApiError(errorResult.data.error);
|
|
39409
|
-
throw new ConnectorApiError(`Failed to disconnect connector: ${response.status} ${response.statusText}`);
|
|
39410
|
-
}
|
|
39354
|
+
const json = await (await getAppClient().get("external-auth/list")).json();
|
|
39355
|
+
return ListResponseSchema.parse(json).integrations;
|
|
39411
39356
|
}
|
|
39412
39357
|
/**
|
|
39413
39358
|
* Removes (hard delete) a connector integration.
|
|
39414
39359
|
* This permanently removes the connector and cannot be undone.
|
|
39415
39360
|
*/
|
|
39416
39361
|
async function removeConnector(integrationType) {
|
|
39417
|
-
|
|
39418
|
-
if (!response.ok) {
|
|
39419
|
-
const json = await response.json();
|
|
39420
|
-
const errorResult = ApiErrorSchema.safeParse(json);
|
|
39421
|
-
if (errorResult.success) throw new ConnectorApiError(errorResult.data.error);
|
|
39422
|
-
throw new ConnectorApiError(`Failed to remove connector: ${response.status} ${response.statusText}`);
|
|
39423
|
-
}
|
|
39362
|
+
await getAppClient().delete(`external-auth/integrations/${integrationType}`);
|
|
39424
39363
|
}
|
|
39425
39364
|
|
|
39426
39365
|
//#endregion
|
|
39427
|
-
//#region src/core/connectors/
|
|
39428
|
-
/**
|
|
39429
|
-
* OAuth polling configuration
|
|
39430
|
-
*/
|
|
39431
|
-
const OAUTH_POLL_INTERVAL_MS = 2e3;
|
|
39432
|
-
const OAUTH_POLL_TIMEOUT_MS = 300 * 1e3;
|
|
39366
|
+
//#region src/core/connectors/consts.ts
|
|
39433
39367
|
/**
|
|
39434
39368
|
* Supported OAuth connector integrations.
|
|
39435
39369
|
* Based on apper/backend/app/external_auth/models/constants.py
|
|
@@ -39469,12 +39403,13 @@ function isValidIntegration(type) {
|
|
|
39469
39403
|
return SUPPORTED_INTEGRATIONS.includes(type);
|
|
39470
39404
|
}
|
|
39471
39405
|
function getIntegrationDisplayName(type) {
|
|
39472
|
-
|
|
39473
|
-
return type;
|
|
39406
|
+
return INTEGRATION_DISPLAY_NAMES[type] ?? type;
|
|
39474
39407
|
}
|
|
39475
39408
|
|
|
39476
39409
|
//#endregion
|
|
39477
|
-
//#region src/
|
|
39410
|
+
//#region src/cli/commands/connectors/utils.ts
|
|
39411
|
+
const OAUTH_POLL_INTERVAL_MS = 2e3;
|
|
39412
|
+
const OAUTH_POLL_TIMEOUT_MS = 300 * 1e3;
|
|
39478
39413
|
/**
|
|
39479
39414
|
* Polls for OAuth completion status.
|
|
39480
39415
|
* Returns when status becomes ACTIVE or FAILED, or times out.
|
|
@@ -39516,125 +39451,127 @@ async function waitForOAuthCompletion(integrationType, connectionId, options) {
|
|
|
39516
39451
|
}
|
|
39517
39452
|
|
|
39518
39453
|
//#endregion
|
|
39519
|
-
//#region src/cli/commands/connectors/
|
|
39520
|
-
|
|
39521
|
-
|
|
39522
|
-
|
|
39523
|
-
|
|
39524
|
-
|
|
39525
|
-
|
|
39526
|
-
|
|
39527
|
-
|
|
39528
|
-
const
|
|
39529
|
-
|
|
39530
|
-
|
|
39531
|
-
|
|
39532
|
-
|
|
39533
|
-
|
|
39534
|
-
});
|
|
39535
|
-
if (pD(selected)) {
|
|
39536
|
-
xe("Operation cancelled.");
|
|
39537
|
-
process.exit(0);
|
|
39538
|
-
}
|
|
39539
|
-
return selected;
|
|
39454
|
+
//#region src/cli/commands/connectors/push.ts
|
|
39455
|
+
/**
|
|
39456
|
+
* Get connectors defined in the local config.jsonc
|
|
39457
|
+
*/
|
|
39458
|
+
async function getLocalConnectors() {
|
|
39459
|
+
const connectors = (await runTask("Reading project config...", async () => readProjectConfig(), {
|
|
39460
|
+
successMessage: "Project config loaded",
|
|
39461
|
+
errorMessage: "Failed to read project config"
|
|
39462
|
+
})).project.connectors || [];
|
|
39463
|
+
const validConnectors = [];
|
|
39464
|
+
const invalidConnectors = [];
|
|
39465
|
+
for (const connector of connectors) if (isValidIntegration(connector)) validConnectors.push(connector);
|
|
39466
|
+
else invalidConnectors.push(connector);
|
|
39467
|
+
if (invalidConnectors.length > 0) throw new Error(`Invalid connectors found in config.jsonc: ${invalidConnectors.join(", ")}`);
|
|
39468
|
+
return validConnectors;
|
|
39540
39469
|
}
|
|
39541
|
-
|
|
39542
|
-
|
|
39543
|
-
|
|
39544
|
-
|
|
39545
|
-
|
|
39546
|
-
|
|
39470
|
+
/**
|
|
39471
|
+
* Get active connectors from the backend
|
|
39472
|
+
*/
|
|
39473
|
+
async function getBackendConnectors() {
|
|
39474
|
+
const connectors = await runTask("Fetching active connectors...", async () => listConnectors(), {
|
|
39475
|
+
successMessage: "Active connectors loaded",
|
|
39476
|
+
errorMessage: "Failed to fetch connectors"
|
|
39547
39477
|
});
|
|
39478
|
+
const activeConnectors = /* @__PURE__ */ new Set();
|
|
39479
|
+
for (const connector of connectors) if (isValidIntegration(connector.integrationType)) activeConnectors.add(connector.integrationType);
|
|
39480
|
+
return activeConnectors;
|
|
39548
39481
|
}
|
|
39549
|
-
|
|
39550
|
-
|
|
39551
|
-
|
|
39482
|
+
/**
|
|
39483
|
+
* Activate a connector by initiating OAuth and polling for completion
|
|
39484
|
+
*/
|
|
39485
|
+
async function activateConnector(integrationType) {
|
|
39486
|
+
const displayName = getIntegrationDisplayName(integrationType);
|
|
39552
39487
|
const initiateResponse = await runTask(`Initiating ${displayName} connection...`, async () => {
|
|
39553
|
-
return await initiateOAuth(
|
|
39488
|
+
return await initiateOAuth(integrationType);
|
|
39554
39489
|
}, {
|
|
39555
39490
|
successMessage: `${displayName} OAuth initiated`,
|
|
39556
39491
|
errorMessage: `Failed to initiate ${displayName} connection`
|
|
39557
39492
|
});
|
|
39558
|
-
if (initiateResponse.
|
|
39559
|
-
if (initiateResponse.error === "different_user" && initiateResponse.
|
|
39560
|
-
|
|
39561
|
-
|
|
39562
|
-
|
|
39563
|
-
if (!
|
|
39564
|
-
|
|
39565
|
-
|
|
39566
|
-
}
|
|
39567
|
-
|
|
39568
|
-
await
|
|
39569
|
-
|
|
39570
|
-
|
|
39493
|
+
if (initiateResponse.alreadyAuthorized) return { success: true };
|
|
39494
|
+
if (initiateResponse.error === "different_user" && initiateResponse.otherUserEmail) return {
|
|
39495
|
+
success: false,
|
|
39496
|
+
error: `Already connected by ${initiateResponse.otherUserEmail}`
|
|
39497
|
+
};
|
|
39498
|
+
if (!initiateResponse.redirectUrl || !initiateResponse.connectionId) return {
|
|
39499
|
+
success: false,
|
|
39500
|
+
error: "Invalid response from server: missing redirect URL or connection ID"
|
|
39501
|
+
};
|
|
39502
|
+
M.info(`Please authorize ${displayName} at:\n${theme.colors.links(initiateResponse.redirectUrl)}`);
|
|
39503
|
+
return await runTask("Waiting for authorization...", async () => {
|
|
39504
|
+
return await waitForOAuthCompletion(integrationType, initiateResponse.connectionId);
|
|
39505
|
+
}, {
|
|
39506
|
+
successMessage: "Authorization completed!",
|
|
39507
|
+
errorMessage: "Authorization failed"
|
|
39571
39508
|
});
|
|
39572
|
-
});
|
|
39573
|
-
|
|
39574
|
-
//#endregion
|
|
39575
|
-
//#region src/cli/commands/connectors/remove.ts
|
|
39576
|
-
function mapBackendConnectors(connectors) {
|
|
39577
|
-
return connectors.filter((c$1) => isValidIntegration(c$1.integrationType)).map((c$1) => ({
|
|
39578
|
-
type: c$1.integrationType,
|
|
39579
|
-
displayName: getIntegrationDisplayName(c$1.integrationType),
|
|
39580
|
-
accountEmail: (c$1.accountInfo?.email || c$1.accountInfo?.name) ?? void 0
|
|
39581
|
-
}));
|
|
39582
39509
|
}
|
|
39583
|
-
|
|
39584
|
-
|
|
39585
|
-
|
|
39586
|
-
|
|
39587
|
-
|
|
39588
|
-
}
|
|
39589
|
-
|
|
39590
|
-
|
|
39591
|
-
|
|
39592
|
-
|
|
39593
|
-
let label = c$1.displayName;
|
|
39594
|
-
if (c$1.accountEmail) label += ` (${c$1.accountEmail})`;
|
|
39595
|
-
return {
|
|
39596
|
-
value: c$1.type,
|
|
39597
|
-
label
|
|
39598
|
-
};
|
|
39599
|
-
})
|
|
39510
|
+
/**
|
|
39511
|
+
* Delete a connector from the backend (hard delete)
|
|
39512
|
+
*/
|
|
39513
|
+
async function deleteConnector(integrationType) {
|
|
39514
|
+
const displayName = getIntegrationDisplayName(integrationType);
|
|
39515
|
+
await runTask(`Removing ${displayName}...`, async () => {
|
|
39516
|
+
await removeConnector(integrationType);
|
|
39517
|
+
}, {
|
|
39518
|
+
successMessage: `${displayName} removed`,
|
|
39519
|
+
errorMessage: `Failed to remove ${displayName}`
|
|
39600
39520
|
});
|
|
39601
|
-
if (pD(selected)) {
|
|
39602
|
-
xe("Operation cancelled.");
|
|
39603
|
-
process.exit(0);
|
|
39604
|
-
}
|
|
39605
|
-
return connectors.find((c$1) => c$1.type === selected);
|
|
39606
39521
|
}
|
|
39607
|
-
async function
|
|
39608
|
-
const
|
|
39609
|
-
const
|
|
39610
|
-
|
|
39611
|
-
|
|
39612
|
-
|
|
39613
|
-
|
|
39614
|
-
const
|
|
39615
|
-
|
|
39616
|
-
|
|
39617
|
-
|
|
39618
|
-
|
|
39619
|
-
|
|
39620
|
-
|
|
39621
|
-
|
|
39622
|
-
|
|
39522
|
+
async function push(options = {}) {
|
|
39523
|
+
const localConnectors = await getLocalConnectors();
|
|
39524
|
+
const backendConnectors = await getBackendConnectors();
|
|
39525
|
+
const toDelete = [];
|
|
39526
|
+
const toActivate = [];
|
|
39527
|
+
const alreadyActive = [];
|
|
39528
|
+
for (const connector of backendConnectors) if (!localConnectors.includes(connector)) toDelete.push(connector);
|
|
39529
|
+
for (const connector of localConnectors) if (backendConnectors.has(connector)) alreadyActive.push(connector);
|
|
39530
|
+
else toActivate.push(connector);
|
|
39531
|
+
if (toDelete.length === 0 && toActivate.length === 0) return { outroMessage: "All connectors are in sync. Nothing to do." };
|
|
39532
|
+
M.info("\nConnector sync summary:");
|
|
39533
|
+
if (toDelete.length > 0) M.warn(` ${theme.colors.error("Delete from backend:")} ${toDelete.map(getIntegrationDisplayName).join(", ")}`);
|
|
39534
|
+
if (toActivate.length > 0) M.info(` ${theme.colors.success("Activate:")} ${toActivate.map(getIntegrationDisplayName).join(", ")}`);
|
|
39535
|
+
if (alreadyActive.length > 0) M.info(` ${theme.colors.dim("Already active:")} ${alreadyActive.map(getIntegrationDisplayName).join(", ")}`);
|
|
39536
|
+
if (!options.yes && toDelete.length > 0) {
|
|
39537
|
+
const shouldContinue = await ye({ message: `Delete ${toDelete.length} connector(s) from backend?` });
|
|
39538
|
+
if (pD(shouldContinue) || !shouldContinue) {
|
|
39623
39539
|
xe("Operation cancelled.");
|
|
39624
39540
|
process.exit(0);
|
|
39625
39541
|
}
|
|
39626
39542
|
}
|
|
39627
|
-
|
|
39628
|
-
|
|
39629
|
-
|
|
39630
|
-
|
|
39631
|
-
|
|
39632
|
-
|
|
39633
|
-
|
|
39634
|
-
|
|
39543
|
+
const deleteResults = [];
|
|
39544
|
+
for (const connector of toDelete) try {
|
|
39545
|
+
await deleteConnector(connector);
|
|
39546
|
+
deleteResults.push(`${theme.colors.success("✓")} Deleted ${getIntegrationDisplayName(connector)}`);
|
|
39547
|
+
} catch (error) {
|
|
39548
|
+
const errorMsg = error instanceof Error ? error.message : "Unknown error";
|
|
39549
|
+
deleteResults.push(`${theme.colors.error("✗")} Failed to delete ${getIntegrationDisplayName(connector)}: ${errorMsg}`);
|
|
39550
|
+
}
|
|
39551
|
+
const activationResults = [];
|
|
39552
|
+
for (const connector of toActivate) try {
|
|
39553
|
+
const result = await activateConnector(connector);
|
|
39554
|
+
if (result.success) {
|
|
39555
|
+
const accountInfo = result.accountEmail ? ` as ${theme.styles.bold(result.accountEmail)}` : "";
|
|
39556
|
+
activationResults.push(`${theme.colors.success("✓")} Activated ${getIntegrationDisplayName(connector)}${accountInfo}`);
|
|
39557
|
+
} else activationResults.push(`${theme.colors.error("✗")} Failed to activate ${getIntegrationDisplayName(connector)}: ${result.error}`);
|
|
39558
|
+
} catch (error) {
|
|
39559
|
+
const errorMsg = error instanceof Error ? error.message : "Unknown error";
|
|
39560
|
+
activationResults.push(`${theme.colors.error("✗")} Failed to activate ${getIntegrationDisplayName(connector)}: ${errorMsg}`);
|
|
39561
|
+
}
|
|
39562
|
+
const summaryLines = [];
|
|
39563
|
+
if (deleteResults.length > 0) {
|
|
39564
|
+
summaryLines.push("\nDeleted connectors:");
|
|
39565
|
+
summaryLines.push(...deleteResults.map((r$1) => ` ${r$1}`));
|
|
39566
|
+
}
|
|
39567
|
+
if (activationResults.length > 0) {
|
|
39568
|
+
summaryLines.push("\nActivated connectors:");
|
|
39569
|
+
summaryLines.push(...activationResults.map((r$1) => ` ${r$1}`));
|
|
39570
|
+
}
|
|
39571
|
+
return { outroMessage: summaryLines.join("\n") || "Connector sync completed" };
|
|
39635
39572
|
}
|
|
39636
|
-
const
|
|
39637
|
-
await runCommand(() =>
|
|
39573
|
+
const connectorsPushCommand = new Command("push").description("Sync connectors defined in config.jsonc with backend").option("-y, --yes", "Skip confirmation prompts").action(async (options) => {
|
|
39574
|
+
await runCommand(() => push(options), {
|
|
39638
39575
|
requireAuth: true,
|
|
39639
39576
|
requireAppConfig: true
|
|
39640
39577
|
});
|
|
@@ -39642,7 +39579,7 @@ const connectorsRemoveCommand = new Command("remove").argument("[type]", "Integr
|
|
|
39642
39579
|
|
|
39643
39580
|
//#endregion
|
|
39644
39581
|
//#region src/cli/commands/connectors/index.ts
|
|
39645
|
-
const connectorsCommand = new Command("connectors").description("Manage OAuth connectors").addCommand(
|
|
39582
|
+
const connectorsCommand = new Command("connectors").description("Manage OAuth connectors").addCommand(connectorsPushCommand);
|
|
39646
39583
|
|
|
39647
39584
|
//#endregion
|
|
39648
39585
|
//#region package.json
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "task_manager",
|
|
3
|
+
"description": "An AI agent that helps you manage and change your tasks",
|
|
4
|
+
"instructions": "You are a helpful task management assistant. You can help users create, update, mark as completed, and delete tasks using the entity tool. When a user asks to change a task, help them modify it by updating the appropriate fields. Always be conversational and helpful.",
|
|
5
|
+
"tool_configs": [
|
|
6
|
+
{
|
|
7
|
+
"entity_name": "Task",
|
|
8
|
+
"allowed_operations": ["read", "create", "update", "delete"]
|
|
9
|
+
}
|
|
10
|
+
]
|
|
11
|
+
}
|