@saasicat/ui-vue 0.26.0 → 0.27.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.
Files changed (36) hide show
  1. package/LICENSE +90 -201
  2. package/README.md +23 -0
  3. package/dist/{catalog-Dch1Ryw0.d.cts → catalog-Dv2twuNi.d.cts} +205 -4
  4. package/dist/{catalog-Dch1Ryw0.d.ts → catalog-Dv2twuNi.d.ts} +205 -4
  5. package/dist/{chunk-BPF2BMCQ.js → chunk-4IZWT4UY.js} +414 -2
  6. package/dist/{chunk-O3J3ITF2.js → chunk-LK6YJDXC.js} +1 -1
  7. package/dist/{chunk-NEXTZZRQ.js → chunk-NRVF3JJJ.js} +2 -2
  8. package/dist/client/index.cjs +426 -5
  9. package/dist/client/index.d.cts +70 -4
  10. package/dist/client/index.d.ts +70 -4
  11. package/dist/client/index.js +22 -4
  12. package/dist/index.cjs +429 -8
  13. package/dist/index.d.cts +5 -5
  14. package/dist/index.d.ts +5 -5
  15. package/dist/index.js +23 -5
  16. package/dist/quasar/index.cjs +411 -2
  17. package/dist/quasar/index.d.cts +2 -2
  18. package/dist/quasar/index.d.ts +2 -2
  19. package/dist/quasar/index.js +2 -2
  20. package/dist/{resource-registry-D7Xjs-5f.d.cts → resource-registry-BxFpnzHY.d.cts} +1 -1
  21. package/dist/{resource-registry-TaR7rtq0.d.ts → resource-registry-Cn1Gy2LE.d.ts} +1 -1
  22. package/package.json +5 -4
  23. package/src/client/admin-error.ts +18 -1
  24. package/src/client/attach-cause.ts +21 -0
  25. package/src/client/nav-builder.ts +3 -1
  26. package/src/client/resources/bundles.resource.ts +145 -0
  27. package/src/client/resources/catalog.resource.ts +160 -0
  28. package/src/client/resources/discovery.resource.ts +108 -0
  29. package/src/client/resources/index.ts +52 -14
  30. package/src/client/resources/marketing.resource.ts +121 -0
  31. package/src/client/resources/promo-codes.resource.ts +63 -0
  32. package/src/client/resources/promotions.resource.ts +44 -0
  33. package/src/client/resources/subscriptions.resource.ts +19 -0
  34. package/src/client/resources/tenants.resource.ts +35 -9
  35. package/src/client/resources/users.resource.ts +31 -0
  36. package/src/pages-standard/SuperAdminSetupWizard.vue +7 -4
