diff --git a/package-lock.json b/package-lock.json index 22defd4196..8a0b03c113 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,7 +45,7 @@ "@junobuild/config": "^2.10.0", "@junobuild/config-loader": "^0.4.7", "@junobuild/errors": "^0.2.1", - "@junobuild/functions": "^0.5.5", + "@junobuild/functions": "^0.5.5-next-2026-02-04", "@ltd/j-toml": "^1.38.0", "@playwright/test": "^1.57.0", "@sveltejs/adapter-static": "^3.0.10", @@ -1837,15 +1837,15 @@ "license": "MIT" }, "node_modules/@junobuild/functions": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@junobuild/functions/-/functions-0.5.5.tgz", - "integrity": "sha512-eIi3EJ1aLqfeupG1cE1uDWRKS1nWzY1VIEMJc7jeWkPu/5lx/42Qc29ogD5oqGXQXCizG1xyLep8mtvwvDZfsA==", + "version": "0.5.5-next-2026-02-04", + "resolved": "https://registry.npmjs.org/@junobuild/functions/-/functions-0.5.5-next-2026-02-04.tgz", + "integrity": "sha512-gpH/RuSyFqwBrcS6yAZ/aN6KFTb/D3JyFDwiSy8a9n0bbJk9zGDF28jK/2zUgshWfK9aMhAT7aQnCDDUQBjwnw==", "dev": true, "license": "MIT", "peerDependencies": { - "@dfinity/utils": "^4.1", - "@icp-sdk/core": "^5", - "zod": "^4" + "@dfinity/utils": "*", + "@icp-sdk/core": "*", + "zod": "*" } }, "node_modules/@junobuild/ic-client": { diff --git a/package.json b/package.json index e25ef68b44..f00306ad54 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "@junobuild/config": "^2.10.0", "@junobuild/config-loader": "^0.4.7", "@junobuild/errors": "^0.2.1", - "@junobuild/functions": "^0.5.5", + "@junobuild/functions": "^0.5.5-next-2026-02-04", "@ltd/j-toml": "^1.38.0", "@playwright/test": "^1.57.0", "@sveltejs/adapter-static": "^3.0.10", diff --git a/src/console/console.did b/src/console/console.did index 40e2883763..7e0d216c08 100644 --- a/src/console/console.did +++ b/src/console/console.did @@ -73,10 +73,12 @@ type ConfigMaxMemorySize = record { stable : opt nat64; heap : opt nat64 }; type Controller = record { updated_at : nat64; metadata : vec record { text; text }; + kind : opt ControllerKind; created_at : nat64; scope : ControllerScope; expires_at : opt nat64; }; +type ControllerKind = variant { Emulator; Automation }; type ControllerScope = variant { Write; Admin; Submit }; type CreateMissionControlArgs = record { subnet_id : opt principal }; type CreateOrbiterArgs = record { @@ -314,6 +316,7 @@ type SetAuthenticationConfig = record { }; type SetController = record { metadata : vec record { text; text }; + kind : opt ControllerKind; scope : ControllerScope; expires_at : opt nat64; }; diff --git a/src/declarations/_factory.ts b/src/declarations/_factory.ts index c2f9e4aa8a..e3b0ee7f0d 100644 --- a/src/declarations/_factory.ts +++ b/src/declarations/_factory.ts @@ -20,6 +20,7 @@ import { idlFactory as idlFactorySatellite0021 } from '$declarations/deprecated/ import { idlFactory as idlFactorySatellite0022 } from '$declarations/deprecated/satellite-0-0-22.factory.did'; import { idlFactory as idlFactorySatellite008 } from '$declarations/deprecated/satellite-0-0-8.factory.did'; import { idlFactory as idlFactorySatellite009 } from '$declarations/deprecated/satellite-0-0-9.factory.did'; +import { idlFactory as idlFactorySatellite016 } from '$declarations/deprecated/satellite-0-1-6.factory.did'; import { idlFactory as idlFactoryCertifiedIC } from '$declarations/ic-management/ic-management.factory.certified.did'; import { idlFactory as idlFactoryIC } from '$declarations/ic-management/ic-management.factory.did'; import { idlFactory as idlFactoryMissionControl } from '$declarations/mission_control/mission_control.factory.did'; @@ -49,6 +50,7 @@ import type { _SERVICE as SatelliteActor0021 } from '$declarations/deprecated/sa import type { _SERVICE as SatelliteActor0022 } from '$declarations/deprecated/satellite-0-0-22.did'; import type { _SERVICE as SatelliteActor008 } from '$declarations/deprecated/satellite-0-0-8.did'; import type { _SERVICE as SatelliteActor009 } from '$declarations/deprecated/satellite-0-0-9.did'; +import type { _SERVICE as SatelliteActor016 } from '$declarations/deprecated/satellite-0-1-6.did'; import type { _SERVICE as ICActor } from '$declarations/ic-management/ic-management.did'; import type { _SERVICE as MissionControlActor } from '$declarations/mission_control/mission_control.did'; import type { _SERVICE as ObservatoryActor } from '$declarations/observatory/observatory.did'; @@ -85,6 +87,7 @@ export { idlFactorySatellite0022, idlFactorySatellite008, idlFactorySatellite009, + idlFactorySatellite016, idlFactorySputnik, type ConsoleActor, type ConsoleActor0014, @@ -112,5 +115,6 @@ export { type SatelliteActor0022, type SatelliteActor008, type SatelliteActor009, + type SatelliteActor016, type SputnikActor }; diff --git a/src/declarations/_types.ts b/src/declarations/_types.ts index 7a342c7a39..34e129f725 100644 --- a/src/declarations/_types.ts +++ b/src/declarations/_types.ts @@ -7,9 +7,11 @@ import type * as ObservatoryDid040 from '$declarations/deprecated/observatory-0- import type * as OrbiterDid006 from '$declarations/deprecated/orbiter-0-0-6.did'; import type * as OrbiterDid007 from '$declarations/deprecated/orbiter-0-0-7.did'; import type * as OrbiterDid008 from '$declarations/deprecated/orbiter-0-0-8.did'; +import type * as OrbiterDid020 from '$declarations/deprecated/orbiter-0-2-0.did'; import type * as SatelliteDid0016 from '$declarations/deprecated/satellite-0-0-16.did'; import type * as SatelliteDid0017 from '$declarations/deprecated/satellite-0-0-17.did'; import type * as SatelliteDid008 from '$declarations/deprecated/satellite-0-0-8.did'; +import type * as SatelliteDid016 from '$declarations/deprecated/satellite-0-1-6.did'; import type * as ICDid from '$declarations/ic-management/ic-management.did'; import type * as MissionControlDid from '$declarations/mission_control/mission_control.did'; import type * as ObservatoryDid from '$declarations/observatory/observatory.did'; @@ -31,9 +33,11 @@ export type { OrbiterDid006, OrbiterDid007, OrbiterDid008, + OrbiterDid020, SatelliteDid, SatelliteDid0016, SatelliteDid0017, SatelliteDid008, + SatelliteDid016, SputnikDid }; diff --git a/src/declarations/console/console.did.d.ts b/src/declarations/console/console.did.d.ts index e4bc9e278f..3c7686e3e3 100644 --- a/src/declarations/console/console.did.d.ts +++ b/src/declarations/console/console.did.d.ts @@ -99,10 +99,12 @@ export interface ConfigMaxMemorySize { export interface Controller { updated_at: bigint; metadata: Array<[string, string]>; + kind: [] | [ControllerKind]; created_at: bigint; scope: ControllerScope; expires_at: [] | [bigint]; } +export type ControllerKind = { Emulator: null } | { Automation: null }; export type ControllerScope = { Write: null } | { Admin: null } | { Submit: null }; export interface CreateMissionControlArgs { subnet_id: [] | [Principal]; @@ -377,6 +379,7 @@ export interface SetAuthenticationConfig { } export interface SetController { metadata: Array<[string, string]>; + kind: [] | [ControllerKind]; scope: ControllerScope; expires_at: [] | [bigint]; } diff --git a/src/declarations/console/console.factory.certified.did.js b/src/declarations/console/console.factory.certified.did.js index 6991b4bc2a..34f064b66d 100644 --- a/src/declarations/console/console.factory.certified.did.js +++ b/src/declarations/console/console.factory.certified.did.js @@ -364,6 +364,10 @@ export const idlFactory = ({ IDL }) => { items: IDL.Vec(IDL.Tuple(IDL.Text, AssetNoContent)), items_length: IDL.Nat64 }); + const ControllerKind = IDL.Variant({ + Emulator: IDL.Null, + Automation: IDL.Null + }); const ControllerScope = IDL.Variant({ Write: IDL.Null, Admin: IDL.Null, @@ -372,6 +376,7 @@ export const idlFactory = ({ IDL }) => { const Controller = IDL.Record({ updated_at: IDL.Nat64, metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), created_at: IDL.Nat64, scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) @@ -452,6 +457,7 @@ export const idlFactory = ({ IDL }) => { }); const SetController = IDL.Record({ metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) }); diff --git a/src/declarations/console/console.factory.did.js b/src/declarations/console/console.factory.did.js index 7235157e23..3df79d40aa 100644 --- a/src/declarations/console/console.factory.did.js +++ b/src/declarations/console/console.factory.did.js @@ -364,6 +364,10 @@ export const idlFactory = ({ IDL }) => { items: IDL.Vec(IDL.Tuple(IDL.Text, AssetNoContent)), items_length: IDL.Nat64 }); + const ControllerKind = IDL.Variant({ + Emulator: IDL.Null, + Automation: IDL.Null + }); const ControllerScope = IDL.Variant({ Write: IDL.Null, Admin: IDL.Null, @@ -372,6 +376,7 @@ export const idlFactory = ({ IDL }) => { const Controller = IDL.Record({ updated_at: IDL.Nat64, metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), created_at: IDL.Nat64, scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) @@ -452,6 +457,7 @@ export const idlFactory = ({ IDL }) => { }); const SetController = IDL.Record({ metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) }); diff --git a/src/declarations/console/console.factory.did.mjs b/src/declarations/console/console.factory.did.mjs index 7235157e23..3df79d40aa 100644 --- a/src/declarations/console/console.factory.did.mjs +++ b/src/declarations/console/console.factory.did.mjs @@ -364,6 +364,10 @@ export const idlFactory = ({ IDL }) => { items: IDL.Vec(IDL.Tuple(IDL.Text, AssetNoContent)), items_length: IDL.Nat64 }); + const ControllerKind = IDL.Variant({ + Emulator: IDL.Null, + Automation: IDL.Null + }); const ControllerScope = IDL.Variant({ Write: IDL.Null, Admin: IDL.Null, @@ -372,6 +376,7 @@ export const idlFactory = ({ IDL }) => { const Controller = IDL.Record({ updated_at: IDL.Nat64, metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), created_at: IDL.Nat64, scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) @@ -452,6 +457,7 @@ export const idlFactory = ({ IDL }) => { }); const SetController = IDL.Record({ metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) }); diff --git a/src/declarations/deprecated/satellite-0-1-6.did.d.ts b/src/declarations/deprecated/satellite-0-1-6.did.d.ts new file mode 100644 index 0000000000..a19e08deef --- /dev/null +++ b/src/declarations/deprecated/satellite-0-1-6.did.d.ts @@ -0,0 +1,511 @@ +/* eslint-disable */ + +// @ts-nocheck + +// This file was automatically generated by @icp-sdk/bindgen@0.2.1. +// You should NOT make any changes in this file as it will be overwritten. +// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified. + +import type { ActorMethod } from '@icp-sdk/core/agent'; +import type { IDL } from '@icp-sdk/core/candid'; +import type { Principal } from '@icp-sdk/core/principal'; + +export interface AssetEncodingNoContent { + modified: bigint; + sha256: Uint8Array; + total_length: bigint; +} +export interface AssetKey { + token: [] | [string]; + collection: string; + owner: Principal; + name: string; + description: [] | [string]; + full_path: string; +} +export interface AssetNoContent { + key: AssetKey; + updated_at: bigint; + encodings: Array<[string, AssetEncodingNoContent]>; + headers: Array<[string, string]>; + created_at: bigint; + version: [] | [bigint]; +} +export interface AssetsUpgradeOptions { + clear_existing_assets: [] | [boolean]; +} +export type AuthenticateResultResponse = { Ok: Authentication } | { Err: AuthenticationError }; +export interface Authentication { + doc: Doc; + delegation: PreparedDelegation; +} +export type AuthenticationArgs = { OpenId: OpenIdPrepareDelegationArgs }; +export interface AuthenticationConfig { + updated_at: [] | [bigint]; + openid: [] | [AuthenticationConfigOpenId]; + created_at: [] | [bigint]; + version: [] | [bigint]; + internet_identity: [] | [AuthenticationConfigInternetIdentity]; + rules: [] | [AuthenticationRules]; +} +export interface AuthenticationConfigInternetIdentity { + derivation_origin: [] | [string]; + external_alternative_origins: [] | [Array]; +} +export interface AuthenticationConfigOpenId { + observatory_id: [] | [Principal]; + providers: Array<[OpenIdProvider, OpenIdProviderConfig]>; +} +export type AuthenticationError = + | { + PrepareDelegation: PrepareDelegationError; + } + | { RegisterUser: string }; +export interface AuthenticationRules { + allowed_callers: Array; +} +export type CollectionType = { Db: null } | { Storage: null }; +export interface CommitBatch { + batch_id: bigint; + headers: Array<[string, string]>; + chunk_ids: Array; +} +export interface CommitProposal { + sha256: Uint8Array; + proposal_id: bigint; +} +export interface Config { + db: [] | [DbConfig]; + authentication: [] | [AuthenticationConfig]; + storage: StorageConfig; +} +export interface ConfigMaxMemorySize { + stable: [] | [bigint]; + heap: [] | [bigint]; +} +export interface Controller { + updated_at: bigint; + metadata: Array<[string, string]>; + created_at: bigint; + scope: ControllerScope; + expires_at: [] | [bigint]; +} +export type ControllerScope = { Write: null } | { Admin: null } | { Submit: null }; +export interface CustomDomain { + updated_at: bigint; + created_at: bigint; + version: [] | [bigint]; + bn_id: [] | [string]; +} +export interface DbConfig { + updated_at: [] | [bigint]; + created_at: [] | [bigint]; + version: [] | [bigint]; + max_memory_size: [] | [ConfigMaxMemorySize]; +} +export interface DelDoc { + version: [] | [bigint]; +} +export interface DelRule { + version: [] | [bigint]; +} +export interface Delegation { + pubkey: Uint8Array; + targets: [] | [Array]; + expiration: bigint; +} +export interface DeleteControllersArgs { + controllers: Array; +} +export interface DeleteProposalAssets { + proposal_ids: Array; +} +export interface DepositCyclesArgs { + cycles: bigint; + destination_id: Principal; +} +export interface Doc { + updated_at: bigint; + owner: Principal; + data: Uint8Array; + description: [] | [string]; + created_at: bigint; + version: [] | [bigint]; +} +export type GetDelegationArgs = { OpenId: OpenIdGetDelegationArgs }; +export type GetDelegationError = + | { JwtFindProvider: JwtFindProviderError } + | { GetCachedJwks: null } + | { NoSuchDelegation: null } + | { JwtVerify: JwtVerifyError } + | { GetOrFetchJwks: GetOrRefreshJwksError } + | { DeriveSeedFailed: string }; +export type GetDelegationResultResponse = { Ok: SignedDelegation } | { Err: GetDelegationError }; +export type GetOrRefreshJwksError = + | { InvalidConfig: string } + | { MissingKid: null } + | { BadClaim: string } + | { KeyNotFoundCooldown: null } + | { CertificateNotFound: null } + | { BadSig: string } + | { MissingLastAttempt: string } + | { KeyNotFound: null } + | { FetchFailed: string }; +export interface HttpRequest { + url: string; + method: string; + body: Uint8Array; + headers: Array<[string, string]>; + certificate_version: [] | [number]; +} +export interface HttpResponse { + body: Uint8Array; + headers: Array<[string, string]>; + streaming_strategy: [] | [StreamingStrategy]; + status_code: number; +} +export interface InitAssetKey { + token: [] | [string]; + collection: string; + name: string; + description: [] | [string]; + encoding_type: [] | [string]; + full_path: string; +} +export interface InitSatelliteArgs { + controllers: Array; + storage: [] | [InitStorageArgs]; +} +export interface InitStorageArgs { + system_memory: [] | [Memory]; +} +export interface InitUploadResult { + batch_id: bigint; +} +export type JwtFindProviderError = + | { BadClaim: string } + | { BadSig: string } + | { NoMatchingProvider: null }; +export type JwtVerifyError = + | { WrongKeyType: null } + | { MissingKid: null } + | { BadClaim: string } + | { BadSig: string } + | { NoKeyForKid: null }; +export interface ListMatcher { + key: [] | [string]; + updated_at: [] | [TimestampMatcher]; + description: [] | [string]; + created_at: [] | [TimestampMatcher]; +} +export interface ListOrder { + field: ListOrderField; + desc: boolean; +} +export type ListOrderField = { UpdatedAt: null } | { Keys: null } | { CreatedAt: null }; +export interface ListPaginate { + start_after: [] | [string]; + limit: [] | [bigint]; +} +export interface ListParams { + order: [] | [ListOrder]; + owner: [] | [Principal]; + matcher: [] | [ListMatcher]; + paginate: [] | [ListPaginate]; +} +export interface ListProposalResults { + matches_length: bigint; + items: Array<[ProposalKey, Proposal]>; + items_length: bigint; +} +export interface ListProposalsOrder { + desc: boolean; +} +export interface ListProposalsPaginate { + start_after: [] | [bigint]; + limit: [] | [bigint]; +} +export interface ListProposalsParams { + order: [] | [ListProposalsOrder]; + paginate: [] | [ListProposalsPaginate]; +} +export interface ListResults { + matches_pages: [] | [bigint]; + matches_length: bigint; + items_page: [] | [bigint]; + items: Array<[string, AssetNoContent]>; + items_length: bigint; +} +export interface ListResults_1 { + matches_pages: [] | [bigint]; + matches_length: bigint; + items_page: [] | [bigint]; + items: Array<[string, Doc]>; + items_length: bigint; +} +export interface ListRulesMatcher { + include_system: boolean; +} +export interface ListRulesParams { + matcher: [] | [ListRulesMatcher]; +} +export interface ListRulesResults { + matches_length: bigint; + items: Array<[string, Rule]>; + items_length: bigint; +} +export type Memory = { Heap: null } | { Stable: null }; +export interface MemorySize { + stable: bigint; + heap: bigint; +} +export interface OpenIdGetDelegationArgs { + jwt: string; + session_key: Uint8Array; + salt: Uint8Array; + expiration: bigint; +} +export interface OpenIdPrepareDelegationArgs { + jwt: string; + session_key: Uint8Array; + salt: Uint8Array; +} +export type OpenIdProvider = { Google: null }; +export interface OpenIdProviderConfig { + delegation: [] | [OpenIdProviderDelegationConfig]; + client_id: string; +} +export interface OpenIdProviderDelegationConfig { + targets: [] | [Array]; + max_time_to_live: [] | [bigint]; +} +export type Permission = + | { Controllers: null } + | { Private: null } + | { Public: null } + | { Managed: null }; +export type PrepareDelegationError = + | { + JwtFindProvider: JwtFindProviderError; + } + | { GetCachedJwks: null } + | { JwtVerify: JwtVerifyError } + | { GetOrFetchJwks: GetOrRefreshJwksError } + | { DeriveSeedFailed: string }; +export interface PreparedDelegation { + user_key: Uint8Array; + expiration: bigint; +} +export interface Proposal { + status: ProposalStatus; + updated_at: bigint; + sha256: [] | [Uint8Array]; + executed_at: [] | [bigint]; + owner: Principal; + created_at: bigint; + version: [] | [bigint]; + proposal_type: ProposalType; +} +export interface ProposalKey { + proposal_id: bigint; +} +export type ProposalStatus = + | { Initialized: null } + | { Failed: null } + | { Open: null } + | { Rejected: null } + | { Executed: null } + | { Accepted: null }; +export type ProposalType = + | { AssetsUpgrade: AssetsUpgradeOptions } + | { SegmentsDeployment: SegmentsDeploymentOptions }; +export interface RateConfig { + max_tokens: bigint; + time_per_token_ns: bigint; +} +export interface Rule { + max_capacity: [] | [number]; + memory: [] | [Memory]; + updated_at: bigint; + max_size: [] | [bigint]; + read: Permission; + created_at: bigint; + version: [] | [bigint]; + mutable_permissions: [] | [boolean]; + rate_config: [] | [RateConfig]; + write: Permission; + max_changes_per_user: [] | [number]; +} +export interface SegmentsDeploymentOptions { + orbiter: [] | [string]; + mission_control_version: [] | [string]; + satellite_version: [] | [string]; +} +export interface SetAuthenticationConfig { + openid: [] | [AuthenticationConfigOpenId]; + version: [] | [bigint]; + internet_identity: [] | [AuthenticationConfigInternetIdentity]; + rules: [] | [AuthenticationRules]; +} +export interface SetController { + metadata: Array<[string, string]>; + scope: ControllerScope; + expires_at: [] | [bigint]; +} +export interface SetControllersArgs { + controller: SetController; + controllers: Array; +} +export interface SetDbConfig { + version: [] | [bigint]; + max_memory_size: [] | [ConfigMaxMemorySize]; +} +export interface SetDoc { + data: Uint8Array; + description: [] | [string]; + version: [] | [bigint]; +} +export interface SetRule { + max_capacity: [] | [number]; + memory: [] | [Memory]; + max_size: [] | [bigint]; + read: Permission; + version: [] | [bigint]; + mutable_permissions: [] | [boolean]; + rate_config: [] | [RateConfig]; + write: Permission; + max_changes_per_user: [] | [number]; +} +export interface SetStorageConfig { + iframe: [] | [StorageConfigIFrame]; + rewrites: Array<[string, string]>; + headers: Array<[string, Array<[string, string]>]>; + version: [] | [bigint]; + max_memory_size: [] | [ConfigMaxMemorySize]; + raw_access: [] | [StorageConfigRawAccess]; + redirects: [] | [Array<[string, StorageConfigRedirect]>]; +} +export interface SignedDelegation { + signature: Uint8Array; + delegation: Delegation; +} +export interface StorageConfig { + iframe: [] | [StorageConfigIFrame]; + updated_at: [] | [bigint]; + rewrites: Array<[string, string]>; + headers: Array<[string, Array<[string, string]>]>; + created_at: [] | [bigint]; + version: [] | [bigint]; + max_memory_size: [] | [ConfigMaxMemorySize]; + raw_access: [] | [StorageConfigRawAccess]; + redirects: [] | [Array<[string, StorageConfigRedirect]>]; +} +export type StorageConfigIFrame = { Deny: null } | { AllowAny: null } | { SameOrigin: null }; +export type StorageConfigRawAccess = { Deny: null } | { Allow: null }; +export interface StorageConfigRedirect { + status_code: number; + location: string; +} +export interface StreamingCallbackHttpResponse { + token: [] | [StreamingCallbackToken]; + body: Uint8Array; +} +export interface StreamingCallbackToken { + memory: Memory; + token: [] | [string]; + sha256: [] | [Uint8Array]; + headers: Array<[string, string]>; + index: bigint; + encoding_type: string; + full_path: string; +} +export type StreamingStrategy = { + Callback: { + token: StreamingCallbackToken; + callback: [Principal, string]; + }; +}; +export type TimestampMatcher = + | { Equal: bigint } + | { Between: [bigint, bigint] } + | { GreaterThan: bigint } + | { LessThan: bigint }; +export interface UploadChunk { + content: Uint8Array; + batch_id: bigint; + order_id: [] | [bigint]; +} +export interface UploadChunkResult { + chunk_id: bigint; +} +export interface _SERVICE { + authenticate: ActorMethod<[AuthenticationArgs], AuthenticateResultResponse>; + commit_asset_upload: ActorMethod<[CommitBatch], undefined>; + commit_proposal: ActorMethod<[CommitProposal], null>; + commit_proposal_asset_upload: ActorMethod<[CommitBatch], undefined>; + commit_proposal_many_assets_upload: ActorMethod<[Array], undefined>; + count_assets: ActorMethod<[string, ListParams], bigint>; + count_collection_assets: ActorMethod<[string], bigint>; + count_collection_docs: ActorMethod<[string], bigint>; + count_docs: ActorMethod<[string, ListParams], bigint>; + count_proposals: ActorMethod<[], bigint>; + del_asset: ActorMethod<[string, string], undefined>; + del_assets: ActorMethod<[string], undefined>; + del_controllers: ActorMethod<[DeleteControllersArgs], Array<[Principal, Controller]>>; + del_custom_domain: ActorMethod<[string], undefined>; + del_doc: ActorMethod<[string, string, DelDoc], undefined>; + del_docs: ActorMethod<[string], undefined>; + del_filtered_assets: ActorMethod<[string, ListParams], undefined>; + del_filtered_docs: ActorMethod<[string, ListParams], undefined>; + del_many_assets: ActorMethod<[Array<[string, string]>], undefined>; + del_many_docs: ActorMethod<[Array<[string, string, DelDoc]>], undefined>; + del_rule: ActorMethod<[CollectionType, string, DelRule], undefined>; + delete_proposal_assets: ActorMethod<[DeleteProposalAssets], undefined>; + deposit_cycles: ActorMethod<[DepositCyclesArgs], undefined>; + get_asset: ActorMethod<[string, string], [] | [AssetNoContent]>; + get_auth_config: ActorMethod<[], [] | [AuthenticationConfig]>; + get_config: ActorMethod<[], Config>; + get_db_config: ActorMethod<[], [] | [DbConfig]>; + get_delegation: ActorMethod<[GetDelegationArgs], GetDelegationResultResponse>; + get_doc: ActorMethod<[string, string], [] | [Doc]>; + get_many_assets: ActorMethod<[Array<[string, string]>], Array<[string, [] | [AssetNoContent]]>>; + get_many_docs: ActorMethod<[Array<[string, string]>], Array<[string, [] | [Doc]]>>; + get_proposal: ActorMethod<[bigint], [] | [Proposal]>; + get_rule: ActorMethod<[CollectionType, string], [] | [Rule]>; + get_storage_config: ActorMethod<[], StorageConfig>; + http_request: ActorMethod<[HttpRequest], HttpResponse>; + http_request_streaming_callback: ActorMethod< + [StreamingCallbackToken], + StreamingCallbackHttpResponse + >; + init_asset_upload: ActorMethod<[InitAssetKey], InitUploadResult>; + init_proposal: ActorMethod<[ProposalType], [bigint, Proposal]>; + init_proposal_asset_upload: ActorMethod<[InitAssetKey, bigint], InitUploadResult>; + init_proposal_many_assets_upload: ActorMethod< + [Array, bigint], + Array<[string, InitUploadResult]> + >; + list_assets: ActorMethod<[string, ListParams], ListResults>; + list_controllers: ActorMethod<[], Array<[Principal, Controller]>>; + list_custom_domains: ActorMethod<[], Array<[string, CustomDomain]>>; + list_docs: ActorMethod<[string, ListParams], ListResults_1>; + list_proposals: ActorMethod<[ListProposalsParams], ListProposalResults>; + list_rules: ActorMethod<[CollectionType, ListRulesParams], ListRulesResults>; + memory_size: ActorMethod<[], MemorySize>; + reject_proposal: ActorMethod<[CommitProposal], null>; + set_asset_token: ActorMethod<[string, string, [] | [string]], undefined>; + set_auth_config: ActorMethod<[SetAuthenticationConfig], AuthenticationConfig>; + set_controllers: ActorMethod<[SetControllersArgs], Array<[Principal, Controller]>>; + set_custom_domain: ActorMethod<[string, [] | [string]], undefined>; + set_db_config: ActorMethod<[SetDbConfig], DbConfig>; + set_doc: ActorMethod<[string, string, SetDoc], Doc>; + set_many_docs: ActorMethod<[Array<[string, string, SetDoc]>], Array<[string, Doc]>>; + set_rule: ActorMethod<[CollectionType, string, SetRule], Rule>; + set_storage_config: ActorMethod<[SetStorageConfig], StorageConfig>; + submit_proposal: ActorMethod<[bigint], [bigint, Proposal]>; + switch_storage_system_memory: ActorMethod<[], undefined>; + upload_asset_chunk: ActorMethod<[UploadChunk], UploadChunkResult>; + upload_proposal_asset_chunk: ActorMethod<[UploadChunk], UploadChunkResult>; +} +export declare const idlFactory: IDL.InterfaceFactory; +export declare const init: (args: { IDL: typeof IDL }) => IDL.Type[]; diff --git a/src/declarations/deprecated/satellite-0-1-6.factory.did.js b/src/declarations/deprecated/satellite-0-1-6.factory.did.js new file mode 100644 index 0000000000..9f1f909817 --- /dev/null +++ b/src/declarations/deprecated/satellite-0-1-6.factory.did.js @@ -0,0 +1,546 @@ +/* eslint-disable */ + +// @ts-nocheck + +// This file was automatically generated by @icp-sdk/bindgen@0.2.1. +// You should NOT make any changes in this file as it will be overwritten. +// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified. + +export const idlFactory = ({ IDL }) => { + const Memory = IDL.Variant({ Heap: IDL.Null, Stable: IDL.Null }); + const InitStorageArgs = IDL.Record({ system_memory: IDL.Opt(Memory) }); + const InitSatelliteArgs = IDL.Record({ + controllers: IDL.Vec(IDL.Principal), + storage: IDL.Opt(InitStorageArgs) + }); + const OpenIdPrepareDelegationArgs = IDL.Record({ + jwt: IDL.Text, + session_key: IDL.Vec(IDL.Nat8), + salt: IDL.Vec(IDL.Nat8) + }); + const AuthenticationArgs = IDL.Variant({ + OpenId: OpenIdPrepareDelegationArgs + }); + const Doc = IDL.Record({ + updated_at: IDL.Nat64, + owner: IDL.Principal, + data: IDL.Vec(IDL.Nat8), + description: IDL.Opt(IDL.Text), + created_at: IDL.Nat64, + version: IDL.Opt(IDL.Nat64) + }); + const PreparedDelegation = IDL.Record({ + user_key: IDL.Vec(IDL.Nat8), + expiration: IDL.Nat64 + }); + const Authentication = IDL.Record({ + doc: Doc, + delegation: PreparedDelegation + }); + const JwtFindProviderError = IDL.Variant({ + BadClaim: IDL.Text, + BadSig: IDL.Text, + NoMatchingProvider: IDL.Null + }); + const JwtVerifyError = IDL.Variant({ + WrongKeyType: IDL.Null, + MissingKid: IDL.Null, + BadClaim: IDL.Text, + BadSig: IDL.Text, + NoKeyForKid: IDL.Null + }); + const GetOrRefreshJwksError = IDL.Variant({ + InvalidConfig: IDL.Text, + MissingKid: IDL.Null, + BadClaim: IDL.Text, + KeyNotFoundCooldown: IDL.Null, + CertificateNotFound: IDL.Null, + BadSig: IDL.Text, + MissingLastAttempt: IDL.Text, + KeyNotFound: IDL.Null, + FetchFailed: IDL.Text + }); + const PrepareDelegationError = IDL.Variant({ + JwtFindProvider: JwtFindProviderError, + GetCachedJwks: IDL.Null, + JwtVerify: JwtVerifyError, + GetOrFetchJwks: GetOrRefreshJwksError, + DeriveSeedFailed: IDL.Text + }); + const AuthenticationError = IDL.Variant({ + PrepareDelegation: PrepareDelegationError, + RegisterUser: IDL.Text + }); + const AuthenticateResultResponse = IDL.Variant({ + Ok: Authentication, + Err: AuthenticationError + }); + const CommitBatch = IDL.Record({ + batch_id: IDL.Nat, + headers: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + chunk_ids: IDL.Vec(IDL.Nat) + }); + const CommitProposal = IDL.Record({ + sha256: IDL.Vec(IDL.Nat8), + proposal_id: IDL.Nat + }); + const ListOrderField = IDL.Variant({ + UpdatedAt: IDL.Null, + Keys: IDL.Null, + CreatedAt: IDL.Null + }); + const ListOrder = IDL.Record({ field: ListOrderField, desc: IDL.Bool }); + const TimestampMatcher = IDL.Variant({ + Equal: IDL.Nat64, + Between: IDL.Tuple(IDL.Nat64, IDL.Nat64), + GreaterThan: IDL.Nat64, + LessThan: IDL.Nat64 + }); + const ListMatcher = IDL.Record({ + key: IDL.Opt(IDL.Text), + updated_at: IDL.Opt(TimestampMatcher), + description: IDL.Opt(IDL.Text), + created_at: IDL.Opt(TimestampMatcher) + }); + const ListPaginate = IDL.Record({ + start_after: IDL.Opt(IDL.Text), + limit: IDL.Opt(IDL.Nat64) + }); + const ListParams = IDL.Record({ + order: IDL.Opt(ListOrder), + owner: IDL.Opt(IDL.Principal), + matcher: IDL.Opt(ListMatcher), + paginate: IDL.Opt(ListPaginate) + }); + const DeleteControllersArgs = IDL.Record({ + controllers: IDL.Vec(IDL.Principal) + }); + const ControllerScope = IDL.Variant({ + Write: IDL.Null, + Admin: IDL.Null, + Submit: IDL.Null + }); + const Controller = IDL.Record({ + updated_at: IDL.Nat64, + metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + created_at: IDL.Nat64, + scope: ControllerScope, + expires_at: IDL.Opt(IDL.Nat64) + }); + const DelDoc = IDL.Record({ version: IDL.Opt(IDL.Nat64) }); + const CollectionType = IDL.Variant({ Db: IDL.Null, Storage: IDL.Null }); + const DelRule = IDL.Record({ version: IDL.Opt(IDL.Nat64) }); + const DeleteProposalAssets = IDL.Record({ + proposal_ids: IDL.Vec(IDL.Nat) + }); + const DepositCyclesArgs = IDL.Record({ + cycles: IDL.Nat, + destination_id: IDL.Principal + }); + const AssetKey = IDL.Record({ + token: IDL.Opt(IDL.Text), + collection: IDL.Text, + owner: IDL.Principal, + name: IDL.Text, + description: IDL.Opt(IDL.Text), + full_path: IDL.Text + }); + const AssetEncodingNoContent = IDL.Record({ + modified: IDL.Nat64, + sha256: IDL.Vec(IDL.Nat8), + total_length: IDL.Nat + }); + const AssetNoContent = IDL.Record({ + key: AssetKey, + updated_at: IDL.Nat64, + encodings: IDL.Vec(IDL.Tuple(IDL.Text, AssetEncodingNoContent)), + headers: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + created_at: IDL.Nat64, + version: IDL.Opt(IDL.Nat64) + }); + const OpenIdProvider = IDL.Variant({ Google: IDL.Null }); + const OpenIdProviderDelegationConfig = IDL.Record({ + targets: IDL.Opt(IDL.Vec(IDL.Principal)), + max_time_to_live: IDL.Opt(IDL.Nat64) + }); + const OpenIdProviderConfig = IDL.Record({ + delegation: IDL.Opt(OpenIdProviderDelegationConfig), + client_id: IDL.Text + }); + const AuthenticationConfigOpenId = IDL.Record({ + observatory_id: IDL.Opt(IDL.Principal), + providers: IDL.Vec(IDL.Tuple(OpenIdProvider, OpenIdProviderConfig)) + }); + const AuthenticationConfigInternetIdentity = IDL.Record({ + derivation_origin: IDL.Opt(IDL.Text), + external_alternative_origins: IDL.Opt(IDL.Vec(IDL.Text)) + }); + const AuthenticationRules = IDL.Record({ + allowed_callers: IDL.Vec(IDL.Principal) + }); + const AuthenticationConfig = IDL.Record({ + updated_at: IDL.Opt(IDL.Nat64), + openid: IDL.Opt(AuthenticationConfigOpenId), + created_at: IDL.Opt(IDL.Nat64), + version: IDL.Opt(IDL.Nat64), + internet_identity: IDL.Opt(AuthenticationConfigInternetIdentity), + rules: IDL.Opt(AuthenticationRules) + }); + const ConfigMaxMemorySize = IDL.Record({ + stable: IDL.Opt(IDL.Nat64), + heap: IDL.Opt(IDL.Nat64) + }); + const DbConfig = IDL.Record({ + updated_at: IDL.Opt(IDL.Nat64), + created_at: IDL.Opt(IDL.Nat64), + version: IDL.Opt(IDL.Nat64), + max_memory_size: IDL.Opt(ConfigMaxMemorySize) + }); + const StorageConfigIFrame = IDL.Variant({ + Deny: IDL.Null, + AllowAny: IDL.Null, + SameOrigin: IDL.Null + }); + const StorageConfigRawAccess = IDL.Variant({ + Deny: IDL.Null, + Allow: IDL.Null + }); + const StorageConfigRedirect = IDL.Record({ + status_code: IDL.Nat16, + location: IDL.Text + }); + const StorageConfig = IDL.Record({ + iframe: IDL.Opt(StorageConfigIFrame), + updated_at: IDL.Opt(IDL.Nat64), + rewrites: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + headers: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)))), + created_at: IDL.Opt(IDL.Nat64), + version: IDL.Opt(IDL.Nat64), + max_memory_size: IDL.Opt(ConfigMaxMemorySize), + raw_access: IDL.Opt(StorageConfigRawAccess), + redirects: IDL.Opt(IDL.Vec(IDL.Tuple(IDL.Text, StorageConfigRedirect))) + }); + const Config = IDL.Record({ + db: IDL.Opt(DbConfig), + authentication: IDL.Opt(AuthenticationConfig), + storage: StorageConfig + }); + const OpenIdGetDelegationArgs = IDL.Record({ + jwt: IDL.Text, + session_key: IDL.Vec(IDL.Nat8), + salt: IDL.Vec(IDL.Nat8), + expiration: IDL.Nat64 + }); + const GetDelegationArgs = IDL.Variant({ OpenId: OpenIdGetDelegationArgs }); + const Delegation = IDL.Record({ + pubkey: IDL.Vec(IDL.Nat8), + targets: IDL.Opt(IDL.Vec(IDL.Principal)), + expiration: IDL.Nat64 + }); + const SignedDelegation = IDL.Record({ + signature: IDL.Vec(IDL.Nat8), + delegation: Delegation + }); + const GetDelegationError = IDL.Variant({ + JwtFindProvider: JwtFindProviderError, + GetCachedJwks: IDL.Null, + NoSuchDelegation: IDL.Null, + JwtVerify: JwtVerifyError, + GetOrFetchJwks: GetOrRefreshJwksError, + DeriveSeedFailed: IDL.Text + }); + const GetDelegationResultResponse = IDL.Variant({ + Ok: SignedDelegation, + Err: GetDelegationError + }); + const ProposalStatus = IDL.Variant({ + Initialized: IDL.Null, + Failed: IDL.Null, + Open: IDL.Null, + Rejected: IDL.Null, + Executed: IDL.Null, + Accepted: IDL.Null + }); + const AssetsUpgradeOptions = IDL.Record({ + clear_existing_assets: IDL.Opt(IDL.Bool) + }); + const SegmentsDeploymentOptions = IDL.Record({ + orbiter: IDL.Opt(IDL.Text), + mission_control_version: IDL.Opt(IDL.Text), + satellite_version: IDL.Opt(IDL.Text) + }); + const ProposalType = IDL.Variant({ + AssetsUpgrade: AssetsUpgradeOptions, + SegmentsDeployment: SegmentsDeploymentOptions + }); + const Proposal = IDL.Record({ + status: ProposalStatus, + updated_at: IDL.Nat64, + sha256: IDL.Opt(IDL.Vec(IDL.Nat8)), + executed_at: IDL.Opt(IDL.Nat64), + owner: IDL.Principal, + created_at: IDL.Nat64, + version: IDL.Opt(IDL.Nat64), + proposal_type: ProposalType + }); + const Permission = IDL.Variant({ + Controllers: IDL.Null, + Private: IDL.Null, + Public: IDL.Null, + Managed: IDL.Null + }); + const RateConfig = IDL.Record({ + max_tokens: IDL.Nat64, + time_per_token_ns: IDL.Nat64 + }); + const Rule = IDL.Record({ + max_capacity: IDL.Opt(IDL.Nat32), + memory: IDL.Opt(Memory), + updated_at: IDL.Nat64, + max_size: IDL.Opt(IDL.Nat), + read: Permission, + created_at: IDL.Nat64, + version: IDL.Opt(IDL.Nat64), + mutable_permissions: IDL.Opt(IDL.Bool), + rate_config: IDL.Opt(RateConfig), + write: Permission, + max_changes_per_user: IDL.Opt(IDL.Nat32) + }); + const HttpRequest = IDL.Record({ + url: IDL.Text, + method: IDL.Text, + body: IDL.Vec(IDL.Nat8), + headers: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + certificate_version: IDL.Opt(IDL.Nat16) + }); + const StreamingCallbackToken = IDL.Record({ + memory: Memory, + token: IDL.Opt(IDL.Text), + sha256: IDL.Opt(IDL.Vec(IDL.Nat8)), + headers: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + index: IDL.Nat64, + encoding_type: IDL.Text, + full_path: IDL.Text + }); + const StreamingStrategy = IDL.Variant({ + Callback: IDL.Record({ + token: StreamingCallbackToken, + callback: IDL.Func([], [], ['query']) + }) + }); + const HttpResponse = IDL.Record({ + body: IDL.Vec(IDL.Nat8), + headers: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + streaming_strategy: IDL.Opt(StreamingStrategy), + status_code: IDL.Nat16 + }); + const StreamingCallbackHttpResponse = IDL.Record({ + token: IDL.Opt(StreamingCallbackToken), + body: IDL.Vec(IDL.Nat8) + }); + const InitAssetKey = IDL.Record({ + token: IDL.Opt(IDL.Text), + collection: IDL.Text, + name: IDL.Text, + description: IDL.Opt(IDL.Text), + encoding_type: IDL.Opt(IDL.Text), + full_path: IDL.Text + }); + const InitUploadResult = IDL.Record({ batch_id: IDL.Nat }); + const ListResults = IDL.Record({ + matches_pages: IDL.Opt(IDL.Nat64), + matches_length: IDL.Nat64, + items_page: IDL.Opt(IDL.Nat64), + items: IDL.Vec(IDL.Tuple(IDL.Text, AssetNoContent)), + items_length: IDL.Nat64 + }); + const CustomDomain = IDL.Record({ + updated_at: IDL.Nat64, + created_at: IDL.Nat64, + version: IDL.Opt(IDL.Nat64), + bn_id: IDL.Opt(IDL.Text) + }); + const ListResults_1 = IDL.Record({ + matches_pages: IDL.Opt(IDL.Nat64), + matches_length: IDL.Nat64, + items_page: IDL.Opt(IDL.Nat64), + items: IDL.Vec(IDL.Tuple(IDL.Text, Doc)), + items_length: IDL.Nat64 + }); + const ListProposalsOrder = IDL.Record({ desc: IDL.Bool }); + const ListProposalsPaginate = IDL.Record({ + start_after: IDL.Opt(IDL.Nat), + limit: IDL.Opt(IDL.Nat) + }); + const ListProposalsParams = IDL.Record({ + order: IDL.Opt(ListProposalsOrder), + paginate: IDL.Opt(ListProposalsPaginate) + }); + const ProposalKey = IDL.Record({ proposal_id: IDL.Nat }); + const ListProposalResults = IDL.Record({ + matches_length: IDL.Nat64, + items: IDL.Vec(IDL.Tuple(ProposalKey, Proposal)), + items_length: IDL.Nat64 + }); + const ListRulesMatcher = IDL.Record({ include_system: IDL.Bool }); + const ListRulesParams = IDL.Record({ matcher: IDL.Opt(ListRulesMatcher) }); + const ListRulesResults = IDL.Record({ + matches_length: IDL.Nat64, + items: IDL.Vec(IDL.Tuple(IDL.Text, Rule)), + items_length: IDL.Nat64 + }); + const MemorySize = IDL.Record({ stable: IDL.Nat64, heap: IDL.Nat64 }); + const SetAuthenticationConfig = IDL.Record({ + openid: IDL.Opt(AuthenticationConfigOpenId), + version: IDL.Opt(IDL.Nat64), + internet_identity: IDL.Opt(AuthenticationConfigInternetIdentity), + rules: IDL.Opt(AuthenticationRules) + }); + const SetController = IDL.Record({ + metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + scope: ControllerScope, + expires_at: IDL.Opt(IDL.Nat64) + }); + const SetControllersArgs = IDL.Record({ + controller: SetController, + controllers: IDL.Vec(IDL.Principal) + }); + const SetDbConfig = IDL.Record({ + version: IDL.Opt(IDL.Nat64), + max_memory_size: IDL.Opt(ConfigMaxMemorySize) + }); + const SetDoc = IDL.Record({ + data: IDL.Vec(IDL.Nat8), + description: IDL.Opt(IDL.Text), + version: IDL.Opt(IDL.Nat64) + }); + const SetRule = IDL.Record({ + max_capacity: IDL.Opt(IDL.Nat32), + memory: IDL.Opt(Memory), + max_size: IDL.Opt(IDL.Nat), + read: Permission, + version: IDL.Opt(IDL.Nat64), + mutable_permissions: IDL.Opt(IDL.Bool), + rate_config: IDL.Opt(RateConfig), + write: Permission, + max_changes_per_user: IDL.Opt(IDL.Nat32) + }); + const SetStorageConfig = IDL.Record({ + iframe: IDL.Opt(StorageConfigIFrame), + rewrites: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + headers: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)))), + version: IDL.Opt(IDL.Nat64), + max_memory_size: IDL.Opt(ConfigMaxMemorySize), + raw_access: IDL.Opt(StorageConfigRawAccess), + redirects: IDL.Opt(IDL.Vec(IDL.Tuple(IDL.Text, StorageConfigRedirect))) + }); + const UploadChunk = IDL.Record({ + content: IDL.Vec(IDL.Nat8), + batch_id: IDL.Nat, + order_id: IDL.Opt(IDL.Nat) + }); + const UploadChunkResult = IDL.Record({ chunk_id: IDL.Nat }); + + return IDL.Service({ + authenticate: IDL.Func([AuthenticationArgs], [AuthenticateResultResponse], []), + commit_asset_upload: IDL.Func([CommitBatch], [], []), + commit_proposal: IDL.Func([CommitProposal], [IDL.Null], []), + commit_proposal_asset_upload: IDL.Func([CommitBatch], [], []), + commit_proposal_many_assets_upload: IDL.Func([IDL.Vec(CommitBatch)], [], []), + count_assets: IDL.Func([IDL.Text, ListParams], [IDL.Nat64], ['query']), + count_collection_assets: IDL.Func([IDL.Text], [IDL.Nat64], ['query']), + count_collection_docs: IDL.Func([IDL.Text], [IDL.Nat64], ['query']), + count_docs: IDL.Func([IDL.Text, ListParams], [IDL.Nat64], ['query']), + count_proposals: IDL.Func([], [IDL.Nat64], ['query']), + del_asset: IDL.Func([IDL.Text, IDL.Text], [], []), + del_assets: IDL.Func([IDL.Text], [], []), + del_controllers: IDL.Func( + [DeleteControllersArgs], + [IDL.Vec(IDL.Tuple(IDL.Principal, Controller))], + [] + ), + del_custom_domain: IDL.Func([IDL.Text], [], []), + del_doc: IDL.Func([IDL.Text, IDL.Text, DelDoc], [], []), + del_docs: IDL.Func([IDL.Text], [], []), + del_filtered_assets: IDL.Func([IDL.Text, ListParams], [], []), + del_filtered_docs: IDL.Func([IDL.Text, ListParams], [], []), + del_many_assets: IDL.Func([IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text))], [], []), + del_many_docs: IDL.Func([IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text, DelDoc))], [], []), + del_rule: IDL.Func([CollectionType, IDL.Text, DelRule], [], []), + delete_proposal_assets: IDL.Func([DeleteProposalAssets], [], []), + deposit_cycles: IDL.Func([DepositCyclesArgs], [], []), + get_asset: IDL.Func([IDL.Text, IDL.Text], [IDL.Opt(AssetNoContent)], ['query']), + get_auth_config: IDL.Func([], [IDL.Opt(AuthenticationConfig)], ['query']), + get_config: IDL.Func([], [Config], []), + get_db_config: IDL.Func([], [IDL.Opt(DbConfig)], ['query']), + get_delegation: IDL.Func([GetDelegationArgs], [GetDelegationResultResponse], ['query']), + get_doc: IDL.Func([IDL.Text, IDL.Text], [IDL.Opt(Doc)], ['query']), + get_many_assets: IDL.Func( + [IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text))], + [IDL.Vec(IDL.Tuple(IDL.Text, IDL.Opt(AssetNoContent)))], + ['query'] + ), + get_many_docs: IDL.Func( + [IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text))], + [IDL.Vec(IDL.Tuple(IDL.Text, IDL.Opt(Doc)))], + ['query'] + ), + get_proposal: IDL.Func([IDL.Nat], [IDL.Opt(Proposal)], ['query']), + get_rule: IDL.Func([CollectionType, IDL.Text], [IDL.Opt(Rule)], ['query']), + get_storage_config: IDL.Func([], [StorageConfig], ['query']), + http_request: IDL.Func([HttpRequest], [HttpResponse], ['query']), + http_request_streaming_callback: IDL.Func( + [StreamingCallbackToken], + [StreamingCallbackHttpResponse], + ['query'] + ), + init_asset_upload: IDL.Func([InitAssetKey], [InitUploadResult], []), + init_proposal: IDL.Func([ProposalType], [IDL.Nat, Proposal], []), + init_proposal_asset_upload: IDL.Func([InitAssetKey, IDL.Nat], [InitUploadResult], []), + init_proposal_many_assets_upload: IDL.Func( + [IDL.Vec(InitAssetKey), IDL.Nat], + [IDL.Vec(IDL.Tuple(IDL.Text, InitUploadResult))], + [] + ), + list_assets: IDL.Func([IDL.Text, ListParams], [ListResults], ['query']), + list_controllers: IDL.Func([], [IDL.Vec(IDL.Tuple(IDL.Principal, Controller))], ['query']), + list_custom_domains: IDL.Func([], [IDL.Vec(IDL.Tuple(IDL.Text, CustomDomain))], ['query']), + list_docs: IDL.Func([IDL.Text, ListParams], [ListResults_1], ['query']), + list_proposals: IDL.Func([ListProposalsParams], [ListProposalResults], ['query']), + list_rules: IDL.Func([CollectionType, ListRulesParams], [ListRulesResults], ['query']), + memory_size: IDL.Func([], [MemorySize], ['query']), + reject_proposal: IDL.Func([CommitProposal], [IDL.Null], []), + set_asset_token: IDL.Func([IDL.Text, IDL.Text, IDL.Opt(IDL.Text)], [], []), + set_auth_config: IDL.Func([SetAuthenticationConfig], [AuthenticationConfig], []), + set_controllers: IDL.Func( + [SetControllersArgs], + [IDL.Vec(IDL.Tuple(IDL.Principal, Controller))], + [] + ), + set_custom_domain: IDL.Func([IDL.Text, IDL.Opt(IDL.Text)], [], []), + set_db_config: IDL.Func([SetDbConfig], [DbConfig], []), + set_doc: IDL.Func([IDL.Text, IDL.Text, SetDoc], [Doc], []), + set_many_docs: IDL.Func( + [IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text, SetDoc))], + [IDL.Vec(IDL.Tuple(IDL.Text, Doc))], + [] + ), + set_rule: IDL.Func([CollectionType, IDL.Text, SetRule], [Rule], []), + set_storage_config: IDL.Func([SetStorageConfig], [StorageConfig], []), + submit_proposal: IDL.Func([IDL.Nat], [IDL.Nat, Proposal], []), + switch_storage_system_memory: IDL.Func([], [], []), + upload_asset_chunk: IDL.Func([UploadChunk], [UploadChunkResult], []), + upload_proposal_asset_chunk: IDL.Func([UploadChunk], [UploadChunkResult], []) + }); +}; + +export const init = ({ IDL }) => { + const Memory = IDL.Variant({ Heap: IDL.Null, Stable: IDL.Null }); + const InitStorageArgs = IDL.Record({ system_memory: IDL.Opt(Memory) }); + const InitSatelliteArgs = IDL.Record({ + controllers: IDL.Vec(IDL.Principal), + storage: IDL.Opt(InitStorageArgs) + }); + + return [InitSatelliteArgs]; +}; diff --git a/src/declarations/mission_control/mission_control.did.d.ts b/src/declarations/mission_control/mission_control.did.d.ts index 9bf7ce7a75..3449b51155 100644 --- a/src/declarations/mission_control/mission_control.did.d.ts +++ b/src/declarations/mission_control/mission_control.did.d.ts @@ -20,10 +20,12 @@ export interface Config { export interface Controller { updated_at: bigint; metadata: Array<[string, string]>; + kind: [] | [ControllerKind]; created_at: bigint; scope: ControllerScope; expires_at: [] | [bigint]; } +export type ControllerKind = { Emulator: null } | { Automation: null }; export type ControllerScope = { Write: null } | { Admin: null } | { Submit: null }; export interface CreateCanisterConfig { subnet_id: [] | [Principal]; @@ -150,6 +152,7 @@ export interface SegmentsMonitoringStrategy { } export interface SetController { metadata: Array<[string, string]>; + kind: [] | [ControllerKind]; scope: ControllerScope; expires_at: [] | [bigint]; } diff --git a/src/declarations/mission_control/mission_control.factory.certified.did.js b/src/declarations/mission_control/mission_control.factory.certified.did.js index f6ccbdca0d..fb49e29218 100644 --- a/src/declarations/mission_control/mission_control.factory.certified.did.js +++ b/src/declarations/mission_control/mission_control.factory.certified.did.js @@ -163,6 +163,10 @@ export const idlFactory = ({ IDL }) => { InsufficientFunds: IDL.Record({ balance: IDL.Nat }) }); const Result_1 = IDL.Variant({ Ok: IDL.Nat, Err: TransferError_1 }); + const ControllerKind = IDL.Variant({ + Emulator: IDL.Null, + Automation: IDL.Null + }); const ControllerScope = IDL.Variant({ Write: IDL.Null, Admin: IDL.Null, @@ -171,12 +175,14 @@ export const idlFactory = ({ IDL }) => { const Controller = IDL.Record({ updated_at: IDL.Nat64, metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), created_at: IDL.Nat64, scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) }); const SetController = IDL.Record({ metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) }); diff --git a/src/declarations/mission_control/mission_control.factory.did.js b/src/declarations/mission_control/mission_control.factory.did.js index 2939f82422..e8cb44a2c1 100644 --- a/src/declarations/mission_control/mission_control.factory.did.js +++ b/src/declarations/mission_control/mission_control.factory.did.js @@ -163,6 +163,10 @@ export const idlFactory = ({ IDL }) => { InsufficientFunds: IDL.Record({ balance: IDL.Nat }) }); const Result_1 = IDL.Variant({ Ok: IDL.Nat, Err: TransferError_1 }); + const ControllerKind = IDL.Variant({ + Emulator: IDL.Null, + Automation: IDL.Null + }); const ControllerScope = IDL.Variant({ Write: IDL.Null, Admin: IDL.Null, @@ -171,12 +175,14 @@ export const idlFactory = ({ IDL }) => { const Controller = IDL.Record({ updated_at: IDL.Nat64, metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), created_at: IDL.Nat64, scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) }); const SetController = IDL.Record({ metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) }); diff --git a/src/declarations/observatory/observatory.did.d.ts b/src/declarations/observatory/observatory.did.d.ts index 1c94f148bf..760bcea78a 100644 --- a/src/declarations/observatory/observatory.did.d.ts +++ b/src/declarations/observatory/observatory.did.d.ts @@ -13,10 +13,12 @@ import type { Principal } from '@icp-sdk/core/principal'; export interface Controller { updated_at: bigint; metadata: Array<[string, string]>; + kind: [] | [ControllerKind]; created_at: bigint; scope: ControllerScope; expires_at: [] | [bigint]; } +export type ControllerKind = { Emulator: null } | { Automation: null }; export type ControllerScope = { Write: null } | { Admin: null } | { Submit: null }; export interface CyclesBalance { timestamp: bigint; @@ -120,6 +122,7 @@ export interface Segment { export type SegmentKind = { Orbiter: null } | { MissionControl: null } | { Satellite: null }; export interface SetController { metadata: Array<[string, string]>; + kind: [] | [ControllerKind]; scope: ControllerScope; expires_at: [] | [bigint]; } diff --git a/src/declarations/observatory/observatory.factory.certified.did.js b/src/declarations/observatory/observatory.factory.certified.did.js index 426638d956..4a483ecf67 100644 --- a/src/declarations/observatory/observatory.factory.certified.did.js +++ b/src/declarations/observatory/observatory.factory.certified.did.js @@ -58,6 +58,10 @@ export const idlFactory = ({ IDL }) => { created_at: IDL.Nat64, version: IDL.Opt(IDL.Nat64) }); + const ControllerKind = IDL.Variant({ + Emulator: IDL.Null, + Automation: IDL.Null + }); const ControllerScope = IDL.Variant({ Write: IDL.Null, Admin: IDL.Null, @@ -66,6 +70,7 @@ export const idlFactory = ({ IDL }) => { const Controller = IDL.Record({ updated_at: IDL.Nat64, metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), created_at: IDL.Nat64, scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) @@ -114,6 +119,7 @@ export const idlFactory = ({ IDL }) => { }); const SetController = IDL.Record({ metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) }); diff --git a/src/declarations/observatory/observatory.factory.did.js b/src/declarations/observatory/observatory.factory.did.js index 4b2ad5081f..f8f8ac2190 100644 --- a/src/declarations/observatory/observatory.factory.did.js +++ b/src/declarations/observatory/observatory.factory.did.js @@ -58,6 +58,10 @@ export const idlFactory = ({ IDL }) => { created_at: IDL.Nat64, version: IDL.Opt(IDL.Nat64) }); + const ControllerKind = IDL.Variant({ + Emulator: IDL.Null, + Automation: IDL.Null + }); const ControllerScope = IDL.Variant({ Write: IDL.Null, Admin: IDL.Null, @@ -66,6 +70,7 @@ export const idlFactory = ({ IDL }) => { const Controller = IDL.Record({ updated_at: IDL.Nat64, metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), created_at: IDL.Nat64, scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) @@ -114,6 +119,7 @@ export const idlFactory = ({ IDL }) => { }); const SetController = IDL.Record({ metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) }); diff --git a/src/declarations/observatory/observatory.factory.did.mjs b/src/declarations/observatory/observatory.factory.did.mjs index 4b2ad5081f..f8f8ac2190 100644 --- a/src/declarations/observatory/observatory.factory.did.mjs +++ b/src/declarations/observatory/observatory.factory.did.mjs @@ -58,6 +58,10 @@ export const idlFactory = ({ IDL }) => { created_at: IDL.Nat64, version: IDL.Opt(IDL.Nat64) }); + const ControllerKind = IDL.Variant({ + Emulator: IDL.Null, + Automation: IDL.Null + }); const ControllerScope = IDL.Variant({ Write: IDL.Null, Admin: IDL.Null, @@ -66,6 +70,7 @@ export const idlFactory = ({ IDL }) => { const Controller = IDL.Record({ updated_at: IDL.Nat64, metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), created_at: IDL.Nat64, scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) @@ -114,6 +119,7 @@ export const idlFactory = ({ IDL }) => { }); const SetController = IDL.Record({ metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) }); diff --git a/src/declarations/orbiter/orbiter.did.d.ts b/src/declarations/orbiter/orbiter.did.d.ts index f0b6ddc9aa..f1daf50453 100644 --- a/src/declarations/orbiter/orbiter.did.d.ts +++ b/src/declarations/orbiter/orbiter.did.d.ts @@ -78,10 +78,12 @@ export interface CalendarDate { export interface Controller { updated_at: bigint; metadata: Array<[string, string]>; + kind: [] | [ControllerKind]; created_at: bigint; scope: ControllerScope; expires_at: [] | [bigint]; } +export type ControllerKind = { Emulator: null } | { Automation: null }; export type ControllerScope = { Write: null } | { Admin: null } | { Submit: null }; export interface DelSatelliteConfig { version: [] | [bigint]; @@ -193,6 +195,7 @@ export type Result_2 = { Ok: PerformanceMetric } | { Err: string }; export type Result_3 = { Ok: TrackEvent } | { Err: string }; export interface SetController { metadata: Array<[string, string]>; + kind: [] | [ControllerKind]; scope: ControllerScope; expires_at: [] | [bigint]; } diff --git a/src/declarations/orbiter/orbiter.factory.certified.did.js b/src/declarations/orbiter/orbiter.factory.certified.did.js index f7af2041cd..60c6d11c94 100644 --- a/src/declarations/orbiter/orbiter.factory.certified.did.js +++ b/src/declarations/orbiter/orbiter.factory.certified.did.js @@ -13,6 +13,10 @@ export const idlFactory = ({ IDL }) => { const DeleteControllersArgs = IDL.Record({ controllers: IDL.Vec(IDL.Principal) }); + const ControllerKind = IDL.Variant({ + Emulator: IDL.Null, + Automation: IDL.Null + }); const ControllerScope = IDL.Variant({ Write: IDL.Null, Admin: IDL.Null, @@ -21,6 +25,7 @@ export const idlFactory = ({ IDL }) => { const Controller = IDL.Record({ updated_at: IDL.Nat64, metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), created_at: IDL.Nat64, scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) @@ -202,6 +207,7 @@ export const idlFactory = ({ IDL }) => { const MemorySize = IDL.Record({ stable: IDL.Nat64, heap: IDL.Nat64 }); const SetController = IDL.Record({ metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) }); diff --git a/src/declarations/orbiter/orbiter.factory.did.js b/src/declarations/orbiter/orbiter.factory.did.js index 2589b55cd1..39e0f994b1 100644 --- a/src/declarations/orbiter/orbiter.factory.did.js +++ b/src/declarations/orbiter/orbiter.factory.did.js @@ -13,6 +13,10 @@ export const idlFactory = ({ IDL }) => { const DeleteControllersArgs = IDL.Record({ controllers: IDL.Vec(IDL.Principal) }); + const ControllerKind = IDL.Variant({ + Emulator: IDL.Null, + Automation: IDL.Null + }); const ControllerScope = IDL.Variant({ Write: IDL.Null, Admin: IDL.Null, @@ -21,6 +25,7 @@ export const idlFactory = ({ IDL }) => { const Controller = IDL.Record({ updated_at: IDL.Nat64, metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), created_at: IDL.Nat64, scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) @@ -202,6 +207,7 @@ export const idlFactory = ({ IDL }) => { const MemorySize = IDL.Record({ stable: IDL.Nat64, heap: IDL.Nat64 }); const SetController = IDL.Record({ metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) }); diff --git a/src/declarations/orbiter/orbiter.factory.did.mjs b/src/declarations/orbiter/orbiter.factory.did.mjs index 2589b55cd1..39e0f994b1 100644 --- a/src/declarations/orbiter/orbiter.factory.did.mjs +++ b/src/declarations/orbiter/orbiter.factory.did.mjs @@ -13,6 +13,10 @@ export const idlFactory = ({ IDL }) => { const DeleteControllersArgs = IDL.Record({ controllers: IDL.Vec(IDL.Principal) }); + const ControllerKind = IDL.Variant({ + Emulator: IDL.Null, + Automation: IDL.Null + }); const ControllerScope = IDL.Variant({ Write: IDL.Null, Admin: IDL.Null, @@ -21,6 +25,7 @@ export const idlFactory = ({ IDL }) => { const Controller = IDL.Record({ updated_at: IDL.Nat64, metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), created_at: IDL.Nat64, scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) @@ -202,6 +207,7 @@ export const idlFactory = ({ IDL }) => { const MemorySize = IDL.Record({ stable: IDL.Nat64, heap: IDL.Nat64 }); const SetController = IDL.Record({ metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) }); diff --git a/src/declarations/satellite/satellite.did.d.ts b/src/declarations/satellite/satellite.did.d.ts index 9a9bfd5304..6c29afed4a 100644 --- a/src/declarations/satellite/satellite.did.d.ts +++ b/src/declarations/satellite/satellite.did.d.ts @@ -86,10 +86,12 @@ export interface ConfigMaxMemorySize { export interface Controller { updated_at: bigint; metadata: Array<[string, string]>; + kind: [] | [ControllerKind]; created_at: bigint; scope: ControllerScope; expires_at: [] | [bigint]; } +export type ControllerKind = { Emulator: null } | { Automation: null }; export type ControllerScope = { Write: null } | { Admin: null } | { Submit: null }; export interface CustomDomain { updated_at: bigint; @@ -349,6 +351,7 @@ export interface SetAuthenticationConfig { } export interface SetController { metadata: Array<[string, string]>; + kind: [] | [ControllerKind]; scope: ControllerScope; expires_at: [] | [bigint]; } diff --git a/src/declarations/satellite/satellite.factory.certified.did.js b/src/declarations/satellite/satellite.factory.certified.did.js index 1a8df5df75..3926f90a01 100644 --- a/src/declarations/satellite/satellite.factory.certified.did.js +++ b/src/declarations/satellite/satellite.factory.certified.did.js @@ -115,6 +115,10 @@ export const idlFactory = ({ IDL }) => { const DeleteControllersArgs = IDL.Record({ controllers: IDL.Vec(IDL.Principal) }); + const ControllerKind = IDL.Variant({ + Emulator: IDL.Null, + Automation: IDL.Null + }); const ControllerScope = IDL.Variant({ Write: IDL.Null, Admin: IDL.Null, @@ -123,6 +127,7 @@ export const idlFactory = ({ IDL }) => { const Controller = IDL.Record({ updated_at: IDL.Nat64, metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), created_at: IDL.Nat64, scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) @@ -401,6 +406,7 @@ export const idlFactory = ({ IDL }) => { }); const SetController = IDL.Record({ metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) }); diff --git a/src/declarations/satellite/satellite.factory.did.js b/src/declarations/satellite/satellite.factory.did.js index 3428decd40..74a3f16d91 100644 --- a/src/declarations/satellite/satellite.factory.did.js +++ b/src/declarations/satellite/satellite.factory.did.js @@ -115,6 +115,10 @@ export const idlFactory = ({ IDL }) => { const DeleteControllersArgs = IDL.Record({ controllers: IDL.Vec(IDL.Principal) }); + const ControllerKind = IDL.Variant({ + Emulator: IDL.Null, + Automation: IDL.Null + }); const ControllerScope = IDL.Variant({ Write: IDL.Null, Admin: IDL.Null, @@ -123,6 +127,7 @@ export const idlFactory = ({ IDL }) => { const Controller = IDL.Record({ updated_at: IDL.Nat64, metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), created_at: IDL.Nat64, scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) @@ -401,6 +406,7 @@ export const idlFactory = ({ IDL }) => { }); const SetController = IDL.Record({ metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) }); diff --git a/src/declarations/satellite/satellite.factory.did.mjs b/src/declarations/satellite/satellite.factory.did.mjs index 3428decd40..74a3f16d91 100644 --- a/src/declarations/satellite/satellite.factory.did.mjs +++ b/src/declarations/satellite/satellite.factory.did.mjs @@ -115,6 +115,10 @@ export const idlFactory = ({ IDL }) => { const DeleteControllersArgs = IDL.Record({ controllers: IDL.Vec(IDL.Principal) }); + const ControllerKind = IDL.Variant({ + Emulator: IDL.Null, + Automation: IDL.Null + }); const ControllerScope = IDL.Variant({ Write: IDL.Null, Admin: IDL.Null, @@ -123,6 +127,7 @@ export const idlFactory = ({ IDL }) => { const Controller = IDL.Record({ updated_at: IDL.Nat64, metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), created_at: IDL.Nat64, scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) @@ -401,6 +406,7 @@ export const idlFactory = ({ IDL }) => { }); const SetController = IDL.Record({ metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) }); diff --git a/src/declarations/sputnik/sputnik.did.d.ts b/src/declarations/sputnik/sputnik.did.d.ts index 9a9bfd5304..6c29afed4a 100644 --- a/src/declarations/sputnik/sputnik.did.d.ts +++ b/src/declarations/sputnik/sputnik.did.d.ts @@ -86,10 +86,12 @@ export interface ConfigMaxMemorySize { export interface Controller { updated_at: bigint; metadata: Array<[string, string]>; + kind: [] | [ControllerKind]; created_at: bigint; scope: ControllerScope; expires_at: [] | [bigint]; } +export type ControllerKind = { Emulator: null } | { Automation: null }; export type ControllerScope = { Write: null } | { Admin: null } | { Submit: null }; export interface CustomDomain { updated_at: bigint; @@ -349,6 +351,7 @@ export interface SetAuthenticationConfig { } export interface SetController { metadata: Array<[string, string]>; + kind: [] | [ControllerKind]; scope: ControllerScope; expires_at: [] | [bigint]; } diff --git a/src/declarations/sputnik/sputnik.factory.certified.did.js b/src/declarations/sputnik/sputnik.factory.certified.did.js index 1a8df5df75..3926f90a01 100644 --- a/src/declarations/sputnik/sputnik.factory.certified.did.js +++ b/src/declarations/sputnik/sputnik.factory.certified.did.js @@ -115,6 +115,10 @@ export const idlFactory = ({ IDL }) => { const DeleteControllersArgs = IDL.Record({ controllers: IDL.Vec(IDL.Principal) }); + const ControllerKind = IDL.Variant({ + Emulator: IDL.Null, + Automation: IDL.Null + }); const ControllerScope = IDL.Variant({ Write: IDL.Null, Admin: IDL.Null, @@ -123,6 +127,7 @@ export const idlFactory = ({ IDL }) => { const Controller = IDL.Record({ updated_at: IDL.Nat64, metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), created_at: IDL.Nat64, scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) @@ -401,6 +406,7 @@ export const idlFactory = ({ IDL }) => { }); const SetController = IDL.Record({ metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) }); diff --git a/src/declarations/sputnik/sputnik.factory.did.js b/src/declarations/sputnik/sputnik.factory.did.js index 3428decd40..74a3f16d91 100644 --- a/src/declarations/sputnik/sputnik.factory.did.js +++ b/src/declarations/sputnik/sputnik.factory.did.js @@ -115,6 +115,10 @@ export const idlFactory = ({ IDL }) => { const DeleteControllersArgs = IDL.Record({ controllers: IDL.Vec(IDL.Principal) }); + const ControllerKind = IDL.Variant({ + Emulator: IDL.Null, + Automation: IDL.Null + }); const ControllerScope = IDL.Variant({ Write: IDL.Null, Admin: IDL.Null, @@ -123,6 +127,7 @@ export const idlFactory = ({ IDL }) => { const Controller = IDL.Record({ updated_at: IDL.Nat64, metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), created_at: IDL.Nat64, scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) @@ -401,6 +406,7 @@ export const idlFactory = ({ IDL }) => { }); const SetController = IDL.Record({ metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) }); diff --git a/src/frontend/src/lib/components/mission-control/setup/MissionControlAccessKeys.svelte b/src/frontend/src/lib/components/mission-control/setup/MissionControlAccessKeys.svelte index 7fc99d9ad7..215c3bda9c 100644 --- a/src/frontend/src/lib/components/mission-control/setup/MissionControlAccessKeys.svelte +++ b/src/frontend/src/lib/components/mission-control/setup/MissionControlAccessKeys.svelte @@ -44,6 +44,7 @@ created_at: 0n, updated_at: 0n, expires_at: [], + kind: [], metadata: [], scope: { Admin: null } }; diff --git a/src/frontend/src/lib/utils/controllers.utils.ts b/src/frontend/src/lib/utils/controllers.utils.ts index 80a681cfaa..a3060c4a91 100644 --- a/src/frontend/src/lib/utils/controllers.utils.ts +++ b/src/frontend/src/lib/utils/controllers.utils.ts @@ -8,6 +8,7 @@ export const toSetController = ({ }: Omit): MissionControlDid.SetController => ({ metadata: nonNullish(profile) && profile !== '' ? [['profile', profile]] : [], expires_at: toNullable(undefined), + kind: toNullable(), scope: scope === 'admin' ? { Admin: null } : scope === 'submit' ? { Submit: null } : { Write: null } }); diff --git a/src/frontend/tests/lib/services/emulator.services.test.ts b/src/frontend/tests/lib/services/emulator.services.test.ts index 67bad19f20..070ff1b929 100644 --- a/src/frontend/tests/lib/services/emulator.services.test.ts +++ b/src/frontend/tests/lib/services/emulator.services.test.ts @@ -68,6 +68,7 @@ describe('emulator.services', () => { args: { controller: { expires_at: [], + kind: [], metadata: [['profile', '👾 Emulator']], scope: { Admin: null diff --git a/src/libs/satellite/satellite.did b/src/libs/satellite/satellite.did index b356cc8759..c341c742a7 100644 --- a/src/libs/satellite/satellite.did +++ b/src/libs/satellite/satellite.did @@ -63,10 +63,12 @@ type ConfigMaxMemorySize = record { stable : opt nat64; heap : opt nat64 }; type Controller = record { updated_at : nat64; metadata : vec record { text; text }; + kind : opt ControllerKind; created_at : nat64; scope : ControllerScope; expires_at : opt nat64; }; +type ControllerKind = variant { Emulator; Automation }; type ControllerScope = variant { Write; Admin; Submit }; type CustomDomain = record { updated_at : nat64; @@ -289,6 +291,7 @@ type SetAuthenticationConfig = record { }; type SetController = record { metadata : vec record { text; text }; + kind : opt ControllerKind; scope : ControllerScope; expires_at : opt nat64; }; diff --git a/src/libs/shared/src/segments/controllers.rs b/src/libs/shared/src/segments/controllers.rs index 83e7f03612..dad87a693e 100644 --- a/src/libs/shared/src/segments/controllers.rs +++ b/src/libs/shared/src/segments/controllers.rs @@ -26,6 +26,7 @@ pub fn init_admin_controllers(new_controllers: &[UserId]) -> Controllers { metadata: HashMap::new(), expires_at: None, scope: ControllerScope::Admin, + kind: None, }; set_controllers(new_controllers, &controller_data, &mut controllers); @@ -62,6 +63,7 @@ pub fn set_controllers( updated_at, expires_at: controller_data.expires_at, scope: controller_data.scope.clone(), + kind: controller_data.kind.clone(), }; controllers.insert(*controller_id, controller); diff --git a/src/libs/shared/src/types.rs b/src/libs/shared/src/types.rs index 3ce2976034..fa1dbb3f05 100644 --- a/src/libs/shared/src/types.rs +++ b/src/libs/shared/src/types.rs @@ -42,6 +42,7 @@ pub mod state { pub updated_at: Timestamp, pub expires_at: Option, pub scope: ControllerScope, + pub kind: Option, } #[derive(CandidType, Serialize, Deserialize, Clone)] @@ -51,6 +52,12 @@ pub mod state { Submit, } + #[derive(CandidType, Serialize, Deserialize, Clone)] + pub enum ControllerKind { + Automation, + Emulator, + } + #[derive(CandidType, Serialize, Deserialize, Copy, Clone, Debug, PartialEq, Eq, Hash)] pub enum SegmentKind { Satellite, @@ -103,8 +110,8 @@ pub mod state { pub mod interface { use crate::mgmt::types::cmc::SubnetId; use crate::types::state::{ - ControllerId, ControllerScope, Metadata, MissionControlId, NotificationKind, Segment, - Timestamp, UserId, + ControllerId, ControllerKind, ControllerScope, Metadata, MissionControlId, + NotificationKind, Segment, Timestamp, UserId, }; use candid::{CandidType, Principal}; use ic_ledger_types::BlockIndex; @@ -169,6 +176,7 @@ pub mod interface { pub metadata: Metadata, pub expires_at: Option, pub scope: ControllerScope, + pub kind: Option, } #[derive(CandidType, Deserialize)] diff --git a/src/mission_control/mission_control.did b/src/mission_control/mission_control.did index 106bb93266..5b28ec28b9 100644 --- a/src/mission_control/mission_control.did +++ b/src/mission_control/mission_control.did @@ -3,10 +3,12 @@ type Config = record { monitoring : opt MonitoringConfig }; type Controller = record { updated_at : nat64; metadata : vec record { text; text }; + kind : opt ControllerKind; created_at : nat64; scope : ControllerScope; expires_at : opt nat64; }; +type ControllerKind = variant { Emulator; Automation }; type ControllerScope = variant { Write; Admin; Submit }; type CreateCanisterConfig = record { subnet_id : opt principal; @@ -113,6 +115,7 @@ type SegmentsMonitoringStrategy = record { }; type SetController = record { metadata : vec record { text; text }; + kind : opt ControllerKind; scope : ControllerScope; expires_at : opt nat64; }; diff --git a/src/observatory/observatory.did b/src/observatory/observatory.did index b0a25c013f..000cc450e9 100644 --- a/src/observatory/observatory.did +++ b/src/observatory/observatory.did @@ -1,10 +1,12 @@ type Controller = record { updated_at : nat64; metadata : vec record { text; text }; + kind : opt ControllerKind; created_at : nat64; scope : ControllerScope; expires_at : opt nat64; }; +type ControllerKind = variant { Emulator; Automation }; type ControllerScope = variant { Write; Admin; Submit }; type CyclesBalance = record { timestamp : nat64; amount : nat }; type DeleteControllersArgs = record { controllers : vec principal }; @@ -79,6 +81,7 @@ type Segment = record { type SegmentKind = variant { Orbiter; MissionControl; Satellite }; type SetController = record { metadata : vec record { text; text }; + kind : opt ControllerKind; scope : ControllerScope; expires_at : opt nat64; }; diff --git a/src/orbiter/orbiter.did b/src/orbiter/orbiter.did index 94057e3ef0..c19eb8c948 100644 --- a/src/orbiter/orbiter.did +++ b/src/orbiter/orbiter.did @@ -57,10 +57,12 @@ type CalendarDate = record { day : nat8; month : nat8; year : int32 }; type Controller = record { updated_at : nat64; metadata : vec record { text; text }; + kind : opt ControllerKind; created_at : nat64; scope : ControllerScope; expires_at : opt nat64; }; +type ControllerKind = variant { Emulator; Automation }; type ControllerScope = variant { Write; Admin; Submit }; type DelSatelliteConfig = record { version : opt nat64 }; type DeleteControllersArgs = record { controllers : vec principal }; @@ -152,6 +154,7 @@ type Result_2 = variant { Ok : PerformanceMetric; Err : text }; type Result_3 = variant { Ok : TrackEvent; Err : text }; type SetController = record { metadata : vec record { text; text }; + kind : opt ControllerKind; scope : ControllerScope; expires_at : opt nat64; }; diff --git a/src/satellite/satellite.did b/src/satellite/satellite.did index 52e19a508d..a7b4c29b57 100644 --- a/src/satellite/satellite.did +++ b/src/satellite/satellite.did @@ -65,10 +65,12 @@ type ConfigMaxMemorySize = record { stable : opt nat64; heap : opt nat64 }; type Controller = record { updated_at : nat64; metadata : vec record { text; text }; + kind : opt ControllerKind; created_at : nat64; scope : ControllerScope; expires_at : opt nat64; }; +type ControllerKind = variant { Emulator; Automation }; type ControllerScope = variant { Write; Admin; Submit }; type CustomDomain = record { updated_at : nat64; @@ -291,6 +293,7 @@ type SetAuthenticationConfig = record { }; type SetController = record { metadata : vec record { text; text }; + kind : opt ControllerKind; scope : ControllerScope; expires_at : opt nat64; }; diff --git a/src/sputnik/sputnik.did b/src/sputnik/sputnik.did index 966966724e..26f6a05509 100644 --- a/src/sputnik/sputnik.did +++ b/src/sputnik/sputnik.did @@ -65,10 +65,12 @@ type ConfigMaxMemorySize = record { stable : opt nat64; heap : opt nat64 }; type Controller = record { updated_at : nat64; metadata : vec record { text; text }; + kind : opt ControllerKind; created_at : nat64; scope : ControllerScope; expires_at : opt nat64; }; +type ControllerKind = variant { Emulator; Automation }; type ControllerScope = variant { Write; Admin; Submit }; type CustomDomain = record { updated_at : nat64; @@ -291,6 +293,7 @@ type SetAuthenticationConfig = record { }; type SetController = record { metadata : vec record { text; text }; + kind : opt ControllerKind; scope : ControllerScope; expires_at : opt nat64; }; diff --git a/src/sputnik/src/hooks/js/impls/shared.rs b/src/sputnik/src/hooks/js/impls/shared.rs index 14e0c1b638..612e1df37b 100644 --- a/src/sputnik/src/hooks/js/impls/shared.rs +++ b/src/sputnik/src/hooks/js/impls/shared.rs @@ -1,11 +1,14 @@ use crate::hooks::js::types::shared::{ - JsController, JsControllerRecord, JsControllerScope, JsControllers, JsMetadataRecord, + JsController, JsControllerKind, JsControllerRecord, JsControllerScope, JsControllers, + JsMetadataRecord, }; use crate::js::types::candid::JsRawPrincipal; use crate::js::utils::primitives::{ from_bigint_js, from_optional_bigint_js, into_bigint_js, into_optional_bigint_js, }; -use junobuild_shared::types::state::{Controller, ControllerScope, Controllers, Timestamp}; +use junobuild_shared::types::state::{ + Controller, ControllerKind, ControllerScope, Controllers, Timestamp, +}; use rquickjs::{ Array, BigInt, Ctx, Error as JsError, FromJs, IntoJs, Object, Result as JsResult, Value, }; @@ -26,6 +29,10 @@ impl<'js> JsController { ControllerScope::Admin => JsControllerScope::Admin, ControllerScope::Submit => JsControllerScope::Submit, }, + kind: controller.kind.map(|kind| match kind { + ControllerKind::Automation => JsControllerKind::Automation, + ControllerKind::Emulator => JsControllerKind::Emulator, + }), }) } @@ -44,6 +51,10 @@ impl<'js> JsController { JsControllerScope::Admin => ControllerScope::Admin, JsControllerScope::Submit => ControllerScope::Submit, }, + kind: self.kind.as_ref().map(|kind| match kind { + JsControllerKind::Automation => ControllerKind::Automation, + JsControllerKind::Emulator => ControllerKind::Emulator, + }), }) } } @@ -91,6 +102,17 @@ impl<'js> IntoJs<'js> for JsControllerScope { } } +impl<'js> IntoJs<'js> for JsControllerKind { + fn into_js(self, ctx: &Ctx<'js>) -> JsResult> { + let s = match self { + JsControllerKind::Automation => "automation", + JsControllerKind::Emulator => "emulator", + }; + + s.into_js(ctx) + } +} + impl<'js> IntoJs<'js> for JsController { fn into_js(self, ctx: &Ctx<'js>) -> JsResult> { let obj = Object::new(ctx.clone())?; @@ -104,6 +126,8 @@ impl<'js> IntoJs<'js> for JsController { obj.set("scope", self.scope)?; + obj.set("kind", self.kind)?; + Ok(obj.into_value()) } } @@ -152,6 +176,18 @@ impl<'js> FromJs<'js> for JsControllerScope { } } +impl<'js> FromJs<'js> for JsControllerKind { + fn from_js(ctx: &Ctx<'js>, value: Value<'js>) -> JsResult { + let s: String = String::from_js(ctx, value)?; + + match s.as_str() { + "automation" => Ok(Self::Automation), + "emulator" => Ok(Self::Emulator), + _ => Err(JsError::new_from_js("JsControllerKind", "ControllerKind")), + } + } +} + impl<'js> FromJs<'js> for JsMetadataRecord { fn from_js(_ctx: &Ctx<'js>, value: Value<'js>) -> JsResult { let arr = Array::from_value(value)?; @@ -180,12 +216,18 @@ impl<'js> FromJs<'js> for JsController { let scope = JsControllerScope::from_js(ctx, obj.get("scope")?)?; + let kind = obj + .get::<_, Option>("kind")? + .map(|value| JsControllerKind::from_js(ctx, value)) + .transpose()?; + Ok(Self { metadata, created_at, updated_at, expires_at, scope, + kind, }) } } diff --git a/src/sputnik/src/hooks/js/types.rs b/src/sputnik/src/hooks/js/types.rs index 30371efda5..af3bc8137d 100644 --- a/src/sputnik/src/hooks/js/types.rs +++ b/src/sputnik/src/hooks/js/types.rs @@ -17,6 +17,12 @@ pub mod shared { Submit, } + #[derive(Clone)] + pub enum JsControllerKind { + Automation, + Emulator, + } + #[derive(Clone)] pub struct JsMetadataRecord(pub String, pub String); @@ -27,6 +33,7 @@ pub mod shared { pub updated_at: JsTimestamp, pub expires_at: Option, pub scope: JsControllerScope, + pub kind: Option, } #[derive(Clone)] diff --git a/src/tests/constants/controller-tests.constants.ts b/src/tests/constants/controller-tests.constants.ts new file mode 100644 index 0000000000..e00898692a --- /dev/null +++ b/src/tests/constants/controller-tests.constants.ts @@ -0,0 +1,7 @@ +import type { SatelliteDid } from '$declarations'; + +export const CONTROLLER_METADATA: Omit = { + expires_at: [], + kind: [], + metadata: [] +}; diff --git a/src/tests/declarations/test_satellite/test_satellite.did.d.ts b/src/tests/declarations/test_satellite/test_satellite.did.d.ts index 6b1faaf737..5f232ebcba 100644 --- a/src/tests/declarations/test_satellite/test_satellite.did.d.ts +++ b/src/tests/declarations/test_satellite/test_satellite.did.d.ts @@ -86,10 +86,12 @@ export interface ConfigMaxMemorySize { export interface Controller { updated_at: bigint; metadata: Array<[string, string]>; + kind: [] | [ControllerKind]; created_at: bigint; scope: ControllerScope; expires_at: [] | [bigint]; } +export type ControllerKind = { Emulator: null } | { Automation: null }; export type ControllerScope = { Write: null } | { Admin: null } | { Submit: null }; export interface CustomDomain { updated_at: bigint; @@ -350,6 +352,7 @@ export interface SetAuthenticationConfig { } export interface SetController { metadata: Array<[string, string]>; + kind: [] | [ControllerKind]; scope: ControllerScope; expires_at: [] | [bigint]; } diff --git a/src/tests/declarations/test_satellite/test_satellite.factory.certified.did.js b/src/tests/declarations/test_satellite/test_satellite.factory.certified.did.js index cf5d64c713..bf6976362b 100644 --- a/src/tests/declarations/test_satellite/test_satellite.factory.certified.did.js +++ b/src/tests/declarations/test_satellite/test_satellite.factory.certified.did.js @@ -115,6 +115,10 @@ export const idlFactory = ({ IDL }) => { const DeleteControllersArgs = IDL.Record({ controllers: IDL.Vec(IDL.Principal) }); + const ControllerKind = IDL.Variant({ + Emulator: IDL.Null, + Automation: IDL.Null + }); const ControllerScope = IDL.Variant({ Write: IDL.Null, Admin: IDL.Null, @@ -123,6 +127,7 @@ export const idlFactory = ({ IDL }) => { const Controller = IDL.Record({ updated_at: IDL.Nat64, metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), created_at: IDL.Nat64, scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) @@ -401,6 +406,7 @@ export const idlFactory = ({ IDL }) => { }); const SetController = IDL.Record({ metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) }); diff --git a/src/tests/declarations/test_satellite/test_satellite.factory.did.js b/src/tests/declarations/test_satellite/test_satellite.factory.did.js index 47e8551765..794fe291c0 100644 --- a/src/tests/declarations/test_satellite/test_satellite.factory.did.js +++ b/src/tests/declarations/test_satellite/test_satellite.factory.did.js @@ -115,6 +115,10 @@ export const idlFactory = ({ IDL }) => { const DeleteControllersArgs = IDL.Record({ controllers: IDL.Vec(IDL.Principal) }); + const ControllerKind = IDL.Variant({ + Emulator: IDL.Null, + Automation: IDL.Null + }); const ControllerScope = IDL.Variant({ Write: IDL.Null, Admin: IDL.Null, @@ -123,6 +127,7 @@ export const idlFactory = ({ IDL }) => { const Controller = IDL.Record({ updated_at: IDL.Nat64, metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), created_at: IDL.Nat64, scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) @@ -401,6 +406,7 @@ export const idlFactory = ({ IDL }) => { }); const SetController = IDL.Record({ metadata: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), + kind: IDL.Opt(ControllerKind), scope: ControllerScope, expires_at: IDL.Opt(IDL.Nat64) }); diff --git a/src/tests/fixtures/test_satellite/test_satellite.did b/src/tests/fixtures/test_satellite/test_satellite.did index a6a3f5bb43..1c04d35bdf 100644 --- a/src/tests/fixtures/test_satellite/test_satellite.did +++ b/src/tests/fixtures/test_satellite/test_satellite.did @@ -65,10 +65,12 @@ type ConfigMaxMemorySize = record { stable : opt nat64; heap : opt nat64 }; type Controller = record { updated_at : nat64; metadata : vec record { text; text }; + kind : opt ControllerKind; created_at : nat64; scope : ControllerScope; expires_at : opt nat64; }; +type ControllerKind = variant { Emulator; Automation }; type ControllerScope = variant { Write; Admin; Submit }; type CustomDomain = record { updated_at : nat64; @@ -291,6 +293,7 @@ type SetAuthenticationConfig = record { }; type SetController = record { metadata : vec record { text; text }; + kind : opt ControllerKind; scope : ControllerScope; expires_at : opt nat64; }; diff --git a/src/tests/specs/console/console.controllers.spec.ts b/src/tests/specs/console/console.controllers.spec.ts index 198cc08067..804156a3f5 100644 --- a/src/tests/specs/console/console.controllers.spec.ts +++ b/src/tests/specs/console/console.controllers.spec.ts @@ -1,10 +1,11 @@ import { type ConsoleActor, idlFactoryConsole } from '$declarations'; import { type Actor, PocketIc } from '@dfinity/pic'; -import { toNullable } from '@dfinity/utils'; import { AnonymousIdentity } from '@icp-sdk/core/agent'; import { Ed25519KeyIdentity } from '@icp-sdk/core/identity'; import { inject } from 'vitest'; import { CONTROLLER_ERROR_MSG } from '../../constants/console-tests.constants'; +import { CONTROLLER_METADATA } from '../../constants/controller-tests.constants'; +import { testControllers } from '../../utils/controllers-tests.utils'; import { CONSOLE_WASM_PATH } from '../../utils/setup-tests.utils'; describe('Console > Controllers', () => { @@ -40,8 +41,7 @@ describe('Console > Controllers', () => { set_controllers({ controllers: [controller.getPrincipal()], controller: { - expires_at: toNullable(), - metadata: [], + ...CONTROLLER_METADATA, scope: { Admin: null } } }) @@ -82,4 +82,15 @@ describe('Console > Controllers', () => { assertControllers(() => actor); }); + + describe('Controller', () => { + beforeAll(() => { + actor.setIdentity(controller); + }); + + testControllers({ + actor: () => actor, + controller: () => controller + }); + }); }); diff --git a/src/tests/specs/console/upgrade/console.upgrade-v0-4-1.spec.ts b/src/tests/specs/console/upgrade/console.upgrade-v0-4-1.spec.ts new file mode 100644 index 0000000000..5c0cfb0bf1 --- /dev/null +++ b/src/tests/specs/console/upgrade/console.upgrade-v0-4-1.spec.ts @@ -0,0 +1,121 @@ +import { + type ConsoleActor, + type ConsoleActor033, + type ConsoleDid033, + idlFactoryConsole, + idlFactoryConsole033 +} from '$declarations'; +import { type Actor, PocketIc } from '@dfinity/pic'; +import { toNullable } from '@dfinity/utils'; +import { Ed25519KeyIdentity } from '@icp-sdk/core/identity'; +import type { Principal } from '@icp-sdk/core/principal'; +import { inject } from 'vitest'; +import { CONSOLE_ID } from '../../../constants/console-tests.constants'; +import { tick } from '../../../utils/pic-tests.utils'; +import { + CONSOLE_WASM_PATH, + controllersInitArgs, + downloadConsole +} from '../../../utils/setup-tests.utils'; + +describe('Console > Upgrade > v0.4.0 -> v0.4.1', () => { + let pic: PocketIc; + let actor: Actor; + let canisterId: Principal; + + const controller = Ed25519KeyIdentity.generate(); + + const upgrade = async () => { + await tick(pic); + + await pic.upgradeCanister({ + canisterId, + wasm: CONSOLE_WASM_PATH, + sender: controller.getPrincipal() + }); + }; + + const setControllers = async (): Promise<[Principal, ConsoleDid033.SetController][]> => { + const { set_controllers } = actor; + + const user1 = Ed25519KeyIdentity.generate(); + const user2 = Ed25519KeyIdentity.generate(); + const admin1 = Ed25519KeyIdentity.generate(); + + const controllerWrite: ConsoleDid033.SetController = { + scope: { Write: null }, + metadata: [['hello', 'world']], + expires_at: [] + }; + + const controllerAdmin: ConsoleDid033.SetController = { + scope: { Admin: null }, + metadata: [['super', 'top']], + expires_at: [1n] + }; + + await set_controllers({ + controller: controllerWrite, + controllers: [user1.getPrincipal(), user2.getPrincipal()] + }); + + await set_controllers({ + controller: controllerAdmin, + controllers: [admin1.getPrincipal()] + }); + + return [ + [user1.getPrincipal(), controllerWrite], + [user2.getPrincipal(), controllerWrite], + [admin1.getPrincipal(), controllerAdmin] + ]; + }; + + beforeEach(async () => { + pic = await PocketIc.create(inject('PIC_URL')); + + const destination = await downloadConsole({ junoVersion: '0.0.67', version: '0.4.0' }); + + const { actor: c, canisterId: cId } = await pic.setupCanister({ + idlFactory: idlFactoryConsole033, + wasm: destination, + arg: controllersInitArgs(controller), + sender: controller.getPrincipal(), + targetCanisterId: CONSOLE_ID + }); + + actor = c; + canisterId = cId; + + actor.setIdentity(controller); + }); + + afterEach(async () => { + await pic?.tearDown(); + }); + + it('should still provide controllers after upgrade', async () => { + const controllers = await setControllers(); + + await upgrade(); + + const newActor = pic.createActor(idlFactoryConsole, canisterId); + newActor.setIdentity(controller); + + const { list_controllers } = newActor; + + const controllersAfterUpgrade = await list_controllers(); + + for (const [principal, controller] of controllers) { + const entry = controllersAfterUpgrade.find(([p]) => p.toText() === principal.toText()); + + expect(entry).not.toBeUndefined(); + + expect(entry?.[1].metadata).toEqual(controller.metadata); + expect(entry?.[1].scope).toEqual(controller.scope); + expect(entry?.[1].expires_at).toEqual(controller.expires_at); + + expect(entry?.[1].kind).toEqual(toNullable()); + } + }); +}); diff --git a/src/tests/specs/mission-control/mission-control.spec.ts b/src/tests/specs/mission-control/mission-control.spec.ts index 7c194a782d..44bed4a89a 100644 --- a/src/tests/specs/mission-control/mission-control.spec.ts +++ b/src/tests/specs/mission-control/mission-control.spec.ts @@ -4,7 +4,7 @@ import { type MissionControlDid } from '$declarations'; import { PocketIc, type Actor } from '@dfinity/pic'; -import { fromNullable, toNullable } from '@dfinity/utils'; +import { assertNonNullish, fromNullable, toNullable } from '@dfinity/utils'; import { AnonymousIdentity } from '@icp-sdk/core/agent'; import { Ed25519KeyIdentity } from '@icp-sdk/core/identity'; import { inject } from 'vitest'; @@ -25,13 +25,20 @@ describe('Mission Control', () => { const userInitArgs = (): Uint8Array => missionControlUserInitArgs(controller.getPrincipal()); - const { actor: c } = await pic.setupCanister({ + const { actor: c, canisterId } = await pic.setupCanister({ idlFactory: idlFactoryMissionControl, wasm: MISSION_CONTROL_WASM_PATH, arg: userInitArgs(), sender: controller.getPrincipal() }); + // Mission Control needs to control itself to be able to set_mission_control_controllers + await pic.updateCanisterSettings({ + canisterId, + controllers: [controller.getPrincipal(), canisterId], + sender: controller.getPrincipal() + }); + actor = c; actor.setIdentity(controller); @@ -167,5 +174,45 @@ describe('Mission Control', () => { expect(user.created_at).toBeGreaterThan(0n); expect(user.updated_at).toBeGreaterThan(0n); }); + + it('should add and remove additional controller', async () => { + const { + set_mission_control_controllers, + list_mission_control_controllers, + del_mission_control_controllers + } = actor; + + const newController = Ed25519KeyIdentity.generate(); + + const controllerData: MissionControlDid.SetController = { + scope: { Admin: null }, + expires_at: [123n], + kind: [{ Automation: null }], + metadata: [['hello', 'world']] + }; + + await set_mission_control_controllers([newController.getPrincipal()], controllerData); + + const addControllers = await list_mission_control_controllers(); + + expect(addControllers).toHaveLength(1); + + const newAddedController = addControllers.find( + ([p]) => p.toText() === newController.getPrincipal().toText() + ); + + assertNonNullish(newAddedController); + + expect(newAddedController[1].metadata).toEqual(controllerData.metadata); + expect(newAddedController[1].scope).toEqual(controllerData.scope); + expect(newAddedController[1].expires_at).toEqual(controllerData.expires_at); + expect(newAddedController[1].kind).toEqual(controllerData.kind); + + await del_mission_control_controllers([newController.getPrincipal()]); + + const updatedControllers = await list_mission_control_controllers(); + + expect(updatedControllers).toHaveLength(0); + }); }); }); diff --git a/src/tests/specs/mission-control/upgrade/mission-control.upgrade-v0-2-0.spec.ts b/src/tests/specs/mission-control/upgrade/mission-control.upgrade-v0-2-0.spec.ts new file mode 100644 index 0000000000..a0b33a3472 --- /dev/null +++ b/src/tests/specs/mission-control/upgrade/mission-control.upgrade-v0-2-0.spec.ts @@ -0,0 +1,123 @@ +import { + type MissionControlActor, + type MissionControlActor0014, + type MissionControlDid0013, + idlFactoryMissionControl, + idlFactoryMissionControl0014 +} from '$declarations'; +import { type Actor, PocketIc } from '@dfinity/pic'; +import { toNullable } from '@dfinity/utils'; +import { Ed25519KeyIdentity } from '@icp-sdk/core/identity'; +import type { Principal } from '@icp-sdk/core/principal'; +import { inject } from 'vitest'; +import { missionControlUserInitArgs } from '../../../utils/mission-control-tests.utils'; +import { tick } from '../../../utils/pic-tests.utils'; +import { + downloadMissionControl, + MISSION_CONTROL_WASM_PATH +} from '../../../utils/setup-tests.utils'; + +describe('Mission Control > Upgrade > v0.1.2 -> v0.2.0', () => { + let pic: PocketIc; + let actor: Actor; + let canisterId: Principal; + + const controller = Ed25519KeyIdentity.generate(); + + const upgrade = async () => { + await tick(pic); + + await pic.upgradeCanister({ + canisterId, + wasm: MISSION_CONTROL_WASM_PATH, + sender: controller.getPrincipal() + }); + }; + + const setControllers = async (): Promise<[Principal, MissionControlDid0013.SetController][]> => { + const { set_mission_control_controllers } = actor; + + const user1 = Ed25519KeyIdentity.generate(); + const user2 = Ed25519KeyIdentity.generate(); + const admin1 = Ed25519KeyIdentity.generate(); + + const controllerWrite: MissionControlDid0013.SetController = { + scope: { Write: null }, + metadata: [['hello', 'world']], + expires_at: [] + }; + + const controllerAdmin: MissionControlDid0013.SetController = { + scope: { Admin: null }, + metadata: [['super', 'top']], + expires_at: [1n] + }; + + await set_mission_control_controllers( + [user1.getPrincipal(), user2.getPrincipal()], + controllerWrite + ); + + await set_mission_control_controllers([admin1.getPrincipal()], controllerAdmin); + + return [ + [user1.getPrincipal(), controllerWrite], + [user2.getPrincipal(), controllerWrite], + [admin1.getPrincipal(), controllerAdmin] + ]; + }; + + beforeEach(async () => { + pic = await PocketIc.create(inject('PIC_URL')); + + const destination = await downloadMissionControl('0.1.2'); + + const { actor: c, canisterId: mId } = await pic.setupCanister({ + idlFactory: idlFactoryMissionControl0014, + wasm: destination, + arg: missionControlUserInitArgs(controller.getPrincipal()), + sender: controller.getPrincipal() + }); + + // Mission Control needs to control itself to be able to set_mission_control_controllers + await pic.updateCanisterSettings({ + canisterId: mId, + controllers: [controller.getPrincipal(), mId], + sender: controller.getPrincipal() + }); + + actor = c; + canisterId = mId; + + actor.setIdentity(controller); + }); + + afterEach(async () => { + await pic?.tearDown(); + }); + + it('should still provide controllers after upgrade', async () => { + const controllers = await setControllers(); + + await upgrade(); + + const newActor = pic.createActor(idlFactoryMissionControl, canisterId); + newActor.setIdentity(controller); + + const { list_mission_control_controllers } = newActor; + + const controllersAfterUpgrade = await list_mission_control_controllers(); + + for (const [principal, controller] of controllers) { + const entry = controllersAfterUpgrade.find(([p]) => p.toText() === principal.toText()); + + expect(entry).not.toBeUndefined(); + + expect(entry?.[1].metadata).toEqual(controller.metadata); + expect(entry?.[1].scope).toEqual(controller.scope); + expect(entry?.[1].expires_at).toEqual(controller.expires_at); + + expect(entry?.[1].kind).toEqual(toNullable()); + } + }); +}); diff --git a/src/tests/specs/observatory/observatory.spec.ts b/src/tests/specs/observatory/observatory.spec.ts index f7e0171426..799344d3b1 100644 --- a/src/tests/specs/observatory/observatory.spec.ts +++ b/src/tests/specs/observatory/observatory.spec.ts @@ -6,10 +6,12 @@ import { Ed25519KeyIdentity } from '@icp-sdk/core/identity'; import { Principal } from '@icp-sdk/core/principal'; import { inject } from 'vitest'; import { GOOGLE_OPEN_ID_PROVIDER } from '../../constants/auth-tests.constants'; +import { CONTROLLER_METADATA } from '../../constants/controller-tests.constants'; import { CALLER_NOT_ANONYMOUS_MSG, CALLER_NOT_CONTROLLER_OBSERVATORY_MSG } from '../../constants/observatory-tests.constants'; +import { testControllers } from '../../utils/controllers-tests.utils'; import { OBSERVATORY_WASM_PATH } from '../../utils/setup-tests.utils'; describe('Observatory', () => { @@ -42,9 +44,8 @@ describe('Observatory', () => { await expect( set_controllers({ controller: { - scope: { Admin: null }, - metadata: [], - expires_at: [] + ...CONTROLLER_METADATA, + scope: { Admin: null } }, controllers: [controller.getPrincipal()] }) @@ -167,4 +168,15 @@ describe('Observatory', () => { testGuards(); }); + + describe('controller', () => { + beforeAll(() => { + actor.setIdentity(controller); + }); + + testControllers({ + actor: () => actor, + controller: () => controller + }); + }); }); diff --git a/src/tests/specs/observatory/upgrade/observatory.upgrade-v0-5-1.spec.ts b/src/tests/specs/observatory/upgrade/observatory.upgrade-v0-5-1.spec.ts new file mode 100644 index 0000000000..8c5e248e59 --- /dev/null +++ b/src/tests/specs/observatory/upgrade/observatory.upgrade-v0-5-1.spec.ts @@ -0,0 +1,116 @@ +import { + type ObservatoryActor, + type ObservatoryActor040, + type ObservatoryDid040, + idlFactoryObservatory, + idlFactoryObservatory040 +} from '$declarations'; +import { type Actor, PocketIc } from '@dfinity/pic'; +import { toNullable } from '@dfinity/utils'; +import { Ed25519KeyIdentity } from '@icp-sdk/core/identity'; +import type { Principal } from '@icp-sdk/core/principal'; +import { inject } from 'vitest'; +import { OBSERVATORY_ID } from '../../../constants/observatory-tests.constants'; +import { tick } from '../../../utils/pic-tests.utils'; +import { downloadObservatory, OBSERVATORY_WASM_PATH } from '../../../utils/setup-tests.utils'; + +describe('Observatory > Upgrade > v0.5.0 -> v0.5.1', () => { + let pic: PocketIc; + let actor: Actor; + let canisterId: Principal; + + const controller = Ed25519KeyIdentity.generate(); + + const upgrade = async () => { + await tick(pic); + + await pic.upgradeCanister({ + canisterId, + wasm: OBSERVATORY_WASM_PATH, + sender: controller.getPrincipal() + }); + }; + + const setControllers = async (): Promise<[Principal, ObservatoryDid040.SetController][]> => { + const { set_controllers } = actor; + + const user1 = Ed25519KeyIdentity.generate(); + const user2 = Ed25519KeyIdentity.generate(); + const admin1 = Ed25519KeyIdentity.generate(); + + const controllerWrite: ObservatoryDid040.SetController = { + scope: { Write: null }, + metadata: [['hello', 'world']], + expires_at: [] + }; + + const controllerAdmin: ObservatoryDid040.SetController = { + scope: { Admin: null }, + metadata: [['super', 'top']], + expires_at: [1n] + }; + + await set_controllers({ + controller: controllerWrite, + controllers: [user1.getPrincipal(), user2.getPrincipal()] + }); + + await set_controllers({ + controller: controllerAdmin, + controllers: [admin1.getPrincipal()] + }); + + return [ + [user1.getPrincipal(), controllerWrite], + [user2.getPrincipal(), controllerWrite], + [admin1.getPrincipal(), controllerAdmin] + ]; + }; + + beforeEach(async () => { + pic = await PocketIc.create(inject('PIC_URL')); + + const destination = await downloadObservatory({ junoVersion: '0.0.67', version: '0.5.0' }); + + const { actor: c, canisterId: cId } = await pic.setupCanister({ + idlFactory: idlFactoryObservatory040, + wasm: destination, + sender: controller.getPrincipal(), + targetCanisterId: OBSERVATORY_ID + }); + + actor = c; + canisterId = cId; + + actor.setIdentity(controller); + }); + + afterEach(async () => { + await pic?.tearDown(); + }); + + it('should still provide controllers after upgrade', async () => { + const controllers = await setControllers(); + + await upgrade(); + + const newActor = pic.createActor(idlFactoryObservatory, canisterId); + newActor.setIdentity(controller); + + const { list_controllers } = newActor; + + const controllersAfterUpgrade = await list_controllers(); + + for (const [principal, controller] of controllers) { + const entry = controllersAfterUpgrade.find(([p]) => p.toText() === principal.toText()); + + expect(entry).not.toBeUndefined(); + + expect(entry?.[1].metadata).toEqual(controller.metadata); + expect(entry?.[1].scope).toEqual(controller.scope); + expect(entry?.[1].expires_at).toEqual(controller.expires_at); + + expect(entry?.[1].kind).toEqual(toNullable()); + } + }); +}); diff --git a/src/tests/specs/orbiter/orbiter.spec.ts b/src/tests/specs/orbiter/orbiter.spec.ts index ab308c60e7..7193e00657 100644 --- a/src/tests/specs/orbiter/orbiter.spec.ts +++ b/src/tests/specs/orbiter/orbiter.spec.ts @@ -14,6 +14,7 @@ import { satelliteIdMock, trackEventMock } from '../../mocks/orbiter.mocks'; +import { testControllers } from '../../utils/controllers-tests.utils'; import { controllersInitArgs, ORBITER_WASM_PATH } from '../../utils/setup-tests.utils'; describe('Orbiter', () => { @@ -604,6 +605,11 @@ describe('Orbiter', () => { expect(result.total.find((entry) => entry[0] === 'my_event')?.[1]).toEqual(2); }); }); + + testControllers({ + actor: () => actor, + controller: () => controller + }); }); }); }); diff --git a/src/tests/specs/orbiter/upgrade/orbiter.upgrade-v0-2-4.spec.ts b/src/tests/specs/orbiter/upgrade/orbiter.upgrade-v0-2-4.spec.ts new file mode 100644 index 0000000000..b5716f1b1d --- /dev/null +++ b/src/tests/specs/orbiter/upgrade/orbiter.upgrade-v0-2-4.spec.ts @@ -0,0 +1,119 @@ +import { + type OrbiterActor, + type OrbiterActor020, + type OrbiterDid020, + idlFactoryOrbiter, + idlFactoryOrbiter020 +} from '$declarations'; +import { type Actor, PocketIc } from '@dfinity/pic'; +import { toNullable } from '@dfinity/utils'; +import { Ed25519KeyIdentity } from '@icp-sdk/core/identity'; +import type { Principal } from '@icp-sdk/core/principal'; +import { inject } from 'vitest'; +import { tick } from '../../../utils/pic-tests.utils'; +import { + controllersInitArgs, + downloadOrbiter, + ORBITER_WASM_PATH +} from '../../../utils/setup-tests.utils'; + +describe('Orbiter > Upgrade > v0.2.3 -> v0.2.4', () => { + let pic: PocketIc; + let actor: Actor; + let canisterId: Principal; + + const controller = Ed25519KeyIdentity.generate(); + + const upgrade = async () => { + await tick(pic); + + await pic.upgradeCanister({ + canisterId, + wasm: ORBITER_WASM_PATH, + sender: controller.getPrincipal() + }); + }; + + const setControllers = async (): Promise<[Principal, OrbiterDid020.SetController][]> => { + const { set_controllers } = actor; + + const user1 = Ed25519KeyIdentity.generate(); + const user2 = Ed25519KeyIdentity.generate(); + const admin1 = Ed25519KeyIdentity.generate(); + + const controllerWrite: OrbiterDid020.SetController = { + scope: { Write: null }, + metadata: [['hello', 'world']], + expires_at: [] + }; + + const controllerAdmin: OrbiterDid020.SetController = { + scope: { Admin: null }, + metadata: [['super', 'top']], + expires_at: [1n] + }; + + await set_controllers({ + controller: controllerWrite, + controllers: [user1.getPrincipal(), user2.getPrincipal()] + }); + + await set_controllers({ + controller: controllerAdmin, + controllers: [admin1.getPrincipal()] + }); + + return [ + [user1.getPrincipal(), controllerWrite], + [user2.getPrincipal(), controllerWrite], + [admin1.getPrincipal(), controllerAdmin] + ]; + }; + + beforeEach(async () => { + pic = await PocketIc.create(inject('PIC_URL')); + + const destination = await downloadOrbiter('0.0.7'); + + const { actor: c, canisterId: cId } = await pic.setupCanister({ + idlFactory: idlFactoryOrbiter020, + wasm: destination, + arg: controllersInitArgs(controller), + sender: controller.getPrincipal() + }); + + actor = c; + canisterId = cId; + + actor.setIdentity(controller); + }); + + afterEach(async () => { + await pic?.tearDown(); + }); + + it('should still provide controllers after upgrade', async () => { + const controllers = await setControllers(); + + await upgrade(); + + const newActor = pic.createActor(idlFactoryOrbiter, canisterId); + newActor.setIdentity(controller); + + const { list_controllers } = newActor; + + const controllersAfterUpgrade = await list_controllers(); + + for (const [principal, controller] of controllers) { + const entry = controllersAfterUpgrade.find(([p]) => p.toText() === principal.toText()); + + expect(entry).not.toBeUndefined(); + + expect(entry?.[1].metadata).toEqual(controller.metadata); + expect(entry?.[1].scope).toEqual(controller.scope); + expect(entry?.[1].expires_at).toEqual(controller.expires_at); + + expect(entry?.[1].kind).toEqual(toNullable()); + } + }); +}); diff --git a/src/tests/specs/satellite/stock/cdn/satellite.cdn.batch.spec.ts b/src/tests/specs/satellite/stock/cdn/satellite.cdn.batch.spec.ts index ecc7563721..88740a3dde 100644 --- a/src/tests/specs/satellite/stock/cdn/satellite.cdn.batch.spec.ts +++ b/src/tests/specs/satellite/stock/cdn/satellite.cdn.batch.spec.ts @@ -3,6 +3,7 @@ import { type Actor, PocketIc } from '@dfinity/pic'; import { Ed25519KeyIdentity } from '@icp-sdk/core/identity'; import type { Principal } from '@icp-sdk/core/principal'; import { inject } from 'vitest'; +import { CONTROLLER_METADATA } from '../../../../constants/controller-tests.constants'; import { testUploadProposalManyAssets } from '../../../../utils/cdn-assertions-tests.utils'; import { controllersInitArgs, SATELLITE_WASM_PATH } from '../../../../utils/setup-tests.utils'; @@ -66,9 +67,8 @@ describe('Satellite > Cdn > Batch', () => { await set_controllers({ controller: { - scope: { Write: null }, - metadata: [], - expires_at: [] + ...CONTROLLER_METADATA, + scope: { Write: null } }, controllers: [controllerReadWrite.getPrincipal()] }); diff --git a/src/tests/specs/satellite/stock/cdn/satellite.cdn.spec.ts b/src/tests/specs/satellite/stock/cdn/satellite.cdn.spec.ts index b4031e1556..8ea62b2d29 100644 --- a/src/tests/specs/satellite/stock/cdn/satellite.cdn.spec.ts +++ b/src/tests/specs/satellite/stock/cdn/satellite.cdn.spec.ts @@ -10,6 +10,7 @@ import { JUNO_AUTH_ERROR_NOT_WRITE_CONTROLLER, JUNO_STORAGE_ERROR_UPLOAD_PATH_COLLECTION_PREFIX } from '@junobuild/errors'; +import { CONTROLLER_METADATA } from '../../../../constants/controller-tests.constants'; import { MEMORIES } from '../../../../constants/satellite-tests.constants'; import { mockListProposalsParams } from '../../../../mocks/list.mocks'; import { @@ -159,9 +160,8 @@ describe.each(MEMORIES)('Satellite > Cdn > $title', ({ memory }) => { await set_controllers({ controller: { - scope: { Write: null }, - metadata: [], - expires_at: [] + ...CONTROLLER_METADATA, + scope: { Write: null } }, controllers: [controllerReadWrite.getPrincipal()] }); @@ -293,9 +293,8 @@ describe.each(MEMORIES)('Satellite > Cdn > $title', ({ memory }) => { await set_controllers({ controller: { - scope: { Submit: null }, - metadata: [], - expires_at: [] + ...CONTROLLER_METADATA, + scope: { Submit: null } }, controllers: [controllerSubmit.getPrincipal()] }); diff --git a/src/tests/specs/satellite/stock/satellite.controllers.spec.ts b/src/tests/specs/satellite/stock/satellite.controllers.spec.ts index 46b2b9de33..b6f2ed93cb 100644 --- a/src/tests/specs/satellite/stock/satellite.controllers.spec.ts +++ b/src/tests/specs/satellite/stock/satellite.controllers.spec.ts @@ -2,6 +2,7 @@ import { type SatelliteActor, idlFactorySatellite } from '$declarations'; import { type Actor, PocketIc } from '@dfinity/pic'; import { Ed25519KeyIdentity } from '@icp-sdk/core/identity'; import { inject } from 'vitest'; +import { CONTROLLER_METADATA } from '../../../constants/controller-tests.constants'; import { mockListParams } from '../../../mocks/list.mocks'; import { uploadAsset } from '../../../utils/satellite-storage-tests.utils'; import { controllersInitArgs, SATELLITE_WASM_PATH } from '../../../utils/setup-tests.utils'; @@ -59,9 +60,8 @@ describe('Satellite > Controllers', () => { await set_controllers({ controller: { - scope: { Submit: null }, - metadata: [], - expires_at: [] + ...CONTROLLER_METADATA, + scope: { Submit: null } }, controllers: [controllerSubmit.getPrincipal()] }); diff --git a/src/tests/specs/satellite/stock/satellite.spec.ts b/src/tests/specs/satellite/stock/satellite.spec.ts index 836af30542..956c516713 100644 --- a/src/tests/specs/satellite/stock/satellite.spec.ts +++ b/src/tests/specs/satellite/stock/satellite.spec.ts @@ -16,7 +16,9 @@ import { JUNO_STORAGE_ERROR_UPLOAD_NOT_ALLOWED } from '@junobuild/errors'; import { inject } from 'vitest'; +import { CONTROLLER_METADATA } from '../../../constants/controller-tests.constants'; import { mockListRules } from '../../../mocks/list.mocks'; +import { testControllers } from '../../../utils/controllers-tests.utils'; import { controllersInitArgs, SATELLITE_WASM_PATH } from '../../../utils/setup-tests.utils'; describe('Satellite', () => { @@ -209,38 +211,9 @@ describe('Satellite', () => { expect(items_length).toEqual(1n); }); - it('should add and remove additional controller', async () => { - const { set_controllers, del_controllers, list_controllers } = actor; - - const newController = Ed25519KeyIdentity.generate(); - - const controllers = await set_controllers({ - controllers: [newController.getPrincipal()], - controller: { - expires_at: toNullable(), - metadata: [], - scope: { Admin: null } - } - }); - - expect(controllers).toHaveLength(2); - - expect( - controllers.find(([p]) => p.toText() === controller.getPrincipal().toText()) - ).not.toBeUndefined(); - - expect( - controllers.find(([p]) => p.toText() === newController.getPrincipal().toText()) - ).not.toBeUndefined(); - - await del_controllers({ - controllers: [newController.getPrincipal()] - }); - - const updatedControllers = await list_controllers(); - - expect(updatedControllers).toHaveLength(1); - expect(updatedControllers[0][0].toText()).toEqual(controller.getPrincipal().toText()); + testControllers({ + actor: () => actor, + controller: () => controller }); describe.each([ @@ -733,8 +706,7 @@ describe('Satellite', () => { set_controllers({ controllers: [controller.getPrincipal()], controller: { - expires_at: toNullable(), - metadata: [], + ...CONTROLLER_METADATA, scope: { Admin: null } } }) diff --git a/src/tests/specs/satellite/stock/upgrade/satellite.upgrade-v0-2-0.spec.ts b/src/tests/specs/satellite/stock/upgrade/satellite.upgrade-v0-2-0.spec.ts new file mode 100644 index 0000000000..5265068b58 --- /dev/null +++ b/src/tests/specs/satellite/stock/upgrade/satellite.upgrade-v0-2-0.spec.ts @@ -0,0 +1,119 @@ +import { + type SatelliteActor, + type SatelliteActor016, + type SatelliteDid016, + idlFactorySatellite, + idlFactorySatellite016 +} from '$declarations'; +import { type Actor, PocketIc } from '@dfinity/pic'; +import { toNullable } from '@dfinity/utils'; +import { Ed25519KeyIdentity } from '@icp-sdk/core/identity'; +import type { Principal } from '@icp-sdk/core/principal'; +import { inject } from 'vitest'; +import { tick } from '../../../../utils/pic-tests.utils'; +import { + controllersInitArgs, + downloadSatellite, + SATELLITE_WASM_PATH +} from '../../../../utils/setup-tests.utils'; + +describe('Satellite > Upgrade > v0.1.6 -> v0.2.0', () => { + let pic: PocketIc; + let actor: Actor; + let canisterId: Principal; + + const controller = Ed25519KeyIdentity.generate(); + + const upgrade = async () => { + await tick(pic); + + await pic.upgradeCanister({ + canisterId, + wasm: SATELLITE_WASM_PATH, + sender: controller.getPrincipal() + }); + }; + + const setControllers = async (): Promise<[Principal, SatelliteDid016.SetController][]> => { + const { set_controllers } = actor; + + const user1 = Ed25519KeyIdentity.generate(); + const user2 = Ed25519KeyIdentity.generate(); + const admin1 = Ed25519KeyIdentity.generate(); + + const controllerWrite: SatelliteDid016.SetController = { + scope: { Write: null }, + metadata: [['hello', 'world']], + expires_at: [] + }; + + const controllerAdmin: SatelliteDid016.SetController = { + scope: { Admin: null }, + metadata: [['super', 'top']], + expires_at: [1n] + }; + + await set_controllers({ + controller: controllerWrite, + controllers: [user1.getPrincipal(), user2.getPrincipal()] + }); + + await set_controllers({ + controller: controllerAdmin, + controllers: [admin1.getPrincipal()] + }); + + return [ + [user1.getPrincipal(), controllerWrite], + [user2.getPrincipal(), controllerWrite], + [admin1.getPrincipal(), controllerAdmin] + ]; + }; + + beforeEach(async () => { + pic = await PocketIc.create(inject('PIC_URL')); + + const destination = await downloadSatellite('0.1.6'); + + const { actor: c, canisterId: cId } = await pic.setupCanister({ + idlFactory: idlFactorySatellite016, + wasm: destination, + arg: controllersInitArgs(controller), + sender: controller.getPrincipal() + }); + + actor = c; + canisterId = cId; + + actor.setIdentity(controller); + }); + + afterEach(async () => { + await pic?.tearDown(); + }); + + it('should still provide controllers after upgrade', async () => { + const controllers = await setControllers(); + + await upgrade(); + + const newActor = pic.createActor(idlFactorySatellite, canisterId); + newActor.setIdentity(controller); + + const { list_controllers } = newActor; + + const controllersAfterUpgrade = await list_controllers(); + + for (const [principal, controller] of controllers) { + const entry = controllersAfterUpgrade.find(([p]) => p.toText() === principal.toText()); + + expect(entry).not.toBeUndefined(); + + expect(entry?.[1].metadata).toEqual(controller.metadata); + expect(entry?.[1].scope).toEqual(controller.scope); + expect(entry?.[1].expires_at).toEqual(controller.expires_at); + + expect(entry?.[1].kind).toEqual(toNullable()); + } + }); +}); diff --git a/src/tests/specs/satellite/stock/user/satellite.user.spec.ts b/src/tests/specs/satellite/stock/user/satellite.user.spec.ts index 507dea2fd5..a12a9f8d6b 100644 --- a/src/tests/specs/satellite/stock/user/satellite.user.spec.ts +++ b/src/tests/specs/satellite/stock/user/satellite.user.spec.ts @@ -16,6 +16,7 @@ import { } from '@junobuild/errors'; import { fromArray, toArray } from '@junobuild/utils'; import { inject } from 'vitest'; +import { CONTROLLER_METADATA } from '../../../../constants/controller-tests.constants'; import { controllersInitArgs, SATELLITE_WASM_PATH } from '../../../../utils/setup-tests.utils'; describe('Satellite > User', () => { @@ -454,9 +455,8 @@ describe('Satellite > User', () => { await set_controllers({ controller: { - scope: { Write: null }, - metadata: [], - expires_at: [] + ...CONTROLLER_METADATA, + scope: { Write: null } }, controllers: [controllerReadWrite.getPrincipal()] }); diff --git a/src/tests/specs/sputnik/sputnik.sdk.controllers.spec.ts b/src/tests/specs/sputnik/sputnik.sdk.controllers.spec.ts index 1ef941b90d..c92c652652 100644 --- a/src/tests/specs/sputnik/sputnik.sdk.controllers.spec.ts +++ b/src/tests/specs/sputnik/sputnik.sdk.controllers.spec.ts @@ -3,6 +3,7 @@ import type { Actor, PocketIc } from '@dfinity/pic'; import { assertNonNullish, jsonReplacer, jsonReviver } from '@dfinity/utils'; import type { Identity } from '@icp-sdk/core/agent'; import { Principal } from '@icp-sdk/core/principal'; +import { CONTROLLER_METADATA } from '../../constants/controller-tests.constants'; import { mockSetRule } from '../../mocks/collection.mocks'; import { setupTestSputnik } from '../../utils/fixtures-tests.utils'; import { createUser as createUserUtils } from '../../utils/satellite-doc-tests.utils'; @@ -217,9 +218,9 @@ describe('Sputnik > sdk > controllers', () => { await set_controllers({ controller: { + ...CONTROLLER_METADATA, scope: { Write: null }, - metadata: [['hello', 'world']], - expires_at: [] + metadata: [['hello', 'world']] }, controllers: [user.getPrincipal()] }); diff --git a/src/tests/utils/auth-identity-tests.utils.ts b/src/tests/utils/auth-identity-tests.utils.ts index 49a8eaf1f9..c425438c45 100644 --- a/src/tests/utils/auth-identity-tests.utils.ts +++ b/src/tests/utils/auth-identity-tests.utils.ts @@ -1,4 +1,4 @@ -import type { ConsoleActor, SatelliteActor } from '$declarations'; +import type { ConsoleActor, ConsoleActor033, SatelliteActor } from '$declarations'; import type { _SERVICE as TestSatelliteActor } from '$test-declarations/test_satellite/test_satellite.did'; import type { Actor, PocketIc } from '@dfinity/pic'; import { fromNullable } from '@dfinity/utils'; @@ -31,7 +31,7 @@ export const authenticateAndMakeIdentity = async ({ }: { pic: PocketIc; session: TestSession; - actor: Actor; + actor: Actor; method?: 'google' | 'github'; }): Promise< { diff --git a/src/tests/utils/console-tests.utils.ts b/src/tests/utils/console-tests.utils.ts index a79b2fc6ca..471d3d5fba 100644 --- a/src/tests/utils/console-tests.utils.ts +++ b/src/tests/utils/console-tests.utils.ts @@ -4,6 +4,7 @@ import { type ConsoleActor008, type ConsoleActor015, type ConsoleActor020, + type ConsoleActor033, type ConsoleDid, type MissionControlActor, idlFactoryConsole, @@ -81,7 +82,9 @@ const uploadSegment = async ({ }: { segment: 'satellite' | 'mission_control' | 'orbiter'; version: string; - actor: Actor; + actor: Actor< + ConsoleActor | ConsoleActor0014 | ConsoleActor015 | ConsoleActor020 | ConsoleActor033 + >; proposalId: bigint; }) => { const init_proposal_asset_upload = @@ -200,7 +203,9 @@ export const deploySegments = async ({ withMissionControl = true, withSatellite = true }: { - actor: Actor; + actor: Actor< + ConsoleActor | ConsoleActor0014 | ConsoleActor015 | ConsoleActor020 | ConsoleActor033 + >; withOrbiter?: boolean; withMissionControl?: boolean; withSatellite?: boolean; diff --git a/src/tests/utils/controllers-tests.utils.ts b/src/tests/utils/controllers-tests.utils.ts new file mode 100644 index 0000000000..354b97674f --- /dev/null +++ b/src/tests/utils/controllers-tests.utils.ts @@ -0,0 +1,67 @@ +import type { + ConsoleActor, + ObservatoryActor, + OrbiterActor, + OrbiterDid, + SatelliteActor +} from '$declarations'; +import type { Actor } from '@dfinity/pic'; +import { assertNonNullish } from '@dfinity/utils'; +import type { Identity } from '@icp-sdk/core/agent'; +import { Ed25519KeyIdentity } from '@icp-sdk/core/identity'; + +/* eslint-disable vitest/require-top-level-describe */ + +export const testControllers = ({ + actor, + controller +}: { + actor: () => Actor; + controller: () => Identity; +}) => { + it('should add and remove additional controller', async () => { + const { set_controllers, del_controllers, list_controllers } = actor(); + + const newController = Ed25519KeyIdentity.generate(); + + const controllerData: OrbiterDid.SetController = { + scope: { Admin: null }, + expires_at: [123n], + kind: [{ Automation: null }], + metadata: [['hello', 'world']] + }; + + await set_controllers({ + controllers: [newController.getPrincipal()], + controller: controllerData + }); + + const addControllers = await list_controllers(); + + expect(addControllers).toHaveLength(2); + + expect( + addControllers.find(([p]) => p.toText() === controller().getPrincipal().toText()) + ).not.toBeUndefined(); + + const newAddedController = addControllers.find( + ([p]) => p.toText() === newController.getPrincipal().toText() + ); + + assertNonNullish(newAddedController); + + expect(newAddedController[1].metadata).toEqual(controllerData.metadata); + expect(newAddedController[1].scope).toEqual(controllerData.scope); + expect(newAddedController[1].expires_at).toEqual(controllerData.expires_at); + expect(newAddedController[1].kind).toEqual(controllerData.kind); + + await del_controllers({ + controllers: [newController.getPrincipal()] + }); + + const updatedControllers = await list_controllers(); + + expect(updatedControllers).toHaveLength(1); + expect(updatedControllers[0][0].toText()).toEqual(controller().getPrincipal().toText()); + }); +};