Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 14 additions & 4 deletions src/frontend/src/lib/api/mission-control.deprecated.api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,19 @@ import type { MissionControlId } from '$lib/types/mission-control';
import { nonNullish, toNullable } from '@dfinity/utils';
import { Principal } from '@icp-sdk/core/principal';

const toSetController = ({
profile
/**
* @deprecated TODO: to be remove - backwards compatibility
*/
const toSetController004 = ({
metadata
}: Omit<AddAccessKeyParams, 'accessKeyId'>): MissionControlDid004.SetController => ({
metadata: nonNullish(profile) && profile !== '' ? [['profile', profile]] : [],
metadata:
nonNullish(metadata) &&
'profile' in metadata &&
nonNullish(metadata.profile) &&
metadata.profile !== ''
? [['profile', metadata.profile]]
: [],
expires_at: toNullable<bigint>(undefined)
});

Expand All @@ -30,9 +39,10 @@ export const setMissionControlController004 = async ({
} & AddAccessKeyParams) => {
try {
const actor = await getMissionControlActor004({ missionControlId, identity });

await actor.set_mission_control_controllers(
[Principal.from(accessKeyId)],
toSetController(rest)
toSetController004(rest)
);
} catch (err: unknown) {
console.error('setMissionControlController004:', missionControlId.toText());
Expand Down
19 changes: 12 additions & 7 deletions src/frontend/src/lib/components/access-keys/AccessKeys.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -69,13 +69,15 @@
<th class="tools"></th>
<th class="controller"> {$i18n.controllers.title} </th>
<th class="profile"> {$i18n.controllers.profile} </th>
<th class="type"> {$i18n.controllers.type} </th>
<th class="scope"> {$i18n.controllers.scope} </th>
</tr>
</thead>
<tbody>
{#each controllers as [controllerId, controller] (controllerId.toText())}
{@const dev = isDev(controllerId)}
{@const mic = isMissionControl(controllerId)}
{@const kind = controller?.kind}

<tr>
<td class="actions">
Expand All @@ -98,7 +100,7 @@
</td>

<td>
<Identifier identifier={controllerId.toText()} shorten={false} small={false} />
<Identifier identifier={controllerId.toText()} small={false} />
</td>

<td class="profile"
Expand All @@ -111,6 +113,14 @@
{/if}
</td>

<td class="type">
{nonNullish(kind) && 'emulator' in kind
? `👾 ${$i18n.emulator.emulator}`
: nonNullish(kind) && 'automation' in kind
? `🤖 ${$i18n.controllers.automation}`
: ''}
</td>

<td class="scope">
{#if nonNullish(controller)}
{#if 'Write' in controller.scope}
Expand Down Expand Up @@ -141,12 +151,7 @@
width: 48px;
}

.controller {
@include media.min-width(small) {
width: 60%;
}
}

.type,
.profile,
.scope {
display: none;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@

const { result } = await add({
accessKeyId,
profile: undefined,
scope
});

Expand Down
4 changes: 3 additions & 1 deletion src/frontend/src/lib/i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -798,7 +798,9 @@
},
"controllers": {
"title": "Access Keys",
"profile": "Profile / Type",
"type": "Type",
"automation": "Automation",
"profile": "Profile",
"scope": "Role",
"delete": "Delete an access key",
"info": "Information",
Expand Down
4 changes: 3 additions & 1 deletion src/frontend/src/lib/i18n/zh-cn.json
Original file line number Diff line number Diff line change
Expand Up @@ -800,7 +800,9 @@
},
"controllers": {
"title": "访问密钥",
"profile": "配置/类型",
"type": "类型",
"automation": "自动化",
"profile": "配置",
"scope": "权限",
"delete": "删除访问密钥",
"info": "信息",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ export const setAdminAccessKey = async ({
setAccessKeysFn,
attachFn,
canisterId,
profile,
metadata,
...rest
}: {
setAccessKeysFn: SetAccessKeysFn;
Expand All @@ -49,7 +49,7 @@ export const setAdminAccessKey = async ({
await setAccessKeysFn({
args: {
controller: toSetController({
profile,
metadata,
scope: 'admin'
}),
controllers: [controllerId]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export const addMissionControlAccessKey = async ({
missionControlId,
accessKeyId,
scope,
profile,
metadata,
...rest
}: {
missionControlId: MissionControlId;
Expand All @@ -33,7 +33,7 @@ export const addMissionControlAccessKey = async ({
missionControlId,
accessKeyId,
scope,
profile
metadata
});
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export const addOrbiterAccessKey = async ({
orbiterIds,
accessKeyId,
scope,
profile
metadata
}: {
orbiterIds: OrbiterId[];
identity: Identity;
Expand All @@ -29,7 +29,7 @@ export const addOrbiterAccessKey = async ({
identity,
orbiterIds,
accessKeyId,
profile
metadata
});
return;
}
Expand All @@ -38,7 +38,7 @@ export const addOrbiterAccessKey = async ({
identity,
orbiterIds,
accessKeyId,
profile,
metadata,
scope
});
};
Expand Down Expand Up @@ -79,7 +79,7 @@ const setOrbitersNonAdminAccessKey = async ({
orbiterIds,
accessKeyId,
identity,
profile,
metadata,
scope
}: {
orbiterIds: OrbiterId[];
Expand All @@ -90,7 +90,7 @@ const setOrbitersNonAdminAccessKey = async ({
await setOrbiterControllers({
args: {
controller: toSetController({
profile,
metadata,
scope: scope as AddAccessKeyScope // Safe case, the param is explicit to avoid passing admin to the function
}),
controllers: [Principal.from(accessKeyId)]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ export const addSatellitesAccessKey = async ({
satelliteIds: satelliteIdsParam,
accessKeyId,
scope,
profile
metadata
}: {
satelliteIds: Principal[];
identity: Identity;
Expand All @@ -32,7 +32,7 @@ export const addSatellitesAccessKey = async ({
identity,
satelliteIds,
accessKeyId,
profile
metadata
});
return;
}
Expand All @@ -41,7 +41,7 @@ export const addSatellitesAccessKey = async ({
identity,
satelliteIds,
accessKeyId,
profile,
metadata,
scope
});
};
Expand Down Expand Up @@ -118,7 +118,7 @@ const setSatellitesNonAdminAccessKey = async ({
satelliteIds,
accessKeyId,
identity,
profile,
metadata,
scope
}: {
satelliteIds: SatelliteId[];
Expand All @@ -129,7 +129,7 @@ const setSatellitesNonAdminAccessKey = async ({
await setSatelliteControllers({
args: {
controller: toSetController({
profile,
metadata,
scope: scope as AddAccessKeyScope // Safe case, the param is explicit to avoid passing admin to the function
}),
controllers: [Principal.from(accessKeyId)]
Expand Down
14 changes: 9 additions & 5 deletions src/frontend/src/lib/services/cli.services.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {
setMissionControlControllerForVersion,
setSatellitesControllerForVersion as setSatellitesControllerForVersionWithMctrl
} from '$lib/services/mission-control/mission-control.services';
import type { AddAccessKeyParams } from '$lib/types/access-keys';
import type { MissionControlId } from '$lib/types/mission-control';
import type { Option } from '$lib/types/utils';
import { bigintStringify } from '$lib/utils/number.utils';
Expand Down Expand Up @@ -50,6 +51,9 @@ export const setCliControllers = async ({
}
};

const toMetadata = (profile: Option<string>): Pick<AddAccessKeyParams, 'metadata'> =>
notEmptyString(profile) ? { metadata: { profile } } : {};

const setCliControllersWithoutMissionControl = async ({
controllerId,
profile,
Expand All @@ -63,7 +67,7 @@ const setCliControllersWithoutMissionControl = async ({
addSatellitesAdminAccessKey({
accessKeyId: controllerId,
satelliteIds: selectedSatellites.map((s) => s[0]),
profile,
...toMetadata(profile),
identity
})
]
Expand All @@ -73,7 +77,7 @@ const setCliControllersWithoutMissionControl = async ({
addOrbitersAdminAccessKey({
accessKeyId: controllerId,
orbiterIds: selectedOrbiters.map((s) => s[0]),
profile,
...toMetadata(profile),
identity
})
]
Expand All @@ -96,7 +100,7 @@ const setCliControllersWithMissionControl = async ({
setMissionControlControllerForVersion({
missionControlId,
accessKeyId: controllerId,
profile,
...toMetadata(profile),
scope: 'admin',
identity
})
Expand All @@ -108,7 +112,7 @@ const setCliControllersWithMissionControl = async ({
missionControlId,
accessKeyId: controllerId,
satelliteIds: selectedSatellites.map((s) => s[0]),
profile,
...toMetadata(profile),
scope: 'admin',
identity
})
Expand All @@ -120,7 +124,7 @@ const setCliControllersWithMissionControl = async ({
missionControlId,
accessKeyId: controllerId,
orbiterIds: selectedOrbiters.map((s) => s[0]),
profile,
...toMetadata(profile),
scope: 'admin',
identity
})
Expand Down
4 changes: 3 additions & 1 deletion src/frontend/src/lib/services/emulator.services.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,9 @@ const unsafeSetEmulatorController = async ({

await addController({
accessKeyId: mainIdentity,
profile: `👾 ${get(i18n).emulator.emulator}`
metadata: {
kind: 'emulator'
}
});
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,7 @@ import type { Identity } from '@icp-sdk/core/agent';
import type { Principal } from '@icp-sdk/core/principal';
import { get } from 'svelte/store';

const CONTROLLER_PARAMS: Omit<AddAdminAccessKeyParams, 'accessKeyId'> = {
profile: undefined
};
const CONTROLLER_PARAMS: Omit<AddAdminAccessKeyParams, 'accessKeyId'> = {};

export class AttachToMissionControlError extends Error {
// eslint-disable-next-line local-rules/prefer-object-params
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ import { get } from 'svelte/store';
export const setMissionControlControllerForVersion = async ({
missionControlId,
accessKeyId,
profile,
metadata,
identity
}: {
missionControlId: MissionControlId;
Expand All @@ -70,7 +70,7 @@ export const setMissionControlControllerForVersion = async ({
await missionControlController({
missionControlId,
accessKeyId,
profile,
metadata,
scope: 'admin',
identity
});
Expand All @@ -80,7 +80,7 @@ export const setSatellitesControllerForVersion = async ({
missionControlId,
satelliteIds,
accessKeyId,
profile,
metadata,
identity
}: {
missionControlId: MissionControlId;
Expand All @@ -99,7 +99,7 @@ export const setSatellitesControllerForVersion = async ({
satelliteIds: setSatelliteIds,
missionControlId,
accessKeyId,
profile,
metadata,
scope: 'admin',
identity
})
Expand All @@ -111,7 +111,7 @@ export const setSatellitesControllerForVersion = async ({
satelliteIds: addSatellitesIds,
missionControlId,
accessKeyId,
profile,
metadata,
scope: 'admin',
identity
})
Expand Down
7 changes: 5 additions & 2 deletions src/frontend/src/lib/types/access-keys.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
import type { MissionControlId } from '$lib/types/mission-control';
import type { Option } from '$lib/types/utils';
import type { Identity } from '@icp-sdk/core/agent';
import type { Principal } from '@icp-sdk/core/principal';

export type AddAccessKeyScope = 'write' | 'admin' | 'submit';

export type AddAccessKeyKind = 'automation' | 'emulator';

export type AddAccessKeyMetadataParams = { profile: string } | { kind: AddAccessKeyKind };

export interface AddAccessKeyParams {
accessKeyId: string | Principal;
profile: Option<string>;
metadata?: AddAccessKeyMetadataParams;
scope: AddAccessKeyScope;
}

Expand Down
Loading