@allbluecn/admin-app 0.2.4 → 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/package.json +5 -5
- package/src/components/invitations/invitations-page.tsx +527 -0
- package/src/components/layout/sidebar-02/app-sidebar.tsx +4 -0
- package/src/components/oauth-providers/provider-page.tsx +324 -0
- package/src/paraglide/.gitignore +3 -0
- package/src/paraglide/.prettierignore +3 -0
- package/src/paraglide/README.md +162 -0
- package/src/paraglide/messages/_index.js +1076 -0
- package/src/paraglide/messages/admin_ai_action_addprovider1.js +30 -0
- package/src/paraglide/messages/admin_ai_action_editprovider1.js +30 -0
- package/src/paraglide/messages/admin_ai_action_managemodels1.js +30 -0
- package/src/paraglide/messages/admin_ai_action_testconnection1.js +30 -0
- package/src/paraglide/messages/admin_ai_action_toggleenabled1.js +30 -0
- package/src/paraglide/messages/admin_ai_form_adapterkind1.js +30 -0
- package/src/paraglide/messages/admin_ai_form_adapterkinddesc2.js +30 -0
- package/src/paraglide/messages/admin_ai_form_addprovider1.js +30 -0
- package/src/paraglide/messages/admin_ai_form_apikeyplaceholder1.js +30 -0
- package/src/paraglide/messages/admin_ai_form_badge.js +30 -0
- package/src/paraglide/messages/admin_ai_form_badgedesc1.js +30 -0
- package/src/paraglide/messages/admin_ai_form_badgeplaceholder1.js +30 -0
- package/src/paraglide/messages/admin_ai_form_basicinfo1.js +30 -0
- package/src/paraglide/messages/admin_ai_form_brandcolor1.js +30 -0
- package/src/paraglide/messages/admin_ai_form_brandcolordesc2.js +30 -0
- package/src/paraglide/messages/admin_ai_form_brandname1.js +30 -0
- package/src/paraglide/messages/admin_ai_form_brandnamedesc2.js +30 -0
- package/src/paraglide/messages/admin_ai_form_category.js +30 -0
- package/src/paraglide/messages/admin_ai_form_defaultbaseurl2.js +30 -0
- package/src/paraglide/messages/admin_ai_form_defaultbaseurldesc3.js +30 -0
- package/src/paraglide/messages/admin_ai_form_description.js +30 -0
- package/src/paraglide/messages/admin_ai_form_descriptiondesc1.js +30 -0
- package/src/paraglide/messages/admin_ai_form_displayname1.js +30 -0
- package/src/paraglide/messages/admin_ai_form_displaynamedesc2.js +30 -0
- package/src/paraglide/messages/admin_ai_form_docsurl1.js +30 -0
- package/src/paraglide/messages/admin_ai_form_editprovider1.js +30 -0
- package/src/paraglide/messages/admin_ai_form_iconslug1.js +30 -0
- package/src/paraglide/messages/admin_ai_form_iconslugdesc2.js +30 -0
- package/src/paraglide/messages/admin_ai_form_iconslugplaceholder2.js +30 -0
- package/src/paraglide/messages/admin_ai_form_integrationconfig1.js +30 -0
- package/src/paraglide/messages/admin_ai_form_keyurl1.js +30 -0
- package/src/paraglide/messages/admin_ai_form_localdeploy1.js +30 -0
- package/src/paraglide/messages/admin_ai_form_localdeploydesc2.js +30 -0
- package/src/paraglide/messages/admin_ai_form_modellist1.js +30 -0
- package/src/paraglide/messages/admin_ai_form_modellistdesc2.js +30 -0
- package/src/paraglide/messages/admin_ai_form_platformenabled1.js +30 -0
- package/src/paraglide/messages/admin_ai_form_platformenableddesc2.js +30 -0
- package/src/paraglide/messages/admin_ai_form_preview.js +30 -0
- package/src/paraglide/messages/admin_ai_form_previewdesc1.js +30 -0
- package/src/paraglide/messages/admin_ai_form_providerid1.js +30 -0
- package/src/paraglide/messages/admin_ai_form_provideriddesc2.js +30 -0
- package/src/paraglide/messages/admin_ai_form_providerideditnote3.js +30 -0
- package/src/paraglide/messages/admin_ai_form_provideridplaceholder2.js +30 -0
- package/src/paraglide/messages/admin_ai_form_sortorder1.js +30 -0
- package/src/paraglide/messages/admin_ai_form_sortorderdesc2.js +30 -0
- package/src/paraglide/messages/admin_ai_form_toast_created.js +30 -0
- package/src/paraglide/messages/admin_ai_form_toast_savefailed1.js +30 -0
- package/src/paraglide/messages/admin_ai_form_toast_updated.js +30 -0
- package/src/paraglide/messages/admin_ai_form_validation_displaynamerequired2.js +30 -0
- package/src/paraglide/messages/admin_ai_form_validation_provideridrequired2.js +30 -0
- package/src/paraglide/messages/admin_ai_model_apifetched1.js +30 -0
- package/src/paraglide/messages/admin_ai_model_capabilities.js +30 -0
- package/src/paraglide/messages/admin_ai_model_custom.js +30 -0
- package/src/paraglide/messages/admin_ai_model_id.js +30 -0
- package/src/paraglide/messages/admin_ai_model_inputprice1.js +30 -0
- package/src/paraglide/messages/admin_ai_model_name.js +30 -0
- package/src/paraglide/messages/admin_ai_model_outputprice1.js +30 -0
- package/src/paraglide/messages/admin_ai_page_create.js +30 -0
- package/src/paraglide/messages/admin_ai_page_description.js +30 -0
- package/src/paraglide/messages/admin_ai_page_edit.js +30 -0
- package/src/paraglide/messages/admin_ai_page_title.js +30 -0
- package/src/paraglide/messages/admin_ai_provider_apikey1.js +30 -0
- package/src/paraglide/messages/admin_ai_provider_baseurl1.js +30 -0
- package/src/paraglide/messages/admin_ai_provider_brandcolor1.js +30 -0
- package/src/paraglide/messages/admin_ai_provider_brandname1.js +30 -0
- package/src/paraglide/messages/admin_ai_provider_category.js +30 -0
- package/src/paraglide/messages/admin_ai_provider_defaultbaseurl2.js +30 -0
- package/src/paraglide/messages/admin_ai_provider_description.js +30 -0
- package/src/paraglide/messages/admin_ai_provider_disabled.js +30 -0
- package/src/paraglide/messages/admin_ai_provider_displayname1.js +30 -0
- package/src/paraglide/messages/admin_ai_provider_docsurl1.js +30 -0
- package/src/paraglide/messages/admin_ai_provider_enabled.js +30 -0
- package/src/paraglide/messages/admin_ai_provider_iconslug1.js +30 -0
- package/src/paraglide/messages/admin_ai_provider_islocal1.js +30 -0
- package/src/paraglide/messages/admin_ai_provider_keyplaceholder1.js +30 -0
- package/src/paraglide/messages/admin_ai_provider_keyurl1.js +30 -0
- package/src/paraglide/messages/admin_ai_provider_kind.js +30 -0
- package/src/paraglide/messages/admin_ai_provider_models.js +30 -0
- package/src/paraglide/messages/admin_ai_provider_monthlyusage1.js +30 -0
- package/src/paraglide/messages/admin_ai_provider_name.js +30 -0
- package/src/paraglide/messages/admin_ai_provider_sortorder1.js +30 -0
- package/src/paraglide/messages/admin_ai_provider_status.js +30 -0
- package/src/paraglide/messages/admin_ai_provider_totalkeys1.js +30 -0
- package/src/paraglide/messages/admin_ai_table_addprovider1.js +30 -0
- package/src/paraglide/messages/admin_ai_table_columns_actions.js +30 -0
- package/src/paraglide/messages/admin_ai_table_columns_adapterkind1.js +30 -0
- package/src/paraglide/messages/admin_ai_table_columns_badge.js +30 -0
- package/src/paraglide/messages/admin_ai_table_columns_category.js +30 -0
- package/src/paraglide/messages/admin_ai_table_columns_modelcount1.js +30 -0
- package/src/paraglide/messages/admin_ai_table_columns_platformenabled1.js +30 -0
- package/src/paraglide/messages/admin_ai_table_columns_provider.js +30 -0
- package/src/paraglide/messages/admin_ai_table_columns_userconfigcount2.js +30 -0
- package/src/paraglide/messages/admin_ai_table_delete.js +30 -0
- package/src/paraglide/messages/admin_ai_table_deleteconfirm_confirm1.js +30 -0
- package/src/paraglide/messages/admin_ai_table_deleteconfirm_description1.js +30 -0
- package/src/paraglide/messages/admin_ai_table_deleteconfirm_title1.js +30 -0
- package/src/paraglide/messages/admin_ai_table_deletedisabled1.js +30 -0
- package/src/paraglide/messages/admin_ai_table_edit.js +30 -0
- package/src/paraglide/messages/admin_ai_table_enabledtoggle1.js +30 -0
- package/src/paraglide/messages/admin_ai_table_pagedescription1.js +30 -0
- package/src/paraglide/messages/admin_ai_table_pagetitle1.js +30 -0
- package/src/paraglide/messages/admin_ai_table_toast_deleted.js +30 -0
- package/src/paraglide/messages/admin_ai_table_toast_deletefailed1.js +30 -0
- package/src/paraglide/messages/admin_ai_table_toast_updated.js +30 -0
- package/src/paraglide/messages/admin_billing_action_cancel.js +30 -0
- package/src/paraglide/messages/admin_billing_action_downgrade.js +30 -0
- package/src/paraglide/messages/admin_billing_action_exportdata1.js +30 -0
- package/src/paraglide/messages/admin_billing_action_retrypayment1.js +30 -0
- package/src/paraglide/messages/admin_billing_action_upgrade.js +30 -0
- package/src/paraglide/messages/admin_billing_invoice_cny.js +30 -0
- package/src/paraglide/messages/admin_billing_invoice_date.js +30 -0
- package/src/paraglide/messages/admin_billing_invoice_duedate1.js +30 -0
- package/src/paraglide/messages/admin_billing_invoice_number.js +30 -0
- package/src/paraglide/messages/admin_billing_invoice_paid.js +30 -0
- package/src/paraglide/messages/admin_billing_invoice_total.js +30 -0
- package/src/paraglide/messages/admin_billing_invoice_unpaid.js +30 -0
- package/src/paraglide/messages/admin_billing_invoice_usd.js +30 -0
- package/src/paraglide/messages/admin_billing_invoice_view.js +30 -0
- package/src/paraglide/messages/admin_billing_page_description.js +30 -0
- package/src/paraglide/messages/admin_billing_page_selectsubmenu1.js +30 -0
- package/src/paraglide/messages/admin_billing_page_title.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_action.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_active.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_amount.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_back.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_cancelled.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_count.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_currency.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_detail.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_detailtitle1.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_empty.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_enddate1.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_expires.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_interval.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_invoiceamount1.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_invoicedate1.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_invoicestatus1.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_invoicestitle1.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_notfound1.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_overdue.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_periodend1.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_periodstart1.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_plan.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_providersubscription1.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_seats.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_startdate1.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_status.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_totalusers1.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_trialing.js +30 -0
- package/src/paraglide/messages/admin_billing_subscription_workspace.js +30 -0
- package/src/paraglide/messages/admin_invitations_action_delete.js +30 -0
- package/src/paraglide/messages/admin_invitations_action_toggle_disable.js +30 -0
- package/src/paraglide/messages/admin_invitations_action_toggle_enable.js +30 -0
- package/src/paraglide/messages/admin_invitations_action_view_uses.js +30 -0
- package/src/paraglide/messages/admin_invitations_create_code_help.js +30 -0
- package/src/paraglide/messages/admin_invitations_create_code_label.js +30 -0
- package/src/paraglide/messages/admin_invitations_create_code_placeholder.js +30 -0
- package/src/paraglide/messages/admin_invitations_create_desc.js +30 -0
- package/src/paraglide/messages/admin_invitations_create_maxuses_label.js +30 -0
- package/src/paraglide/messages/admin_invitations_create_submit.js +30 -0
- package/src/paraglide/messages/admin_invitations_create_title.js +30 -0
- package/src/paraglide/messages/admin_invitations_create_validdays_label.js +30 -0
- package/src/paraglide/messages/admin_invitations_delete_confirm_desc.js +30 -0
- package/src/paraglide/messages/admin_invitations_delete_confirm_title.js +30 -0
- package/src/paraglide/messages/admin_invitations_delete_disabled_hint.js +30 -0
- package/src/paraglide/messages/admin_invitations_empty.js +30 -0
- package/src/paraglide/messages/admin_invitations_mode_invite.js +30 -0
- package/src/paraglide/messages/admin_invitations_mode_invite_desc.js +30 -0
- package/src/paraglide/messages/admin_invitations_mode_open.js +30 -0
- package/src/paraglide/messages/admin_invitations_mode_open_desc.js +30 -0
- package/src/paraglide/messages/admin_invitations_mode_title.js +30 -0
- package/src/paraglide/messages/admin_invitations_page_subtitle.js +30 -0
- package/src/paraglide/messages/admin_invitations_page_title.js +30 -0
- package/src/paraglide/messages/admin_invitations_status_active.js +30 -0
- package/src/paraglide/messages/admin_invitations_status_disabled.js +30 -0
- package/src/paraglide/messages/admin_invitations_status_exhausted.js +30 -0
- package/src/paraglide/messages/admin_invitations_status_expired.js +30 -0
- package/src/paraglide/messages/admin_invitations_table_columns_actions.js +30 -0
- package/src/paraglide/messages/admin_invitations_table_columns_code.js +30 -0
- package/src/paraglide/messages/admin_invitations_table_columns_creator.js +30 -0
- package/src/paraglide/messages/admin_invitations_table_columns_expires.js +30 -0
- package/src/paraglide/messages/admin_invitations_table_columns_status.js +30 -0
- package/src/paraglide/messages/admin_invitations_table_columns_uses.js +30 -0
- package/src/paraglide/messages/admin_invitations_toast_copied.js +30 -0
- package/src/paraglide/messages/admin_invitations_toast_copyfailed1.js +30 -0
- package/src/paraglide/messages/admin_invitations_toast_created.js +30 -0
- package/src/paraglide/messages/admin_invitations_toast_createfailed1.js +30 -0
- package/src/paraglide/messages/admin_invitations_toast_deleted.js +30 -0
- package/src/paraglide/messages/admin_invitations_toast_deletefailed1.js +30 -0
- package/src/paraglide/messages/admin_invitations_toast_modefailed1.js +30 -0
- package/src/paraglide/messages/admin_invitations_toast_modeupdated1.js +30 -0
- package/src/paraglide/messages/admin_invitations_toast_toggled.js +30 -0
- package/src/paraglide/messages/admin_invitations_toast_togglefailed1.js +30 -0
- package/src/paraglide/messages/admin_invitations_uses_column_usedat.js +30 -0
- package/src/paraglide/messages/admin_invitations_uses_column_username.js +30 -0
- package/src/paraglide/messages/admin_invitations_uses_empty.js +30 -0
- package/src/paraglide/messages/admin_invitations_uses_title.js +30 -0
- package/src/paraglide/messages/admin_loginproviders_action_delete1.js +30 -0
- package/src/paraglide/messages/admin_loginproviders_action_hidesecret2.js +30 -0
- package/src/paraglide/messages/admin_loginproviders_action_save1.js +30 -0
- package/src/paraglide/messages/admin_loginproviders_action_showsecret2.js +30 -0
- package/src/paraglide/messages/admin_loginproviders_action_test1.js +30 -0
- package/src/paraglide/messages/admin_loginproviders_cache_hint1.js +30 -0
- package/src/paraglide/messages/admin_loginproviders_delete_confirm_desc1.js +30 -0
- package/src/paraglide/messages/admin_loginproviders_delete_confirm_title1.js +30 -0
- package/src/paraglide/messages/admin_loginproviders_field_clientid2.js +30 -0
- package/src/paraglide/messages/admin_loginproviders_field_clientid_placeholder2.js +30 -0
- package/src/paraglide/messages/admin_loginproviders_field_clientsecret2.js +30 -0
- package/src/paraglide/messages/admin_loginproviders_field_clientsecret_desc2.js +30 -0
- package/src/paraglide/messages/admin_loginproviders_field_clientsecret_hint2.js +30 -0
- package/src/paraglide/messages/admin_loginproviders_field_clientsecret_placeholder2.js +30 -0
- package/src/paraglide/messages/admin_loginproviders_field_enabled1.js +30 -0
- package/src/paraglide/messages/admin_loginproviders_page_subtitle1.js +30 -0
- package/src/paraglide/messages/admin_loginproviders_page_title1.js +30 -0
- package/src/paraglide/messages/admin_loginproviders_source_db1.js +30 -0
- package/src/paraglide/messages/admin_loginproviders_source_env1.js +30 -0
- package/src/paraglide/messages/admin_loginproviders_source_none1.js +30 -0
- package/src/paraglide/messages/admin_loginproviders_toast_deleted1.js +30 -0
- package/src/paraglide/messages/admin_loginproviders_toast_deletefailed2.js +30 -0
- package/src/paraglide/messages/admin_loginproviders_toast_saved1.js +30 -0
- package/src/paraglide/messages/admin_loginproviders_toast_savefailed2.js +30 -0
- package/src/paraglide/messages/admin_loginproviders_toast_testfailed2.js +30 -0
- package/src/paraglide/messages/admin_loginproviders_toast_testok2.js +30 -0
- package/src/paraglide/messages/admin_users_action_changerole1.js +30 -0
- package/src/paraglide/messages/admin_users_action_changestatus1.js +30 -0
- package/src/paraglide/messages/admin_users_action_resetpassword1.js +30 -0
- package/src/paraglide/messages/admin_users_detail_account_createdat1.js +30 -0
- package/src/paraglide/messages/admin_users_detail_account_description.js +30 -0
- package/src/paraglide/messages/admin_users_detail_account_lastlogin1.js +30 -0
- package/src/paraglide/messages/admin_users_detail_account_neverloggedin2.js +30 -0
- package/src/paraglide/messages/admin_users_detail_account_title.js +30 -0
- package/src/paraglide/messages/admin_users_detail_account_updatedat1.js +30 -0
- package/src/paraglide/messages/admin_users_detail_errorloading1.js +30 -0
- package/src/paraglide/messages/admin_users_detail_loginlogs_csvheader2.js +30 -0
- package/src/paraglide/messages/admin_users_detail_loginlogs_description1.js +30 -0
- package/src/paraglide/messages/admin_users_detail_loginlogs_exportsuccess2.js +30 -0
- package/src/paraglide/messages/admin_users_detail_loginlogs_failure1.js +30 -0
- package/src/paraglide/messages/admin_users_detail_loginlogs_success1.js +30 -0
- package/src/paraglide/messages/admin_users_detail_loginlogs_title1.js +30 -0
- package/src/paraglide/messages/admin_users_detail_loginlogs_unknownreason2.js +30 -0
- package/src/paraglide/messages/admin_users_detail_profile_description.js +30 -0
- package/src/paraglide/messages/admin_users_detail_profile_title.js +30 -0
- package/src/paraglide/messages/admin_users_detail_retry.js +30 -0
- package/src/paraglide/messages/admin_users_detail_stats_apps.js +30 -0
- package/src/paraglide/messages/admin_users_detail_stats_description.js +30 -0
- package/src/paraglide/messages/admin_users_detail_stats_marketapps1.js +30 -0
- package/src/paraglide/messages/admin_users_detail_stats_prds.js +30 -0
- package/src/paraglide/messages/admin_users_detail_stats_reviews.js +30 -0
- package/src/paraglide/messages/admin_users_detail_stats_title.js +30 -0
- package/src/paraglide/messages/admin_users_detail_usernotfound2.js +30 -0
- package/src/paraglide/messages/admin_users_dialog_delete_confirm.js +30 -0
- package/src/paraglide/messages/admin_users_dialog_delete_description.js +30 -0
- package/src/paraglide/messages/admin_users_dialog_delete_placeholder.js +30 -0
- package/src/paraglide/messages/admin_users_dialog_delete_title.js +30 -0
- package/src/paraglide/messages/admin_users_dialog_password_confirm.js +30 -0
- package/src/paraglide/messages/admin_users_dialog_password_newpassword1.js +30 -0
- package/src/paraglide/messages/admin_users_dialog_password_title.js +30 -0
- package/src/paraglide/messages/admin_users_dialog_role_newrole1.js +30 -0
- package/src/paraglide/messages/admin_users_dialog_role_title.js +30 -0
- package/src/paraglide/messages/admin_users_dialog_status_newstatus1.js +30 -0
- package/src/paraglide/messages/admin_users_dialog_status_title.js +30 -0
- package/src/paraglide/messages/admin_users_page_createuser1.js +30 -0
- package/src/paraglide/messages/admin_users_page_description.js +30 -0
- package/src/paraglide/messages/admin_users_page_title.js +30 -0
- package/src/paraglide/messages/admin_users_page_total.js +30 -0
- package/src/paraglide/messages/admin_users_role_admin.js +30 -0
- package/src/paraglide/messages/admin_users_role_guest.js +30 -0
- package/src/paraglide/messages/admin_users_role_superadmin1.js +30 -0
- package/src/paraglide/messages/admin_users_role_user.js +30 -0
- package/src/paraglide/messages/admin_users_status_active.js +30 -0
- package/src/paraglide/messages/admin_users_status_banned.js +30 -0
- package/src/paraglide/messages/admin_users_status_inactive.js +30 -0
- package/src/paraglide/messages/admin_users_toast_deletefailed1.js +30 -0
- package/src/paraglide/messages/admin_users_toast_passwordreset1.js +30 -0
- package/src/paraglide/messages/admin_users_toast_resetfailed1.js +30 -0
- package/src/paraglide/messages/admin_users_toast_roleupdated1.js +30 -0
- package/src/paraglide/messages/admin_users_toast_statusupdated1.js +30 -0
- package/src/paraglide/messages/admin_users_toast_updatefailed1.js +30 -0
- package/src/paraglide/messages/admin_users_toast_userdeleted1.js +30 -0
- package/src/paraglide/messages/common_activitylog_actiontype2.js +30 -0
- package/src/paraglide/messages/common_activitylog_actiontypes_all2.js +30 -0
- package/src/paraglide/messages/common_activitylog_actiontypes_delete2.js +30 -0
- package/src/paraglide/messages/common_activitylog_actiontypes_export2.js +30 -0
- package/src/paraglide/messages/common_activitylog_actiontypes_login2.js +30 -0
- package/src/paraglide/messages/common_activitylog_actiontypes_logout2.js +30 -0
- package/src/paraglide/messages/common_activitylog_actiontypes_password_change2.js +30 -0
- package/src/paraglide/messages/common_activitylog_actiontypes_profile_update2.js +30 -0
- package/src/paraglide/messages/common_activitylog_actiontypes_settings_change2.js +30 -0
- package/src/paraglide/messages/common_activitylog_description1.js +30 -0
- package/src/paraglide/messages/common_activitylog_empty1.js +30 -0
- package/src/paraglide/messages/common_activitylog_emptyhint_default2.js +30 -0
- package/src/paraglide/messages/common_activitylog_emptyhint_filtered2.js +30 -0
- package/src/paraglide/messages/common_activitylog_enddate2.js +30 -0
- package/src/paraglide/messages/common_activitylog_exporting1.js +30 -0
- package/src/paraglide/messages/common_activitylog_exportlog2.js +30 -0
- package/src/paraglide/messages/common_activitylog_justnow2.js +30 -0
- package/src/paraglide/messages/common_activitylog_search1.js +30 -0
- package/src/paraglide/messages/common_activitylog_searchplaceholder2.js +30 -0
- package/src/paraglide/messages/common_activitylog_startdate2.js +30 -0
- package/src/paraglide/messages/common_activitylog_status_failed1.js +30 -0
- package/src/paraglide/messages/common_activitylog_status_success1.js +30 -0
- package/src/paraglide/messages/common_activitylog_title1.js +30 -0
- package/src/paraglide/messages/common_activitylog_total1.js +30 -0
- package/src/paraglide/messages/common_activitylog_unknown1.js +30 -0
- package/src/paraglide/messages/common_apps_title.js +29 -0
- package/src/paraglide/messages/common_button_back.js +29 -0
- package/src/paraglide/messages/common_button_cancel.js +29 -0
- package/src/paraglide/messages/common_button_close.js +29 -0
- package/src/paraglide/messages/common_button_confirm.js +29 -0
- package/src/paraglide/messages/common_button_create.js +29 -0
- package/src/paraglide/messages/common_button_delete.js +29 -0
- package/src/paraglide/messages/common_button_edit.js +29 -0
- package/src/paraglide/messages/common_button_next.js +29 -0
- package/src/paraglide/messages/common_button_reset.js +29 -0
- package/src/paraglide/messages/common_button_save.js +29 -0
- package/src/paraglide/messages/common_button_search.js +29 -0
- package/src/paraglide/messages/common_button_submit.js +29 -0
- package/src/paraglide/messages/common_common_backtolist2.js +30 -0
- package/src/paraglide/messages/common_common_cancel.js +29 -0
- package/src/paraglide/messages/common_common_comingsoon1.js +30 -0
- package/src/paraglide/messages/common_common_create.js +29 -0
- package/src/paraglide/messages/common_common_delete.js +29 -0
- package/src/paraglide/messages/common_common_deleted.js +29 -0
- package/src/paraglide/messages/common_common_deletefailed1.js +30 -0
- package/src/paraglide/messages/common_common_deleting.js +29 -0
- package/src/paraglide/messages/common_common_edit.js +29 -0
- package/src/paraglide/messages/common_common_empty.js +29 -0
- package/src/paraglide/messages/common_common_none.js +29 -0
- package/src/paraglide/messages/common_common_refresh.js +29 -0
- package/src/paraglide/messages/common_common_role_admin5.js +30 -0
- package/src/paraglide/messages/common_common_role_guest5.js +30 -0
- package/src/paraglide/messages/common_common_role_operator8.js +30 -0
- package/src/paraglide/messages/common_common_role_super_admin10.js +30 -0
- package/src/paraglide/messages/common_common_role_user4.js +30 -0
- package/src/paraglide/messages/common_common_search.js +29 -0
- package/src/paraglide/messages/common_common_timeago_days1.js +30 -0
- package/src/paraglide/messages/common_common_timeago_hours1.js +30 -0
- package/src/paraglide/messages/common_common_timeago_minutes1.js +30 -0
- package/src/paraglide/messages/common_common_timeago_seconds1.js +30 -0
- package/src/paraglide/messages/common_component_categories_base.js +29 -0
- package/src/paraglide/messages/common_component_categories_block.js +29 -0
- package/src/paraglide/messages/common_component_categories_template.js +29 -0
- package/src/paraglide/messages/common_component_form_category.js +29 -0
- package/src/paraglide/messages/common_component_form_create.js +29 -0
- package/src/paraglide/messages/common_component_form_created.js +29 -0
- package/src/paraglide/messages/common_component_form_defaultheight1.js +30 -0
- package/src/paraglide/messages/common_component_form_defaultprops1.js +30 -0
- package/src/paraglide/messages/common_component_form_defaultwidth1.js +30 -0
- package/src/paraglide/messages/common_component_form_description.js +29 -0
- package/src/paraglide/messages/common_component_form_descriptionplaceholder1.js +30 -0
- package/src/paraglide/messages/common_component_form_edit.js +29 -0
- package/src/paraglide/messages/common_component_form_hidden.js +29 -0
- package/src/paraglide/messages/common_component_form_name.js +29 -0
- package/src/paraglide/messages/common_component_form_nameplaceholder1.js +30 -0
- package/src/paraglide/messages/common_component_form_namerequired1.js +30 -0
- package/src/paraglide/messages/common_component_form_path.js +29 -0
- package/src/paraglide/messages/common_component_form_pathhint1.js +30 -0
- package/src/paraglide/messages/common_component_form_pathplaceholder1.js +30 -0
- package/src/paraglide/messages/common_component_form_preview.js +29 -0
- package/src/paraglide/messages/common_component_form_previewunavailable1.js +30 -0
- package/src/paraglide/messages/common_component_form_savefailed1.js +30 -0
- package/src/paraglide/messages/common_component_form_saving.js +29 -0
- package/src/paraglide/messages/common_component_form_sortorder1.js +30 -0
- package/src/paraglide/messages/common_component_form_subcategory1.js +30 -0
- package/src/paraglide/messages/common_component_form_subcategoryplaceholder2.js +30 -0
- package/src/paraglide/messages/common_component_form_tags.js +29 -0
- package/src/paraglide/messages/common_component_form_tagsplaceholder1.js +30 -0
- package/src/paraglide/messages/common_component_form_type.js +29 -0
- package/src/paraglide/messages/common_component_form_updated.js +29 -0
- package/src/paraglide/messages/common_component_table_columns_actions.js +29 -0
- package/src/paraglide/messages/common_component_table_columns_category.js +29 -0
- package/src/paraglide/messages/common_component_table_columns_component.js +29 -0
- package/src/paraglide/messages/common_component_table_columns_source.js +29 -0
- package/src/paraglide/messages/common_component_table_columns_status.js +29 -0
- package/src/paraglide/messages/common_component_table_columns_tags.js +29 -0
- package/src/paraglide/messages/common_component_table_columns_type.js +29 -0
- package/src/paraglide/messages/common_component_table_empty.js +29 -0
- package/src/paraglide/messages/common_component_table_status_hidden.js +29 -0
- package/src/paraglide/messages/common_component_table_status_visible.js +29 -0
- package/src/paraglide/messages/common_component_types_base.js +29 -0
- package/src/paraglide/messages/common_component_types_block.js +29 -0
- package/src/paraglide/messages/common_component_types_template.js +29 -0
- package/src/paraglide/messages/common_dashboard_subtitle.js +29 -0
- package/src/paraglide/messages/common_dashboard_title.js +29 -0
- package/src/paraglide/messages/common_dependencies_description.js +29 -0
- package/src/paraglide/messages/common_dependencies_hint_currentversion1.js +30 -0
- package/src/paraglide/messages/common_dependencies_hint_currentversionsuffix2.js +30 -0
- package/src/paraglide/messages/common_dependencies_hint_latestversion1.js +31 -0
- package/src/paraglide/messages/common_dependencies_hint_watchlist1.js +30 -0
- package/src/paraglide/messages/common_dependencies_title.js +29 -0
- package/src/paraglide/messages/common_dependency_edit_category.js +29 -0
- package/src/paraglide/messages/common_dependency_edit_description.js +29 -0
- package/src/paraglide/messages/common_dependency_edit_descriptionplaceholder1.js +30 -0
- package/src/paraglide/messages/common_dependency_edit_dialogtitle1.js +30 -0
- package/src/paraglide/messages/common_dependency_edit_displayname1.js +30 -0
- package/src/paraglide/messages/common_dependency_edit_homepage.js +29 -0
- package/src/paraglide/messages/common_dependency_edit_notes.js +29 -0
- package/src/paraglide/messages/common_dependency_edit_notesplaceholder1.js +30 -0
- package/src/paraglide/messages/common_dependency_edit_priority.js +29 -0
- package/src/paraglide/messages/common_dependency_edit_saved.js +29 -0
- package/src/paraglide/messages/common_dependency_edit_savefailed1.js +30 -0
- package/src/paraglide/messages/common_dependency_edit_untracked.js +29 -0
- package/src/paraglide/messages/common_dependency_edit_watched.js +29 -0
- package/src/paraglide/messages/common_dependency_statuslabel_latest1.js +30 -0
- package/src/paraglide/messages/common_dependency_statuslabel_major1.js +30 -0
- package/src/paraglide/messages/common_dependency_statuslabel_minor1.js +30 -0
- package/src/paraglide/messages/common_dependency_statuslabel_patch1.js +30 -0
- package/src/paraglide/messages/common_dependency_statuslabel_unknown1.js +30 -0
- package/src/paraglide/messages/common_dependency_table_allcategory1.js +30 -0
- package/src/paraglide/messages/common_dependency_table_cell_changelogbtn1.js +30 -0
- package/src/paraglide/messages/common_dependency_table_cell_highpriority1.js +30 -0
- package/src/paraglide/messages/common_dependency_table_cell_notinstalled1.js +30 -0
- package/src/paraglide/messages/common_dependency_table_cell_synctooltip1.js +30 -0
- package/src/paraglide/messages/common_dependency_table_cell_untracked.js +29 -0
- package/src/paraglide/messages/common_dependency_table_cell_viewchangelog1.js +30 -0
- package/src/paraglide/messages/common_dependency_table_columns_actions.js +29 -0
- package/src/paraglide/messages/common_dependency_table_columns_category.js +29 -0
- package/src/paraglide/messages/common_dependency_table_columns_changelog.js +29 -0
- package/src/paraglide/messages/common_dependency_table_columns_currentversion1.js +30 -0
- package/src/paraglide/messages/common_dependency_table_columns_dependency.js +29 -0
- package/src/paraglide/messages/common_dependency_table_columns_description.js +29 -0
- package/src/paraglide/messages/common_dependency_table_columns_lastsync1.js +30 -0
- package/src/paraglide/messages/common_dependency_table_columns_latestversion1.js +30 -0
- package/src/paraglide/messages/common_dependency_table_columns_status.js +29 -0
- package/src/paraglide/messages/common_dependency_table_empty.js +29 -0
- package/src/paraglide/messages/common_dependency_table_pagination_next.js +29 -0
- package/src/paraglide/messages/common_dependency_table_pagination_prev.js +29 -0
- package/src/paraglide/messages/common_dependency_table_pagination_total.js +29 -0
- package/src/paraglide/messages/common_dependency_table_searchplaceholder1.js +30 -0
- package/src/paraglide/messages/common_dependency_table_stats_outdated.js +29 -0
- package/src/paraglide/messages/common_dependency_table_stats_watched.js +29 -0
- package/src/paraglide/messages/common_dependency_table_statusfilter_all1.js +30 -0
- package/src/paraglide/messages/common_dependency_table_statusfilter_latest1.js +30 -0
- package/src/paraglide/messages/common_dependency_table_statusfilter_major1.js +30 -0
- package/src/paraglide/messages/common_dependency_table_statusfilter_minor1.js +30 -0
- package/src/paraglide/messages/common_dependency_table_statusfilter_patch1.js +30 -0
- package/src/paraglide/messages/common_dependency_table_statusfilter_unknown1.js +30 -0
- package/src/paraglide/messages/common_dependency_table_syncall1.js +30 -0
- package/src/paraglide/messages/common_dependency_table_toast_nosyncable1.js +30 -0
- package/src/paraglide/messages/common_dependency_table_toast_syncfailed1.js +30 -0
- package/src/paraglide/messages/common_dependency_table_toast_syncfailedcount2.js +30 -0
- package/src/paraglide/messages/common_dependency_table_toast_syncsuccess1.js +30 -0
- package/src/paraglide/messages/common_dependency_table_toast_unknown.js +29 -0
- package/src/paraglide/messages/common_dependency_table_toast_updated.js +29 -0
- package/src/paraglide/messages/common_dependency_table_viewfilter_all1.js +30 -0
- package/src/paraglide/messages/common_dependency_table_viewfilter_watched1.js +30 -0
- package/src/paraglide/messages/common_dependency_timeago_days1.js +30 -0
- package/src/paraglide/messages/common_dependency_timeago_hours1.js +30 -0
- package/src/paraglide/messages/common_dependency_timeago_justnow2.js +30 -0
- package/src/paraglide/messages/common_dependency_timeago_minutes1.js +30 -0
- package/src/paraglide/messages/common_developerlogs_addentry2.js +30 -0
- package/src/paraglide/messages/common_developerlogs_alltags2.js +30 -0
- package/src/paraglide/messages/common_developerlogs_autogenerate2.js +30 -0
- package/src/paraglide/messages/common_developerlogs_autogeneratefailed3.js +30 -0
- package/src/paraglide/messages/common_developerlogs_autogeneratesuccess3.js +30 -0
- package/src/paraglide/messages/common_developerlogs_autogenerating2.js +30 -0
- package/src/paraglide/messages/common_developerlogs_backfilldetails2.js +30 -0
- package/src/paraglide/messages/common_developerlogs_backfillfailed2.js +30 -0
- package/src/paraglide/messages/common_developerlogs_backfillsuccess2.js +30 -0
- package/src/paraglide/messages/common_developerlogs_columns_actions1.js +30 -0
- package/src/paraglide/messages/common_developerlogs_columns_createdat2.js +30 -0
- package/src/paraglide/messages/common_developerlogs_columns_date1.js +30 -0
- package/src/paraglide/messages/common_developerlogs_columns_desc1.js +30 -0
- package/src/paraglide/messages/common_developerlogs_columns_tags1.js +30 -0
- package/src/paraglide/messages/common_developerlogs_columns_title1.js +30 -0
- package/src/paraglide/messages/common_developerlogs_deleteconfirm2.js +30 -0
- package/src/paraglide/messages/common_developerlogs_deletesuccess2.js +30 -0
- package/src/paraglide/messages/common_developerlogs_description1.js +30 -0
- package/src/paraglide/messages/common_developerlogs_editentry2.js +30 -0
- package/src/paraglide/messages/common_developerlogs_empty1.js +30 -0
- package/src/paraglide/messages/common_developerlogs_form_commitsha_label2.js +30 -0
- package/src/paraglide/messages/common_developerlogs_form_commitsha_placeholder2.js +30 -0
- package/src/paraglide/messages/common_developerlogs_form_date_label1.js +30 -0
- package/src/paraglide/messages/common_developerlogs_form_date_placeholder1.js +30 -0
- package/src/paraglide/messages/common_developerlogs_form_desc_label1.js +30 -0
- package/src/paraglide/messages/common_developerlogs_form_desc_placeholder1.js +30 -0
- package/src/paraglide/messages/common_developerlogs_form_fillrequired2.js +30 -0
- package/src/paraglide/messages/common_developerlogs_form_tags_label1.js +30 -0
- package/src/paraglide/messages/common_developerlogs_form_tags_placeholder1.js +30 -0
- package/src/paraglide/messages/common_developerlogs_form_title_label1.js +30 -0
- package/src/paraglide/messages/common_developerlogs_form_title_placeholder1.js +30 -0
- package/src/paraglide/messages/common_developerlogs_savesuccess2.js +30 -0
- package/src/paraglide/messages/common_developerlogs_searchplaceholder2.js +30 -0
- package/src/paraglide/messages/common_developerlogs_tagfilter2.js +30 -0
- package/src/paraglide/messages/common_developerlogs_title1.js +30 -0
- package/src/paraglide/messages/common_docs_title.js +29 -0
- package/src/paraglide/messages/common_errorlist_columns_count1.js +30 -0
- package/src/paraglide/messages/common_errorlist_columns_errormessage2.js +30 -0
- package/src/paraglide/messages/common_errorlist_columns_errorname2.js +30 -0
- package/src/paraglide/messages/common_errorlist_columns_firstseen2.js +30 -0
- package/src/paraglide/messages/common_errorlist_columns_lastseen2.js +30 -0
- package/src/paraglide/messages/common_errorlist_detail_context1.js +30 -0
- package/src/paraglide/messages/common_errorlist_detail_title1.js +30 -0
- package/src/paraglide/messages/common_errorpage_error1.js +30 -0
- package/src/paraglide/messages/common_errorpage_errormessage2.js +30 -0
- package/src/paraglide/messages/common_errorpage_gologin2.js +30 -0
- package/src/paraglide/messages/common_errorpage_notfound2.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_bookmarks_columns_category1.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_bookmarks_columns_createdat2.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_bookmarks_columns_tags1.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_bookmarks_columns_url1.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_bookmarks_columns_website1.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_bookmarks_deleteconfirmdesc3.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_bookmarks_deleteconfirmtitle3.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_bookmarks_deleted1.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_bookmarks_placeholder1.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_bookmarks_subtitle1.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_bookmarks_synccomplete2.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_bookmarks_syncfailed2.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_bookmarks_syncgithub2.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_bookmarks_syncing1.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_bookmarks_title1.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_compliance_columns_createdat2.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_compliance_columns_industry1.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_compliance_columns_regulatorybody2.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_compliance_columns_tags1.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_compliance_columns_title1.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_compliance_deleteconfirmdesc3.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_compliance_deleteconfirmtitle3.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_compliance_deleted1.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_compliance_placeholder1.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_compliance_subtitle1.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_compliance_title1.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_jurisdictionlabel2.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_legal_columns_category1.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_legal_columns_createdat2.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_legal_columns_jurisdiction1.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_legal_columns_tags1.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_legal_columns_title1.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_legal_deleteconfirmdesc3.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_legal_deleteconfirmtitle3.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_legal_placeholder1.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_legal_subtitle1.js +30 -0
- package/src/paraglide/messages/common_knowledgepublic_legal_title1.js +30 -0
- package/src/paraglide/messages/common_legalform_category1.js +30 -0
- package/src/paraglide/messages/common_legalform_categoryplaceholder2.js +30 -0
- package/src/paraglide/messages/common_legalform_categoryrequired2.js +30 -0
- package/src/paraglide/messages/common_legalform_code1.js +30 -0
- package/src/paraglide/messages/common_legalform_codeplaceholder2.js +30 -0
- package/src/paraglide/messages/common_legalform_content1.js +30 -0
- package/src/paraglide/messages/common_legalform_contentplaceholder2.js +30 -0
- package/src/paraglide/messages/common_legalform_country1.js +30 -0
- package/src/paraglide/messages/common_legalform_countryplaceholder2.js +30 -0
- package/src/paraglide/messages/common_legalform_create1.js +30 -0
- package/src/paraglide/messages/common_legalform_created1.js +30 -0
- package/src/paraglide/messages/common_legalform_edit1.js +30 -0
- package/src/paraglide/messages/common_legalform_effectivedate2.js +30 -0
- package/src/paraglide/messages/common_legalform_issuingauthority2.js +30 -0
- package/src/paraglide/messages/common_legalform_issuingauthorityplaceholder3.js +30 -0
- package/src/paraglide/messages/common_legalform_jurisdiction1.js +30 -0
- package/src/paraglide/messages/common_legalform_jurisdictions_cn_local8.js +30 -0
- package/src/paraglide/messages/common_legalform_jurisdictions_cn_national11.js +30 -0
- package/src/paraglide/messages/common_legalform_jurisdictions_overseas9.js +30 -0
- package/src/paraglide/messages/common_legalform_loadfailed2.js +30 -0
- package/src/paraglide/messages/common_legalform_region1.js +30 -0
- package/src/paraglide/messages/common_legalform_regionplaceholder2.js +30 -0
- package/src/paraglide/messages/common_legalform_savefailed2.js +30 -0
- package/src/paraglide/messages/common_legalform_saving1.js +30 -0
- package/src/paraglide/messages/common_legalform_sourceurl2.js +30 -0
- package/src/paraglide/messages/common_legalform_summary1.js +30 -0
- package/src/paraglide/messages/common_legalform_summaryplaceholder2.js +30 -0
- package/src/paraglide/messages/common_legalform_tags1.js +30 -0
- package/src/paraglide/messages/common_legalform_tagsplaceholder2.js +30 -0
- package/src/paraglide/messages/common_legalform_title1.js +30 -0
- package/src/paraglide/messages/common_legalform_titleplaceholder2.js +30 -0
- package/src/paraglide/messages/common_legalform_titlerequired2.js +30 -0
- package/src/paraglide/messages/common_legalform_updated1.js +30 -0
- package/src/paraglide/messages/common_login_action.js +29 -0
- package/src/paraglide/messages/common_login_admin.js +29 -0
- package/src/paraglide/messages/common_login_adminpanel1.js +30 -0
- package/src/paraglide/messages/common_login_backtoworkspace2.js +30 -0
- package/src/paraglide/messages/common_login_email_label.js +29 -0
- package/src/paraglide/messages/common_login_email_placeholder.js +29 -0
- package/src/paraglide/messages/common_login_error_enteremail1.js +30 -0
- package/src/paraglide/messages/common_login_error_enterpassword1.js +30 -0
- package/src/paraglide/messages/common_login_error_invalidcredentials1.js +30 -0
- package/src/paraglide/messages/common_login_error_validemail1.js +30 -0
- package/src/paraglide/messages/common_login_exitadmin1.js +30 -0
- package/src/paraglide/messages/common_login_hidepassword1.js +30 -0
- package/src/paraglide/messages/common_login_loading.js +29 -0
- package/src/paraglide/messages/common_login_loggingin1.js +30 -0
- package/src/paraglide/messages/common_login_loginadmin1.js +30 -0
- package/src/paraglide/messages/common_login_logout.js +29 -0
- package/src/paraglide/messages/common_login_nopermission1.js +30 -0
- package/src/paraglide/messages/common_login_notadmin1.js +30 -0
- package/src/paraglide/messages/common_login_oauthwith1.js +30 -0
- package/src/paraglide/messages/common_login_password_label.js +29 -0
- package/src/paraglide/messages/common_login_password_placeholder.js +29 -0
- package/src/paraglide/messages/common_login_rememberme1.js +30 -0
- package/src/paraglide/messages/common_login_showpassword1.js +30 -0
- package/src/paraglide/messages/common_login_subtitle.js +29 -0
- package/src/paraglide/messages/common_login_success.js +29 -0
- package/src/paraglide/messages/common_login_switchaccount1.js +30 -0
- package/src/paraglide/messages/common_login_switchandlogin2.js +30 -0
- package/src/paraglide/messages/common_market_addapp1.js +30 -0
- package/src/paraglide/messages/common_market_categories_ai_assistant.js +30 -0
- package/src/paraglide/messages/common_market_categories_data_analysis.js +30 -0
- package/src/paraglide/messages/common_market_categories_docs_collab.js +30 -0
- package/src/paraglide/messages/common_market_categories_other.js +29 -0
- package/src/paraglide/messages/common_market_categories_productivity.js +29 -0
- package/src/paraglide/messages/common_market_categories_project_mgmt.js +30 -0
- package/src/paraglide/messages/common_market_columns_appname1.js +30 -0
- package/src/paraglide/messages/common_market_columns_category.js +29 -0
- package/src/paraglide/messages/common_market_columns_createdat1.js +30 -0
- package/src/paraglide/messages/common_market_columns_downloads.js +29 -0
- package/src/paraglide/messages/common_market_columns_entryurl1.js +30 -0
- package/src/paraglide/messages/common_market_columns_status.js +29 -0
- package/src/paraglide/messages/common_market_deleteconfirmdesc2.js +30 -0
- package/src/paraglide/messages/common_market_deleteconfirmtitle2.js +30 -0
- package/src/paraglide/messages/common_market_deleted.js +29 -0
- package/src/paraglide/messages/common_market_deletefailed1.js +30 -0
- package/src/paraglide/messages/common_market_fetchfailed1.js +30 -0
- package/src/paraglide/messages/common_market_form_capabilities.js +29 -0
- package/src/paraglide/messages/common_market_form_category.js +29 -0
- package/src/paraglide/messages/common_market_form_categoryplaceholder1.js +30 -0
- package/src/paraglide/messages/common_market_form_create.js +29 -0
- package/src/paraglide/messages/common_market_form_created.js +29 -0
- package/src/paraglide/messages/common_market_form_description.js +29 -0
- package/src/paraglide/messages/common_market_form_descriptionplaceholder1.js +30 -0
- package/src/paraglide/messages/common_market_form_displayname1.js +30 -0
- package/src/paraglide/messages/common_market_form_displaynameplaceholder2.js +30 -0
- package/src/paraglide/messages/common_market_form_edit.js +29 -0
- package/src/paraglide/messages/common_market_form_entryurl1.js +30 -0
- package/src/paraglide/messages/common_market_form_fillrequired1.js +30 -0
- package/src/paraglide/messages/common_market_form_icon.js +29 -0
- package/src/paraglide/messages/common_market_form_iconplaceholder1.js +30 -0
- package/src/paraglide/messages/common_market_form_name.js +29 -0
- package/src/paraglide/messages/common_market_form_nameplaceholder1.js +30 -0
- package/src/paraglide/messages/common_market_form_operationfailed1.js +30 -0
- package/src/paraglide/messages/common_market_form_submitting.js +29 -0
- package/src/paraglide/messages/common_market_form_tags.js +29 -0
- package/src/paraglide/messages/common_market_form_tagsplaceholder1.js +30 -0
- package/src/paraglide/messages/common_market_form_updated.js +29 -0
- package/src/paraglide/messages/common_market_operationfailed1.js +30 -0
- package/src/paraglide/messages/common_market_publish.js +29 -0
- package/src/paraglide/messages/common_market_statuslabel_draft1.js +30 -0
- package/src/paraglide/messages/common_market_statuslabel_published1.js +30 -0
- package/src/paraglide/messages/common_market_statuslabel_unpublished1.js +30 -0
- package/src/paraglide/messages/common_market_statusupdated1.js +30 -0
- package/src/paraglide/messages/common_market_table_addapp1.js +30 -0
- package/src/paraglide/messages/common_market_table_deleteconfirmdesc2.js +30 -0
- package/src/paraglide/messages/common_market_table_deleteconfirmtitle2.js +30 -0
- package/src/paraglide/messages/common_market_title.js +29 -0
- package/src/paraglide/messages/common_market_unpublish.js +29 -0
- package/src/paraglide/messages/common_metricsstats_benchmarksource2.js +30 -0
- package/src/paraglide/messages/common_metricsstats_columns_avg1.js +30 -0
- package/src/paraglide/messages/common_metricsstats_columns_count1.js +30 -0
- package/src/paraglide/messages/common_metricsstats_columns_description1.js +30 -0
- package/src/paraglide/messages/common_metricsstats_columns_max1.js +30 -0
- package/src/paraglide/messages/common_metricsstats_columns_metricname2.js +30 -0
- package/src/paraglide/messages/common_metricsstats_columns_min1.js +30 -0
- package/src/paraglide/messages/common_metricsstats_comparebenchmark2.js +30 -0
- package/src/paraglide/messages/common_monitoring_aiusage_alert_affected1.js +30 -0
- package/src/paraglide/messages/common_monitoring_aiusage_alert_threshold1.js +30 -0
- package/src/paraglide/messages/common_monitoring_aiusage_byokvsmanaged3.js +30 -0
- package/src/paraglide/messages/common_monitoring_aiusage_cost1.js +30 -0
- package/src/paraglide/messages/common_monitoring_aiusage_count1.js +30 -0
- package/src/paraglide/messages/common_monitoring_aiusage_dailytrend2.js +30 -0
- package/src/paraglide/messages/common_monitoring_aiusage_description1.js +30 -0
- package/src/paraglide/messages/common_monitoring_aiusage_title1.js +30 -0
- package/src/paraglide/messages/common_monitoring_aiusage_top10users2.js +30 -0
- package/src/paraglide/messages/common_monitoring_aiusage_top10workspaces2.js +30 -0
- package/src/paraglide/messages/common_monitoring_aiusage_totalcalls2.js +30 -0
- package/src/paraglide/messages/common_monitoring_aiusage_totalcost2.js +30 -0
- package/src/paraglide/messages/common_monitoring_aiusage_totalitems2.js +30 -0
- package/src/paraglide/messages/common_monitoring_aiusage_trend_calls1.js +30 -0
- package/src/paraglide/messages/common_monitoring_aiusage_trend_callsaria2.js +30 -0
- package/src/paraglide/messages/common_monitoring_aiusage_trend_cost1.js +30 -0
- package/src/paraglide/messages/common_monitoring_aiusage_trend_costaria2.js +30 -0
- package/src/paraglide/messages/common_monitoring_aiusage_user1.js +30 -0
- package/src/paraglide/messages/common_monitoring_aiusage_workspace1.js +30 -0
- package/src/paraglide/messages/common_monitoring_errors_cleardata1.js +30 -0
- package/src/paraglide/messages/common_monitoring_errors_clearfailed1.js +30 -0
- package/src/paraglide/messages/common_monitoring_errors_clearsuccess1.js +30 -0
- package/src/paraglide/messages/common_monitoring_errors_description.js +29 -0
- package/src/paraglide/messages/common_monitoring_errors_empty.js +29 -0
- package/src/paraglide/messages/common_monitoring_errors_stats_errortypes1.js +30 -0
- package/src/paraglide/messages/common_monitoring_errors_stats_recenterror1.js +30 -0
- package/src/paraglide/messages/common_monitoring_errors_stats_totaloccurrences1.js +30 -0
- package/src/paraglide/messages/common_monitoring_errors_title.js +29 -0
- package/src/paraglide/messages/common_monitoring_health_autocheck1.js +30 -0
- package/src/paraglide/messages/common_monitoring_health_autodisabled1.js +30 -0
- package/src/paraglide/messages/common_monitoring_health_autoenabled1.js +30 -0
- package/src/paraglide/messages/common_monitoring_health_checknow1.js +30 -0
- package/src/paraglide/messages/common_monitoring_health_database_connected.js +29 -0
- package/src/paraglide/messages/common_monitoring_health_database_failed.js +29 -0
- package/src/paraglide/messages/common_monitoring_health_database_title.js +29 -0
- package/src/paraglide/messages/common_monitoring_health_database_unknownerror1.js +30 -0
- package/src/paraglide/messages/common_monitoring_health_description.js +29 -0
- package/src/paraglide/messages/common_monitoring_health_history.js +29 -0
- package/src/paraglide/messages/common_monitoring_health_historycolumns_dblatency2.js +30 -0
- package/src/paraglide/messages/common_monitoring_health_historycolumns_status1.js +30 -0
- package/src/paraglide/messages/common_monitoring_health_historycolumns_time1.js +30 -0
- package/src/paraglide/messages/common_monitoring_health_historycolumns_uptime1.js +30 -0
- package/src/paraglide/messages/common_monitoring_health_memory_title.js +29 -0
- package/src/paraglide/messages/common_monitoring_health_nextcheck1.js +30 -0
- package/src/paraglide/messages/common_monitoring_health_operationfailed1.js +30 -0
- package/src/paraglide/messages/common_monitoring_health_runningtime1.js +30 -0
- package/src/paraglide/messages/common_monitoring_health_status_abnormal.js +29 -0
- package/src/paraglide/messages/common_monitoring_health_status_normal.js +29 -0
- package/src/paraglide/messages/common_monitoring_health_title.js +29 -0
- package/src/paraglide/messages/common_monitoring_healthcards_available1.js +30 -0
- package/src/paraglide/messages/common_monitoring_healthcards_connected1.js +30 -0
- package/src/paraglide/messages/common_monitoring_healthcards_cpucores2.js +30 -0
- package/src/paraglide/messages/common_monitoring_healthcards_database1.js +30 -0
- package/src/paraglide/messages/common_monitoring_healthcards_disconnected1.js +30 -0
- package/src/paraglide/messages/common_monitoring_healthcards_diskusage2.js +30 -0
- package/src/paraglide/messages/common_monitoring_healthcards_heapusage2.js +30 -0
- package/src/paraglide/messages/common_monitoring_healthcards_latency1.js +30 -0
- package/src/paraglide/messages/common_monitoring_healthcards_memoryrss4.js +30 -0
- package/src/paraglide/messages/common_monitoring_healthcards_runtime1.js +30 -0
- package/src/paraglide/messages/common_monitoring_healthcards_systemload2.js +30 -0
- package/src/paraglide/messages/common_monitoring_logs_clear7days1.js +30 -0
- package/src/paraglide/messages/common_monitoring_logs_clearfailed1.js +30 -0
- package/src/paraglide/messages/common_monitoring_logs_clearsuccess1.js +30 -0
- package/src/paraglide/messages/common_monitoring_logs_description.js +29 -0
- package/src/paraglide/messages/common_monitoring_logs_empty.js +29 -0
- package/src/paraglide/messages/common_monitoring_logs_filter_allmethods1.js +30 -0
- package/src/paraglide/messages/common_monitoring_logs_filter_allstatus1.js +30 -0
- package/src/paraglide/messages/common_monitoring_logs_filter_searchpath1.js +30 -0
- package/src/paraglide/messages/common_monitoring_logs_filtermonitoring1.js +30 -0
- package/src/paraglide/messages/common_monitoring_logs_query.js +29 -0
- package/src/paraglide/messages/common_monitoring_logs_title.js +29 -0
- package/src/paraglide/messages/common_monitoring_metrics_cleardata1.js +30 -0
- package/src/paraglide/messages/common_monitoring_metrics_clearfailed1.js +30 -0
- package/src/paraglide/messages/common_monitoring_metrics_clearsuccess1.js +30 -0
- package/src/paraglide/messages/common_monitoring_metrics_columns_avg.js +29 -0
- package/src/paraglide/messages/common_monitoring_metrics_columns_count.js +29 -0
- package/src/paraglide/messages/common_monitoring_metrics_columns_metricname1.js +30 -0
- package/src/paraglide/messages/common_monitoring_metrics_columns_time.js +29 -0
- package/src/paraglide/messages/common_monitoring_metrics_description.js +29 -0
- package/src/paraglide/messages/common_monitoring_metrics_empty.js +29 -0
- package/src/paraglide/messages/common_monitoring_metrics_history.js +29 -0
- package/src/paraglide/messages/common_monitoring_metrics_memoryusage1.js +30 -0
- package/src/paraglide/messages/common_monitoring_metrics_title.js +29 -0
- package/src/paraglide/messages/common_monitoring_nav_aiusage1.js +30 -0
- package/src/paraglide/messages/common_monitoring_nav_errors.js +29 -0
- package/src/paraglide/messages/common_monitoring_nav_health.js +29 -0
- package/src/paraglide/messages/common_monitoring_nav_logs.js +29 -0
- package/src/paraglide/messages/common_monitoring_nav_metrics.js +29 -0
- package/src/paraglide/messages/common_monitoring_nav_overview.js +29 -0
- package/src/paraglide/messages/common_monitoring_nav_sentry.js +29 -0
- package/src/paraglide/messages/common_monitoring_overview_description.js +29 -0
- package/src/paraglide/messages/common_monitoring_overview_metricssnapshot_empty1.js +30 -0
- package/src/paraglide/messages/common_monitoring_overview_metricssnapshot_title1.js +30 -0
- package/src/paraglide/messages/common_monitoring_overview_recenterrors_empty1.js +30 -0
- package/src/paraglide/messages/common_monitoring_overview_recenterrors_title1.js +30 -0
- package/src/paraglide/messages/common_monitoring_overview_requeststats_avgduration2.js +30 -0
- package/src/paraglide/messages/common_monitoring_overview_requeststats_errortypes2.js +30 -0
- package/src/paraglide/messages/common_monitoring_overview_requeststats_maxduration2.js +30 -0
- package/src/paraglide/messages/common_monitoring_overview_requeststats_title1.js +30 -0
- package/src/paraglide/messages/common_monitoring_overview_requeststats_totalrequests2.js +30 -0
- package/src/paraglide/messages/common_monitoring_overview_title.js +29 -0
- package/src/paraglide/messages/common_monitoring_sentry_config_description.js +29 -0
- package/src/paraglide/messages/common_monitoring_sentry_config_title.js +29 -0
- package/src/paraglide/messages/common_monitoring_sentry_fields_authtoken_instruction_step11.js +30 -0
- package/src/paraglide/messages/common_monitoring_sentry_fields_authtoken_instruction_step21.js +30 -0
- package/src/paraglide/messages/common_monitoring_sentry_fields_authtoken_instruction_step31.js +30 -0
- package/src/paraglide/messages/common_monitoring_sentry_fields_authtoken_instruction_step41.js +30 -0
- package/src/paraglide/messages/common_monitoring_sentry_fields_authtoken_instruction_step51.js +30 -0
- package/src/paraglide/messages/common_monitoring_sentry_fields_dsn_instruction_step1.js +29 -0
- package/src/paraglide/messages/common_monitoring_sentry_fields_dsn_instruction_step2.js +29 -0
- package/src/paraglide/messages/common_monitoring_sentry_fields_dsn_instruction_step3.js +29 -0
- package/src/paraglide/messages/common_monitoring_sentry_fields_dsn_instruction_step4.js +29 -0
- package/src/paraglide/messages/common_monitoring_sentry_fields_obtainmethod1.js +30 -0
- package/src/paraglide/messages/common_monitoring_sentry_fields_org_instruction_step1.js +29 -0
- package/src/paraglide/messages/common_monitoring_sentry_fields_org_instruction_step2.js +29 -0
- package/src/paraglide/messages/common_monitoring_sentry_fields_org_instruction_step3.js +29 -0
- package/src/paraglide/messages/common_monitoring_sentry_fields_org_label.js +29 -0
- package/src/paraglide/messages/common_monitoring_sentry_fields_project_instruction_step1.js +29 -0
- package/src/paraglide/messages/common_monitoring_sentry_fields_project_instruction_step2.js +29 -0
- package/src/paraglide/messages/common_monitoring_sentry_fields_project_instruction_step3.js +29 -0
- package/src/paraglide/messages/common_monitoring_sentry_fields_project_label.js +29 -0
- package/src/paraglide/messages/common_monitoring_sentry_loadfailed1.js +30 -0
- package/src/paraglide/messages/common_monitoring_sentry_opensentry1.js +30 -0
- package/src/paraglide/messages/common_monitoring_sentry_saveconfig1.js +30 -0
- package/src/paraglide/messages/common_monitoring_sentry_savefailed1.js +30 -0
- package/src/paraglide/messages/common_monitoring_sentry_savesuccess1.js +30 -0
- package/src/paraglide/messages/common_monitoring_sentry_statuscards_dsn_configured1.js +30 -0
- package/src/paraglide/messages/common_monitoring_sentry_statuscards_dsn_notconfigured2.js +30 -0
- package/src/paraglide/messages/common_monitoring_sentry_statuscards_dsn_title1.js +30 -0
- package/src/paraglide/messages/common_monitoring_sentry_statuscards_errors_disabled1.js +30 -0
- package/src/paraglide/messages/common_monitoring_sentry_statuscards_errors_enabled1.js +30 -0
- package/src/paraglide/messages/common_monitoring_sentry_statuscards_errors_title1.js +30 -0
- package/src/paraglide/messages/common_monitoring_sentry_statuscards_performance_disabled1.js +30 -0
- package/src/paraglide/messages/common_monitoring_sentry_statuscards_performance_enabled1.js +30 -0
- package/src/paraglide/messages/common_monitoring_sentry_statuscards_performance_title1.js +30 -0
- package/src/paraglide/messages/common_monitoring_sentry_statuscards_replay_disabled1.js +30 -0
- package/src/paraglide/messages/common_monitoring_sentry_statuscards_replay_enabled1.js +30 -0
- package/src/paraglide/messages/common_monitoring_sentry_subtitle.js +29 -0
- package/src/paraglide/messages/common_monitoring_sentry_title.js +29 -0
- package/src/paraglide/messages/common_monitoring_sentry_unsaved.js +29 -0
- package/src/paraglide/messages/common_monitoring_sentry_validate_empty.js +29 -0
- package/src/paraglide/messages/common_monitoring_sentry_validate_httpsprefix1.js +30 -0
- package/src/paraglide/messages/common_monitoring_sentry_validate_missingat1.js +30 -0
- package/src/paraglide/messages/common_monitoring_sentry_validate_missingprojectid2.js +30 -0
- package/src/paraglide/messages/common_monitoring_sentry_validate_notsentryio2.js +30 -0
- package/src/paraglide/messages/common_monitoring_sentry_validate_valid.js +29 -0
- package/src/paraglide/messages/common_monitoring_sentry_verify_button.js +29 -0
- package/src/paraglide/messages/common_monitoring_sentry_verify_description.js +29 -0
- package/src/paraglide/messages/common_monitoring_sentry_verify_error.js +29 -0
- package/src/paraglide/messages/common_monitoring_sentry_verify_note.js +29 -0
- package/src/paraglide/messages/common_monitoring_sentry_verify_notinitialized1.js +30 -0
- package/src/paraglide/messages/common_monitoring_sentry_verify_success.js +29 -0
- package/src/paraglide/messages/common_monitoring_sentry_verify_timeout.js +29 -0
- package/src/paraglide/messages/common_monitoring_sentry_verify_title.js +29 -0
- package/src/paraglide/messages/common_nav_aiproviders1.js +30 -0
- package/src/paraglide/messages/common_nav_apps.js +29 -0
- package/src/paraglide/messages/common_nav_billing_invoices.js +29 -0
- package/src/paraglide/messages/common_nav_billing_subscriptions.js +29 -0
- package/src/paraglide/messages/common_nav_billing_title.js +29 -0
- package/src/paraglide/messages/common_nav_components.js +29 -0
- package/src/paraglide/messages/common_nav_dashboard.js +29 -0
- package/src/paraglide/messages/common_nav_dependencies.js +29 -0
- package/src/paraglide/messages/common_nav_developerlogs1.js +30 -0
- package/src/paraglide/messages/common_nav_docs.js +29 -0
- package/src/paraglide/messages/common_nav_enterprise_audit.js +29 -0
- package/src/paraglide/messages/common_nav_enterprise_compliance.js +29 -0
- package/src/paraglide/messages/common_nav_enterprise_licenses.js +29 -0
- package/src/paraglide/messages/common_nav_enterprise_permissions.js +29 -0
- package/src/paraglide/messages/common_nav_enterprise_sso.js +29 -0
- package/src/paraglide/messages/common_nav_enterprise_title.js +29 -0
- package/src/paraglide/messages/common_nav_knowledgepublic_bookmarks1.js +30 -0
- package/src/paraglide/messages/common_nav_knowledgepublic_compliance1.js +30 -0
- package/src/paraglide/messages/common_nav_knowledgepublic_laws1.js +30 -0
- package/src/paraglide/messages/common_nav_knowledgepublic_title1.js +30 -0
- package/src/paraglide/messages/common_nav_market.js +29 -0
- package/src/paraglide/messages/common_nav_monitoring_errors.js +29 -0
- package/src/paraglide/messages/common_nav_monitoring_health.js +29 -0
- package/src/paraglide/messages/common_nav_monitoring_logs.js +29 -0
- package/src/paraglide/messages/common_nav_monitoring_metrics.js +29 -0
- package/src/paraglide/messages/common_nav_monitoring_overview.js +29 -0
- package/src/paraglide/messages/common_nav_monitoring_sentry.js +29 -0
- package/src/paraglide/messages/common_nav_monitoring_title.js +29 -0
- package/src/paraglide/messages/common_nav_settings.js +29 -0
- package/src/paraglide/messages/common_nav_users.js +29 -0
- package/src/paraglide/messages/common_pagination_next.js +29 -0
- package/src/paraglide/messages/common_pagination_prev.js +29 -0
- package/src/paraglide/messages/common_pagination_total.js +29 -0
- package/src/paraglide/messages/common_requestlogtable_columns_description2.js +30 -0
- package/src/paraglide/messages/common_requestlogtable_columns_duration2.js +30 -0
- package/src/paraglide/messages/common_requestlogtable_columns_method2.js +30 -0
- package/src/paraglide/messages/common_requestlogtable_columns_path2.js +30 -0
- package/src/paraglide/messages/common_requestlogtable_columns_status2.js +30 -0
- package/src/paraglide/messages/common_requestlogtable_columns_time2.js +30 -0
- package/src/paraglide/messages/common_requestlogtable_comparebenchmark3.js +30 -0
- package/src/paraglide/messages/common_settings_language.js +29 -0
- package/src/paraglide/messages/common_settings_languagechanged1.js +30 -0
- package/src/paraglide/messages/common_settings_languagechangefailed2.js +30 -0
- package/src/paraglide/messages/common_settings_languagedescription1.js +30 -0
- package/src/paraglide/messages/common_settings_title.js +29 -0
- package/src/paraglide/messages/common_setup_brand_subtitle.js +29 -0
- package/src/paraglide/messages/common_setup_brand_title.js +29 -0
- package/src/paraglide/messages/common_setup_brandfeatures_accountsecurity_desc2.js +30 -0
- package/src/paraglide/messages/common_setup_brandfeatures_accountsecurity_label2.js +30 -0
- package/src/paraglide/messages/common_setup_brandfeatures_datamgmt_desc2.js +30 -0
- package/src/paraglide/messages/common_setup_brandfeatures_datamgmt_label2.js +30 -0
- package/src/paraglide/messages/common_setup_brandfeatures_superadmin_desc2.js +30 -0
- package/src/paraglide/messages/common_setup_brandfeatures_superadmin_label2.js +30 -0
- package/src/paraglide/messages/common_setup_error.js +29 -0
- package/src/paraglide/messages/common_setup_form_confirmpassword_label1.js +30 -0
- package/src/paraglide/messages/common_setup_form_confirmpassword_placeholder1.js +30 -0
- package/src/paraglide/messages/common_setup_form_email_label.js +29 -0
- package/src/paraglide/messages/common_setup_form_email_placeholder.js +29 -0
- package/src/paraglide/messages/common_setup_form_loading.js +29 -0
- package/src/paraglide/messages/common_setup_form_password_label.js +29 -0
- package/src/paraglide/messages/common_setup_form_password_placeholder.js +29 -0
- package/src/paraglide/messages/common_setup_form_submit.js +29 -0
- package/src/paraglide/messages/common_setup_form_subtitle.js +29 -0
- package/src/paraglide/messages/common_setup_form_title.js +29 -0
- package/src/paraglide/messages/common_setup_form_username_label.js +29 -0
- package/src/paraglide/messages/common_setup_form_username_placeholder.js +29 -0
- package/src/paraglide/messages/common_setup_success.js +29 -0
- package/src/paraglide/messages/common_setup_validation_fillallfields2.js +30 -0
- package/src/paraglide/messages/common_setup_validation_passwordmismatch1.js +30 -0
- package/src/paraglide/messages/common_socialplatform_website1.js +30 -0
- package/src/paraglide/messages/common_status_deleting.js +29 -0
- package/src/paraglide/messages/common_status_empty.js +29 -0
- package/src/paraglide/messages/common_status_error.js +29 -0
- package/src/paraglide/messages/common_status_loading.js +29 -0
- package/src/paraglide/messages/common_status_saving.js +29 -0
- package/src/paraglide/messages/common_status_success.js +29 -0
- package/src/paraglide/messages/common_userfilters_clearfilters2.js +30 -0
- package/src/paraglide/messages/common_userfilters_role_admin6.js +30 -0
- package/src/paraglide/messages/common_userfilters_role_all1.js +30 -0
- package/src/paraglide/messages/common_userfilters_role_super_admin11.js +30 -0
- package/src/paraglide/messages/common_userfilters_role_user5.js +30 -0
- package/src/paraglide/messages/common_userfilters_roleplaceholder2.js +30 -0
- package/src/paraglide/messages/common_userfilters_searchplaceholder2.js +30 -0
- package/src/paraglide/messages/common_userfilters_status_active7.js +30 -0
- package/src/paraglide/messages/common_userfilters_status_all1.js +30 -0
- package/src/paraglide/messages/common_userfilters_status_banned7.js +30 -0
- package/src/paraglide/messages/common_userfilters_status_inactive9.js +30 -0
- package/src/paraglide/messages/common_userfilters_statusplaceholder2.js +30 -0
- package/src/paraglide/messages/enterprise_audit_action.js +29 -0
- package/src/paraglide/messages/enterprise_audit_actor.js +29 -0
- package/src/paraglide/messages/enterprise_audit_empty.js +29 -0
- package/src/paraglide/messages/enterprise_audit_event.js +29 -0
- package/src/paraglide/messages/enterprise_audit_failure.js +29 -0
- package/src/paraglide/messages/enterprise_audit_ip.js +29 -0
- package/src/paraglide/messages/enterprise_audit_result.js +29 -0
- package/src/paraglide/messages/enterprise_audit_subtitle.js +29 -0
- package/src/paraglide/messages/enterprise_audit_success.js +29 -0
- package/src/paraglide/messages/enterprise_audit_target.js +29 -0
- package/src/paraglide/messages/enterprise_audit_timestamp.js +29 -0
- package/src/paraglide/messages/enterprise_audit_title.js +29 -0
- package/src/paraglide/messages/enterprise_audit_useragent1.js +30 -0
- package/src/paraglide/messages/enterprise_compliance_certified.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_dataresidency1.js +30 -0
- package/src/paraglide/messages/enterprise_compliance_encryption.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_export_actions_download.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_export_actions_execute.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_export_actions_expired.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_export_actions_processing.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_export_empty.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_export_scope_user.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_export_scope_workspace.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_export_status_completed.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_export_status_expired.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_export_status_failed.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_export_status_pending.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_export_status_processing.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_export_subtitle.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_export_table_actions.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_export_table_createdat1.js +30 -0
- package/src/paraglide/messages/enterprise_compliance_export_table_error.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_export_table_requester.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_export_table_scope.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_export_table_status.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_export_table_target.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_export_table_type.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_export_title.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_export_toast_executed.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_export_toast_executefailed1.js +30 -0
- package/src/paraglide/messages/enterprise_compliance_export_type_delete.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_export_type_export.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_lastreview1.js +30 -0
- package/src/paraglide/messages/enterprise_compliance_nextreview1.js +30 -0
- package/src/paraglide/messages/enterprise_compliance_pendingreview1.js +30 -0
- package/src/paraglide/messages/enterprise_compliance_policy.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_retentiondays1.js +30 -0
- package/src/paraglide/messages/enterprise_compliance_status.js +29 -0
- package/src/paraglide/messages/enterprise_compliance_title.js +29 -0
- package/src/paraglide/messages/enterprise_issue_alertdescription1.js +30 -0
- package/src/paraglide/messages/enterprise_issue_alerttitle1.js +30 -0
- package/src/paraglide/messages/enterprise_issue_customeremail1.js +30 -0
- package/src/paraglide/messages/enterprise_issue_customerid1.js +30 -0
- package/src/paraglide/messages/enterprise_issue_customername1.js +30 -0
- package/src/paraglide/messages/enterprise_issue_description.js +29 -0
- package/src/paraglide/messages/enterprise_issue_enterprisetitle1.js +30 -0
- package/src/paraglide/messages/enterprise_issue_expiresat1.js +30 -0
- package/src/paraglide/messages/enterprise_issue_expiresathint2.js +30 -0
- package/src/paraglide/messages/enterprise_issue_features.js +29 -0
- package/src/paraglide/messages/enterprise_issue_keyoncedescription2.js +30 -0
- package/src/paraglide/messages/enterprise_issue_keyoncetitle2.js +30 -0
- package/src/paraglide/messages/enterprise_issue_plan.js +29 -0
- package/src/paraglide/messages/enterprise_issue_planhint1.js +30 -0
- package/src/paraglide/messages/enterprise_issue_seats.js +29 -0
- package/src/paraglide/messages/enterprise_issue_submit.js +29 -0
- package/src/paraglide/messages/enterprise_issue_successtitle1.js +30 -0
- package/src/paraglide/messages/enterprise_issue_title.js +29 -0
- package/src/paraglide/messages/enterprise_license_action.js +29 -0
- package/src/paraglide/messages/enterprise_license_activatedat1.js +30 -0
- package/src/paraglide/messages/enterprise_license_activationcount1.js +30 -0
- package/src/paraglide/messages/enterprise_license_activationstitle1.js +30 -0
- package/src/paraglide/messages/enterprise_license_active.js +29 -0
- package/src/paraglide/messages/enterprise_license_basicinfo1.js +30 -0
- package/src/paraglide/messages/enterprise_license_count.js +29 -0
- package/src/paraglide/messages/enterprise_license_customer.js +29 -0
- package/src/paraglide/messages/enterprise_license_customerid1.js +30 -0
- package/src/paraglide/messages/enterprise_license_detail.js +29 -0
- package/src/paraglide/messages/enterprise_license_detailtitle1.js +30 -0
- package/src/paraglide/messages/enterprise_license_email.js +29 -0
- package/src/paraglide/messages/enterprise_license_empty.js +29 -0
- package/src/paraglide/messages/enterprise_license_expired.js +29 -0
- package/src/paraglide/messages/enterprise_license_expiresat1.js +30 -0
- package/src/paraglide/messages/enterprise_license_expiresatlabel2.js +30 -0
- package/src/paraglide/messages/enterprise_license_featureauthorization1.js +30 -0
- package/src/paraglide/messages/enterprise_license_features.js +29 -0
- package/src/paraglide/messages/enterprise_license_fingerprint.js +29 -0
- package/src/paraglide/messages/enterprise_license_graceperiod1.js +30 -0
- package/src/paraglide/messages/enterprise_license_instance.js +29 -0
- package/src/paraglide/messages/enterprise_license_issue.js +29 -0
- package/src/paraglide/messages/enterprise_license_issuedat1.js +30 -0
- package/src/paraglide/messages/enterprise_license_issuer.js +29 -0
- package/src/paraglide/messages/enterprise_license_key.js +29 -0
- package/src/paraglide/messages/enterprise_license_keytitle1.js +30 -0
- package/src/paraglide/messages/enterprise_license_lastactive1.js +30 -0
- package/src/paraglide/messages/enterprise_license_managementtitle1.js +30 -0
- package/src/paraglide/messages/enterprise_license_maxusers1.js +30 -0
- package/src/paraglide/messages/enterprise_license_neveractive1.js +30 -0
- package/src/paraglide/messages/enterprise_license_nofeatureauthorization2.js +30 -0
- package/src/paraglide/messages/enterprise_license_notyet1.js +30 -0
- package/src/paraglide/messages/enterprise_license_pendingactivation1.js +30 -0
- package/src/paraglide/messages/enterprise_license_permanent.js +29 -0
- package/src/paraglide/messages/enterprise_license_plan.js +29 -0
- package/src/paraglide/messages/enterprise_license_revoke.js +29 -0
- package/src/paraglide/messages/enterprise_license_revoked.js +29 -0
- package/src/paraglide/messages/enterprise_license_revokedsuccess1.js +30 -0
- package/src/paraglide/messages/enterprise_license_revokedtoast1.js +30 -0
- package/src/paraglide/messages/enterprise_license_seats.js +29 -0
- package/src/paraglide/messages/enterprise_license_status.js +29 -0
- package/src/paraglide/messages/enterprise_license_title.js +29 -0
- package/src/paraglide/messages/enterprise_license_usedusers1.js +30 -0
- package/src/paraglide/messages/enterprise_page_description.js +29 -0
- package/src/paraglide/messages/enterprise_page_title.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_action_createrole1.js +30 -0
- package/src/paraglide/messages/enterprise_permissions_action_delete.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_action_notavailable1.js +30 -0
- package/src/paraglide/messages/enterprise_permissions_action_viewassignments1.js +30 -0
- package/src/paraglide/messages/enterprise_permissions_assign.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_assigndesc1.js +30 -0
- package/src/paraglide/messages/enterprise_permissions_assignuser1.js +30 -0
- package/src/paraglide/messages/enterprise_permissions_createrole1.js +30 -0
- package/src/paraglide/messages/enterprise_permissions_createroledesc2.js +30 -0
- package/src/paraglide/messages/enterprise_permissions_custom.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_dialog_cancel.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_dialog_close.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_dialog_create.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_empty.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_grant.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_inherited.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_level_admin.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_level_none.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_level_read.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_level_write.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_noassignments1.js +30 -0
- package/src/paraglide/messages/enterprise_permissions_permissionsmatrix1.js +30 -0
- package/src/paraglide/messages/enterprise_permissions_revoke.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_role.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_rolename1.js +30 -0
- package/src/paraglide/messages/enterprise_permissions_rolenameplaceholder2.js +30 -0
- package/src/paraglide/messages/enterprise_permissions_scope.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_searchuserplaceholder2.js +30 -0
- package/src/paraglide/messages/enterprise_permissions_subtitle.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_table_actions.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_table_members.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_table_permissions.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_table_role.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_table_type.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_title.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_toast_assigned.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_toast_created.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_toast_deleted.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_toast_namerequired1.js +30 -0
- package/src/paraglide/messages/enterprise_permissions_toast_seeddone1.js +30 -0
- package/src/paraglide/messages/enterprise_permissions_toast_systemrole1.js +30 -0
- package/src/paraglide/messages/enterprise_permissions_toast_unassigned.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_type_custom.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_type_system.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_unassign.js +29 -0
- package/src/paraglide/messages/enterprise_permissions_workspacelabel1.js +30 -0
- package/src/paraglide/messages/enterprise_sso_actiondelete1.js +30 -0
- package/src/paraglide/messages/enterprise_sso_actiondisable1.js +30 -0
- package/src/paraglide/messages/enterprise_sso_actionenable1.js +30 -0
- package/src/paraglide/messages/enterprise_sso_actions.js +29 -0
- package/src/paraglide/messages/enterprise_sso_disabled.js +29 -0
- package/src/paraglide/messages/enterprise_sso_domain.js +29 -0
- package/src/paraglide/messages/enterprise_sso_empty.js +29 -0
- package/src/paraglide/messages/enterprise_sso_enabled.js +29 -0
- package/src/paraglide/messages/enterprise_sso_entityid1.js +30 -0
- package/src/paraglide/messages/enterprise_sso_justintime2.js +30 -0
- package/src/paraglide/messages/enterprise_sso_mappings.js +29 -0
- package/src/paraglide/messages/enterprise_sso_metadataurl1.js +30 -0
- package/src/paraglide/messages/enterprise_sso_provider.js +29 -0
- package/src/paraglide/messages/enterprise_sso_statuslabel1.js +30 -0
- package/src/paraglide/messages/enterprise_sso_subtitle.js +29 -0
- package/src/paraglide/messages/enterprise_sso_syncenabled1.js +30 -0
- package/src/paraglide/messages/enterprise_sso_title.js +29 -0
- package/src/paraglide/messages/enterprise_sso_toastdeleted1.js +30 -0
- package/src/paraglide/messages/enterprise_sso_toastdisabled1.js +30 -0
- package/src/paraglide/messages/enterprise_sso_toastenabled1.js +30 -0
- package/src/paraglide/messages/enterprise_sso_type.js +29 -0
- package/src/paraglide/messages/enterprise_sso_workspace.js +29 -0
- package/src/paraglide/messages/package.json +4 -0
- package/src/paraglide/messages.js +4 -0
- package/src/paraglide/registry.js +46 -0
- package/src/paraglide/runtime.js +2311 -0
- package/src/paraglide/server.js +294 -0
- package/src/routeTree.gen.ts +46 -0
- package/src/routes/_nav/invitations/route.lazy.tsx +28 -0
- package/src/routes/_nav/invitations/route.tsx +20 -0
- package/src/routes/_nav/login-providers/route.lazy.tsx +28 -0
- package/src/routes/_nav/login-providers/route.tsx +20 -0
- package/src/server/__tests__/invitations.test.ts +311 -0
- package/src/server/serverFns/invitations.ts +165 -0
- package/src/server/serverFns/oauth-providers.ts +161 -0
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
// AllBlue - 理想之海
|
|
3
|
+
// Copyright (C) 2026 AllBlue Contributors
|
|
4
|
+
//
|
|
5
|
+
// This program is free software: you can redistribute it and/or modify
|
|
6
|
+
// it under the terms of the GNU Affero General Public License as published by
|
|
7
|
+
// the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
// (at your option) any later version.
|
|
9
|
+
//
|
|
10
|
+
// This program is distributed in the hope that it will be useful,
|
|
11
|
+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
// GNU Affero General Public License for more details.
|
|
14
|
+
//
|
|
15
|
+
// You should have received a copy of the GNU Affero General Public License
|
|
16
|
+
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
|
|
18
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
|
19
|
+
|
|
20
|
+
vi.mock('@tanstack/react-start', () => ({
|
|
21
|
+
createServerFn: (_config: unknown) => {
|
|
22
|
+
const api: any = {
|
|
23
|
+
_validator: undefined,
|
|
24
|
+
validator(schema: any) {
|
|
25
|
+
this._validator = schema
|
|
26
|
+
return this
|
|
27
|
+
},
|
|
28
|
+
handler(fn: Function) {
|
|
29
|
+
const wrapped = async (args: any) => {
|
|
30
|
+
let data = args?.data
|
|
31
|
+
if (this._validator && data !== undefined) {
|
|
32
|
+
data = this._validator.parse ? this._validator.parse(data) : data
|
|
33
|
+
}
|
|
34
|
+
return fn({ data })
|
|
35
|
+
}
|
|
36
|
+
return wrapped
|
|
37
|
+
},
|
|
38
|
+
}
|
|
39
|
+
return api
|
|
40
|
+
},
|
|
41
|
+
}))
|
|
42
|
+
|
|
43
|
+
vi.mock('@tanstack/react-start/server', () => ({
|
|
44
|
+
getRequest: () => ({}),
|
|
45
|
+
}))
|
|
46
|
+
|
|
47
|
+
vi.mock('@allbluecn/database', () => ({
|
|
48
|
+
prisma: {
|
|
49
|
+
invitationCode: {
|
|
50
|
+
findMany: vi.fn(),
|
|
51
|
+
count: vi.fn(),
|
|
52
|
+
findUnique: vi.fn(),
|
|
53
|
+
create: vi.fn(),
|
|
54
|
+
update: vi.fn(),
|
|
55
|
+
delete: vi.fn(),
|
|
56
|
+
},
|
|
57
|
+
user: {
|
|
58
|
+
findMany: vi.fn(),
|
|
59
|
+
},
|
|
60
|
+
systemSetting: {
|
|
61
|
+
findUnique: vi.fn(),
|
|
62
|
+
upsert: vi.fn(),
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
}))
|
|
66
|
+
|
|
67
|
+
vi.mock('@/server/auth-helpers', () => ({
|
|
68
|
+
requireAdmin: vi
|
|
69
|
+
.fn()
|
|
70
|
+
.mockResolvedValue({ user: { id: 'admin-1', role: 'SUPER_ADMIN' } }),
|
|
71
|
+
}))
|
|
72
|
+
|
|
73
|
+
import { prisma } from '@allbluecn/database'
|
|
74
|
+
import {
|
|
75
|
+
listInvitationCodesFn,
|
|
76
|
+
createInvitationCodeFn,
|
|
77
|
+
toggleInvitationCodeFn,
|
|
78
|
+
deleteInvitationCodeFn,
|
|
79
|
+
getRegistrationModeFn,
|
|
80
|
+
setRegistrationModeFn,
|
|
81
|
+
} from '../serverFns/invitations'
|
|
82
|
+
|
|
83
|
+
const ic = prisma.invitationCode as unknown as {
|
|
84
|
+
findMany: ReturnType<typeof vi.fn>
|
|
85
|
+
count: ReturnType<typeof vi.fn>
|
|
86
|
+
findUnique: ReturnType<typeof vi.fn>
|
|
87
|
+
create: ReturnType<typeof vi.fn>
|
|
88
|
+
update: ReturnType<typeof vi.fn>
|
|
89
|
+
delete: ReturnType<typeof vi.fn>
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const user = prisma.user as unknown as { findMany: ReturnType<typeof vi.fn> }
|
|
93
|
+
const systemSetting = prisma.systemSetting as unknown as {
|
|
94
|
+
findUnique: ReturnType<typeof vi.fn>
|
|
95
|
+
upsert: ReturnType<typeof vi.fn>
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
describe('invitations serverFn(admin 邀请码 CRUD 与注册模式)', () => {
|
|
99
|
+
beforeEach(() => {
|
|
100
|
+
vi.clearAllMocks()
|
|
101
|
+
})
|
|
102
|
+
|
|
103
|
+
it('listInvitationCodesFn:分页查询 disabledAt=null 并批量解析创建人', async () => {
|
|
104
|
+
const codes = [
|
|
105
|
+
{ id: 'c1', code: 'ABC1', maxUses: 1, usedCount: 0, expiresAt: new Date(), createdById: 'u1', disabledAt: null, createdAt: new Date(), uses: [] },
|
|
106
|
+
{ id: 'c2', code: 'DEF2', maxUses: 5, usedCount: 2, expiresAt: new Date(), createdById: null, disabledAt: null, createdAt: new Date(), uses: [] },
|
|
107
|
+
]
|
|
108
|
+
ic.findMany.mockResolvedValue(codes)
|
|
109
|
+
ic.count.mockResolvedValue(42)
|
|
110
|
+
user.findMany.mockResolvedValue([{ id: 'u1', username: 'alice' }])
|
|
111
|
+
|
|
112
|
+
const result = await listInvitationCodesFn({ data: { page: 2, pageSize: 20 } })
|
|
113
|
+
|
|
114
|
+
expect(ic.findMany).toHaveBeenCalledWith(
|
|
115
|
+
expect.objectContaining({ skip: 20, take: 20, where: { disabledAt: null } }),
|
|
116
|
+
)
|
|
117
|
+
expect(ic.count).toHaveBeenCalledWith({ where: { disabledAt: null } })
|
|
118
|
+
expect(user.findMany).toHaveBeenCalledWith({
|
|
119
|
+
where: { id: { in: ['u1'] } },
|
|
120
|
+
select: { id: true, username: true },
|
|
121
|
+
})
|
|
122
|
+
expect(result).toMatchObject({
|
|
123
|
+
total: 42,
|
|
124
|
+
page: 2,
|
|
125
|
+
pageSize: 20,
|
|
126
|
+
codes: [
|
|
127
|
+
{ code: 'ABC1', creator: 'alice' },
|
|
128
|
+
{ code: 'DEF2', creator: null },
|
|
129
|
+
],
|
|
130
|
+
})
|
|
131
|
+
})
|
|
132
|
+
|
|
133
|
+
it('listInvitationCodesFn:无创建人时不发起用户查询', async () => {
|
|
134
|
+
ic.findMany.mockResolvedValue([{ id: 'c1', createdById: null, uses: [] }])
|
|
135
|
+
ic.count.mockResolvedValue(1)
|
|
136
|
+
|
|
137
|
+
await listInvitationCodesFn({ data: { page: 1, pageSize: 10 } })
|
|
138
|
+
|
|
139
|
+
expect(user.findMany).not.toHaveBeenCalled()
|
|
140
|
+
})
|
|
141
|
+
|
|
142
|
+
it('createInvitationCodeFn:自定义 code 归一化为大写并写入 createdById', async () => {
|
|
143
|
+
ic.create.mockImplementation(({ data }: { data: { code: string } }) =>
|
|
144
|
+
Promise.resolve({ id: 'c-new', code: data.code }),
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
const result = await createInvitationCodeFn({ data: { code: ' ab12cd34 ' } })
|
|
148
|
+
|
|
149
|
+
expect(ic.create).toHaveBeenCalledWith({
|
|
150
|
+
data: expect.objectContaining({
|
|
151
|
+
code: 'AB12CD34',
|
|
152
|
+
maxUses: 1,
|
|
153
|
+
createdById: 'admin-1',
|
|
154
|
+
}),
|
|
155
|
+
})
|
|
156
|
+
expect(result.code).toBe('AB12CD34')
|
|
157
|
+
})
|
|
158
|
+
|
|
159
|
+
it('createInvitationCodeFn:自定义 code 过短 → 拒绝', async () => {
|
|
160
|
+
await expect(createInvitationCodeFn({ data: { code: 'abc000' } })).rejects.toThrow(
|
|
161
|
+
'邀请码需为 8-12 位字母或数字',
|
|
162
|
+
)
|
|
163
|
+
expect(ic.create).not.toHaveBeenCalled()
|
|
164
|
+
})
|
|
165
|
+
|
|
166
|
+
it('createInvitationCodeFn:自定义 code 含下划线短横 → 拒绝', async () => {
|
|
167
|
+
await expect(createInvitationCodeFn({ data: { code: 'ab12_cd34' } })).rejects.toThrow(
|
|
168
|
+
'邀请码需为 8-12 位字母或数字',
|
|
169
|
+
)
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
it('createInvitationCodeFn:纯字母 code(缺数字)→ 拒绝', async () => {
|
|
173
|
+
await expect(createInvitationCodeFn({ data: { code: 'abcdefgh' } })).rejects.toThrow(
|
|
174
|
+
'邀请码需同时包含字母和数字',
|
|
175
|
+
)
|
|
176
|
+
})
|
|
177
|
+
|
|
178
|
+
it('createInvitationCodeFn:纯数字 code(缺字母)→ 拒绝', async () => {
|
|
179
|
+
await expect(createInvitationCodeFn({ data: { code: '12345678' } })).rejects.toThrow(
|
|
180
|
+
'邀请码需同时包含字母和数字',
|
|
181
|
+
)
|
|
182
|
+
})
|
|
183
|
+
|
|
184
|
+
it('createInvitationCodeFn:未传 code 时自动生成满足 /^[A-F0-9]{8}$/', async () => {
|
|
185
|
+
ic.create.mockImplementation(({ data }: { data: { code: string } }) =>
|
|
186
|
+
Promise.resolve({ id: 'c-new', code: data.code }),
|
|
187
|
+
)
|
|
188
|
+
|
|
189
|
+
const result = await createInvitationCodeFn({ data: {} })
|
|
190
|
+
|
|
191
|
+
expect(result.code).toMatch(/^[A-F0-9]{8}$/)
|
|
192
|
+
})
|
|
193
|
+
|
|
194
|
+
it('toggleInvitationCodeFn:已启用(disabledAt=null)→ 写入当前时间', async () => {
|
|
195
|
+
ic.findUnique.mockResolvedValue({ id: 'c1', disabledAt: null })
|
|
196
|
+
const captures: Array<{ where: { id: string }; data: { disabledAt: Date | null } }> = []
|
|
197
|
+
ic.update.mockImplementation((arg: { where: { id: string }; data: { disabledAt: Date | null } }) => {
|
|
198
|
+
captures.push(arg)
|
|
199
|
+
return Promise.resolve({ id: arg.where.id, disabledAt: arg.data.disabledAt })
|
|
200
|
+
})
|
|
201
|
+
|
|
202
|
+
const before = Date.now()
|
|
203
|
+
await toggleInvitationCodeFn({ data: { id: 'c1' } })
|
|
204
|
+
const after = Date.now()
|
|
205
|
+
|
|
206
|
+
expect(captures).toHaveLength(1)
|
|
207
|
+
expect(captures[0].where).toEqual({ id: 'c1' })
|
|
208
|
+
const written = captures[0].data.disabledAt
|
|
209
|
+
expect(written).toBeInstanceOf(Date)
|
|
210
|
+
if (written instanceof Date) {
|
|
211
|
+
expect(written.getTime()).toBeGreaterThanOrEqual(before)
|
|
212
|
+
expect(written.getTime()).toBeLessThanOrEqual(after)
|
|
213
|
+
}
|
|
214
|
+
})
|
|
215
|
+
|
|
216
|
+
it('toggleInvitationCodeFn:已禁用 → 置回 null(重新启用)', async () => {
|
|
217
|
+
ic.findUnique.mockResolvedValue({ id: 'c1', disabledAt: new Date('2026-01-01') })
|
|
218
|
+
ic.update.mockImplementation(({ data }: { data: { disabledAt: Date | null } }) =>
|
|
219
|
+
Promise.resolve({ id: 'c1', disabledAt: data.disabledAt }),
|
|
220
|
+
)
|
|
221
|
+
|
|
222
|
+
const result = await toggleInvitationCodeFn({ data: { id: 'c1' } })
|
|
223
|
+
|
|
224
|
+
expect(result.disabledAt).toBeNull()
|
|
225
|
+
})
|
|
226
|
+
|
|
227
|
+
it('toggleInvitationCodeFn:不存在的 id 抛「邀请码不存在」', async () => {
|
|
228
|
+
ic.findUnique.mockResolvedValue(null)
|
|
229
|
+
|
|
230
|
+
await expect(toggleInvitationCodeFn({ data: { id: 'missing' } })).rejects.toThrow(
|
|
231
|
+
'邀请码不存在',
|
|
232
|
+
)
|
|
233
|
+
})
|
|
234
|
+
|
|
235
|
+
it('deleteInvitationCodeFn:usedCount > 0 拒绝删除', async () => {
|
|
236
|
+
ic.findUnique.mockResolvedValue({ id: 'c1', usedCount: 3 })
|
|
237
|
+
|
|
238
|
+
await expect(deleteInvitationCodeFn({ data: { id: 'c1' } })).rejects.toThrow(
|
|
239
|
+
'已有使用记录,请改用禁用',
|
|
240
|
+
)
|
|
241
|
+
expect(ic.delete).not.toHaveBeenCalled()
|
|
242
|
+
})
|
|
243
|
+
|
|
244
|
+
it('deleteInvitationCodeFn:usedCount === 0 删除成功', async () => {
|
|
245
|
+
ic.findUnique.mockResolvedValue({ id: 'c1', usedCount: 0 })
|
|
246
|
+
ic.delete.mockResolvedValue({ id: 'c1' })
|
|
247
|
+
|
|
248
|
+
const result = await deleteInvitationCodeFn({ data: { id: 'c1' } })
|
|
249
|
+
|
|
250
|
+
expect(ic.delete).toHaveBeenCalledWith({ where: { id: 'c1' } })
|
|
251
|
+
expect(result).toEqual({ deleted: true })
|
|
252
|
+
})
|
|
253
|
+
|
|
254
|
+
it('deleteInvitationCodeFn:不存在的 id 抛「邀请码不存在」', async () => {
|
|
255
|
+
ic.findUnique.mockResolvedValue(null)
|
|
256
|
+
|
|
257
|
+
await expect(deleteInvitationCodeFn({ data: { id: 'missing' } })).rejects.toThrow(
|
|
258
|
+
'邀请码不存在',
|
|
259
|
+
)
|
|
260
|
+
})
|
|
261
|
+
|
|
262
|
+
it('getRegistrationModeFn:无行时默认 invite', async () => {
|
|
263
|
+
systemSetting.findUnique.mockResolvedValue(null)
|
|
264
|
+
|
|
265
|
+
await expect(getRegistrationModeFn({ data: {} })).resolves.toEqual({ mode: 'invite' })
|
|
266
|
+
})
|
|
267
|
+
|
|
268
|
+
it('getRegistrationModeFn:value=open 返回 open', async () => {
|
|
269
|
+
systemSetting.findUnique.mockResolvedValue({ key: 'auth.registrationMode', value: 'open' })
|
|
270
|
+
|
|
271
|
+
await expect(getRegistrationModeFn({ data: {} })).resolves.toEqual({ mode: 'open' })
|
|
272
|
+
})
|
|
273
|
+
|
|
274
|
+
it('setRegistrationModeFn:写入后 upsert create 分支带 category=auth', async () => {
|
|
275
|
+
systemSetting.upsert.mockResolvedValue({ id: 's1' })
|
|
276
|
+
|
|
277
|
+
const result = await setRegistrationModeFn({ data: { mode: 'open' } })
|
|
278
|
+
|
|
279
|
+
expect(systemSetting.upsert).toHaveBeenCalledWith({
|
|
280
|
+
where: { key: 'auth.registrationMode' },
|
|
281
|
+
update: { value: 'open' },
|
|
282
|
+
create: expect.objectContaining({
|
|
283
|
+
key: 'auth.registrationMode',
|
|
284
|
+
value: 'open',
|
|
285
|
+
category: 'auth',
|
|
286
|
+
}),
|
|
287
|
+
})
|
|
288
|
+
expect(result).toEqual({ mode: 'open' })
|
|
289
|
+
})
|
|
290
|
+
|
|
291
|
+
it('setRegistrationModeFn + getRegistrationModeFn:写读一致', async () => {
|
|
292
|
+
let stored: string | null = null
|
|
293
|
+
systemSetting.upsert.mockImplementation(
|
|
294
|
+
({ update }: { update: { value: string } }) => {
|
|
295
|
+
stored = update.value
|
|
296
|
+
return Promise.resolve({ id: 's1', value: stored })
|
|
297
|
+
},
|
|
298
|
+
)
|
|
299
|
+
systemSetting.findUnique.mockImplementation(() =>
|
|
300
|
+
stored === null
|
|
301
|
+
? Promise.resolve(null)
|
|
302
|
+
: Promise.resolve({ key: 'auth.registrationMode', value: stored }),
|
|
303
|
+
)
|
|
304
|
+
|
|
305
|
+
await setRegistrationModeFn({ data: { mode: 'open' } })
|
|
306
|
+
await expect(getRegistrationModeFn({ data: {} })).resolves.toEqual({ mode: 'open' })
|
|
307
|
+
|
|
308
|
+
await setRegistrationModeFn({ data: { mode: 'invite' } })
|
|
309
|
+
await expect(getRegistrationModeFn({ data: {} })).resolves.toEqual({ mode: 'invite' })
|
|
310
|
+
})
|
|
311
|
+
})
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
// AllBlue - 理想之海
|
|
3
|
+
// Copyright (C) 2026 AllBlue Contributors
|
|
4
|
+
//
|
|
5
|
+
// This program is free software: you can redistribute it and/or modify
|
|
6
|
+
// it under the terms of the GNU Affero General Public License as published by
|
|
7
|
+
// the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
// (at your option) any later version.
|
|
9
|
+
//
|
|
10
|
+
// This program is distributed in the hope that it will be useful,
|
|
11
|
+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
// GNU Affero General Public License for more details.
|
|
14
|
+
//
|
|
15
|
+
// You should have received a copy of the GNU Affero General Public License
|
|
16
|
+
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
|
|
18
|
+
import { createServerFn } from '@tanstack/react-start'
|
|
19
|
+
import { z } from 'zod'
|
|
20
|
+
import { prisma } from '@allbluecn/database'
|
|
21
|
+
import { requireAdmin } from '@/server/auth-helpers'
|
|
22
|
+
|
|
23
|
+
function randomInvitationCode(): string {
|
|
24
|
+
const hex = crypto
|
|
25
|
+
.getRandomValues(new Uint8Array(4))
|
|
26
|
+
.reduce((s, b) => s + b.toString(16).padStart(2, '0'), '')
|
|
27
|
+
return hex.toUpperCase()
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const pageSchema = z.object({
|
|
31
|
+
page: z.number().int().min(1).default(1),
|
|
32
|
+
pageSize: z.number().int().min(1).max(100).default(50),
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
export const listInvitationCodesFn = createServerFn({ method: 'GET' })
|
|
36
|
+
.validator(pageSchema)
|
|
37
|
+
.handler(async ({ data }) => {
|
|
38
|
+
await requireAdmin()
|
|
39
|
+
const skip = (data.page - 1) * data.pageSize
|
|
40
|
+
const [codes, total] = await Promise.all([
|
|
41
|
+
prisma.invitationCode.findMany({
|
|
42
|
+
where: { disabledAt: null },
|
|
43
|
+
select: {
|
|
44
|
+
id: true,
|
|
45
|
+
code: true,
|
|
46
|
+
maxUses: true,
|
|
47
|
+
usedCount: true,
|
|
48
|
+
expiresAt: true,
|
|
49
|
+
createdById: true,
|
|
50
|
+
disabledAt: true,
|
|
51
|
+
createdAt: true,
|
|
52
|
+
uses: {
|
|
53
|
+
select: { userId: true, usedAt: true, user: { select: { username: true } } },
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
orderBy: { createdAt: 'desc' },
|
|
57
|
+
skip,
|
|
58
|
+
take: data.pageSize,
|
|
59
|
+
}),
|
|
60
|
+
prisma.invitationCode.count({ where: { disabledAt: null } }),
|
|
61
|
+
])
|
|
62
|
+
const creatorIds = [
|
|
63
|
+
...new Set(codes.map((c) => c.createdById).filter((v): v is string => !!v)),
|
|
64
|
+
]
|
|
65
|
+
const creators = creatorIds.length
|
|
66
|
+
? await prisma.user.findMany({
|
|
67
|
+
where: { id: { in: creatorIds } },
|
|
68
|
+
select: { id: true, username: true },
|
|
69
|
+
})
|
|
70
|
+
: []
|
|
71
|
+
const creatorMap = new Map(creators.map((u) => [u.id, u.username]))
|
|
72
|
+
return {
|
|
73
|
+
codes: codes.map((c) => ({
|
|
74
|
+
...c,
|
|
75
|
+
creator: c.createdById ? (creatorMap.get(c.createdById) ?? null) : null,
|
|
76
|
+
})),
|
|
77
|
+
total,
|
|
78
|
+
page: data.page,
|
|
79
|
+
pageSize: data.pageSize,
|
|
80
|
+
}
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
const createCodeSchema = z.object({
|
|
84
|
+
code: z
|
|
85
|
+
.string()
|
|
86
|
+
.trim()
|
|
87
|
+
.regex(/^[A-Za-z0-9]{8,12}$/, '邀请码需为 8-12 位字母或数字')
|
|
88
|
+
.refine((v) => /[a-zA-Z]/.test(v) && /[0-9]/.test(v), '邀请码需同时包含字母和数字')
|
|
89
|
+
.optional(),
|
|
90
|
+
maxUses: z.number().int().min(1).max(9999).default(1),
|
|
91
|
+
validDays: z.number().int().min(1).max(365).default(30),
|
|
92
|
+
})
|
|
93
|
+
|
|
94
|
+
export const createInvitationCodeFn = createServerFn({ method: 'POST' })
|
|
95
|
+
.validator(createCodeSchema)
|
|
96
|
+
.handler(async ({ data }) => {
|
|
97
|
+
const session = await requireAdmin()
|
|
98
|
+
const code = data.code ? data.code.trim().toUpperCase() : randomInvitationCode()
|
|
99
|
+
const row = await prisma.invitationCode.create({
|
|
100
|
+
data: {
|
|
101
|
+
code,
|
|
102
|
+
maxUses: data.maxUses,
|
|
103
|
+
expiresAt: new Date(Date.now() + data.validDays * 24 * 60 * 60 * 1000),
|
|
104
|
+
createdById: session.user?.id ?? null,
|
|
105
|
+
},
|
|
106
|
+
})
|
|
107
|
+
return row
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
const idSchema = z.object({ id: z.string().min(1) })
|
|
111
|
+
|
|
112
|
+
export const toggleInvitationCodeFn = createServerFn({ method: 'POST' })
|
|
113
|
+
.validator(idSchema)
|
|
114
|
+
.handler(async ({ data }) => {
|
|
115
|
+
await requireAdmin()
|
|
116
|
+
const row = await prisma.invitationCode.findUnique({ where: { id: data.id } })
|
|
117
|
+
if (!row) throw new Error('邀请码不存在')
|
|
118
|
+
const disabledAt = row.disabledAt ? null : new Date()
|
|
119
|
+
const updated = await prisma.invitationCode.update({
|
|
120
|
+
where: { id: data.id },
|
|
121
|
+
data: { disabledAt },
|
|
122
|
+
})
|
|
123
|
+
return updated
|
|
124
|
+
})
|
|
125
|
+
|
|
126
|
+
export const deleteInvitationCodeFn = createServerFn({ method: 'POST' })
|
|
127
|
+
.validator(idSchema)
|
|
128
|
+
.handler(async ({ data }) => {
|
|
129
|
+
await requireAdmin()
|
|
130
|
+
const row = await prisma.invitationCode.findUnique({
|
|
131
|
+
where: { id: data.id },
|
|
132
|
+
select: { id: true, usedCount: true },
|
|
133
|
+
})
|
|
134
|
+
if (!row) throw new Error('邀请码不存在')
|
|
135
|
+
if (row.usedCount > 0) throw new Error('已有使用记录,请改用禁用')
|
|
136
|
+
await prisma.invitationCode.delete({ where: { id: data.id } })
|
|
137
|
+
return { deleted: true }
|
|
138
|
+
})
|
|
139
|
+
|
|
140
|
+
export const getRegistrationModeFn = createServerFn({ method: 'GET' })
|
|
141
|
+
.validator(z.object({}))
|
|
142
|
+
.handler(async () => {
|
|
143
|
+
await requireAdmin()
|
|
144
|
+
const setting = await prisma.systemSetting.findUnique({
|
|
145
|
+
where: { key: 'auth.registrationMode' },
|
|
146
|
+
})
|
|
147
|
+
return { mode: setting?.value === 'open' ? 'open' : 'invite' }
|
|
148
|
+
})
|
|
149
|
+
|
|
150
|
+
export const setRegistrationModeFn = createServerFn({ method: 'POST' })
|
|
151
|
+
.validator(z.object({ mode: z.enum(['invite', 'open']) }))
|
|
152
|
+
.handler(async ({ data }) => {
|
|
153
|
+
await requireAdmin()
|
|
154
|
+
await prisma.systemSetting.upsert({
|
|
155
|
+
where: { key: 'auth.registrationMode' },
|
|
156
|
+
update: { value: data.mode },
|
|
157
|
+
create: {
|
|
158
|
+
key: 'auth.registrationMode',
|
|
159
|
+
value: data.mode,
|
|
160
|
+
category: 'auth',
|
|
161
|
+
desc: '注册模式:invite 需邀请码,open 开放注册',
|
|
162
|
+
},
|
|
163
|
+
})
|
|
164
|
+
return { mode: data.mode }
|
|
165
|
+
})
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
// ⚠ serverFn 纯净原则:本文件禁止 export 普通函数/常量;只允许 createServerFn 返回值和 interface。
|
|
2
|
+
// 工具函数(如 maskSecret)如需复用请放同目录其他 .ts 文件。
|
|
3
|
+
//
|
|
4
|
+
// 跨 app 缓存失效:admin 与 web 是独立 app(各自独立 prisma 实例),admin 写 DB 后 web 端
|
|
5
|
+
// oauth-config 60s 缓存最长延迟 60s 生效(TTL 自然过期,符合 plan2 spec),无跨进程失效通道。
|
|
6
|
+
import { createServerFn } from '@tanstack/react-start'
|
|
7
|
+
import { z } from 'zod'
|
|
8
|
+
import { prisma } from '@allbluecn/database'
|
|
9
|
+
import { requireAdmin } from '@/server/auth-helpers'
|
|
10
|
+
import { decryptSecret, encryptSecret } from '@allbluecn/kernel/crypto'
|
|
11
|
+
|
|
12
|
+
export interface OAuthProviderView {
|
|
13
|
+
provider: string
|
|
14
|
+
clientId: string
|
|
15
|
+
/** 数据库行是否含有效密文(v1. 前缀);'***' 占位视为 false */
|
|
16
|
+
hasSecret: boolean
|
|
17
|
+
enabled: boolean
|
|
18
|
+
hasEnvFallback: boolean
|
|
19
|
+
fromDb: boolean
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const PROVIDER_KEY = 'google'
|
|
23
|
+
|
|
24
|
+
const GOOGLE_OPENID_URL = 'https://accounts.google.com/.well-known/openid-configuration'
|
|
25
|
+
|
|
26
|
+
function hasGoogleEnvFallback(): boolean {
|
|
27
|
+
return Boolean(process.env.AUTH_GOOGLE_ID && process.env.AUTH_GOOGLE_SECRET)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const listOAuthProvidersFn = createServerFn({ method: 'GET' })
|
|
31
|
+
.validator(z.object({}))
|
|
32
|
+
.handler(async (): Promise<{ providers: OAuthProviderView[] }> => {
|
|
33
|
+
await requireAdmin()
|
|
34
|
+
const row = await prisma.oAuthProviderConfig.findUnique({
|
|
35
|
+
where: { provider: PROVIDER_KEY },
|
|
36
|
+
})
|
|
37
|
+
return {
|
|
38
|
+
providers: [
|
|
39
|
+
row
|
|
40
|
+
? {
|
|
41
|
+
provider: PROVIDER_KEY,
|
|
42
|
+
clientId: row.clientId,
|
|
43
|
+
hasSecret:
|
|
44
|
+
row.clientSecret.startsWith('v1.') &&
|
|
45
|
+
decryptSecret(row.clientSecret) !== null,
|
|
46
|
+
enabled: row.enabled,
|
|
47
|
+
hasEnvFallback: false,
|
|
48
|
+
fromDb: true,
|
|
49
|
+
}
|
|
50
|
+
: {
|
|
51
|
+
provider: PROVIDER_KEY,
|
|
52
|
+
clientId: '',
|
|
53
|
+
hasSecret: false,
|
|
54
|
+
enabled: false,
|
|
55
|
+
hasEnvFallback: hasGoogleEnvFallback(),
|
|
56
|
+
fromDb: false,
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
}
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
export const saveOAuthProviderFn = createServerFn({ method: 'POST' })
|
|
63
|
+
.validator(
|
|
64
|
+
z.object({
|
|
65
|
+
provider: z.literal('google'),
|
|
66
|
+
clientId: z.string().min(1, 'clientId 不能为空'),
|
|
67
|
+
clientSecret: z.string().optional(),
|
|
68
|
+
enabled: z.boolean(),
|
|
69
|
+
}),
|
|
70
|
+
)
|
|
71
|
+
.handler(async ({ data }) => {
|
|
72
|
+
await requireAdmin()
|
|
73
|
+
const hasSecret = Boolean(data.clientSecret && data.clientSecret.length > 0)
|
|
74
|
+
if (!hasSecret) {
|
|
75
|
+
// 无 secret:仅当 DB 已有记录时更新 clientId/enabled;无记录时创建 secret='***' 占位
|
|
76
|
+
// ('***' 会被 web 端 decryptSecret 返回 null,filter 掉,实际回落 env)
|
|
77
|
+
const existing = await prisma.oAuthProviderConfig.findUnique({
|
|
78
|
+
where: { provider: data.provider },
|
|
79
|
+
})
|
|
80
|
+
if (existing) {
|
|
81
|
+
await prisma.oAuthProviderConfig.update({
|
|
82
|
+
where: { provider: data.provider },
|
|
83
|
+
data: { clientId: data.clientId, enabled: data.enabled },
|
|
84
|
+
})
|
|
85
|
+
} else {
|
|
86
|
+
await prisma.oAuthProviderConfig.create({
|
|
87
|
+
data: {
|
|
88
|
+
provider: data.provider,
|
|
89
|
+
clientId: data.clientId,
|
|
90
|
+
clientSecret: '***',
|
|
91
|
+
enabled: data.enabled,
|
|
92
|
+
},
|
|
93
|
+
})
|
|
94
|
+
}
|
|
95
|
+
return { ok: true }
|
|
96
|
+
}
|
|
97
|
+
const encrypted = encryptSecret(data.clientSecret as string)
|
|
98
|
+
await prisma.oAuthProviderConfig.upsert({
|
|
99
|
+
where: { provider: data.provider },
|
|
100
|
+
create: {
|
|
101
|
+
provider: data.provider,
|
|
102
|
+
clientId: data.clientId,
|
|
103
|
+
clientSecret: encrypted,
|
|
104
|
+
enabled: data.enabled,
|
|
105
|
+
},
|
|
106
|
+
update: {
|
|
107
|
+
clientId: data.clientId,
|
|
108
|
+
clientSecret: encrypted,
|
|
109
|
+
enabled: data.enabled,
|
|
110
|
+
},
|
|
111
|
+
})
|
|
112
|
+
return { ok: true }
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
export const testOAuthProviderFn = createServerFn({ method: 'POST' })
|
|
116
|
+
.validator(
|
|
117
|
+
z.object({
|
|
118
|
+
provider: z.literal('google'),
|
|
119
|
+
clientId: z.string(),
|
|
120
|
+
}),
|
|
121
|
+
)
|
|
122
|
+
.handler(async ({ data }) => {
|
|
123
|
+
await requireAdmin()
|
|
124
|
+
if (!data.clientId || data.clientId.trim().length === 0) {
|
|
125
|
+
return { ok: false, detail: 'clientId 为空,无法测试' }
|
|
126
|
+
}
|
|
127
|
+
let res: Response
|
|
128
|
+
try {
|
|
129
|
+
res = await fetch(GOOGLE_OPENID_URL, {
|
|
130
|
+
method: 'GET',
|
|
131
|
+
headers: { 'accept': 'application/json' },
|
|
132
|
+
signal: AbortSignal.timeout(10_000),
|
|
133
|
+
})
|
|
134
|
+
} catch (e) {
|
|
135
|
+
const msg = e instanceof Error ? e.message : String(e)
|
|
136
|
+
return { ok: false, detail: `无法访问 Google OpenID 端点:${msg}` }
|
|
137
|
+
}
|
|
138
|
+
if (!res.ok) {
|
|
139
|
+
return { ok: false, detail: `Google OpenID 端点返回 HTTP ${res.status}` }
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
ok: true,
|
|
143
|
+
detail:
|
|
144
|
+
'仅验证 Google OAuth 端点可达,key 真伪需在实际登录流程中验证',
|
|
145
|
+
}
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
export const deleteOAuthProviderFn = createServerFn({ method: 'POST' })
|
|
149
|
+
.validator(z.object({ provider: z.literal('google') }))
|
|
150
|
+
.handler(async ({ data }) => {
|
|
151
|
+
await requireAdmin()
|
|
152
|
+
try {
|
|
153
|
+
await prisma.oAuthProviderConfig.delete({ where: { provider: data.provider } })
|
|
154
|
+
} catch (e) {
|
|
155
|
+
const code = (e as { code?: string }).code
|
|
156
|
+
if (code !== 'P2025') {
|
|
157
|
+
throw e
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return { ok: true, fallbackToEnv: hasGoogleEnvFallback() }
|
|
161
|
+
})
|