@revenexx/studio-integrations 3.4.0 → 3.4.1

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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @revenexx/studio-integrations
2
2
 
3
+ ## 3.4.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 3e92677: The "Use revenexx API Keys" panel now shows the cockpit's active tenant — the project chosen in its top bar — and no longer lets it be changed. The cockpit mints a key only under that tenant, so picking another one used to label the credential with a tenant the key did not belong to. With no active tenant the panel says to choose a project first and offers no key to mint. The SFTP offer keeps its free tenant choice.
8
+
3
9
  ## 3.4.0
4
10
 
5
11
  ### Minor Changes
package/dist/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@revenexx/studio-integrations",
3
3
  "configKey": "studioIntegrations",
4
- "version": "3.4.0",
4
+ "version": "3.4.1",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.3",
7
7
  "unbuild": "unknown"
@@ -85,7 +85,8 @@ async function ensureLists() {
85
85
  loadingList.value = true;
86
86
  try {
87
87
  await loadTenants();
88
- if (!tenant.value) tenant.value = onlyTenantSlug.value ?? tenants.value[0]?.slug ?? null;
88
+ if (kind.value === "api") tenant.value = onlyTenantSlug.value;
89
+ else if (!tenant.value) tenant.value = onlyTenantSlug.value ?? tenants.value[0]?.slug ?? null;
89
90
  if (kind.value === "sftp") await sftp.load(tenant.value);
90
91
  else if (kind.value === "smtp") {
91
92
  const list = await mail.listCredentials();
@@ -179,6 +180,9 @@ function onSelect(id) {
179
180
  if (kind.value === "sftp") void applySftp();
180
181
  else if (kind.value === "smtp") void applySmtp();
181
182
  }
183
+ watch(onlyTenantSlug, (slug) => {
184
+ if (active.value && kind.value === "api") tenant.value = slug;
185
+ });
182
186
  watch([tenant, marketCode], () => {
183
187
  if (active.value && kind.value === "api" && apiKeyReady.value) {
184
188
  emit("apply", { tenant: tenant.value ?? "", market: marketSlug() });
@@ -303,8 +307,8 @@ function submitCreate() {
303
307
  <!-- Tenant (preselected) -->
304
308
  <div class="space-y-1.5">
305
309
  <Label :for="`${uid}-tenant`">{{ t("integration.credentials.revenexxSource.field.tenant.label") }}</Label>
306
- <Select :model-value="tenant ?? ''" @update:model-value="(v) => tenant = v">
307
- <SelectTrigger :id="`${uid}-tenant`" class="bg-white">
310
+ <Select :model-value="tenant ?? ''" :disabled="kind === 'api'" @update:model-value="(v) => tenant = v">
311
+ <SelectTrigger :id="`${uid}-tenant`" class="bg-white" :aria-describedby="kind === 'api' ? `${uid}-tenant-hint` : void 0">
308
312
  <SelectValue :placeholder="t('integration.credentials.revenexxSource.field.tenant.placeholder')" />
309
313
  </SelectTrigger>
310
314
  <SelectContent>
@@ -313,6 +317,9 @@ function submitCreate() {
313
317
  </SelectItem>
314
318
  </SelectContent>
315
319
  </Select>
320
+ <p v-if="kind === 'api'" :id="`${uid}-tenant-hint`" class="text-xs text-muted-foreground">
321
+ {{ tenant ? t("integration.credentials.revenexxSource.field.tenant.hint.api") : t("integration.credentials.revenexxSource.field.tenant.hint.apiNone") }}
322
+ </p>
316
323
  </div>
317
324
 
318
325
  <!-- Market scope — only the Revenexx API credential is market-scoped -->
@@ -252,6 +252,8 @@
252
252
  "integration.credentials.revenexxSource.field.resource.placeholder": "Auswählen",
253
253
  "integration.credentials.revenexxSource.field.resource.sftpLabel": "SFTP-Konto",
254
254
  "integration.credentials.revenexxSource.field.tenant.label": "Mandant",
255
+ "integration.credentials.revenexxSource.field.tenant.hint.api": "Das Cockpit erstellt den Key für das oben in der Leiste gewählte Projekt, daher lässt sich der Mandant hier nicht ändern.",
256
+ "integration.credentials.revenexxSource.field.tenant.hint.apiNone": "Bitte zuerst oben in der Cockpit-Leiste ein Projekt wählen — der Key wird für dieses Projekt erstellt.",
255
257
  "integration.credentials.revenexxSource.field.tenant.placeholder": "Mandant auswählen",
256
258
  "integration.credentials.revenexxSource.hint.available": "Eine vorhandene revenexx-Ressource wiederverwenden, statt Zugangsdaten von Hand einzugeben.",
257
259
  "integration.credentials.revenexxSource.hint.unavailable": "Hier nicht verfügbar — die verwalteten revenexx-Ressourcen befinden sich im Cockpit. Bitte stattdessen die Zugangsdaten von Hand eingeben.",
@@ -252,6 +252,8 @@
252
252
  "integration.credentials.revenexxSource.field.resource.placeholder": "Select one",
253
253
  "integration.credentials.revenexxSource.field.resource.sftpLabel": "SFTP account",
254
254
  "integration.credentials.revenexxSource.field.tenant.label": "Tenant",
255
+ "integration.credentials.revenexxSource.field.tenant.hint.api": "The cockpit creates the key for the project chosen in its top bar, so this tenant cannot be changed here.",
256
+ "integration.credentials.revenexxSource.field.tenant.hint.apiNone": "Choose a project in the cockpit’s top bar first — the key is created for that project.",
255
257
  "integration.credentials.revenexxSource.field.tenant.placeholder": "Select tenant",
256
258
  "integration.credentials.revenexxSource.hint.available": "Reuse an existing revenexx resource instead of typing access data by hand.",
257
259
  "integration.credentials.revenexxSource.hint.unavailable": "Not available here — the managed revenexx resources live in the cockpit. Enter the access data by hand instead.",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@revenexx/studio-integrations",
3
- "version": "3.4.0",
3
+ "version": "3.4.1",
4
4
  "type": "module",
5
5
  "description": "Integration Studio (core: workflows, node editor, runs, schedules, credentials, secrets, audit) as a standalone, publishable Nuxt module.",
6
6
  "repository": {