@serve.zone/catalog 2.1.0 → 2.3.0
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_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/index.d.ts +6 -0
- package/dist_ts_web/elements/index.js +9 -1
- package/dist_ts_web/elements/sz-demo-view-mta.d.ts +25 -0
- package/dist_ts_web/elements/sz-demo-view-mta.js +375 -0
- package/dist_ts_web/elements/sz-demo-view-routes.d.ts +22 -0
- package/dist_ts_web/elements/sz-demo-view-routes.js +388 -0
- package/dist_ts_web/elements/sz-mta-detail-view.d.ts +56 -0
- package/dist_ts_web/elements/sz-mta-detail-view.js +929 -0
- package/dist_ts_web/elements/sz-mta-list-view.d.ts +31 -0
- package/dist_ts_web/elements/sz-mta-list-view.js +371 -0
- package/dist_ts_web/elements/sz-route-card.d.ts +78 -0
- package/dist_ts_web/elements/sz-route-card.js +648 -0
- package/dist_ts_web/elements/sz-route-list-view.d.ts +21 -0
- package/dist_ts_web/elements/sz-route-list-view.js +372 -0
- package/dist_ts_web/pages/sz-demo-app-shell.js +14 -2
- package/dist_watch/bundle.js +2896 -210
- package/dist_watch/bundle.js.map +4 -4
- package/package.json +1 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/index.ts +10 -0
- package/ts_web/elements/sz-demo-view-mta.ts +335 -0
- package/ts_web/elements/sz-demo-view-routes.ts +362 -0
- package/ts_web/elements/sz-mta-detail-view.ts +933 -0
- package/ts_web/elements/sz-mta-list-view.ts +332 -0
- package/ts_web/elements/sz-route-card.ts +667 -0
- package/ts_web/elements/sz-route-list-view.ts +326 -0
- package/ts_web/pages/sz-demo-app-shell.ts +13 -1
package/dist_watch/bundle.js
CHANGED
|
@@ -1397,7 +1397,7 @@ var init_Subscription = __esm({
|
|
|
1397
1397
|
this._finalizers = null;
|
|
1398
1398
|
}
|
|
1399
1399
|
Subscription2.prototype.unsubscribe = function() {
|
|
1400
|
-
var e_1,
|
|
1400
|
+
var e_1, _a44, e_2, _b;
|
|
1401
1401
|
var errors;
|
|
1402
1402
|
if (!this.closed) {
|
|
1403
1403
|
this.closed = true;
|
|
@@ -1414,7 +1414,7 @@ var init_Subscription = __esm({
|
|
|
1414
1414
|
e_1 = { error: e_1_1 };
|
|
1415
1415
|
} finally {
|
|
1416
1416
|
try {
|
|
1417
|
-
if (_parentage_1_1 && !_parentage_1_1.done && (
|
|
1417
|
+
if (_parentage_1_1 && !_parentage_1_1.done && (_a44 = _parentage_1.return)) _a44.call(_parentage_1);
|
|
1418
1418
|
} finally {
|
|
1419
1419
|
if (e_1) throw e_1.error;
|
|
1420
1420
|
}
|
|
@@ -1464,7 +1464,7 @@ var init_Subscription = __esm({
|
|
|
1464
1464
|
}
|
|
1465
1465
|
};
|
|
1466
1466
|
Subscription2.prototype.add = function(teardown) {
|
|
1467
|
-
var
|
|
1467
|
+
var _a44;
|
|
1468
1468
|
if (teardown && teardown !== this) {
|
|
1469
1469
|
if (this.closed) {
|
|
1470
1470
|
execFinalizer(teardown);
|
|
@@ -1475,7 +1475,7 @@ var init_Subscription = __esm({
|
|
|
1475
1475
|
}
|
|
1476
1476
|
teardown._addParent(this);
|
|
1477
1477
|
}
|
|
1478
|
-
(this._finalizers = (
|
|
1478
|
+
(this._finalizers = (_a44 = this._finalizers) !== null && _a44 !== void 0 ? _a44 : []).push(teardown);
|
|
1479
1479
|
}
|
|
1480
1480
|
}
|
|
1481
1481
|
};
|
|
@@ -1611,7 +1611,7 @@ function errorContext(cb) {
|
|
|
1611
1611
|
}
|
|
1612
1612
|
cb();
|
|
1613
1613
|
if (isRoot) {
|
|
1614
|
-
var
|
|
1614
|
+
var _a44 = context, errorThrown = _a44.errorThrown, error = _a44.error;
|
|
1615
1615
|
context = null;
|
|
1616
1616
|
if (errorThrown) {
|
|
1617
1617
|
throw error;
|
|
@@ -1862,8 +1862,8 @@ var init_pipe = __esm({
|
|
|
1862
1862
|
|
|
1863
1863
|
// node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Observable.js
|
|
1864
1864
|
function getPromiseCtor(promiseCtor) {
|
|
1865
|
-
var
|
|
1866
|
-
return (
|
|
1865
|
+
var _a44;
|
|
1866
|
+
return (_a44 = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config.Promise) !== null && _a44 !== void 0 ? _a44 : Promise;
|
|
1867
1867
|
}
|
|
1868
1868
|
function isObserver(value2) {
|
|
1869
1869
|
return value2 && isFunction(value2.next) && isFunction(value2.error) && isFunction(value2.complete);
|
|
@@ -1897,7 +1897,7 @@ var init_Observable = __esm({
|
|
|
1897
1897
|
var _this = this;
|
|
1898
1898
|
var subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);
|
|
1899
1899
|
errorContext(function() {
|
|
1900
|
-
var
|
|
1900
|
+
var _a44 = _this, operator = _a44.operator, source = _a44.source;
|
|
1901
1901
|
subscriber.add(operator ? operator.call(subscriber, source) : source ? _this._subscribe(subscriber) : _this._trySubscribe(subscriber));
|
|
1902
1902
|
});
|
|
1903
1903
|
return subscriber;
|
|
@@ -1929,8 +1929,8 @@ var init_Observable = __esm({
|
|
|
1929
1929
|
});
|
|
1930
1930
|
};
|
|
1931
1931
|
Observable2.prototype._subscribe = function(subscriber) {
|
|
1932
|
-
var
|
|
1933
|
-
return (
|
|
1932
|
+
var _a44;
|
|
1933
|
+
return (_a44 = this.source) === null || _a44 === void 0 ? void 0 : _a44.subscribe(subscriber);
|
|
1934
1934
|
};
|
|
1935
1935
|
Observable2.prototype[observable] = function() {
|
|
1936
1936
|
return this;
|
|
@@ -2031,11 +2031,11 @@ var init_OperatorSubscriber = __esm({
|
|
|
2031
2031
|
return _this;
|
|
2032
2032
|
}
|
|
2033
2033
|
OperatorSubscriber2.prototype.unsubscribe = function() {
|
|
2034
|
-
var
|
|
2034
|
+
var _a44;
|
|
2035
2035
|
if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {
|
|
2036
2036
|
var closed_1 = this.closed;
|
|
2037
2037
|
_super.prototype.unsubscribe.call(this);
|
|
2038
|
-
!closed_1 && ((
|
|
2038
|
+
!closed_1 && ((_a44 = this.onFinalize) === null || _a44 === void 0 ? void 0 : _a44.call(this));
|
|
2039
2039
|
}
|
|
2040
2040
|
};
|
|
2041
2041
|
return OperatorSubscriber2;
|
|
@@ -2291,7 +2291,7 @@ var init_Subject = __esm({
|
|
|
2291
2291
|
Subject2.prototype.next = function(value2) {
|
|
2292
2292
|
var _this = this;
|
|
2293
2293
|
errorContext(function() {
|
|
2294
|
-
var e_1,
|
|
2294
|
+
var e_1, _a44;
|
|
2295
2295
|
_this._throwIfClosed();
|
|
2296
2296
|
if (!_this.isStopped) {
|
|
2297
2297
|
if (!_this.currentObservers) {
|
|
@@ -2306,7 +2306,7 @@ var init_Subject = __esm({
|
|
|
2306
2306
|
e_1 = { error: e_1_1 };
|
|
2307
2307
|
} finally {
|
|
2308
2308
|
try {
|
|
2309
|
-
if (_c && !_c.done && (
|
|
2309
|
+
if (_c && !_c.done && (_a44 = _b.return)) _a44.call(_b);
|
|
2310
2310
|
} finally {
|
|
2311
2311
|
if (e_1) throw e_1.error;
|
|
2312
2312
|
}
|
|
@@ -2347,8 +2347,8 @@ var init_Subject = __esm({
|
|
|
2347
2347
|
};
|
|
2348
2348
|
Object.defineProperty(Subject2.prototype, "observed", {
|
|
2349
2349
|
get: function() {
|
|
2350
|
-
var
|
|
2351
|
-
return ((
|
|
2350
|
+
var _a44;
|
|
2351
|
+
return ((_a44 = this.observers) === null || _a44 === void 0 ? void 0 : _a44.length) > 0;
|
|
2352
2352
|
},
|
|
2353
2353
|
enumerable: false,
|
|
2354
2354
|
configurable: true
|
|
@@ -2364,7 +2364,7 @@ var init_Subject = __esm({
|
|
|
2364
2364
|
};
|
|
2365
2365
|
Subject2.prototype._innerSubscribe = function(subscriber) {
|
|
2366
2366
|
var _this = this;
|
|
2367
|
-
var
|
|
2367
|
+
var _a44 = this, hasError = _a44.hasError, isStopped = _a44.isStopped, observers = _a44.observers;
|
|
2368
2368
|
if (hasError || isStopped) {
|
|
2369
2369
|
return EMPTY_SUBSCRIPTION;
|
|
2370
2370
|
}
|
|
@@ -2376,7 +2376,7 @@ var init_Subject = __esm({
|
|
|
2376
2376
|
});
|
|
2377
2377
|
};
|
|
2378
2378
|
Subject2.prototype._checkFinalizedStatuses = function(subscriber) {
|
|
2379
|
-
var
|
|
2379
|
+
var _a44 = this, hasError = _a44.hasError, thrownError = _a44.thrownError, isStopped = _a44.isStopped;
|
|
2380
2380
|
if (hasError) {
|
|
2381
2381
|
subscriber.error(thrownError);
|
|
2382
2382
|
} else if (isStopped) {
|
|
@@ -2402,20 +2402,20 @@ var init_Subject = __esm({
|
|
|
2402
2402
|
return _this;
|
|
2403
2403
|
}
|
|
2404
2404
|
AnonymousSubject2.prototype.next = function(value2) {
|
|
2405
|
-
var
|
|
2406
|
-
(_b = (
|
|
2405
|
+
var _a44, _b;
|
|
2406
|
+
(_b = (_a44 = this.destination) === null || _a44 === void 0 ? void 0 : _a44.next) === null || _b === void 0 ? void 0 : _b.call(_a44, value2);
|
|
2407
2407
|
};
|
|
2408
2408
|
AnonymousSubject2.prototype.error = function(err) {
|
|
2409
|
-
var
|
|
2410
|
-
(_b = (
|
|
2409
|
+
var _a44, _b;
|
|
2410
|
+
(_b = (_a44 = this.destination) === null || _a44 === void 0 ? void 0 : _a44.error) === null || _b === void 0 ? void 0 : _b.call(_a44, err);
|
|
2411
2411
|
};
|
|
2412
2412
|
AnonymousSubject2.prototype.complete = function() {
|
|
2413
|
-
var
|
|
2414
|
-
(_b = (
|
|
2413
|
+
var _a44, _b;
|
|
2414
|
+
(_b = (_a44 = this.destination) === null || _a44 === void 0 ? void 0 : _a44.complete) === null || _b === void 0 ? void 0 : _b.call(_a44);
|
|
2415
2415
|
};
|
|
2416
2416
|
AnonymousSubject2.prototype._subscribe = function(subscriber) {
|
|
2417
|
-
var
|
|
2418
|
-
return (_b = (
|
|
2417
|
+
var _a44, _b;
|
|
2418
|
+
return (_b = (_a44 = this.source) === null || _a44 === void 0 ? void 0 : _a44.subscribe(subscriber)) !== null && _b !== void 0 ? _b : EMPTY_SUBSCRIPTION;
|
|
2419
2419
|
};
|
|
2420
2420
|
return AnonymousSubject2;
|
|
2421
2421
|
})(Subject);
|
|
@@ -2448,7 +2448,7 @@ var init_BehaviorSubject = __esm({
|
|
|
2448
2448
|
return subscription;
|
|
2449
2449
|
};
|
|
2450
2450
|
BehaviorSubject2.prototype.getValue = function() {
|
|
2451
|
-
var
|
|
2451
|
+
var _a44 = this, hasError = _a44.hasError, thrownError = _a44.thrownError, _value2 = _a44._value;
|
|
2452
2452
|
if (hasError) {
|
|
2453
2453
|
throw thrownError;
|
|
2454
2454
|
}
|
|
@@ -2507,7 +2507,7 @@ var init_ReplaySubject = __esm({
|
|
|
2507
2507
|
return _this;
|
|
2508
2508
|
}
|
|
2509
2509
|
ReplaySubject2.prototype.next = function(value2) {
|
|
2510
|
-
var
|
|
2510
|
+
var _a44 = this, isStopped = _a44.isStopped, _buffer = _a44._buffer, _infiniteTimeWindow = _a44._infiniteTimeWindow, _timestampProvider = _a44._timestampProvider, _windowTime = _a44._windowTime;
|
|
2511
2511
|
if (!isStopped) {
|
|
2512
2512
|
_buffer.push(value2);
|
|
2513
2513
|
!_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime);
|
|
@@ -2519,7 +2519,7 @@ var init_ReplaySubject = __esm({
|
|
|
2519
2519
|
this._throwIfClosed();
|
|
2520
2520
|
this._trimBuffer();
|
|
2521
2521
|
var subscription = this._innerSubscribe(subscriber);
|
|
2522
|
-
var
|
|
2522
|
+
var _a44 = this, _infiniteTimeWindow = _a44._infiniteTimeWindow, _buffer = _a44._buffer;
|
|
2523
2523
|
var copy = _buffer.slice();
|
|
2524
2524
|
for (var i11 = 0; i11 < copy.length && !subscriber.closed; i11 += _infiniteTimeWindow ? 1 : 2) {
|
|
2525
2525
|
subscriber.next(copy[i11]);
|
|
@@ -2528,7 +2528,7 @@ var init_ReplaySubject = __esm({
|
|
|
2528
2528
|
return subscription;
|
|
2529
2529
|
};
|
|
2530
2530
|
ReplaySubject2.prototype._trimBuffer = function() {
|
|
2531
|
-
var
|
|
2531
|
+
var _a44 = this, _bufferSize = _a44._bufferSize, _timestampProvider = _a44._timestampProvider, _buffer = _a44._buffer, _infiniteTimeWindow = _a44._infiniteTimeWindow;
|
|
2532
2532
|
var adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize;
|
|
2533
2533
|
_bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize);
|
|
2534
2534
|
if (!_infiniteTimeWindow) {
|
|
@@ -2561,7 +2561,7 @@ var init_AsyncSubject = __esm({
|
|
|
2561
2561
|
return _this;
|
|
2562
2562
|
}
|
|
2563
2563
|
AsyncSubject2.prototype._checkFinalizedStatuses = function(subscriber) {
|
|
2564
|
-
var
|
|
2564
|
+
var _a44 = this, hasError = _a44.hasError, _hasValue = _a44._hasValue, _value2 = _a44._value, thrownError = _a44.thrownError, isStopped = _a44.isStopped, _isComplete = _a44._isComplete;
|
|
2565
2565
|
if (hasError) {
|
|
2566
2566
|
subscriber.error(thrownError);
|
|
2567
2567
|
} else if (isStopped || _isComplete) {
|
|
@@ -2576,7 +2576,7 @@ var init_AsyncSubject = __esm({
|
|
|
2576
2576
|
}
|
|
2577
2577
|
};
|
|
2578
2578
|
AsyncSubject2.prototype.complete = function() {
|
|
2579
|
-
var
|
|
2579
|
+
var _a44 = this, _hasValue = _a44._hasValue, _value2 = _a44._value, _isComplete = _a44._isComplete;
|
|
2580
2580
|
if (!_isComplete) {
|
|
2581
2581
|
this._isComplete = true;
|
|
2582
2582
|
_hasValue && _super.prototype.next.call(this, _value2);
|
|
@@ -2654,7 +2654,7 @@ var init_AsyncAction = __esm({
|
|
|
2654
2654
|
return _this;
|
|
2655
2655
|
}
|
|
2656
2656
|
AsyncAction2.prototype.schedule = function(state, delay2) {
|
|
2657
|
-
var
|
|
2657
|
+
var _a44;
|
|
2658
2658
|
if (delay2 === void 0) {
|
|
2659
2659
|
delay2 = 0;
|
|
2660
2660
|
}
|
|
@@ -2669,7 +2669,7 @@ var init_AsyncAction = __esm({
|
|
|
2669
2669
|
}
|
|
2670
2670
|
this.pending = true;
|
|
2671
2671
|
this.delay = delay2;
|
|
2672
|
-
this.id = (
|
|
2672
|
+
this.id = (_a44 = this.id) !== null && _a44 !== void 0 ? _a44 : this.requestAsyncId(scheduler, this.id, delay2);
|
|
2673
2673
|
return this;
|
|
2674
2674
|
};
|
|
2675
2675
|
AsyncAction2.prototype.requestAsyncId = function(scheduler, _id, delay2) {
|
|
@@ -2718,7 +2718,7 @@ var init_AsyncAction = __esm({
|
|
|
2718
2718
|
};
|
|
2719
2719
|
AsyncAction2.prototype.unsubscribe = function() {
|
|
2720
2720
|
if (!this.closed) {
|
|
2721
|
-
var
|
|
2721
|
+
var _a44 = this, id = _a44.id, scheduler = _a44.scheduler;
|
|
2722
2722
|
var actions = scheduler.actions;
|
|
2723
2723
|
this.work = this.state = this.scheduler = null;
|
|
2724
2724
|
this.pending = false;
|
|
@@ -2823,7 +2823,7 @@ var init_AsapAction = __esm({
|
|
|
2823
2823
|
return scheduler._scheduled || (scheduler._scheduled = immediateProvider.setImmediate(scheduler.flush.bind(scheduler, void 0)));
|
|
2824
2824
|
};
|
|
2825
2825
|
AsapAction2.prototype.recycleAsyncId = function(scheduler, id, delay2) {
|
|
2826
|
-
var
|
|
2826
|
+
var _a44;
|
|
2827
2827
|
if (delay2 === void 0) {
|
|
2828
2828
|
delay2 = 0;
|
|
2829
2829
|
}
|
|
@@ -2831,7 +2831,7 @@ var init_AsapAction = __esm({
|
|
|
2831
2831
|
return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay2);
|
|
2832
2832
|
}
|
|
2833
2833
|
var actions = scheduler.actions;
|
|
2834
|
-
if (id != null && ((
|
|
2834
|
+
if (id != null && ((_a44 = actions[actions.length - 1]) === null || _a44 === void 0 ? void 0 : _a44.id) !== id) {
|
|
2835
2835
|
immediateProvider.clearImmediate(id);
|
|
2836
2836
|
if (scheduler._scheduled === id) {
|
|
2837
2837
|
scheduler._scheduled = void 0;
|
|
@@ -3069,7 +3069,7 @@ var init_AnimationFrameAction = __esm({
|
|
|
3069
3069
|
}));
|
|
3070
3070
|
};
|
|
3071
3071
|
AnimationFrameAction2.prototype.recycleAsyncId = function(scheduler, id, delay2) {
|
|
3072
|
-
var
|
|
3072
|
+
var _a44;
|
|
3073
3073
|
if (delay2 === void 0) {
|
|
3074
3074
|
delay2 = 0;
|
|
3075
3075
|
}
|
|
@@ -3077,7 +3077,7 @@ var init_AnimationFrameAction = __esm({
|
|
|
3077
3077
|
return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay2);
|
|
3078
3078
|
}
|
|
3079
3079
|
var actions = scheduler.actions;
|
|
3080
|
-
if (id != null && id === scheduler._scheduled && ((
|
|
3080
|
+
if (id != null && id === scheduler._scheduled && ((_a44 = actions[actions.length - 1]) === null || _a44 === void 0 ? void 0 : _a44.id) !== id) {
|
|
3081
3081
|
animationFrameProvider.cancelAnimationFrame(id);
|
|
3082
3082
|
scheduler._scheduled = void 0;
|
|
3083
3083
|
}
|
|
@@ -3166,7 +3166,7 @@ var init_VirtualTimeScheduler = __esm({
|
|
|
3166
3166
|
return _this;
|
|
3167
3167
|
}
|
|
3168
3168
|
VirtualTimeScheduler2.prototype.flush = function() {
|
|
3169
|
-
var
|
|
3169
|
+
var _a44 = this, actions = _a44.actions, maxFrames = _a44.maxFrames;
|
|
3170
3170
|
var error;
|
|
3171
3171
|
var action;
|
|
3172
3172
|
while ((action = actions[0]) && action.delay <= maxFrames) {
|
|
@@ -3386,7 +3386,7 @@ var init_isIterable = __esm({
|
|
|
3386
3386
|
// node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js
|
|
3387
3387
|
function readableStreamLikeToAsyncGenerator(readableStream) {
|
|
3388
3388
|
return __asyncGenerator(this, arguments, function readableStreamLikeToAsyncGenerator_1() {
|
|
3389
|
-
var reader,
|
|
3389
|
+
var reader, _a44, value2, done;
|
|
3390
3390
|
return __generator(this, function(_b) {
|
|
3391
3391
|
switch (_b.label) {
|
|
3392
3392
|
case 0:
|
|
@@ -3399,7 +3399,7 @@ function readableStreamLikeToAsyncGenerator(readableStream) {
|
|
|
3399
3399
|
if (false) return [3, 8];
|
|
3400
3400
|
return [4, __await(reader.read())];
|
|
3401
3401
|
case 3:
|
|
3402
|
-
|
|
3402
|
+
_a44 = _b.sent(), value2 = _a44.value, done = _a44.done;
|
|
3403
3403
|
if (!done) return [3, 5];
|
|
3404
3404
|
return [4, __await(void 0)];
|
|
3405
3405
|
case 4:
|
|
@@ -3490,7 +3490,7 @@ function fromPromise(promise) {
|
|
|
3490
3490
|
}
|
|
3491
3491
|
function fromIterable(iterable) {
|
|
3492
3492
|
return new Observable(function(subscriber) {
|
|
3493
|
-
var e_1,
|
|
3493
|
+
var e_1, _a44;
|
|
3494
3494
|
try {
|
|
3495
3495
|
for (var iterable_1 = __values(iterable), iterable_1_1 = iterable_1.next(); !iterable_1_1.done; iterable_1_1 = iterable_1.next()) {
|
|
3496
3496
|
var value2 = iterable_1_1.value;
|
|
@@ -3503,7 +3503,7 @@ function fromIterable(iterable) {
|
|
|
3503
3503
|
e_1 = { error: e_1_1 };
|
|
3504
3504
|
} finally {
|
|
3505
3505
|
try {
|
|
3506
|
-
if (iterable_1_1 && !iterable_1_1.done && (
|
|
3506
|
+
if (iterable_1_1 && !iterable_1_1.done && (_a44 = iterable_1.return)) _a44.call(iterable_1);
|
|
3507
3507
|
} finally {
|
|
3508
3508
|
if (e_1) throw e_1.error;
|
|
3509
3509
|
}
|
|
@@ -3523,7 +3523,7 @@ function fromReadableStreamLike(readableStream) {
|
|
|
3523
3523
|
}
|
|
3524
3524
|
function process2(asyncIterable, subscriber) {
|
|
3525
3525
|
var asyncIterable_1, asyncIterable_1_1;
|
|
3526
|
-
var e_2,
|
|
3526
|
+
var e_2, _a44;
|
|
3527
3527
|
return __awaiter(this, void 0, void 0, function() {
|
|
3528
3528
|
var value2, e_2_1;
|
|
3529
3529
|
return __generator(this, function(_b) {
|
|
@@ -3552,8 +3552,8 @@ function process2(asyncIterable, subscriber) {
|
|
|
3552
3552
|
return [3, 11];
|
|
3553
3553
|
case 6:
|
|
3554
3554
|
_b.trys.push([6, , 9, 10]);
|
|
3555
|
-
if (!(asyncIterable_1_1 && !asyncIterable_1_1.done && (
|
|
3556
|
-
return [4,
|
|
3555
|
+
if (!(asyncIterable_1_1 && !asyncIterable_1_1.done && (_a44 = asyncIterable_1.return))) return [3, 8];
|
|
3556
|
+
return [4, _a44.call(asyncIterable_1)];
|
|
3557
3557
|
case 7:
|
|
3558
3558
|
_b.sent();
|
|
3559
3559
|
_b.label = 8;
|
|
@@ -3713,11 +3713,11 @@ function scheduleIterable(input, scheduler) {
|
|
|
3713
3713
|
executeSchedule(subscriber, scheduler, function() {
|
|
3714
3714
|
iterator2 = input[iterator]();
|
|
3715
3715
|
executeSchedule(subscriber, scheduler, function() {
|
|
3716
|
-
var
|
|
3716
|
+
var _a44;
|
|
3717
3717
|
var value2;
|
|
3718
3718
|
var done;
|
|
3719
3719
|
try {
|
|
3720
|
-
|
|
3720
|
+
_a44 = iterator2.next(), value2 = _a44.value, done = _a44.done;
|
|
3721
3721
|
} catch (err) {
|
|
3722
3722
|
subscriber.error(err);
|
|
3723
3723
|
return;
|
|
@@ -3871,12 +3871,12 @@ var init_throwError = __esm({
|
|
|
3871
3871
|
|
|
3872
3872
|
// node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Notification.js
|
|
3873
3873
|
function observeNotification(notification, observer) {
|
|
3874
|
-
var
|
|
3874
|
+
var _a44, _b, _c;
|
|
3875
3875
|
var _d = notification, kind = _d.kind, value2 = _d.value, error = _d.error;
|
|
3876
3876
|
if (typeof kind !== "string") {
|
|
3877
3877
|
throw new TypeError('Invalid notification, missing "kind"');
|
|
3878
3878
|
}
|
|
3879
|
-
kind === "N" ? (
|
|
3879
|
+
kind === "N" ? (_a44 = observer.next) === null || _a44 === void 0 ? void 0 : _a44.call(observer, value2) : kind === "E" ? (_b = observer.error) === null || _b === void 0 ? void 0 : _b.call(observer, error) : (_c = observer.complete) === null || _c === void 0 ? void 0 : _c.call(observer);
|
|
3880
3880
|
}
|
|
3881
3881
|
var NotificationKind, Notification;
|
|
3882
3882
|
var init_Notification = __esm({
|
|
@@ -3901,15 +3901,15 @@ var init_Notification = __esm({
|
|
|
3901
3901
|
return observeNotification(this, observer);
|
|
3902
3902
|
};
|
|
3903
3903
|
Notification2.prototype.do = function(nextHandler, errorHandler, completeHandler) {
|
|
3904
|
-
var
|
|
3904
|
+
var _a44 = this, kind = _a44.kind, value2 = _a44.value, error = _a44.error;
|
|
3905
3905
|
return kind === "N" ? nextHandler === null || nextHandler === void 0 ? void 0 : nextHandler(value2) : kind === "E" ? errorHandler === null || errorHandler === void 0 ? void 0 : errorHandler(error) : completeHandler === null || completeHandler === void 0 ? void 0 : completeHandler();
|
|
3906
3906
|
};
|
|
3907
3907
|
Notification2.prototype.accept = function(nextOrObserver, error, complete) {
|
|
3908
|
-
var
|
|
3909
|
-
return isFunction((
|
|
3908
|
+
var _a44;
|
|
3909
|
+
return isFunction((_a44 = nextOrObserver) === null || _a44 === void 0 ? void 0 : _a44.next) ? this.observe(nextOrObserver) : this.do(nextOrObserver, error, complete);
|
|
3910
3910
|
};
|
|
3911
3911
|
Notification2.prototype.toObservable = function() {
|
|
3912
|
-
var
|
|
3912
|
+
var _a44 = this, kind = _a44.kind, value2 = _a44.value, error = _a44.error;
|
|
3913
3913
|
var result = kind === "N" ? of(value2) : kind === "E" ? throwError(function() {
|
|
3914
3914
|
return error;
|
|
3915
3915
|
}) : kind === "C" ? EMPTY : 0;
|
|
@@ -4022,7 +4022,7 @@ var init_isDate = __esm({
|
|
|
4022
4022
|
|
|
4023
4023
|
// node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/timeout.js
|
|
4024
4024
|
function timeout(config3, schedulerArg) {
|
|
4025
|
-
var
|
|
4025
|
+
var _a44 = isValidDate(config3) ? { first: config3 } : typeof config3 === "number" ? { each: config3 } : config3, first2 = _a44.first, each = _a44.each, _b = _a44.with, _with = _b === void 0 ? timeoutErrorFactory : _b, _c = _a44.scheduler, scheduler = _c === void 0 ? schedulerArg !== null && schedulerArg !== void 0 ? schedulerArg : asyncScheduler : _c, _d = _a44.meta, meta = _d === void 0 ? null : _d;
|
|
4026
4026
|
if (first2 == null && each == null) {
|
|
4027
4027
|
throw new TypeError("No timeout provided.");
|
|
4028
4028
|
}
|
|
@@ -4300,11 +4300,11 @@ function fromEvent(target, eventName, options, resultSelector) {
|
|
|
4300
4300
|
if (resultSelector) {
|
|
4301
4301
|
return fromEvent(target, eventName, options).pipe(mapOneOrManyArgs(resultSelector));
|
|
4302
4302
|
}
|
|
4303
|
-
var
|
|
4303
|
+
var _a44 = __read(isEventTarget(target) ? eventTargetMethods.map(function(methodName) {
|
|
4304
4304
|
return function(handler2) {
|
|
4305
4305
|
return target[methodName](eventName, handler2, options);
|
|
4306
4306
|
};
|
|
4307
|
-
}) : isNodeStyleEventEmitter(target) ? nodeEventEmitterMethods.map(toCommonHandlerRegistry(target, eventName)) : isJQueryStyleEventEmitter(target) ? jqueryMethods.map(toCommonHandlerRegistry(target, eventName)) : [], 2), add3 =
|
|
4307
|
+
}) : isNodeStyleEventEmitter(target) ? nodeEventEmitterMethods.map(toCommonHandlerRegistry(target, eventName)) : isJQueryStyleEventEmitter(target) ? jqueryMethods.map(toCommonHandlerRegistry(target, eventName)) : [], 2), add3 = _a44[0], remove2 = _a44[1];
|
|
4308
4308
|
if (!add3) {
|
|
4309
4309
|
if (isArrayLike(target)) {
|
|
4310
4310
|
return mergeMap(function(subTarget) {
|
|
@@ -4562,7 +4562,7 @@ function bufferCount(bufferSize, startBufferEvery) {
|
|
|
4562
4562
|
var buffers = [];
|
|
4563
4563
|
var count2 = 0;
|
|
4564
4564
|
source.subscribe(createOperatorSubscriber(subscriber, function(value2) {
|
|
4565
|
-
var e_1,
|
|
4565
|
+
var e_1, _a44, e_2, _b;
|
|
4566
4566
|
var toEmit = null;
|
|
4567
4567
|
if (count2++ % startBufferEvery === 0) {
|
|
4568
4568
|
buffers.push([]);
|
|
@@ -4580,7 +4580,7 @@ function bufferCount(bufferSize, startBufferEvery) {
|
|
|
4580
4580
|
e_1 = { error: e_1_1 };
|
|
4581
4581
|
} finally {
|
|
4582
4582
|
try {
|
|
4583
|
-
if (buffers_1_1 && !buffers_1_1.done && (
|
|
4583
|
+
if (buffers_1_1 && !buffers_1_1.done && (_a44 = buffers_1.return)) _a44.call(buffers_1);
|
|
4584
4584
|
} finally {
|
|
4585
4585
|
if (e_1) throw e_1.error;
|
|
4586
4586
|
}
|
|
@@ -4603,7 +4603,7 @@ function bufferCount(bufferSize, startBufferEvery) {
|
|
|
4603
4603
|
}
|
|
4604
4604
|
}
|
|
4605
4605
|
}, function() {
|
|
4606
|
-
var e_3,
|
|
4606
|
+
var e_3, _a44;
|
|
4607
4607
|
try {
|
|
4608
4608
|
for (var buffers_2 = __values(buffers), buffers_2_1 = buffers_2.next(); !buffers_2_1.done; buffers_2_1 = buffers_2.next()) {
|
|
4609
4609
|
var buffer2 = buffers_2_1.value;
|
|
@@ -4613,7 +4613,7 @@ function bufferCount(bufferSize, startBufferEvery) {
|
|
|
4613
4613
|
e_3 = { error: e_3_1 };
|
|
4614
4614
|
} finally {
|
|
4615
4615
|
try {
|
|
4616
|
-
if (buffers_2_1 && !buffers_2_1.done && (
|
|
4616
|
+
if (buffers_2_1 && !buffers_2_1.done && (_a44 = buffers_2.return)) _a44.call(buffers_2);
|
|
4617
4617
|
} finally {
|
|
4618
4618
|
if (e_3) throw e_3.error;
|
|
4619
4619
|
}
|
|
@@ -4635,12 +4635,12 @@ var init_bufferCount = __esm({
|
|
|
4635
4635
|
|
|
4636
4636
|
// node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/bufferTime.js
|
|
4637
4637
|
function bufferTime(bufferTimeSpan) {
|
|
4638
|
-
var
|
|
4638
|
+
var _a44, _b;
|
|
4639
4639
|
var otherArgs = [];
|
|
4640
4640
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
4641
4641
|
otherArgs[_i - 1] = arguments[_i];
|
|
4642
4642
|
}
|
|
4643
|
-
var scheduler = (
|
|
4643
|
+
var scheduler = (_a44 = popScheduler(otherArgs)) !== null && _a44 !== void 0 ? _a44 : asyncScheduler;
|
|
4644
4644
|
var bufferCreationInterval = (_b = otherArgs[0]) !== null && _b !== void 0 ? _b : null;
|
|
4645
4645
|
var maxBufferSize = otherArgs[1] || Infinity;
|
|
4646
4646
|
return operate(function(source, subscriber) {
|
|
@@ -4675,7 +4675,7 @@ function bufferTime(bufferTimeSpan) {
|
|
|
4675
4675
|
}
|
|
4676
4676
|
startBuffer();
|
|
4677
4677
|
var bufferTimeSubscriber = createOperatorSubscriber(subscriber, function(value2) {
|
|
4678
|
-
var e_1,
|
|
4678
|
+
var e_1, _a45;
|
|
4679
4679
|
var recordsCopy = bufferRecords.slice();
|
|
4680
4680
|
try {
|
|
4681
4681
|
for (var recordsCopy_1 = __values(recordsCopy), recordsCopy_1_1 = recordsCopy_1.next(); !recordsCopy_1_1.done; recordsCopy_1_1 = recordsCopy_1.next()) {
|
|
@@ -4688,7 +4688,7 @@ function bufferTime(bufferTimeSpan) {
|
|
|
4688
4688
|
e_1 = { error: e_1_1 };
|
|
4689
4689
|
} finally {
|
|
4690
4690
|
try {
|
|
4691
|
-
if (recordsCopy_1_1 && !recordsCopy_1_1.done && (
|
|
4691
|
+
if (recordsCopy_1_1 && !recordsCopy_1_1.done && (_a45 = recordsCopy_1.return)) _a45.call(recordsCopy_1);
|
|
4692
4692
|
} finally {
|
|
4693
4693
|
if (e_1) throw e_1.error;
|
|
4694
4694
|
}
|
|
@@ -5323,7 +5323,7 @@ var init_tap = __esm({
|
|
|
5323
5323
|
// node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/throttle.js
|
|
5324
5324
|
function throttle(durationSelector, config3) {
|
|
5325
5325
|
return operate(function(source, subscriber) {
|
|
5326
|
-
var
|
|
5326
|
+
var _a44 = config3 !== null && config3 !== void 0 ? config3 : {}, _b = _a44.leading, leading = _b === void 0 ? true : _b, _c = _a44.trailing, trailing = _c === void 0 ? false : _c;
|
|
5327
5327
|
var hasValue = false;
|
|
5328
5328
|
var sendValue = null;
|
|
5329
5329
|
var throttled = null;
|
|
@@ -50059,7 +50059,7 @@ var require_sweet_scroll = __commonJS({
|
|
|
50059
50059
|
hash: null
|
|
50060
50060
|
};
|
|
50061
50061
|
this.loop = function(time) {
|
|
50062
|
-
var
|
|
50062
|
+
var _a44 = _this, $el = _a44.$el, ctx = _a44.ctx;
|
|
50063
50063
|
if (!ctx.start) {
|
|
50064
50064
|
ctx.start = time;
|
|
50065
50065
|
}
|
|
@@ -50154,7 +50154,7 @@ var require_sweet_scroll = __commonJS({
|
|
|
50154
50154
|
if (!canUseDOM) {
|
|
50155
50155
|
return;
|
|
50156
50156
|
}
|
|
50157
|
-
var
|
|
50157
|
+
var _a44 = this, $el = _a44.$el, ctx = _a44.ctx, currentOptions = _a44.opts;
|
|
50158
50158
|
var $trigger = ctx.$trigger;
|
|
50159
50159
|
var opts = __assign2({}, currentOptions, options || {});
|
|
50160
50160
|
var optOffset = opts.offset, vertical = opts.vertical, horizontal = opts.horizontal;
|
|
@@ -50221,7 +50221,7 @@ var require_sweet_scroll = __commonJS({
|
|
|
50221
50221
|
if (gotoEnd === void 0) {
|
|
50222
50222
|
gotoEnd = false;
|
|
50223
50223
|
}
|
|
50224
|
-
var
|
|
50224
|
+
var _a44 = this, $el = _a44.$el, ctx = _a44.ctx;
|
|
50225
50225
|
var pos = ctx.pos;
|
|
50226
50226
|
if (!$el || !ctx.progress) {
|
|
50227
50227
|
return;
|
|
@@ -50277,7 +50277,7 @@ var require_sweet_scroll = __commonJS({
|
|
|
50277
50277
|
ctx.id = SweetScroll4.raf(this.loop);
|
|
50278
50278
|
};
|
|
50279
50279
|
SweetScroll4.prototype.complete = function() {
|
|
50280
|
-
var
|
|
50280
|
+
var _a44 = this, $el = _a44.$el, ctx = _a44.ctx;
|
|
50281
50281
|
var hash = ctx.hash, cancel = ctx.cancel, opts = ctx.opts, pos = ctx.pos, $trigger = ctx.$trigger;
|
|
50282
50282
|
if (!$el || !opts) {
|
|
50283
50283
|
return;
|
|
@@ -50303,18 +50303,18 @@ var require_sweet_scroll = __commonJS({
|
|
|
50303
50303
|
for (var _i = 2; _i < arguments.length; _i++) {
|
|
50304
50304
|
args[_i - 2] = arguments[_i];
|
|
50305
50305
|
}
|
|
50306
|
-
var
|
|
50306
|
+
var _a44;
|
|
50307
50307
|
var callback = options[type5];
|
|
50308
50308
|
var callbackResult;
|
|
50309
50309
|
var methodResult;
|
|
50310
50310
|
if (isFunction2(callback)) {
|
|
50311
50311
|
callbackResult = callback.apply(this, args.concat([this]));
|
|
50312
50312
|
}
|
|
50313
|
-
methodResult = (
|
|
50313
|
+
methodResult = (_a44 = this)["on" + (type5[0].toUpperCase() + type5.slice(1))].apply(_a44, args);
|
|
50314
50314
|
return callbackResult !== void 0 ? callbackResult : methodResult;
|
|
50315
50315
|
};
|
|
50316
50316
|
SweetScroll4.prototype.bind = function(click, stop) {
|
|
50317
|
-
var
|
|
50317
|
+
var _a44 = this, $el = _a44.$el, opts = _a44.ctx.opts;
|
|
50318
50318
|
if ($el) {
|
|
50319
50319
|
if (click) {
|
|
50320
50320
|
addEvent($el, CONTAINER_CLICK_EVENT, this.handleClick, false);
|
|
@@ -50325,7 +50325,7 @@ var require_sweet_scroll = __commonJS({
|
|
|
50325
50325
|
}
|
|
50326
50326
|
};
|
|
50327
50327
|
SweetScroll4.prototype.unbind = function(click, stop) {
|
|
50328
|
-
var
|
|
50328
|
+
var _a44 = this, $el = _a44.$el, opts = _a44.ctx.opts;
|
|
50329
50329
|
if ($el) {
|
|
50330
50330
|
if (click) {
|
|
50331
50331
|
removeEvent($el, CONTAINER_CLICK_EVENT, this.handleClick, false);
|
|
@@ -96699,14 +96699,18 @@ __export(elements_exports, {
|
|
|
96699
96699
|
SzCertificatesCard: () => SzCertificatesCard,
|
|
96700
96700
|
SzDashboardView: () => SzDashboardView,
|
|
96701
96701
|
SzDemoViewDashboard: () => SzDemoViewDashboard,
|
|
96702
|
+
SzDemoViewMta: () => SzDemoViewMta,
|
|
96702
96703
|
SzDemoViewNetwork: () => SzDemoViewNetwork,
|
|
96703
96704
|
SzDemoViewRegistries: () => SzDemoViewRegistries,
|
|
96705
|
+
SzDemoViewRoutes: () => SzDemoViewRoutes,
|
|
96704
96706
|
SzDemoViewServices: () => SzDemoViewServices,
|
|
96705
96707
|
SzDemoViewSettings: () => SzDemoViewSettings,
|
|
96706
96708
|
SzDemoViewTokens: () => SzDemoViewTokens,
|
|
96707
96709
|
SzDnsSslCard: () => SzDnsSslCard,
|
|
96708
96710
|
SzDomainDetailView: () => SzDomainDetailView,
|
|
96709
96711
|
SzLoginView: () => SzLoginView,
|
|
96712
|
+
SzMtaDetailView: () => SzMtaDetailView,
|
|
96713
|
+
SzMtaListView: () => SzMtaListView,
|
|
96710
96714
|
SzNetworkDnsView: () => SzNetworkDnsView,
|
|
96711
96715
|
SzNetworkDomainsView: () => SzNetworkDomainsView,
|
|
96712
96716
|
SzNetworkProxyView: () => SzNetworkProxyView,
|
|
@@ -96717,6 +96721,8 @@ __export(elements_exports, {
|
|
|
96717
96721
|
SzRegistryExternalView: () => SzRegistryExternalView,
|
|
96718
96722
|
SzResourceUsageCard: () => SzResourceUsageCard,
|
|
96719
96723
|
SzReverseProxyCard: () => SzReverseProxyCard,
|
|
96724
|
+
SzRouteCard: () => SzRouteCard,
|
|
96725
|
+
SzRouteListView: () => SzRouteListView,
|
|
96720
96726
|
SzServiceCreateView: () => SzServiceCreateView,
|
|
96721
96727
|
SzServiceDetailView: () => SzServiceDetailView,
|
|
96722
96728
|
SzServicesBackupsView: () => SzServicesBackupsView,
|
|
@@ -104470,11 +104476,2013 @@ __publicField(SzDomainDetailView, "styles", [
|
|
|
104470
104476
|
]);
|
|
104471
104477
|
__runInitializers(_init27, 1, SzDomainDetailView);
|
|
104472
104478
|
|
|
104479
|
+
// ts_web/elements/sz-mta-list-view.ts
|
|
104480
|
+
init_dist_ts29();
|
|
104481
|
+
var _directionFilter_dec, _statusFilter_dec, _searchQuery_dec, _emails_dec, _a28, _SzMtaListView_decorators, _init28, _emails, _searchQuery, _statusFilter, _directionFilter;
|
|
104482
|
+
_SzMtaListView_decorators = [t4("sz-mta-list-view")];
|
|
104483
|
+
var SzMtaListView = class extends (_a28 = DeesElement, _emails_dec = [n5({ type: Array })], _searchQuery_dec = [r5()], _statusFilter_dec = [r5()], _directionFilter_dec = [r5()], _a28) {
|
|
104484
|
+
constructor() {
|
|
104485
|
+
super(...arguments);
|
|
104486
|
+
__privateAdd(this, _emails, __runInitializers(_init28, 8, this, [])), __runInitializers(_init28, 11, this);
|
|
104487
|
+
__privateAdd(this, _searchQuery, __runInitializers(_init28, 12, this, "")), __runInitializers(_init28, 15, this);
|
|
104488
|
+
__privateAdd(this, _statusFilter, __runInitializers(_init28, 16, this, "all")), __runInitializers(_init28, 19, this);
|
|
104489
|
+
__privateAdd(this, _directionFilter, __runInitializers(_init28, 20, this, "all")), __runInitializers(_init28, 23, this);
|
|
104490
|
+
}
|
|
104491
|
+
get filteredEmails() {
|
|
104492
|
+
return this.emails.filter((email) => {
|
|
104493
|
+
if (this.statusFilter !== "all" && email.status !== this.statusFilter) return false;
|
|
104494
|
+
if (this.directionFilter !== "all" && email.direction !== this.directionFilter) return false;
|
|
104495
|
+
if (this.searchQuery) {
|
|
104496
|
+
const q = this.searchQuery.toLowerCase();
|
|
104497
|
+
return email.from.toLowerCase().includes(q) || email.to.toLowerCase().includes(q) || email.subject.toLowerCase().includes(q) || email.messageId.toLowerCase().includes(q);
|
|
104498
|
+
}
|
|
104499
|
+
return true;
|
|
104500
|
+
});
|
|
104501
|
+
}
|
|
104502
|
+
render() {
|
|
104503
|
+
const filtered = this.filteredEmails;
|
|
104504
|
+
return b2`
|
|
104505
|
+
<div class="filter-bar">
|
|
104506
|
+
<input
|
|
104507
|
+
class="search-input"
|
|
104508
|
+
type="text"
|
|
104509
|
+
placeholder="Search by from, to, subject, or message ID..."
|
|
104510
|
+
.value=${this.searchQuery}
|
|
104511
|
+
@input=${(e11) => {
|
|
104512
|
+
this.searchQuery = e11.target.value;
|
|
104513
|
+
}}
|
|
104514
|
+
/>
|
|
104515
|
+
<div class="chip-group">
|
|
104516
|
+
${["all", "inbound", "outbound"].map((dir) => b2`
|
|
104517
|
+
<button
|
|
104518
|
+
class="chip ${this.directionFilter === dir ? "active" : ""}"
|
|
104519
|
+
@click=${() => {
|
|
104520
|
+
this.directionFilter = dir;
|
|
104521
|
+
}}
|
|
104522
|
+
>${dir === "all" ? "All" : dir === "inbound" ? "Inbound" : "Outbound"}</button>
|
|
104523
|
+
`)}
|
|
104524
|
+
</div>
|
|
104525
|
+
<div class="chip-group">
|
|
104526
|
+
${["all", "delivered", "bounced", "rejected", "deferred", "pending"].map((s9) => b2`
|
|
104527
|
+
<button
|
|
104528
|
+
class="chip ${this.statusFilter === s9 ? "active" : ""}"
|
|
104529
|
+
@click=${() => {
|
|
104530
|
+
this.statusFilter = s9;
|
|
104531
|
+
}}
|
|
104532
|
+
>${s9 === "all" ? "All" : s9.charAt(0).toUpperCase() + s9.slice(1)}</button>
|
|
104533
|
+
`)}
|
|
104534
|
+
</div>
|
|
104535
|
+
</div>
|
|
104536
|
+
|
|
104537
|
+
<div class="results-count">Showing ${filtered.length} of ${this.emails.length} emails</div>
|
|
104538
|
+
|
|
104539
|
+
<div class="table-container">
|
|
104540
|
+
<div class="table-header">
|
|
104541
|
+
<span></span>
|
|
104542
|
+
<span>Status</span>
|
|
104543
|
+
<span>From</span>
|
|
104544
|
+
<span>To</span>
|
|
104545
|
+
<span>Subject</span>
|
|
104546
|
+
<span>Timestamp</span>
|
|
104547
|
+
</div>
|
|
104548
|
+
${filtered.length > 0 ? filtered.map((email) => b2`
|
|
104549
|
+
<div class="table-row" @click=${() => this.handleEmailClick(email)}>
|
|
104550
|
+
<span class="direction-icon ${email.direction}">
|
|
104551
|
+
${email.direction === "inbound" ? b2`<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="12" y1="5" x2="12" y2="19"/><polyline points="19 12 12 19 5 12"/></svg>` : b2`<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="12" y1="19" x2="12" y2="5"/><polyline points="5 12 12 5 19 12"/></svg>`}
|
|
104552
|
+
</span>
|
|
104553
|
+
<span><span class="status-badge ${email.status}">${email.status}</span></span>
|
|
104554
|
+
<span class="email-from" title="${email.from}">${email.from}</span>
|
|
104555
|
+
<span class="email-to" title="${email.to}">${email.to}</span>
|
|
104556
|
+
<span class="email-subject" title="${email.subject}">${email.subject}</span>
|
|
104557
|
+
<span class="email-timestamp">${email.timestamp}</span>
|
|
104558
|
+
</div>
|
|
104559
|
+
`) : b2`
|
|
104560
|
+
<div class="empty-state">No emails found</div>
|
|
104561
|
+
`}
|
|
104562
|
+
</div>
|
|
104563
|
+
`;
|
|
104564
|
+
}
|
|
104565
|
+
handleEmailClick(email) {
|
|
104566
|
+
this.dispatchEvent(new CustomEvent("email-click", { detail: email, bubbles: true, composed: true }));
|
|
104567
|
+
}
|
|
104568
|
+
};
|
|
104569
|
+
_init28 = __decoratorStart(_a28);
|
|
104570
|
+
_emails = new WeakMap();
|
|
104571
|
+
_searchQuery = new WeakMap();
|
|
104572
|
+
_statusFilter = new WeakMap();
|
|
104573
|
+
_directionFilter = new WeakMap();
|
|
104574
|
+
__decorateElement(_init28, 4, "emails", _emails_dec, SzMtaListView, _emails);
|
|
104575
|
+
__decorateElement(_init28, 4, "searchQuery", _searchQuery_dec, SzMtaListView, _searchQuery);
|
|
104576
|
+
__decorateElement(_init28, 4, "statusFilter", _statusFilter_dec, SzMtaListView, _statusFilter);
|
|
104577
|
+
__decorateElement(_init28, 4, "directionFilter", _directionFilter_dec, SzMtaListView, _directionFilter);
|
|
104578
|
+
SzMtaListView = __decorateElement(_init28, 0, "SzMtaListView", _SzMtaListView_decorators, SzMtaListView);
|
|
104579
|
+
__publicField(SzMtaListView, "demo", () => b2`
|
|
104580
|
+
<div style="padding: 24px; max-width: 1200px;">
|
|
104581
|
+
<sz-mta-list-view
|
|
104582
|
+
.emails=${[
|
|
104583
|
+
{ id: "1", direction: "outbound", status: "delivered", from: "noreply@serve.zone", to: "user@example.com", subject: "Welcome to serve.zone", timestamp: "2024-01-15 14:30:22", messageId: "<abc123@serve.zone>", size: "12.4 KB" },
|
|
104584
|
+
{ id: "2", direction: "outbound", status: "bounced", from: "alerts@serve.zone", to: "invalid@nowhere.test", subject: "Service Alert: CPU Usage High", timestamp: "2024-01-15 14:28:10", messageId: "<def456@serve.zone>", size: "8.2 KB" },
|
|
104585
|
+
{ id: "3", direction: "inbound", status: "delivered", from: "support@customer.com", to: "admin@serve.zone", subject: "Re: Infrastructure Review", timestamp: "2024-01-15 14:25:00", messageId: "<ghi789@customer.com>", size: "24.1 KB" },
|
|
104586
|
+
{ id: "4", direction: "outbound", status: "rejected", from: "billing@serve.zone", to: "blocked@spam-domain.test", subject: "Invoice #2024-001", timestamp: "2024-01-15 14:20:45", messageId: "<jkl012@serve.zone>", size: "45.6 KB" },
|
|
104587
|
+
{ id: "5", direction: "outbound", status: "deferred", from: "noreply@serve.zone", to: "slow@remote-server.test", subject: "Password Reset Request", timestamp: "2024-01-15 14:15:30", messageId: "<mno345@serve.zone>", size: "6.8 KB" },
|
|
104588
|
+
{ id: "6", direction: "inbound", status: "delivered", from: "ci@github.com", to: "devops@serve.zone", subject: "Build #4521 passed", timestamp: "2024-01-15 14:10:00", messageId: "<pqr678@github.com>", size: "15.3 KB" },
|
|
104589
|
+
{ id: "7", direction: "outbound", status: "pending", from: "reports@serve.zone", to: "team@serve.zone", subject: "Weekly Infrastructure Report", timestamp: "2024-01-15 14:05:00", messageId: "<stu901@serve.zone>", size: "102.7 KB" }
|
|
104590
|
+
]}
|
|
104591
|
+
></sz-mta-list-view>
|
|
104592
|
+
</div>
|
|
104593
|
+
`);
|
|
104594
|
+
__publicField(SzMtaListView, "demoGroups", ["MTA"]);
|
|
104595
|
+
__publicField(SzMtaListView, "styles", [
|
|
104596
|
+
cssManager.defaultStyles,
|
|
104597
|
+
i`
|
|
104598
|
+
:host {
|
|
104599
|
+
display: block;
|
|
104600
|
+
}
|
|
104601
|
+
|
|
104602
|
+
.filter-bar {
|
|
104603
|
+
display: flex;
|
|
104604
|
+
flex-wrap: wrap;
|
|
104605
|
+
gap: 12px;
|
|
104606
|
+
align-items: center;
|
|
104607
|
+
margin-bottom: 16px;
|
|
104608
|
+
}
|
|
104609
|
+
|
|
104610
|
+
.search-input {
|
|
104611
|
+
flex: 1;
|
|
104612
|
+
min-width: 200px;
|
|
104613
|
+
padding: 8px 12px;
|
|
104614
|
+
background: ${cssManager.bdTheme("#ffffff", "#09090b")};
|
|
104615
|
+
border: 1px solid ${cssManager.bdTheme("#e4e4e7", "#27272a")};
|
|
104616
|
+
border-radius: 6px;
|
|
104617
|
+
font-size: 14px;
|
|
104618
|
+
color: ${cssManager.bdTheme("#18181b", "#fafafa")};
|
|
104619
|
+
outline: none;
|
|
104620
|
+
transition: border-color 200ms ease;
|
|
104621
|
+
}
|
|
104622
|
+
|
|
104623
|
+
.search-input::placeholder {
|
|
104624
|
+
color: ${cssManager.bdTheme("#a1a1aa", "#52525b")};
|
|
104625
|
+
}
|
|
104626
|
+
|
|
104627
|
+
.search-input:focus {
|
|
104628
|
+
border-color: ${cssManager.bdTheme("#2563eb", "#3b82f6")};
|
|
104629
|
+
}
|
|
104630
|
+
|
|
104631
|
+
.chip-group {
|
|
104632
|
+
display: flex;
|
|
104633
|
+
gap: 4px;
|
|
104634
|
+
}
|
|
104635
|
+
|
|
104636
|
+
.chip {
|
|
104637
|
+
padding: 6px 12px;
|
|
104638
|
+
background: transparent;
|
|
104639
|
+
border: 1px solid ${cssManager.bdTheme("#e4e4e7", "#27272a")};
|
|
104640
|
+
border-radius: 9999px;
|
|
104641
|
+
font-size: 12px;
|
|
104642
|
+
font-weight: 500;
|
|
104643
|
+
color: ${cssManager.bdTheme("#71717a", "#a1a1aa")};
|
|
104644
|
+
cursor: pointer;
|
|
104645
|
+
transition: all 200ms ease;
|
|
104646
|
+
white-space: nowrap;
|
|
104647
|
+
}
|
|
104648
|
+
|
|
104649
|
+
.chip:hover {
|
|
104650
|
+
background: ${cssManager.bdTheme("#f4f4f5", "#18181b")};
|
|
104651
|
+
color: ${cssManager.bdTheme("#18181b", "#fafafa")};
|
|
104652
|
+
}
|
|
104653
|
+
|
|
104654
|
+
.chip.active {
|
|
104655
|
+
background: ${cssManager.bdTheme("#18181b", "#fafafa")};
|
|
104656
|
+
color: ${cssManager.bdTheme("#fafafa", "#18181b")};
|
|
104657
|
+
border-color: ${cssManager.bdTheme("#18181b", "#fafafa")};
|
|
104658
|
+
}
|
|
104659
|
+
|
|
104660
|
+
.results-count {
|
|
104661
|
+
font-size: 13px;
|
|
104662
|
+
color: ${cssManager.bdTheme("#71717a", "#a1a1aa")};
|
|
104663
|
+
margin-bottom: 12px;
|
|
104664
|
+
}
|
|
104665
|
+
|
|
104666
|
+
.table-container {
|
|
104667
|
+
background: ${cssManager.bdTheme("#ffffff", "#09090b")};
|
|
104668
|
+
border: 1px solid ${cssManager.bdTheme("#e4e4e7", "#27272a")};
|
|
104669
|
+
border-radius: 8px;
|
|
104670
|
+
overflow: hidden;
|
|
104671
|
+
}
|
|
104672
|
+
|
|
104673
|
+
.table-header {
|
|
104674
|
+
display: grid;
|
|
104675
|
+
grid-template-columns: 40px 90px 1.5fr 1.5fr 2fr 140px;
|
|
104676
|
+
gap: 16px;
|
|
104677
|
+
padding: 12px 16px;
|
|
104678
|
+
background: ${cssManager.bdTheme("#f4f4f5", "#18181b")};
|
|
104679
|
+
border-bottom: 1px solid ${cssManager.bdTheme("#e4e4e7", "#27272a")};
|
|
104680
|
+
font-size: 12px;
|
|
104681
|
+
font-weight: 600;
|
|
104682
|
+
text-transform: uppercase;
|
|
104683
|
+
letter-spacing: 0.05em;
|
|
104684
|
+
color: ${cssManager.bdTheme("#71717a", "#a1a1aa")};
|
|
104685
|
+
}
|
|
104686
|
+
|
|
104687
|
+
.table-row {
|
|
104688
|
+
display: grid;
|
|
104689
|
+
grid-template-columns: 40px 90px 1.5fr 1.5fr 2fr 140px;
|
|
104690
|
+
gap: 16px;
|
|
104691
|
+
padding: 12px 16px;
|
|
104692
|
+
border-bottom: 1px solid ${cssManager.bdTheme("#f4f4f5", "#27272a")};
|
|
104693
|
+
font-size: 14px;
|
|
104694
|
+
color: ${cssManager.bdTheme("#18181b", "#fafafa")};
|
|
104695
|
+
align-items: center;
|
|
104696
|
+
cursor: pointer;
|
|
104697
|
+
transition: background 200ms ease;
|
|
104698
|
+
}
|
|
104699
|
+
|
|
104700
|
+
.table-row:last-child {
|
|
104701
|
+
border-bottom: none;
|
|
104702
|
+
}
|
|
104703
|
+
|
|
104704
|
+
.table-row:hover {
|
|
104705
|
+
background: ${cssManager.bdTheme("#f4f4f5", "#18181b")};
|
|
104706
|
+
}
|
|
104707
|
+
|
|
104708
|
+
.direction-icon {
|
|
104709
|
+
display: flex;
|
|
104710
|
+
align-items: center;
|
|
104711
|
+
justify-content: center;
|
|
104712
|
+
}
|
|
104713
|
+
|
|
104714
|
+
.direction-icon.inbound {
|
|
104715
|
+
color: ${cssManager.bdTheme("#16a34a", "#22c55e")};
|
|
104716
|
+
}
|
|
104717
|
+
|
|
104718
|
+
.direction-icon.outbound {
|
|
104719
|
+
color: ${cssManager.bdTheme("#2563eb", "#60a5fa")};
|
|
104720
|
+
}
|
|
104721
|
+
|
|
104722
|
+
.status-badge {
|
|
104723
|
+
display: inline-flex;
|
|
104724
|
+
align-items: center;
|
|
104725
|
+
padding: 2px 8px;
|
|
104726
|
+
border-radius: 9999px;
|
|
104727
|
+
font-size: 12px;
|
|
104728
|
+
font-weight: 500;
|
|
104729
|
+
}
|
|
104730
|
+
|
|
104731
|
+
.status-badge.delivered {
|
|
104732
|
+
background: ${cssManager.bdTheme("#dcfce7", "rgba(34, 197, 94, 0.2)")};
|
|
104733
|
+
color: ${cssManager.bdTheme("#16a34a", "#22c55e")};
|
|
104734
|
+
}
|
|
104735
|
+
|
|
104736
|
+
.status-badge.bounced,
|
|
104737
|
+
.status-badge.rejected {
|
|
104738
|
+
background: ${cssManager.bdTheme("#fee2e2", "rgba(239, 68, 68, 0.2)")};
|
|
104739
|
+
color: ${cssManager.bdTheme("#dc2626", "#ef4444")};
|
|
104740
|
+
}
|
|
104741
|
+
|
|
104742
|
+
.status-badge.deferred {
|
|
104743
|
+
background: ${cssManager.bdTheme("#fef9c3", "rgba(250, 204, 21, 0.2)")};
|
|
104744
|
+
color: ${cssManager.bdTheme("#ca8a04", "#facc15")};
|
|
104745
|
+
}
|
|
104746
|
+
|
|
104747
|
+
.status-badge.pending {
|
|
104748
|
+
background: ${cssManager.bdTheme("#dbeafe", "rgba(59, 130, 246, 0.2)")};
|
|
104749
|
+
color: ${cssManager.bdTheme("#2563eb", "#60a5fa")};
|
|
104750
|
+
}
|
|
104751
|
+
|
|
104752
|
+
.email-from,
|
|
104753
|
+
.email-to {
|
|
104754
|
+
overflow: hidden;
|
|
104755
|
+
text-overflow: ellipsis;
|
|
104756
|
+
white-space: nowrap;
|
|
104757
|
+
}
|
|
104758
|
+
|
|
104759
|
+
.email-subject {
|
|
104760
|
+
overflow: hidden;
|
|
104761
|
+
text-overflow: ellipsis;
|
|
104762
|
+
white-space: nowrap;
|
|
104763
|
+
font-weight: 500;
|
|
104764
|
+
}
|
|
104765
|
+
|
|
104766
|
+
.email-timestamp {
|
|
104767
|
+
font-size: 13px;
|
|
104768
|
+
color: ${cssManager.bdTheme("#71717a", "#a1a1aa")};
|
|
104769
|
+
white-space: nowrap;
|
|
104770
|
+
}
|
|
104771
|
+
|
|
104772
|
+
.empty-state {
|
|
104773
|
+
padding: 48px 24px;
|
|
104774
|
+
text-align: center;
|
|
104775
|
+
color: ${cssManager.bdTheme("#71717a", "#a1a1aa")};
|
|
104776
|
+
}
|
|
104777
|
+
`
|
|
104778
|
+
]);
|
|
104779
|
+
__runInitializers(_init28, 1, SzMtaListView);
|
|
104780
|
+
|
|
104781
|
+
// ts_web/elements/sz-mta-detail-view.ts
|
|
104782
|
+
init_dist_ts29();
|
|
104783
|
+
var _email_dec, _a29, _SzMtaDetailView_decorators, _init29, _email;
|
|
104784
|
+
_SzMtaDetailView_decorators = [t4("sz-mta-detail-view")];
|
|
104785
|
+
var SzMtaDetailView = class extends (_a29 = DeesElement, _email_dec = [n5({ type: Object })], _a29) {
|
|
104786
|
+
constructor() {
|
|
104787
|
+
super(...arguments);
|
|
104788
|
+
__privateAdd(this, _email, __runInitializers(_init29, 8, this, null)), __runInitializers(_init29, 11, this);
|
|
104789
|
+
}
|
|
104790
|
+
render() {
|
|
104791
|
+
if (!this.email) {
|
|
104792
|
+
return b2`<div class="no-email">No email selected</div>`;
|
|
104793
|
+
}
|
|
104794
|
+
const email = this.email;
|
|
104795
|
+
return b2`
|
|
104796
|
+
<div class="header">
|
|
104797
|
+
<div class="back-link" @click=${() => this.handleBack()}>
|
|
104798
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
104799
|
+
<polyline points="15 18 9 12 15 6"></polyline>
|
|
104800
|
+
</svg>
|
|
104801
|
+
Back to Emails
|
|
104802
|
+
</div>
|
|
104803
|
+
</div>
|
|
104804
|
+
|
|
104805
|
+
<div class="email-header">
|
|
104806
|
+
<h1 class="email-subject">${email.subject}</h1>
|
|
104807
|
+
<div class="badge-group">
|
|
104808
|
+
<span class="status-badge ${email.status}">${email.status}</span>
|
|
104809
|
+
<span class="direction-badge ${email.direction}">${email.direction}</span>
|
|
104810
|
+
</div>
|
|
104811
|
+
</div>
|
|
104812
|
+
|
|
104813
|
+
<div class="content">
|
|
104814
|
+
<div class="main-content">
|
|
104815
|
+
<!-- Email Metadata -->
|
|
104816
|
+
<div class="card">
|
|
104817
|
+
<div class="card-header">
|
|
104818
|
+
<div class="card-title">Email Metadata</div>
|
|
104819
|
+
</div>
|
|
104820
|
+
<div class="card-content">
|
|
104821
|
+
<div class="detail-list">
|
|
104822
|
+
<div class="detail-item">
|
|
104823
|
+
<span class="detail-label">From</span>
|
|
104824
|
+
<span class="detail-value">${email.from}</span>
|
|
104825
|
+
</div>
|
|
104826
|
+
<div class="detail-item">
|
|
104827
|
+
<span class="detail-label">To</span>
|
|
104828
|
+
<span class="detail-value">${email.toList.join(", ")}</span>
|
|
104829
|
+
</div>
|
|
104830
|
+
${email.cc && email.cc.length > 0 ? b2`
|
|
104831
|
+
<div class="detail-item">
|
|
104832
|
+
<span class="detail-label">CC</span>
|
|
104833
|
+
<span class="detail-value">${email.cc.join(", ")}</span>
|
|
104834
|
+
</div>
|
|
104835
|
+
` : ""}
|
|
104836
|
+
<div class="detail-item">
|
|
104837
|
+
<span class="detail-label">Subject</span>
|
|
104838
|
+
<span class="detail-value">${email.subject}</span>
|
|
104839
|
+
</div>
|
|
104840
|
+
<div class="detail-item">
|
|
104841
|
+
<span class="detail-label">Date</span>
|
|
104842
|
+
<span class="detail-value">${email.timestamp}</span>
|
|
104843
|
+
</div>
|
|
104844
|
+
<div class="detail-item">
|
|
104845
|
+
<span class="detail-label">Message ID</span>
|
|
104846
|
+
<span class="detail-value">${email.messageId}</span>
|
|
104847
|
+
</div>
|
|
104848
|
+
<div class="detail-item">
|
|
104849
|
+
<span class="detail-label">Size</span>
|
|
104850
|
+
<span class="detail-value">${email.size}</span>
|
|
104851
|
+
</div>
|
|
104852
|
+
</div>
|
|
104853
|
+
</div>
|
|
104854
|
+
</div>
|
|
104855
|
+
|
|
104856
|
+
<!-- SMTP Transaction Log -->
|
|
104857
|
+
<div class="card">
|
|
104858
|
+
<div class="card-header">
|
|
104859
|
+
<div>
|
|
104860
|
+
<div class="card-title">SMTP Transaction Log</div>
|
|
104861
|
+
<div class="smtp-header-subtitle">
|
|
104862
|
+
<span class="smtp-direction-badge ${email.direction}">${email.direction}</span>
|
|
104863
|
+
<span>${email.direction === "outbound" ? `${email.connectionInfo.sourceHostname} \u2192 ${email.connectionInfo.destinationIp}:${email.connectionInfo.destinationPort}` : `${email.connectionInfo.sourceIp} \u2192 ${email.connectionInfo.sourceHostname}:${email.connectionInfo.destinationPort}`}</span>
|
|
104864
|
+
</div>
|
|
104865
|
+
</div>
|
|
104866
|
+
<button class="smtp-copy-button" @click=${() => this.copySmtpLog()}>
|
|
104867
|
+
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
104868
|
+
<rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect>
|
|
104869
|
+
<path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path>
|
|
104870
|
+
</svg>
|
|
104871
|
+
Copy Log
|
|
104872
|
+
</button>
|
|
104873
|
+
</div>
|
|
104874
|
+
${this.renderSmtpLog(email)}
|
|
104875
|
+
</div>
|
|
104876
|
+
|
|
104877
|
+
<!-- Email Body -->
|
|
104878
|
+
<div class="card">
|
|
104879
|
+
<div class="card-header">
|
|
104880
|
+
<div>
|
|
104881
|
+
<div class="card-title">Email Body (Escaped)</div>
|
|
104882
|
+
<div class="card-subtitle">Raw content — HTML is not rendered</div>
|
|
104883
|
+
</div>
|
|
104884
|
+
</div>
|
|
104885
|
+
<pre class="email-body-container">${email.body}</pre>
|
|
104886
|
+
</div>
|
|
104887
|
+
</div>
|
|
104888
|
+
|
|
104889
|
+
<div class="sidebar">
|
|
104890
|
+
<!-- Connection Info -->
|
|
104891
|
+
<div class="card">
|
|
104892
|
+
<div class="card-header">
|
|
104893
|
+
<div class="card-title">Connection Info</div>
|
|
104894
|
+
</div>
|
|
104895
|
+
<div class="card-content">
|
|
104896
|
+
<div class="detail-list">
|
|
104897
|
+
<div class="detail-item">
|
|
104898
|
+
<span class="detail-label">Source IP</span>
|
|
104899
|
+
<span class="detail-value">${email.connectionInfo.sourceIp}</span>
|
|
104900
|
+
</div>
|
|
104901
|
+
<div class="detail-item">
|
|
104902
|
+
<span class="detail-label">Source Hostname</span>
|
|
104903
|
+
<span class="detail-value">${email.connectionInfo.sourceHostname}</span>
|
|
104904
|
+
</div>
|
|
104905
|
+
<div class="detail-item">
|
|
104906
|
+
<span class="detail-label">Destination</span>
|
|
104907
|
+
<span class="detail-value">${email.connectionInfo.destinationIp}:${email.connectionInfo.destinationPort}</span>
|
|
104908
|
+
</div>
|
|
104909
|
+
<div class="detail-item">
|
|
104910
|
+
<span class="detail-label">TLS</span>
|
|
104911
|
+
<span class="detail-value">
|
|
104912
|
+
${email.connectionInfo.tlsVersion ? b2`<span class="tls-badge">${email.connectionInfo.tlsVersion}</span>` : "None"}
|
|
104913
|
+
</span>
|
|
104914
|
+
</div>
|
|
104915
|
+
${email.connectionInfo.tlsCipher ? b2`
|
|
104916
|
+
<div class="detail-item">
|
|
104917
|
+
<span class="detail-label">Cipher</span>
|
|
104918
|
+
<span class="detail-value">${email.connectionInfo.tlsCipher}</span>
|
|
104919
|
+
</div>
|
|
104920
|
+
` : ""}
|
|
104921
|
+
<div class="detail-item">
|
|
104922
|
+
<span class="detail-label">Authenticated</span>
|
|
104923
|
+
<span class="detail-value">${email.connectionInfo.authenticated ? "Yes" : "No"}</span>
|
|
104924
|
+
</div>
|
|
104925
|
+
${email.connectionInfo.authenticated ? b2`
|
|
104926
|
+
<div class="detail-item">
|
|
104927
|
+
<span class="detail-label">Auth Method</span>
|
|
104928
|
+
<span class="detail-value">${email.connectionInfo.authMethod}</span>
|
|
104929
|
+
</div>
|
|
104930
|
+
<div class="detail-item">
|
|
104931
|
+
<span class="detail-label">Auth User</span>
|
|
104932
|
+
<span class="detail-value">${email.connectionInfo.authUser}</span>
|
|
104933
|
+
</div>
|
|
104934
|
+
` : ""}
|
|
104935
|
+
</div>
|
|
104936
|
+
</div>
|
|
104937
|
+
</div>
|
|
104938
|
+
|
|
104939
|
+
<!-- Authentication Results -->
|
|
104940
|
+
<div class="card">
|
|
104941
|
+
<div class="card-header">
|
|
104942
|
+
<div class="card-title">Authentication Results</div>
|
|
104943
|
+
</div>
|
|
104944
|
+
<div class="card-content">
|
|
104945
|
+
<div class="auth-row">
|
|
104946
|
+
<div>
|
|
104947
|
+
<span class="auth-label">SPF</span>
|
|
104948
|
+
<span class="auth-domain">${email.authenticationResults.spfDomain}</span>
|
|
104949
|
+
</div>
|
|
104950
|
+
<span class="auth-badge ${email.authenticationResults.spf}">${email.authenticationResults.spf}</span>
|
|
104951
|
+
</div>
|
|
104952
|
+
<div class="auth-row">
|
|
104953
|
+
<div>
|
|
104954
|
+
<span class="auth-label">DKIM</span>
|
|
104955
|
+
<span class="auth-domain">${email.authenticationResults.dkimDomain}</span>
|
|
104956
|
+
</div>
|
|
104957
|
+
<span class="auth-badge ${email.authenticationResults.dkim}">${email.authenticationResults.dkim}</span>
|
|
104958
|
+
</div>
|
|
104959
|
+
<div class="auth-row">
|
|
104960
|
+
<div>
|
|
104961
|
+
<span class="auth-label">DMARC</span>
|
|
104962
|
+
<span class="auth-domain">policy: ${email.authenticationResults.dmarcPolicy}</span>
|
|
104963
|
+
</div>
|
|
104964
|
+
<span class="auth-badge ${email.authenticationResults.dmarc}">${email.authenticationResults.dmarc}</span>
|
|
104965
|
+
</div>
|
|
104966
|
+
</div>
|
|
104967
|
+
</div>
|
|
104968
|
+
|
|
104969
|
+
<!-- Rejection Details (conditional) -->
|
|
104970
|
+
${email.status === "rejected" || email.status === "bounced" ? b2`
|
|
104971
|
+
<div class="card rejection-card">
|
|
104972
|
+
<div class="card-header">
|
|
104973
|
+
<div class="card-title">Rejection Details</div>
|
|
104974
|
+
</div>
|
|
104975
|
+
<div class="card-content">
|
|
104976
|
+
${email.rejectionReason ? b2`
|
|
104977
|
+
<div class="rejection-label">Rejection Reason</div>
|
|
104978
|
+
<div class="rejection-text">${email.rejectionReason}</div>
|
|
104979
|
+
` : ""}
|
|
104980
|
+
${email.bounceMessage ? b2`
|
|
104981
|
+
<div class="rejection-label">Bounce Message</div>
|
|
104982
|
+
<div class="rejection-text">${email.bounceMessage}</div>
|
|
104983
|
+
` : ""}
|
|
104984
|
+
</div>
|
|
104985
|
+
</div>
|
|
104986
|
+
` : ""}
|
|
104987
|
+
</div>
|
|
104988
|
+
</div>
|
|
104989
|
+
`;
|
|
104990
|
+
}
|
|
104991
|
+
getResponseCodeBadgeClass(code4) {
|
|
104992
|
+
if (code4 >= 500) return "code-5xx";
|
|
104993
|
+
if (code4 >= 400) return "code-4xx";
|
|
104994
|
+
if (code4 >= 300) return "code-3xx";
|
|
104995
|
+
return "code-2xx";
|
|
104996
|
+
}
|
|
104997
|
+
getSmtpPhases(log) {
|
|
104998
|
+
const phases = [];
|
|
104999
|
+
let currentPhase = "";
|
|
105000
|
+
let ehloCount = 0;
|
|
105001
|
+
for (const entry of log) {
|
|
105002
|
+
const cmd = entry.command.toUpperCase();
|
|
105003
|
+
let phase = currentPhase;
|
|
105004
|
+
if (entry.direction === "client") {
|
|
105005
|
+
if (cmd.startsWith("EHLO") || cmd.startsWith("HELO")) {
|
|
105006
|
+
ehloCount++;
|
|
105007
|
+
if (ehloCount === 1) {
|
|
105008
|
+
phase = "connection";
|
|
105009
|
+
} else {
|
|
105010
|
+
phase = "post-tls";
|
|
105011
|
+
}
|
|
105012
|
+
} else if (cmd === "STARTTLS") {
|
|
105013
|
+
phase = "tls";
|
|
105014
|
+
} else if (cmd.startsWith("AUTH")) {
|
|
105015
|
+
phase = "auth";
|
|
105016
|
+
} else if (cmd.startsWith("MAIL FROM") || cmd.startsWith("RCPT TO") || cmd === "DATA" || cmd === ".") {
|
|
105017
|
+
phase = "transfer";
|
|
105018
|
+
} else if (cmd === "QUIT") {
|
|
105019
|
+
phase = "closing";
|
|
105020
|
+
}
|
|
105021
|
+
}
|
|
105022
|
+
if (entry.direction === "server" && phase === "") {
|
|
105023
|
+
phase = currentPhase || "connection";
|
|
105024
|
+
}
|
|
105025
|
+
if (phase === "") phase = "connection";
|
|
105026
|
+
if (phase !== currentPhase) {
|
|
105027
|
+
currentPhase = phase;
|
|
105028
|
+
const labels = {
|
|
105029
|
+
"connection": "Connection",
|
|
105030
|
+
"tls": "TLS Negotiation",
|
|
105031
|
+
"post-tls": "Post-TLS Handshake",
|
|
105032
|
+
"auth": "Authentication",
|
|
105033
|
+
"transfer": "Mail Transfer",
|
|
105034
|
+
"closing": "Closing"
|
|
105035
|
+
};
|
|
105036
|
+
phases.push({ phase, label: labels[phase] || phase, entries: [] });
|
|
105037
|
+
}
|
|
105038
|
+
if (phases.length === 0) {
|
|
105039
|
+
phases.push({ phase: "connection", label: "Connection", entries: [] });
|
|
105040
|
+
}
|
|
105041
|
+
phases[phases.length - 1].entries.push(entry);
|
|
105042
|
+
}
|
|
105043
|
+
return phases;
|
|
105044
|
+
}
|
|
105045
|
+
renderSmtpLog(email) {
|
|
105046
|
+
const phases = this.getSmtpPhases(email.smtpLog);
|
|
105047
|
+
return b2`
|
|
105048
|
+
<div class="smtp-log-container">
|
|
105049
|
+
${phases.map((phase) => b2`
|
|
105050
|
+
<div class="smtp-phase-separator">
|
|
105051
|
+
<div class="smtp-phase-line"></div>
|
|
105052
|
+
<span class="smtp-phase-label">${phase.label}</span>
|
|
105053
|
+
<div class="smtp-phase-line"></div>
|
|
105054
|
+
</div>
|
|
105055
|
+
${phase.entries.map((entry) => b2`
|
|
105056
|
+
<div class="smtp-bubble ${entry.direction}">
|
|
105057
|
+
${entry.direction === "server" && entry.responseCode ? b2`
|
|
105058
|
+
<span class="response-code-badge ${this.getResponseCodeBadgeClass(entry.responseCode)}">${entry.responseCode}</span>
|
|
105059
|
+
` : ""}
|
|
105060
|
+
<div class="smtp-bubble-command">${entry.command}</div>
|
|
105061
|
+
<div class="smtp-bubble-meta">
|
|
105062
|
+
<span>${entry.timestamp}</span>
|
|
105063
|
+
<span>·</span>
|
|
105064
|
+
<span class="smtp-direction-tag ${entry.direction}">${entry.direction === "client" ? "Client" : "Server"}</span>
|
|
105065
|
+
</div>
|
|
105066
|
+
</div>
|
|
105067
|
+
`)}
|
|
105068
|
+
`)}
|
|
105069
|
+
</div>
|
|
105070
|
+
`;
|
|
105071
|
+
}
|
|
105072
|
+
copySmtpLog() {
|
|
105073
|
+
if (!this.email) return;
|
|
105074
|
+
const text9 = this.email.smtpLog.map((e11) => `[${e11.timestamp}] ${e11.direction === "client" ? "C:" : "S:"} ${e11.command}`).join("\n");
|
|
105075
|
+
navigator.clipboard.writeText(text9);
|
|
105076
|
+
}
|
|
105077
|
+
handleBack() {
|
|
105078
|
+
this.dispatchEvent(new CustomEvent("back", { bubbles: true, composed: true }));
|
|
105079
|
+
}
|
|
105080
|
+
};
|
|
105081
|
+
_init29 = __decoratorStart(_a29);
|
|
105082
|
+
_email = new WeakMap();
|
|
105083
|
+
__decorateElement(_init29, 4, "email", _email_dec, SzMtaDetailView, _email);
|
|
105084
|
+
SzMtaDetailView = __decorateElement(_init29, 0, "SzMtaDetailView", _SzMtaDetailView_decorators, SzMtaDetailView);
|
|
105085
|
+
__publicField(SzMtaDetailView, "demo", () => b2`
|
|
105086
|
+
<div style="padding: 24px; max-width: 1200px;">
|
|
105087
|
+
<sz-mta-detail-view
|
|
105088
|
+
.email=${{
|
|
105089
|
+
id: "1",
|
|
105090
|
+
direction: "outbound",
|
|
105091
|
+
status: "delivered",
|
|
105092
|
+
from: "noreply@serve.zone",
|
|
105093
|
+
to: "user@example.com",
|
|
105094
|
+
toList: ["user@example.com"],
|
|
105095
|
+
subject: "Welcome to serve.zone",
|
|
105096
|
+
timestamp: "2024-01-15 14:30:22",
|
|
105097
|
+
messageId: "<abc123@serve.zone>",
|
|
105098
|
+
size: "12.4 KB",
|
|
105099
|
+
smtpLog: [
|
|
105100
|
+
{ timestamp: "14:30:20", direction: "client", command: "EHLO mail.serve.zone" },
|
|
105101
|
+
{ timestamp: "14:30:20", direction: "server", command: "250-mail.example.com Hello", responseCode: 250 },
|
|
105102
|
+
{ timestamp: "14:30:20", direction: "server", command: "250-STARTTLS", responseCode: 250 },
|
|
105103
|
+
{ timestamp: "14:30:20", direction: "server", command: "250 SIZE 52428800", responseCode: 250 },
|
|
105104
|
+
{ timestamp: "14:30:20", direction: "client", command: "STARTTLS" },
|
|
105105
|
+
{ timestamp: "14:30:21", direction: "server", command: "220 Ready to start TLS", responseCode: 220 },
|
|
105106
|
+
{ timestamp: "14:30:21", direction: "client", command: "EHLO mail.serve.zone" },
|
|
105107
|
+
{ timestamp: "14:30:21", direction: "server", command: "250-mail.example.com Hello", responseCode: 250 },
|
|
105108
|
+
{ timestamp: "14:30:21", direction: "server", command: "250-AUTH PLAIN LOGIN", responseCode: 250 },
|
|
105109
|
+
{ timestamp: "14:30:21", direction: "server", command: "250 SIZE 52428800", responseCode: 250 },
|
|
105110
|
+
{ timestamp: "14:30:21", direction: "client", command: "AUTH PLAIN AHVzZXIAcGFzc3dvcmQ=" },
|
|
105111
|
+
{ timestamp: "14:30:21", direction: "server", command: "235 2.7.0 Authentication successful", responseCode: 235 },
|
|
105112
|
+
{ timestamp: "14:30:21", direction: "client", command: "MAIL FROM:<noreply@serve.zone>" },
|
|
105113
|
+
{ timestamp: "14:30:21", direction: "server", command: "250 OK", responseCode: 250 },
|
|
105114
|
+
{ timestamp: "14:30:21", direction: "client", command: "RCPT TO:<user@example.com>" },
|
|
105115
|
+
{ timestamp: "14:30:21", direction: "server", command: "250 Accepted", responseCode: 250 },
|
|
105116
|
+
{ timestamp: "14:30:22", direction: "client", command: "DATA" },
|
|
105117
|
+
{ timestamp: "14:30:22", direction: "server", command: '354 Enter message, ending with "." on a line by itself', responseCode: 354 },
|
|
105118
|
+
{ timestamp: "14:30:22", direction: "client", command: "." },
|
|
105119
|
+
{ timestamp: "14:30:22", direction: "server", command: "250 OK id=1pQ2rS-0003Ab-C4", responseCode: 250 },
|
|
105120
|
+
{ timestamp: "14:30:22", direction: "client", command: "QUIT" },
|
|
105121
|
+
{ timestamp: "14:30:22", direction: "server", command: "221 mail.example.com closing connection", responseCode: 221 }
|
|
105122
|
+
],
|
|
105123
|
+
connectionInfo: {
|
|
105124
|
+
sourceIp: "10.0.1.50",
|
|
105125
|
+
sourceHostname: "mail.serve.zone",
|
|
105126
|
+
destinationIp: "93.184.216.34",
|
|
105127
|
+
destinationPort: 25,
|
|
105128
|
+
tlsVersion: "TLSv1.3",
|
|
105129
|
+
tlsCipher: "TLS_AES_256_GCM_SHA384",
|
|
105130
|
+
authenticated: true,
|
|
105131
|
+
authMethod: "PLAIN",
|
|
105132
|
+
authUser: "noreply@serve.zone"
|
|
105133
|
+
},
|
|
105134
|
+
authenticationResults: {
|
|
105135
|
+
spf: "pass",
|
|
105136
|
+
spfDomain: "serve.zone",
|
|
105137
|
+
dkim: "pass",
|
|
105138
|
+
dkimDomain: "serve.zone",
|
|
105139
|
+
dmarc: "pass",
|
|
105140
|
+
dmarcPolicy: "reject"
|
|
105141
|
+
},
|
|
105142
|
+
headers: {
|
|
105143
|
+
"From": "noreply@serve.zone",
|
|
105144
|
+
"To": "user@example.com",
|
|
105145
|
+
"Subject": "Welcome to serve.zone",
|
|
105146
|
+
"Date": "Mon, 15 Jan 2024 14:30:22 +0000",
|
|
105147
|
+
"MIME-Version": "1.0",
|
|
105148
|
+
"Content-Type": "text/html; charset=UTF-8"
|
|
105149
|
+
},
|
|
105150
|
+
body: '<html>\\n<head><title>Welcome</title></head>\\n<body>\\n <h1>Welcome to serve.zone!</h1>\\n <p>Your account has been created successfully.</p>\\n <a href="https://serve.zone/dashboard">Go to Dashboard</a>\\n</body>\\n</html>'
|
|
105151
|
+
}}
|
|
105152
|
+
></sz-mta-detail-view>
|
|
105153
|
+
</div>
|
|
105154
|
+
`);
|
|
105155
|
+
__publicField(SzMtaDetailView, "demoGroups", ["MTA"]);
|
|
105156
|
+
__publicField(SzMtaDetailView, "styles", [
|
|
105157
|
+
cssManager.defaultStyles,
|
|
105158
|
+
i`
|
|
105159
|
+
:host {
|
|
105160
|
+
display: block;
|
|
105161
|
+
}
|
|
105162
|
+
|
|
105163
|
+
.header {
|
|
105164
|
+
display: flex;
|
|
105165
|
+
align-items: center;
|
|
105166
|
+
gap: 16px;
|
|
105167
|
+
margin-bottom: 24px;
|
|
105168
|
+
}
|
|
105169
|
+
|
|
105170
|
+
.back-link {
|
|
105171
|
+
display: inline-flex;
|
|
105172
|
+
align-items: center;
|
|
105173
|
+
gap: 6px;
|
|
105174
|
+
font-size: 14px;
|
|
105175
|
+
color: ${cssManager.bdTheme("#71717a", "#a1a1aa")};
|
|
105176
|
+
cursor: pointer;
|
|
105177
|
+
transition: color 200ms ease;
|
|
105178
|
+
}
|
|
105179
|
+
|
|
105180
|
+
.back-link:hover {
|
|
105181
|
+
color: ${cssManager.bdTheme("#18181b", "#fafafa")};
|
|
105182
|
+
}
|
|
105183
|
+
|
|
105184
|
+
.email-header {
|
|
105185
|
+
display: flex;
|
|
105186
|
+
align-items: center;
|
|
105187
|
+
gap: 12px;
|
|
105188
|
+
margin-bottom: 24px;
|
|
105189
|
+
}
|
|
105190
|
+
|
|
105191
|
+
.email-subject {
|
|
105192
|
+
font-size: 24px;
|
|
105193
|
+
font-weight: 700;
|
|
105194
|
+
color: ${cssManager.bdTheme("#18181b", "#fafafa")};
|
|
105195
|
+
margin: 0;
|
|
105196
|
+
}
|
|
105197
|
+
|
|
105198
|
+
.badge-group {
|
|
105199
|
+
display: flex;
|
|
105200
|
+
gap: 8px;
|
|
105201
|
+
}
|
|
105202
|
+
|
|
105203
|
+
.status-badge {
|
|
105204
|
+
display: inline-flex;
|
|
105205
|
+
align-items: center;
|
|
105206
|
+
padding: 4px 12px;
|
|
105207
|
+
border-radius: 9999px;
|
|
105208
|
+
font-size: 13px;
|
|
105209
|
+
font-weight: 500;
|
|
105210
|
+
}
|
|
105211
|
+
|
|
105212
|
+
.status-badge.delivered {
|
|
105213
|
+
background: ${cssManager.bdTheme("#dcfce7", "rgba(34, 197, 94, 0.2)")};
|
|
105214
|
+
color: ${cssManager.bdTheme("#16a34a", "#22c55e")};
|
|
105215
|
+
}
|
|
105216
|
+
|
|
105217
|
+
.status-badge.bounced,
|
|
105218
|
+
.status-badge.rejected {
|
|
105219
|
+
background: ${cssManager.bdTheme("#fee2e2", "rgba(239, 68, 68, 0.2)")};
|
|
105220
|
+
color: ${cssManager.bdTheme("#dc2626", "#ef4444")};
|
|
105221
|
+
}
|
|
105222
|
+
|
|
105223
|
+
.status-badge.deferred {
|
|
105224
|
+
background: ${cssManager.bdTheme("#fef9c3", "rgba(250, 204, 21, 0.2)")};
|
|
105225
|
+
color: ${cssManager.bdTheme("#ca8a04", "#facc15")};
|
|
105226
|
+
}
|
|
105227
|
+
|
|
105228
|
+
.status-badge.pending {
|
|
105229
|
+
background: ${cssManager.bdTheme("#dbeafe", "rgba(59, 130, 246, 0.2)")};
|
|
105230
|
+
color: ${cssManager.bdTheme("#2563eb", "#60a5fa")};
|
|
105231
|
+
}
|
|
105232
|
+
|
|
105233
|
+
.direction-badge {
|
|
105234
|
+
display: inline-flex;
|
|
105235
|
+
align-items: center;
|
|
105236
|
+
gap: 4px;
|
|
105237
|
+
padding: 4px 12px;
|
|
105238
|
+
border-radius: 9999px;
|
|
105239
|
+
font-size: 13px;
|
|
105240
|
+
font-weight: 500;
|
|
105241
|
+
}
|
|
105242
|
+
|
|
105243
|
+
.direction-badge.inbound {
|
|
105244
|
+
background: ${cssManager.bdTheme("#dcfce7", "rgba(34, 197, 94, 0.2)")};
|
|
105245
|
+
color: ${cssManager.bdTheme("#16a34a", "#22c55e")};
|
|
105246
|
+
}
|
|
105247
|
+
|
|
105248
|
+
.direction-badge.outbound {
|
|
105249
|
+
background: ${cssManager.bdTheme("#dbeafe", "rgba(59, 130, 246, 0.2)")};
|
|
105250
|
+
color: ${cssManager.bdTheme("#2563eb", "#60a5fa")};
|
|
105251
|
+
}
|
|
105252
|
+
|
|
105253
|
+
.content {
|
|
105254
|
+
display: grid;
|
|
105255
|
+
grid-template-columns: 1fr;
|
|
105256
|
+
gap: 24px;
|
|
105257
|
+
}
|
|
105258
|
+
|
|
105259
|
+
@media (min-width: 1024px) {
|
|
105260
|
+
.content {
|
|
105261
|
+
grid-template-columns: 2fr 1fr;
|
|
105262
|
+
}
|
|
105263
|
+
}
|
|
105264
|
+
|
|
105265
|
+
.main-content {
|
|
105266
|
+
display: flex;
|
|
105267
|
+
flex-direction: column;
|
|
105268
|
+
gap: 24px;
|
|
105269
|
+
}
|
|
105270
|
+
|
|
105271
|
+
.sidebar {
|
|
105272
|
+
display: flex;
|
|
105273
|
+
flex-direction: column;
|
|
105274
|
+
gap: 24px;
|
|
105275
|
+
}
|
|
105276
|
+
|
|
105277
|
+
.card {
|
|
105278
|
+
background: ${cssManager.bdTheme("#ffffff", "#09090b")};
|
|
105279
|
+
border: 1px solid ${cssManager.bdTheme("#e4e4e7", "#27272a")};
|
|
105280
|
+
border-radius: 8px;
|
|
105281
|
+
overflow: hidden;
|
|
105282
|
+
}
|
|
105283
|
+
|
|
105284
|
+
.card-header {
|
|
105285
|
+
display: flex;
|
|
105286
|
+
justify-content: space-between;
|
|
105287
|
+
align-items: center;
|
|
105288
|
+
padding: 16px;
|
|
105289
|
+
border-bottom: 1px solid ${cssManager.bdTheme("#e4e4e7", "#27272a")};
|
|
105290
|
+
}
|
|
105291
|
+
|
|
105292
|
+
.card-title {
|
|
105293
|
+
font-size: 16px;
|
|
105294
|
+
font-weight: 600;
|
|
105295
|
+
color: ${cssManager.bdTheme("#18181b", "#fafafa")};
|
|
105296
|
+
}
|
|
105297
|
+
|
|
105298
|
+
.card-subtitle {
|
|
105299
|
+
font-size: 13px;
|
|
105300
|
+
color: ${cssManager.bdTheme("#71717a", "#a1a1aa")};
|
|
105301
|
+
margin-top: 2px;
|
|
105302
|
+
}
|
|
105303
|
+
|
|
105304
|
+
.card-content {
|
|
105305
|
+
padding: 16px;
|
|
105306
|
+
}
|
|
105307
|
+
|
|
105308
|
+
.detail-list {
|
|
105309
|
+
display: flex;
|
|
105310
|
+
flex-direction: column;
|
|
105311
|
+
gap: 12px;
|
|
105312
|
+
}
|
|
105313
|
+
|
|
105314
|
+
.detail-item {
|
|
105315
|
+
display: flex;
|
|
105316
|
+
justify-content: space-between;
|
|
105317
|
+
align-items: flex-start;
|
|
105318
|
+
}
|
|
105319
|
+
|
|
105320
|
+
.detail-label {
|
|
105321
|
+
font-size: 14px;
|
|
105322
|
+
color: ${cssManager.bdTheme("#71717a", "#a1a1aa")};
|
|
105323
|
+
flex-shrink: 0;
|
|
105324
|
+
}
|
|
105325
|
+
|
|
105326
|
+
.detail-value {
|
|
105327
|
+
font-size: 14px;
|
|
105328
|
+
color: ${cssManager.bdTheme("#18181b", "#fafafa")};
|
|
105329
|
+
text-align: right;
|
|
105330
|
+
word-break: break-all;
|
|
105331
|
+
}
|
|
105332
|
+
|
|
105333
|
+
.smtp-log-container {
|
|
105334
|
+
padding: 16px;
|
|
105335
|
+
font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;
|
|
105336
|
+
font-size: 13px;
|
|
105337
|
+
line-height: 1.6;
|
|
105338
|
+
max-height: 500px;
|
|
105339
|
+
overflow-y: auto;
|
|
105340
|
+
background: ${cssManager.bdTheme("#fafafa", "#0a0a0a")};
|
|
105341
|
+
display: flex;
|
|
105342
|
+
flex-direction: column;
|
|
105343
|
+
gap: 8px;
|
|
105344
|
+
scrollbar-width: thin;
|
|
105345
|
+
scrollbar-color: ${cssManager.bdTheme("#d4d4d8", "#3f3f46")} transparent;
|
|
105346
|
+
}
|
|
105347
|
+
|
|
105348
|
+
.smtp-log-container::-webkit-scrollbar {
|
|
105349
|
+
width: 6px;
|
|
105350
|
+
}
|
|
105351
|
+
|
|
105352
|
+
.smtp-log-container::-webkit-scrollbar-track {
|
|
105353
|
+
background: transparent;
|
|
105354
|
+
}
|
|
105355
|
+
|
|
105356
|
+
.smtp-log-container::-webkit-scrollbar-thumb {
|
|
105357
|
+
background: ${cssManager.bdTheme("#d4d4d8", "#3f3f46")};
|
|
105358
|
+
border-radius: 3px;
|
|
105359
|
+
}
|
|
105360
|
+
|
|
105361
|
+
/* Phase separators */
|
|
105362
|
+
.smtp-phase-separator {
|
|
105363
|
+
display: flex;
|
|
105364
|
+
align-items: center;
|
|
105365
|
+
gap: 12px;
|
|
105366
|
+
padding: 4px 0;
|
|
105367
|
+
margin: 4px 0;
|
|
105368
|
+
}
|
|
105369
|
+
|
|
105370
|
+
.smtp-phase-line {
|
|
105371
|
+
flex: 1;
|
|
105372
|
+
height: 1px;
|
|
105373
|
+
background: ${cssManager.bdTheme("#e4e4e7", "#27272a")};
|
|
105374
|
+
}
|
|
105375
|
+
|
|
105376
|
+
.smtp-phase-label {
|
|
105377
|
+
font-size: 10px;
|
|
105378
|
+
font-weight: 600;
|
|
105379
|
+
text-transform: uppercase;
|
|
105380
|
+
letter-spacing: 0.5px;
|
|
105381
|
+
color: ${cssManager.bdTheme("#a1a1aa", "#52525b")};
|
|
105382
|
+
white-space: nowrap;
|
|
105383
|
+
}
|
|
105384
|
+
|
|
105385
|
+
/* Chat bubbles */
|
|
105386
|
+
.smtp-bubble {
|
|
105387
|
+
border-radius: 8px;
|
|
105388
|
+
padding: 10px 14px;
|
|
105389
|
+
max-width: 70%;
|
|
105390
|
+
}
|
|
105391
|
+
|
|
105392
|
+
.smtp-bubble.client {
|
|
105393
|
+
align-self: flex-start;
|
|
105394
|
+
background: ${cssManager.bdTheme("rgba(59, 130, 246, 0.08)", "rgba(59, 130, 246, 0.12)")};
|
|
105395
|
+
border-left: 3px solid ${cssManager.bdTheme("#3b82f6", "#60a5fa")};
|
|
105396
|
+
margin-right: auto;
|
|
105397
|
+
}
|
|
105398
|
+
|
|
105399
|
+
.smtp-bubble.server {
|
|
105400
|
+
align-self: flex-end;
|
|
105401
|
+
background: ${cssManager.bdTheme("rgba(34, 197, 94, 0.06)", "rgba(34, 197, 94, 0.10)")};
|
|
105402
|
+
border-right: 3px solid ${cssManager.bdTheme("#22c55e", "#4ade80")};
|
|
105403
|
+
margin-left: auto;
|
|
105404
|
+
text-align: right;
|
|
105405
|
+
}
|
|
105406
|
+
|
|
105407
|
+
.smtp-bubble-command {
|
|
105408
|
+
white-space: pre-wrap;
|
|
105409
|
+
word-break: break-all;
|
|
105410
|
+
color: ${cssManager.bdTheme("#18181b", "#fafafa")};
|
|
105411
|
+
}
|
|
105412
|
+
|
|
105413
|
+
.smtp-bubble-meta {
|
|
105414
|
+
display: flex;
|
|
105415
|
+
align-items: center;
|
|
105416
|
+
gap: 6px;
|
|
105417
|
+
margin-top: 4px;
|
|
105418
|
+
font-size: 11px;
|
|
105419
|
+
color: ${cssManager.bdTheme("#a1a1aa", "#52525b")};
|
|
105420
|
+
}
|
|
105421
|
+
|
|
105422
|
+
.smtp-bubble.server .smtp-bubble-meta {
|
|
105423
|
+
justify-content: flex-end;
|
|
105424
|
+
}
|
|
105425
|
+
|
|
105426
|
+
.smtp-direction-tag {
|
|
105427
|
+
font-size: 10px;
|
|
105428
|
+
font-weight: 600;
|
|
105429
|
+
text-transform: uppercase;
|
|
105430
|
+
letter-spacing: 0.3px;
|
|
105431
|
+
}
|
|
105432
|
+
|
|
105433
|
+
.smtp-direction-tag.client {
|
|
105434
|
+
color: ${cssManager.bdTheme("#3b82f6", "#60a5fa")};
|
|
105435
|
+
}
|
|
105436
|
+
|
|
105437
|
+
.smtp-direction-tag.server {
|
|
105438
|
+
color: ${cssManager.bdTheme("#22c55e", "#4ade80")};
|
|
105439
|
+
}
|
|
105440
|
+
|
|
105441
|
+
/* Response code badges */
|
|
105442
|
+
.response-code-badge {
|
|
105443
|
+
display: inline-block;
|
|
105444
|
+
padding: 1px 7px;
|
|
105445
|
+
border-radius: 9999px;
|
|
105446
|
+
font-size: 11px;
|
|
105447
|
+
font-weight: 700;
|
|
105448
|
+
margin-bottom: 4px;
|
|
105449
|
+
font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;
|
|
105450
|
+
}
|
|
105451
|
+
|
|
105452
|
+
.response-code-badge.code-2xx {
|
|
105453
|
+
background: ${cssManager.bdTheme("rgba(34, 197, 94, 0.15)", "rgba(34, 197, 94, 0.25)")};
|
|
105454
|
+
color: ${cssManager.bdTheme("#16a34a", "#22c55e")};
|
|
105455
|
+
}
|
|
105456
|
+
|
|
105457
|
+
.response-code-badge.code-3xx {
|
|
105458
|
+
background: ${cssManager.bdTheme("rgba(59, 130, 246, 0.15)", "rgba(59, 130, 246, 0.25)")};
|
|
105459
|
+
color: ${cssManager.bdTheme("#2563eb", "#60a5fa")};
|
|
105460
|
+
}
|
|
105461
|
+
|
|
105462
|
+
.response-code-badge.code-4xx {
|
|
105463
|
+
background: ${cssManager.bdTheme("rgba(250, 204, 21, 0.15)", "rgba(250, 204, 21, 0.25)")};
|
|
105464
|
+
color: ${cssManager.bdTheme("#ca8a04", "#facc15")};
|
|
105465
|
+
}
|
|
105466
|
+
|
|
105467
|
+
.response-code-badge.code-5xx {
|
|
105468
|
+
background: ${cssManager.bdTheme("rgba(239, 68, 68, 0.15)", "rgba(239, 68, 68, 0.25)")};
|
|
105469
|
+
color: ${cssManager.bdTheme("#dc2626", "#ef4444")};
|
|
105470
|
+
}
|
|
105471
|
+
|
|
105472
|
+
/* Copy button */
|
|
105473
|
+
.smtp-copy-button {
|
|
105474
|
+
display: inline-flex;
|
|
105475
|
+
align-items: center;
|
|
105476
|
+
gap: 6px;
|
|
105477
|
+
padding: 6px 12px;
|
|
105478
|
+
border-radius: 6px;
|
|
105479
|
+
border: 1px solid ${cssManager.bdTheme("#e4e4e7", "#27272a")};
|
|
105480
|
+
background: transparent;
|
|
105481
|
+
color: ${cssManager.bdTheme("#71717a", "#a1a1aa")};
|
|
105482
|
+
font-size: 12px;
|
|
105483
|
+
font-weight: 500;
|
|
105484
|
+
cursor: pointer;
|
|
105485
|
+
transition: all 150ms ease;
|
|
105486
|
+
}
|
|
105487
|
+
|
|
105488
|
+
.smtp-copy-button:hover {
|
|
105489
|
+
background: ${cssManager.bdTheme("#f4f4f5", "#27272a")};
|
|
105490
|
+
color: ${cssManager.bdTheme("#18181b", "#fafafa")};
|
|
105491
|
+
border-color: ${cssManager.bdTheme("#d4d4d8", "#3f3f46")};
|
|
105492
|
+
}
|
|
105493
|
+
|
|
105494
|
+
/* Header subtitle enhancements */
|
|
105495
|
+
.smtp-header-subtitle {
|
|
105496
|
+
font-size: 13px;
|
|
105497
|
+
color: ${cssManager.bdTheme("#71717a", "#a1a1aa")};
|
|
105498
|
+
margin-top: 2px;
|
|
105499
|
+
display: flex;
|
|
105500
|
+
align-items: center;
|
|
105501
|
+
gap: 8px;
|
|
105502
|
+
flex-wrap: wrap;
|
|
105503
|
+
}
|
|
105504
|
+
|
|
105505
|
+
.smtp-direction-badge {
|
|
105506
|
+
display: inline-flex;
|
|
105507
|
+
align-items: center;
|
|
105508
|
+
padding: 2px 8px;
|
|
105509
|
+
border-radius: 9999px;
|
|
105510
|
+
font-size: 11px;
|
|
105511
|
+
font-weight: 600;
|
|
105512
|
+
text-transform: uppercase;
|
|
105513
|
+
letter-spacing: 0.3px;
|
|
105514
|
+
}
|
|
105515
|
+
|
|
105516
|
+
.smtp-direction-badge.inbound {
|
|
105517
|
+
background: ${cssManager.bdTheme("rgba(34, 197, 94, 0.12)", "rgba(34, 197, 94, 0.2)")};
|
|
105518
|
+
color: ${cssManager.bdTheme("#16a34a", "#22c55e")};
|
|
105519
|
+
}
|
|
105520
|
+
|
|
105521
|
+
.smtp-direction-badge.outbound {
|
|
105522
|
+
background: ${cssManager.bdTheme("rgba(59, 130, 246, 0.12)", "rgba(59, 130, 246, 0.2)")};
|
|
105523
|
+
color: ${cssManager.bdTheme("#2563eb", "#60a5fa")};
|
|
105524
|
+
}
|
|
105525
|
+
|
|
105526
|
+
.email-body-container {
|
|
105527
|
+
padding: 16px;
|
|
105528
|
+
font-family: monospace;
|
|
105529
|
+
font-size: 13px;
|
|
105530
|
+
max-height: 500px;
|
|
105531
|
+
overflow-y: auto;
|
|
105532
|
+
background: ${cssManager.bdTheme("#fafafa", "#0a0a0a")};
|
|
105533
|
+
white-space: pre-wrap;
|
|
105534
|
+
word-break: break-all;
|
|
105535
|
+
color: ${cssManager.bdTheme("#18181b", "#fafafa")};
|
|
105536
|
+
}
|
|
105537
|
+
|
|
105538
|
+
.tls-badge {
|
|
105539
|
+
display: inline-flex;
|
|
105540
|
+
align-items: center;
|
|
105541
|
+
padding: 2px 8px;
|
|
105542
|
+
border-radius: 4px;
|
|
105543
|
+
font-size: 12px;
|
|
105544
|
+
font-weight: 500;
|
|
105545
|
+
background: ${cssManager.bdTheme("#dcfce7", "rgba(34, 197, 94, 0.2)")};
|
|
105546
|
+
color: ${cssManager.bdTheme("#16a34a", "#22c55e")};
|
|
105547
|
+
}
|
|
105548
|
+
|
|
105549
|
+
.auth-row {
|
|
105550
|
+
display: flex;
|
|
105551
|
+
justify-content: space-between;
|
|
105552
|
+
align-items: center;
|
|
105553
|
+
padding: 8px 0;
|
|
105554
|
+
border-bottom: 1px solid ${cssManager.bdTheme("#f4f4f5", "#27272a")};
|
|
105555
|
+
}
|
|
105556
|
+
|
|
105557
|
+
.auth-row:last-child {
|
|
105558
|
+
border-bottom: none;
|
|
105559
|
+
}
|
|
105560
|
+
|
|
105561
|
+
.auth-label {
|
|
105562
|
+
font-size: 14px;
|
|
105563
|
+
font-weight: 500;
|
|
105564
|
+
color: ${cssManager.bdTheme("#18181b", "#fafafa")};
|
|
105565
|
+
}
|
|
105566
|
+
|
|
105567
|
+
.auth-domain {
|
|
105568
|
+
font-size: 12px;
|
|
105569
|
+
color: ${cssManager.bdTheme("#71717a", "#a1a1aa")};
|
|
105570
|
+
margin-left: 8px;
|
|
105571
|
+
}
|
|
105572
|
+
|
|
105573
|
+
.auth-badge {
|
|
105574
|
+
display: inline-flex;
|
|
105575
|
+
align-items: center;
|
|
105576
|
+
padding: 2px 8px;
|
|
105577
|
+
border-radius: 9999px;
|
|
105578
|
+
font-size: 12px;
|
|
105579
|
+
font-weight: 500;
|
|
105580
|
+
}
|
|
105581
|
+
|
|
105582
|
+
.auth-badge.pass {
|
|
105583
|
+
background: ${cssManager.bdTheme("#dcfce7", "rgba(34, 197, 94, 0.2)")};
|
|
105584
|
+
color: ${cssManager.bdTheme("#16a34a", "#22c55e")};
|
|
105585
|
+
}
|
|
105586
|
+
|
|
105587
|
+
.auth-badge.fail {
|
|
105588
|
+
background: ${cssManager.bdTheme("#fee2e2", "rgba(239, 68, 68, 0.2)")};
|
|
105589
|
+
color: ${cssManager.bdTheme("#dc2626", "#ef4444")};
|
|
105590
|
+
}
|
|
105591
|
+
|
|
105592
|
+
.auth-badge.softfail,
|
|
105593
|
+
.auth-badge.neutral,
|
|
105594
|
+
.auth-badge.none {
|
|
105595
|
+
background: ${cssManager.bdTheme("#fef9c3", "rgba(250, 204, 21, 0.2)")};
|
|
105596
|
+
color: ${cssManager.bdTheme("#ca8a04", "#facc15")};
|
|
105597
|
+
}
|
|
105598
|
+
|
|
105599
|
+
.rejection-card {
|
|
105600
|
+
border-color: ${cssManager.bdTheme("#fecaca", "rgba(239, 68, 68, 0.3)")};
|
|
105601
|
+
}
|
|
105602
|
+
|
|
105603
|
+
.rejection-content {
|
|
105604
|
+
font-size: 14px;
|
|
105605
|
+
color: ${cssManager.bdTheme("#dc2626", "#ef4444")};
|
|
105606
|
+
}
|
|
105607
|
+
|
|
105608
|
+
.rejection-label {
|
|
105609
|
+
font-size: 12px;
|
|
105610
|
+
font-weight: 600;
|
|
105611
|
+
text-transform: uppercase;
|
|
105612
|
+
letter-spacing: 0.05em;
|
|
105613
|
+
color: ${cssManager.bdTheme("#71717a", "#a1a1aa")};
|
|
105614
|
+
margin-bottom: 4px;
|
|
105615
|
+
}
|
|
105616
|
+
|
|
105617
|
+
.rejection-text {
|
|
105618
|
+
font-family: monospace;
|
|
105619
|
+
font-size: 13px;
|
|
105620
|
+
padding: 8px 12px;
|
|
105621
|
+
background: ${cssManager.bdTheme("#fef2f2", "rgba(239, 68, 68, 0.1)")};
|
|
105622
|
+
border-radius: 4px;
|
|
105623
|
+
margin-bottom: 12px;
|
|
105624
|
+
color: ${cssManager.bdTheme("#991b1b", "#fca5a5")};
|
|
105625
|
+
}
|
|
105626
|
+
|
|
105627
|
+
.rejection-text:last-child {
|
|
105628
|
+
margin-bottom: 0;
|
|
105629
|
+
}
|
|
105630
|
+
|
|
105631
|
+
.no-email {
|
|
105632
|
+
padding: 48px 24px;
|
|
105633
|
+
text-align: center;
|
|
105634
|
+
color: ${cssManager.bdTheme("#71717a", "#a1a1aa")};
|
|
105635
|
+
}
|
|
105636
|
+
`
|
|
105637
|
+
]);
|
|
105638
|
+
__runInitializers(_init29, 1, SzMtaDetailView);
|
|
105639
|
+
|
|
105640
|
+
// ts_web/elements/sz-route-card.ts
|
|
105641
|
+
init_dist_ts29();
|
|
105642
|
+
var _route_dec, _a30, _SzRouteCard_decorators, _init30, _route;
|
|
105643
|
+
function formatPorts(ports) {
|
|
105644
|
+
if (typeof ports === "number") return String(ports);
|
|
105645
|
+
if (Array.isArray(ports)) {
|
|
105646
|
+
return ports.map((p7) => {
|
|
105647
|
+
if (typeof p7 === "number") return String(p7);
|
|
105648
|
+
return `${p7.from}\u2013${p7.to}`;
|
|
105649
|
+
}).join(", ");
|
|
105650
|
+
}
|
|
105651
|
+
return String(ports);
|
|
105652
|
+
}
|
|
105653
|
+
function formatTargets(targets) {
|
|
105654
|
+
const result = [];
|
|
105655
|
+
for (const t9 of targets) {
|
|
105656
|
+
const hosts = Array.isArray(t9.host) ? t9.host : [t9.host];
|
|
105657
|
+
const portStr = t9.port === "preserve" ? "(preserve)" : String(t9.port);
|
|
105658
|
+
for (const h9 of hosts) {
|
|
105659
|
+
result.push(`${h9}:${portStr}`);
|
|
105660
|
+
}
|
|
105661
|
+
}
|
|
105662
|
+
return result;
|
|
105663
|
+
}
|
|
105664
|
+
_SzRouteCard_decorators = [t4("sz-route-card")];
|
|
105665
|
+
var SzRouteCard = class extends (_a30 = DeesElement, _route_dec = [n5({ type: Object })], _a30) {
|
|
105666
|
+
constructor() {
|
|
105667
|
+
super(...arguments);
|
|
105668
|
+
__privateAdd(this, _route, __runInitializers(_init30, 8, this, null)), __runInitializers(_init30, 11, this);
|
|
105669
|
+
}
|
|
105670
|
+
render() {
|
|
105671
|
+
if (!this.route) {
|
|
105672
|
+
return b2`<div class="card"><div class="no-route">No route data</div></div>`;
|
|
105673
|
+
}
|
|
105674
|
+
const r11 = this.route;
|
|
105675
|
+
const isEnabled = r11.enabled !== false;
|
|
105676
|
+
const match2 = r11.match;
|
|
105677
|
+
const action = r11.action;
|
|
105678
|
+
const security = r11.security;
|
|
105679
|
+
return b2`
|
|
105680
|
+
<div class="card">
|
|
105681
|
+
<!-- Header -->
|
|
105682
|
+
<div class="header">
|
|
105683
|
+
<div class="header-left">
|
|
105684
|
+
<span class="status-dot ${isEnabled ? "enabled" : "disabled"}"></span>
|
|
105685
|
+
<span class="route-name">${r11.name || r11.id || "Unnamed Route"}</span>
|
|
105686
|
+
</div>
|
|
105687
|
+
<div class="header-badges">
|
|
105688
|
+
<span class="badge ${action.type}">${action.type}</span>
|
|
105689
|
+
<span class="badge ${isEnabled ? "enabled" : "disabled"}">${isEnabled ? "enabled" : "disabled"}</span>
|
|
105690
|
+
</div>
|
|
105691
|
+
</div>
|
|
105692
|
+
|
|
105693
|
+
${r11.description ? b2`<div class="description">${r11.description}</div>` : ""}
|
|
105694
|
+
|
|
105695
|
+
<div class="meta-row">
|
|
105696
|
+
${r11.tags && r11.tags.length > 0 ? b2`<div class="tags">${r11.tags.map((t9) => b2`<span class="tag">${t9}</span>`)}</div>` : b2`<div></div>`}
|
|
105697
|
+
${r11.priority != null ? b2`<span class="priority">Priority: ${r11.priority}</span>` : ""}
|
|
105698
|
+
</div>
|
|
105699
|
+
|
|
105700
|
+
<!-- Match Section -->
|
|
105701
|
+
<div class="section match">
|
|
105702
|
+
<div class="section-label">Match</div>
|
|
105703
|
+
<div class="field-row">
|
|
105704
|
+
<span class="field-key">Ports</span>
|
|
105705
|
+
<span class="field-value mono">${formatPorts(match2.ports)}</span>
|
|
105706
|
+
</div>
|
|
105707
|
+
${match2.domains ? b2`
|
|
105708
|
+
<div class="field-row">
|
|
105709
|
+
<span class="field-key">Domains</span>
|
|
105710
|
+
<span class="field-value">${this.renderDomains(match2.domains)}</span>
|
|
105711
|
+
</div>
|
|
105712
|
+
` : ""}
|
|
105713
|
+
${match2.path ? b2`
|
|
105714
|
+
<div class="field-row">
|
|
105715
|
+
<span class="field-key">Path</span>
|
|
105716
|
+
<span class="field-value mono">${match2.path}</span>
|
|
105717
|
+
</div>
|
|
105718
|
+
` : ""}
|
|
105719
|
+
${match2.protocol ? b2`
|
|
105720
|
+
<div class="field-row">
|
|
105721
|
+
<span class="field-key">Protocol</span>
|
|
105722
|
+
<span class="field-value">
|
|
105723
|
+
<span class="protocol-badge ${match2.protocol}">${match2.protocol}</span>
|
|
105724
|
+
</span>
|
|
105725
|
+
</div>
|
|
105726
|
+
` : ""}
|
|
105727
|
+
${match2.clientIp && match2.clientIp.length > 0 ? b2`
|
|
105728
|
+
<div class="field-row">
|
|
105729
|
+
<span class="field-key">Client</span>
|
|
105730
|
+
<span class="field-value mono">${match2.clientIp.join(", ")}</span>
|
|
105731
|
+
</div>
|
|
105732
|
+
` : ""}
|
|
105733
|
+
${match2.tlsVersion && match2.tlsVersion.length > 0 ? b2`
|
|
105734
|
+
<div class="field-row">
|
|
105735
|
+
<span class="field-key">TLS Ver</span>
|
|
105736
|
+
<span class="field-value">${match2.tlsVersion.join(", ")}</span>
|
|
105737
|
+
</div>
|
|
105738
|
+
` : ""}
|
|
105739
|
+
${match2.headers ? b2`
|
|
105740
|
+
<div class="field-row">
|
|
105741
|
+
<span class="field-key">Headers</span>
|
|
105742
|
+
<span class="field-value">
|
|
105743
|
+
${Object.entries(match2.headers).map(
|
|
105744
|
+
([k4, v5]) => b2`<span class="header-pair">${k4}=${v5}</span> `
|
|
105745
|
+
)}
|
|
105746
|
+
</span>
|
|
105747
|
+
</div>
|
|
105748
|
+
` : ""}
|
|
105749
|
+
</div>
|
|
105750
|
+
|
|
105751
|
+
<!-- Action Section -->
|
|
105752
|
+
<div class="section action">
|
|
105753
|
+
<div class="section-label">Action</div>
|
|
105754
|
+
${action.targets && action.targets.length > 0 ? b2`
|
|
105755
|
+
<div class="field-row">
|
|
105756
|
+
<span class="field-key">Targets</span>
|
|
105757
|
+
<span class="field-value mono">${formatTargets(action.targets).join(", ")}</span>
|
|
105758
|
+
</div>
|
|
105759
|
+
` : ""}
|
|
105760
|
+
${action.tls ? b2`
|
|
105761
|
+
<div class="field-row">
|
|
105762
|
+
<span class="field-key">TLS</span>
|
|
105763
|
+
<span class="field-value">
|
|
105764
|
+
${action.tls.mode}
|
|
105765
|
+
${action.tls.certificate ? action.tls.certificate === "auto" ? b2` <span class="tls-badge auto">auto cert</span>` : b2` <span class="tls-badge custom">custom cert</span>` : ""}
|
|
105766
|
+
</span>
|
|
105767
|
+
</div>
|
|
105768
|
+
` : ""}
|
|
105769
|
+
${action.forwardingEngine ? b2`
|
|
105770
|
+
<div class="field-row">
|
|
105771
|
+
<span class="field-key">Engine</span>
|
|
105772
|
+
<span class="field-value"><span class="engine-badge">${action.forwardingEngine}</span></span>
|
|
105773
|
+
</div>
|
|
105774
|
+
` : ""}
|
|
105775
|
+
${action.loadBalancing ? b2`
|
|
105776
|
+
<div class="field-row">
|
|
105777
|
+
<span class="field-key">LB</span>
|
|
105778
|
+
<span class="field-value">${action.loadBalancing.algorithm}</span>
|
|
105779
|
+
</div>
|
|
105780
|
+
` : ""}
|
|
105781
|
+
${action.websocket?.enabled ? b2`
|
|
105782
|
+
<div class="field-row">
|
|
105783
|
+
<span class="field-key">WS</span>
|
|
105784
|
+
<span class="field-value"><span class="badge enabled">enabled</span></span>
|
|
105785
|
+
</div>
|
|
105786
|
+
` : ""}
|
|
105787
|
+
</div>
|
|
105788
|
+
|
|
105789
|
+
<!-- Security Section -->
|
|
105790
|
+
${security ? b2`
|
|
105791
|
+
<div class="section security">
|
|
105792
|
+
<div class="section-label">Security</div>
|
|
105793
|
+
${security.ipAllowList && security.ipAllowList.length > 0 ? b2`
|
|
105794
|
+
<div class="field-row">
|
|
105795
|
+
<span class="field-key">Allow</span>
|
|
105796
|
+
<span class="field-value mono">${security.ipAllowList.join(", ")}</span>
|
|
105797
|
+
</div>
|
|
105798
|
+
` : ""}
|
|
105799
|
+
${security.ipBlockList && security.ipBlockList.length > 0 ? b2`
|
|
105800
|
+
<div class="field-row">
|
|
105801
|
+
<span class="field-key">Block</span>
|
|
105802
|
+
<span class="field-value mono">${security.ipBlockList.join(", ")}</span>
|
|
105803
|
+
</div>
|
|
105804
|
+
` : ""}
|
|
105805
|
+
${security.rateLimit?.enabled ? b2`
|
|
105806
|
+
<div class="field-row">
|
|
105807
|
+
<span class="field-key">Rate</span>
|
|
105808
|
+
<span class="field-value">${security.rateLimit.maxRequests} req / ${security.rateLimit.window}s</span>
|
|
105809
|
+
</div>
|
|
105810
|
+
` : ""}
|
|
105811
|
+
${security.maxConnections ? b2`
|
|
105812
|
+
<div class="field-row">
|
|
105813
|
+
<span class="field-key">Max Conn</span>
|
|
105814
|
+
<span class="field-value">${security.maxConnections}</span>
|
|
105815
|
+
</div>
|
|
105816
|
+
` : ""}
|
|
105817
|
+
</div>
|
|
105818
|
+
` : ""}
|
|
105819
|
+
|
|
105820
|
+
<!-- Feature Icons Row -->
|
|
105821
|
+
${this.renderFeatures()}
|
|
105822
|
+
</div>
|
|
105823
|
+
`;
|
|
105824
|
+
}
|
|
105825
|
+
renderDomains(domains) {
|
|
105826
|
+
const list5 = Array.isArray(domains) ? domains : [domains];
|
|
105827
|
+
return b2`${list5.map(
|
|
105828
|
+
(d6) => b2`<span class="domain-chip ${d6.includes("*") ? "glob" : ""}">${d6}</span>`
|
|
105829
|
+
)}`;
|
|
105830
|
+
}
|
|
105831
|
+
renderFeatures() {
|
|
105832
|
+
if (!this.route) return b2``;
|
|
105833
|
+
const features = [];
|
|
105834
|
+
const action = this.route.action;
|
|
105835
|
+
const security = this.route.security;
|
|
105836
|
+
const headers = this.route.headers;
|
|
105837
|
+
if (action.tls) {
|
|
105838
|
+
features.push(b2`<span class="feature"><span class="feature-icon">🔒</span>TLS</span>`);
|
|
105839
|
+
}
|
|
105840
|
+
if (action.websocket?.enabled) {
|
|
105841
|
+
features.push(b2`<span class="feature"><span class="feature-icon">↔</span>WS</span>`);
|
|
105842
|
+
}
|
|
105843
|
+
if (action.loadBalancing) {
|
|
105844
|
+
features.push(b2`<span class="feature"><span class="feature-icon">⚖</span>LB</span>`);
|
|
105845
|
+
}
|
|
105846
|
+
if (security) {
|
|
105847
|
+
features.push(b2`<span class="feature"><span class="feature-icon">🛡</span>Security</span>`);
|
|
105848
|
+
}
|
|
105849
|
+
if (headers) {
|
|
105850
|
+
features.push(b2`<span class="feature"><span class="feature-icon">⚙</span>Headers</span>`);
|
|
105851
|
+
}
|
|
105852
|
+
if (features.length === 0) return b2``;
|
|
105853
|
+
return b2`<div class="features-row">${features}</div>`;
|
|
105854
|
+
}
|
|
105855
|
+
};
|
|
105856
|
+
_init30 = __decoratorStart(_a30);
|
|
105857
|
+
_route = new WeakMap();
|
|
105858
|
+
__decorateElement(_init30, 4, "route", _route_dec, SzRouteCard, _route);
|
|
105859
|
+
SzRouteCard = __decorateElement(_init30, 0, "SzRouteCard", _SzRouteCard_decorators, SzRouteCard);
|
|
105860
|
+
__publicField(SzRouteCard, "demo", () => b2`
|
|
105861
|
+
<div style="padding: 24px; max-width: 520px;">
|
|
105862
|
+
<sz-route-card
|
|
105863
|
+
.route=${{
|
|
105864
|
+
name: "API Gateway",
|
|
105865
|
+
description: "Main API gateway with TLS termination and load balancing",
|
|
105866
|
+
enabled: true,
|
|
105867
|
+
priority: 10,
|
|
105868
|
+
tags: ["web", "api", "production"],
|
|
105869
|
+
match: {
|
|
105870
|
+
ports: [443, 8443],
|
|
105871
|
+
domains: ["api.example.com", "*.api.serve.zone"],
|
|
105872
|
+
path: "/api/*",
|
|
105873
|
+
protocol: "http",
|
|
105874
|
+
clientIp: ["10.0.0.0/8"]
|
|
105875
|
+
},
|
|
105876
|
+
action: {
|
|
105877
|
+
type: "forward",
|
|
105878
|
+
targets: [
|
|
105879
|
+
{ host: ["10.0.0.1", "10.0.0.2"], port: 8080 }
|
|
105880
|
+
],
|
|
105881
|
+
tls: { mode: "terminate", certificate: "auto" },
|
|
105882
|
+
websocket: { enabled: true },
|
|
105883
|
+
loadBalancing: { algorithm: "round-robin" },
|
|
105884
|
+
forwardingEngine: "nftables"
|
|
105885
|
+
},
|
|
105886
|
+
security: {
|
|
105887
|
+
ipAllowList: ["10.0.0.0/8"],
|
|
105888
|
+
ipBlockList: ["192.168.100.0/24"],
|
|
105889
|
+
rateLimit: { enabled: true, maxRequests: 100, window: 60 },
|
|
105890
|
+
maxConnections: 1e3
|
|
105891
|
+
}
|
|
105892
|
+
}}
|
|
105893
|
+
></sz-route-card>
|
|
105894
|
+
</div>
|
|
105895
|
+
`);
|
|
105896
|
+
__publicField(SzRouteCard, "demoGroups", ["Routes"]);
|
|
105897
|
+
__publicField(SzRouteCard, "styles", [
|
|
105898
|
+
cssManager.defaultStyles,
|
|
105899
|
+
i`
|
|
105900
|
+
:host {
|
|
105901
|
+
display: block;
|
|
105902
|
+
}
|
|
105903
|
+
|
|
105904
|
+
.card {
|
|
105905
|
+
background: ${cssManager.bdTheme("#ffffff", "#09090b")};
|
|
105906
|
+
border: 1px solid ${cssManager.bdTheme("#e4e4e7", "#27272a")};
|
|
105907
|
+
border-radius: 8px;
|
|
105908
|
+
padding: 20px;
|
|
105909
|
+
transition: border-color 200ms ease, box-shadow 200ms ease;
|
|
105910
|
+
}
|
|
105911
|
+
|
|
105912
|
+
.card:hover {
|
|
105913
|
+
border-color: ${cssManager.bdTheme("#d4d4d8", "#3f3f46")};
|
|
105914
|
+
box-shadow: 0 2px 8px ${cssManager.bdTheme("rgba(0,0,0,0.06)", "rgba(0,0,0,0.2)")};
|
|
105915
|
+
}
|
|
105916
|
+
|
|
105917
|
+
/* Header */
|
|
105918
|
+
.header {
|
|
105919
|
+
display: flex;
|
|
105920
|
+
align-items: flex-start;
|
|
105921
|
+
justify-content: space-between;
|
|
105922
|
+
gap: 12px;
|
|
105923
|
+
margin-bottom: 4px;
|
|
105924
|
+
}
|
|
105925
|
+
|
|
105926
|
+
.header-left {
|
|
105927
|
+
display: flex;
|
|
105928
|
+
align-items: center;
|
|
105929
|
+
gap: 8px;
|
|
105930
|
+
min-width: 0;
|
|
105931
|
+
}
|
|
105932
|
+
|
|
105933
|
+
.status-dot {
|
|
105934
|
+
width: 8px;
|
|
105935
|
+
height: 8px;
|
|
105936
|
+
border-radius: 50%;
|
|
105937
|
+
flex-shrink: 0;
|
|
105938
|
+
}
|
|
105939
|
+
|
|
105940
|
+
.status-dot.enabled {
|
|
105941
|
+
background: ${cssManager.bdTheme("#22c55e", "#22c55e")};
|
|
105942
|
+
box-shadow: 0 0 6px ${cssManager.bdTheme("rgba(34,197,94,0.4)", "rgba(34,197,94,0.3)")};
|
|
105943
|
+
}
|
|
105944
|
+
|
|
105945
|
+
.status-dot.disabled {
|
|
105946
|
+
background: ${cssManager.bdTheme("#a1a1aa", "#52525b")};
|
|
105947
|
+
}
|
|
105948
|
+
|
|
105949
|
+
.route-name {
|
|
105950
|
+
font-size: 15px;
|
|
105951
|
+
font-weight: 600;
|
|
105952
|
+
color: ${cssManager.bdTheme("#18181b", "#fafafa")};
|
|
105953
|
+
white-space: nowrap;
|
|
105954
|
+
overflow: hidden;
|
|
105955
|
+
text-overflow: ellipsis;
|
|
105956
|
+
}
|
|
105957
|
+
|
|
105958
|
+
.header-badges {
|
|
105959
|
+
display: flex;
|
|
105960
|
+
gap: 6px;
|
|
105961
|
+
flex-shrink: 0;
|
|
105962
|
+
}
|
|
105963
|
+
|
|
105964
|
+
.badge {
|
|
105965
|
+
display: inline-flex;
|
|
105966
|
+
align-items: center;
|
|
105967
|
+
padding: 2px 8px;
|
|
105968
|
+
border-radius: 9999px;
|
|
105969
|
+
font-size: 11px;
|
|
105970
|
+
font-weight: 500;
|
|
105971
|
+
white-space: nowrap;
|
|
105972
|
+
}
|
|
105973
|
+
|
|
105974
|
+
.badge.forward {
|
|
105975
|
+
background: ${cssManager.bdTheme("#dbeafe", "rgba(59, 130, 246, 0.2)")};
|
|
105976
|
+
color: ${cssManager.bdTheme("#2563eb", "#60a5fa")};
|
|
105977
|
+
}
|
|
105978
|
+
|
|
105979
|
+
.badge.socket-handler {
|
|
105980
|
+
background: ${cssManager.bdTheme("#ede9fe", "rgba(139, 92, 246, 0.2)")};
|
|
105981
|
+
color: ${cssManager.bdTheme("#7c3aed", "#a78bfa")};
|
|
105982
|
+
}
|
|
105983
|
+
|
|
105984
|
+
.badge.enabled {
|
|
105985
|
+
background: ${cssManager.bdTheme("#dcfce7", "rgba(34, 197, 94, 0.2)")};
|
|
105986
|
+
color: ${cssManager.bdTheme("#16a34a", "#22c55e")};
|
|
105987
|
+
}
|
|
105988
|
+
|
|
105989
|
+
.badge.disabled {
|
|
105990
|
+
background: ${cssManager.bdTheme("#f4f4f5", "rgba(113, 113, 122, 0.2)")};
|
|
105991
|
+
color: ${cssManager.bdTheme("#71717a", "#a1a1aa")};
|
|
105992
|
+
}
|
|
105993
|
+
|
|
105994
|
+
.description {
|
|
105995
|
+
font-size: 13px;
|
|
105996
|
+
color: ${cssManager.bdTheme("#71717a", "#a1a1aa")};
|
|
105997
|
+
margin-bottom: 8px;
|
|
105998
|
+
line-height: 1.4;
|
|
105999
|
+
}
|
|
106000
|
+
|
|
106001
|
+
.meta-row {
|
|
106002
|
+
display: flex;
|
|
106003
|
+
align-items: center;
|
|
106004
|
+
justify-content: space-between;
|
|
106005
|
+
flex-wrap: wrap;
|
|
106006
|
+
gap: 6px;
|
|
106007
|
+
margin-bottom: 16px;
|
|
106008
|
+
}
|
|
106009
|
+
|
|
106010
|
+
.tags {
|
|
106011
|
+
display: flex;
|
|
106012
|
+
flex-wrap: wrap;
|
|
106013
|
+
gap: 4px;
|
|
106014
|
+
}
|
|
106015
|
+
|
|
106016
|
+
.tag {
|
|
106017
|
+
padding: 2px 8px;
|
|
106018
|
+
background: ${cssManager.bdTheme("#f4f4f5", "#27272a")};
|
|
106019
|
+
border-radius: 4px;
|
|
106020
|
+
font-size: 11px;
|
|
106021
|
+
font-weight: 500;
|
|
106022
|
+
color: ${cssManager.bdTheme("#52525b", "#a1a1aa")};
|
|
106023
|
+
}
|
|
106024
|
+
|
|
106025
|
+
.priority {
|
|
106026
|
+
font-size: 11px;
|
|
106027
|
+
color: ${cssManager.bdTheme("#a1a1aa", "#71717a")};
|
|
106028
|
+
font-weight: 500;
|
|
106029
|
+
}
|
|
106030
|
+
|
|
106031
|
+
/* Sections */
|
|
106032
|
+
.section {
|
|
106033
|
+
border-left: 3px solid;
|
|
106034
|
+
padding: 10px 14px;
|
|
106035
|
+
margin-bottom: 12px;
|
|
106036
|
+
border-radius: 0 6px 6px 0;
|
|
106037
|
+
background: ${cssManager.bdTheme("#fafafa", "#0a0a0a")};
|
|
106038
|
+
}
|
|
106039
|
+
|
|
106040
|
+
.section:last-of-type {
|
|
106041
|
+
margin-bottom: 0;
|
|
106042
|
+
}
|
|
106043
|
+
|
|
106044
|
+
.section.match {
|
|
106045
|
+
border-left-color: ${cssManager.bdTheme("#3b82f6", "#3b82f6")};
|
|
106046
|
+
}
|
|
106047
|
+
|
|
106048
|
+
.section.action {
|
|
106049
|
+
border-left-color: ${cssManager.bdTheme("#22c55e", "#22c55e")};
|
|
106050
|
+
}
|
|
106051
|
+
|
|
106052
|
+
.section.security {
|
|
106053
|
+
border-left-color: ${cssManager.bdTheme("#f59e0b", "#f59e0b")};
|
|
106054
|
+
}
|
|
106055
|
+
|
|
106056
|
+
.section-label {
|
|
106057
|
+
font-size: 10px;
|
|
106058
|
+
font-weight: 600;
|
|
106059
|
+
text-transform: uppercase;
|
|
106060
|
+
letter-spacing: 0.08em;
|
|
106061
|
+
color: ${cssManager.bdTheme("#a1a1aa", "#71717a")};
|
|
106062
|
+
margin-bottom: 8px;
|
|
106063
|
+
}
|
|
106064
|
+
|
|
106065
|
+
.field-row {
|
|
106066
|
+
display: flex;
|
|
106067
|
+
gap: 8px;
|
|
106068
|
+
margin-bottom: 5px;
|
|
106069
|
+
font-size: 13px;
|
|
106070
|
+
line-height: 1.5;
|
|
106071
|
+
}
|
|
106072
|
+
|
|
106073
|
+
.field-row:last-child {
|
|
106074
|
+
margin-bottom: 0;
|
|
106075
|
+
}
|
|
106076
|
+
|
|
106077
|
+
.field-key {
|
|
106078
|
+
color: ${cssManager.bdTheme("#71717a", "#a1a1aa")};
|
|
106079
|
+
min-width: 64px;
|
|
106080
|
+
flex-shrink: 0;
|
|
106081
|
+
font-weight: 500;
|
|
106082
|
+
}
|
|
106083
|
+
|
|
106084
|
+
.field-value {
|
|
106085
|
+
color: ${cssManager.bdTheme("#18181b", "#e4e4e7")};
|
|
106086
|
+
word-break: break-all;
|
|
106087
|
+
}
|
|
106088
|
+
|
|
106089
|
+
.domain-chip {
|
|
106090
|
+
display: inline-flex;
|
|
106091
|
+
padding: 1px 6px;
|
|
106092
|
+
background: ${cssManager.bdTheme("#eff6ff", "rgba(59, 130, 246, 0.1)")};
|
|
106093
|
+
border-radius: 3px;
|
|
106094
|
+
font-size: 12px;
|
|
106095
|
+
margin-right: 4px;
|
|
106096
|
+
margin-bottom: 2px;
|
|
106097
|
+
font-family: monospace;
|
|
106098
|
+
}
|
|
106099
|
+
|
|
106100
|
+
.domain-chip.glob {
|
|
106101
|
+
background: ${cssManager.bdTheme("#fef3c7", "rgba(245, 158, 11, 0.15)")};
|
|
106102
|
+
color: ${cssManager.bdTheme("#92400e", "#fbbf24")};
|
|
106103
|
+
}
|
|
106104
|
+
|
|
106105
|
+
.mono {
|
|
106106
|
+
font-family: monospace;
|
|
106107
|
+
font-size: 12px;
|
|
106108
|
+
}
|
|
106109
|
+
|
|
106110
|
+
.protocol-badge {
|
|
106111
|
+
display: inline-flex;
|
|
106112
|
+
padding: 1px 6px;
|
|
106113
|
+
border-radius: 3px;
|
|
106114
|
+
font-size: 11px;
|
|
106115
|
+
font-weight: 500;
|
|
106116
|
+
}
|
|
106117
|
+
|
|
106118
|
+
.protocol-badge.http {
|
|
106119
|
+
background: ${cssManager.bdTheme("#dbeafe", "rgba(59, 130, 246, 0.2)")};
|
|
106120
|
+
color: ${cssManager.bdTheme("#2563eb", "#60a5fa")};
|
|
106121
|
+
}
|
|
106122
|
+
|
|
106123
|
+
.protocol-badge.tcp {
|
|
106124
|
+
background: ${cssManager.bdTheme("#dcfce7", "rgba(34, 197, 94, 0.2)")};
|
|
106125
|
+
color: ${cssManager.bdTheme("#16a34a", "#22c55e")};
|
|
106126
|
+
}
|
|
106127
|
+
|
|
106128
|
+
.tls-badge {
|
|
106129
|
+
display: inline-flex;
|
|
106130
|
+
padding: 1px 6px;
|
|
106131
|
+
border-radius: 3px;
|
|
106132
|
+
font-size: 11px;
|
|
106133
|
+
font-weight: 500;
|
|
106134
|
+
}
|
|
106135
|
+
|
|
106136
|
+
.tls-badge.auto {
|
|
106137
|
+
background: ${cssManager.bdTheme("#dcfce7", "rgba(34, 197, 94, 0.2)")};
|
|
106138
|
+
color: ${cssManager.bdTheme("#16a34a", "#22c55e")};
|
|
106139
|
+
}
|
|
106140
|
+
|
|
106141
|
+
.tls-badge.custom {
|
|
106142
|
+
background: ${cssManager.bdTheme("#ffedd5", "rgba(249, 115, 22, 0.2)")};
|
|
106143
|
+
color: ${cssManager.bdTheme("#c2410c", "#fb923c")};
|
|
106144
|
+
}
|
|
106145
|
+
|
|
106146
|
+
.engine-badge {
|
|
106147
|
+
display: inline-flex;
|
|
106148
|
+
padding: 1px 6px;
|
|
106149
|
+
border-radius: 3px;
|
|
106150
|
+
font-size: 11px;
|
|
106151
|
+
font-weight: 500;
|
|
106152
|
+
background: ${cssManager.bdTheme("#fae8ff", "rgba(168, 85, 247, 0.2)")};
|
|
106153
|
+
color: ${cssManager.bdTheme("#7e22ce", "#c084fc")};
|
|
106154
|
+
}
|
|
106155
|
+
|
|
106156
|
+
.header-pair {
|
|
106157
|
+
display: inline;
|
|
106158
|
+
font-family: monospace;
|
|
106159
|
+
font-size: 12px;
|
|
106160
|
+
}
|
|
106161
|
+
|
|
106162
|
+
/* Feature icons */
|
|
106163
|
+
.features-row {
|
|
106164
|
+
display: flex;
|
|
106165
|
+
flex-wrap: wrap;
|
|
106166
|
+
gap: 10px;
|
|
106167
|
+
margin-top: 14px;
|
|
106168
|
+
padding-top: 12px;
|
|
106169
|
+
border-top: 1px solid ${cssManager.bdTheme("#f4f4f5", "#1a1a1a")};
|
|
106170
|
+
}
|
|
106171
|
+
|
|
106172
|
+
.feature {
|
|
106173
|
+
display: flex;
|
|
106174
|
+
align-items: center;
|
|
106175
|
+
gap: 4px;
|
|
106176
|
+
font-size: 11px;
|
|
106177
|
+
font-weight: 500;
|
|
106178
|
+
color: ${cssManager.bdTheme("#71717a", "#a1a1aa")};
|
|
106179
|
+
}
|
|
106180
|
+
|
|
106181
|
+
.feature-icon {
|
|
106182
|
+
font-size: 13px;
|
|
106183
|
+
}
|
|
106184
|
+
|
|
106185
|
+
.no-route {
|
|
106186
|
+
text-align: center;
|
|
106187
|
+
padding: 24px;
|
|
106188
|
+
color: ${cssManager.bdTheme("#a1a1aa", "#52525b")};
|
|
106189
|
+
font-size: 13px;
|
|
106190
|
+
}
|
|
106191
|
+
`
|
|
106192
|
+
]);
|
|
106193
|
+
__runInitializers(_init30, 1, SzRouteCard);
|
|
106194
|
+
|
|
106195
|
+
// ts_web/elements/sz-route-list-view.ts
|
|
106196
|
+
init_dist_ts29();
|
|
106197
|
+
var _enabledFilter_dec, _actionFilter_dec, _searchQuery_dec2, _routes_dec, _a31, _SzRouteListView_decorators, _init31, _routes, _searchQuery2, _actionFilter, _enabledFilter;
|
|
106198
|
+
_SzRouteListView_decorators = [t4("sz-route-list-view")];
|
|
106199
|
+
var SzRouteListView = class extends (_a31 = DeesElement, _routes_dec = [n5({ type: Array })], _searchQuery_dec2 = [r5()], _actionFilter_dec = [r5()], _enabledFilter_dec = [r5()], _a31) {
|
|
106200
|
+
constructor() {
|
|
106201
|
+
super(...arguments);
|
|
106202
|
+
__privateAdd(this, _routes, __runInitializers(_init31, 8, this, [])), __runInitializers(_init31, 11, this);
|
|
106203
|
+
__privateAdd(this, _searchQuery2, __runInitializers(_init31, 12, this, "")), __runInitializers(_init31, 15, this);
|
|
106204
|
+
__privateAdd(this, _actionFilter, __runInitializers(_init31, 16, this, "all")), __runInitializers(_init31, 19, this);
|
|
106205
|
+
__privateAdd(this, _enabledFilter, __runInitializers(_init31, 20, this, "all")), __runInitializers(_init31, 23, this);
|
|
106206
|
+
}
|
|
106207
|
+
get filteredRoutes() {
|
|
106208
|
+
return this.routes.filter((route) => {
|
|
106209
|
+
if (this.actionFilter !== "all" && route.action.type !== this.actionFilter) return false;
|
|
106210
|
+
if (this.enabledFilter === "enabled" && route.enabled === false) return false;
|
|
106211
|
+
if (this.enabledFilter === "disabled" && route.enabled !== false) return false;
|
|
106212
|
+
if (this.searchQuery) {
|
|
106213
|
+
const q = this.searchQuery.toLowerCase();
|
|
106214
|
+
return this.routeMatchesSearch(route, q);
|
|
106215
|
+
}
|
|
106216
|
+
return true;
|
|
106217
|
+
});
|
|
106218
|
+
}
|
|
106219
|
+
routeMatchesSearch(route, q) {
|
|
106220
|
+
if (route.name?.toLowerCase().includes(q)) return true;
|
|
106221
|
+
if (route.description?.toLowerCase().includes(q)) return true;
|
|
106222
|
+
if (route.match.domains) {
|
|
106223
|
+
const domains = Array.isArray(route.match.domains) ? route.match.domains : [route.match.domains];
|
|
106224
|
+
if (domains.some((d6) => d6.toLowerCase().includes(q))) return true;
|
|
106225
|
+
}
|
|
106226
|
+
const portsStr = this.formatPortsForSearch(route.match.ports);
|
|
106227
|
+
if (portsStr.includes(q)) return true;
|
|
106228
|
+
if (route.match.path?.toLowerCase().includes(q)) return true;
|
|
106229
|
+
if (route.match.clientIp?.some((ip) => ip.includes(q))) return true;
|
|
106230
|
+
if (route.action.targets) {
|
|
106231
|
+
for (const t9 of route.action.targets) {
|
|
106232
|
+
const hosts = Array.isArray(t9.host) ? t9.host : [t9.host];
|
|
106233
|
+
if (hosts.some((h9) => h9.toLowerCase().includes(q))) return true;
|
|
106234
|
+
}
|
|
106235
|
+
}
|
|
106236
|
+
if (route.tags?.some((t9) => t9.toLowerCase().includes(q))) return true;
|
|
106237
|
+
return false;
|
|
106238
|
+
}
|
|
106239
|
+
formatPortsForSearch(ports) {
|
|
106240
|
+
if (typeof ports === "number") return String(ports);
|
|
106241
|
+
if (Array.isArray(ports)) {
|
|
106242
|
+
return ports.map((p7) => typeof p7 === "number" ? String(p7) : `${p7.from}-${p7.to}`).join(" ");
|
|
106243
|
+
}
|
|
106244
|
+
return String(ports);
|
|
106245
|
+
}
|
|
106246
|
+
render() {
|
|
106247
|
+
const filtered = this.filteredRoutes;
|
|
106248
|
+
return b2`
|
|
106249
|
+
<div class="filter-bar">
|
|
106250
|
+
<input
|
|
106251
|
+
class="search-input"
|
|
106252
|
+
type="text"
|
|
106253
|
+
placeholder="Search routes by domain, IP, port, path, or tag..."
|
|
106254
|
+
.value=${this.searchQuery}
|
|
106255
|
+
@input=${(e11) => {
|
|
106256
|
+
this.searchQuery = e11.target.value;
|
|
106257
|
+
}}
|
|
106258
|
+
/>
|
|
106259
|
+
<div class="chip-group">
|
|
106260
|
+
${["all", "forward", "socket-handler"].map(
|
|
106261
|
+
(type5) => b2`
|
|
106262
|
+
<button
|
|
106263
|
+
class="chip ${this.actionFilter === type5 ? "active" : ""}"
|
|
106264
|
+
@click=${() => {
|
|
106265
|
+
this.actionFilter = type5;
|
|
106266
|
+
}}
|
|
106267
|
+
>
|
|
106268
|
+
${type5 === "all" ? "All" : type5 === "forward" ? "Forward" : "Socket Handler"}
|
|
106269
|
+
</button>
|
|
106270
|
+
`
|
|
106271
|
+
)}
|
|
106272
|
+
</div>
|
|
106273
|
+
<div class="chip-group">
|
|
106274
|
+
${["all", "enabled", "disabled"].map(
|
|
106275
|
+
(status) => b2`
|
|
106276
|
+
<button
|
|
106277
|
+
class="chip ${this.enabledFilter === status ? "active" : ""}"
|
|
106278
|
+
@click=${() => {
|
|
106279
|
+
this.enabledFilter = status;
|
|
106280
|
+
}}
|
|
106281
|
+
>
|
|
106282
|
+
${status.charAt(0).toUpperCase() + status.slice(1)}
|
|
106283
|
+
</button>
|
|
106284
|
+
`
|
|
106285
|
+
)}
|
|
106286
|
+
</div>
|
|
106287
|
+
</div>
|
|
106288
|
+
|
|
106289
|
+
<div class="results-count">
|
|
106290
|
+
Showing ${filtered.length} of ${this.routes.length} routes
|
|
106291
|
+
</div>
|
|
106292
|
+
|
|
106293
|
+
${filtered.length > 0 ? b2`
|
|
106294
|
+
<div class="grid">
|
|
106295
|
+
${filtered.map(
|
|
106296
|
+
(route) => b2`
|
|
106297
|
+
<sz-route-card
|
|
106298
|
+
.route=${route}
|
|
106299
|
+
@click=${() => this.handleRouteClick(route)}
|
|
106300
|
+
></sz-route-card>
|
|
106301
|
+
`
|
|
106302
|
+
)}
|
|
106303
|
+
</div>
|
|
106304
|
+
` : b2`
|
|
106305
|
+
<div class="empty-state">
|
|
106306
|
+
<div class="empty-state-icon">🔍</div>
|
|
106307
|
+
<div>No routes match your filters</div>
|
|
106308
|
+
</div>
|
|
106309
|
+
`}
|
|
106310
|
+
`;
|
|
106311
|
+
}
|
|
106312
|
+
handleRouteClick(route) {
|
|
106313
|
+
this.dispatchEvent(
|
|
106314
|
+
new CustomEvent("route-click", {
|
|
106315
|
+
detail: route,
|
|
106316
|
+
bubbles: true,
|
|
106317
|
+
composed: true
|
|
106318
|
+
})
|
|
106319
|
+
);
|
|
106320
|
+
}
|
|
106321
|
+
};
|
|
106322
|
+
_init31 = __decoratorStart(_a31);
|
|
106323
|
+
_routes = new WeakMap();
|
|
106324
|
+
_searchQuery2 = new WeakMap();
|
|
106325
|
+
_actionFilter = new WeakMap();
|
|
106326
|
+
_enabledFilter = new WeakMap();
|
|
106327
|
+
__decorateElement(_init31, 4, "routes", _routes_dec, SzRouteListView, _routes);
|
|
106328
|
+
__decorateElement(_init31, 4, "searchQuery", _searchQuery_dec2, SzRouteListView, _searchQuery2);
|
|
106329
|
+
__decorateElement(_init31, 4, "actionFilter", _actionFilter_dec, SzRouteListView, _actionFilter);
|
|
106330
|
+
__decorateElement(_init31, 4, "enabledFilter", _enabledFilter_dec, SzRouteListView, _enabledFilter);
|
|
106331
|
+
SzRouteListView = __decorateElement(_init31, 0, "SzRouteListView", _SzRouteListView_decorators, SzRouteListView);
|
|
106332
|
+
__publicField(SzRouteListView, "demo", () => b2`
|
|
106333
|
+
<div style="padding: 24px; max-width: 1200px;">
|
|
106334
|
+
<sz-route-list-view
|
|
106335
|
+
.routes=${[
|
|
106336
|
+
{
|
|
106337
|
+
name: "HTTPS Gateway",
|
|
106338
|
+
description: "Main web gateway with TLS termination",
|
|
106339
|
+
enabled: true,
|
|
106340
|
+
tags: ["web", "https", "production"],
|
|
106341
|
+
match: { ports: 443, domains: ["*.example.com", "serve.zone"], protocol: "http" },
|
|
106342
|
+
action: {
|
|
106343
|
+
type: "forward",
|
|
106344
|
+
targets: [{ host: "10.0.0.1", port: 8080 }],
|
|
106345
|
+
tls: { mode: "terminate", certificate: "auto" }
|
|
106346
|
+
}
|
|
106347
|
+
},
|
|
106348
|
+
{
|
|
106349
|
+
name: "SMTP Inbound",
|
|
106350
|
+
description: "Email relay for incoming mail",
|
|
106351
|
+
enabled: true,
|
|
106352
|
+
tags: ["email", "smtp"],
|
|
106353
|
+
match: { ports: 25, domains: "mail.serve.zone" },
|
|
106354
|
+
action: {
|
|
106355
|
+
type: "forward",
|
|
106356
|
+
targets: [{ host: "10.0.1.5", port: 25 }]
|
|
106357
|
+
}
|
|
106358
|
+
},
|
|
106359
|
+
{
|
|
106360
|
+
name: "WebSocket API",
|
|
106361
|
+
description: "Real-time WebSocket connections",
|
|
106362
|
+
enabled: true,
|
|
106363
|
+
tags: ["web", "api"],
|
|
106364
|
+
match: { ports: 443, domains: "ws.example.com", path: "/ws/*" },
|
|
106365
|
+
action: {
|
|
106366
|
+
type: "forward",
|
|
106367
|
+
targets: [{ host: "10.0.0.3", port: 9090 }],
|
|
106368
|
+
websocket: { enabled: true },
|
|
106369
|
+
tls: { mode: "terminate", certificate: "auto" }
|
|
106370
|
+
}
|
|
106371
|
+
},
|
|
106372
|
+
{
|
|
106373
|
+
name: "Maintenance Page",
|
|
106374
|
+
enabled: false,
|
|
106375
|
+
tags: ["web"],
|
|
106376
|
+
match: { ports: [80, 443], domains: "old.example.com" },
|
|
106377
|
+
action: { type: "socket-handler" }
|
|
106378
|
+
}
|
|
106379
|
+
]}
|
|
106380
|
+
></sz-route-list-view>
|
|
106381
|
+
</div>
|
|
106382
|
+
`);
|
|
106383
|
+
__publicField(SzRouteListView, "demoGroups", ["Routes"]);
|
|
106384
|
+
__publicField(SzRouteListView, "styles", [
|
|
106385
|
+
cssManager.defaultStyles,
|
|
106386
|
+
i`
|
|
106387
|
+
:host {
|
|
106388
|
+
display: block;
|
|
106389
|
+
}
|
|
106390
|
+
|
|
106391
|
+
.filter-bar {
|
|
106392
|
+
display: flex;
|
|
106393
|
+
flex-wrap: wrap;
|
|
106394
|
+
gap: 12px;
|
|
106395
|
+
align-items: center;
|
|
106396
|
+
margin-bottom: 12px;
|
|
106397
|
+
}
|
|
106398
|
+
|
|
106399
|
+
.search-input {
|
|
106400
|
+
flex: 1;
|
|
106401
|
+
min-width: 200px;
|
|
106402
|
+
padding: 8px 12px;
|
|
106403
|
+
background: ${cssManager.bdTheme("#ffffff", "#09090b")};
|
|
106404
|
+
border: 1px solid ${cssManager.bdTheme("#e4e4e7", "#27272a")};
|
|
106405
|
+
border-radius: 6px;
|
|
106406
|
+
font-size: 14px;
|
|
106407
|
+
color: ${cssManager.bdTheme("#18181b", "#fafafa")};
|
|
106408
|
+
outline: none;
|
|
106409
|
+
transition: border-color 200ms ease;
|
|
106410
|
+
}
|
|
106411
|
+
|
|
106412
|
+
.search-input::placeholder {
|
|
106413
|
+
color: ${cssManager.bdTheme("#a1a1aa", "#52525b")};
|
|
106414
|
+
}
|
|
106415
|
+
|
|
106416
|
+
.search-input:focus {
|
|
106417
|
+
border-color: ${cssManager.bdTheme("#2563eb", "#3b82f6")};
|
|
106418
|
+
}
|
|
106419
|
+
|
|
106420
|
+
.chip-group {
|
|
106421
|
+
display: flex;
|
|
106422
|
+
gap: 4px;
|
|
106423
|
+
}
|
|
106424
|
+
|
|
106425
|
+
.chip {
|
|
106426
|
+
padding: 6px 12px;
|
|
106427
|
+
background: transparent;
|
|
106428
|
+
border: 1px solid ${cssManager.bdTheme("#e4e4e7", "#27272a")};
|
|
106429
|
+
border-radius: 9999px;
|
|
106430
|
+
font-size: 12px;
|
|
106431
|
+
font-weight: 500;
|
|
106432
|
+
color: ${cssManager.bdTheme("#71717a", "#a1a1aa")};
|
|
106433
|
+
cursor: pointer;
|
|
106434
|
+
transition: all 200ms ease;
|
|
106435
|
+
white-space: nowrap;
|
|
106436
|
+
}
|
|
106437
|
+
|
|
106438
|
+
.chip:hover {
|
|
106439
|
+
background: ${cssManager.bdTheme("#f4f4f5", "#18181b")};
|
|
106440
|
+
color: ${cssManager.bdTheme("#18181b", "#fafafa")};
|
|
106441
|
+
}
|
|
106442
|
+
|
|
106443
|
+
.chip.active {
|
|
106444
|
+
background: ${cssManager.bdTheme("#18181b", "#fafafa")};
|
|
106445
|
+
color: ${cssManager.bdTheme("#fafafa", "#18181b")};
|
|
106446
|
+
border-color: ${cssManager.bdTheme("#18181b", "#fafafa")};
|
|
106447
|
+
}
|
|
106448
|
+
|
|
106449
|
+
.results-count {
|
|
106450
|
+
font-size: 13px;
|
|
106451
|
+
color: ${cssManager.bdTheme("#71717a", "#a1a1aa")};
|
|
106452
|
+
margin-bottom: 16px;
|
|
106453
|
+
}
|
|
106454
|
+
|
|
106455
|
+
.grid {
|
|
106456
|
+
display: grid;
|
|
106457
|
+
grid-template-columns: repeat(auto-fill, minmax(420px, 1fr));
|
|
106458
|
+
gap: 16px;
|
|
106459
|
+
}
|
|
106460
|
+
|
|
106461
|
+
.grid sz-route-card {
|
|
106462
|
+
cursor: pointer;
|
|
106463
|
+
}
|
|
106464
|
+
|
|
106465
|
+
.empty-state {
|
|
106466
|
+
text-align: center;
|
|
106467
|
+
padding: 48px 24px;
|
|
106468
|
+
color: ${cssManager.bdTheme("#71717a", "#a1a1aa")};
|
|
106469
|
+
font-size: 14px;
|
|
106470
|
+
}
|
|
106471
|
+
|
|
106472
|
+
.empty-state-icon {
|
|
106473
|
+
font-size: 32px;
|
|
106474
|
+
margin-bottom: 12px;
|
|
106475
|
+
opacity: 0.5;
|
|
106476
|
+
}
|
|
106477
|
+
`
|
|
106478
|
+
]);
|
|
106479
|
+
__runInitializers(_init31, 1, SzRouteListView);
|
|
106480
|
+
|
|
104473
106481
|
// ts_web/elements/sz-demo-view-dashboard.ts
|
|
104474
106482
|
init_dist_ts29();
|
|
104475
|
-
var _SzDemoViewDashboard_decorators,
|
|
106483
|
+
var _SzDemoViewDashboard_decorators, _init32, _a32;
|
|
104476
106484
|
_SzDemoViewDashboard_decorators = [t4("sz-demo-view-dashboard")];
|
|
104477
|
-
var SzDemoViewDashboard = class extends (
|
|
106485
|
+
var SzDemoViewDashboard = class extends (_a32 = DeesElement) {
|
|
104478
106486
|
appui = null;
|
|
104479
106487
|
async onActivate(context2) {
|
|
104480
106488
|
this.appui = context2.appui;
|
|
@@ -104610,21 +106618,21 @@ var SzDemoViewDashboard = class extends (_a28 = DeesElement) {
|
|
|
104610
106618
|
`;
|
|
104611
106619
|
}
|
|
104612
106620
|
};
|
|
104613
|
-
|
|
104614
|
-
SzDemoViewDashboard = __decorateElement(
|
|
104615
|
-
__runInitializers(
|
|
106621
|
+
_init32 = __decoratorStart(_a32);
|
|
106622
|
+
SzDemoViewDashboard = __decorateElement(_init32, 0, "SzDemoViewDashboard", _SzDemoViewDashboard_decorators, SzDemoViewDashboard);
|
|
106623
|
+
__runInitializers(_init32, 1, SzDemoViewDashboard);
|
|
104616
106624
|
|
|
104617
106625
|
// ts_web/elements/sz-demo-view-services.ts
|
|
104618
106626
|
init_dist_ts29();
|
|
104619
|
-
var _selectedPlatformService_dec, _selectedService_dec, _currentView_dec2,
|
|
106627
|
+
var _selectedPlatformService_dec, _selectedService_dec, _currentView_dec2, _a33, _SzDemoViewServices_decorators, _init33, _currentView2, _selectedService, _selectedPlatformService;
|
|
104620
106628
|
_SzDemoViewServices_decorators = [t4("sz-demo-view-services")];
|
|
104621
|
-
var SzDemoViewServices = class extends (
|
|
106629
|
+
var SzDemoViewServices = class extends (_a33 = DeesElement, _currentView_dec2 = [r5()], _selectedService_dec = [r5()], _selectedPlatformService_dec = [r5()], _a33) {
|
|
104622
106630
|
constructor() {
|
|
104623
106631
|
super(...arguments);
|
|
104624
106632
|
__publicField(this, "appui", null);
|
|
104625
|
-
__privateAdd(this, _currentView2, __runInitializers(
|
|
104626
|
-
__privateAdd(this, _selectedService, __runInitializers(
|
|
104627
|
-
__privateAdd(this, _selectedPlatformService, __runInitializers(
|
|
106633
|
+
__privateAdd(this, _currentView2, __runInitializers(_init33, 8, this, "list")), __runInitializers(_init33, 11, this);
|
|
106634
|
+
__privateAdd(this, _selectedService, __runInitializers(_init33, 12, this, null)), __runInitializers(_init33, 15, this);
|
|
106635
|
+
__privateAdd(this, _selectedPlatformService, __runInitializers(_init33, 16, this, null)), __runInitializers(_init33, 19, this);
|
|
104628
106636
|
__publicField(this, "demoServices", [
|
|
104629
106637
|
{
|
|
104630
106638
|
id: "1",
|
|
@@ -104905,14 +106913,14 @@ var SzDemoViewServices = class extends (_a29 = DeesElement, _currentView_dec2 =
|
|
|
104905
106913
|
onDeactivate() {
|
|
104906
106914
|
}
|
|
104907
106915
|
};
|
|
104908
|
-
|
|
106916
|
+
_init33 = __decoratorStart(_a33);
|
|
104909
106917
|
_currentView2 = new WeakMap();
|
|
104910
106918
|
_selectedService = new WeakMap();
|
|
104911
106919
|
_selectedPlatformService = new WeakMap();
|
|
104912
|
-
__decorateElement(
|
|
104913
|
-
__decorateElement(
|
|
104914
|
-
__decorateElement(
|
|
104915
|
-
SzDemoViewServices = __decorateElement(
|
|
106920
|
+
__decorateElement(_init33, 4, "currentView", _currentView_dec2, SzDemoViewServices, _currentView2);
|
|
106921
|
+
__decorateElement(_init33, 4, "selectedService", _selectedService_dec, SzDemoViewServices, _selectedService);
|
|
106922
|
+
__decorateElement(_init33, 4, "selectedPlatformService", _selectedPlatformService_dec, SzDemoViewServices, _selectedPlatformService);
|
|
106923
|
+
SzDemoViewServices = __decorateElement(_init33, 0, "SzDemoViewServices", _SzDemoViewServices_decorators, SzDemoViewServices);
|
|
104916
106924
|
__publicField(SzDemoViewServices, "styles", [
|
|
104917
106925
|
cssManager.defaultStyles,
|
|
104918
106926
|
i`
|
|
@@ -105044,18 +107052,18 @@ __publicField(SzDemoViewServices, "styles", [
|
|
|
105044
107052
|
}
|
|
105045
107053
|
`
|
|
105046
107054
|
]);
|
|
105047
|
-
__runInitializers(
|
|
107055
|
+
__runInitializers(_init33, 1, SzDemoViewServices);
|
|
105048
107056
|
|
|
105049
107057
|
// ts_web/elements/sz-demo-view-network.ts
|
|
105050
107058
|
init_dist_ts29();
|
|
105051
|
-
var _selectedDomain_dec, _currentTab_dec,
|
|
107059
|
+
var _selectedDomain_dec, _currentTab_dec, _a34, _SzDemoViewNetwork_decorators, _init34, _currentTab, _selectedDomain;
|
|
105052
107060
|
_SzDemoViewNetwork_decorators = [t4("sz-demo-view-network")];
|
|
105053
|
-
var SzDemoViewNetwork = class extends (
|
|
107061
|
+
var SzDemoViewNetwork = class extends (_a34 = DeesElement, _currentTab_dec = [r5()], _selectedDomain_dec = [r5()], _a34) {
|
|
105054
107062
|
constructor() {
|
|
105055
107063
|
super(...arguments);
|
|
105056
107064
|
__publicField(this, "appui", null);
|
|
105057
|
-
__privateAdd(this, _currentTab, __runInitializers(
|
|
105058
|
-
__privateAdd(this, _selectedDomain, __runInitializers(
|
|
107065
|
+
__privateAdd(this, _currentTab, __runInitializers(_init34, 8, this, "proxy")), __runInitializers(_init34, 11, this);
|
|
107066
|
+
__privateAdd(this, _selectedDomain, __runInitializers(_init34, 12, this, null)), __runInitializers(_init34, 15, this);
|
|
105059
107067
|
__publicField(this, "demoProxyRoutes", [
|
|
105060
107068
|
{ id: "1", domain: "api.example.com", target: "http://api-gateway:3000", ssl: true, status: "active" },
|
|
105061
107069
|
{ id: "2", domain: "app.example.com", target: "http://frontend:8080", ssl: true, status: "active" },
|
|
@@ -105303,12 +107311,12 @@ var SzDemoViewNetwork = class extends (_a30 = DeesElement, _currentTab_dec = [r5
|
|
|
105303
107311
|
`;
|
|
105304
107312
|
}
|
|
105305
107313
|
};
|
|
105306
|
-
|
|
107314
|
+
_init34 = __decoratorStart(_a34);
|
|
105307
107315
|
_currentTab = new WeakMap();
|
|
105308
107316
|
_selectedDomain = new WeakMap();
|
|
105309
|
-
__decorateElement(
|
|
105310
|
-
__decorateElement(
|
|
105311
|
-
SzDemoViewNetwork = __decorateElement(
|
|
107317
|
+
__decorateElement(_init34, 4, "currentTab", _currentTab_dec, SzDemoViewNetwork, _currentTab);
|
|
107318
|
+
__decorateElement(_init34, 4, "selectedDomain", _selectedDomain_dec, SzDemoViewNetwork, _selectedDomain);
|
|
107319
|
+
SzDemoViewNetwork = __decorateElement(_init34, 0, "SzDemoViewNetwork", _SzDemoViewNetwork_decorators, SzDemoViewNetwork);
|
|
105312
107320
|
__publicField(SzDemoViewNetwork, "styles", [
|
|
105313
107321
|
cssManager.defaultStyles,
|
|
105314
107322
|
i`
|
|
@@ -105396,17 +107404,17 @@ __publicField(SzDemoViewNetwork, "styles", [
|
|
|
105396
107404
|
}
|
|
105397
107405
|
`
|
|
105398
107406
|
]);
|
|
105399
|
-
__runInitializers(
|
|
107407
|
+
__runInitializers(_init34, 1, SzDemoViewNetwork);
|
|
105400
107408
|
|
|
105401
107409
|
// ts_web/elements/sz-demo-view-registries.ts
|
|
105402
107410
|
init_dist_ts29();
|
|
105403
|
-
var _currentTab_dec2,
|
|
107411
|
+
var _currentTab_dec2, _a35, _SzDemoViewRegistries_decorators, _init35, _currentTab2;
|
|
105404
107412
|
_SzDemoViewRegistries_decorators = [t4("sz-demo-view-registries")];
|
|
105405
|
-
var SzDemoViewRegistries = class extends (
|
|
107413
|
+
var SzDemoViewRegistries = class extends (_a35 = DeesElement, _currentTab_dec2 = [r5()], _a35) {
|
|
105406
107414
|
constructor() {
|
|
105407
107415
|
super(...arguments);
|
|
105408
107416
|
__publicField(this, "appui", null);
|
|
105409
|
-
__privateAdd(this, _currentTab2, __runInitializers(
|
|
107417
|
+
__privateAdd(this, _currentTab2, __runInitializers(_init35, 8, this, "onebox")), __runInitializers(_init35, 11, this);
|
|
105410
107418
|
__publicField(this, "demoOneboxImages", [
|
|
105411
107419
|
{ id: "1", name: "api-gateway", tags: ["latest", "v2.1.0", "v2.0.0"], size: "256 MB", updated: "2024-01-20", pulls: 142 },
|
|
105412
107420
|
{ id: "2", name: "frontend", tags: ["latest", "v1.5.0"], size: "128 MB", updated: "2024-01-19", pulls: 89 },
|
|
@@ -105523,10 +107531,10 @@ var SzDemoViewRegistries = class extends (_a31 = DeesElement, _currentTab_dec2 =
|
|
|
105523
107531
|
`;
|
|
105524
107532
|
}
|
|
105525
107533
|
};
|
|
105526
|
-
|
|
107534
|
+
_init35 = __decoratorStart(_a35);
|
|
105527
107535
|
_currentTab2 = new WeakMap();
|
|
105528
|
-
__decorateElement(
|
|
105529
|
-
SzDemoViewRegistries = __decorateElement(
|
|
107536
|
+
__decorateElement(_init35, 4, "currentTab", _currentTab_dec2, SzDemoViewRegistries, _currentTab2);
|
|
107537
|
+
SzDemoViewRegistries = __decorateElement(_init35, 0, "SzDemoViewRegistries", _SzDemoViewRegistries_decorators, SzDemoViewRegistries);
|
|
105530
107538
|
__publicField(SzDemoViewRegistries, "styles", [
|
|
105531
107539
|
cssManager.defaultStyles,
|
|
105532
107540
|
i`
|
|
@@ -105594,13 +107602,13 @@ __publicField(SzDemoViewRegistries, "styles", [
|
|
|
105594
107602
|
}
|
|
105595
107603
|
`
|
|
105596
107604
|
]);
|
|
105597
|
-
__runInitializers(
|
|
107605
|
+
__runInitializers(_init35, 1, SzDemoViewRegistries);
|
|
105598
107606
|
|
|
105599
107607
|
// ts_web/elements/sz-demo-view-tokens.ts
|
|
105600
107608
|
init_dist_ts29();
|
|
105601
|
-
var _SzDemoViewTokens_decorators,
|
|
107609
|
+
var _SzDemoViewTokens_decorators, _init36, _a36;
|
|
105602
107610
|
_SzDemoViewTokens_decorators = [t4("sz-demo-view-tokens")];
|
|
105603
|
-
var SzDemoViewTokens = class extends (
|
|
107611
|
+
var SzDemoViewTokens = class extends (_a36 = DeesElement) {
|
|
105604
107612
|
appui = null;
|
|
105605
107613
|
async onActivate(context2) {
|
|
105606
107614
|
this.appui = context2.appui;
|
|
@@ -105676,86 +107684,454 @@ var SzDemoViewTokens = class extends (_a32 = DeesElement) {
|
|
|
105676
107684
|
render() {
|
|
105677
107685
|
return b2`
|
|
105678
107686
|
<div class="page-header">
|
|
105679
|
-
<h1 class="page-title">Tokens</h1>
|
|
105680
|
-
<p class="page-subtitle">Manage registry access tokens for CI/CD pipelines</p>
|
|
107687
|
+
<h1 class="page-title">Tokens</h1>
|
|
107688
|
+
<p class="page-subtitle">Manage registry access tokens for CI/CD pipelines</p>
|
|
107689
|
+
</div>
|
|
107690
|
+
|
|
107691
|
+
<sz-tokens-view
|
|
107692
|
+
.globalTokens=${this.demoGlobalTokens}
|
|
107693
|
+
.ciTokens=${this.demoCiTokens}
|
|
107694
|
+
@create=${(e11) => console.log("Create token:", e11.detail)}
|
|
107695
|
+
@copy=${(e11) => console.log("Copy token:", e11.detail)}
|
|
107696
|
+
@regenerate=${(e11) => console.log("Regenerate token:", e11.detail)}
|
|
107697
|
+
@delete=${(e11) => console.log("Delete token:", e11.detail)}
|
|
107698
|
+
></sz-tokens-view>
|
|
107699
|
+
`;
|
|
107700
|
+
}
|
|
107701
|
+
};
|
|
107702
|
+
_init36 = __decoratorStart(_a36);
|
|
107703
|
+
SzDemoViewTokens = __decorateElement(_init36, 0, "SzDemoViewTokens", _SzDemoViewTokens_decorators, SzDemoViewTokens);
|
|
107704
|
+
__runInitializers(_init36, 1, SzDemoViewTokens);
|
|
107705
|
+
|
|
107706
|
+
// ts_web/elements/sz-demo-view-settings.ts
|
|
107707
|
+
init_dist_ts29();
|
|
107708
|
+
var _SzDemoViewSettings_decorators, _init37, _a37;
|
|
107709
|
+
_SzDemoViewSettings_decorators = [t4("sz-demo-view-settings")];
|
|
107710
|
+
var SzDemoViewSettings = class extends (_a37 = DeesElement) {
|
|
107711
|
+
appui = null;
|
|
107712
|
+
async onActivate(context2) {
|
|
107713
|
+
this.appui = context2.appui;
|
|
107714
|
+
this.appui.setSecondaryMenu({
|
|
107715
|
+
heading: "Settings",
|
|
107716
|
+
groups: [
|
|
107717
|
+
{
|
|
107718
|
+
name: "Categories",
|
|
107719
|
+
items: [
|
|
107720
|
+
{ key: "General", iconName: "lucide:Settings", action: () => {
|
|
107721
|
+
console.log("General settings");
|
|
107722
|
+
} },
|
|
107723
|
+
{ key: "Network", iconName: "lucide:Network", action: () => {
|
|
107724
|
+
console.log("Network settings");
|
|
107725
|
+
} },
|
|
107726
|
+
{ key: "Security", iconName: "lucide:Shield", action: () => {
|
|
107727
|
+
console.log("Security settings");
|
|
107728
|
+
} },
|
|
107729
|
+
{ key: "Certificates", iconName: "lucide:FileBadge", action: () => {
|
|
107730
|
+
console.log("Certificate settings");
|
|
107731
|
+
} }
|
|
107732
|
+
]
|
|
107733
|
+
},
|
|
107734
|
+
{
|
|
107735
|
+
name: "Actions",
|
|
107736
|
+
items: [
|
|
107737
|
+
{ type: "action", key: "Export Config", iconName: "lucide:Download", action: () => {
|
|
107738
|
+
console.log("Export config");
|
|
107739
|
+
} },
|
|
107740
|
+
{ type: "action", key: "Import Config", iconName: "lucide:Upload", action: () => {
|
|
107741
|
+
console.log("Import config");
|
|
107742
|
+
} },
|
|
107743
|
+
{ type: "action", variant: "danger", key: "Reset to Default", iconName: "lucide:RotateCcw", confirmMessage: "Are you sure you want to reset all settings to default?", action: () => {
|
|
107744
|
+
console.log("Reset settings");
|
|
107745
|
+
} }
|
|
107746
|
+
]
|
|
107747
|
+
}
|
|
107748
|
+
]
|
|
107749
|
+
});
|
|
107750
|
+
}
|
|
107751
|
+
onDeactivate() {
|
|
107752
|
+
}
|
|
107753
|
+
demoSettings = {
|
|
107754
|
+
darkMode: true,
|
|
107755
|
+
cloudflareToken: "",
|
|
107756
|
+
cloudflareZoneId: "",
|
|
107757
|
+
autoRenewCerts: true,
|
|
107758
|
+
renewalThreshold: 30,
|
|
107759
|
+
acmeEmail: "admin@serve.zone",
|
|
107760
|
+
httpPort: 80,
|
|
107761
|
+
httpsPort: 443,
|
|
107762
|
+
forceHttps: true
|
|
107763
|
+
};
|
|
107764
|
+
static styles = [
|
|
107765
|
+
cssManager.defaultStyles,
|
|
107766
|
+
i`
|
|
107767
|
+
:host {
|
|
107768
|
+
display: block;
|
|
107769
|
+
padding: 24px;
|
|
107770
|
+
height: 100%;
|
|
107771
|
+
overflow-y: auto;
|
|
107772
|
+
box-sizing: border-box;
|
|
107773
|
+
}
|
|
107774
|
+
|
|
107775
|
+
.page-header {
|
|
107776
|
+
margin-bottom: 24px;
|
|
107777
|
+
}
|
|
107778
|
+
|
|
107779
|
+
.page-title {
|
|
107780
|
+
font-size: 24px;
|
|
107781
|
+
font-weight: 700;
|
|
107782
|
+
color: ${cssManager.bdTheme("#18181b", "#fafafa")};
|
|
107783
|
+
margin: 0 0 8px 0;
|
|
107784
|
+
}
|
|
107785
|
+
|
|
107786
|
+
.page-subtitle {
|
|
107787
|
+
font-size: 14px;
|
|
107788
|
+
color: ${cssManager.bdTheme("#71717a", "#a1a1aa")};
|
|
107789
|
+
margin: 0;
|
|
107790
|
+
}
|
|
107791
|
+
|
|
107792
|
+
.settings-container {
|
|
107793
|
+
max-width: 800px;
|
|
107794
|
+
}
|
|
107795
|
+
`
|
|
107796
|
+
];
|
|
107797
|
+
render() {
|
|
107798
|
+
return b2`
|
|
107799
|
+
<div class="page-header">
|
|
107800
|
+
<h1 class="page-title">Settings</h1>
|
|
107801
|
+
<p class="page-subtitle">Configure your onebox instance</p>
|
|
105681
107802
|
</div>
|
|
105682
107803
|
|
|
105683
|
-
<
|
|
105684
|
-
|
|
105685
|
-
|
|
105686
|
-
|
|
105687
|
-
|
|
105688
|
-
|
|
105689
|
-
|
|
105690
|
-
|
|
107804
|
+
<div class="settings-container">
|
|
107805
|
+
<sz-settings-view
|
|
107806
|
+
.settings=${this.demoSettings}
|
|
107807
|
+
currentUser="admin"
|
|
107808
|
+
@setting-change=${(e11) => console.log("Setting change:", e11.detail)}
|
|
107809
|
+
@change-password=${(e11) => console.log("Change password:", e11.detail)}
|
|
107810
|
+
@reset=${() => console.log("Reset settings")}
|
|
107811
|
+
@save=${(e11) => console.log("Save settings:", e11.detail)}
|
|
107812
|
+
></sz-settings-view>
|
|
107813
|
+
</div>
|
|
105691
107814
|
`;
|
|
105692
107815
|
}
|
|
105693
107816
|
};
|
|
105694
|
-
|
|
105695
|
-
|
|
105696
|
-
__runInitializers(
|
|
107817
|
+
_init37 = __decoratorStart(_a37);
|
|
107818
|
+
SzDemoViewSettings = __decorateElement(_init37, 0, "SzDemoViewSettings", _SzDemoViewSettings_decorators, SzDemoViewSettings);
|
|
107819
|
+
__runInitializers(_init37, 1, SzDemoViewSettings);
|
|
105697
107820
|
|
|
105698
|
-
// ts_web/elements/sz-demo-view-
|
|
107821
|
+
// ts_web/elements/sz-demo-view-mta.ts
|
|
105699
107822
|
init_dist_ts29();
|
|
105700
|
-
var
|
|
105701
|
-
|
|
105702
|
-
var
|
|
105703
|
-
|
|
107823
|
+
var _currentDirectionFilter_dec, _selectedEmail_dec, _currentView_dec3, _a38, _SzDemoViewMta_decorators, _init38, _currentView3, _selectedEmail, _currentDirectionFilter;
|
|
107824
|
+
_SzDemoViewMta_decorators = [t4("sz-demo-view-mta")];
|
|
107825
|
+
var SzDemoViewMta = class extends (_a38 = DeesElement, _currentView_dec3 = [r5()], _selectedEmail_dec = [r5()], _currentDirectionFilter_dec = [r5()], _a38) {
|
|
107826
|
+
constructor() {
|
|
107827
|
+
super(...arguments);
|
|
107828
|
+
__publicField(this, "appui", null);
|
|
107829
|
+
__privateAdd(this, _currentView3, __runInitializers(_init38, 8, this, "list")), __runInitializers(_init38, 11, this);
|
|
107830
|
+
__privateAdd(this, _selectedEmail, __runInitializers(_init38, 12, this, null)), __runInitializers(_init38, 15, this);
|
|
107831
|
+
__privateAdd(this, _currentDirectionFilter, __runInitializers(_init38, 16, this, "all")), __runInitializers(_init38, 19, this);
|
|
107832
|
+
__publicField(this, "demoEmails", [
|
|
107833
|
+
{ id: "1", direction: "outbound", status: "delivered", from: "noreply@serve.zone", to: "user@example.com", subject: "Welcome to serve.zone", timestamp: "2024-01-15 14:30:22", messageId: "<abc123@serve.zone>", size: "12.4 KB" },
|
|
107834
|
+
{ id: "2", direction: "outbound", status: "bounced", from: "alerts@serve.zone", to: "invalid@nowhere.test", subject: "Service Alert: CPU Usage High", timestamp: "2024-01-15 14:28:10", messageId: "<def456@serve.zone>", size: "8.2 KB" },
|
|
107835
|
+
{ id: "3", direction: "inbound", status: "delivered", from: "support@customer.com", to: "admin@serve.zone", subject: "Re: Infrastructure Review", timestamp: "2024-01-15 14:25:00", messageId: "<ghi789@customer.com>", size: "24.1 KB" },
|
|
107836
|
+
{ id: "4", direction: "outbound", status: "rejected", from: "billing@serve.zone", to: "blocked@spam-domain.test", subject: "Invoice #2024-001", timestamp: "2024-01-15 14:20:45", messageId: "<jkl012@serve.zone>", size: "45.6 KB" },
|
|
107837
|
+
{ id: "5", direction: "outbound", status: "deferred", from: "noreply@serve.zone", to: "slow@remote-server.test", subject: "Password Reset Request", timestamp: "2024-01-15 14:15:30", messageId: "<mno345@serve.zone>", size: "6.8 KB" },
|
|
107838
|
+
{ id: "6", direction: "inbound", status: "delivered", from: "ci@github.com", to: "devops@serve.zone", subject: "Build #4521 passed", timestamp: "2024-01-15 14:10:00", messageId: "<pqr678@github.com>", size: "15.3 KB" },
|
|
107839
|
+
{ id: "7", direction: "outbound", status: "pending", from: "reports@serve.zone", to: "team@serve.zone", subject: "Weekly Infrastructure Report", timestamp: "2024-01-15 14:05:00", messageId: "<stu901@serve.zone>", size: "102.7 KB" },
|
|
107840
|
+
{ id: "8", direction: "inbound", status: "delivered", from: "monitoring@uptime.io", to: "ops@serve.zone", subject: "Uptime Report: 99.98%", timestamp: "2024-01-15 13:55:00", messageId: "<vwx234@uptime.io>", size: "9.1 KB" }
|
|
107841
|
+
]);
|
|
107842
|
+
__publicField(this, "demoEmailDetails", {
|
|
107843
|
+
"1": {
|
|
107844
|
+
id: "1",
|
|
107845
|
+
direction: "outbound",
|
|
107846
|
+
status: "delivered",
|
|
107847
|
+
from: "noreply@serve.zone",
|
|
107848
|
+
to: "user@example.com",
|
|
107849
|
+
toList: ["user@example.com"],
|
|
107850
|
+
subject: "Welcome to serve.zone",
|
|
107851
|
+
timestamp: "2024-01-15 14:30:22",
|
|
107852
|
+
messageId: "<abc123@serve.zone>",
|
|
107853
|
+
size: "12.4 KB",
|
|
107854
|
+
smtpLog: [
|
|
107855
|
+
{ timestamp: "14:30:20", direction: "client", command: "EHLO mail.serve.zone" },
|
|
107856
|
+
{ timestamp: "14:30:20", direction: "server", command: "250-mail.example.com Hello", responseCode: 250 },
|
|
107857
|
+
{ timestamp: "14:30:20", direction: "server", command: "250-STARTTLS", responseCode: 250 },
|
|
107858
|
+
{ timestamp: "14:30:20", direction: "server", command: "250 SIZE 52428800", responseCode: 250 },
|
|
107859
|
+
{ timestamp: "14:30:20", direction: "client", command: "STARTTLS" },
|
|
107860
|
+
{ timestamp: "14:30:21", direction: "server", command: "220 Ready to start TLS", responseCode: 220 },
|
|
107861
|
+
{ timestamp: "14:30:21", direction: "client", command: "EHLO mail.serve.zone" },
|
|
107862
|
+
{ timestamp: "14:30:21", direction: "server", command: "250-mail.example.com Hello", responseCode: 250 },
|
|
107863
|
+
{ timestamp: "14:30:21", direction: "server", command: "250-AUTH PLAIN LOGIN", responseCode: 250 },
|
|
107864
|
+
{ timestamp: "14:30:21", direction: "server", command: "250 SIZE 52428800", responseCode: 250 },
|
|
107865
|
+
{ timestamp: "14:30:21", direction: "client", command: "AUTH PLAIN AHVzZXIAcGFzc3dvcmQ=" },
|
|
107866
|
+
{ timestamp: "14:30:21", direction: "server", command: "235 2.7.0 Authentication successful", responseCode: 235 },
|
|
107867
|
+
{ timestamp: "14:30:21", direction: "client", command: "MAIL FROM:<noreply@serve.zone>" },
|
|
107868
|
+
{ timestamp: "14:30:21", direction: "server", command: "250 OK", responseCode: 250 },
|
|
107869
|
+
{ timestamp: "14:30:21", direction: "client", command: "RCPT TO:<user@example.com>" },
|
|
107870
|
+
{ timestamp: "14:30:21", direction: "server", command: "250 Accepted", responseCode: 250 },
|
|
107871
|
+
{ timestamp: "14:30:22", direction: "client", command: "DATA" },
|
|
107872
|
+
{ timestamp: "14:30:22", direction: "server", command: '354 Enter message, ending with "." on a line by itself', responseCode: 354 },
|
|
107873
|
+
{ timestamp: "14:30:22", direction: "client", command: "." },
|
|
107874
|
+
{ timestamp: "14:30:22", direction: "server", command: "250 OK id=1pQ2rS-0003Ab-C4", responseCode: 250 },
|
|
107875
|
+
{ timestamp: "14:30:22", direction: "client", command: "QUIT" },
|
|
107876
|
+
{ timestamp: "14:30:22", direction: "server", command: "221 mail.example.com closing connection", responseCode: 221 }
|
|
107877
|
+
],
|
|
107878
|
+
connectionInfo: {
|
|
107879
|
+
sourceIp: "10.0.1.50",
|
|
107880
|
+
sourceHostname: "mail.serve.zone",
|
|
107881
|
+
destinationIp: "93.184.216.34",
|
|
107882
|
+
destinationPort: 25,
|
|
107883
|
+
tlsVersion: "TLSv1.3",
|
|
107884
|
+
tlsCipher: "TLS_AES_256_GCM_SHA384",
|
|
107885
|
+
authenticated: true,
|
|
107886
|
+
authMethod: "PLAIN",
|
|
107887
|
+
authUser: "noreply@serve.zone"
|
|
107888
|
+
},
|
|
107889
|
+
authenticationResults: {
|
|
107890
|
+
spf: "pass",
|
|
107891
|
+
spfDomain: "serve.zone",
|
|
107892
|
+
dkim: "pass",
|
|
107893
|
+
dkimDomain: "serve.zone",
|
|
107894
|
+
dmarc: "pass",
|
|
107895
|
+
dmarcPolicy: "reject"
|
|
107896
|
+
},
|
|
107897
|
+
headers: {
|
|
107898
|
+
"From": "noreply@serve.zone",
|
|
107899
|
+
"To": "user@example.com",
|
|
107900
|
+
"Subject": "Welcome to serve.zone",
|
|
107901
|
+
"Date": "Mon, 15 Jan 2024 14:30:22 +0000",
|
|
107902
|
+
"MIME-Version": "1.0",
|
|
107903
|
+
"Content-Type": "text/html; charset=UTF-8"
|
|
107904
|
+
},
|
|
107905
|
+
body: '<html>\n<head><title>Welcome</title></head>\n<body>\n <h1>Welcome to serve.zone!</h1>\n <p>Your account has been created successfully.</p>\n <p>Get started by visiting your <a href="https://serve.zone/dashboard">dashboard</a>.</p>\n</body>\n</html>'
|
|
107906
|
+
},
|
|
107907
|
+
"2": {
|
|
107908
|
+
id: "2",
|
|
107909
|
+
direction: "outbound",
|
|
107910
|
+
status: "bounced",
|
|
107911
|
+
from: "alerts@serve.zone",
|
|
107912
|
+
to: "invalid@nowhere.test",
|
|
107913
|
+
toList: ["invalid@nowhere.test"],
|
|
107914
|
+
subject: "Service Alert: CPU Usage High",
|
|
107915
|
+
timestamp: "2024-01-15 14:28:10",
|
|
107916
|
+
messageId: "<def456@serve.zone>",
|
|
107917
|
+
size: "8.2 KB",
|
|
107918
|
+
rejectionReason: "550 5.1.1 The email account that you tried to reach does not exist.",
|
|
107919
|
+
bounceMessage: "Delivery to the following recipient failed permanently:\n\n invalid@nowhere.test\n\nTechnical details of permanent failure:\nGoogle tried to deliver your message, but it was rejected by the server for the recipient domain nowhere.test.",
|
|
107920
|
+
smtpLog: [
|
|
107921
|
+
{ timestamp: "14:28:08", direction: "client", command: "EHLO mail.serve.zone" },
|
|
107922
|
+
{ timestamp: "14:28:08", direction: "server", command: "250-mail.nowhere.test Hello", responseCode: 250 },
|
|
107923
|
+
{ timestamp: "14:28:08", direction: "client", command: "MAIL FROM:<alerts@serve.zone>" },
|
|
107924
|
+
{ timestamp: "14:28:09", direction: "server", command: "250 OK", responseCode: 250 },
|
|
107925
|
+
{ timestamp: "14:28:09", direction: "client", command: "RCPT TO:<invalid@nowhere.test>" },
|
|
107926
|
+
{ timestamp: "14:28:10", direction: "server", command: "550 5.1.1 The email account that you tried to reach does not exist.", responseCode: 550 },
|
|
107927
|
+
{ timestamp: "14:28:10", direction: "client", command: "QUIT" },
|
|
107928
|
+
{ timestamp: "14:28:10", direction: "server", command: "221 Bye", responseCode: 221 }
|
|
107929
|
+
],
|
|
107930
|
+
connectionInfo: {
|
|
107931
|
+
sourceIp: "10.0.1.50",
|
|
107932
|
+
sourceHostname: "mail.serve.zone",
|
|
107933
|
+
destinationIp: "198.51.100.25",
|
|
107934
|
+
destinationPort: 25,
|
|
107935
|
+
tlsVersion: "TLSv1.2",
|
|
107936
|
+
tlsCipher: "ECDHE-RSA-AES128-GCM-SHA256",
|
|
107937
|
+
authenticated: true,
|
|
107938
|
+
authMethod: "PLAIN",
|
|
107939
|
+
authUser: "alerts@serve.zone"
|
|
107940
|
+
},
|
|
107941
|
+
authenticationResults: {
|
|
107942
|
+
spf: "pass",
|
|
107943
|
+
spfDomain: "serve.zone",
|
|
107944
|
+
dkim: "pass",
|
|
107945
|
+
dkimDomain: "serve.zone",
|
|
107946
|
+
dmarc: "pass",
|
|
107947
|
+
dmarcPolicy: "quarantine"
|
|
107948
|
+
},
|
|
107949
|
+
headers: {
|
|
107950
|
+
"From": "alerts@serve.zone",
|
|
107951
|
+
"To": "invalid@nowhere.test",
|
|
107952
|
+
"Subject": "Service Alert: CPU Usage High",
|
|
107953
|
+
"Date": "Mon, 15 Jan 2024 14:28:10 +0000",
|
|
107954
|
+
"MIME-Version": "1.0",
|
|
107955
|
+
"Content-Type": "text/plain; charset=UTF-8"
|
|
107956
|
+
},
|
|
107957
|
+
body: "ALERT: CPU Usage High\n\nService: api-gateway\nCurrent Usage: 94.2%\nThreshold: 90%\nTimestamp: 2024-01-15 14:28:00 UTC\n\nPlease investigate immediately."
|
|
107958
|
+
},
|
|
107959
|
+
"3": {
|
|
107960
|
+
id: "3",
|
|
107961
|
+
direction: "inbound",
|
|
107962
|
+
status: "delivered",
|
|
107963
|
+
from: "support@customer.com",
|
|
107964
|
+
to: "admin@serve.zone",
|
|
107965
|
+
toList: ["admin@serve.zone"],
|
|
107966
|
+
cc: ["ops@serve.zone"],
|
|
107967
|
+
subject: "Re: Infrastructure Review",
|
|
107968
|
+
timestamp: "2024-01-15 14:25:00",
|
|
107969
|
+
messageId: "<ghi789@customer.com>",
|
|
107970
|
+
size: "24.1 KB",
|
|
107971
|
+
smtpLog: [
|
|
107972
|
+
{ timestamp: "14:24:58", direction: "client", command: "EHLO mail.customer.com" },
|
|
107973
|
+
{ timestamp: "14:24:58", direction: "server", command: "250-mail.serve.zone Hello", responseCode: 250 },
|
|
107974
|
+
{ timestamp: "14:24:58", direction: "server", command: "250-STARTTLS", responseCode: 250 },
|
|
107975
|
+
{ timestamp: "14:24:58", direction: "server", command: "250 SIZE 52428800", responseCode: 250 },
|
|
107976
|
+
{ timestamp: "14:24:59", direction: "client", command: "STARTTLS" },
|
|
107977
|
+
{ timestamp: "14:24:59", direction: "server", command: "220 Ready to start TLS", responseCode: 220 },
|
|
107978
|
+
{ timestamp: "14:24:59", direction: "client", command: "MAIL FROM:<support@customer.com>" },
|
|
107979
|
+
{ timestamp: "14:24:59", direction: "server", command: "250 OK", responseCode: 250 },
|
|
107980
|
+
{ timestamp: "14:24:59", direction: "client", command: "RCPT TO:<admin@serve.zone>" },
|
|
107981
|
+
{ timestamp: "14:25:00", direction: "server", command: "250 Accepted", responseCode: 250 },
|
|
107982
|
+
{ timestamp: "14:25:00", direction: "client", command: "DATA" },
|
|
107983
|
+
{ timestamp: "14:25:00", direction: "server", command: "354 Enter message", responseCode: 354 },
|
|
107984
|
+
{ timestamp: "14:25:00", direction: "client", command: "." },
|
|
107985
|
+
{ timestamp: "14:25:00", direction: "server", command: "250 OK id=2bR3sT-0004Cd-E5", responseCode: 250 }
|
|
107986
|
+
],
|
|
107987
|
+
connectionInfo: {
|
|
107988
|
+
sourceIp: "203.0.113.45",
|
|
107989
|
+
sourceHostname: "mail.customer.com",
|
|
107990
|
+
destinationIp: "10.0.1.50",
|
|
107991
|
+
destinationPort: 25,
|
|
107992
|
+
tlsVersion: "TLSv1.3",
|
|
107993
|
+
tlsCipher: "TLS_AES_128_GCM_SHA256",
|
|
107994
|
+
authenticated: false,
|
|
107995
|
+
authMethod: "",
|
|
107996
|
+
authUser: ""
|
|
107997
|
+
},
|
|
107998
|
+
authenticationResults: {
|
|
107999
|
+
spf: "pass",
|
|
108000
|
+
spfDomain: "customer.com",
|
|
108001
|
+
dkim: "pass",
|
|
108002
|
+
dkimDomain: "customer.com",
|
|
108003
|
+
dmarc: "pass",
|
|
108004
|
+
dmarcPolicy: "none"
|
|
108005
|
+
},
|
|
108006
|
+
headers: {
|
|
108007
|
+
"From": "support@customer.com",
|
|
108008
|
+
"To": "admin@serve.zone",
|
|
108009
|
+
"CC": "ops@serve.zone",
|
|
108010
|
+
"Subject": "Re: Infrastructure Review",
|
|
108011
|
+
"Date": "Mon, 15 Jan 2024 14:25:00 +0000",
|
|
108012
|
+
"MIME-Version": "1.0",
|
|
108013
|
+
"Content-Type": "text/plain; charset=UTF-8",
|
|
108014
|
+
"In-Reply-To": "<prev123@serve.zone>"
|
|
108015
|
+
},
|
|
108016
|
+
body: "Hi Admin,\n\nThank you for the detailed infrastructure review report.\n\nWe have reviewed the recommendations and would like to\nproceed with the following:\n\n1. Upgrade to the Pro tier\n2. Enable automatic backups\n3. Set up monitoring alerts\n\nPlease let us know the timeline for these changes.\n\nBest regards,\nCustomer Support Team"
|
|
108017
|
+
}
|
|
108018
|
+
});
|
|
108019
|
+
}
|
|
105704
108020
|
async onActivate(context2) {
|
|
105705
108021
|
this.appui = context2.appui;
|
|
108022
|
+
this.appui.setContentTabs([
|
|
108023
|
+
{
|
|
108024
|
+
key: "All Emails",
|
|
108025
|
+
action: () => {
|
|
108026
|
+
this.currentDirectionFilter = "all";
|
|
108027
|
+
this.currentView = "list";
|
|
108028
|
+
this.updateSecondaryMenu();
|
|
108029
|
+
}
|
|
108030
|
+
},
|
|
108031
|
+
{
|
|
108032
|
+
key: "Inbound",
|
|
108033
|
+
action: () => {
|
|
108034
|
+
this.currentDirectionFilter = "inbound";
|
|
108035
|
+
this.currentView = "list";
|
|
108036
|
+
this.updateSecondaryMenu();
|
|
108037
|
+
}
|
|
108038
|
+
},
|
|
108039
|
+
{
|
|
108040
|
+
key: "Outbound",
|
|
108041
|
+
action: () => {
|
|
108042
|
+
this.currentDirectionFilter = "outbound";
|
|
108043
|
+
this.currentView = "list";
|
|
108044
|
+
this.updateSecondaryMenu();
|
|
108045
|
+
}
|
|
108046
|
+
}
|
|
108047
|
+
]);
|
|
108048
|
+
this.updateSecondaryMenu();
|
|
108049
|
+
}
|
|
108050
|
+
updateSecondaryMenu() {
|
|
108051
|
+
if (!this.appui) return;
|
|
105706
108052
|
this.appui.setSecondaryMenu({
|
|
105707
|
-
heading: "
|
|
108053
|
+
heading: "Email / MTA",
|
|
105708
108054
|
groups: [
|
|
105709
108055
|
{
|
|
105710
|
-
name: "
|
|
108056
|
+
name: "Actions",
|
|
105711
108057
|
items: [
|
|
105712
|
-
{ key: "
|
|
105713
|
-
console.log("
|
|
105714
|
-
} },
|
|
105715
|
-
{ key: "Network", iconName: "lucide:Network", action: () => {
|
|
105716
|
-
console.log("Network settings");
|
|
105717
|
-
} },
|
|
105718
|
-
{ key: "Security", iconName: "lucide:Shield", action: () => {
|
|
105719
|
-
console.log("Security settings");
|
|
108058
|
+
{ type: "action", key: "Refresh", iconName: "lucide:RefreshCw", action: () => {
|
|
108059
|
+
console.log("Refresh emails");
|
|
105720
108060
|
} },
|
|
105721
|
-
{ key: "
|
|
105722
|
-
console.log("
|
|
108061
|
+
{ type: "action", key: "Export Logs", iconName: "lucide:Download", action: () => {
|
|
108062
|
+
console.log("Export logs");
|
|
105723
108063
|
} }
|
|
105724
108064
|
]
|
|
105725
108065
|
},
|
|
105726
108066
|
{
|
|
105727
|
-
name: "
|
|
108067
|
+
name: "Status Filters",
|
|
105728
108068
|
items: [
|
|
105729
|
-
{
|
|
105730
|
-
console.log("
|
|
108069
|
+
{ key: "Delivered", iconName: "lucide:CheckCircle", badge: "5", badgeVariant: "success", action: () => {
|
|
108070
|
+
console.log("Filter delivered");
|
|
105731
108071
|
} },
|
|
105732
|
-
{
|
|
105733
|
-
console.log("
|
|
108072
|
+
{ key: "Bounced", iconName: "lucide:XCircle", badge: "1", badgeVariant: "error", action: () => {
|
|
108073
|
+
console.log("Filter bounced");
|
|
105734
108074
|
} },
|
|
105735
|
-
{
|
|
105736
|
-
console.log("
|
|
108075
|
+
{ key: "Deferred", iconName: "lucide:Clock", badge: "1", badgeVariant: "warning", action: () => {
|
|
108076
|
+
console.log("Filter deferred");
|
|
108077
|
+
} },
|
|
108078
|
+
{ key: "Pending", iconName: "lucide:Loader", badge: "1", action: () => {
|
|
108079
|
+
console.log("Filter pending");
|
|
105737
108080
|
} }
|
|
105738
108081
|
]
|
|
108082
|
+
},
|
|
108083
|
+
{
|
|
108084
|
+
name: "Statistics",
|
|
108085
|
+
items: [
|
|
108086
|
+
{ type: "header", label: "8 Total Emails" },
|
|
108087
|
+
{ type: "header", label: "62.5% Delivery Rate" }
|
|
108088
|
+
]
|
|
105739
108089
|
}
|
|
105740
108090
|
]
|
|
105741
108091
|
});
|
|
105742
108092
|
}
|
|
105743
108093
|
onDeactivate() {
|
|
105744
108094
|
}
|
|
105745
|
-
|
|
105746
|
-
|
|
105747
|
-
|
|
105748
|
-
|
|
105749
|
-
|
|
105750
|
-
|
|
105751
|
-
|
|
105752
|
-
|
|
105753
|
-
|
|
105754
|
-
|
|
105755
|
-
|
|
105756
|
-
|
|
105757
|
-
|
|
105758
|
-
|
|
108095
|
+
render() {
|
|
108096
|
+
if (this.currentView === "detail" && this.selectedEmail) {
|
|
108097
|
+
return b2`
|
|
108098
|
+
<sz-mta-detail-view
|
|
108099
|
+
.email=${this.selectedEmail}
|
|
108100
|
+
@back=${() => {
|
|
108101
|
+
this.currentView = "list";
|
|
108102
|
+
this.selectedEmail = null;
|
|
108103
|
+
}}
|
|
108104
|
+
></sz-mta-detail-view>
|
|
108105
|
+
`;
|
|
108106
|
+
}
|
|
108107
|
+
return b2`
|
|
108108
|
+
<sz-mta-list-view
|
|
108109
|
+
.emails=${this.currentDirectionFilter === "all" ? this.demoEmails : this.demoEmails.filter((e11) => e11.direction === this.currentDirectionFilter)}
|
|
108110
|
+
@email-click=${(e11) => this.handleEmailClick(e11.detail)}
|
|
108111
|
+
></sz-mta-list-view>
|
|
108112
|
+
`;
|
|
108113
|
+
}
|
|
108114
|
+
handleEmailClick(email) {
|
|
108115
|
+
const detail = this.demoEmailDetails[email.id];
|
|
108116
|
+
if (detail) {
|
|
108117
|
+
this.selectedEmail = detail;
|
|
108118
|
+
this.currentView = "detail";
|
|
108119
|
+
} else {
|
|
108120
|
+
console.log("No detail data available for email:", email.id);
|
|
108121
|
+
}
|
|
108122
|
+
}
|
|
108123
|
+
};
|
|
108124
|
+
_init38 = __decoratorStart(_a38);
|
|
108125
|
+
_currentView3 = new WeakMap();
|
|
108126
|
+
_selectedEmail = new WeakMap();
|
|
108127
|
+
_currentDirectionFilter = new WeakMap();
|
|
108128
|
+
__decorateElement(_init38, 4, "currentView", _currentView_dec3, SzDemoViewMta, _currentView3);
|
|
108129
|
+
__decorateElement(_init38, 4, "selectedEmail", _selectedEmail_dec, SzDemoViewMta, _selectedEmail);
|
|
108130
|
+
__decorateElement(_init38, 4, "currentDirectionFilter", _currentDirectionFilter_dec, SzDemoViewMta, _currentDirectionFilter);
|
|
108131
|
+
SzDemoViewMta = __decorateElement(_init38, 0, "SzDemoViewMta", _SzDemoViewMta_decorators, SzDemoViewMta);
|
|
108132
|
+
__publicField(SzDemoViewMta, "styles", [
|
|
108133
|
+
cssManager.defaultStyles,
|
|
108134
|
+
i`
|
|
105759
108135
|
:host {
|
|
105760
108136
|
display: block;
|
|
105761
108137
|
padding: 24px;
|
|
@@ -105763,52 +108139,350 @@ var SzDemoViewSettings = class extends (_a33 = DeesElement) {
|
|
|
105763
108139
|
overflow-y: auto;
|
|
105764
108140
|
box-sizing: border-box;
|
|
105765
108141
|
}
|
|
108142
|
+
`
|
|
108143
|
+
]);
|
|
108144
|
+
__runInitializers(_init38, 1, SzDemoViewMta);
|
|
105766
108145
|
|
|
105767
|
-
|
|
105768
|
-
|
|
105769
|
-
|
|
105770
|
-
|
|
105771
|
-
|
|
105772
|
-
|
|
105773
|
-
|
|
105774
|
-
|
|
105775
|
-
|
|
105776
|
-
|
|
105777
|
-
|
|
105778
|
-
|
|
105779
|
-
|
|
105780
|
-
|
|
105781
|
-
|
|
108146
|
+
// ts_web/elements/sz-demo-view-routes.ts
|
|
108147
|
+
init_dist_ts29();
|
|
108148
|
+
var _currentTab_dec3, _a39, _SzDemoViewRoutes_decorators, _init39, _currentTab3;
|
|
108149
|
+
_SzDemoViewRoutes_decorators = [t4("sz-demo-view-routes")];
|
|
108150
|
+
var SzDemoViewRoutes = class extends (_a39 = DeesElement, _currentTab_dec3 = [r5()], _a39) {
|
|
108151
|
+
constructor() {
|
|
108152
|
+
super(...arguments);
|
|
108153
|
+
__publicField(this, "appui", null);
|
|
108154
|
+
__privateAdd(this, _currentTab3, __runInitializers(_init39, 8, this, "all")), __runInitializers(_init39, 11, this);
|
|
108155
|
+
__publicField(this, "demoRoutes", [
|
|
108156
|
+
// 1. HTTPS with TLS termination + auto cert
|
|
108157
|
+
{
|
|
108158
|
+
id: "route-1",
|
|
108159
|
+
name: "Web Frontend",
|
|
108160
|
+
description: "Main website with TLS termination and automatic certificates",
|
|
108161
|
+
enabled: true,
|
|
108162
|
+
priority: 10,
|
|
108163
|
+
tags: ["web", "https", "production"],
|
|
108164
|
+
match: {
|
|
108165
|
+
ports: 443,
|
|
108166
|
+
domains: ["serve.zone", "www.serve.zone"],
|
|
108167
|
+
protocol: "http"
|
|
108168
|
+
},
|
|
108169
|
+
action: {
|
|
108170
|
+
type: "forward",
|
|
108171
|
+
targets: [{ host: "10.0.0.10", port: 3e3 }],
|
|
108172
|
+
tls: { mode: "terminate", certificate: "auto" }
|
|
108173
|
+
}
|
|
108174
|
+
},
|
|
108175
|
+
// 2. HTTP to HTTPS redirect
|
|
108176
|
+
{
|
|
108177
|
+
id: "route-2",
|
|
108178
|
+
name: "HTTP Redirect",
|
|
108179
|
+
description: "Redirects all HTTP traffic to HTTPS",
|
|
108180
|
+
enabled: true,
|
|
108181
|
+
priority: 100,
|
|
108182
|
+
tags: ["web", "http", "redirect"],
|
|
108183
|
+
match: {
|
|
108184
|
+
ports: 80,
|
|
108185
|
+
domains: ["serve.zone", "www.serve.zone"],
|
|
108186
|
+
protocol: "http"
|
|
108187
|
+
},
|
|
108188
|
+
action: {
|
|
108189
|
+
type: "socket-handler"
|
|
108190
|
+
}
|
|
108191
|
+
},
|
|
108192
|
+
// 3. Email SMTP route
|
|
108193
|
+
{
|
|
108194
|
+
id: "route-3",
|
|
108195
|
+
name: "SMTP Inbound",
|
|
108196
|
+
description: "Inbound email relay for serve.zone domain",
|
|
108197
|
+
enabled: true,
|
|
108198
|
+
tags: ["email", "smtp", "production"],
|
|
108199
|
+
match: {
|
|
108200
|
+
ports: 25,
|
|
108201
|
+
domains: "mail.serve.zone"
|
|
108202
|
+
},
|
|
108203
|
+
action: {
|
|
108204
|
+
type: "forward",
|
|
108205
|
+
targets: [{ host: "10.0.1.5", port: 25 }],
|
|
108206
|
+
tls: { mode: "terminate", certificate: "auto" }
|
|
108207
|
+
}
|
|
108208
|
+
},
|
|
108209
|
+
// 4. API gateway with path matching, rate limiting, CORS
|
|
108210
|
+
{
|
|
108211
|
+
id: "route-4",
|
|
108212
|
+
name: "API Gateway",
|
|
108213
|
+
description: "API gateway with rate limiting, CORS headers, and load balancing",
|
|
108214
|
+
enabled: true,
|
|
108215
|
+
priority: 20,
|
|
108216
|
+
tags: ["web", "api", "https", "production"],
|
|
108217
|
+
match: {
|
|
108218
|
+
ports: 443,
|
|
108219
|
+
domains: "api.serve.zone",
|
|
108220
|
+
path: "/v2/*",
|
|
108221
|
+
protocol: "http"
|
|
108222
|
+
},
|
|
108223
|
+
action: {
|
|
108224
|
+
type: "forward",
|
|
108225
|
+
targets: [
|
|
108226
|
+
{ host: ["10.0.0.20", "10.0.0.21", "10.0.0.22"], port: 8080 }
|
|
108227
|
+
],
|
|
108228
|
+
tls: { mode: "terminate", certificate: "auto" },
|
|
108229
|
+
loadBalancing: { algorithm: "round-robin" }
|
|
108230
|
+
},
|
|
108231
|
+
security: {
|
|
108232
|
+
rateLimit: { enabled: true, maxRequests: 200, window: 60 },
|
|
108233
|
+
maxConnections: 5e3
|
|
108234
|
+
},
|
|
108235
|
+
headers: {
|
|
108236
|
+
response: {
|
|
108237
|
+
"Access-Control-Allow-Origin": "*",
|
|
108238
|
+
"X-Request-Id": "{{requestId}}"
|
|
108239
|
+
}
|
|
108240
|
+
}
|
|
108241
|
+
},
|
|
108242
|
+
// 5. WebSocket route
|
|
108243
|
+
{
|
|
108244
|
+
id: "route-5",
|
|
108245
|
+
name: "WebSocket Realtime",
|
|
108246
|
+
description: "Real-time WebSocket connections for live updates",
|
|
108247
|
+
enabled: true,
|
|
108248
|
+
tags: ["web", "https", "websocket"],
|
|
108249
|
+
match: {
|
|
108250
|
+
ports: 443,
|
|
108251
|
+
domains: "ws.serve.zone",
|
|
108252
|
+
path: "/ws/*",
|
|
108253
|
+
protocol: "http"
|
|
108254
|
+
},
|
|
108255
|
+
action: {
|
|
108256
|
+
type: "forward",
|
|
108257
|
+
targets: [{ host: "10.0.0.30", port: 9090 }],
|
|
108258
|
+
tls: { mode: "terminate", certificate: "auto" },
|
|
108259
|
+
websocket: { enabled: true }
|
|
108260
|
+
}
|
|
108261
|
+
},
|
|
108262
|
+
// 6. Wildcard domain route
|
|
108263
|
+
{
|
|
108264
|
+
id: "route-6",
|
|
108265
|
+
name: "Tenant Wildcard",
|
|
108266
|
+
description: "Multi-tenant wildcard routing for customer subdomains",
|
|
108267
|
+
enabled: true,
|
|
108268
|
+
priority: 50,
|
|
108269
|
+
tags: ["web", "https", "multi-tenant"],
|
|
108270
|
+
match: {
|
|
108271
|
+
ports: 443,
|
|
108272
|
+
domains: "*.customers.serve.zone",
|
|
108273
|
+
protocol: "http"
|
|
108274
|
+
},
|
|
108275
|
+
action: {
|
|
108276
|
+
type: "forward",
|
|
108277
|
+
targets: [{ host: "10.0.0.40", port: 8080 }],
|
|
108278
|
+
tls: { mode: "terminate", certificate: "auto" }
|
|
108279
|
+
},
|
|
108280
|
+
security: {
|
|
108281
|
+
ipAllowList: ["10.0.0.0/8", "172.16.0.0/12"]
|
|
108282
|
+
}
|
|
108283
|
+
},
|
|
108284
|
+
// 7. Load-balanced route with health check
|
|
108285
|
+
{
|
|
108286
|
+
id: "route-7",
|
|
108287
|
+
name: "Microservices LB",
|
|
108288
|
+
description: "Load-balanced microservices backend with IP-hash affinity",
|
|
108289
|
+
enabled: true,
|
|
108290
|
+
tags: ["web", "https", "production"],
|
|
108291
|
+
match: {
|
|
108292
|
+
ports: [443, 8443],
|
|
108293
|
+
domains: "services.serve.zone",
|
|
108294
|
+
protocol: "http"
|
|
108295
|
+
},
|
|
108296
|
+
action: {
|
|
108297
|
+
type: "forward",
|
|
108298
|
+
targets: [
|
|
108299
|
+
{ host: ["10.0.2.1", "10.0.2.2", "10.0.2.3", "10.0.2.4"], port: 3e3 }
|
|
108300
|
+
],
|
|
108301
|
+
tls: { mode: "terminate-and-reencrypt", certificate: "auto" },
|
|
108302
|
+
loadBalancing: { algorithm: "ip-hash" }
|
|
108303
|
+
}
|
|
108304
|
+
},
|
|
108305
|
+
// 8. DNS-over-HTTPS route
|
|
108306
|
+
{
|
|
108307
|
+
id: "route-8",
|
|
108308
|
+
name: "DNS over HTTPS",
|
|
108309
|
+
description: "DNS-over-HTTPS resolver endpoint",
|
|
108310
|
+
enabled: true,
|
|
108311
|
+
tags: ["dns", "https"],
|
|
108312
|
+
match: {
|
|
108313
|
+
ports: 443,
|
|
108314
|
+
domains: "dns.serve.zone",
|
|
108315
|
+
path: "/dns-query",
|
|
108316
|
+
protocol: "http"
|
|
108317
|
+
},
|
|
108318
|
+
action: {
|
|
108319
|
+
type: "forward",
|
|
108320
|
+
targets: [{ host: "10.0.3.1", port: 8053 }],
|
|
108321
|
+
tls: { mode: "terminate", certificate: "auto" }
|
|
108322
|
+
}
|
|
108323
|
+
},
|
|
108324
|
+
// 9. NFTables high-performance route
|
|
108325
|
+
{
|
|
108326
|
+
id: "route-9",
|
|
108327
|
+
name: "High-Perf TCP Proxy",
|
|
108328
|
+
description: "NFTables-accelerated TCP proxy for game servers",
|
|
108329
|
+
enabled: true,
|
|
108330
|
+
tags: ["tcp", "nftables", "production"],
|
|
108331
|
+
match: {
|
|
108332
|
+
ports: [{ from: 27e3, to: 27050 }],
|
|
108333
|
+
protocol: "tcp"
|
|
108334
|
+
},
|
|
108335
|
+
action: {
|
|
108336
|
+
type: "forward",
|
|
108337
|
+
targets: [{ host: "10.0.4.1", port: "preserve" }],
|
|
108338
|
+
forwardingEngine: "nftables"
|
|
108339
|
+
}
|
|
108340
|
+
},
|
|
108341
|
+
// 10. Disabled maintenance route
|
|
108342
|
+
{
|
|
108343
|
+
id: "route-10",
|
|
108344
|
+
name: "Legacy Admin Panel",
|
|
108345
|
+
description: "Deprecated admin panel \u2014 disabled for maintenance",
|
|
108346
|
+
enabled: false,
|
|
108347
|
+
tags: ["web", "https", "deprecated"],
|
|
108348
|
+
match: {
|
|
108349
|
+
ports: 443,
|
|
108350
|
+
domains: "admin-old.serve.zone",
|
|
108351
|
+
protocol: "http"
|
|
108352
|
+
},
|
|
108353
|
+
action: {
|
|
108354
|
+
type: "socket-handler"
|
|
108355
|
+
},
|
|
108356
|
+
security: {
|
|
108357
|
+
ipBlockList: ["0.0.0.0/0"]
|
|
108358
|
+
}
|
|
105782
108359
|
}
|
|
105783
|
-
|
|
105784
|
-
|
|
105785
|
-
|
|
108360
|
+
]);
|
|
108361
|
+
}
|
|
108362
|
+
get filteredRoutes() {
|
|
108363
|
+
if (this.currentTab === "all") return this.demoRoutes;
|
|
108364
|
+
if (this.currentTab === "https") {
|
|
108365
|
+
return this.demoRoutes.filter(
|
|
108366
|
+
(r11) => r11.tags?.some((t9) => ["web", "https", "http"].includes(t9))
|
|
108367
|
+
);
|
|
108368
|
+
}
|
|
108369
|
+
if (this.currentTab === "email") {
|
|
108370
|
+
return this.demoRoutes.filter(
|
|
108371
|
+
(r11) => r11.tags?.some((t9) => ["email", "smtp"].includes(t9))
|
|
108372
|
+
);
|
|
108373
|
+
}
|
|
108374
|
+
if (this.currentTab === "dns") {
|
|
108375
|
+
return this.demoRoutes.filter(
|
|
108376
|
+
(r11) => r11.tags?.some((t9) => ["dns"].includes(t9))
|
|
108377
|
+
);
|
|
108378
|
+
}
|
|
108379
|
+
return this.demoRoutes;
|
|
108380
|
+
}
|
|
108381
|
+
async onActivate(context2) {
|
|
108382
|
+
this.appui = context2.appui;
|
|
108383
|
+
this.appui.setContentTabs([
|
|
108384
|
+
{
|
|
108385
|
+
key: "All Routes",
|
|
108386
|
+
action: () => {
|
|
108387
|
+
this.currentTab = "all";
|
|
108388
|
+
this.updateSecondaryMenu();
|
|
108389
|
+
}
|
|
108390
|
+
},
|
|
108391
|
+
{
|
|
108392
|
+
key: "HTTP/S",
|
|
108393
|
+
action: () => {
|
|
108394
|
+
this.currentTab = "https";
|
|
108395
|
+
this.updateSecondaryMenu();
|
|
108396
|
+
}
|
|
108397
|
+
},
|
|
108398
|
+
{
|
|
108399
|
+
key: "Email",
|
|
108400
|
+
action: () => {
|
|
108401
|
+
this.currentTab = "email";
|
|
108402
|
+
this.updateSecondaryMenu();
|
|
108403
|
+
}
|
|
108404
|
+
},
|
|
108405
|
+
{
|
|
108406
|
+
key: "DNS",
|
|
108407
|
+
action: () => {
|
|
108408
|
+
this.currentTab = "dns";
|
|
108409
|
+
this.updateSecondaryMenu();
|
|
108410
|
+
}
|
|
105786
108411
|
}
|
|
105787
|
-
|
|
105788
|
-
|
|
108412
|
+
]);
|
|
108413
|
+
this.updateSecondaryMenu();
|
|
108414
|
+
}
|
|
108415
|
+
updateSecondaryMenu() {
|
|
108416
|
+
if (!this.appui) return;
|
|
108417
|
+
const total = this.demoRoutes.length;
|
|
108418
|
+
const active = this.demoRoutes.filter((r11) => r11.enabled !== false).length;
|
|
108419
|
+
const forwardCount = this.demoRoutes.filter((r11) => r11.action.type === "forward").length;
|
|
108420
|
+
this.appui.setSecondaryMenu({
|
|
108421
|
+
heading: "Routes",
|
|
108422
|
+
groups: [
|
|
108423
|
+
{
|
|
108424
|
+
name: "Actions",
|
|
108425
|
+
items: [
|
|
108426
|
+
{
|
|
108427
|
+
type: "action",
|
|
108428
|
+
key: "Refresh",
|
|
108429
|
+
iconName: "lucide:RefreshCw",
|
|
108430
|
+
action: () => {
|
|
108431
|
+
console.log("Refresh routes");
|
|
108432
|
+
}
|
|
108433
|
+
},
|
|
108434
|
+
{
|
|
108435
|
+
type: "action",
|
|
108436
|
+
key: "Add Route",
|
|
108437
|
+
iconName: "lucide:Plus",
|
|
108438
|
+
action: () => {
|
|
108439
|
+
console.log("Add route");
|
|
108440
|
+
}
|
|
108441
|
+
}
|
|
108442
|
+
]
|
|
108443
|
+
},
|
|
108444
|
+
{
|
|
108445
|
+
name: "Statistics",
|
|
108446
|
+
items: [
|
|
108447
|
+
{ type: "header", label: `${total} Total Routes` },
|
|
108448
|
+
{ type: "header", label: `${active} Active` },
|
|
108449
|
+
{ type: "header", label: `${forwardCount} Forward` },
|
|
108450
|
+
{ type: "header", label: `${total - forwardCount} Socket Handler` }
|
|
108451
|
+
]
|
|
108452
|
+
}
|
|
108453
|
+
]
|
|
108454
|
+
});
|
|
108455
|
+
}
|
|
108456
|
+
onDeactivate() {
|
|
108457
|
+
}
|
|
105789
108458
|
render() {
|
|
105790
108459
|
return b2`
|
|
105791
|
-
<
|
|
105792
|
-
|
|
105793
|
-
|
|
105794
|
-
|
|
105795
|
-
|
|
105796
|
-
|
|
105797
|
-
<sz-settings-view
|
|
105798
|
-
.settings=${this.demoSettings}
|
|
105799
|
-
currentUser="admin"
|
|
105800
|
-
@setting-change=${(e11) => console.log("Setting change:", e11.detail)}
|
|
105801
|
-
@change-password=${(e11) => console.log("Change password:", e11.detail)}
|
|
105802
|
-
@reset=${() => console.log("Reset settings")}
|
|
105803
|
-
@save=${(e11) => console.log("Save settings:", e11.detail)}
|
|
105804
|
-
></sz-settings-view>
|
|
105805
|
-
</div>
|
|
108460
|
+
<sz-route-list-view
|
|
108461
|
+
.routes=${this.filteredRoutes}
|
|
108462
|
+
@route-click=${(e11) => {
|
|
108463
|
+
console.log("Route clicked:", e11.detail.name);
|
|
108464
|
+
}}
|
|
108465
|
+
></sz-route-list-view>
|
|
105806
108466
|
`;
|
|
105807
108467
|
}
|
|
105808
108468
|
};
|
|
105809
|
-
|
|
105810
|
-
|
|
105811
|
-
|
|
108469
|
+
_init39 = __decoratorStart(_a39);
|
|
108470
|
+
_currentTab3 = new WeakMap();
|
|
108471
|
+
__decorateElement(_init39, 4, "currentTab", _currentTab_dec3, SzDemoViewRoutes, _currentTab3);
|
|
108472
|
+
SzDemoViewRoutes = __decorateElement(_init39, 0, "SzDemoViewRoutes", _SzDemoViewRoutes_decorators, SzDemoViewRoutes);
|
|
108473
|
+
__publicField(SzDemoViewRoutes, "styles", [
|
|
108474
|
+
cssManager.defaultStyles,
|
|
108475
|
+
i`
|
|
108476
|
+
:host {
|
|
108477
|
+
display: block;
|
|
108478
|
+
padding: 24px;
|
|
108479
|
+
height: 100%;
|
|
108480
|
+
overflow-y: auto;
|
|
108481
|
+
box-sizing: border-box;
|
|
108482
|
+
}
|
|
108483
|
+
`
|
|
108484
|
+
]);
|
|
108485
|
+
__runInitializers(_init39, 1, SzDemoViewRoutes);
|
|
105812
108486
|
|
|
105813
108487
|
// ts_web/pages/index.ts
|
|
105814
108488
|
var pages_exports = {};
|
|
@@ -109526,9 +112200,9 @@ var DeesAppuiBar = (() => {
|
|
|
109526
112200
|
|
|
109527
112201
|
// node_modules/.pnpm/@design.estate+dees-catalog@3.43.0_@tiptap+pm@2.27.2/node_modules/@design.estate/dees-catalog/dist_ts_web/elements/00group-appui/dees-appui-bottombar/dees-appui-bottombar.demo.js
|
|
109528
112202
|
init_dist_ts29();
|
|
109529
|
-
var
|
|
112203
|
+
var _a40;
|
|
109530
112204
|
var demoFunc5 = () => {
|
|
109531
|
-
return b2(
|
|
112205
|
+
return b2(_a40 || (_a40 = __template([`
|
|
109532
112206
|
<dees-demowrapper>
|
|
109533
112207
|
<style>
|
|
109534
112208
|
.demo-container {
|
|
@@ -110580,7 +113254,7 @@ var DeesPanel = (() => {
|
|
|
110580
113254
|
|
|
110581
113255
|
// node_modules/.pnpm/@design.estate+dees-catalog@3.43.0_@tiptap+pm@2.27.2/node_modules/@design.estate/dees-catalog/dist_ts_web/elements/00group-dataview/dees-statsgrid/dees-statsgrid.demo.js
|
|
110582
113256
|
init_dist_ts29();
|
|
110583
|
-
var
|
|
113257
|
+
var _a41;
|
|
110584
113258
|
var generateCpuCores = (count2) => {
|
|
110585
113259
|
return Array.from({ length: count2 }, (_4, i11) => ({
|
|
110586
113260
|
id: i11,
|
|
@@ -110589,7 +113263,7 @@ var generateCpuCores = (count2) => {
|
|
|
110589
113263
|
}));
|
|
110590
113264
|
};
|
|
110591
113265
|
var demoFunc7 = () => {
|
|
110592
|
-
return b2(
|
|
113266
|
+
return b2(_a41 || (_a41 = __template(["\n <dees-demowrapper>\n <style>\n ", '\n </style>\n \n <div class="demo-container">\n <dees-panel .title=', " .subtitle=", ">\n <dees-statsgrid\n .tiles=", "\n .gridActions=", "\n .minTileWidth=", "\n .gap=", '\n ></dees-statsgrid>\n \n <div id="action-output" style="margin-top: 16px; padding: 12px; background: ', "; border-radius: 6px; font-size: 14px; font-family: monospace; color: ", ';">\n <em>Click on tile actions or grid actions to see the result...</em>\n </div>\n </dees-panel>\n \n <dees-panel .title=', " .subtitle=", ">\n <dees-statsgrid\n .tiles=", "\n .minTileWidth=", "\n .gap=", '\n ></dees-statsgrid>\n \n <div class="tile-config">\n <div class="config-section">\n <div class="config-title">Configuration Options</div>\n <div class="config-description">\n Each tile type supports different properties:\n <ul style="margin: 8px 0; padding-left: 20px;">\n <li><strong>Number:</strong> value, unit, color, description</li>\n <li><strong>Gauge:</strong> value, unit, gaugeOptions (min, max, thresholds)</li>\n <li><strong>Percentage:</strong> value (0-100), color, description</li>\n <li><strong>Trend:</strong> value, unit, trendData array, description</li>\n <li><strong>Text:</strong> value (string), color, description</li>\n </ul>\n </div>\n </div>\n </div>\n </dees-panel>\n \n <dees-panel .title=', " .subtitle=", '>\n <h4 style="margin: 0 0 16px 0; font-size: 16px; font-weight: 600;">Compact Layout (180px tiles)</h4>\n <dees-statsgrid\n .tiles=', "\n .minTileWidth=", "\n .gap=", '\n ></dees-statsgrid>\n \n <h4 style="margin: 24px 0 16px 0; font-size: 16px; font-weight: 600;">Spacious Layout (320px tiles)</h4>\n <dees-statsgrid\n .tiles=', "\n .minTileWidth=", "\n .gap=", "\n ></dees-statsgrid>\n </dees-panel>\n \n <dees-panel .title=", " .subtitle=", '>\n <dees-statsgrid\n id="cpu-cores-grid"\n .tiles=', "\n .gridActions=", "\n .minTileWidth=", "\n .gap=", "\n ></dees-statsgrid>\n </dees-panel>\n\n <dees-panel .title=", " .subtitle=", '>\n <dees-statsgrid\n id="interactive-grid"\n .tiles=', "\n .gridActions=", "\n .minTileWidth=", "\n .gap=", "\n ></dees-statsgrid>\n </dees-panel>\n \n <dees-panel .title=", " .subtitle=", '>\n <div class="code-block">', "</div>\n </dees-panel>\n\n <dees-panel .title=", " .subtitle=", ">\n <dees-statsgrid\n .tiles=", "\n .minTileWidth=", "\n .gap=", `
|
|
110593
113267
|
></dees-statsgrid>
|
|
110594
113268
|
|
|
110595
113269
|
<div class="tile-config">
|
|
@@ -143486,8 +146160,8 @@ var DeesInputRichtext = (() => {
|
|
|
143486
146160
|
|
|
143487
146161
|
// node_modules/.pnpm/@design.estate+dees-catalog@3.43.0_@tiptap+pm@2.27.2/node_modules/@design.estate/dees-catalog/dist_ts_web/elements/00group-input/dees-input-tags/dees-input-tags.demo.js
|
|
143488
146162
|
init_dist_ts29();
|
|
143489
|
-
var
|
|
143490
|
-
var demoFunc42 = () => b2(
|
|
146163
|
+
var _a42;
|
|
146164
|
+
var demoFunc42 = () => b2(_a42 || (_a42 = __template(["\n <dees-demowrapper>\n <style>\n ", '\n </style>\n \n <div class="demo-container">\n <dees-panel .title=', " .subtitle=", ">\n <dees-input-tags\n .label=", "\n .placeholder=", "\n .value=", "\n .description=", "\n ></dees-input-tags>\n </dees-panel>\n\n <dees-panel .title=", " .subtitle=", ">\n <dees-input-tags\n .label=", "\n .placeholder=", "\n .suggestions=", "\n .value=", "\n .description=", "\n ></dees-input-tags>\n </dees-panel>\n\n <dees-panel .title=", " .subtitle=", '>\n <div class="grid-layout">\n <dees-input-tags\n .label=', "\n .placeholder=", "\n .maxTags=", "\n .value=", "\n .description=", "\n ></dees-input-tags>\n \n <dees-input-tags\n .label=", "\n .placeholder=", "\n .maxTags=", "\n .suggestions=", "\n .value=", "\n .description=", "\n ></dees-input-tags>\n </div>\n </dees-panel>\n\n <dees-panel .title=", " .subtitle=", ">\n <dees-input-tags\n .label=", "\n .placeholder=", "\n .required=", "\n .description=", "\n ></dees-input-tags>\n </dees-panel>\n\n <dees-panel .title=", " .subtitle=", ">\n <dees-input-tags\n .label=", "\n .value=", "\n .disabled=", "\n .description=", "\n ></dees-input-tags>\n </dees-panel>\n\n <dees-panel .title=", " .subtitle=", ">\n <dees-form>\n <dees-input-text\n .label=", "\n .placeholder=", "\n .required=", "\n .key=", '\n ></dees-input-text>\n \n <div class="grid-layout">\n <dees-input-tags\n .label=', "\n .placeholder=", "\n .required=", "\n .key=", "\n .suggestions=", "\n ></dees-input-tags>\n \n <dees-input-tags\n .label=", "\n .placeholder=", "\n .key=", "\n .maxTags=", "\n .suggestions=", "\n ></dees-input-tags>\n </div>\n \n <dees-input-text\n .label=", "\n .inputType=", "\n .placeholder=", "\n .key=", "\n ></dees-input-text>\n \n <dees-form-submit .text=", "></dees-form-submit>\n </dees-form>\n </dees-panel>\n\n <dees-panel .title=", " .subtitle=", '>\n <dees-input-tags\n id="interactive-tags"\n .label=', "\n .placeholder=", "\n .suggestions=", "\n @change=", `
|
|
143491
146165
|
></dees-input-tags>
|
|
143492
146166
|
|
|
143493
146167
|
<div class="tag-preview" id="tags-preview">
|
|
@@ -175759,9 +178433,9 @@ init_group_runtime();
|
|
|
175759
178433
|
|
|
175760
178434
|
// ts_web/pages/sz-demo-app-shell.ts
|
|
175761
178435
|
init_dist_ts29();
|
|
175762
|
-
var _SzDemoAppShell_decorators,
|
|
178436
|
+
var _SzDemoAppShell_decorators, _init40, _a43;
|
|
175763
178437
|
_SzDemoAppShell_decorators = [t4("sz-demo-app-shell")];
|
|
175764
|
-
var SzDemoAppShell = class extends (
|
|
178438
|
+
var SzDemoAppShell = class extends (_a43 = DeesElement) {
|
|
175765
178439
|
static styles = [
|
|
175766
178440
|
cssManager.defaultStyles,
|
|
175767
178441
|
i`
|
|
@@ -175907,6 +178581,18 @@ var SzDemoAppShell = class extends (_a37 = DeesElement) {
|
|
|
175907
178581
|
iconName: "lucide:Key",
|
|
175908
178582
|
content: "sz-demo-view-tokens"
|
|
175909
178583
|
},
|
|
178584
|
+
{
|
|
178585
|
+
id: "mta",
|
|
178586
|
+
name: "Email / MTA",
|
|
178587
|
+
iconName: "lucide:Mail",
|
|
178588
|
+
content: "sz-demo-view-mta"
|
|
178589
|
+
},
|
|
178590
|
+
{
|
|
178591
|
+
id: "routes",
|
|
178592
|
+
name: "Routes",
|
|
178593
|
+
iconName: "lucide:Route",
|
|
178594
|
+
content: "sz-demo-view-routes"
|
|
178595
|
+
},
|
|
175910
178596
|
{
|
|
175911
178597
|
id: "settings",
|
|
175912
178598
|
name: "Settings",
|
|
@@ -175922,7 +178608,7 @@ var SzDemoAppShell = class extends (_a37 = DeesElement) {
|
|
|
175922
178608
|
},
|
|
175923
178609
|
{
|
|
175924
178610
|
name: "Infrastructure",
|
|
175925
|
-
views: ["services", "network", "registries"]
|
|
178611
|
+
views: ["services", "network", "registries", "mta", "routes"]
|
|
175926
178612
|
},
|
|
175927
178613
|
{
|
|
175928
178614
|
name: "Administration",
|
|
@@ -175954,9 +178640,9 @@ var SzDemoAppShell = class extends (_a37 = DeesElement) {
|
|
|
175954
178640
|
]);
|
|
175955
178641
|
}
|
|
175956
178642
|
};
|
|
175957
|
-
|
|
175958
|
-
SzDemoAppShell = __decorateElement(
|
|
175959
|
-
__runInitializers(
|
|
178643
|
+
_init40 = __decoratorStart(_a43);
|
|
178644
|
+
SzDemoAppShell = __decorateElement(_init40, 0, "SzDemoAppShell", _SzDemoAppShell_decorators, SzDemoAppShell);
|
|
178645
|
+
__runInitializers(_init40, 1, SzDemoAppShell);
|
|
175960
178646
|
|
|
175961
178647
|
// html/index.ts
|
|
175962
178648
|
setupWccTools({
|