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