@wssto2/vue-core 0.5.3 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/README.md +3 -1
- package/dist/{ActionRow.vue_vue_type_script_setup_true_lang-Bv-APkGf.js → ActionRow.vue_vue_type_script_setup_true_lang-D8NCXX4p.js} +1 -1
- package/dist/{Activity-DUjDaPfP.js → Activity-DGodh6BU.js} +4 -4
- package/dist/{Changes-B0tZO6BZ.js → Changes-38u4xY6e.js} +3 -3
- package/dist/{CollectionPage.vue_vue_type_script_setup_true_lang-o_Pj-JcD.js → CollectionPage.vue_vue_type_script_setup_true_lang-DPcCnrjr.js} +3 -3
- package/dist/{DateField.vue_vue_type_script_setup_true_lang-CDg31ZU7.js → DateField.vue_vue_type_script_setup_true_lang-BxUuUypB.js} +1 -1
- package/dist/{DeadLetters-IgVHao84.js → DeadLetters-CeHfhFHP.js} +6 -5
- package/dist/{FormGroup.vue_vue_type_script_setup_true_lang-CSgT4ITL.js → FormGroup.vue_vue_type_script_setup_true_lang-CNb2CK01.js} +1 -1
- package/dist/{FormView.vue_vue_type_script_setup_true_lang-D31Hk3pJ.js → FormView.vue_vue_type_script_setup_true_lang-nyz8EkzM.js} +1 -1
- package/dist/{General-C40HxupS.js → General-BNTjPvat.js} +6 -6
- package/dist/{NewRolePage-Bhy8KJO1.js → NewRolePage-Btg7gzzH.js} +7 -6
- package/dist/{NumberField.vue_vue_type_script_setup_true_lang-BdS7BxuS.js → NumberField.vue_vue_type_script_setup_true_lang-C8um4ARi.js} +1 -1
- package/dist/PersonAccess.vue_vue_type_script_setup_true_lang-ClmawvYm.js +600 -0
- package/dist/{ProfilePage-Bf7dFzGd.js → ProfilePage-CoZyG11N.js} +9 -9
- package/dist/{RoleEditor.vue_vue_type_script_setup_true_lang-C6oloGIh.js → RoleEditor.vue_vue_type_script_setup_true_lang-Bs9bo0Zb.js} +30 -29
- package/dist/{RolePage-BjbvciTg.js → RolePage-CPlwZA6X.js} +37 -35
- package/dist/{RolesPage-DzVOgF4z.js → RolesPage-CdYdIHR4.js} +29 -27
- package/dist/{SegmentedField.vue_vue_type_script_setup_true_lang-DXe_iOS8.js → SegmentedField.vue_vue_type_script_setup_true_lang-B_hBL5f4.js} +1 -1
- package/dist/{SelectField.vue_vue_type_script_setup_true_lang-BN4vzvV9.js → SelectField.vue_vue_type_script_setup_true_lang-CBZhGNpm.js} +4 -4
- package/dist/ServiceAccountDialog.vue_vue_type_script_setup_true_lang-DuvSSBbX.js +126 -0
- package/dist/ServiceAccountRecord-BtaUZuWU.js +511 -0
- package/dist/ServiceAccountsList-CcRJvNaf.js +137 -0
- package/dist/{SessionList.vue_vue_type_script_setup_true_lang-PuWIK-Wa.js → SessionList.vue_vue_type_script_setup_true_lang-VvBB2EZz.js} +2 -2
- package/dist/{Sessions-CRUObe5G.js → Sessions-DkGNO1FO.js} +2 -2
- package/dist/{SettingsPage-C0qEC0uI.js → SettingsPage-D4G1HGbG.js} +8 -8
- package/dist/{SignIn-Uy0Jujzz.js → SignIn-DS1YymqD.js} +4 -4
- package/dist/{SignInPage-CpVZfrLZ.js → SignInPage-BrmL0PUw.js} +3 -3
- package/dist/{SignIns-Cp5Gx2dk.js → SignIns-C7l7IPHQ.js} +1 -1
- package/dist/{SwitchField.vue_vue_type_script_setup_true_lang-Dj5Aq8QT.js → SwitchField.vue_vue_type_script_setup_true_lang-DXZK89A3.js} +1 -1
- package/dist/{TextField.vue_vue_type_script_setup_true_lang-BwfNNQEz.js → TextField.vue_vue_type_script_setup_true_lang-CX3LdZLK.js} +2 -2
- package/dist/{TextareaField.vue_vue_type_script_setup_true_lang-aT1P8Xqr.js → TextareaField.vue_vue_type_script_setup_true_lang-BOtn_1GT.js} +1 -1
- package/dist/{TimeField.vue_vue_type_script_setup_true_lang-jPKPE1hc.js → TimeField.vue_vue_type_script_setup_true_lang-CbflIrq6.js} +1 -1
- package/dist/{UserRecord-DbSMnTbj.js → UserRecord-Du8M_kuk.js} +25 -25
- package/dist/{UsersList-9MicE2pG.js → UsersList-D3ydQice.js} +13 -13
- package/dist/access/api.d.ts +7 -8
- package/dist/access/context.d.ts +2 -7
- package/dist/access/feature.d.ts +0 -8
- package/dist/access/index.js +47 -15
- package/dist/client/client.d.ts +2 -2
- package/dist/client/index.d.ts +1 -1
- package/dist/client/route.d.ts +22 -3
- package/dist/collection/http.d.ts +3 -2
- package/dist/collection/index.js +17 -16
- package/dist/form/index.js +586 -611
- package/dist/http-nz92KjdS.js +42 -0
- package/dist/i18n/index.js +32 -32
- package/dist/identity/index.d.ts +7 -0
- package/dist/identity/index.js +19 -15
- package/dist/identity/serviceaccounts/ApiKeysPanel.vue.d.ts +17 -0
- package/dist/identity/serviceaccounts/CreatedApiKeyDialog.vue.d.ts +53 -0
- package/dist/identity/serviceaccounts/NewApiKeyDialog.vue.d.ts +24 -0
- package/dist/identity/serviceaccounts/ServiceAccountDialog.vue.d.ts +22 -0
- package/dist/identity/serviceaccounts/ServiceAccountRecord.vue.d.ts +2 -0
- package/dist/identity/serviceaccounts/ServiceAccountsList.vue.d.ts +2 -0
- package/dist/identity/serviceaccounts/access.d.ts +4 -0
- package/dist/identity/serviceaccounts/api.d.ts +27 -0
- package/dist/identity/serviceaccounts/context.d.ts +14 -0
- package/dist/identity/serviceaccounts/feature.d.ts +23 -0
- package/dist/identity/serviceaccounts/form.d.ts +4 -0
- package/dist/identity/serviceaccounts/messages.d.ts +11 -0
- package/dist/identity/serviceaccounts/routes.d.ts +22 -0
- package/dist/{index-Ok29ucE3.js → index-Cmj9iZmT.js} +191 -168
- package/dist/{index-C-oM_Mnf.js → index-DH0MoFqg.js} +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/internal/copyText.d.ts +5 -0
- package/dist/modules/access/routes.d.ts +13 -13
- package/dist/modules/events/routes.d.ts +4 -4
- package/dist/modules/identity/routes.d.ts +31 -31
- package/dist/modules/notification/routes.d.ts +16 -16
- package/dist/modules/serviceaccount/entities.d.ts +127 -0
- package/dist/modules/serviceaccount/routes.d.ts +58 -0
- package/dist/modules/serviceaccount/schemas.d.ts +49 -0
- package/dist/{neighbors-Bv6vnWlW.js → neighbors-DNZuGlQH.js} +1 -1
- package/dist/notifications/index.js +1 -1
- package/dist/{options-Bu0XbEpN.js → options-e_CAfvDQ.js} +3 -3
- package/dist/phone/index.js +1 -1
- package/dist/refusals-COPr15XZ.js +135 -0
- package/dist/routes-CVckt7Pj.js +19 -0
- package/dist/state-BC1Fc6U2.js +154 -0
- package/dist/{status-C78NpXyB.js → status-C8XtnK6m.js} +7 -6
- package/dist/styles.css +1 -1
- package/dist/{suggestions-ClyLexMO.js → suggestions-cPjs5gQz.js} +1 -1
- package/dist/{useCommand-DyuPTosF.js → useCommand-CfG727e8.js} +1 -1
- package/dist/{useGroupSheet-C2NyqWRp.js → useGroupSheet-BVcNDWbP.js} +2 -2
- package/dist/useRecordDialog-D65FF85F.js +30 -0
- package/package.json +2 -2
- package/dist/http-CdQowFlW.js +0 -194
- package/dist/index-BdGnA1Jh.js +0 -765
package/dist/identity/index.d.ts
CHANGED
|
@@ -16,3 +16,10 @@ export { default as SignInAsButton } from "./SignInAsButton.vue";
|
|
|
16
16
|
export { isSessionEnded, lockedUntil, returnToOwnAccount, signIn, signInAs } from "./signIn";
|
|
17
17
|
export { parseIdentityUser } from "./user";
|
|
18
18
|
export type { IdentityUser } from "./user";
|
|
19
|
+
export { serviceAccountsFeature } from "./serviceaccounts/feature";
|
|
20
|
+
export type { ServiceAccountsFeatureOptions } from "./serviceaccounts/feature";
|
|
21
|
+
export type { ServiceAccountTenants } from "./serviceaccounts/context";
|
|
22
|
+
export { serviceAccountsRoutes } from "./serviceaccounts/routes";
|
|
23
|
+
export type { ServiceAccountsRoutes } from "./serviceaccounts/routes";
|
|
24
|
+
export type { AccountTenant, ApiKey, ApiKeyList, CreatedApiKey, ServiceAccount, ServiceAccountList } from "../modules/serviceaccount/entities";
|
|
25
|
+
export { serviceaccountRoutes } from "../modules/serviceaccount/routes";
|
package/dist/identity/index.js
CHANGED
|
@@ -1,19 +1,23 @@
|
|
|
1
|
-
import { _ as t,
|
|
2
|
-
import { _ as
|
|
1
|
+
import { _ as t, k as a, l as o, i as n, m as i, d as r, n as u, o as c, q as d, r as A, t as p, s as R, v as f, w as l, x as m, g as y } from "../index-Cmj9iZmT.js";
|
|
2
|
+
import { _ as v } from "../ActionRow.vue_vue_type_script_setup_true_lang-D8NCXX4p.js";
|
|
3
|
+
import { s as I } from "../routes-CVckt7Pj.js";
|
|
3
4
|
export {
|
|
4
|
-
|
|
5
|
+
v as ActionRow,
|
|
5
6
|
t as SignInAsButton,
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
a as identityFeature,
|
|
8
|
+
o as identityPlatform,
|
|
9
|
+
n as identityRoutes,
|
|
10
|
+
i as identitySessionAdapter,
|
|
10
11
|
r as isSessionEnded,
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
p as
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
u as lockedUntil,
|
|
13
|
+
c as parseIdentityUser,
|
|
14
|
+
d as profileRoutes,
|
|
15
|
+
A as returnToOwnAccount,
|
|
16
|
+
p as serviceAccountsFeature,
|
|
17
|
+
R as serviceAccountsRoutes,
|
|
18
|
+
I as serviceaccountRoutes,
|
|
19
|
+
f as signIn,
|
|
20
|
+
l as signInAs,
|
|
21
|
+
m as usersFeature,
|
|
22
|
+
y as usersRoutes
|
|
19
23
|
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ServiceAccount } from "../../modules/serviceaccount/entities";
|
|
2
|
+
/**
|
|
3
|
+
* *API keys*: the keys a service account signs in with: name, the start of the key, who made it and when, last use, expiry, with *New API
|
|
4
|
+
* key* (`iam.serviceaccount:manage`) and *Revoke* (`iam.serviceaccount:revoke`). Only the key's fingerprint is stored: a new key's secret is
|
|
5
|
+
* shown once (`CreatedApiKeyDialog`) and never again; to replace one, make a new key, move the system over, then revoke the old.
|
|
6
|
+
*/
|
|
7
|
+
type __VLS_Props = {
|
|
8
|
+
account: ServiceAccount;
|
|
9
|
+
};
|
|
10
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {
|
|
11
|
+
reload: () => Promise<void>;
|
|
12
|
+
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
13
|
+
changed: () => any;
|
|
14
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
15
|
+
onChanged?: (() => any) | undefined;
|
|
16
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
17
|
+
export default _default;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { CreatedApiKey, ServiceAccount } from "../../modules/serviceaccount/entities";
|
|
2
|
+
/**
|
|
3
|
+
* *The API key is created*: the secret, shown once, with *Copy* and the plain fact that it will not be shown again. It lives only in
|
|
4
|
+
* this sheet's state and is dropped when the sheet closes; only the primary button closes it, so a stray tap outside does not lose
|
|
5
|
+
* what nothing can bring back.
|
|
6
|
+
*/
|
|
7
|
+
type __VLS_Props = {
|
|
8
|
+
account: ServiceAccount;
|
|
9
|
+
};
|
|
10
|
+
declare function show(next: CreatedApiKey): void;
|
|
11
|
+
declare function copySecret(): Promise<void>;
|
|
12
|
+
declare function done(): void;
|
|
13
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {
|
|
14
|
+
show: typeof show;
|
|
15
|
+
done: typeof done;
|
|
16
|
+
copySecret: typeof copySecret;
|
|
17
|
+
created: import("vue").Ref<{
|
|
18
|
+
key: {
|
|
19
|
+
id: number;
|
|
20
|
+
name: string;
|
|
21
|
+
prefix: string;
|
|
22
|
+
created_by: {
|
|
23
|
+
id: number;
|
|
24
|
+
name: string;
|
|
25
|
+
};
|
|
26
|
+
created_at: string;
|
|
27
|
+
last_used_at: string | null;
|
|
28
|
+
expires_at: string | null;
|
|
29
|
+
revoked_at: string | null;
|
|
30
|
+
};
|
|
31
|
+
secret: string;
|
|
32
|
+
} | null, CreatedApiKey | {
|
|
33
|
+
key: {
|
|
34
|
+
id: number;
|
|
35
|
+
name: string;
|
|
36
|
+
prefix: string;
|
|
37
|
+
created_by: {
|
|
38
|
+
id: number;
|
|
39
|
+
name: string;
|
|
40
|
+
};
|
|
41
|
+
created_at: string;
|
|
42
|
+
last_used_at: string | null;
|
|
43
|
+
expires_at: string | null;
|
|
44
|
+
revoked_at: string | null;
|
|
45
|
+
};
|
|
46
|
+
secret: string;
|
|
47
|
+
} | null>;
|
|
48
|
+
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
49
|
+
done: () => any;
|
|
50
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
51
|
+
onDone?: (() => any) | undefined;
|
|
52
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
53
|
+
export default _default;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { CreatedApiKey, ServiceAccount } from "../../modules/serviceaccount/entities";
|
|
2
|
+
/**
|
|
3
|
+
* *New API key*: a name (where the key is used) and an optional expiry. The key is made on the server and its secret comes back once,
|
|
4
|
+
* which the page then shows in `CreatedApiKeyDialog`.
|
|
5
|
+
*/
|
|
6
|
+
type __VLS_Props = {
|
|
7
|
+
account: ServiceAccount;
|
|
8
|
+
};
|
|
9
|
+
type Draft = {
|
|
10
|
+
name: string;
|
|
11
|
+
expires: string | null;
|
|
12
|
+
};
|
|
13
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {
|
|
14
|
+
show: () => void;
|
|
15
|
+
form: import("../../form").Form<Draft, {
|
|
16
|
+
name: string;
|
|
17
|
+
expires_at?: string | null | undefined;
|
|
18
|
+
}>;
|
|
19
|
+
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
20
|
+
created: (created: CreatedApiKey) => any;
|
|
21
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
22
|
+
onCreated?: ((created: CreatedApiKey) => any) | undefined;
|
|
23
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
24
|
+
export default _default;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ServiceAccount } from "../../modules/serviceaccount/entities";
|
|
2
|
+
type Draft = {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
tenant_id: number | null;
|
|
6
|
+
owner_id: number | null;
|
|
7
|
+
};
|
|
8
|
+
declare function show(row?: ServiceAccount): void;
|
|
9
|
+
declare const _default: import("vue").DefineComponent<{}, {
|
|
10
|
+
show: typeof show;
|
|
11
|
+
form: import("../../form").Form<Draft, {
|
|
12
|
+
name: string;
|
|
13
|
+
description: string;
|
|
14
|
+
owner_id: number;
|
|
15
|
+
tenant_id?: number | null | undefined;
|
|
16
|
+
}>;
|
|
17
|
+
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
18
|
+
saved: (account: ServiceAccount) => any;
|
|
19
|
+
}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{
|
|
20
|
+
onSaved?: ((account: ServiceAccount) => any) | undefined;
|
|
21
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
22
|
+
export default _default;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
export default _default;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
export default _default;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { HttpClient } from "../../client";
|
|
2
|
+
import type { ServiceAccount, ApiKey, CreatedApiKey } from "../../modules/serviceaccount/entities";
|
|
3
|
+
import type { KeyRequest, SaveInput } from "../../modules/serviceaccount/schemas";
|
|
4
|
+
type Options = {
|
|
5
|
+
readonly signal?: AbortSignal;
|
|
6
|
+
};
|
|
7
|
+
/** go-core's service account routes as calls; `data` of each answer already read. A change takes the `Idempotency-Key` of its attempt. */
|
|
8
|
+
export declare function createServiceAccountsApi(http: HttpClient): {
|
|
9
|
+
list: (options?: Options) => Promise<readonly ServiceAccount[]>;
|
|
10
|
+
show: (id: number, options?: Options) => Promise<ServiceAccount>;
|
|
11
|
+
create: (input: SaveInput, idempotencyKey: string) => Promise<ServiceAccount>;
|
|
12
|
+
update: (id: number, input: SaveInput, idempotencyKey: string) => Promise<ServiceAccount>;
|
|
13
|
+
deactivate: (id: number) => Promise<ServiceAccount>;
|
|
14
|
+
keys: (id: number, options?: Options) => Promise<readonly ApiKey[]>;
|
|
15
|
+
/** The secret is in the answer, and only there. */
|
|
16
|
+
createKey: (id: number, input: KeyRequest, idempotencyKey: string) => Promise<CreatedApiKey>;
|
|
17
|
+
revokeKey: (id: number, keyID: number) => Promise<void>;
|
|
18
|
+
/** The people who can answer for an account: the active ones of the users list (its largest page). */
|
|
19
|
+
people: (options?: Options) => Promise<readonly {
|
|
20
|
+
readonly id: number;
|
|
21
|
+
readonly name: string;
|
|
22
|
+
}[]>;
|
|
23
|
+
};
|
|
24
|
+
export type ServiceAccountsApi = ReturnType<typeof createServiceAccountsApi>;
|
|
25
|
+
/** The calls, over the platform's client; call it in `setup`. */
|
|
26
|
+
export declare const useServiceAccountsApi: () => ServiceAccountsApi;
|
|
27
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AccountTenant } from "../../modules/serviceaccount/entities";
|
|
2
|
+
/** What an application whose accounts are confined to tenants (go-core's `serviceaccount.Tenants`) tells the screens. */
|
|
3
|
+
export interface ServiceAccountTenants {
|
|
4
|
+
/** The i18n key that names a tenant in the application's words (`serviceaccounts.tenant` -> "Dealer"): a column, a field, a row. */
|
|
5
|
+
readonly labelKey: string;
|
|
6
|
+
/** The tenants an account can be confined to, among the ones the signed-in person may choose (the server refuses the others). */
|
|
7
|
+
readonly options: (signal: AbortSignal) => Promise<readonly AccountTenant[]>;
|
|
8
|
+
}
|
|
9
|
+
/** What the screens of `serviceAccountsFeature` need from the feature that installed them. */
|
|
10
|
+
export interface ServiceAccountsContext {
|
|
11
|
+
/** `null`: the application has no tenants, accounts belong to the organization and no tenant is shown or asked. */
|
|
12
|
+
readonly tenants: ServiceAccountTenants | null;
|
|
13
|
+
}
|
|
14
|
+
export declare const serviceAccountsContextKey: import("vue").InjectionKey<ServiceAccountsContext>, useServiceAccountsContext: () => ServiceAccountsContext;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type Feature } from "../../app";
|
|
2
|
+
import type { Destination } from "../../router";
|
|
3
|
+
import { type ServiceAccountTenants } from "./context";
|
|
4
|
+
export interface ServiceAccountsFeatureOptions {
|
|
5
|
+
/** The tenants accounts are confined to (go-core's `serviceaccount.Tenants`): names the tenant and lists the ones to choose. Without it no tenant is shown or asked for. */
|
|
6
|
+
tenants?: ServiceAccountTenants;
|
|
7
|
+
/** The destination of the backend's menu that opens the list. Without it the application binds the list itself. */
|
|
8
|
+
destination?: Destination;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* The screens of go-core's service accounts, one feature to install: the list (`/iam/service-accounts`, route
|
|
12
|
+
* `serviceaccounts.index`) and an account's record (`serviceaccounts.record`) with its data, its access (the roles it holds,
|
|
13
|
+
* the same panel as a person's) and its API keys: a key is made in a sheet that shows its secret once, with *Copy*, and is revoked
|
|
14
|
+
* from its row. Every screen and action is behind the permission go-core checks for it (`iam.serviceaccount:view`, `manage`,
|
|
15
|
+
* `revoke`), so an application installs it for everyone and the server's catalogue decides who sees what. The server must have
|
|
16
|
+
* service accounts on (`identity.WithServiceAccounts`).
|
|
17
|
+
*
|
|
18
|
+
* An account has no password and cannot sign in; it calls the API with an `X-API-Key` header. It needs `accessFeature()` next to
|
|
19
|
+
* it: the roles of an account are the access screens'.
|
|
20
|
+
*
|
|
21
|
+
* createApplication({ platform, shell: backofficeShell(), features: [identityFeature(), accessFeature({ catalogue }), serviceAccountsFeature({ destination: "serviceaccounts" })] })
|
|
22
|
+
*/
|
|
23
|
+
export declare function serviceAccountsFeature(options?: ServiceAccountsFeatureOptions): Feature;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** A key's optional expiry: the end of the chosen day (`YYYY-MM-DD`), as the moment the API takes; none for no day. */
|
|
2
|
+
export declare function expiryOf(day: string | null | undefined): string | null;
|
|
3
|
+
/** Today as the date field takes it (`YYYY-MM-DD`), on the clock of the person. */
|
|
4
|
+
export declare function todayOf(now?: Date): string;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { FormFailureKind } from "../../form";
|
|
2
|
+
/**
|
|
3
|
+
* What the forms of these screens speak: go-core's refusals as `useServerMessages` words them, and a refused delegation
|
|
4
|
+
* (`authz.*`: the actor may not give that role, the account's tenant is elsewhere) in the access screens' own words. Spread
|
|
5
|
+
* into `useCommand` / `useRecordDialog`; `sentence` is the same for a toast. Call it in `setup`.
|
|
6
|
+
*/
|
|
7
|
+
export declare function useAccountMessages(): {
|
|
8
|
+
failureMessage: (kind: FormFailureKind, error: unknown) => string | undefined;
|
|
9
|
+
sentence: (error: unknown, fallback?: string) => string;
|
|
10
|
+
describeFieldError: (message: string) => string;
|
|
11
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { RouteRecordRaw } from "vue-router";
|
|
2
|
+
/**
|
|
3
|
+
* The routes of `serviceAccountsFeature`: typed targets for links (`serviceAccountsRoutes.index`,
|
|
4
|
+
* `serviceAccountsRoutes.record({ id })`), and the records the feature installs. The names and paths are fixed, so a
|
|
5
|
+
* link or a menu binding of the application can name them. The record opens on `?tab=general | access | keys`.
|
|
6
|
+
*/
|
|
7
|
+
export interface ServiceAccountsRoutes {
|
|
8
|
+
/** The records `serviceAccountsFeature` installs. */
|
|
9
|
+
readonly records: readonly RouteRecordRaw[];
|
|
10
|
+
readonly index: {
|
|
11
|
+
readonly name: "serviceaccounts.index";
|
|
12
|
+
};
|
|
13
|
+
readonly record: (params: {
|
|
14
|
+
id: string | number;
|
|
15
|
+
}) => {
|
|
16
|
+
readonly name: "serviceaccounts.record";
|
|
17
|
+
readonly params: {
|
|
18
|
+
id: string | number;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export declare const serviceAccountsRoutes: ServiceAccountsRoutes;
|