1#![doc = include_str!("../README.md")]
2
3mod api;
4mod assets;
5mod auth;
6mod automation;
7mod certification;
8mod controllers;
9mod db;
10mod errors;
11mod guards;
12mod hooks;
13mod impls;
14mod logs;
15mod memory;
16mod random;
17mod rules;
18mod sdk;
19mod types;
20mod user;
21
22use crate::db::types::config::DbConfig;
23use crate::db::types::interface::SetDbConfig;
24use crate::guards::{
25 caller_is_admin_controller, caller_is_controller_with_write, caller_is_valid_controller,
26};
27use crate::types::interface::{
28 AuthenticateAutomationResultResponse, AuthenticateResultResponse, AuthenticationArgs, Config,
29 DeleteProposalAssets, GetDelegationArgs, GetDelegationResultResponse,
30};
31use crate::types::state::CollectionType;
32use automation::types::AuthenticateAutomationArgs;
33use ic_cdk_macros::{init, post_upgrade, pre_upgrade, query, update};
34use junobuild_auth::state::types::automation::AutomationConfig;
35use junobuild_auth::state::types::config::AuthenticationConfig;
36use junobuild_auth::state::types::interface::{SetAuthenticationConfig, SetAutomationConfig};
37use junobuild_cdn::proposals::{
38 CommitProposal, ListProposalResults, ListProposalsParams, Proposal, ProposalId, ProposalType,
39 RejectProposal,
40};
41use junobuild_collections::types::core::CollectionKey;
42use junobuild_collections::types::interface::{
43 DelRule, ListRulesParams, ListRulesResults, SetRule,
44};
45use junobuild_collections::types::rules::Rule;
46use junobuild_shared::ic::response::ManualReply;
47use junobuild_shared::ic::UnwrapOrTrap;
48use junobuild_shared::types::core::DomainName;
49use junobuild_shared::types::core::Key;
50use junobuild_shared::types::domain::CustomDomains;
51use junobuild_shared::types::interface::{
52 DeleteControllersArgs, DepositCyclesArgs, InitSatelliteArgs, MemorySize, SetControllersArgs,
53};
54use junobuild_shared::types::list::ListParams;
55use junobuild_shared::types::list::ListResults;
56use junobuild_shared::types::state::Controllers;
57use junobuild_storage::http::types::{
58 HttpRequest, HttpResponse, StreamingCallbackHttpResponse, StreamingCallbackToken,
59};
60use junobuild_storage::types::config::StorageConfig;
61use junobuild_storage::types::interface::{
62 AssetNoContent, CommitBatch, InitAssetKey, InitUploadResult, SetStorageConfig, UploadChunk,
63 UploadChunkResult,
64};
65use junobuild_storage::types::state::{AssetAccessToken, FullPath};
66use memory::lifecycle;
67
68pub use sdk::core::*;
72pub use sdk::internal;
73
74#[doc(hidden)]
79#[init]
80pub fn init(args: InitSatelliteArgs) {
81 lifecycle::init(args);
82}
83
84#[doc(hidden)]
85#[pre_upgrade]
86pub fn pre_upgrade() {
87 lifecycle::pre_upgrade();
88}
89
90#[doc(hidden)]
91#[post_upgrade]
92pub fn post_upgrade() {
93 lifecycle::post_upgrade();
94}
95
96#[doc(hidden)]
101#[update]
102pub fn set_doc(collection: CollectionKey, key: Key, doc: SetDoc) -> Doc {
103 api::db::set_doc(collection, key, doc)
104}
105
106#[doc(hidden)]
107#[query]
108pub fn get_doc(collection: CollectionKey, key: Key) -> Option<Doc> {
109 api::db::get_doc(collection, key)
110}
111
112#[doc(hidden)]
113#[update]
114pub fn del_doc(collection: CollectionKey, key: Key, doc: DelDoc) {
115 api::db::del_doc(collection, key, doc);
116}
117
118#[doc(hidden)]
119#[query]
120pub fn list_docs(collection: CollectionKey, filter: ListParams) -> ListResults<Doc> {
121 api::db::list_docs(collection, filter)
122}
123
124#[doc(hidden)]
125#[query]
126pub fn count_docs(collection: CollectionKey, filter: ListParams) -> usize {
127 api::db::count_docs(collection, filter)
128}
129
130#[doc(hidden)]
131#[query]
132pub fn get_many_docs(docs: Vec<(CollectionKey, Key)>) -> Vec<(Key, Option<Doc>)> {
133 api::db::get_many_docs(docs)
134}
135
136#[doc(hidden)]
137#[update]
138pub fn set_many_docs(docs: Vec<(CollectionKey, Key, SetDoc)>) -> Vec<(Key, Doc)> {
139 api::db::set_many_docs(docs)
140}
141
142#[doc(hidden)]
143#[update]
144pub fn del_many_docs(docs: Vec<(CollectionKey, Key, DelDoc)>) {
145 api::db::del_many_docs(docs)
146}
147
148#[doc(hidden)]
149#[update]
150pub fn del_filtered_docs(collection: CollectionKey, filter: ListParams) {
151 api::db::del_filtered_docs(collection, filter)
152}
153
154#[doc(hidden)]
155#[update(guard = "caller_is_controller_with_write")]
156pub fn del_docs(collection: CollectionKey) {
157 api::db::del_docs(collection)
158}
159
160#[doc(hidden)]
161#[query(guard = "caller_is_controller_with_write")]
162pub fn count_collection_docs(collection: CollectionKey) -> usize {
163 api::db::count_collection_docs(collection)
164}
165
166#[doc(hidden)]
171#[update]
172pub async fn authenticate(args: AuthenticationArgs) -> AuthenticateResultResponse {
173 api::auth::authenticate(&args).await.into()
174}
175
176#[doc(hidden)]
177#[query]
178pub fn get_delegation(args: GetDelegationArgs) -> GetDelegationResultResponse {
179 api::auth::get_delegation(&args).into()
180}
181
182#[doc(hidden)]
183#[update]
184pub async fn authenticate_automation(
185 args: AuthenticateAutomationArgs,
186) -> AuthenticateAutomationResultResponse {
187 api::automation::authenticate_automation(args).await.into()
188}
189
190#[doc(hidden)]
195#[query(guard = "caller_is_admin_controller")]
196pub fn get_rule(collection_type: CollectionType, collection: CollectionKey) -> Option<Rule> {
197 api::rules::get_rule(&collection_type, &collection)
198}
199
200#[doc(hidden)]
201#[query(guard = "caller_is_admin_controller")]
202pub fn list_rules(collection_type: CollectionType, filter: ListRulesParams) -> ListRulesResults {
203 api::rules::list_rules(&collection_type, &filter)
204}
205
206#[doc(hidden)]
207#[update(guard = "caller_is_admin_controller")]
208pub fn set_rule(collection_type: CollectionType, collection: CollectionKey, rule: SetRule) -> Rule {
209 api::rules::set_rule(collection_type, collection, rule)
210}
211
212#[doc(hidden)]
213#[update(guard = "caller_is_admin_controller")]
214pub fn del_rule(collection_type: CollectionType, collection: CollectionKey, rule: DelRule) {
215 api::rules::del_rule(collection_type, collection, rule)
216}
217
218#[doc(hidden)]
219#[update(guard = "caller_is_admin_controller")]
220pub fn switch_storage_system_memory() {
221 api::rules::switch_storage_system_memory()
222}
223
224#[doc(hidden)]
229#[update(guard = "caller_is_admin_controller")]
230pub fn set_controllers(args: SetControllersArgs) -> Controllers {
231 api::controllers::set_controllers(args)
232}
233
234#[doc(hidden)]
235#[update(guard = "caller_is_admin_controller")]
236pub fn del_controllers(args: DeleteControllersArgs) -> Controllers {
237 api::controllers::del_controllers(args)
238}
239
240#[doc(hidden)]
241#[update(guard = "caller_is_valid_controller")]
242pub fn del_controller_self() {
243 api::controllers::del_controller_self()
244}
245
246#[doc(hidden)]
247#[query(guard = "caller_is_admin_controller")]
248pub fn list_controllers() -> Controllers {
249 api::controllers::list_controllers()
250}
251
252#[doc(hidden)]
257#[query(guard = "caller_is_valid_controller")]
258pub fn get_proposal(proposal_id: ProposalId) -> Option<Proposal> {
259 api::cdn::get_proposal(&proposal_id)
260}
261
262#[doc(hidden)]
263#[query(guard = "caller_is_valid_controller")]
264pub fn list_proposals(filter: ListProposalsParams) -> ListProposalResults {
265 api::cdn::list_proposals(&filter)
266}
267
268#[doc(hidden)]
269#[query(guard = "caller_is_valid_controller")]
270pub fn count_proposals() -> usize {
271 api::cdn::count_proposals()
272}
273
274#[doc(hidden)]
275#[update(guard = "caller_is_valid_controller")]
276pub fn init_proposal(proposal_type: ProposalType) -> (ProposalId, Proposal) {
277 api::cdn::init_proposal(&proposal_type)
278}
279
280#[doc(hidden)]
281#[update(guard = "caller_is_valid_controller")]
282pub fn submit_proposal(proposal_id: ProposalId) -> (ProposalId, Proposal) {
283 api::cdn::submit_proposal(&proposal_id)
284}
285
286#[doc(hidden)]
287#[update(guard = "caller_is_controller_with_write", manual_reply = true)]
288pub fn reject_proposal(proposal: RejectProposal) -> ManualReply<()> {
289 api::cdn::reject_proposal(&proposal)
290}
291
292#[doc(hidden)]
293#[update(guard = "caller_is_controller_with_write", manual_reply = true)]
294pub fn commit_proposal(proposal: CommitProposal) -> ManualReply<()> {
295 api::cdn::commit_proposal(&proposal)
296}
297
298#[doc(hidden)]
299#[update(guard = "caller_is_controller_with_write")]
300pub fn delete_proposal_assets(params: DeleteProposalAssets) {
301 api::cdn::delete_proposal_assets(¶ms)
302}
303
304#[doc(hidden)]
309#[update(guard = "caller_is_valid_controller")]
310pub fn init_proposal_asset_upload(init: InitAssetKey, proposal_id: ProposalId) -> InitUploadResult {
311 api::cdn::init_proposal_asset_upload(init, proposal_id)
312}
313
314#[doc(hidden)]
315#[update(guard = "caller_is_valid_controller")]
316pub fn init_proposal_many_assets_upload(
317 init_asset_keys: Vec<InitAssetKey>,
318 proposal_id: ProposalId,
319) -> Vec<(FullPath, InitUploadResult)> {
320 api::cdn::init_proposal_many_assets_upload(init_asset_keys, proposal_id)
321}
322
323#[doc(hidden)]
324#[update(guard = "caller_is_valid_controller")]
325pub fn upload_proposal_asset_chunk(chunk: UploadChunk) -> UploadChunkResult {
326 api::cdn::upload_proposal_asset_chunk(chunk)
327}
328
329#[doc(hidden)]
330#[update(guard = "caller_is_valid_controller")]
331pub fn commit_proposal_asset_upload(commit: CommitBatch) {
332 api::cdn::commit_proposal_asset_upload(commit)
333}
334
335#[doc(hidden)]
336#[update(guard = "caller_is_valid_controller")]
337pub fn commit_proposal_many_assets_upload(commits: Vec<CommitBatch>) {
338 api::cdn::commit_proposal_many_assets_upload(commits)
339}
340
341#[doc(hidden)]
346#[query(guard = "caller_is_admin_controller")]
347pub fn list_custom_domains() -> CustomDomains {
348 api::cdn::list_custom_domains()
349}
350
351#[doc(hidden)]
352#[update(guard = "caller_is_admin_controller")]
353pub fn set_custom_domain(domain_name: DomainName, bn_id: Option<String>) {
354 api::cdn::set_custom_domain(domain_name, bn_id);
355}
356
357#[doc(hidden)]
358#[update(guard = "caller_is_admin_controller")]
359pub fn del_custom_domain(domain_name: DomainName) {
360 api::cdn::del_custom_domain(domain_name);
361}
362
363#[doc(hidden)]
368#[update(guard = "caller_is_admin_controller")]
369pub fn get_config() -> Config {
370 api::config::get_config()
371}
372
373#[doc(hidden)]
378#[update(guard = "caller_is_admin_controller")]
379pub async fn set_auth_config(config: SetAuthenticationConfig) -> AuthenticationConfig {
380 api::config::set_auth_config(config).await
381}
382
383#[doc(hidden)]
384#[query(guard = "caller_is_admin_controller")]
385pub fn get_auth_config() -> Option<AuthenticationConfig> {
386 api::config::get_auth_config()
387}
388
389#[doc(hidden)]
394#[update(guard = "caller_is_admin_controller")]
395pub async fn set_automation_config(config: SetAutomationConfig) -> AutomationConfig {
396 api::config::set_automation_config(config).await
397}
398
399#[doc(hidden)]
400#[query(guard = "caller_is_admin_controller")]
401pub fn get_automation_config() -> Option<AutomationConfig> {
402 api::config::get_automation_config()
403}
404
405#[doc(hidden)]
410#[update(guard = "caller_is_admin_controller")]
411pub fn set_db_config(config: SetDbConfig) -> DbConfig {
412 api::config::set_db_config(config)
413}
414
415#[doc(hidden)]
416#[query(guard = "caller_is_admin_controller")]
417pub fn get_db_config() -> Option<DbConfig> {
418 api::config::get_db_config()
419}
420
421#[doc(hidden)]
426#[update(guard = "caller_is_admin_controller")]
427pub fn set_storage_config(config: SetStorageConfig) -> StorageConfig {
428 api::config::set_storage_config(config)
429}
430
431#[doc(hidden)]
432#[query(guard = "caller_is_admin_controller")]
433pub fn get_storage_config() -> StorageConfig {
434 api::config::get_storage_config()
435}
436
437#[doc(hidden)]
442#[query]
443pub fn http_request(request: HttpRequest) -> HttpResponse {
444 api::http::http_request(request)
445}
446
447#[doc(hidden)]
448#[query]
449pub fn http_request_streaming_callback(
450 callback: StreamingCallbackToken,
451) -> StreamingCallbackHttpResponse {
452 api::http::http_request_streaming_callback(callback)
453}
454
455#[doc(hidden)]
460#[update]
461pub fn init_asset_upload(init: InitAssetKey) -> InitUploadResult {
462 api::storage::init_asset_upload(init)
463}
464
465#[doc(hidden)]
466#[update]
467pub fn upload_asset_chunk(chunk: UploadChunk) -> UploadChunkResult {
468 api::storage::upload_asset_chunk(chunk)
469}
470
471#[doc(hidden)]
472#[update]
473pub fn commit_asset_upload(commit: CommitBatch) {
474 api::storage::commit_asset_upload(commit);
475}
476
477#[doc(hidden)]
478#[query]
479pub fn list_assets(collection: CollectionKey, filter: ListParams) -> ListResults<AssetNoContent> {
480 api::storage::list_assets(collection, filter)
481}
482
483#[doc(hidden)]
484#[query]
485pub fn count_assets(collection: CollectionKey, filter: ListParams) -> usize {
486 api::storage::count_assets(collection, filter)
487}
488
489#[doc(hidden)]
490#[update]
491pub fn del_asset(collection: CollectionKey, full_path: FullPath) {
492 api::storage::del_asset(collection, full_path);
493}
494
495#[doc(hidden)]
496#[update]
497pub fn del_many_assets(assets: Vec<(CollectionKey, String)>) {
498 api::storage::del_many_assets(assets);
499}
500
501#[doc(hidden)]
502#[update]
503pub fn del_filtered_assets(collection: CollectionKey, filter: ListParams) {
504 api::storage::del_filtered_assets(collection, filter)
505}
506
507#[doc(hidden)]
508#[update(guard = "caller_is_controller_with_write")]
509pub fn del_assets(collection: CollectionKey) {
510 api::storage::del_assets(collection);
511}
512
513#[doc(hidden)]
514#[update]
515pub fn set_asset_token(collection: CollectionKey, full_path: FullPath, token: AssetAccessToken) {
516 api::storage::set_asset_token(collection, full_path, token);
517}
518
519#[doc(hidden)]
520#[query(guard = "caller_is_controller_with_write")]
521pub fn count_collection_assets(collection: CollectionKey) -> usize {
522 api::storage::count_collection_assets(collection)
523}
524
525#[doc(hidden)]
526#[query]
527pub fn get_asset(collection: CollectionKey, full_path: FullPath) -> Option<AssetNoContent> {
528 api::storage::get_asset(collection, full_path)
529}
530
531#[doc(hidden)]
532#[query]
533pub fn get_many_assets(
534 assets: Vec<(CollectionKey, FullPath)>,
535) -> Vec<(FullPath, Option<AssetNoContent>)> {
536 api::storage::get_many_assets(assets)
537}
538
539#[doc(hidden)]
544#[update(guard = "caller_is_admin_controller")]
545pub async fn deposit_cycles(args: DepositCyclesArgs) {
546 junobuild_shared::mgmt::ic::deposit_cycles(args)
547 .await
548 .unwrap_or_trap()
549}
550
551#[doc(hidden)]
552#[query(guard = "caller_is_valid_controller")]
553pub fn memory_size() -> MemorySize {
554 junobuild_shared::segments::utils::memory_size()
555}
556
557#[macro_export]
573macro_rules! include_satellite {
574 () => {
575 use junobuild_satellite::{
576 authenticate, authenticate_automation, commit_asset_upload, commit_proposal,
577 commit_proposal_asset_upload, commit_proposal_many_assets_upload, count_assets,
578 count_collection_assets, count_collection_docs, count_docs, count_proposals, del_asset,
579 del_assets, del_controller_self, del_controllers, del_custom_domain, del_doc, del_docs,
580 del_filtered_assets, del_filtered_docs, del_many_assets, del_many_docs, del_rule,
581 delete_proposal_assets, deposit_cycles, get_asset, get_auth_config,
582 get_automation_config, get_config, get_db_config, get_delegation, get_doc,
583 get_many_assets, get_many_docs, get_proposal, get_storage_config, http_request,
584 http_request_streaming_callback, init, init_asset_upload, init_proposal,
585 init_proposal_asset_upload, init_proposal_many_assets_upload, list_assets,
586 list_controllers, list_custom_domains, list_docs, list_proposals, list_rules,
587 post_upgrade, pre_upgrade, reject_proposal, set_asset_token, set_auth_config,
588 set_automation_config, set_controllers, set_custom_domain, set_db_config, set_doc,
589 set_many_docs, set_rule, set_storage_config, submit_proposal,
590 switch_storage_system_memory, upload_asset_chunk, upload_proposal_asset_chunk,
591 };
592
593 ic_cdk::export_candid!();
594 };
595}