aimeat 1.33.1 → 1.33.2
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/locales/en.json +19 -1
- package/dist/locales/fi.json +19 -1
- package/dist/public/css/views/admin.css +2 -0
- package/dist/public/js/services/admin.js +2 -0
- package/dist/public/views/admin/apps-tab.js +42 -4
- package/dist/src/generated/api-types.d.ts +206 -4
- package/dist/src/generated/api-types.d.ts.map +1 -1
- package/dist/src/routes/apps.d.ts +3 -0
- package/dist/src/routes/apps.d.ts.map +1 -1
- package/dist/src/routes/apps.js +45 -0
- package/dist/src/routes/apps.js.map +1 -1
- package/dist/src/routes/libs.d.ts +6 -0
- package/dist/src/routes/libs.d.ts.map +1 -1
- package/dist/src/routes/libs.js +163 -0
- package/dist/src/routes/libs.js.map +1 -1
- package/dist/src/routes/oauth-login.d.ts +16 -6
- package/dist/src/routes/oauth-login.d.ts.map +1 -1
- package/dist/src/routes/oauth-login.js +290 -51
- package/dist/src/routes/oauth-login.js.map +1 -1
- package/dist/static/app-catalog.html +261 -71
- package/package.json +1 -1
package/dist/locales/en.json
CHANGED
|
@@ -4588,6 +4588,18 @@
|
|
|
4588
4588
|
"emailLabel": "Email",
|
|
4589
4589
|
"sendUsername": "Send My Username",
|
|
4590
4590
|
"usernameSent": "If an account with that email exists, your username was sent.",
|
|
4591
|
+
"signupTitle": "Choose your username",
|
|
4592
|
+
"signupIntro": "You're signing in with Google for the first time. Pick the username for your AIMEAT account.",
|
|
4593
|
+
"signupEmailNote": "Signing up as {email}",
|
|
4594
|
+
"signupUsernameLabel": "Username",
|
|
4595
|
+
"signupSuggestedHint": "We suggested one from your Google account — change it to anything you like.",
|
|
4596
|
+
"signupPermanentWarning": "⚠️ This username is permanent. It identifies you across AIMEAT and cannot be changed later — the only way to change it is to delete your account and create a new one.",
|
|
4597
|
+
"signupAvailable": "✓ Available",
|
|
4598
|
+
"signupTaken": "That username is already taken — pick another.",
|
|
4599
|
+
"signupInvalid": "Username must be 3–64 characters: lowercase letters, numbers and hyphens.",
|
|
4600
|
+
"signupCreateBtn": "Create my account",
|
|
4601
|
+
"signupCreating": "Creating account...",
|
|
4602
|
+
"signupCancelBtn": "Cancel",
|
|
4591
4603
|
"whyTitle": "✨ What do you get?",
|
|
4592
4604
|
"whyGhii": "Your own digital identity. Only you control it",
|
|
4593
4605
|
"whyPrivacy": "Your own private memory space, protected by your password",
|
|
@@ -7849,7 +7861,13 @@
|
|
|
7849
7861
|
"hideConfirm": "Hide",
|
|
7850
7862
|
"hideExplain": "This removes the app from the public catalogue, gallery, search, and direct download. The owner keeps a copy with a \"moderated by operator: hidden\" badge but cannot unhide it.",
|
|
7851
7863
|
"reasonLabel": "Reason (shown to the owner, optional)",
|
|
7852
|
-
"reasonPlaceholder": "e.g. Anonymous / policy violation"
|
|
7864
|
+
"reasonPlaceholder": "e.g. Anonymous / policy violation",
|
|
7865
|
+
"delete": "Delete",
|
|
7866
|
+
"deletedOk": "App permanently deleted.",
|
|
7867
|
+
"deleteTitle": "Delete application",
|
|
7868
|
+
"deleteConfirm": "Permanently delete",
|
|
7869
|
+
"deleteWarn": "⚠️ This removes the app and all its versions from the node entirely. This cannot be undone — the owner loses it too. To just hide it, use Hide instead.",
|
|
7870
|
+
"deleteTypeLabel": "Type the filename to confirm: {filename}"
|
|
7853
7871
|
},
|
|
7854
7872
|
"security": {
|
|
7855
7873
|
"title": "Security",
|
package/dist/locales/fi.json
CHANGED
|
@@ -4588,6 +4588,18 @@
|
|
|
4588
4588
|
"emailLabel": "Sähköposti",
|
|
4589
4589
|
"sendUsername": "Lähetä käyttäjätunnukseni",
|
|
4590
4590
|
"usernameSent": "Jos sähköpostiosoitteella on tili, käyttäjätunnus lähetettiin.",
|
|
4591
|
+
"signupTitle": "Valitse käyttäjätunnuksesi",
|
|
4592
|
+
"signupIntro": "Kirjaudut Googlella ensimmäistä kertaa. Valitse AIMEAT-tilisi käyttäjätunnus.",
|
|
4593
|
+
"signupEmailNote": "Rekisteröidyt osoitteella {email}",
|
|
4594
|
+
"signupUsernameLabel": "Käyttäjätunnus",
|
|
4595
|
+
"signupSuggestedHint": "Ehdotimme tunnusta Google-tilisi perusteella — voit vaihtaa sen mihin tahansa.",
|
|
4596
|
+
"signupPermanentWarning": "⚠️ Tämä käyttäjätunnus on pysyvä. Se tunnistaa sinut koko AIMEATissa eikä sitä voi vaihtaa jälkikäteen — ainoa tapa muuttaa se on poistaa tili ja luoda uusi.",
|
|
4597
|
+
"signupAvailable": "✓ Vapaa",
|
|
4598
|
+
"signupTaken": "Tämä käyttäjätunnus on jo varattu — valitse toinen.",
|
|
4599
|
+
"signupInvalid": "Käyttäjätunnuksen pituus 3–64 merkkiä: pieniä kirjaimia, numeroita ja väliviivoja.",
|
|
4600
|
+
"signupCreateBtn": "Luo tilini",
|
|
4601
|
+
"signupCreating": "Luodaan tiliä...",
|
|
4602
|
+
"signupCancelBtn": "Peruuta",
|
|
4591
4603
|
"whyTitle": "✨ Mitä saat?",
|
|
4592
4604
|
"whyGhii": "Oma digitaalinen identiteetti. Vain sinä hallitset sitä",
|
|
4593
4605
|
"whyPrivacy": "Oman yksityisen muistitilan, suojattuna salasanallasi",
|
|
@@ -7849,7 +7861,13 @@
|
|
|
7849
7861
|
"hideConfirm": "Piilota",
|
|
7850
7862
|
"hideExplain": "Tämä poistaa sovelluksen julkisesta katalogista, galleriasta, hausta ja suorasta latauksesta. Omistaja säilyttää kopion merkinnällä \"moderoitu operaattorin toimesta: piilotettu\", mutta ei voi poistaa piilotusta.",
|
|
7851
7863
|
"reasonLabel": "Syy (näytetään omistajalle, valinnainen)",
|
|
7852
|
-
"reasonPlaceholder": "esim. Anonyymi / käytäntörikkomus"
|
|
7864
|
+
"reasonPlaceholder": "esim. Anonyymi / käytäntörikkomus",
|
|
7865
|
+
"delete": "Poista",
|
|
7866
|
+
"deletedOk": "Sovellus poistettu pysyvästi.",
|
|
7867
|
+
"deleteTitle": "Poista sovellus",
|
|
7868
|
+
"deleteConfirm": "Poista pysyvästi",
|
|
7869
|
+
"deleteWarn": "⚠️ Tämä poistaa sovelluksen ja kaikki sen versiot kokonaan solmusta. Tätä ei voi perua — myös omistaja menettää sen. Jos haluat vain piilottaa, käytä Piilota-toimintoa.",
|
|
7870
|
+
"deleteTypeLabel": "Vahvista kirjoittamalla tiedostonimi: {filename}"
|
|
7853
7871
|
},
|
|
7854
7872
|
"security": {
|
|
7855
7873
|
"title": "Tietoturva",
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* its distinct indigo accent and a permanently-dark sidebar, but all content
|
|
5
5
|
* surfaces map to global theme.css tokens so they flip with dark/light mode.
|
|
6
6
|
* @version-history
|
|
7
|
+
* v1.8.0 — 2026-06-25 — Applications tab: .adm-apps-rowactions (Hide/Restore + Delete row).
|
|
7
8
|
* v1.7.0 — 2026-06-24 — Applications moderation tab: .adm-apps-* (filters row,
|
|
8
9
|
* hidden-only toggle, dimmed hidden rows, modal actions).
|
|
9
10
|
* v1.6.0 — 2026-06-12 — Subdomains tab: .adm-subdomain-form create-form grid
|
|
@@ -596,6 +597,7 @@
|
|
|
596
597
|
.adm-apps-toggle { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }
|
|
597
598
|
.adm-apps-row-hidden { opacity: 0.6; }
|
|
598
599
|
.adm-apps-modal-actions { justify-content: flex-end; }
|
|
600
|
+
.adm-apps-rowactions { gap: 6px; flex-wrap: wrap; }
|
|
599
601
|
|
|
600
602
|
/* Active subtab button */
|
|
601
603
|
.adm-btn-active,
|
|
@@ -82,6 +82,8 @@ export const mintMorsels = (gaii, amount) => apiPost('/v1/admin/mint', { gai
|
|
|
82
82
|
export const getAdminApps = () => apiGet('/v1/admin/apps');
|
|
83
83
|
export const moderateApp = (owner, filename, hidden, reason) =>
|
|
84
84
|
apiPost(`/v1/admin/apps/${encodeURIComponent(owner)}/${encodeURIComponent(filename)}/moderate`, { hidden, reason });
|
|
85
|
+
export const deleteAppAdmin = (owner, filename) =>
|
|
86
|
+
apiDelete(`/v1/admin/apps/${encodeURIComponent(owner)}/${encodeURIComponent(filename)}`);
|
|
85
87
|
|
|
86
88
|
// ── Chat Instances ──
|
|
87
89
|
export const getChatInstances = () => apiGet('/v1/chat-instances');
|
|
@@ -6,10 +6,13 @@
|
|
|
6
6
|
* from every public surface (catalogue/gallery/search + direct download); the
|
|
7
7
|
* owner still sees it in their "My Apps" with a "moderated by operator: hidden"
|
|
8
8
|
* badge but cannot lift it — only an operator can.
|
|
9
|
-
* @structure AppsAdminTab (default) — load all apps, filter, table, hide-reason
|
|
9
|
+
* @structure AppsAdminTab (default) — load all apps, filter, table, hide-reason +
|
|
10
|
+
* type-to-confirm delete modals.
|
|
10
11
|
* @usage Mounted by the admin dashboard tab router (views/admin.js).
|
|
11
12
|
* @version-history
|
|
12
13
|
* v1.0.0 — 2026-06-24 — Initial: list-all + hide/restore moderation tool.
|
|
14
|
+
* v1.1.0 — 2026-06-25 — Add operator hard-delete (type-to-confirm) — removes an
|
|
15
|
+
* app permanently from the node.
|
|
13
16
|
*/
|
|
14
17
|
import { h } from 'preact';
|
|
15
18
|
import { useState, useEffect, useCallback, useMemo } from 'preact/hooks';
|
|
@@ -28,6 +31,8 @@ export default function AppsAdminTab() {
|
|
|
28
31
|
const [hiddenOnly, setHiddenOnly] = useState(false);
|
|
29
32
|
// { owner, filename, name, reason } while the hide-reason modal is open
|
|
30
33
|
const [hiding, setHiding] = useState(null);
|
|
34
|
+
// { owner, filename, name, typed } while the type-to-confirm delete modal is open
|
|
35
|
+
const [deleting, setDeleting] = useState(null);
|
|
31
36
|
const [busy, setBusy] = useState(false);
|
|
32
37
|
const [msg, showError, showSuccess, clearMsg] = useToast();
|
|
33
38
|
|
|
@@ -89,6 +94,21 @@ export default function AppsAdminTab() {
|
|
|
89
94
|
}
|
|
90
95
|
}, [load, showSuccess, showError]);
|
|
91
96
|
|
|
97
|
+
const doDelete = useCallback(async () => {
|
|
98
|
+
if (!deleting || deleting.typed !== deleting.filename) return;
|
|
99
|
+
setBusy(true);
|
|
100
|
+
try {
|
|
101
|
+
await adminService.deleteAppAdmin(deleting.owner, deleting.filename);
|
|
102
|
+
showSuccess(t('admin.apps.deletedOk'));
|
|
103
|
+
setDeleting(null);
|
|
104
|
+
await load();
|
|
105
|
+
} catch (err) {
|
|
106
|
+
showError(err?.message || String(err));
|
|
107
|
+
} finally {
|
|
108
|
+
setBusy(false);
|
|
109
|
+
}
|
|
110
|
+
}, [deleting, load, showSuccess, showError]);
|
|
111
|
+
|
|
92
112
|
return html`
|
|
93
113
|
${msg && html`<${Toast} type=${msg.type} text=${msg.text} onDismiss=${clearMsg} />`}
|
|
94
114
|
<p class="adm-text-sm adm-text-dim adm-mb-md">${t('admin.apps.desc')}</p>
|
|
@@ -140,9 +160,12 @@ export default function AppsAdminTab() {
|
|
|
140
160
|
: html`<span class="badge badge-success">${t('admin.apps.statusLive')}</span>`}
|
|
141
161
|
</td>
|
|
142
162
|
<td>
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
163
|
+
<div class="adm-flex adm-apps-rowactions">
|
|
164
|
+
${a.operator_hidden
|
|
165
|
+
? html`<button class="adm-btn-sm adm-btn-success" onClick=${() => doRestore(a)}>${t('admin.apps.restore')}</button>`
|
|
166
|
+
: html`<button class="adm-btn-sm adm-btn-danger" onClick=${() => setHiding({ owner: a.owner, filename: a.filename, name: a.manifest?.name || a.filename, reason: '' })}>${t('admin.apps.hide')}</button>`}
|
|
167
|
+
<button class="adm-btn-sm adm-btn-danger-solid" onClick=${() => setDeleting({ owner: a.owner, filename: a.filename, name: a.manifest?.name || a.filename, typed: '' })}>${t('admin.apps.delete')}</button>
|
|
168
|
+
</div>
|
|
146
169
|
</td>
|
|
147
170
|
</tr>
|
|
148
171
|
`)}
|
|
@@ -166,5 +189,20 @@ export default function AppsAdminTab() {
|
|
|
166
189
|
</div>
|
|
167
190
|
`}
|
|
168
191
|
<//>
|
|
192
|
+
|
|
193
|
+
<${Modal} open=${!!deleting} onClose=${() => setDeleting(null)} title=${t('admin.apps.deleteTitle')}>
|
|
194
|
+
${deleting && html`
|
|
195
|
+
<p>${t('admin.apps.deleteConfirm')} <strong>${escHtml(deleting.name)}</strong> (<span class="mono">${escHtml(deleting.owner)}</span>)?</p>
|
|
196
|
+
<p class="adm-text-sm adm-text-error">${t('admin.apps.deleteWarn')}</p>
|
|
197
|
+
<label class="adm-text-sm adm-mb-half">${t('admin.apps.deleteTypeLabel', { filename: deleting.filename })}</label>
|
|
198
|
+
<input class="adm-input adm-input-full mono" value=${deleting.typed}
|
|
199
|
+
placeholder=${deleting.filename}
|
|
200
|
+
onInput=${e => setDeleting({ ...deleting, typed: e.target.value })} />
|
|
201
|
+
<div class="adm-flex adm-mt-md adm-apps-modal-actions">
|
|
202
|
+
<button class="btn-ghost" onClick=${() => setDeleting(null)}>${t('common.cancel')}</button>
|
|
203
|
+
<button class="btn-danger-solid" disabled=${busy || deleting.typed !== deleting.filename} onClick=${doDelete}>${t('admin.apps.delete')}</button>
|
|
204
|
+
</div>
|
|
205
|
+
`}
|
|
206
|
+
<//>
|
|
169
207
|
`;
|
|
170
208
|
}
|
|
@@ -5335,10 +5335,13 @@ export interface paths {
|
|
|
5335
5335
|
/**
|
|
5336
5336
|
* Google sign-in OIDC redirect callback
|
|
5337
5337
|
* @description Google redirects the browser here with `code` and `state` after consent. The node
|
|
5338
|
-
* exchanges the code
|
|
5339
|
-
*
|
|
5340
|
-
*
|
|
5341
|
-
*
|
|
5338
|
+
* exchanges the code and maps the Google identity to a GHII. A returning Google user
|
|
5339
|
+
* (matched by provider subject) or a verified-email match links straight to their account
|
|
5340
|
+
* and gets an owner session (httpOnly refresh cookie + access token) before redirecting
|
|
5341
|
+
* back to the SPA. A BRAND-NEW user is NOT auto-created: the node stashes the verified
|
|
5342
|
+
* Google identity in a short-lived signed cookie and redirects back with `?aimeat_signup=1`,
|
|
5343
|
+
* and the SPA prompts for a one-time username choice (see `/v1/ghii/login/pending` +
|
|
5344
|
+
* `/v1/ghii/login/google/finalize`). On any failure it redirects to `/?auth_error=<CODE>`.
|
|
5342
5345
|
*/
|
|
5343
5346
|
get: operations["ghiiLoginGoogleCallback"];
|
|
5344
5347
|
put?: never;
|
|
@@ -5349,6 +5352,77 @@ export interface paths {
|
|
|
5349
5352
|
patch?: never;
|
|
5350
5353
|
trace?: never;
|
|
5351
5354
|
};
|
|
5355
|
+
"/v1/ghii/login/pending": {
|
|
5356
|
+
parameters: {
|
|
5357
|
+
query?: never;
|
|
5358
|
+
header?: never;
|
|
5359
|
+
path?: never;
|
|
5360
|
+
cookie?: never;
|
|
5361
|
+
};
|
|
5362
|
+
/**
|
|
5363
|
+
* Read the pending Google sign-up (first-time username choice)
|
|
5364
|
+
* @description After a brand-new Google user is bounced back with `?aimeat_signup=1`, the SPA calls
|
|
5365
|
+
* this to read the pending sign-up so it can render the one-time username-choice step.
|
|
5366
|
+
* Reads the short-lived, signed httpOnly cookie set by the callback (the verified Google
|
|
5367
|
+
* identity never leaves the server — only the suggested username, email, display name and
|
|
5368
|
+
* post-login redirect are returned). Returns 404 `NO_PENDING_SIGNUP` when absent/expired.
|
|
5369
|
+
*/
|
|
5370
|
+
get: operations["ghiiLoginPending"];
|
|
5371
|
+
put?: never;
|
|
5372
|
+
post?: never;
|
|
5373
|
+
delete?: never;
|
|
5374
|
+
options?: never;
|
|
5375
|
+
head?: never;
|
|
5376
|
+
patch?: never;
|
|
5377
|
+
trace?: never;
|
|
5378
|
+
};
|
|
5379
|
+
"/v1/ghii/username-available": {
|
|
5380
|
+
parameters: {
|
|
5381
|
+
query?: never;
|
|
5382
|
+
header?: never;
|
|
5383
|
+
path?: never;
|
|
5384
|
+
cookie?: never;
|
|
5385
|
+
};
|
|
5386
|
+
/**
|
|
5387
|
+
* Check whether an owner username is valid and free
|
|
5388
|
+
* @description Live validation for the username-choice step (and any registration UI). Generic and
|
|
5389
|
+
* unauthenticated; rate-limited. Reports whether the name passes the owner-name format
|
|
5390
|
+
* rules and whether it is currently unclaimed. A same-node `@suffix` is stripped; a
|
|
5391
|
+
* remote-node identity is reported invalid (cannot be registered here).
|
|
5392
|
+
*/
|
|
5393
|
+
get: operations["ghiiUsernameAvailable"];
|
|
5394
|
+
put?: never;
|
|
5395
|
+
post?: never;
|
|
5396
|
+
delete?: never;
|
|
5397
|
+
options?: never;
|
|
5398
|
+
head?: never;
|
|
5399
|
+
patch?: never;
|
|
5400
|
+
trace?: never;
|
|
5401
|
+
};
|
|
5402
|
+
"/v1/ghii/login/google/finalize": {
|
|
5403
|
+
parameters: {
|
|
5404
|
+
query?: never;
|
|
5405
|
+
header?: never;
|
|
5406
|
+
path?: never;
|
|
5407
|
+
cookie?: never;
|
|
5408
|
+
};
|
|
5409
|
+
get?: never;
|
|
5410
|
+
put?: never;
|
|
5411
|
+
/**
|
|
5412
|
+
* Complete a first-time Google sign-up with the chosen username
|
|
5413
|
+
* @description Finalizes a brand-new Google sign-up. Reads the signed pending-signup cookie, validates
|
|
5414
|
+
* the chosen username (falling back to the suggested one when blank), creates the owner +
|
|
5415
|
+
* GHII linked to the Google account (with the welcome bonus), and establishes an owner
|
|
5416
|
+
* session (httpOnly refresh cookie + access token). Idempotent: if the Google identity has
|
|
5417
|
+
* already resolved to a GHII, that session is established instead. Rate-limited.
|
|
5418
|
+
*/
|
|
5419
|
+
post: operations["ghiiLoginGoogleFinalize"];
|
|
5420
|
+
delete?: never;
|
|
5421
|
+
options?: never;
|
|
5422
|
+
head?: never;
|
|
5423
|
+
patch?: never;
|
|
5424
|
+
trace?: never;
|
|
5425
|
+
};
|
|
5352
5426
|
"/v1/catalogue/directory": {
|
|
5353
5427
|
parameters: {
|
|
5354
5428
|
query?: never;
|
|
@@ -23121,6 +23195,134 @@ export interface operations {
|
|
|
23121
23195
|
};
|
|
23122
23196
|
};
|
|
23123
23197
|
};
|
|
23198
|
+
ghiiLoginPending: {
|
|
23199
|
+
parameters: {
|
|
23200
|
+
query?: never;
|
|
23201
|
+
header?: never;
|
|
23202
|
+
path?: never;
|
|
23203
|
+
cookie?: never;
|
|
23204
|
+
};
|
|
23205
|
+
requestBody?: never;
|
|
23206
|
+
responses: {
|
|
23207
|
+
/** @description Pending sign-up details */
|
|
23208
|
+
200: {
|
|
23209
|
+
headers: {
|
|
23210
|
+
[name: string]: unknown;
|
|
23211
|
+
};
|
|
23212
|
+
content: {
|
|
23213
|
+
"application/json": components["schemas"]["AimeatEnvelope"] & {
|
|
23214
|
+
data?: {
|
|
23215
|
+
/** @description Suggested username (derived from the Google account, free at suggestion time) */
|
|
23216
|
+
suggested?: string;
|
|
23217
|
+
email?: string | null;
|
|
23218
|
+
displayName?: string;
|
|
23219
|
+
/** @description Same-site path to return to after finalize */
|
|
23220
|
+
redirect?: string;
|
|
23221
|
+
};
|
|
23222
|
+
};
|
|
23223
|
+
};
|
|
23224
|
+
};
|
|
23225
|
+
/** @description No pending Google sign-up (cookie absent or expired) */
|
|
23226
|
+
404: {
|
|
23227
|
+
headers: {
|
|
23228
|
+
[name: string]: unknown;
|
|
23229
|
+
};
|
|
23230
|
+
content: {
|
|
23231
|
+
"application/json": components["schemas"]["AimeatEnvelope"] & {
|
|
23232
|
+
error?: {
|
|
23233
|
+
/** @example NO_PENDING_SIGNUP */
|
|
23234
|
+
code?: unknown;
|
|
23235
|
+
};
|
|
23236
|
+
};
|
|
23237
|
+
};
|
|
23238
|
+
};
|
|
23239
|
+
};
|
|
23240
|
+
};
|
|
23241
|
+
ghiiUsernameAvailable: {
|
|
23242
|
+
parameters: {
|
|
23243
|
+
query: {
|
|
23244
|
+
/** @description Candidate username (lowercased; an `@node` suffix for this node is stripped) */
|
|
23245
|
+
name: string;
|
|
23246
|
+
};
|
|
23247
|
+
header?: never;
|
|
23248
|
+
path?: never;
|
|
23249
|
+
cookie?: never;
|
|
23250
|
+
};
|
|
23251
|
+
requestBody?: never;
|
|
23252
|
+
responses: {
|
|
23253
|
+
/** @description Validation result */
|
|
23254
|
+
200: {
|
|
23255
|
+
headers: {
|
|
23256
|
+
[name: string]: unknown;
|
|
23257
|
+
};
|
|
23258
|
+
content: {
|
|
23259
|
+
"application/json": components["schemas"]["AimeatEnvelope"] & {
|
|
23260
|
+
data?: {
|
|
23261
|
+
name?: string;
|
|
23262
|
+
valid?: boolean;
|
|
23263
|
+
available?: boolean;
|
|
23264
|
+
reason?: string | null;
|
|
23265
|
+
};
|
|
23266
|
+
};
|
|
23267
|
+
};
|
|
23268
|
+
};
|
|
23269
|
+
};
|
|
23270
|
+
};
|
|
23271
|
+
ghiiLoginGoogleFinalize: {
|
|
23272
|
+
parameters: {
|
|
23273
|
+
query?: never;
|
|
23274
|
+
header?: never;
|
|
23275
|
+
path?: never;
|
|
23276
|
+
cookie?: never;
|
|
23277
|
+
};
|
|
23278
|
+
requestBody?: {
|
|
23279
|
+
content: {
|
|
23280
|
+
"application/json": {
|
|
23281
|
+
/** @description The username the user chose or confirmed; blank uses the suggested name */
|
|
23282
|
+
username?: string;
|
|
23283
|
+
};
|
|
23284
|
+
};
|
|
23285
|
+
};
|
|
23286
|
+
responses: {
|
|
23287
|
+
/** @description Account created (or resolved) and session established */
|
|
23288
|
+
200: {
|
|
23289
|
+
headers: {
|
|
23290
|
+
[name: string]: unknown;
|
|
23291
|
+
};
|
|
23292
|
+
content: {
|
|
23293
|
+
"application/json": components["schemas"]["AimeatEnvelope"] & {
|
|
23294
|
+
data?: {
|
|
23295
|
+
ghii?: string;
|
|
23296
|
+
owner?: string;
|
|
23297
|
+
displayName?: string;
|
|
23298
|
+
redirect?: string;
|
|
23299
|
+
};
|
|
23300
|
+
};
|
|
23301
|
+
};
|
|
23302
|
+
};
|
|
23303
|
+
/** @description No pending sign-up, or invalid username */
|
|
23304
|
+
400: {
|
|
23305
|
+
headers: {
|
|
23306
|
+
[name: string]: unknown;
|
|
23307
|
+
};
|
|
23308
|
+
content?: never;
|
|
23309
|
+
};
|
|
23310
|
+
/** @description Username already taken */
|
|
23311
|
+
409: {
|
|
23312
|
+
headers: {
|
|
23313
|
+
[name: string]: unknown;
|
|
23314
|
+
};
|
|
23315
|
+
content: {
|
|
23316
|
+
"application/json": components["schemas"]["AimeatEnvelope"] & {
|
|
23317
|
+
error?: {
|
|
23318
|
+
/** @example NAME_TAKEN */
|
|
23319
|
+
code?: unknown;
|
|
23320
|
+
};
|
|
23321
|
+
};
|
|
23322
|
+
};
|
|
23323
|
+
};
|
|
23324
|
+
};
|
|
23325
|
+
};
|
|
23124
23326
|
searchDirectory: {
|
|
23125
23327
|
parameters: {
|
|
23126
23328
|
query?: {
|