@wecode-team/cms-supabase-api 0.1.46 → 0.1.48

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/index.esm.js CHANGED
@@ -673,6 +673,10 @@ function getSupabaseSetupSQL() {
673
673
  return "-- Supabase Setup SQL for we0-cms-supabase-hono-api\n-- \u8BF7\u5728 Supabase SQL \u7F16\u8F91\u5668\u4E2D\u6267\u884C\u4EE5\u4E0B\u5B8C\u6574\u811A\u672C\n\n-- Function to execute SQL queries\nCREATE OR REPLACE FUNCTION execute_sql(sql_query text)\nRETURNS json\nLANGUAGE plpgsql\nSECURITY DEFINER\nAS $$\nDECLARE\n result json;\n row_count integer;\nBEGIN\n EXECUTE sql_query;\n GET DIAGNOSTICS row_count = ROW_COUNT;\n RETURN json_build_object('success', true, 'rows_affected', row_count);\nEXCEPTION\n WHEN OTHERS THEN\n RETURN json_build_object('success', false, 'error', SQLERRM);\nEND;\n$$;\n\n-- Function to execute SQL with parameters (simplified version)\nCREATE OR REPLACE FUNCTION execute_sql_with_params(sql_query text, params json)\nRETURNS json\nLANGUAGE plpgsql\nSECURITY DEFINER\nAS $$\nDECLARE\n result json;\n row_count integer;\nBEGIN\n -- Note: This is a simplified version for basic use cases\n -- In production, you might want more sophisticated parameter binding\n EXECUTE sql_query;\n GET DIAGNOSTICS row_count = ROW_COUNT;\n RETURN json_build_object('success', true, 'rows_affected', row_count);\nEXCEPTION\n WHEN OTHERS THEN\n RETURN json_build_object('success', false, 'error', SQLERRM);\nEND;\n$$;\n\n-- Function to check if table exists\nCREATE OR REPLACE FUNCTION check_table_exists(input_table_name text)\nRETURNS boolean\nLANGUAGE plpgsql\nSECURITY DEFINER\nAS $$\nBEGIN\n RETURN EXISTS (\n SELECT 1 FROM information_schema.tables\n WHERE table_schema = 'public' \n AND table_name = input_table_name\n );\nEND;\n$$;\n\n-- Function to get table structure\nCREATE OR REPLACE FUNCTION get_table_structure(table_name text)\nRETURNS json\nLANGUAGE plpgsql\nSECURITY DEFINER\nAS $$\nDECLARE\n result json;\nBEGIN\n SELECT json_agg(\n json_build_object(\n 'column_name', column_name,\n 'data_type', data_type,\n 'is_nullable', is_nullable,\n 'column_default', column_default,\n 'character_maximum_length', character_maximum_length\n )\n ) INTO result\n FROM information_schema.columns\n WHERE table_schema = 'public' AND table_name = $1\n ORDER BY ordinal_position;\n \n RETURN COALESCE(result, '[]'::json);\nEND;\n$$;\n\n-- Function to create CMS models table if not exists\nCREATE OR REPLACE FUNCTION create_cms_models_table_if_not_exists()\nRETURNS json\nLANGUAGE plpgsql\nSECURITY DEFINER\nAS $$\nBEGIN\n -- Create the CMS models table\n CREATE TABLE IF NOT EXISTS \"_cms_models\" (\n id SERIAL PRIMARY KEY,\n name VARCHAR(100) NOT NULL,\n table_name VARCHAR(100) NOT NULL UNIQUE,\n json_schema JSONB NOT NULL,\n created_at TIMESTAMPTZ DEFAULT NOW(),\n updated_at TIMESTAMPTZ DEFAULT NOW()\n );\n \n -- Create or replace the trigger function for updating timestamps\n CREATE OR REPLACE FUNCTION update_updated_at_column()\n RETURNS TRIGGER AS $trigger$\n BEGIN\n NEW.updated_at = NOW();\n RETURN NEW;\n END;\n $trigger$ language 'plpgsql';\n \n -- Drop existing trigger if it exists and create new one\n DROP TRIGGER IF EXISTS update_cms_models_updated_at ON \"_cms_models\";\n CREATE TRIGGER update_cms_models_updated_at\n BEFORE UPDATE ON \"_cms_models\"\n FOR EACH ROW\n EXECUTE FUNCTION update_updated_at_column();\n \n RETURN json_build_object('success', true, 'message', 'CMS models table created successfully');\nEXCEPTION\n WHEN OTHERS THEN\n RETURN json_build_object('success', false, 'error', SQLERRM);\nEND;\n$$;\n\n-- Initialize the CMS models table\nSELECT create_cms_models_table_if_not_exists();\n\n-- Grant necessary permissions (adjust as needed for your security requirements)\n-- Note: Be careful with these permissions in production\nGRANT USAGE ON SCHEMA public TO anon, authenticated;\nGRANT ALL ON ALL TABLES IN SCHEMA public TO anon, authenticated;\nGRANT ALL ON ALL SEQUENCES IN SCHEMA public TO anon, authenticated;\nGRANT ALL ON ALL FUNCTIONS IN SCHEMA public TO anon, authenticated;\n\n-- Create RLS policies for the CMS models table (optional, adjust as needed)\nALTER TABLE \"_cms_models\" ENABLE ROW LEVEL SECURITY;\n\n-- Allow all operations for all users (development environment)\nCREATE POLICY \"Allow all operations\" ON \"_cms_models\"\n FOR ALL USING (true);\n\nCOMMENT ON TABLE \"_cms_models\" IS 'CMS models configuration table for we0-cms-supabase-hono-api';\nCOMMENT ON FUNCTION execute_sql(text) IS 'Execute SQL queries for dynamic table management';\nCOMMENT ON FUNCTION check_table_exists(text) IS 'Check if a table exists in the public schema';\nCOMMENT ON FUNCTION get_table_structure(text) IS 'Get the structure of a table';";
674
674
  }