package/dist/index.cjs CHANGED
@@ -89,6 +89,9 @@ __export(src_exports, {
89
89
  buildQuotaRegistry: () => buildQuotaRegistry,
90
90
  buildRoutes: () => buildRoutes,
91
91
  buildSidebar: () => buildSidebar,
92
+ bundleVersionsResource: () => bundleVersionsResource,
93
+ bundlesResource: () => bundlesResource,
94
+ catalogResource: () => catalogResource,
92
95
  clampListPage: () => clampListPage,
93
96
  clampListPageSize: () => clampListPageSize,
94
97
  countPlans: () => countPlans,
@@ -112,6 +115,7 @@ __export(src_exports, {
112
115
  defineListOp: () => defineListOp,
113
116
  defineMessages: () => defineMessages,
114
117
  defineResource: () => defineResource,
118
+ discoveryResource: () => discoveryResource,
115
119
  filterQueryString: () => filterQueryString,
116
120
  formatCurrency: () => formatCurrency,
117
121
  formatMessage: () => formatMessage,
@@ -134,12 +138,15 @@ __export(src_exports, {
134
138
  markEmptyResponse: () => markEmptyResponse,
135
139
  markPlatformError: () => markPlatformError,
136
140
  markTransportFailure: () => markTransportFailure,
141
+ marketingResource: () => marketingResource,
137
142
  mergeMessages: () => mergeMessages,
138
143
  planChangeWizardI18n: () => planChangeWizardI18n,
139
144
  planVersionsResource: () => planVersionsResource,
140
145
  plansResource: () => plansResource,
141
146
  platformResources: () => platformResources,
142
147
  postJson: () => postJson,
148
+ promoCodesResource: () => promoCodesResource,
149
+ promotionsResource: () => promotionsResource,
143
150
  provideEntitlement: () => provideEntitlement,
144
151
  readErrorCode: () => readErrorCode,
145
152
  readErrorDetail: () => readErrorDetail,
@@ -152,6 +159,7 @@ __export(src_exports, {
152
159
  resolveMessages: () => resolveMessages,
153
160
  resolvePlans: () => resolvePlans,
154
161
  resolveSuperAdminEndpoints: () => resolveSuperAdminEndpoints,
162
+ subscriptionsResource: () => subscriptionsResource,
155
163
  tenantsResource: () => tenantsResource,
156
164
  toAdminError: () => toAdminError,
157
165
  todayIsoDate: () => todayIsoDate,
@@ -199,13 +207,24 @@ __export(src_exports, {
199
207
  useTenantBillingCatalog: () => useTenantBillingCatalog,
200
208
  useTenantManifest: () => useTenantManifest,
201
209
  useTenantSubscriptionBundles: () => useTenantSubscriptionBundles,
202
- useTenants: () => useTenants
210
+ useTenants: () => useTenants,
211
+ usersResource: () => usersResource
203
212
  });
204
213
  module.exports = __toCommonJS(src_exports);
205
214
 
206
215
  // src/client/version.ts
207
216
  var ADMIN_UI_VERSION = "1.2.0";
208
217
 
218
+ // src/client/attach-cause.ts
219
+ function attachCause(error, cause) {
220
+ Object.defineProperty(error, "cause", {
221
+ value: cause,
222
+ configurable: true,
223
+ writable: true
224
+ });
225
+ return error;
226
+ }
227
+
209
228
  // src/client/i18n/format.ts
210
229
  var import_types = require("@saasicat/types");
211
230
  function formatMessage(template, params) {
@@ -271,7 +290,8 @@ var AdminError = class extends Error {
271
290
  /** The request never reached the server. See `AdminErrorInit`. */
272
291
  transportFailure;
273
292
  constructor(init = {}) {
274
- super(init.message ?? describe(init), { cause: init.cause });
293
+ super(init.message ?? describe(init));
294
+ if (init.cause !== void 0) attachCause(this, init.cause);
275
295
  this.name = "AdminError";
276
296
  this.status = init.status ?? 0;
277
297
  this.code = init.code;
@@ -831,9 +851,392 @@ var planVersionsResource = defineResource("planVersions", {
831
851
  )
832
852
  });
833
853
 
854
+ // src/client/resources/bundles.resource.ts
855
+ function bundlesUrl(ctx) {
856
+ return `${ctx.apiBase}/catalog/bundles`;
857
+ }
858
+ function bundleVersionsUrl(ctx) {
859
+ return `${ctx.apiBase}/catalog/bundle-versions`;
860
+ }
861
+ function scoped2(url, ctx) {
862
+ return `${url}?projectKey=${encodeURIComponent(ctx.projectKey)}`;
863
+ }
864
+ var bundlesResource = defineResource(
865
+ "bundles",
866
+ {
867
+ list: async (http, ctx) => await requestJson(http, scoped2(bundlesUrl(ctx), ctx)) ?? [],
868
+ create: (http, ctx, data) => requestJsonBody(http, bundlesUrl(ctx), "Create returned no body", {
869
+ method: "POST",
870
+ body: { ...data, projectKey: ctx.projectKey }
871
+ }),
872
+ update: (http, ctx, bundleId, data) => requestJsonBody(
873
+ http,
874
+ `${bundlesUrl(ctx)}/${bundleId}`,
875
+ "Update returned no body",
876
+ { method: "PATCH", body: data }
877
+ ),
878
+ /** Marks the bundle deleted. */
879
+ softDelete: async (http, ctx, bundleId) => {
880
+ await requestJson(http, `${bundlesUrl(ctx)}/${bundleId}`, { method: "DELETE" });
881
+ }
882
+ },
883
+ { projectScoped: true }
884
+ );
885
+ var bundleVersionsResource = defineResource("bundleVersions", {
886
+ listForBundle: async (http, ctx, bundleId) => await requestJson(http, `${bundlesUrl(ctx)}/${bundleId}/versions`) ?? [],
887
+ createDraft: (http, ctx, bundleId, data) => requestJsonBody(
888
+ http,
889
+ `${bundlesUrl(ctx)}/${bundleId}/versions`,
890
+ "CreateDraft returned no body",
891
+ { method: "POST", body: data }
892
+ ),
893
+ updateDraft: (http, ctx, versionId, data) => requestJsonBody(
894
+ http,
895
+ `${bundleVersionsUrl(ctx)}/${versionId}`,
896
+ "UpdateDraft returned no body",
897
+ { method: "PATCH", body: data }
898
+ ),
899
+ publish: (http, ctx, versionId, options = {}) => requestJsonBody(
900
+ http,
901
+ `${bundleVersionsUrl(ctx)}/${versionId}/publish`,
902
+ "Publish returned no body",
903
+ { method: "POST", body: options }
904
+ ),
905
+ /**
906
+ * Discards a draft. A published version cannot be discarded — the API
907
+ * answers 422 `BUNDLE_VERSION_ALREADY_PUBLISHED`.
908
+ */
909
+ discardDraft: async (http, ctx, versionId) => {
910
+ await requestJson(http, `${bundleVersionsUrl(ctx)}/${versionId}`, { method: "DELETE" });
911
+ }
912
+ });
913
+
914
+ // src/client/resources/catalog.resource.ts
915
+ function catalogUrl(ctx) {
916
+ return `${ctx.apiBase}/catalog`;
917
+ }
918
+ function scoped3(url, ctx) {
919
+ return `${url}?projectKey=${encodeURIComponent(ctx.projectKey)}`;
920
+ }
921
+ var catalogResource = defineResource(
922
+ "catalog",
923
+ {
924
+ capabilities: async (http, ctx) => await requestJson(
925
+ http,
926
+ scoped3(`${catalogUrl(ctx)}/capabilities`, ctx)
927
+ ) ?? [],
928
+ features: async (http, ctx) => await requestJson(
929
+ http,
930
+ scoped3(`${catalogUrl(ctx)}/features`, ctx)
931
+ ) ?? [],
932
+ quotas: async (http, ctx) => await requestJson(
933
+ http,
934
+ scoped3(`${catalogUrl(ctx)}/quotas`, ctx)
935
+ ) ?? [],
936
+ reviewFeature: (http, ctx, featureKey, data) => requestJsonBody(
937
+ http,
938
+ scoped3(`${catalogUrl(ctx)}/features/${encodeURIComponent(featureKey)}/review`, ctx),
939
+ "Review returned no body",
940
+ { method: "PATCH", body: data }
941
+ ),
942
+ reviewQuota: (http, ctx, quotaKey, data) => requestJsonBody(
943
+ http,
944
+ scoped3(`${catalogUrl(ctx)}/quotas/${encodeURIComponent(quotaKey)}/review`, ctx),
945
+ "Review returned no body",
946
+ { method: "PATCH", body: data }
947
+ ),
948
+ /** The translations are wrapped in `{ i18n }` here, not by the caller. */
949
+ setFeatureI18n: (http, ctx, featureKey, i18n) => requestJsonBody(
950
+ http,
951
+ scoped3(`${catalogUrl(ctx)}/features/${encodeURIComponent(featureKey)}/i18n`, ctx),
952
+ "i18n returned no body",
953
+ { method: "PATCH", body: { i18n } }
954
+ ),
955
+ setQuotaI18n: (http, ctx, quotaKey, i18n) => requestJsonBody(
956
+ http,
957
+ scoped3(`${catalogUrl(ctx)}/quotas/${encodeURIComponent(quotaKey)}/i18n`, ctx),
958
+ "i18n returned no body",
959
+ { method: "PATCH", body: { i18n } }
960
+ ),
961
+ setFeatureBase: (http, ctx, featureKey, data) => requestJsonBody(
962
+ http,
963
+ scoped3(`${catalogUrl(ctx)}/features/${encodeURIComponent(featureKey)}`, ctx),
964
+ "Base returned no body",
965
+ { method: "PATCH", body: data }
966
+ ),
967
+ setQuotaBase: (http, ctx, quotaKey, data) => requestJsonBody(
968
+ http,
969
+ scoped3(`${catalogUrl(ctx)}/quotas/${encodeURIComponent(quotaKey)}`, ctx),
970
+ "Base returned no body",
971
+ { method: "PATCH", body: data }
972
+ ),
973
+ /**
974
+ * Writes a discovery snapshot into the catalogue.
975
+ *
976
+ * The request only. `useCatalogEntries.syncDiscovery` reloads the three
977
+ * lists afterwards, which is that composable keeping its refs true —
978
+ * not part of the call, and not something an override should inherit
979
+ * invisibly.
980
+ */
981
+ syncDiscovery: (http, ctx, snapshot) => requestJsonBody(
982
+ http,
983
+ `${catalogUrl(ctx)}/discovery/sync`,
984
+ "Sync returned no body",
985
+ { method: "POST", body: { snapshot } }
986
+ )
987
+ },
988
+ { projectScoped: true }
989
+ );
990
+
991
+ // src/client/resources/discovery.resource.ts
992
+ function discoveryUrl(ctx) {
993
+ return `${ctx.apiBase}/discovery`;
994
+ }
995
+ function fail(status, method, url, message) {
996
+ return new AdminError({ status, url, method, message });
997
+ }
998
+ var discoveryResource = defineResource("discovery", {
999
+ /**
1000
+ * Reads the snapshot, revalidating against `etag` when one is passed.
1001
+ *
1002
+ * Pass `null` (or nothing) to force a full read — that is what
1003
+ * `useDiscovery.reload()` does when the operator asks for fresh data.
1004
+ */
1005
+ read: async (http, ctx, etag = null) => {
1006
+ const url = discoveryUrl(ctx);
1007
+ const headers = {};
1008
+ if (etag) headers["If-None-Match"] = etag;
1009
+ const response = await http(url, { method: "GET", headers });
1010
+ requireServerAnswer(
1011
+ response.status,
1012
+ "GET",
1013
+ url,
1014
+ (diagnostic) => fail(response.status, "GET", url, diagnostic)
1015
+ );
1016
+ if (response.status === 304) return { status: "unchanged" };
1017
+ if (response.status !== 200) {
1018
+ throw fail(
1019
+ response.status,
1020
+ "GET",
1021
+ url,
1022
+ `Discovery endpoint responded with HTTP ${response.status}`
1023
+ );
1024
+ }
1025
+ return {
1026
+ status: "loaded",
1027
+ snapshot: await response.json(),
1028
+ etag: response.headers.get("ETag")
1029
+ };
1030
+ },
1031
+ /**
1032
+ * Re-runs the scan and returns what it found.
1033
+ *
1034
+ * Unconditional by construction: a rescan asks the server to look again,
1035
+ * so revalidating against a tag the previous scan produced would answer
1036
+ * with the snapshot the rescan was meant to replace.
1037
+ */
1038
+ rescan: async (http, ctx) => {
1039
+ const url = `${discoveryUrl(ctx)}/rescan`;
1040
+ const response = await http(url, {
1041
+ method: "POST",
1042
+ headers: { "content-type": "application/json" }
1043
+ });
1044
+ requireServerAnswer(
1045
+ response.status,
1046
+ "POST",
1047
+ url,
1048
+ (diagnostic) => fail(response.status, "POST", url, diagnostic)
1049
+ );
1050
+ if (response.status !== 200 && response.status !== 201) {
1051
+ throw fail(
1052
+ response.status,
1053
+ "POST",
1054
+ url,
1055
+ `Discovery rescan responded with HTTP ${response.status}`
1056
+ );
1057
+ }
1058
+ return {
1059
+ snapshot: await response.json(),
1060
+ etag: response.headers.get("ETag")
1061
+ };
1062
+ }
1063
+ });
1064
+
1065
+ // src/client/resources/marketing.resource.ts
1066
+ function projectionsUrl(ctx) {
1067
+ return `${ctx.apiBase}/catalog/marketing-projections`;
1068
+ }
1069
+ function settingsUrl(ctx) {
1070
+ return `${ctx.apiBase}/catalog/marketing-settings`;
1071
+ }
1072
+ var marketingResource = defineResource(
1073
+ "marketing",
1074
+ {
1075
+ listProjections: async (http, ctx, filter = {}) => {
1076
+ const params = new URLSearchParams();
1077
+ params.set("projectKey", ctx.projectKey);
1078
+ if (filter.targetType) params.set("targetType", filter.targetType);
1079
+ if (filter.targetVersionId) params.set("targetVersionId", filter.targetVersionId);
1080
+ if (filter.locale) params.set("locale", filter.locale);
1081
+ return await requestJson(
1082
+ http,
1083
+ `${projectionsUrl(ctx)}?${params.toString()}`
1084
+ ) ?? [];
1085
+ },
1086
+ /**
1087
+ * The request only. `useMarketingProjections.create` reloads the list
1088
+ * afterwards because a unique-tuple insert can change what the filter
1089
+ * matches — that is the composable keeping its refs true, not part of
1090
+ * the call.
1091
+ */
1092
+ createProjection: (http, ctx, data) => requestJsonBody(
1093
+ http,
1094
+ projectionsUrl(ctx),
1095
+ "Create returned no body",
1096
+ { method: "POST", body: data }
1097
+ ),
1098
+ updateProjection: (http, ctx, id, data) => requestJsonBody(
1099
+ http,
1100
+ `${projectionsUrl(ctx)}/${id}`,
1101
+ "Update returned no body",
1102
+ { method: "PATCH", body: data }
1103
+ ),
1104
+ deleteProjection: async (http, ctx, id) => {
1105
+ await requestJson(http, `${projectionsUrl(ctx)}/${id}`, { method: "DELETE" });
1106
+ },
1107
+ /**
1108
+ * The activated locale subset, or `null` when none was ever stored.
1109
+ *
1110
+ * `null` means the full pool is active — the server's answer for "no
1111
+ * row", and the state the page falls back to.
1112
+ */
1113
+ settings: (http, ctx) => requestJson(
1114
+ http,
1115
+ `${settingsUrl(ctx)}?projectKey=${encodeURIComponent(ctx.projectKey)}`
1116
+ ),
1117
+ /** `PUT`, not `PATCH`: the endpoint replaces the set it is given. */
1118
+ saveSettings: async (http, ctx, activeLocales) => {
1119
+ await requestJson(http, settingsUrl(ctx), {
1120
+ method: "PUT",
1121
+ body: { projectKey: ctx.projectKey, activeLocales }
1122
+ });
1123
+ }
1124
+ },
1125
+ { projectScoped: true }
1126
+ );
1127
+
1128
+ // src/client/resources/promo-codes.resource.ts
1129
+ function promoCodesUrl(ctx) {
1130
+ return `${ctx.apiBase}/promo-codes`;
1131
+ }
1132
+ var promoCodesResource = defineResource("promoCodes", {
1133
+ list: async (http, ctx, filter = {}) => await requestJson(
1134
+ http,
1135
+ `${promoCodesUrl(ctx)}${filterQueryString({
1136
+ search: filter.search,
1137
+ status: filter.status
1138
+ })}`
1139
+ ) ?? [],
1140
+ /**
1141
+ * Returns nothing, matching `createAdminResourceClient.createPromo`.
1142
+ *
1143
+ * The endpoint does answer with the created record, but the page it feeds
1144
+ * reloads the list rather than reading it, and promising a body a caller
1145
+ * would then have to trust is a wider contract than anything holds today.
1146
+ */
1147
+ create: async (http, ctx, payload) => {
1148
+ await requestJson(http, promoCodesUrl(ctx), { method: "POST", body: payload });
1149
+ },
1150
+ update: async (http, ctx, id, payload) => {
1151
+ await requestJson(http, `${promoCodesUrl(ctx)}/${encodeURIComponent(id)}`, {
1152
+ method: "PATCH",
1153
+ body: payload
1154
+ });
1155
+ },
1156
+ remove: async (http, ctx, id) => {
1157
+ await requestJson(http, `${promoCodesUrl(ctx)}/${encodeURIComponent(id)}`, {
1158
+ method: "DELETE"
1159
+ });
1160
+ }
1161
+ });
1162
+
1163
+ // src/client/resources/promotions.resource.ts
1164
+ function promotionsUrl(ctx) {
1165
+ return `${ctx.apiBase}/catalog/promotions`;
1166
+ }
1167
+ var promotionsResource = defineResource(
1168
+ "promotions",
1169
+ {
1170
+ list: async (http, ctx) => await requestJson(
1171
+ http,
1172
+ `${promotionsUrl(ctx)}?projectKey=${encodeURIComponent(ctx.projectKey)}`
1173
+ ) ?? [],
1174
+ create: (http, ctx, data) => requestJsonBody(http, promotionsUrl(ctx), "Create returned no body", {
1175
+ method: "POST",
1176
+ body: data
1177
+ }),
1178
+ update: (http, ctx, id, data) => requestJsonBody(
1179
+ http,
1180
+ `${promotionsUrl(ctx)}/${id}`,
1181
+ "Update returned no body",
1182
+ { method: "PATCH", body: data }
1183
+ ),
1184
+ remove: async (http, ctx, id) => {
1185
+ await requestJson(http, `${promotionsUrl(ctx)}/${id}`, { method: "DELETE" });
1186
+ }
1187
+ },
1188
+ { projectScoped: true }
1189
+ );
1190
+
834
1191
  // src/client/resources/tenants.resource.ts
1192
+ function tenantsUrl(ctx) {
1193
+ return `${ctx.apiBase}/tenants`;
1194
+ }
1195
+ function tenantUrl(ctx, slug) {
1196
+ return `${tenantsUrl(ctx)}/${encodeURIComponent(slug)}`;
1197
+ }
835
1198
  var tenantsResource = defineResource("tenants", {
836
- list: defineListOp((ctx) => `${ctx.apiBase}/tenants`)
1199
+ list: defineListOp((ctx) => tenantsUrl(ctx)),
1200
+ detail: async (http, ctx, slug) => requestJson(http, tenantUrl(ctx, slug)),
1201
+ /**
1202
+ * Suspends a tenant. The reason is recorded on the audit trail, so it is a
1203
+ * required argument rather than an option with a default.
1204
+ */
1205
+ suspend: async (http, ctx, slug, reason) => {
1206
+ await requestJson(http, `${tenantUrl(ctx, slug)}/suspend`, {
1207
+ method: "POST",
1208
+ body: { reason }
1209
+ });
1210
+ },
1211
+ reactivate: async (http, ctx, slug) => {
1212
+ await requestJson(http, `${tenantUrl(ctx, slug)}/reactivate`, { method: "POST" });
1213
+ }
1214
+ });
1215
+
1216
+ // src/client/resources/users.resource.ts
1217
+ function usersUrl(ctx) {
1218
+ return `${ctx.apiBase}/users`;
1219
+ }
1220
+ var usersResource = defineResource("users", {
1221
+ /**
1222
+ * `q` searches name and mail, `tenant` narrows to one tenant's members.
1223
+ *
1224
+ * Both are dropped when empty rather than sent as `q=` — see
1225
+ * `isSentInQuery`; an empty search that reached the server would filter
1226
+ * every row away on an endpoint that treats the parameter as a substring.
1227
+ */
1228
+ list: async (http, ctx, filter = {}) => await requestJson(
1229
+ http,
1230
+ `${usersUrl(ctx)}${filterQueryString({ q: filter.q, tenant: filter.tenant })}`
1231
+ ) ?? []
1232
+ });
1233
+
1234
+ // src/client/resources/subscriptions.resource.ts
1235
+ function subscriptionsUrl(ctx) {
1236
+ return `${ctx.apiBase}/subscriptions`;
1237
+ }
1238
+ var subscriptionsResource = defineResource("subscriptions", {
1239
+ list: async (http, ctx) => await requestJson(http, subscriptionsUrl(ctx)) ?? []
837
1240
  });
838
1241
 
839
1242
  // src/client/resources/audit.resource.ts
@@ -845,7 +1248,16 @@ var auditResource = defineResource("audit", {
845
1248
  var platformResources = {
846
1249
  plans: plansResource,
847
1250
  planVersions: planVersionsResource,
1251
+ bundles: bundlesResource,
1252
+ bundleVersions: bundleVersionsResource,
1253
+ catalog: catalogResource,
1254
+ discovery: discoveryResource,
1255
+ marketing: marketingResource,
1256
+ promoCodes: promoCodesResource,
1257
+ promotions: promotionsResource,
848
1258
  tenants: tenantsResource,
1259
+ users: usersResource,
1260
+ subscriptions: subscriptionsResource,
849
1261
  audit: auditResource
850
1262
  };
851
1263
 
@@ -1098,7 +1510,7 @@ var DEFAULT_STANDARD_PAGE_ROUTES = {
1098
1510
  platformEmailHistory: "/admin/platform-email-history"
1099
1511
  };
1100
1512
  function isSupportedStandardPageKey(key) {
1101
- return Object.hasOwn(DEFAULT_STANDARD_PAGE_ROUTES, key);
1513
+ return Object.prototype.hasOwnProperty.call(DEFAULT_STANDARD_PAGE_ROUTES, key);
1102
1514
  }
1103
1515
  var DEFAULT_ICONS = {
1104
1516
  dashboard: "dashboard",
@@ -6385,7 +6797,7 @@ function useBundleVersions(options) {
6385
6797
  const versions = (0, import_vue24.ref)([]);
6386
6798
  const loading = (0, import_vue24.ref)(false);
6387
6799
  const error = (0, import_vue24.ref)(null);
6388
- const bundleVersionsUrl = `${options.adminEndpoint}/catalog/bundles/${options.bundleId}/versions`;
6800
+ const bundleVersionsUrl2 = `${options.adminEndpoint}/catalog/bundles/${options.bundleId}/versions`;
6389
6801
  const versionUrlBase = `${options.adminEndpoint}/catalog/bundle-versions`;
6390
6802
  function authHeaders() {
6391
6803
  const token = options.getAuthToken?.();
@@ -6419,7 +6831,7 @@ function useBundleVersions(options) {
6419
6831
  loading.value = true;
6420
6832
  error.value = null;
6421
6833
  try {
6422
- const data = await fetchJson(bundleVersionsUrl);
6834
+ const data = await fetchJson(bundleVersionsUrl2);
6423
6835
  versions.value = data ?? [];
6424
6836
  } catch (err) {
6425
6837
  error.value = err instanceof Error ? err : new Error(String(err));
@@ -6428,7 +6840,7 @@ function useBundleVersions(options) {
6428
6840
  }
6429
6841
  }
6430
6842
  async function createDraft(data) {
6431
- const result = await fetchJson(bundleVersionsUrl, {
6843
+ const result = await fetchJson(bundleVersionsUrl2, {
6432
6844
  method: "POST",
6433
6845
  body: JSON.stringify(data)
6434
6846
  });
@@ -8020,6 +8432,9 @@ function planChangeWizardI18n(i18n) {
8020
8432
  buildQuotaRegistry,
8021
8433
  buildRoutes,
8022
8434
  buildSidebar,
8435
+ bundleVersionsResource,
8436
+ bundlesResource,
8437
+ catalogResource,
8023
8438
  clampListPage,
8024
8439
  clampListPageSize,
8025
8440
  countPlans,
@@ -8043,6 +8458,7 @@ function planChangeWizardI18n(i18n) {
8043
8458
  defineListOp,
8044
8459
  defineMessages,
8045
8460
  defineResource,
8461
+ discoveryResource,
8046
8462
  filterQueryString,
8047
8463
  formatCurrency,
8048
8464
  formatMessage,
@@ -8065,12 +8481,15 @@ function planChangeWizardI18n(i18n) {
8065
8481
  markEmptyResponse,
8066
8482
  markPlatformError,
8067
8483
  markTransportFailure,
8484
+ marketingResource,
8068
8485
  mergeMessages,
8069
8486
  planChangeWizardI18n,
8070
8487
  planVersionsResource,
8071
8488
  plansResource,
8072
8489
  platformResources,
8073
8490
  postJson,
8491
+ promoCodesResource,
8492
+ promotionsResource,
8074
8493
  provideEntitlement,
8075
8494
  readErrorCode,
8076
8495
  readErrorDetail,
@@ -8083,6 +8502,7 @@ function planChangeWizardI18n(i18n) {
8083
8502
  resolveMessages,
8084
8503
  resolvePlans,
8085
8504
  resolveSuperAdminEndpoints,
8505
+ subscriptionsResource,
8086
8506
  tenantsResource,
8087
8507
  toAdminError,
8088
8508
  todayIsoDate,
@@ -8130,5 +8550,6 @@ function planChangeWizardI18n(i18n) {
8130
8550
  useTenantBillingCatalog,
8131
8551
  useTenantManifest,
8132
8552
  useTenantSubscriptionBundles,
8133
- useTenants
8553
+ useTenants,
8554
+ usersResource
8134
8555
  });
package/dist/index.d.cts CHANGED
@@ -1,9 +1,9 @@
1
1
  import { AdminError, BootLoaderOptions, ManifestLoaderOptions, BuildRouteEntry, SidebarSection, NavBuilderOptions, BatchColumnData, BatchColumnFetcherOptions, BootLoader, ManifestLoader } from './client/index.cjs';
2
- export { ADMIN_UI_VERSION, AdminErrorInit, AdminPromoListFilter, AdminPromoListRow, AdminResourceClientOptions, AxiosHttpClientOptions, AxiosLike, AxiosLikeConfig, AxiosLikeResponse, AxiosLikeResponseConfig, AxiosResponseBody, BatchColumnDriftError, BatchColumnFetcher, BatchColumnRow, BatchColumnValue, BootLoadError, CachedManifestEntry, DEFAULT_STANDARD_PAGE_ROUTES, FetchHttpClientOptions, HttpJsonError, IDENTITY_ACCENTS, IDENTITY_ACCENT_VALUES, IDENTITY_NEUTRAL, IDENTITY_NEUTRAL_VALUE, LoginBootProject, LoginBrandFallback, LoginBranding, ManifestLoadError, MessageParams, ParamStyle, PlanCounts, PlanRowLike, PlanVersionLike, ResolvePlansInput, ResolvedPlan, ResourceRequestInit, SidebarItem, adminErrorMessage, buildRoutes, buildSidebar, countPlans, createAdminResourceClient, createAxiosHttpClient, createFetchHttpClient, defaultSectionOrder, formatCurrency, formatMessage, getJson, identityAccentAt, identityAccentFor, identityChipStyle, isAdminError, isAxiosNoResponseError, isCurrentlyValid, isEmptyResponse, isExpired, isFutureScheduled, isPlatformError, isProductionBoot, isTransportFailure, markEmptyResponse, markPlatformError, markTransportFailure, postJson, readErrorCode, readErrorDetail, requestJson, requestJsonBody, requireServerAnswer, resolveExtension, resolveLoginBranding, resolvePlans, toAdminError, todayIsoDate, trimTrailingSlashes } from './client/index.cjs';
3
- import { H as HttpClient, g as ResourceListPage, e as ResourceOps, P as PlatformResources, h as ActionRegistry, A as ActionHandler, K as KvStore, S as SaLocale } from './catalog-Dch1Ryw0.cjs';
4
- export { i as ActionDefNotInManifestError, j as AuditListFilter, B as Bound, D as DEFAULT_SA_LOCALE, k as DefineResourceOptions, l as HttpResponse, L as LIST_FIRST_PAGE, m as LIST_PAGE_SIZE_DEFAULT, n as LIST_PAGE_SIZE_MAX, o as LIST_PAGINATION_PARAMS, q as ListFilterOf, r as ListOp, s as ListQuery, M as MessageTree, t as MissingHandlerError, u as PartialMessages, v as PublishPlanVersionOptions, w as ResolvedAction, f as ResourceContext, R as ResourceDef, x as ResourceOp, y as SA_INTL_LOCALES, z as SA_LOCALES, C as SA_LOCALE_LABELS, E as SA_MESSAGES, F as SaBuiltinLocale, G as SaCatalog, I as SaCatalogOptions, c as SaLocaleDefinition, b as SaLocaleOption, a as SaMessages, d as SaMessagesOverrides, T as TenantsListFilter, J as TranslationOf, N as auditResource, O as bindResource, Q as clampListPage, U as clampListPageSize, V as createSaCatalog, W as defaultHttpClient, X as defaultKvStore, Y as defineListOp, Z as defineMessages, _ as defineResource, $ as filterQueryString, a0 as isSaBuiltinLocale, a1 as isSentInQuery, a2 as listUrl, a3 as mergeMessages, a4 as planVersionsResource, a5 as plansResource, p as platformResources, a6 as readListPage, a7 as resolveMessages, a8 as tenantsResource } from './catalog-Dch1Ryw0.cjs';
5
- import { A as ActionsMap, a as SuperAdminBrand, b as SuperAdminEndpoints, E as ExtensionsMap, c as SuperAdminLoginAdapter, U as UiNotify, j as ResourceMap } from './resource-registry-D7Xjs-5f.cjs';
6
- export { C as CreateResourceRegistryOptions, k as ExtensionLoader, I as InstallPlugin, O as OpOverride, l as ResourceOverride, R as ResourceOverrides, m as ResourceRegistry, n as SA_COLOR_SCHEMES, o as SA_LOCALE_STORAGE_KEY, p as SA_THEME_KEY, q as SA_THEME_STORAGE_KEY, r as SUPER_ADMIN_ACTIONS_KEY, s as SUPER_ADMIN_BRAND_KEY, t as SUPER_ADMIN_CONFIRM_KEY, u as SUPER_ADMIN_ENDPOINTS_KEY, v as SUPER_ADMIN_EXTENSIONS_KEY, w as SUPER_ADMIN_HTTP_KEY, x as SUPER_ADMIN_I18N_KEY, y as SUPER_ADMIN_LOGIN_ADAPTER_KEY, z as SUPER_ADMIN_MANIFEST_CLEAR_CACHE_KEY, B as SUPER_ADMIN_MANIFEST_KEY, D as SUPER_ADMIN_NOTIFY_KEY, F as SUPER_ADMIN_RESOURCES_KEY, G as SaColorScheme, H as SaResolvedScheme, h as SaTheme, f as SaThemeOptions, J as SuperAdminAuthGuardOptions, S as SuperAdminGuardOptions, g as SuperAdminI18n, e as SuperAdminI18nOptions, K as SuperAdminLoginResult, L as SuperAdminManifestGuardOptions, d as UiConfirm, M as UiConfirmPrompt, i as UiConfirmRequest, N as UiConfirmResult, P as UiConfirmTone, Q as UiNotifyKind, T as UiNotifyOptions, V as buildNavigationGuard, W as createResourceRegistry, X as createSaTheme, Y as createSuperAdminI18n, Z as useResource, _ as useSaMessages, $ as useSaTheme, a0 as useSuperAdminI18n } from './resource-registry-D7Xjs-5f.cjs';
2
+ export { ADMIN_UI_VERSION, AdminErrorInit, AdminPromoListFilter, AdminPromoListRow, AdminResourceClientOptions, AxiosHttpClientOptions, AxiosLike, AxiosLikeConfig, AxiosLikeResponse, AxiosLikeResponseConfig, AxiosResponseBody, BatchColumnDriftError, BatchColumnFetcher, BatchColumnRow, BatchColumnValue, BootLoadError, CachedManifestEntry, DEFAULT_STANDARD_PAGE_ROUTES, FetchHttpClientOptions, HttpJsonError, IDENTITY_ACCENTS, IDENTITY_ACCENT_VALUES, IDENTITY_NEUTRAL, IDENTITY_NEUTRAL_VALUE, LoginBootProject, LoginBrandFallback, LoginBranding, ManifestLoadError, MessageParams, ParamStyle, PlanCounts, PlanRowLike, PlanVersionLike, ResolvePlansInput, ResolvedPlan, ResourceRequestInit, SidebarItem, adminErrorMessage, buildRoutes, buildSidebar, catalogResource, countPlans, createAdminResourceClient, createAxiosHttpClient, createFetchHttpClient, defaultSectionOrder, formatCurrency, formatMessage, getJson, identityAccentAt, identityAccentFor, identityChipStyle, isAdminError, isAxiosNoResponseError, isCurrentlyValid, isEmptyResponse, isExpired, isFutureScheduled, isPlatformError, isProductionBoot, isTransportFailure, markEmptyResponse, markPlatformError, markTransportFailure, postJson, promotionsResource, readErrorCode, readErrorDetail, requestJson, requestJsonBody, requireServerAnswer, resolveExtension, resolveLoginBranding, resolvePlans, subscriptionsResource, toAdminError, todayIsoDate, trimTrailingSlashes, usersResource } from './client/index.cjs';
3
+ import { H as HttpClient, g as ResourceListPage, e as ResourceOps, P as PlatformResources, h as ActionRegistry, A as ActionHandler, K as KvStore, S as SaLocale } from './catalog-Dv2twuNi.cjs';
4
+ export { i as ActionDefNotInManifestError, j as AuditListFilter, B as Bound, D as DEFAULT_SA_LOCALE, k as DefineResourceOptions, l as DiscoveryRead, m as HttpResponse, L as LIST_FIRST_PAGE, n as LIST_PAGE_SIZE_DEFAULT, o as LIST_PAGE_SIZE_MAX, q as LIST_PAGINATION_PARAMS, r as ListFilterOf, s as ListOp, t as ListQuery, M as MarketingProjectionsFilter, u as MessageTree, v as MissingHandlerError, w as PartialMessages, x as PromoCodesFilter, y as PublishBundleVersionOptions, z as PublishPlanVersionOptions, C as ResolvedAction, f as ResourceContext, R as ResourceDef, E as ResourceOp, F as SA_INTL_LOCALES, G as SA_LOCALES, I as SA_LOCALE_LABELS, J as SA_MESSAGES, N as SaBuiltinLocale, O as SaCatalog, Q as SaCatalogOptions, c as SaLocaleDefinition, b as SaLocaleOption, a as SaMessages, d as SaMessagesOverrides, T as TenantsListFilter, U as TranslationOf, V as auditResource, W as bindResource, X as bundleVersionsResource, Y as bundlesResource, Z as clampListPage, _ as clampListPageSize, $ as createSaCatalog, a0 as defaultHttpClient, a1 as defaultKvStore, a2 as defineListOp, a3 as defineMessages, a4 as defineResource, a5 as discoveryResource, a6 as filterQueryString, a7 as isSaBuiltinLocale, a8 as isSentInQuery, a9 as listUrl, aa as marketingResource, ab as mergeMessages, ac as planVersionsResource, ad as plansResource, p as platformResources, ae as promoCodesResource, af as readListPage, ag as resolveMessages, ah as tenantsResource } from './catalog-Dv2twuNi.cjs';
5
+ import { A as ActionsMap, a as SuperAdminBrand, b as SuperAdminEndpoints, E as ExtensionsMap, c as SuperAdminLoginAdapter, U as UiNotify, j as ResourceMap } from './resource-registry-BxFpnzHY.cjs';
6
+ export { C as CreateResourceRegistryOptions, k as ExtensionLoader, I as InstallPlugin, O as OpOverride, l as ResourceOverride, R as ResourceOverrides, m as ResourceRegistry, n as SA_COLOR_SCHEMES, o as SA_LOCALE_STORAGE_KEY, p as SA_THEME_KEY, q as SA_THEME_STORAGE_KEY, r as SUPER_ADMIN_ACTIONS_KEY, s as SUPER_ADMIN_BRAND_KEY, t as SUPER_ADMIN_CONFIRM_KEY, u as SUPER_ADMIN_ENDPOINTS_KEY, v as SUPER_ADMIN_EXTENSIONS_KEY, w as SUPER_ADMIN_HTTP_KEY, x as SUPER_ADMIN_I18N_KEY, y as SUPER_ADMIN_LOGIN_ADAPTER_KEY, z as SUPER_ADMIN_MANIFEST_CLEAR_CACHE_KEY, B as SUPER_ADMIN_MANIFEST_KEY, D as SUPER_ADMIN_NOTIFY_KEY, F as SUPER_ADMIN_RESOURCES_KEY, G as SaColorScheme, H as SaResolvedScheme, h as SaTheme, f as SaThemeOptions, J as SuperAdminAuthGuardOptions, S as SuperAdminGuardOptions, g as SuperAdminI18n, e as SuperAdminI18nOptions, K as SuperAdminLoginResult, L as SuperAdminManifestGuardOptions, d as UiConfirm, M as UiConfirmPrompt, i as UiConfirmRequest, N as UiConfirmResult, P as UiConfirmTone, Q as UiNotifyKind, T as UiNotifyOptions, V as buildNavigationGuard, W as createResourceRegistry, X as createSaTheme, Y as createSuperAdminI18n, Z as useResource, _ as useSaMessages, $ as useSaTheme, a0 as useSuperAdminI18n } from './resource-registry-BxFpnzHY.cjs';
7
7
  import { AdminManifest, TenantListFilter, TenantDto, AuditQuery, AuditEntry, FeatureUiRegistry, PromoPreviewResponse, OnboardingSelectionRequest, PublicMarketingBundle, FeatureDef, FeatureKey, PublicBootResponse, DiscoverySnapshot, CapabilityCatalogEntryRow, FeatureCatalogEntryRow, QuotaCatalogEntryRow, ReviewCatalogEntryData, CatalogEntryI18n, UpdateCatalogEntryBaseData, SyncDiscoveryResult, BundleVersionRow, CreateBundleVersionDraftData, BundleVersionMutationResult, UpdateBundleVersionDraftData, BundleRow, CreateBundleData, UpdateBundleData, SubscriptionBundleRecord, MarketingProjectionFilter, MarketingProjectionRow, CreateMarketingProjectionData, UpdateMarketingProjectionData, PromotionRow, CreatePromotionData, UpdatePromotionData, PlanVersionRow, CreatePlanVersionDraftData, PlanVersionMutationResult, UpdatePlanVersionDraftData, PlanRow, CreatePlanData, UpdatePlanData, TenantActionDef } from '@saasicat/types';
8
8
  import { RouteRecordRaw, NavigationGuardWithThis } from 'vue-router';
9
9
  import * as vue from 'vue';
package/dist/index.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import { AdminError, BootLoaderOptions, ManifestLoaderOptions, BuildRouteEntry, SidebarSection, NavBuilderOptions, BatchColumnData, BatchColumnFetcherOptions, BootLoader, ManifestLoader } from './client/index.js';
2
- export { ADMIN_UI_VERSION, AdminErrorInit, AdminPromoListFilter, AdminPromoListRow, AdminResourceClientOptions, AxiosHttpClientOptions, AxiosLike, AxiosLikeConfig, AxiosLikeResponse, AxiosLikeResponseConfig, AxiosResponseBody, BatchColumnDriftError, BatchColumnFetcher, BatchColumnRow, BatchColumnValue, BootLoadError, CachedManifestEntry, DEFAULT_STANDARD_PAGE_ROUTES, FetchHttpClientOptions, HttpJsonError, IDENTITY_ACCENTS, IDENTITY_ACCENT_VALUES, IDENTITY_NEUTRAL, IDENTITY_NEUTRAL_VALUE, LoginBootProject, LoginBrandFallback, LoginBranding, ManifestLoadError, MessageParams, ParamStyle, PlanCounts, PlanRowLike, PlanVersionLike, ResolvePlansInput, ResolvedPlan, ResourceRequestInit, SidebarItem, adminErrorMessage, buildRoutes, buildSidebar, countPlans, createAdminResourceClient, createAxiosHttpClient, createFetchHttpClient, defaultSectionOrder, formatCurrency, formatMessage, getJson, identityAccentAt, identityAccentFor, identityChipStyle, isAdminError, isAxiosNoResponseError, isCurrentlyValid, isEmptyResponse, isExpired, isFutureScheduled, isPlatformError, isProductionBoot, isTransportFailure, markEmptyResponse, markPlatformError, markTransportFailure, postJson, readErrorCode, readErrorDetail, requestJson, requestJsonBody, requireServerAnswer, resolveExtension, resolveLoginBranding, resolvePlans, toAdminError, todayIsoDate, trimTrailingSlashes } from './client/index.js';
3
- import { H as HttpClient, g as ResourceListPage, e as ResourceOps, P as PlatformResources, h as ActionRegistry, A as ActionHandler, K as KvStore, S as SaLocale } from './catalog-Dch1Ryw0.js';
4
- export { i as ActionDefNotInManifestError, j as AuditListFilter, B as Bound, D as DEFAULT_SA_LOCALE, k as DefineResourceOptions, l as HttpResponse, L as LIST_FIRST_PAGE, m as LIST_PAGE_SIZE_DEFAULT, n as LIST_PAGE_SIZE_MAX, o as LIST_PAGINATION_PARAMS, q as ListFilterOf, r as ListOp, s as ListQuery, M as MessageTree, t as MissingHandlerError, u as PartialMessages, v as PublishPlanVersionOptions, w as ResolvedAction, f as ResourceContext, R as ResourceDef, x as ResourceOp, y as SA_INTL_LOCALES, z as SA_LOCALES, C as SA_LOCALE_LABELS, E as SA_MESSAGES, F as SaBuiltinLocale, G as SaCatalog, I as SaCatalogOptions, c as SaLocaleDefinition, b as SaLocaleOption, a as SaMessages, d as SaMessagesOverrides, T as TenantsListFilter, J as TranslationOf, N as auditResource, O as bindResource, Q as clampListPage, U as clampListPageSize, V as createSaCatalog, W as defaultHttpClient, X as defaultKvStore, Y as defineListOp, Z as defineMessages, _ as defineResource, $ as filterQueryString, a0 as isSaBuiltinLocale, a1 as isSentInQuery, a2 as listUrl, a3 as mergeMessages, a4 as planVersionsResource, a5 as plansResource, p as platformResources, a6 as readListPage, a7 as resolveMessages, a8 as tenantsResource } from './catalog-Dch1Ryw0.js';
5
- import { A as ActionsMap, a as SuperAdminBrand, b as SuperAdminEndpoints, E as ExtensionsMap, c as SuperAdminLoginAdapter, U as UiNotify, j as ResourceMap } from './resource-registry-TaR7rtq0.js';
6
- export { C as CreateResourceRegistryOptions, k as ExtensionLoader, I as InstallPlugin, O as OpOverride, l as ResourceOverride, R as ResourceOverrides, m as ResourceRegistry, n as SA_COLOR_SCHEMES, o as SA_LOCALE_STORAGE_KEY, p as SA_THEME_KEY, q as SA_THEME_STORAGE_KEY, r as SUPER_ADMIN_ACTIONS_KEY, s as SUPER_ADMIN_BRAND_KEY, t as SUPER_ADMIN_CONFIRM_KEY, u as SUPER_ADMIN_ENDPOINTS_KEY, v as SUPER_ADMIN_EXTENSIONS_KEY, w as SUPER_ADMIN_HTTP_KEY, x as SUPER_ADMIN_I18N_KEY, y as SUPER_ADMIN_LOGIN_ADAPTER_KEY, z as SUPER_ADMIN_MANIFEST_CLEAR_CACHE_KEY, B as SUPER_ADMIN_MANIFEST_KEY, D as SUPER_ADMIN_NOTIFY_KEY, F as SUPER_ADMIN_RESOURCES_KEY, G as SaColorScheme, H as SaResolvedScheme, h as SaTheme, f as SaThemeOptions, J as SuperAdminAuthGuardOptions, S as SuperAdminGuardOptions, g as SuperAdminI18n, e as SuperAdminI18nOptions, K as SuperAdminLoginResult, L as SuperAdminManifestGuardOptions, d as UiConfirm, M as UiConfirmPrompt, i as UiConfirmRequest, N as UiConfirmResult, P as UiConfirmTone, Q as UiNotifyKind, T as UiNotifyOptions, V as buildNavigationGuard, W as createResourceRegistry, X as createSaTheme, Y as createSuperAdminI18n, Z as useResource, _ as useSaMessages, $ as useSaTheme, a0 as useSuperAdminI18n } from './resource-registry-TaR7rtq0.js';
2
+ export { ADMIN_UI_VERSION, AdminErrorInit, AdminPromoListFilter, AdminPromoListRow, AdminResourceClientOptions, AxiosHttpClientOptions, AxiosLike, AxiosLikeConfig, AxiosLikeResponse, AxiosLikeResponseConfig, AxiosResponseBody, BatchColumnDriftError, BatchColumnFetcher, BatchColumnRow, BatchColumnValue, BootLoadError, CachedManifestEntry, DEFAULT_STANDARD_PAGE_ROUTES, FetchHttpClientOptions, HttpJsonError, IDENTITY_ACCENTS, IDENTITY_ACCENT_VALUES, IDENTITY_NEUTRAL, IDENTITY_NEUTRAL_VALUE, LoginBootProject, LoginBrandFallback, LoginBranding, ManifestLoadError, MessageParams, ParamStyle, PlanCounts, PlanRowLike, PlanVersionLike, ResolvePlansInput, ResolvedPlan, ResourceRequestInit, SidebarItem, adminErrorMessage, buildRoutes, buildSidebar, catalogResource, countPlans, createAdminResourceClient, createAxiosHttpClient, createFetchHttpClient, defaultSectionOrder, formatCurrency, formatMessage, getJson, identityAccentAt, identityAccentFor, identityChipStyle, isAdminError, isAxiosNoResponseError, isCurrentlyValid, isEmptyResponse, isExpired, isFutureScheduled, isPlatformError, isProductionBoot, isTransportFailure, markEmptyResponse, markPlatformError, markTransportFailure, postJson, promotionsResource, readErrorCode, readErrorDetail, requestJson, requestJsonBody, requireServerAnswer, resolveExtension, resolveLoginBranding, resolvePlans, subscriptionsResource, toAdminError, todayIsoDate, trimTrailingSlashes, usersResource } from './client/index.js';
3
+ import { H as HttpClient, g as ResourceListPage, e as ResourceOps, P as PlatformResources, h as ActionRegistry, A as ActionHandler, K as KvStore, S as SaLocale } from './catalog-Dv2twuNi.js';
4
+ export { i as ActionDefNotInManifestError, j as AuditListFilter, B as Bound, D as DEFAULT_SA_LOCALE, k as DefineResourceOptions, l as DiscoveryRead, m as HttpResponse, L as LIST_FIRST_PAGE, n as LIST_PAGE_SIZE_DEFAULT, o as LIST_PAGE_SIZE_MAX, q as LIST_PAGINATION_PARAMS, r as ListFilterOf, s as ListOp, t as ListQuery, M as MarketingProjectionsFilter, u as MessageTree, v as MissingHandlerError, w as PartialMessages, x as PromoCodesFilter, y as PublishBundleVersionOptions, z as PublishPlanVersionOptions, C as ResolvedAction, f as ResourceContext, R as ResourceDef, E as ResourceOp, F as SA_INTL_LOCALES, G as SA_LOCALES, I as SA_LOCALE_LABELS, J as SA_MESSAGES, N as SaBuiltinLocale, O as SaCatalog, Q as SaCatalogOptions, c as SaLocaleDefinition, b as SaLocaleOption, a as SaMessages, d as SaMessagesOverrides, T as TenantsListFilter, U as TranslationOf, V as auditResource, W as bindResource, X as bundleVersionsResource, Y as bundlesResource, Z as clampListPage, _ as clampListPageSize, $ as createSaCatalog, a0 as defaultHttpClient, a1 as defaultKvStore, a2 as defineListOp, a3 as defineMessages, a4 as defineResource, a5 as discoveryResource, a6 as filterQueryString, a7 as isSaBuiltinLocale, a8 as isSentInQuery, a9 as listUrl, aa as marketingResource, ab as mergeMessages, ac as planVersionsResource, ad as plansResource, p as platformResources, ae as promoCodesResource, af as readListPage, ag as resolveMessages, ah as tenantsResource } from './catalog-Dv2twuNi.js';
5
+ import { A as ActionsMap, a as SuperAdminBrand, b as SuperAdminEndpoints, E as ExtensionsMap, c as SuperAdminLoginAdapter, U as UiNotify, j as ResourceMap } from './resource-registry-Cn1Gy2LE.js';
6
+ export { C as CreateResourceRegistryOptions, k as ExtensionLoader, I as InstallPlugin, O as OpOverride, l as ResourceOverride, R as ResourceOverrides, m as ResourceRegistry, n as SA_COLOR_SCHEMES, o as SA_LOCALE_STORAGE_KEY, p as SA_THEME_KEY, q as SA_THEME_STORAGE_KEY, r as SUPER_ADMIN_ACTIONS_KEY, s as SUPER_ADMIN_BRAND_KEY, t as SUPER_ADMIN_CONFIRM_KEY, u as SUPER_ADMIN_ENDPOINTS_KEY, v as SUPER_ADMIN_EXTENSIONS_KEY, w as SUPER_ADMIN_HTTP_KEY, x as SUPER_ADMIN_I18N_KEY, y as SUPER_ADMIN_LOGIN_ADAPTER_KEY, z as SUPER_ADMIN_MANIFEST_CLEAR_CACHE_KEY, B as SUPER_ADMIN_MANIFEST_KEY, D as SUPER_ADMIN_NOTIFY_KEY, F as SUPER_ADMIN_RESOURCES_KEY, G as SaColorScheme, H as SaResolvedScheme, h as SaTheme, f as SaThemeOptions, J as SuperAdminAuthGuardOptions, S as SuperAdminGuardOptions, g as SuperAdminI18n, e as SuperAdminI18nOptions, K as SuperAdminLoginResult, L as SuperAdminManifestGuardOptions, d as UiConfirm, M as UiConfirmPrompt, i as UiConfirmRequest, N as UiConfirmResult, P as UiConfirmTone, Q as UiNotifyKind, T as UiNotifyOptions, V as buildNavigationGuard, W as createResourceRegistry, X as createSaTheme, Y as createSuperAdminI18n, Z as useResource, _ as useSaMessages, $ as useSaTheme, a0 as useSuperAdminI18n } from './resource-registry-Cn1Gy2LE.js';
7
7
  import { AdminManifest, TenantListFilter, TenantDto, AuditQuery, AuditEntry, FeatureUiRegistry, PromoPreviewResponse, OnboardingSelectionRequest, PublicMarketingBundle, FeatureDef, FeatureKey, PublicBootResponse, DiscoverySnapshot, CapabilityCatalogEntryRow, FeatureCatalogEntryRow, QuotaCatalogEntryRow, ReviewCatalogEntryData, CatalogEntryI18n, UpdateCatalogEntryBaseData, SyncDiscoveryResult, BundleVersionRow, CreateBundleVersionDraftData, BundleVersionMutationResult, UpdateBundleVersionDraftData, BundleRow, CreateBundleData, UpdateBundleData, SubscriptionBundleRecord, MarketingProjectionFilter, MarketingProjectionRow, CreateMarketingProjectionData, UpdateMarketingProjectionData, PromotionRow, CreatePromotionData, UpdatePromotionData, PlanVersionRow, CreatePlanVersionDraftData, PlanVersionMutationResult, UpdatePlanVersionDraftData, PlanRow, CreatePlanData, UpdatePlanData, TenantActionDef } from '@saasicat/types';
8
8
  import { RouteRecordRaw, NavigationGuardWithThis } from 'vue-router';
9
9
  import * as vue from 'vue';