675
675
 
676
+ var feishuAlertConfig = {
677
+ crudErrorWebhookUrls: ["https://open.feishu.cn/open-apis/bot/v2/hook/784e9470-c1fd-4e38-97a2-b9a1856c00b1"]
678
+ };
679
+
676
680
  function _classCallCheck(a, n) {
677
681
  if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function");
678
682
  }
@@ -1007,8 +1011,8 @@ function _defineProperty(e, r, t) {
1007
1011
  }) : e[r] = t, e;
1008
1012
  }
1009
1013
 
1010
- function ownKeys$5(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1011
- function _objectSpread$5(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$5(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$5(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1014
+ function ownKeys$4(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1015
+ function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$4(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$4(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1012
1016
  function _createForOfIteratorHelper$2(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$3(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
1013
1017
  function _unsupportedIterableToArray$3(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$3(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$3(r, a) : void 0; } }
1014
1018
  function _arrayLikeToArray$3(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
@@ -1016,6 +1020,7 @@ function _arrayLikeToArray$3(r, a) { (null == a || a > r.length) && (a = r.lengt
1016
1020
  var fieldTypeMapping = {
1017
1021
  string: "text",
1018
1022
  text: "text",
1023
+ richText: "text",
1019
1024
  integer: "int4",
1020
1025
  "float": "float8",
1021
1026
  "boolean": "bool",
@@ -2063,7 +2068,7 @@ var DynamicTableService = /*#__PURE__*/function () {
2063
2068
  throw error;
2064
2069
  case 2:
2065
2070
  return _context14.abrupt("return", (data || []).map(function (item) {
2066
- return _objectSpread$5({
2071
+ return _objectSpread$4({
2067
2072
  id: item.id,
2068
2073
  label: item[displayField] || "ID: ".concat(item.id)
2069
2074
  }, item);
@@ -2176,8 +2181,8 @@ function getDynamicTableService() {
2176
2181
  return defaultService$1;
2177
2182
  }
2178
2183
 
2179
- function ownKeys$4(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2180
- function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$4(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$4(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2184
+ function ownKeys$3(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2185
+ function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$3(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$3(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2181
2186
  var AuthService = /*#__PURE__*/function () {
2182
2187
  function AuthService() {
2183
2188
  _classCallCheck(this, AuthService);
@@ -2354,7 +2359,7 @@ var AuthService = /*#__PURE__*/function () {
2354
2359
  return _regeneratorRuntime.wrap(function (_context4) {
2355
2360
  while (1) switch (_context4.prev = _context4.next) {
2356
2361
  case 0:
2357
- finalUserData = _objectSpread$4({
2362
+ finalUserData = _objectSpread$3({
2358
2363
  tableName: this.defaultTableName
2359
2364
  }, userData);
2360
2365
  _context4.prev = 1;
@@ -2412,7 +2417,7 @@ var AuthService = /*#__PURE__*/function () {
2412
2417
  case 0:
2413
2418
  updateData = _args5.length > 1 && _args5[1] !== undefined ? _args5[1] : {};
2414
2419
  // 设置默认值
2415
- finalUpdateData = _objectSpread$4({
2420
+ finalUpdateData = _objectSpread$3({
2416
2421
  tableName: this.defaultTableName
2417
2422
  }, updateData);
2418
2423
  _context5.prev = 1;
@@ -2820,8 +2825,8 @@ function _toConsumableArray(r) {
2820
2825
  return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray$2(r) || _nonIterableSpread();
2821
2826
  }
2822
2827
 
2823
- function ownKeys$3(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2824
- function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$3(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$3(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2828
+ function ownKeys$2(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2829
+ function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$2(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$2(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2825
2830
  function _callSuper$1(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct$1() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
2826
2831
  function _isNativeReflectConstruct$1() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct$1 = function _isNativeReflectConstruct() { return !!t; })(); }
2827
2832
  // src/error.ts
@@ -3349,7 +3354,7 @@ var DEFAULT_LIMITS = {
3349
3354
  other: 10 * 1024 * 1024
3350
3355
  };
3351
3356
  function getSizeLimit(fileName, limits) {
3352
- var merged = _objectSpread$3(_objectSpread$3({}, DEFAULT_LIMITS), limits);
3357
+ var merged = _objectSpread$2(_objectSpread$2({}, DEFAULT_LIMITS), limits);
3353
3358
  if (isImage(fileName)) return merged.image;
3354
3359
  if (isVideo(fileName)) return merged.video;
3355
3360
  return merged.other;
@@ -3377,7 +3382,7 @@ function _compressImageBlob() {
3377
3382
  return _regeneratorRuntime.wrap(function (_context10) {
3378
3383
  while (1) switch (_context10.prev = _context10.next) {
3379
3384
  case 0:
3380
- opts = _objectSpread$3(_objectSpread$3({}, DEFAULT_COMPRESS), options);
3385
+ opts = _objectSpread$2(_objectSpread$2({}, DEFAULT_COMPRESS), options);
3381
3386
  if (!(typeof createImageBitmap === "undefined" || typeof OffscreenCanvas === "undefined")) {
3382
3387
  _context10.next = 1;
3383
3388
  break;
@@ -3443,7 +3448,7 @@ function _processFile() {
3443
3448
  return _regeneratorRuntime.wrap(function (_context11) {
3444
3449
  while (1) switch (_context11.prev = _context11.next) {
3445
3450
  case 0:
3446
- opts = _objectSpread$3(_objectSpread$3({}, DEFAULT_COMPRESS), compress);
3451
+ opts = _objectSpread$2(_objectSpread$2({}, DEFAULT_COMPRESS), compress);
3447
3452
  if (!(opts.enabled && isImage(fileName))) {
3448
3453
  _context11.next = 2;
3449
3454
  break;
@@ -3507,7 +3512,7 @@ function createOssClient() {
3507
3512
  var allowedExtensions = options.allowedExtensions;
3508
3513
  function mergeRetry(override) {
3509
3514
  if (!defaultRetry && !override) return void 0;
3510
- return _objectSpread$3(_objectSpread$3({}, defaultRetry), override);
3515
+ return _objectSpread$2(_objectSpread$2({}, defaultRetry), override);
3511
3516
  }
3512
3517
  function resolveCompress(override) {
3513
3518
  if (override === false) return {
@@ -3517,7 +3522,7 @@ function createOssClient() {
3517
3522
  enabled: false
3518
3523
  };
3519
3524
  var base = _typeof$1(defaultCompress) === "object" ? defaultCompress : {};
3520
- return override ? _objectSpread$3(_objectSpread$3({}, base), override) : Object.keys(base).length ? base : void 0;
3525
+ return override ? _objectSpread$2(_objectSpread$2({}, base), override) : Object.keys(base).length ? base : void 0;
3521
3526
  }
3522
3527
  function uploadOne(_x25, _x26, _x27, _x28) {
3523
3528
  return _uploadOne.apply(this, arguments);
@@ -3603,7 +3608,7 @@ function createOssClient() {
3603
3608
  var i = index++;
3604
3609
  var item = files[i];
3605
3610
  running++;
3606
- var fileOpts = _objectSpread$3({
3611
+ var fileOpts = _objectSpread$2({
3607
3612
  retry: opts === null || opts === void 0 ? void 0 : opts.retry,
3608
3613
  compress: opts === null || opts === void 0 ? void 0 : opts.compress
3609
3614
  }, item.options);
@@ -4048,6 +4053,141 @@ function _isUserSessionAdmin() {
4048
4053
  return _isUserSessionAdmin.apply(this, arguments);
4049
4054
  }
4050
4055
 
4056
+ var ACTION_LABELS = {
4057
+ create: "创建",
4058
+ read: "查询",
4059
+ update: "更新",
4060
+ "delete": "删除"
4061
+ };
4062
+ var TARGET_LABELS = {
4063
+ data: "数据",
4064
+ model: "模型"
4065
+ };
4066
+ function getWebhookUrls() {
4067
+ return feishuAlertConfig.crudErrorWebhookUrls.map(function (item) {
4068
+ return item.trim();
4069
+ }).filter(Boolean);
4070
+ }
4071
+ function getErrorMessage(error) {
4072
+ if (error instanceof Error) {
4073
+ return error.message;
4074
+ }
4075
+ return String(error);
4076
+ }
4077
+ function getErrorStack(error) {
4078
+ if (error instanceof Error) {
4079
+ return error.stack || "";
4080
+ }
4081
+ return "";
4082
+ }
4083
+ function buildRequestSummary(c) {
4084
+ var url = new URL(c.req.url);
4085
+ return ["method: ".concat(c.req.method), "path: ".concat(url.pathname), "query: ".concat(url.search || "-"), "userAgent: ".concat(c.req.header("user-agent") || "-")].join("\n");
4086
+ }
4087
+ function getSessionId(c) {
4088
+ return c.req.header("X-Session-Id") || c.req.header("x-session-id") || "-";
4089
+ }
4090
+ function buildAlertText(c, options) {
4091
+ var _options$modelId, _options$recordId;
4092
+ var actionLabel = ACTION_LABELS[options.action];
4093
+ var targetLabel = TARGET_LABELS[options.target];
4094
+ var lines = ["\u5305\u540D: @wecode-team/cms-supabase-api", "\u5BBF\u4E3B\u9879\u76EE\u6807\u8BC6(sessionId): ".concat(getSessionId(c)), "\u64CD\u4F5C\u5BF9\u8C61: ".concat(targetLabel), "\u64CD\u4F5C\u7C7B\u578B: ".concat(actionLabel), "\u6570\u636E\u8868\u540D: ".concat(options.tableName || "-"), "\u6A21\u578B ID: ".concat((_options$modelId = options.modelId) !== null && _options$modelId !== void 0 ? _options$modelId : "-"), "\u8BB0\u5F55 ID: ".concat((_options$recordId = options.recordId) !== null && _options$recordId !== void 0 ? _options$recordId : "-"), "\u65F6\u95F4: ".concat(new Date().toISOString()), "\u9519\u8BEF\u4FE1\u606F: ".concat(getErrorMessage(options.error)), "\u8BF7\u6C42\u4FE1\u606F:\n".concat(buildRequestSummary(c))];
4095
+ var stack = getErrorStack(options.error);
4096
+ if (stack) {
4097
+ lines.push("\u9519\u8BEF\u5806\u6808:\n".concat(stack));
4098
+ }
4099
+ return lines.join("\n\n");
4100
+ }
4101
+ function postWebhook(_x, _x2) {
4102
+ return _postWebhook.apply(this, arguments);
4103
+ }
4104
+ function _postWebhook() {
4105
+ _postWebhook = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(webhook, body) {
4106
+ var response;
4107
+ return _regeneratorRuntime.wrap(function (_context) {
4108
+ while (1) switch (_context.prev = _context.next) {
4109
+ case 0:
4110
+ _context.next = 1;
4111
+ return fetch(webhook, {
4112
+ method: "POST",
4113
+ headers: {
4114
+ "Content-Type": "application/json"
4115
+ },
4116
+ body: JSON.stringify(body)
4117
+ });
4118
+ case 1:
4119
+ response = _context.sent;
4120
+ if (response.ok) {
4121
+ _context.next = 2;
4122
+ break;
4123
+ }
4124
+ throw new Error("\u98DE\u4E66\u62A5\u8B66\u53D1\u9001\u5931\u8D25: ".concat(response.status, " ").concat(response.statusText));
4125
+ case 2:
4126
+ case "end":
4127
+ return _context.stop();
4128
+ }
4129
+ }, _callee);
4130
+ }));
4131
+ return _postWebhook.apply(this, arguments);
4132
+ }
4133
+ function notifyCmsCrudErrorToFeishu(_x3, _x4) {
4134
+ return _notifyCmsCrudErrorToFeishu.apply(this, arguments);
4135
+ }
4136
+ function _notifyCmsCrudErrorToFeishu() {
4137
+ _notifyCmsCrudErrorToFeishu = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(c, options) {
4138
+ var webhookUrls, body, results, failed;
4139
+ return _regeneratorRuntime.wrap(function (_context2) {
4140
+ while (1) switch (_context2.prev = _context2.next) {
4141
+ case 0:
4142
+ webhookUrls = getWebhookUrls();
4143
+ if (!(webhookUrls.length === 0)) {
4144
+ _context2.next = 1;
4145
+ break;
4146
+ }
4147
+ return _context2.abrupt("return");
4148
+ case 1:
4149
+ body = {
4150
+ msg_type: "post",
4151
+ content: {
4152
+ post: {
4153
+ zh_cn: {
4154
+ title: "[cms-supabase-api] ".concat(TARGET_LABELS[options.target]).concat(ACTION_LABELS[options.action], "\u5F02\u5E38"),
4155
+ content: [[{
4156
+ tag: "text",
4157
+ text: buildAlertText(c, options)
4158
+ }]]
4159
+ }
4160
+ }
4161
+ }
4162
+ };
4163
+ _context2.next = 2;
4164
+ return Promise.allSettled(webhookUrls.map(function (url) {
4165
+ return postWebhook(url, body);
4166
+ }));
4167
+ case 2:
4168
+ results = _context2.sent;
4169
+ failed = results.find(function (result) {
4170
+ return result.status === "rejected";
4171
+ });
4172
+ if (!((failed === null || failed === void 0 ? void 0 : failed.status) === "rejected")) {
4173
+ _context2.next = 3;
4174
+ break;
4175
+ }
4176
+ throw failed.reason;
4177
+ case 3:
4178
+ case "end":
4179
+ return _context2.stop();
4180
+ }
4181
+ }, _callee2);
4182
+ }));
4183
+ return _notifyCmsCrudErrorToFeishu.apply(this, arguments);
4184
+ }
4185
+ function reportCmsCrudErrorToFeishu(c, options) {
4186
+ void notifyCmsCrudErrorToFeishu(c, options)["catch"](function (feishuError) {
4187
+ console.error("飞书报警发送失败:", feishuError);
4188
+ });
4189
+ }
4190
+
4051
4191
  function _createForOfIteratorHelper$1(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$1(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
4052
4192
  function _unsupportedIterableToArray$1(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$1(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$1(r, a) : void 0; } }
4053
4193
  function _arrayLikeToArray$1(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
@@ -4349,6 +4489,11 @@ function _createModel() {
4349
4489
  _context3.prev = 15;
4350
4490
  _t3 = _context3["catch"](0);
4351
4491
  console.error("创建模型失败:", _t3);
4492
+ reportCmsCrudErrorToFeishu(c, {
4493
+ action: "create",
4494
+ target: "model",
4495
+ error: _t3
4496
+ });
4352
4497
  _response9 = {
4353
4498
  success: false,
4354
4499
  message: "创建模型失败",
@@ -4440,6 +4585,11 @@ function _updateModel() {
4440
4585
  _context4.prev = 8;
4441
4586
  _t4 = _context4["catch"](0);
4442
4587
  console.error("更新模型失败:", _t4);
4588
+ reportCmsCrudErrorToFeishu(c, {
4589
+ action: "update",
4590
+ target: "model",
4591
+ error: _t4
4592
+ });
4443
4593
  _response11 = {
4444
4594
  success: false,
4445
4595
  message: "更新模型失败",
@@ -4521,6 +4671,11 @@ function _deleteModel() {
4521
4671
  _context5.prev = 8;
4522
4672
  _t5 = _context5["catch"](0);
4523
4673
  console.error("删除模型失败:", _t5);
4674
+ reportCmsCrudErrorToFeishu(c, {
4675
+ action: "delete",
4676
+ target: "model",
4677
+ error: _t5
4678
+ });
4524
4679
  _response15 = {
4525
4680
  success: false,
4526
4681
  message: "删除模型失败",
@@ -4582,8 +4737,8 @@ var _excluded = ["id", "created_at", "updated_at"],
4582
4737
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n2 = 0, F = function F() {}; return { s: F, n: function n() { return _n2 >= r.length ? { done: !0 } : { done: !1, value: r[_n2++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
4583
4738
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4584
4739
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
4585
- function ownKeys$2(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4586
- function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$2(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$2(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4740
+ function ownKeys$1(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4741
+ function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4587
4742
  function normalizeJsonLikeFields(schemaFields, payload) {
4588
4743
  if (!schemaFields || schemaFields.length === 0) return payload;
4589
4744
  var jsonLikeFieldNames = new Set(schemaFields.filter(function (f) {
@@ -4592,7 +4747,7 @@ function normalizeJsonLikeFields(schemaFields, payload) {
4592
4747
  return f.name;
4593
4748
  }));
4594
4749
  if (jsonLikeFieldNames.size === 0) return payload;
4595
- var normalized = _objectSpread$2({}, payload);
4750
+ var normalized = _objectSpread$1({}, payload);
4596
4751
  for (var _i = 0, _Object$entries = Object.entries(payload); _i < _Object$entries.length; _i++) {
4597
4752
  var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
4598
4753
  key = _Object$entries$_i[0],
@@ -4887,7 +5042,7 @@ function _getTableData() {
4887
5042
  }
4888
5043
  // 找到所有文本类型的字段
4889
5044
  searchableFields = schemaFields.filter(function (field) {
4890
- return field.type === 'string' || field.type === 'text';
5045
+ return field.type === 'string' || field.type === 'text' || field.type === 'richText';
4891
5046
  }).map(function (field) {
4892
5047
  return field.name;
4893
5048
  });
@@ -4932,6 +5087,12 @@ function _getTableData() {
4932
5087
  _context.prev = 16;
4933
5088
  _t2 = _context["catch"](0);
4934
5089
  console.error("获取表数据失败:", _t2);
5090
+ reportCmsCrudErrorToFeishu(c, {
5091
+ action: "read",
5092
+ target: "data",
5093
+ tableName: tableName,
5094
+ error: _t2
5095
+ });
4935
5096
  _response3 = {
4936
5097
  success: false,
4937
5098
  message: "获取表数据失败",
@@ -5018,6 +5179,12 @@ function _createTableData() {
5018
5179
  _context2.prev = 8;
5019
5180
  _t4 = _context2["catch"](0);
5020
5181
  console.error("创建数据失败:", _t4);
5182
+ reportCmsCrudErrorToFeishu(c, {
5183
+ action: "create",
5184
+ target: "data",
5185
+ tableName: tableName,
5186
+ error: _t4
5187
+ });
5021
5188
  _response5 = {
5022
5189
  success: false,
5023
5190
  message: "创建数据失败",
@@ -5149,6 +5316,12 @@ function _updateTableData() {
5149
5316
  _context3.prev = 13;
5150
5317
  _t6 = _context3["catch"](0);
5151
5318
  console.error("更新数据失败:", _t6);
5319
+ reportCmsCrudErrorToFeishu(c, {
5320
+ action: "update",
5321
+ target: "data",
5322
+ tableName: tableName,
5323
+ error: _t6
5324
+ });
5152
5325
  _response1 = {
5153
5326
  success: false,
5154
5327
  message: "更新数据失败",
@@ -5232,6 +5405,12 @@ function _deleteTableData() {
5232
5405
  _context4.prev = 7;
5233
5406
  _t7 = _context4["catch"](0);
5234
5407
  console.error("删除数据失败:", _t7);
5408
+ reportCmsCrudErrorToFeishu(c, {
5409
+ action: "delete",
5410
+ target: "data",
5411
+ tableName: tableName,
5412
+ error: _t7
5413
+ });
5235
5414
  _response13 = {
5236
5415
  success: false,
5237
5416
  message: "删除数据失败",
@@ -5688,8 +5867,8 @@ var AuthUtils = /*#__PURE__*/function () {
5688
5867
  }]);
5689
5868
  }();
5690
5869
 
5691
- function ownKeys$1(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
5692
- function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5870
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
5871
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5693
5872
  function getRoleFromSupabaseUser$2(user) {
5694
5873
  var _user$app_metadata, _user$user_metadata;
5695
5874
  var appRole = user === null || user === void 0 || (_user$app_metadata = user.app_metadata) === null || _user$app_metadata === void 0 ? void 0 : _user$app_metadata.role;
@@ -5715,7 +5894,7 @@ function toSupabaseEmail(account, sessionId) {
5715
5894
  return "".concat(sid, "_").concat(localPart, "@").concat(domain);
5716
5895
  }
5717
5896
  function buildAdminMetadata(existingMetadata, sessionId, account) {
5718
- return _objectSpread$1(_objectSpread$1({}, existingMetadata || {}), {}, {
5897
+ return _objectSpread(_objectSpread({}, existingMetadata || {}), {}, {
5719
5898
  role: "admin",
5720
5899
  session_id: normalizeSessionId(sessionId),
5721
5900
  original_username: account
@@ -6518,7 +6697,7 @@ function _resolveUploadMaxSize() {
6518
6697
  return _resolveUploadMaxSize.apply(this, arguments);
6519
6698
  }
6520
6699
  function readSessionId(c) {
6521
- return c.req.header("X-Session-Id") || c.req.header("x-session-id") || '';
6700
+ return normalizeSessionId(c.req.header("X-Session-Id") || c.req.header("x-session-id")) || '';
6522
6701
  }
6523
6702
  function uploadToOss(_x3) {
6524
6703
  return _uploadToOss.apply(this, arguments);
@@ -6597,262 +6776,6 @@ function _uploadToOss() {
6597
6776
  return _uploadToOss.apply(this, arguments);
6598
6777
  }
6599
6778
 
6600
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
6601
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
6602
- var CONFIG_NAMESPACE_RE = /^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/;
6603
- var CONFIG_SESSION_RE = /^[a-zA-Z0-9_]{1,128}$/;
6604
- function getConfigSessionId(c) {
6605
- return normalizeSessionId(c.req.header("X-Session-Id") || c.req.header("x-session-id"));
6606
- }
6607
- function validateConfigSessionId(sessionId) {
6608
- if (!sessionId) return "缺少 X-Session-Id,无法访问配置中心";
6609
- if (!CONFIG_SESSION_RE.test(sessionId)) {
6610
- return "X-Session-Id 格式不合法";
6611
- }
6612
- return null;
6613
- }
6614
- function getConfigsTableName(sessionId) {
6615
- return "".concat(sessionId, "__config__");
6616
- }
6617
- function normalizeValues(values) {
6618
- if (!values || _typeof$1(values) !== "object" || Array.isArray(values)) {
6619
- return {};
6620
- }
6621
- return values;
6622
- }
6623
- function buildFieldStatus(values) {
6624
- return Object.fromEntries(Object.entries(values).map(function (_ref) {
6625
- var _ref2 = _slicedToArray(_ref, 2),
6626
- key = _ref2[0],
6627
- value = _ref2[1];
6628
- return [key, {
6629
- configured: value !== null && value !== undefined && String(value).trim() !== ""
6630
- }];
6631
- }));
6632
- }
6633
- function ensureConfigsTable(_x) {
6634
- return _ensureConfigsTable.apply(this, arguments);
6635
- }
6636
- function _ensureConfigsTable() {
6637
- _ensureConfigsTable = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(tableName) {
6638
- var supabase, createTableSQL, _yield$supabase$rpc, error;
6639
- return _regeneratorRuntime.wrap(function (_context) {
6640
- while (1) switch (_context.prev = _context.next) {
6641
- case 0:
6642
- supabase = getSupabase();
6643
- createTableSQL = "\n CREATE TABLE IF NOT EXISTS \"".concat(tableName, "\" (\n id SERIAL PRIMARY KEY,\n namespace TEXT NOT NULL UNIQUE,\n values JSONB NOT NULL DEFAULT '{}'::jsonb,\n created_at TIMESTAMPTZ DEFAULT NOW(),\n updated_at TIMESTAMPTZ DEFAULT NOW()\n );\n ");
6644
- _context.next = 1;
6645
- return supabase.rpc("execute_sql", {
6646
- sql_query: createTableSQL
6647
- });
6648
- case 1:
6649
- _yield$supabase$rpc = _context.sent;
6650
- error = _yield$supabase$rpc.error;
6651
- if (!error) {
6652
- _context.next = 2;
6653
- break;
6654
- }
6655
- throw error;
6656
- case 2:
6657
- case "end":
6658
- return _context.stop();
6659
- }
6660
- }, _callee);
6661
- }));
6662
- return _ensureConfigsTable.apply(this, arguments);
6663
- }
6664
- function validateNamespace(namespace) {
6665
- if (!namespace) return "缺少 namespace";
6666
- if (!CONFIG_NAMESPACE_RE.test(namespace)) {
6667
- return "namespace 只能包含字母、数字、下划线和连字符,且必须以字母开头";
6668
- }
6669
- return null;
6670
- }
6671
- function toConfigResponse(row, fallbackNamespace) {
6672
- var values = normalizeValues(row === null || row === void 0 ? void 0 : row.values);
6673
- return {
6674
- id: row === null || row === void 0 ? void 0 : row.id,
6675
- namespace: (row === null || row === void 0 ? void 0 : row.namespace) || fallbackNamespace,
6676
- values: values,
6677
- fields: buildFieldStatus(values),
6678
- created_at: row === null || row === void 0 ? void 0 : row.created_at,
6679
- updated_at: row === null || row === void 0 ? void 0 : row.updated_at
6680
- };
6681
- }
6682
- function getConfig(_x2) {
6683
- return _getConfig.apply(this, arguments);
6684
- }
6685
- function _getConfig() {
6686
- _getConfig = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(c) {
6687
- var namespace, namespaceError, _response, sessionId, sessionError, _response2, tableName, supabase, _yield$supabase$from$, data, error, response, _response3, _t;
6688
- return _regeneratorRuntime.wrap(function (_context2) {
6689
- while (1) switch (_context2.prev = _context2.next) {
6690
- case 0:
6691
- _context2.prev = 0;
6692
- namespace = (c.req.query("namespace") || "").trim();
6693
- namespaceError = validateNamespace(namespace);
6694
- if (!namespaceError) {
6695
- _context2.next = 1;
6696
- break;
6697
- }
6698
- _response = {
6699
- success: false,
6700
- message: namespaceError
6701
- };
6702
- return _context2.abrupt("return", c.json(_response, 200));
6703
- case 1:
6704
- sessionId = getConfigSessionId(c);
6705
- sessionError = validateConfigSessionId(sessionId);
6706
- if (!sessionError) {
6707
- _context2.next = 2;
6708
- break;
6709
- }
6710
- _response2 = {
6711
- success: false,
6712
- message: sessionError
6713
- };
6714
- return _context2.abrupt("return", c.json(_response2, 200));
6715
- case 2:
6716
- tableName = getConfigsTableName(sessionId);
6717
- _context2.next = 3;
6718
- return ensureConfigsTable(tableName);
6719
- case 3:
6720
- supabase = getSupabase();
6721
- _context2.next = 4;
6722
- return supabase.from(tableName).select("*").eq("namespace", namespace).maybeSingle();
6723
- case 4:
6724
- _yield$supabase$from$ = _context2.sent;
6725
- data = _yield$supabase$from$.data;
6726
- error = _yield$supabase$from$.error;
6727
- if (!error) {
6728
- _context2.next = 5;
6729
- break;
6730
- }
6731
- throw error;
6732
- case 5:
6733
- response = {
6734
- success: true,
6735
- data: toConfigResponse(data, namespace)
6736
- };
6737
- return _context2.abrupt("return", c.json(response, 200));
6738
- case 6:
6739
- _context2.prev = 6;
6740
- _t = _context2["catch"](0);
6741
- console.error("获取配置失败:", _t);
6742
- _response3 = {
6743
- success: false,
6744
- message: "获取配置失败",
6745
- error: _t.message
6746
- };
6747
- return _context2.abrupt("return", c.json(_response3, 500));
6748
- case 7:
6749
- case "end":
6750
- return _context2.stop();
6751
- }
6752
- }, _callee2, null, [[0, 6]]);
6753
- }));
6754
- return _getConfig.apply(this, arguments);
6755
- }
6756
- function updateConfig(_x3) {
6757
- return _updateConfig.apply(this, arguments);
6758
- }
6759
- function _updateConfig() {
6760
- _updateConfig = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(c) {
6761
- var namespace, namespaceError, _response4, body, values, sessionId, sessionError, _response5, tableName, supabase, _yield$supabase$from$2, existing, existingError, nextValues, _yield$supabase$from$3, data, error, response, _response6, _t2;
6762
- return _regeneratorRuntime.wrap(function (_context3) {
6763
- while (1) switch (_context3.prev = _context3.next) {
6764
- case 0:
6765
- _context3.prev = 0;
6766
- namespace = (c.req.param("namespace") || "").trim();
6767
- namespaceError = validateNamespace(namespace);
6768
- if (!namespaceError) {
6769
- _context3.next = 1;
6770
- break;
6771
- }
6772
- _response4 = {
6773
- success: false,
6774
- message: namespaceError
6775
- };
6776
- return _context3.abrupt("return", c.json(_response4, 200));
6777
- case 1:
6778
- _context3.next = 2;
6779
- return c.req.json();
6780
- case 2:
6781
- body = _context3.sent;
6782
- values = normalizeValues(body === null || body === void 0 ? void 0 : body.values);
6783
- sessionId = getConfigSessionId(c);
6784
- sessionError = validateConfigSessionId(sessionId);
6785
- if (!sessionError) {
6786
- _context3.next = 3;
6787
- break;
6788
- }
6789
- _response5 = {
6790
- success: false,
6791
- message: sessionError
6792
- };
6793
- return _context3.abrupt("return", c.json(_response5, 200));
6794
- case 3:
6795
- tableName = getConfigsTableName(sessionId);
6796
- _context3.next = 4;
6797
- return ensureConfigsTable(tableName);
6798
- case 4:
6799
- supabase = getSupabase();
6800
- _context3.next = 5;
6801
- return supabase.from(tableName).select("values").eq("namespace", namespace).maybeSingle();
6802
- case 5:
6803
- _yield$supabase$from$2 = _context3.sent;
6804
- existing = _yield$supabase$from$2.data;
6805
- existingError = _yield$supabase$from$2.error;
6806
- if (!existingError) {
6807
- _context3.next = 6;
6808
- break;
6809
- }
6810
- throw existingError;
6811
- case 6:
6812
- nextValues = _objectSpread(_objectSpread({}, normalizeValues(existing === null || existing === void 0 ? void 0 : existing.values)), values);
6813
- _context3.next = 7;
6814
- return supabase.from(tableName).upsert({
6815
- namespace: namespace,
6816
- values: nextValues,
6817
- updated_at: new Date().toISOString()
6818
- }, {
6819
- onConflict: "namespace"
6820
- }).select("*").single();
6821
- case 7:
6822
- _yield$supabase$from$3 = _context3.sent;
6823
- data = _yield$supabase$from$3.data;
6824
- error = _yield$supabase$from$3.error;
6825
- if (!error) {
6826
- _context3.next = 8;
6827
- break;
6828
- }
6829
- throw error;
6830
- case 8:
6831
- response = {
6832
- success: true,
6833
- message: "配置保存成功",
6834
- data: toConfigResponse(data, namespace)
6835
- };
6836
- return _context3.abrupt("return", c.json(response, 200));
6837
- case 9:
6838
- _context3.prev = 9;
6839
- _t2 = _context3["catch"](0);
6840
- console.error("保存配置失败:", _t2);
6841
- _response6 = {
6842
- success: false,
6843
- message: "保存配置失败",
6844
- error: _t2.message
6845
- };
6846
- return _context3.abrupt("return", c.json(_response6, 500));
6847
- case 10:
6848
- case "end":
6849
- return _context3.stop();
6850
- }
6851
- }, _callee3, null, [[0, 9]]);
6852
- }));
6853
- return _updateConfig.apply(this, arguments);
6854
- }
6855
-
6856
6779
  var AUTH_REQUIRED = "CMS_AUTH_REQUIRED";
6857
6780
  var AUTH_INVALID = "CMS_AUTH_INVALID";
6858
6781
  var CMS_FORBIDDEN = "CMS_FORBIDDEN";
@@ -7348,21 +7271,13 @@ function createOssUploadRoute(app) {
7348
7271
  app.post("/upload", requireJwtAuth, requireAdminRole, uploadToOss);
7349
7272
  return app;
7350
7273
  }
7351
- function createConfigRoute(app) {
7352
- app.get("/configs", requireAdminRole, getConfig);
7353
- app.put("/configs/:namespace", requireAdminRole, function (c) {
7354
- return updateConfig(c);
7355
- });
7356
- return app;
7357
- }
7358
7274
  // 一键创建所有CMS路由
7359
7275
  function createCmsRoutes(app) {
7360
7276
  createModelRoute(app);
7361
- createConfigRoute(app);
7362
7277
  createDynamicDataRoute(app);
7363
7278
  createDynamicAuthRoute(app);
7364
7279
  return app;
7365
7280
  }
7366
7281
 
7367
- export { AuthService, getCmsModelService as CmsModel, CmsModelService, DynamicTableService, OssUploadError, OssUploadService, closeSupabase as closeDatabase, closeSupabase, createAuthRoute, createCmsRoutes, createConfigRoute, createDataRoute, createDynamicAuthRoute, createDynamicDataRoute, createModel, createModelRoute, createOssUploadRoute, createTableData, deleteModel, deleteTableData, dropForeignKeys, executeSupabaseSetup, getAuthService, getCmsModelService, getConfig, getCurrentUser, getSupabase as getDatabase, getDynamicTableService, getModels, getOssUploadService, getRelationOptions, getSupabase, getSupabaseSetupSQL, getTableData, getTableDataWithRelations, initializeCmsModel, initializeCmsSystem, initializeSupabase as initializeDatabase, initializeOssUpload, initializeSupabase, login, requireAuth, signup, signupStatus, initializeCmsSystem as syncDatabase, testConnection, updateConfig, updateModel, updateTableData, uploadToOss, verifyAuth };
7282
+ export { AuthService, getCmsModelService as CmsModel, CmsModelService, DynamicTableService, OssUploadError, OssUploadService, closeSupabase as closeDatabase, closeSupabase, createAuthRoute, createCmsRoutes, createDataRoute, createDynamicAuthRoute, createDynamicDataRoute, createModel, createModelRoute, createOssUploadRoute, createTableData, deleteModel, deleteTableData, dropForeignKeys, executeSupabaseSetup, feishuAlertConfig, getAuthService, getCmsModelService, getCurrentUser, getSupabase as getDatabase, getDynamicTableService, getModels, getOssUploadService, getRelationOptions, getSupabase, getSupabaseSetupSQL, getTableData, getTableDataWithRelations, initializeCmsModel, initializeCmsSystem, initializeSupabase as initializeDatabase, initializeOssUpload, initializeSupabase, login, notifyCmsCrudErrorToFeishu, reportCmsCrudErrorToFeishu, requireAuth, signup, signupStatus, initializeCmsSystem as syncDatabase, testConnection, updateModel, updateTableData, uploadToOss, verifyAuth };
7368
7283
  //# sourceMappingURL=index.esm.js.map