kasy-cli 1.32.0 → 1.35.0
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/README.md +1 -1
- package/bin/kasy.js +66 -2
- package/docs/cli-reference.md +7 -7
- package/lib/commands/apple-web.js +222 -0
- package/lib/commands/configure.js +3 -91
- package/lib/commands/doctor.js +20 -0
- package/lib/commands/facebook.js +189 -0
- package/lib/commands/new.js +61 -11
- package/lib/commands/release-version.js +234 -0
- package/lib/commands/update.js +27 -0
- package/lib/scaffold/CHANGELOG.json +27 -0
- package/lib/scaffold/backends/api/patch/lib/features/authentication/api/authentication_api.dart +24 -0
- package/lib/scaffold/backends/api/patch/lib/features/authentication/api/authentication_api_interface.dart +15 -0
- package/lib/scaffold/backends/api/patch/lib/features/authentication/repositories/authentication_repository.dart +27 -0
- package/lib/scaffold/backends/api/patch/lib/features/subscriptions/api/entities/subscription_entity.dart +1 -0
- package/lib/scaffold/backends/firebase/setup-from-scratch.js +199 -21
- package/lib/scaffold/backends/patch-base-hashes.json +66 -0
- package/lib/scaffold/backends/supabase/deploy.js +92 -0
- package/lib/scaffold/backends/supabase/edge-functions/stripe-webhook/index.ts +2 -0
- package/lib/scaffold/backends/supabase/migrations/20240101000007_welcome_notification.sql +36 -23
- package/lib/scaffold/backends/supabase/migrations/20240101000014_subscription_trial_end.sql +6 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/authentication/api/authentication_api.dart +92 -3
- package/lib/scaffold/backends/supabase/patch/lib/features/authentication/repositories/authentication_repository.dart +36 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/subscriptions/api/entities/subscription_entity.dart +1 -0
- package/lib/scaffold/generate.js +53 -4
- package/lib/scaffold/shared/generator-utils.js +18 -6
- package/lib/utils/apple-web.js +147 -0
- package/lib/utils/facebook.js +162 -0
- package/lib/utils/i18n/messages-en.js +85 -0
- package/lib/utils/i18n/messages-es.js +85 -0
- package/lib/utils/i18n/messages-pt.js +85 -0
- package/package.json +5 -2
- package/templates/firebase/.firebase/hosting.YnVpbGQvd2Vi.cache +73 -0
- package/templates/firebase/AGENTS.md +170 -0
- package/templates/firebase/CLAUDE.md +16 -0
- package/templates/firebase/DESIGN_SYSTEM.md +269 -0
- package/templates/firebase/docs/auth-setup.en.md +4 -2
- package/templates/firebase/docs/auth-setup.es.md +4 -2
- package/templates/firebase/docs/auth-setup.pt.md +4 -2
- package/templates/firebase/firebase.json +56 -1
- package/templates/firebase/functions/src/authentication/triggers.ts +10 -6
- package/templates/firebase/functions/src/core/data/entities/subscription_entity.ts +5 -0
- package/templates/firebase/functions/src/core/data/entities/user_entity.ts +9 -1
- package/templates/firebase/functions/src/core/data/repositories/user_repository.ts +27 -0
- package/templates/firebase/functions/src/subscriptions/models/subscriptions.ts +3 -0
- package/templates/firebase/functions/src/subscriptions/stripe_functions.ts +4 -0
- package/templates/firebase/lib/components/components.dart +1 -0
- package/templates/firebase/lib/components/kasy_alert.dart +0 -1
- package/templates/firebase/lib/components/kasy_app_bar.dart +35 -17
- package/templates/firebase/lib/components/kasy_bottom_sheet.dart +0 -1
- package/templates/firebase/lib/components/kasy_date_picker.dart +0 -5
- package/templates/firebase/lib/components/kasy_dialog.dart +0 -1
- package/templates/firebase/lib/components/kasy_otp_verification_bottom_sheet.dart +1 -1
- package/templates/firebase/lib/components/kasy_screen.dart +114 -0
- package/templates/firebase/lib/components/kasy_sidebar.dart +189 -120
- package/templates/firebase/lib/components/kasy_text_area.dart +0 -1
- package/templates/firebase/lib/components/kasy_text_field.dart +0 -1
- package/templates/firebase/lib/components/kasy_text_field_otp.dart +0 -1
- package/templates/firebase/lib/components/kasy_toast.dart +108 -73
- package/templates/firebase/lib/core/app_update/app_update_repository.dart +54 -0
- package/templates/firebase/lib/core/app_update/app_update_status.dart +14 -0
- package/templates/firebase/lib/core/app_update/update_available_sheet.dart +70 -0
- package/templates/firebase/lib/core/bottom_menu/active_tab_notifier.dart +40 -3
- package/templates/firebase/lib/core/bottom_menu/bottom_menu.dart +82 -34
- package/templates/firebase/lib/core/bottom_menu/web_content_wrapper.dart +6 -6
- package/templates/firebase/lib/core/bottom_menu/web_url.dart +20 -0
- package/templates/firebase/lib/core/chrome/chrome_visibility.dart +22 -0
- package/templates/firebase/lib/core/config/features.dart +5 -0
- package/templates/firebase/lib/core/data/api/remote_config_api.dart +38 -1
- package/templates/firebase/lib/core/guards/guard.dart +16 -2
- package/templates/firebase/lib/core/icons/kasy_icons.dart +3 -0
- package/templates/firebase/lib/core/rating/widgets/rate_banner.dart +2 -5
- package/templates/firebase/lib/core/rating/widgets/review_popup.dart +48 -124
- package/templates/firebase/lib/core/shared_preferences/shared_preferences.dart +14 -0
- package/templates/firebase/lib/core/states/components/maybe_show_update_available.dart +32 -0
- package/templates/firebase/lib/core/states/logout_action.dart +5 -1
- package/templates/firebase/lib/core/states/user_state_notifier.dart +85 -14
- package/templates/firebase/lib/core/theme/responsive_text_theme.dart +69 -0
- package/templates/firebase/lib/core/theme/texts.dart +90 -57
- package/templates/firebase/lib/core/theme/type_scale.dart +77 -0
- package/templates/firebase/lib/core/theme/web_background_sync_web.dart +20 -6
- package/templates/firebase/lib/core/utils/image_bytes_loader.dart +12 -0
- package/templates/firebase/lib/core/utils/image_bytes_loader_io.dart +28 -0
- package/templates/firebase/lib/core/utils/image_bytes_loader_web.dart +56 -0
- package/templates/firebase/lib/core/web_screen_width.dart +15 -0
- package/templates/firebase/lib/core/web_screen_width_io.dart +3 -0
- package/templates/firebase/lib/core/web_screen_width_web.dart +10 -0
- package/templates/firebase/lib/core/web_viewport_scale.dart +61 -25
- package/templates/firebase/lib/core/widgets/focus_visibility.dart +89 -0
- package/templates/firebase/lib/core/widgets/update_bottom_sheet.dart +29 -126
- package/templates/firebase/lib/features/ai_chat/ai_chat_page.dart +11 -8
- package/templates/firebase/lib/features/ai_chat/ui/widgets/ai_chat_composer.dart +21 -0
- package/templates/firebase/lib/features/ai_chat/ui/widgets/ai_chat_conversation_view.dart +1 -2
- package/templates/firebase/lib/features/ai_chat/ui/widgets/ai_conversation_list.dart +2 -3
- package/templates/firebase/lib/features/ai_chat/ui/widgets/ai_conversation_tile.dart +1 -2
- package/templates/firebase/lib/features/authentication/api/auth_web_support.dart +12 -0
- package/templates/firebase/lib/features/authentication/api/auth_web_support_web.dart +25 -0
- package/templates/firebase/lib/features/authentication/api/authentication_api.dart +266 -0
- package/templates/firebase/lib/features/authentication/api/authentication_api_interface.dart +22 -0
- package/templates/firebase/lib/features/authentication/navigation/post_login_navigation.dart +32 -0
- package/templates/firebase/lib/features/authentication/providers/phone_auth_notifier.dart +7 -7
- package/templates/firebase/lib/features/authentication/providers/signin_state_provider.dart +34 -10
- package/templates/firebase/lib/features/authentication/providers/signup_state_provider.dart +2 -2
- package/templates/firebase/lib/features/authentication/repositories/authentication_repository.dart +37 -0
- package/templates/firebase/lib/features/authentication/repositories/exceptions/authentication_exceptions.dart +8 -0
- package/templates/firebase/lib/features/authentication/ui/components/otp_verification.dart +2 -2
- package/templates/firebase/lib/features/authentication/ui/components/phone_input.dart +2 -2
- package/templates/firebase/lib/features/authentication/ui/signin_page.dart +80 -15
- package/templates/firebase/lib/features/authentication/ui/signup_page.dart +20 -14
- package/templates/firebase/lib/features/authentication/ui/widgets/auth_card_scaffold.dart +2 -2
- package/templates/firebase/lib/features/authentication/ui/widgets/recover_password_result.dart +2 -2
- package/templates/firebase/lib/features/feedbacks/ui/widgets/add_feature_button.dart +0 -1
- package/templates/firebase/lib/features/feedbacks/ui/widgets/feature_card.dart +1 -2
- package/templates/firebase/lib/features/home/design_system_page.dart +134 -67
- package/templates/firebase/lib/features/home/home_components_page.dart +8 -1
- package/templates/firebase/lib/features/home/home_components_preview_page.dart +1 -3
- package/templates/firebase/lib/features/home/home_components_preview_registry.dart +186 -56
- package/templates/firebase/lib/features/home/home_page.dart +4 -0
- package/templates/firebase/lib/features/local_reminders/ui/reminder_page.dart +169 -208
- package/templates/firebase/lib/features/notifications/providers/notifications_provider.dart +10 -0
- package/templates/firebase/lib/features/notifications/ui/components/notification_settings_sheet.dart +2 -2
- package/templates/firebase/lib/features/notifications/ui/components/notification_tile.dart +21 -8
- package/templates/firebase/lib/features/notifications/ui/components/push_notification_switcher.dart +2 -2
- package/templates/firebase/lib/features/notifications/ui/notifications_page.dart +3 -4
- package/templates/firebase/lib/features/notifications/ui/widgets/notification_tile.dart +84 -128
- package/templates/firebase/lib/features/onboarding/providers/onboarding_model.dart +11 -0
- package/templates/firebase/lib/features/onboarding/providers/onboarding_provider.dart +30 -3
- package/templates/firebase/lib/features/onboarding/ui/components/onboarding_loader.dart +13 -4
- package/templates/firebase/lib/features/onboarding/ui/widgets/onboarding_illustration_scaffold.dart +3 -4
- package/templates/firebase/lib/features/onboarding/ui/widgets/onboarding_radio_question.dart +2 -4
- package/templates/firebase/lib/features/onboarding/ui/widgets/selectable_row_tile.dart +2 -1
- package/templates/firebase/lib/features/settings/settings_page.dart +152 -11
- package/templates/firebase/lib/features/settings/ui/components/admin/admin_page.dart +58 -21
- package/templates/firebase/lib/features/settings/ui/components/admin/admin_users_tab.dart +12 -12
- package/templates/firebase/lib/features/settings/ui/components/admin/send_push_notification_page.dart +1 -4
- package/templates/firebase/lib/features/settings/ui/components/avatar_component.dart +2 -2
- package/templates/firebase/lib/features/settings/ui/components/create_password_sheet.dart +141 -0
- package/templates/firebase/lib/features/settings/ui/components/language_switcher.dart +0 -1
- package/templates/firebase/lib/features/settings/ui/widgets/admin_card.dart +42 -38
- package/templates/firebase/lib/features/settings/ui/widgets/settings_tile.dart +17 -2
- package/templates/firebase/lib/features/subscriptions/api/entities/subscription_entity.dart +3 -0
- package/templates/firebase/lib/features/subscriptions/api/stripe_product.dart +12 -11
- package/templates/firebase/lib/features/subscriptions/repositories/subscription_repository.dart +25 -2
- package/templates/firebase/lib/features/subscriptions/ui/component/active_premium_content.dart +319 -143
- package/templates/firebase/lib/features/subscriptions/ui/component/paywall_minimal.dart +1 -5
- package/templates/firebase/lib/features/subscriptions/ui/component/paywall_row.dart +1 -5
- package/templates/firebase/lib/features/subscriptions/ui/component/paywall_with_switch.dart +2 -5
- package/templates/firebase/lib/features/subscriptions/ui/component/premium_content.dart +1 -4
- package/templates/firebase/lib/features/subscriptions/ui/widgets/feature_line.dart +1 -2
- package/templates/firebase/lib/features/subscriptions/ui/widgets/premium_banner.dart +2 -7
- package/templates/firebase/lib/features/subscriptions/ui/widgets/premium_feature.dart +2 -4
- package/templates/firebase/lib/features/subscriptions/ui/widgets/selectable_col.dart +1 -4
- package/templates/firebase/lib/features/subscriptions/ui/widgets/selectable_row.dart +0 -3
- package/templates/firebase/lib/i18n/en.i18n.json +54 -7
- package/templates/firebase/lib/i18n/es.i18n.json +54 -7
- package/templates/firebase/lib/i18n/pt.i18n.json +54 -7
- package/templates/firebase/lib/main.dart +11 -2
- package/templates/firebase/lib/router.dart +94 -13
- package/templates/firebase/pubspec.yaml +1 -1
- package/templates/firebase/test/core/data/api/fake_remote_config_api.dart +14 -0
- package/templates/firebase/test/core/states/user_state_notifier_test.dart +47 -3
- package/templates/firebase/test/core/web_viewport_scale_test.dart +68 -0
- package/templates/firebase/test/features/authentication/data/api/auth_api_fake.dart +15 -0
- package/templates/firebase/tool/design_check.dart +152 -0
- package/templates/firebase/web/index.html +162 -14
- package/templates/firebase/assets/images/review.png +0 -0
- package/templates/firebase/assets/images/update.png +0 -0
- package/templates/firebase/lib/core/guards/user_info_guard.dart +0 -61
- package/templates/firebase/lib/features/notifications/ui/components/notifications_header.dart +0 -32
|
@@ -336,6 +336,25 @@ module.exports = {
|
|
|
336
336
|
'new.firebase.success.deployStep': '• Deploy backend (from inside the project folder):',
|
|
337
337
|
|
|
338
338
|
'cli.command.deploy.description': 'Publish the server to Firebase or Supabase',
|
|
339
|
+
'cli.command.releaseVersion.description': 'Announce a new app version to existing users (Firebase Remote Config)',
|
|
340
|
+
'releaseVersion.intro': 'Announce version → Firebase Remote Config',
|
|
341
|
+
'releaseVersion.notKasy': 'Not a Kasy project (kit_setup.json not found).',
|
|
342
|
+
'releaseVersion.noFirebase': 'This command needs a Firebase project (firebase.json not found). Run it inside a project with the Firebase backend.',
|
|
343
|
+
'releaseVersion.noProject': 'Could not detect the Firebase project. Pass --project <id>.',
|
|
344
|
+
'releaseVersion.current': 'Installed version (pubspec): {version}',
|
|
345
|
+
'releaseVersion.detectedProject': 'Firebase project: {id}',
|
|
346
|
+
'releaseVersion.qVersion': 'Which version is now live in the stores?',
|
|
347
|
+
'releaseVersion.qForced': 'Force this update? (blocks the app until the user updates)',
|
|
348
|
+
'releaseVersion.forcedHint': 'Only force when an old version is truly broken — a wrong value locks every user out.',
|
|
349
|
+
'releaseVersion.summaryOptional': 'Optional update → app_latest_version = {version}',
|
|
350
|
+
'releaseVersion.summaryForced': 'FORCED update → app_min_version = {version} (+ app_latest_version)',
|
|
351
|
+
'releaseVersion.qConfirm': 'Publish this to Firebase Remote Config?',
|
|
352
|
+
'releaseVersion.fetching': 'Reading current Remote Config…',
|
|
353
|
+
'releaseVersion.deploying': 'Publishing to Remote Config…',
|
|
354
|
+
'releaseVersion.done': 'Done — {version} is live in Remote Config.',
|
|
355
|
+
'releaseVersion.failed': 'Failed to update Remote Config (is the Firebase CLI installed and are you logged in? try: firebase login).',
|
|
356
|
+
'releaseVersion.badVersion': 'Enter a valid SemVer like 1.4.0',
|
|
357
|
+
'releaseVersion.aborted': 'Aborted.',
|
|
339
358
|
'cli.command.configure.description': 'Configure optional keys (RevenueCat, Sentry, Mixpanel...) — skippable, picks up where you left off',
|
|
340
359
|
'configure.title': 'App credential setup',
|
|
341
360
|
'configure.notKasyProject': 'This folder is not a Kasy project (no pubspec.yaml). Cd into the project and run again.',
|
|
@@ -372,6 +391,60 @@ module.exports = {
|
|
|
372
391
|
'configure.settingSecrets': 'Setting {count} Firebase Secret(s)…',
|
|
373
392
|
'configure.savedSecrets': '{count} Firebase Secret(s) set',
|
|
374
393
|
'configure.secretFailed': 'Could not set secret {key}. Run manually: firebase functions:secrets:set {key}',
|
|
394
|
+
'cli.command.appleWeb.description': 'Configure Sign in with Apple on the WEB (Firebase or Supabase) using the credentials you created on Apple',
|
|
395
|
+
'appleWeb.title': 'Apple Sign-In on Web',
|
|
396
|
+
'appleWeb.notKasyProject': 'This folder does not look like a Kasy project (no kit_setup.json). Enter the project folder and run again.',
|
|
397
|
+
'appleWeb.missingProjectId': 'Could not find the project ID in kit_setup.json. Generate the project with the CLI before configuring Apple web.',
|
|
398
|
+
'appleWeb.required': 'Required',
|
|
399
|
+
'appleWeb.useSaved': 'Use your saved Apple credentials ({id})?',
|
|
400
|
+
'appleWeb.serviceIdPrompt': 'Apple Service ID (the OAuth client_id):',
|
|
401
|
+
'appleWeb.teamIdPrompt': 'Apple Team ID:',
|
|
402
|
+
'appleWeb.keyIdPrompt': 'Key ID of the .p8 key:',
|
|
403
|
+
'appleWeb.p8Prompt': 'Path to the .p8 file (Sign In with Apple):',
|
|
404
|
+
'appleWeb.p8ReadError': 'Could not read the .p8 file at that path.',
|
|
405
|
+
'appleWeb.incomplete': 'Missing data to configure (Service ID, Team ID, Key ID and .p8). Try again.',
|
|
406
|
+
'appleWeb.configuringFirebase': 'Configuring Apple web on Firebase…',
|
|
407
|
+
'appleWeb.configuringSupabase': 'Signing the secret and configuring Apple web on Supabase…',
|
|
408
|
+
'appleWeb.firebaseOk': 'Apple web configured on Firebase (it re-signs the secret itself, never expires).',
|
|
409
|
+
'appleWeb.supabaseOk': 'Apple web configured on Supabase.',
|
|
410
|
+
'appleWeb.failed': 'Could not configure Apple web.',
|
|
411
|
+
'appleWeb.flagUpdated': 'Apple button on web enabled (withAppleWebSignin = true).',
|
|
412
|
+
'appleWeb.flagMissing': 'Backend configured, but withAppleWebSignin was not found in features.dart to enable the button.',
|
|
413
|
+
'appleWeb.returnUrlNote': 'Make sure your Service ID Return URL on Apple is exactly:',
|
|
414
|
+
'appleWeb.manualTitle': 'Manual step on Apple',
|
|
415
|
+
'appleWeb.expiresNote': 'The Supabase secret expires in ~6 months. Run `kasy apple-web` again to renew (it reuses the saved .p8).',
|
|
416
|
+
'appleWeb.backendApi': 'API REST backend: auth lives on your server. Set up Sign in with Apple JS on your backend (Service ID + secret). The CLI has nowhere to store it.',
|
|
417
|
+
'appleWeb.apiDone': 'API backend: nothing to automate here. See the steps above.',
|
|
418
|
+
'appleWeb.allDone': 'Done! Apple Sign-In on the web is configured.',
|
|
419
|
+
'appleWeb.notFirebase': 'Apple Sign-In on the web is currently supported only on the Firebase backend (signInWithPopup). On Supabase it is roadmap (native iOS is already set up by `kasy new`); on the API backend auth lives on your server.',
|
|
420
|
+
'appleWeb.notFirebaseDone': 'Nothing to configure here for Apple web on this backend.',
|
|
421
|
+
'cli.command.facebook.description': 'Configure Facebook Login (Firebase/Supabase + native files) and guide the manual Meta steps',
|
|
422
|
+
'facebook.title': 'Facebook Login',
|
|
423
|
+
'facebook.notKasyProject': 'This folder does not look like a Kasy project (no kit_setup.json). Enter the project folder and run again.',
|
|
424
|
+
'facebook.metaTitle': 'Manual step on Meta',
|
|
425
|
+
'facebook.metaIntro': 'Create an app on Meta for Developers (Consumer) and grab: App ID, Client Token (Settings → Advanced) and App Secret (Settings → Basic). Add the Facebook Login product.',
|
|
426
|
+
'facebook.metaOpenLabel': 'Open the Meta dashboard to create/open your app:',
|
|
427
|
+
'facebook.metaOpenConfirm': 'Open the Meta dashboard now?',
|
|
428
|
+
'facebook.useSaved': 'Use your saved Facebook credentials ({id})?',
|
|
429
|
+
'facebook.required': 'Required',
|
|
430
|
+
'facebook.appIdPrompt': 'Meta App ID:',
|
|
431
|
+
'facebook.clientTokenPrompt': 'Meta Client Token:',
|
|
432
|
+
'facebook.appSecretPrompt': 'Meta App Secret (for the backend provider):',
|
|
433
|
+
'facebook.incomplete': 'App ID is missing. Try again.',
|
|
434
|
+
'facebook.nativeOk': 'App ID and Client Token written to Info.plist and strings.xml.',
|
|
435
|
+
'facebook.nativeMissing': 'Could not find Info.plist/strings.xml to write (run after the native platforms are generated).',
|
|
436
|
+
'facebook.configuringFirebase': 'Enabling the Facebook provider on Firebase…',
|
|
437
|
+
'facebook.configuringSupabase': 'Enabling the Facebook provider on Supabase…',
|
|
438
|
+
'facebook.firebaseOk': 'Facebook provider enabled on Firebase.',
|
|
439
|
+
'facebook.supabaseOk': 'Facebook provider enabled on Supabase.',
|
|
440
|
+
'facebook.backendFailed': 'Could not enable the Facebook provider on the backend.',
|
|
441
|
+
'facebook.backendApi': 'API REST backend: auth lives on your server. Set up Facebook Login on your backend (App ID + App Secret).',
|
|
442
|
+
'facebook.missingProjectId': 'Could not find the project ID in kit_setup.json. Skipped the backend part (native files were written).',
|
|
443
|
+
'facebook.noSecret': 'Without an App Secret I skipped the backend part. Run `kasy facebook` with the App Secret to enable the provider.',
|
|
444
|
+
'facebook.redirectNote': 'On Meta (Facebook Login → Settings), add this Valid OAuth Redirect URI:',
|
|
445
|
+
'facebook.flagUpdated': 'Facebook button on web enabled (withFacebookWebSignin = true).',
|
|
446
|
+
'facebook.webRoadmap': 'Facebook Login on web for Supabase is not wired yet (roadmap). Native (iOS/Android) already works.',
|
|
447
|
+
'facebook.allDone': 'Done! Facebook Login is configured.',
|
|
375
448
|
'cli.command.check.description': 'Check push notifications setup (use --fix to fix it)',
|
|
376
449
|
'deploy.q.project': 'Firebase Project ID:',
|
|
377
450
|
'deploy.q.serviceAccount': 'Path to service account JSON:',
|
|
@@ -506,6 +579,8 @@ module.exports = {
|
|
|
506
579
|
'doctor.ios.googleUrlSchemeSkipped': 'Google Sign-In iOS URL scheme check skipped (GoogleService-Info.plist not found)',
|
|
507
580
|
'doctor.ios.appleSignInEntitlementOk': 'Apple Sign-In entitlement configured',
|
|
508
581
|
'doctor.ios.appleSignInEntitlementMissing': 'Apple Sign-In entitlement missing — add Sign In with Apple capability in Xcode',
|
|
582
|
+
'doctor.appleWeb.ok': 'Apple Sign-In on web configured',
|
|
583
|
+
'doctor.appleWeb.pending': 'Apple Sign-In on web not configured (run `kasy apple-web`). iOS already works.',
|
|
509
584
|
'doctor.ios.facebookOk': 'Facebook credentials configured (iOS)',
|
|
510
585
|
'doctor.ios.facebookPlaceholders': 'Facebook credentials are still placeholders — update FacebookAppID and FacebookClientToken in Info.plist',
|
|
511
586
|
'doctor.ios.facebookSkipped': 'Facebook credential check skipped (no FacebookAppID in Info.plist)',
|
|
@@ -741,6 +816,12 @@ module.exports = {
|
|
|
741
816
|
'new.success.bundleId': 'App identifier (bundle ID)',
|
|
742
817
|
'new.success.bundleId.hint': "Your app's unique identifier on Android, iOS and Firebase (push).",
|
|
743
818
|
'new.success.api.serverContracts': 'API backend: you must implement the server contracts (delete account, AI chat and push). See patch/README.md',
|
|
819
|
+
'new.appleWeb.autoConfigured': 'Apple Sign-In on web configured automatically (reused your saved credentials).',
|
|
820
|
+
'new.success.appleWeb.configured': 'Apple Sign-In on web: configured',
|
|
821
|
+
'new.success.appleWeb.pending': 'Apple Sign-In on web: not configured yet (run `kasy apple-web`). iOS already works.',
|
|
822
|
+
'new.facebook.autoConfigured': 'Facebook Login configured automatically (reused your saved credentials).',
|
|
823
|
+
'new.success.facebook.configured': 'Facebook Login: configured',
|
|
824
|
+
'new.success.facebook.pending': 'Facebook Login: not configured yet (run `kasy facebook`).',
|
|
744
825
|
'new.success.nextSteps': 'Next steps:',
|
|
745
826
|
'new.success.step.cd': 'Go to your project folder:',
|
|
746
827
|
'new.success.step.deploy': 'Push the server to Firebase (DB + functions):',
|
|
@@ -1072,6 +1153,10 @@ module.exports = {
|
|
|
1072
1153
|
'update.success': 'Feature "{module}" updated successfully.',
|
|
1073
1154
|
'update.componentsSuccess': 'Base components updated successfully.',
|
|
1074
1155
|
'update.coreSuccess': 'Core files updated successfully.',
|
|
1156
|
+
'update.mergeHint.title': 'Merge your changes with what is new',
|
|
1157
|
+
'update.mergeHint.body': '{count} file(s) changed. Check with `git diff`. If you had customized any, just merge yours with the new version.',
|
|
1158
|
+
'update.mergeHint.aiPrompt': 'With AI: paste into your assistant → "I ran kasy update; merge my changes from the previous commit with the new kit version in these files, keeping both."',
|
|
1159
|
+
'update.mergeHint.seeAgents': 'Step by step in the project AGENTS.md.',
|
|
1075
1160
|
'check.intro': 'Kasy Check — Push Notifications',
|
|
1076
1161
|
'check.firebase.detected': 'Firebase backend',
|
|
1077
1162
|
'check.firebase.adcInfo': 'Firebase uses Application Default Credentials — no extra setup needed.',
|
|
@@ -338,6 +338,25 @@ module.exports = {
|
|
|
338
338
|
'new.firebase.success.deployStep': '• Desplegar backend (desde dentro de la carpeta del proyecto):',
|
|
339
339
|
|
|
340
340
|
'cli.command.deploy.description': 'Publica el servidor en Firebase o Supabase',
|
|
341
|
+
'cli.command.releaseVersion.description': 'Avisa a los usuarios actuales sobre una nueva versión de la app (Firebase Remote Config)',
|
|
342
|
+
'releaseVersion.intro': 'Anunciar versión → Firebase Remote Config',
|
|
343
|
+
'releaseVersion.notKasy': 'No es un proyecto Kasy (kit_setup.json no encontrado).',
|
|
344
|
+
'releaseVersion.noFirebase': 'Este comando necesita un proyecto Firebase (firebase.json no encontrado). Ejecútalo dentro de un proyecto con backend Firebase.',
|
|
345
|
+
'releaseVersion.noProject': 'No se pudo detectar el proyecto Firebase. Usa --project <id>.',
|
|
346
|
+
'releaseVersion.current': 'Versión instalada (pubspec): {version}',
|
|
347
|
+
'releaseVersion.detectedProject': 'Proyecto Firebase: {id}',
|
|
348
|
+
'releaseVersion.qVersion': '¿Qué versión está publicada ya en las tiendas?',
|
|
349
|
+
'releaseVersion.qForced': '¿Forzar esta actualización? (bloquea la app hasta que el usuario actualice)',
|
|
350
|
+
'releaseVersion.forcedHint': 'Solo fuerza cuando una versión antigua esté realmente rota — un valor incorrecto bloquea a todos los usuarios.',
|
|
351
|
+
'releaseVersion.summaryOptional': 'Actualización opcional → app_latest_version = {version}',
|
|
352
|
+
'releaseVersion.summaryForced': 'Actualización OBLIGATORIA → app_min_version = {version} (+ app_latest_version)',
|
|
353
|
+
'releaseVersion.qConfirm': '¿Publicar esto en Firebase Remote Config?',
|
|
354
|
+
'releaseVersion.fetching': 'Leyendo el Remote Config actual…',
|
|
355
|
+
'releaseVersion.deploying': 'Publicando en Remote Config…',
|
|
356
|
+
'releaseVersion.done': 'Listo — {version} está activo en Remote Config.',
|
|
357
|
+
'releaseVersion.failed': 'No se pudo actualizar Remote Config (¿está instalado el Firebase CLI y has iniciado sesión? prueba: firebase login).',
|
|
358
|
+
'releaseVersion.badVersion': 'Ingresa un SemVer válido, como 1.4.0',
|
|
359
|
+
'releaseVersion.aborted': 'Cancelado.',
|
|
341
360
|
'cli.command.configure.description': 'Configura claves opcionales (RevenueCat, Sentry, Mixpanel...) — puede omitir, recuerda lo que falta',
|
|
342
361
|
'configure.title': 'Configuración de claves del app',
|
|
343
362
|
'configure.notKasyProject': 'Esta carpeta no es un proyecto Kasy (no se encontró pubspec.yaml). Entra en la carpeta del proyecto y ejecuta de nuevo.',
|
|
@@ -374,6 +393,60 @@ module.exports = {
|
|
|
374
393
|
'configure.settingSecrets': 'Guardando {count} Firebase Secret(s)…',
|
|
375
394
|
'configure.savedSecrets': '{count} Firebase Secret(s) guardado(s)',
|
|
376
395
|
'configure.secretFailed': 'No pude guardar el secret {key}. Ejecuta manualmente: firebase functions:secrets:set {key}',
|
|
396
|
+
'cli.command.appleWeb.description': 'Configura el inicio de sesión con Apple en la WEB (Firebase o Supabase) con las credenciales que creaste en Apple',
|
|
397
|
+
'appleWeb.title': 'Inicio de sesión con Apple en la Web',
|
|
398
|
+
'appleWeb.notKasyProject': 'Esta carpeta no parece un proyecto Kasy (no encontré kit_setup.json). Entra a la carpeta del proyecto y vuelve a ejecutar.',
|
|
399
|
+
'appleWeb.missingProjectId': 'No encontré el ID del proyecto en kit_setup.json. Genera el proyecto con la CLI antes de configurar Apple web.',
|
|
400
|
+
'appleWeb.required': 'Campo obligatorio',
|
|
401
|
+
'appleWeb.useSaved': '¿Usar las credenciales de Apple guardadas ({id})?',
|
|
402
|
+
'appleWeb.serviceIdPrompt': 'Apple Service ID (el client_id de OAuth):',
|
|
403
|
+
'appleWeb.teamIdPrompt': 'Apple Team ID:',
|
|
404
|
+
'appleWeb.keyIdPrompt': 'Key ID de la clave .p8:',
|
|
405
|
+
'appleWeb.p8Prompt': 'Ruta del archivo .p8 (Sign In with Apple):',
|
|
406
|
+
'appleWeb.p8ReadError': 'No pude leer el archivo .p8 en esa ruta.',
|
|
407
|
+
'appleWeb.incomplete': 'Faltan datos para configurar (Service ID, Team ID, Key ID y .p8). Inténtalo de nuevo.',
|
|
408
|
+
'appleWeb.configuringFirebase': 'Configurando Apple web en Firebase…',
|
|
409
|
+
'appleWeb.configuringSupabase': 'Firmando el secret y configurando Apple web en Supabase…',
|
|
410
|
+
'appleWeb.firebaseOk': 'Apple web configurado en Firebase (vuelve a firmar el secret solo, no expira).',
|
|
411
|
+
'appleWeb.supabaseOk': 'Apple web configurado en Supabase.',
|
|
412
|
+
'appleWeb.failed': 'No pude configurar Apple web.',
|
|
413
|
+
'appleWeb.flagUpdated': 'Botón de Apple en la web activado (withAppleWebSignin = true).',
|
|
414
|
+
'appleWeb.flagMissing': 'Configuré el backend, pero no encontré withAppleWebSignin en features.dart para activar el botón.',
|
|
415
|
+
'appleWeb.returnUrlNote': 'Verifica que el Return URL de tu Service ID en Apple sea exactamente:',
|
|
416
|
+
'appleWeb.manualTitle': 'Paso manual en Apple',
|
|
417
|
+
'appleWeb.expiresNote': 'El secret de Supabase expira en ~6 meses. Ejecuta `kasy apple-web` de nuevo para renovar (reutiliza la .p8 guardada).',
|
|
418
|
+
'appleWeb.backendApi': 'Backend API REST: la autenticación vive en tu servidor. Configura Sign in with Apple JS en tu backend (Service ID + secret). La CLI no tiene dónde guardarlo.',
|
|
419
|
+
'appleWeb.apiDone': 'Backend API: nada que automatizar aquí. Mira los pasos de arriba.',
|
|
420
|
+
'appleWeb.allDone': '¡Listo! El inicio de sesión con Apple en la web está configurado.',
|
|
421
|
+
'appleWeb.notFirebase': 'El inicio de sesión con Apple en la web hoy solo se admite en el backend Firebase (signInWithPopup). En Supabase es roadmap (iOS nativo ya está configurado por `kasy new`); en el backend API la autenticación vive en tu servidor.',
|
|
422
|
+
'appleWeb.notFirebaseDone': 'Nada que configurar aquí para Apple web en este backend.',
|
|
423
|
+
'cli.command.facebook.description': 'Configura el inicio de sesión con Facebook (Firebase/Supabase + archivos nativos) y guía los pasos manuales en Meta',
|
|
424
|
+
'facebook.title': 'Inicio de sesión con Facebook',
|
|
425
|
+
'facebook.notKasyProject': 'Esta carpeta no parece un proyecto Kasy (no encontré kit_setup.json). Entra a la carpeta del proyecto y vuelve a ejecutar.',
|
|
426
|
+
'facebook.metaTitle': 'Paso manual en Meta',
|
|
427
|
+
'facebook.metaIntro': 'Crea una app en Meta for Developers (Consumer) y obtén: App ID, Client Token (Settings → Advanced) y App Secret (Settings → Basic). Agrega el producto Facebook Login.',
|
|
428
|
+
'facebook.metaOpenLabel': 'Abre el panel de Meta para crear/abrir tu app:',
|
|
429
|
+
'facebook.metaOpenConfirm': '¿Abrir el panel de Meta ahora?',
|
|
430
|
+
'facebook.useSaved': '¿Usar las credenciales de Facebook guardadas ({id})?',
|
|
431
|
+
'facebook.required': 'Campo obligatorio',
|
|
432
|
+
'facebook.appIdPrompt': 'Meta App ID:',
|
|
433
|
+
'facebook.clientTokenPrompt': 'Meta Client Token:',
|
|
434
|
+
'facebook.appSecretPrompt': 'Meta App Secret (para el proveedor del backend):',
|
|
435
|
+
'facebook.incomplete': 'Falta el App ID. Inténtalo de nuevo.',
|
|
436
|
+
'facebook.nativeOk': 'App ID y Client Token escritos en Info.plist y strings.xml.',
|
|
437
|
+
'facebook.nativeMissing': 'No encontré Info.plist/strings.xml para escribir (ejecuta después de generar las plataformas nativas).',
|
|
438
|
+
'facebook.configuringFirebase': 'Habilitando el proveedor de Facebook en Firebase…',
|
|
439
|
+
'facebook.configuringSupabase': 'Habilitando el proveedor de Facebook en Supabase…',
|
|
440
|
+
'facebook.firebaseOk': 'Proveedor de Facebook habilitado en Firebase.',
|
|
441
|
+
'facebook.supabaseOk': 'Proveedor de Facebook habilitado en Supabase.',
|
|
442
|
+
'facebook.backendFailed': 'No pude habilitar el proveedor de Facebook en el backend.',
|
|
443
|
+
'facebook.backendApi': 'Backend API REST: la autenticación vive en tu servidor. Configura Facebook Login en tu backend (App ID + App Secret).',
|
|
444
|
+
'facebook.missingProjectId': 'No encontré el ID del proyecto en kit_setup.json. Omití la parte del backend (los archivos nativos se escribieron).',
|
|
445
|
+
'facebook.noSecret': 'Sin App Secret omití la parte del backend. Ejecuta `kasy facebook` con el App Secret para habilitar el proveedor.',
|
|
446
|
+
'facebook.redirectNote': 'En Meta (Facebook Login → Settings), agrega este Valid OAuth Redirect URI:',
|
|
447
|
+
'facebook.flagUpdated': 'Botón de Facebook en la web activado (withFacebookWebSignin = true).',
|
|
448
|
+
'facebook.webRoadmap': 'El inicio de sesión con Facebook en la web para Supabase aún no viene activado (roadmap). El nativo (iOS/Android) ya funciona.',
|
|
449
|
+
'facebook.allDone': '¡Listo! El inicio de sesión con Facebook está configurado.',
|
|
377
450
|
'cli.command.check.description': 'Verifica si las notificaciones push están configuradas (usa --fix para arreglar)',
|
|
378
451
|
'deploy.q.project': 'Firebase Project ID:',
|
|
379
452
|
'deploy.q.serviceAccount': 'Ruta al service account JSON:',
|
|
@@ -508,6 +581,8 @@ module.exports = {
|
|
|
508
581
|
'doctor.ios.googleUrlSchemeSkipped': 'Check del URL scheme iOS de Google Sign-In omitido (GoogleService-Info.plist ausente)',
|
|
509
582
|
'doctor.ios.appleSignInEntitlementOk': 'Entitlement de Apple Sign-In configurado',
|
|
510
583
|
'doctor.ios.appleSignInEntitlementMissing': 'Entitlement de Apple Sign-In ausente — agrega la capability Sign In with Apple en Xcode',
|
|
584
|
+
'doctor.appleWeb.ok': 'Inicio de sesión con Apple en la web configurado',
|
|
585
|
+
'doctor.appleWeb.pending': 'Inicio de sesión con Apple en la web no configurado (ejecuta `kasy apple-web`). iOS ya funciona.',
|
|
511
586
|
'doctor.ios.facebookOk': 'Credenciales de Facebook configuradas (iOS)',
|
|
512
587
|
'doctor.ios.facebookPlaceholders': 'Credenciales de Facebook son aún placeholders — actualiza FacebookAppID y FacebookClientToken en Info.plist',
|
|
513
588
|
'doctor.ios.facebookSkipped': 'Check de credenciales de Facebook omitido (FacebookAppID ausente en Info.plist)',
|
|
@@ -741,6 +816,12 @@ module.exports = {
|
|
|
741
816
|
'new.success.bundleId': 'Identificador de la app (bundle ID)',
|
|
742
817
|
'new.success.bundleId.hint': 'Identificador único de tu app en Android, iOS y Firebase (push).',
|
|
743
818
|
'new.success.api.serverContracts': 'Backend API: debes implementar los contratos del servidor (eliminar cuenta, IA chat y push). Consulta patch/README.md',
|
|
819
|
+
'new.appleWeb.autoConfigured': 'Inicio de sesión con Apple en la web configurado automáticamente (se reutilizaron tus credenciales guardadas).',
|
|
820
|
+
'new.success.appleWeb.configured': 'Inicio de sesión con Apple en la web: configurado',
|
|
821
|
+
'new.success.appleWeb.pending': 'Inicio de sesión con Apple en la web: falta configurar (ejecuta `kasy apple-web`). iOS ya funciona.',
|
|
822
|
+
'new.facebook.autoConfigured': 'Inicio de sesión con Facebook configurado automáticamente (se reutilizaron tus credenciales guardadas).',
|
|
823
|
+
'new.success.facebook.configured': 'Inicio de sesión con Facebook: configurado',
|
|
824
|
+
'new.success.facebook.pending': 'Inicio de sesión con Facebook: falta configurar (ejecuta `kasy facebook`).',
|
|
744
825
|
'new.success.nextSteps': 'Próximos pasos:',
|
|
745
826
|
'new.success.step.cd': 'Ve a la carpeta del proyecto:',
|
|
746
827
|
'new.success.step.deploy': 'Sube el servidor a Firebase (DB + funciones):',
|
|
@@ -1070,6 +1151,10 @@ module.exports = {
|
|
|
1070
1151
|
'update.success': 'Feature "{module}" actualizada exitosamente.',
|
|
1071
1152
|
'update.componentsSuccess': 'Componentes base actualizados exitosamente.',
|
|
1072
1153
|
'update.coreSuccess': 'Archivos de core actualizados exitosamente.',
|
|
1154
|
+
'update.mergeHint.title': 'Combina tus cambios con lo nuevo',
|
|
1155
|
+
'update.mergeHint.body': '{count} archivo(s) cambiaron. Revisa con `git diff`. Si habías personalizado alguno, solo combina el tuyo con la versión nueva.',
|
|
1156
|
+
'update.mergeHint.aiPrompt': 'Con IA: pega en tu asistente → "Ejecuté kasy update; combina mis cambios del commit anterior con la versión nueva del kit en estos archivos, manteniendo ambos."',
|
|
1157
|
+
'update.mergeHint.seeAgents': 'Paso a paso en el AGENTS.md del proyecto.',
|
|
1073
1158
|
'check.intro': 'Kasy Check — Notificaciones Push',
|
|
1074
1159
|
'check.firebase.detected': 'Backend Firebase',
|
|
1075
1160
|
'check.firebase.adcInfo': 'Firebase usa Application Default Credentials — no requiere configuración extra.',
|
|
@@ -336,6 +336,25 @@ module.exports = {
|
|
|
336
336
|
'new.firebase.success.deployStep': '• Deploy do backend (de dentro da pasta do projeto):',
|
|
337
337
|
|
|
338
338
|
'cli.command.deploy.description': 'Publica o servidor no Firebase ou Supabase',
|
|
339
|
+
'cli.command.releaseVersion.description': 'Avisa os usuários atuais sobre uma nova versão do app (Firebase Remote Config)',
|
|
340
|
+
'releaseVersion.intro': 'Anunciar versão → Firebase Remote Config',
|
|
341
|
+
'releaseVersion.notKasy': 'Não é um projeto Kasy (kit_setup.json não encontrado).',
|
|
342
|
+
'releaseVersion.noFirebase': 'Este comando precisa de um projeto Firebase (firebase.json não encontrado). Rode dentro de um projeto com backend Firebase.',
|
|
343
|
+
'releaseVersion.noProject': 'Não foi possível detectar o projeto Firebase. Passe --project <id>.',
|
|
344
|
+
'releaseVersion.current': 'Versão instalada (pubspec): {version}',
|
|
345
|
+
'releaseVersion.detectedProject': 'Projeto Firebase: {id}',
|
|
346
|
+
'releaseVersion.qVersion': 'Qual versão já está publicada nas lojas?',
|
|
347
|
+
'releaseVersion.qForced': 'Forçar esta atualização? (bloqueia o app até o usuário atualizar)',
|
|
348
|
+
'releaseVersion.forcedHint': 'Só force quando uma versão antiga estiver realmente quebrada — um valor errado trava todos os usuários.',
|
|
349
|
+
'releaseVersion.summaryOptional': 'Atualização opcional → app_latest_version = {version}',
|
|
350
|
+
'releaseVersion.summaryForced': 'Atualização OBRIGATÓRIA → app_min_version = {version} (+ app_latest_version)',
|
|
351
|
+
'releaseVersion.qConfirm': 'Publicar isto no Firebase Remote Config?',
|
|
352
|
+
'releaseVersion.fetching': 'Lendo o Remote Config atual…',
|
|
353
|
+
'releaseVersion.deploying': 'Publicando no Remote Config…',
|
|
354
|
+
'releaseVersion.done': 'Pronto — {version} está no ar no Remote Config.',
|
|
355
|
+
'releaseVersion.failed': 'Falha ao atualizar o Remote Config (o Firebase CLI está instalado e você fez login? tente: firebase login).',
|
|
356
|
+
'releaseVersion.badVersion': 'Informe um SemVer válido, tipo 1.4.0',
|
|
357
|
+
'releaseVersion.aborted': 'Cancelado.',
|
|
339
358
|
'cli.command.configure.description': 'Configura chaves opcionais (RevenueCat, Sentry, Mixpanel...) — pode pular, lembra do que falta',
|
|
340
359
|
'configure.title': 'Configuração de chaves do app',
|
|
341
360
|
'configure.notKasyProject': 'Esta pasta não parece um projeto Kasy (não encontrei pubspec.yaml). Entre na pasta do projeto e rode novamente.',
|
|
@@ -372,6 +391,60 @@ module.exports = {
|
|
|
372
391
|
'configure.settingSecrets': 'Gravando {count} Firebase Secret(s)…',
|
|
373
392
|
'configure.savedSecrets': '{count} Firebase Secret(s) gravado(s)',
|
|
374
393
|
'configure.secretFailed': 'Não consegui gravar o secret {key}. Rode manualmente: firebase functions:secrets:set {key}',
|
|
394
|
+
'cli.command.appleWeb.description': 'Configura o login com Apple na WEB (Firebase ou Supabase) com as credenciais que você criou na Apple',
|
|
395
|
+
'appleWeb.title': 'Login com Apple na Web',
|
|
396
|
+
'appleWeb.notKasyProject': 'Esta pasta não parece um projeto Kasy (não achei kit_setup.json). Entre na pasta do projeto e rode de novo.',
|
|
397
|
+
'appleWeb.missingProjectId': 'Não encontrei o ID do projeto no kit_setup.json. Gere o projeto pela CLI antes de configurar o Apple web.',
|
|
398
|
+
'appleWeb.required': 'Campo obrigatório',
|
|
399
|
+
'appleWeb.useSaved': 'Usar as credenciais Apple salvas ({id})?',
|
|
400
|
+
'appleWeb.serviceIdPrompt': 'Apple Service ID (o client_id do OAuth):',
|
|
401
|
+
'appleWeb.teamIdPrompt': 'Apple Team ID:',
|
|
402
|
+
'appleWeb.keyIdPrompt': 'Key ID da chave .p8:',
|
|
403
|
+
'appleWeb.p8Prompt': 'Caminho do arquivo .p8 (Sign In with Apple):',
|
|
404
|
+
'appleWeb.p8ReadError': 'Não consegui ler o arquivo .p8 nesse caminho.',
|
|
405
|
+
'appleWeb.incomplete': 'Faltam dados pra configurar (Service ID, Team ID, Key ID e .p8). Tente de novo.',
|
|
406
|
+
'appleWeb.configuringFirebase': 'Configurando Apple web no Firebase…',
|
|
407
|
+
'appleWeb.configuringSupabase': 'Assinando o secret e configurando Apple web no Supabase…',
|
|
408
|
+
'appleWeb.firebaseOk': 'Apple web configurado no Firebase (ele re-assina o secret sozinho, não expira).',
|
|
409
|
+
'appleWeb.supabaseOk': 'Apple web configurado no Supabase.',
|
|
410
|
+
'appleWeb.failed': 'Não consegui configurar o Apple web.',
|
|
411
|
+
'appleWeb.flagUpdated': 'Botão Apple na web ligado (withAppleWebSignin = true).',
|
|
412
|
+
'appleWeb.flagMissing': 'Configurei o backend, mas não achei withAppleWebSignin em features.dart pra ligar o botão.',
|
|
413
|
+
'appleWeb.returnUrlNote': 'Confira que o Return URL do seu Service ID na Apple é exatamente:',
|
|
414
|
+
'appleWeb.manualTitle': 'Passo manual na Apple',
|
|
415
|
+
'appleWeb.expiresNote': 'O secret do Supabase expira em ~6 meses. Rode `kasy apple-web` de novo pra renovar (ele reaproveita a .p8 salva).',
|
|
416
|
+
'appleWeb.backendApi': 'Backend API REST: a autenticação é do seu servidor. Configure o Sign in with Apple JS no seu backend (Service ID + secret). A CLI não tem onde gravar.',
|
|
417
|
+
'appleWeb.apiDone': 'Backend API: nada pra automatizar aqui. Veja os passos acima.',
|
|
418
|
+
'appleWeb.allDone': 'Pronto! O login com Apple na web está configurado.',
|
|
419
|
+
'appleWeb.notFirebase': 'Login com Apple na web hoje é suportado só no backend Firebase (signInWithPopup). No Supabase é roadmap (o iOS nativo já está configurado pelo `kasy new`); no backend API a auth é do seu servidor.',
|
|
420
|
+
'appleWeb.notFirebaseDone': 'Nada a configurar aqui pra Apple web neste backend.',
|
|
421
|
+
'cli.command.facebook.description': 'Configura o login com Facebook (Firebase/Supabase + arquivos nativos) e guia os passos manuais na Meta',
|
|
422
|
+
'facebook.title': 'Login com Facebook',
|
|
423
|
+
'facebook.notKasyProject': 'Esta pasta não parece um projeto Kasy (não achei kit_setup.json). Entre na pasta do projeto e rode de novo.',
|
|
424
|
+
'facebook.metaTitle': 'Passo manual na Meta',
|
|
425
|
+
'facebook.metaIntro': 'Crie um app no Meta for Developers (Consumer) e pegue: App ID, Client Token (Settings → Advanced) e App Secret (Settings → Basic). Ative o produto Facebook Login.',
|
|
426
|
+
'facebook.metaOpenLabel': 'Abra o painel da Meta pra criar/abrir seu app:',
|
|
427
|
+
'facebook.metaOpenConfirm': 'Abrir o painel da Meta agora?',
|
|
428
|
+
'facebook.useSaved': 'Usar as credenciais do Facebook salvas ({id})?',
|
|
429
|
+
'facebook.required': 'Campo obrigatório',
|
|
430
|
+
'facebook.appIdPrompt': 'Meta App ID:',
|
|
431
|
+
'facebook.clientTokenPrompt': 'Meta Client Token:',
|
|
432
|
+
'facebook.appSecretPrompt': 'Meta App Secret (pro provedor do backend):',
|
|
433
|
+
'facebook.incomplete': 'Faltou o App ID. Tente de novo.',
|
|
434
|
+
'facebook.nativeOk': 'App ID e Client Token gravados no Info.plist e strings.xml.',
|
|
435
|
+
'facebook.nativeMissing': 'Não achei Info.plist/strings.xml pra gravar (rode depois de gerar as plataformas nativas).',
|
|
436
|
+
'facebook.configuringFirebase': 'Habilitando o provedor Facebook no Firebase…',
|
|
437
|
+
'facebook.configuringSupabase': 'Habilitando o provedor Facebook no Supabase…',
|
|
438
|
+
'facebook.firebaseOk': 'Provedor Facebook habilitado no Firebase.',
|
|
439
|
+
'facebook.supabaseOk': 'Provedor Facebook habilitado no Supabase.',
|
|
440
|
+
'facebook.backendFailed': 'Não consegui habilitar o provedor Facebook no backend.',
|
|
441
|
+
'facebook.backendApi': 'Backend API REST: a autenticação é do seu servidor. Configure o Facebook Login no seu backend (App ID + App Secret).',
|
|
442
|
+
'facebook.missingProjectId': 'Não encontrei o ID do projeto no kit_setup.json. Pulei a parte do backend (os arquivos nativos foram gravados).',
|
|
443
|
+
'facebook.noSecret': 'Sem App Secret, pulei a parte do backend. Rode `kasy facebook` com o App Secret pra habilitar o provedor.',
|
|
444
|
+
'facebook.redirectNote': 'Na Meta (Facebook Login → Settings), adicione este Valid OAuth Redirect URI:',
|
|
445
|
+
'facebook.flagUpdated': 'Botão Facebook na web ligado (withFacebookWebSignin = true).',
|
|
446
|
+
'facebook.webRoadmap': 'Login Facebook na web no Supabase ainda não vem ligado (roadmap). O nativo (iOS/Android) já funciona.',
|
|
447
|
+
'facebook.allDone': 'Pronto! O Facebook Login está configurado.',
|
|
375
448
|
'cli.command.check.description': 'Confere se as notificações push estão configuradas (use --fix para corrigir)',
|
|
376
449
|
'deploy.q.project': 'Firebase Project ID:',
|
|
377
450
|
'deploy.q.serviceAccount': 'Caminho para o service account JSON:',
|
|
@@ -506,6 +579,8 @@ module.exports = {
|
|
|
506
579
|
'doctor.ios.googleUrlSchemeSkipped': 'Check do URL scheme iOS do Google Sign-In ignorado (GoogleService-Info.plist ausente)',
|
|
507
580
|
'doctor.ios.appleSignInEntitlementOk': 'Entitlement do Apple Sign-In configurado',
|
|
508
581
|
'doctor.ios.appleSignInEntitlementMissing': 'Entitlement do Apple Sign-In ausente — adicione a capability Sign In with Apple no Xcode',
|
|
582
|
+
'doctor.appleWeb.ok': 'Login com Apple na web configurado',
|
|
583
|
+
'doctor.appleWeb.pending': 'Login com Apple na web não configurado (rode `kasy apple-web`). O iOS já funciona.',
|
|
509
584
|
'doctor.ios.facebookOk': 'Credenciais do Facebook configuradas (iOS)',
|
|
510
585
|
'doctor.ios.facebookPlaceholders': 'Credenciais do Facebook ainda são placeholders — atualize FacebookAppID e FacebookClientToken no Info.plist',
|
|
511
586
|
'doctor.ios.facebookSkipped': 'Check das credenciais do Facebook ignorado (FacebookAppID ausente no Info.plist)',
|
|
@@ -741,6 +816,12 @@ module.exports = {
|
|
|
741
816
|
'new.success.bundleId': 'Identificador do app (bundle ID)',
|
|
742
817
|
'new.success.bundleId.hint': 'Identificador único do seu app no Android, iOS e Firebase (push).',
|
|
743
818
|
'new.success.api.serverContracts': 'Backend API: você precisa implementar os contratos do servidor (excluir conta, IA chat e push). Veja patch/README.md',
|
|
819
|
+
'new.appleWeb.autoConfigured': 'Login com Apple na web configurado automaticamente (credenciais salvas reaproveitadas).',
|
|
820
|
+
'new.success.appleWeb.configured': 'Login com Apple na web: configurado',
|
|
821
|
+
'new.success.appleWeb.pending': 'Login com Apple na web: falta configurar (rode `kasy apple-web`). O iOS já funciona.',
|
|
822
|
+
'new.facebook.autoConfigured': 'Login com Facebook configurado automaticamente (credenciais salvas reaproveitadas).',
|
|
823
|
+
'new.success.facebook.configured': 'Login com Facebook: configurado',
|
|
824
|
+
'new.success.facebook.pending': 'Login com Facebook: falta configurar (rode `kasy facebook`).',
|
|
744
825
|
'new.success.nextSteps': 'Próximos passos:',
|
|
745
826
|
'new.success.step.cd': 'Entre na pasta do projeto:',
|
|
746
827
|
'new.success.step.deploy': 'Suba o servidor pro Firebase (banco + funções):',
|
|
@@ -1070,6 +1151,10 @@ module.exports = {
|
|
|
1070
1151
|
'update.success': 'Feature "{module}" atualizada com sucesso.',
|
|
1071
1152
|
'update.componentsSuccess': 'Componentes base atualizados com sucesso.',
|
|
1072
1153
|
'update.coreSuccess': 'Arquivos de core atualizados com sucesso.',
|
|
1154
|
+
'update.mergeHint.title': 'Juntar suas mudanças com o que veio novo',
|
|
1155
|
+
'update.mergeHint.body': '{count} arquivo(s) mudaram. Veja com `git diff`. Se você tinha customizado algum, é só juntar o seu com o novo.',
|
|
1156
|
+
'update.mergeHint.aiPrompt': 'Com IA: cole no seu assistente → "Rodei kasy update; junte minhas mudanças do commit anterior com a versão nova do kit nestes arquivos, mantendo as duas coisas."',
|
|
1157
|
+
'update.mergeHint.seeAgents': 'Passo a passo no AGENTS.md do projeto.',
|
|
1073
1158
|
'check.intro': 'Kasy Check — Notificações Push',
|
|
1074
1159
|
'check.firebase.detected': 'Backend Firebase',
|
|
1075
1160
|
'check.firebase.adcInfo': 'Firebase usa Application Default Credentials — nenhuma configuração extra necessária.',
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kasy-cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.35.0",
|
|
4
4
|
"description": "CLI for scaffolding production-ready Flutter SaaS apps with Firebase, Supabase, or API REST backends.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"kasy": "./bin/kasy.js"
|
|
@@ -31,14 +31,17 @@
|
|
|
31
31
|
"access": "public"
|
|
32
32
|
},
|
|
33
33
|
"scripts": {
|
|
34
|
-
"prepack": "node scripts/check-feature-patches.js && node scripts/bundle-template.js && node test/generated-matches-kit.test.js && node test/supabase-verify-jwt.test.js && node test/supabase-cors.test.js && node test/supabase-google-web.test.js && node test/backend-pubspec-local-reminders.test.js && node test/stripe-webhook-orphan-guard.test.js && node test/facebook-strip.test.js && node test/path-provider-pin.test.js && node test/features-flags-parity.test.js",
|
|
34
|
+
"prepack": "node scripts/check-feature-patches.js && node scripts/check-backend-patches.js && node scripts/bundle-template.js && node test/generated-matches-kit.test.js && node test/supabase-verify-jwt.test.js && node test/supabase-cors.test.js && node test/supabase-google-web.test.js && node test/backend-pubspec-local-reminders.test.js && node test/stripe-webhook-orphan-guard.test.js && node test/facebook-strip.test.js && node test/path-provider-pin.test.js && node test/features-flags-parity.test.js && node test/apple-web.test.js && node test/facebook.test.js",
|
|
35
35
|
"start": "node ./bin/kasy.js",
|
|
36
36
|
"setup": "node ./bin/kasy.js setup",
|
|
37
37
|
"doctor": "node ./bin/kasy.js doctor",
|
|
38
38
|
"features": "node ./bin/kasy.js features",
|
|
39
39
|
"validate": "node ./bin/kasy.js validate --analyze-only",
|
|
40
|
+
"validate:backends": "node ./scripts/bundle-template.js && node ./scripts/validate-backends.js",
|
|
40
41
|
"extract:patch": "node ./scripts/extract_patch.js",
|
|
41
42
|
"check:firebase": "node ./scripts/check-firebase-template.js",
|
|
43
|
+
"patch:check": "node ./scripts/check-backend-patches.js",
|
|
44
|
+
"patch:bless": "node ./scripts/check-backend-patches.js --bless",
|
|
42
45
|
"test": "for f in test/*.test.js; do node \"$f\" || exit 1; done",
|
|
43
46
|
"test:google-ios": "node ./test/google-ios-url-scheme.test.js",
|
|
44
47
|
"test:apple-release": "node ./test/apple-release.test.js",
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
stripe_success.html,1781195415353,677b2fb430839866f32a33a751aae85b4c4819123be820f3f5b2f689b8eed00e
|
|
2
|
+
manifest.json,1779810782774,1b929ac7267ff738d05646106a0fac3591082b6f365051928a62518af30b3fd5
|
|
3
|
+
local_notifications.js,1772398909034,0b44b177c4b8a705ad1b0e3d7532537aad7b230e9472f93c820742b7548797b8
|
|
4
|
+
flutter.js,1777393608000,b42e549a02f5c1428b0ad85dbdc663d400a6d2db10cb8aefcc0fddd592fd6ceb
|
|
5
|
+
firebase-messaging-sw.js,1772484605561,dba3c939f7c240e62f63d06408d5f70e45f1168d00df98726e6a7a20cbd3b0df
|
|
6
|
+
favicon.png,1779810782545,c967afd3c3d4dd165ef2e5cf3f203c3982dfff6a95881859ed163d9c38d75512
|
|
7
|
+
splash/img/light-4x.png,1780546027751,abf0e55345e532a4645fe14b01c2948b07c78df50cc6da23648837dfb6271c74
|
|
8
|
+
splash/img/light-3x.png,1780546027699,5f02c94032cb7053807ce89603b109f14ea2740eaa3145dc76c924cbe1d534a9
|
|
9
|
+
splash/img/light-2x.png,1780546027647,3c073b9da154ac8be530f8beefa3579246f223acd819e856a2db000fdabcb67e
|
|
10
|
+
splash/img/light-1x.png,1780546027614,928ead755ab10de4d559c3c6751839dd6adf1412271ef8a508707b0938b4baf5
|
|
11
|
+
splash/img/dark-4x.png,1780546027952,d5353a84fd44ec4a28127ceb9d6d04305f99252d92bacfeeebeade4f2ab59bc0
|
|
12
|
+
splash/img/dark-3x.png,1780546027901,c37e7f4f1e37b59291a681179c97211a9d62d60a2ee802dd192879855edf6dec
|
|
13
|
+
splash/img/dark-2x.png,1780546027846,6ca64e1d4aa1afd8916b3b33eaa4d3e4cbe50c79902d3b813e839d1eb0d8897e
|
|
14
|
+
splash/img/dark-1x.png,1780546027812,8a280f0b5c87f512ebaf60bea59396d136fdcfc1710c9ea311cd10b5f6370191
|
|
15
|
+
icons/Icon-maskable-512.png,1779810782770,5b32f8a7281ac65928b1076db0bc02aee0d4afc2dbb6372eecbdf37a89be33cc
|
|
16
|
+
icons/Icon-maskable-192.png,1779810782685,eb719472f72ffb7c1a294a8f3edb6ec952ad6df0be612e3e8148f9052617d58d
|
|
17
|
+
icons/Icon-512.png,1779810782665,5b32f8a7281ac65928b1076db0bc02aee0d4afc2dbb6372eecbdf37a89be33cc
|
|
18
|
+
icons/Icon-192.png,1779810782567,eb719472f72ffb7c1a294a8f3edb6ec952ad6df0be612e3e8148f9052617d58d
|
|
19
|
+
canvaskit/wimp.wasm,1777394172000,f73f248dfff66551884ce69d2a3088df2410fba13e3fafa2ef8ef98829241f14
|
|
20
|
+
canvaskit/wimp.js.symbols,1777394172000,d503a0521fcb00d9dec064dabaccb9ead8b10d311f9f36141fb5b7997b201846
|
|
21
|
+
canvaskit/wimp.js,1777394172000,63f0487b1033146fc2ed7b394420b036c99cf198b857dfd3cea92227f84a2310
|
|
22
|
+
canvaskit/skwasm_heavy.wasm,1777394228000,c02f715939724f1c936cef6b5d787489451b1a1a24dadf86f667d71f0e21cc09
|
|
23
|
+
canvaskit/skwasm_heavy.js.symbols,1777394228000,625fb4cc0f491b80d66e20251521bc90dd7ad83ad06b242e9762916aaaccada6
|
|
24
|
+
canvaskit/skwasm_heavy.js,1777394228000,1a694c23c937503283d38d24f75d03e432093e0cc9488c38910b482751263fad
|
|
25
|
+
canvaskit/skwasm.wasm,1777394126000,0e0c782588b556af14cad090d959344b705131d299fa76ebfddf97180853b1ab
|
|
26
|
+
canvaskit/skwasm.js.symbols,1777394126000,320b80390e4e3234f1c216c90a01028f17fd39220817c7837d8126133366f313
|
|
27
|
+
canvaskit/skwasm.js,1777394126000,40f0e36b14ede08584d4f4cbfbcaf55642e04f81498364e975b55cec7b95ba20
|
|
28
|
+
canvaskit/canvaskit.wasm,1777393746000,4b911a495801f229a19e536df7e52a9943a549bf4c213583f081ea2a3d3c12b2
|
|
29
|
+
canvaskit/canvaskit.js.symbols,1777393746000,52d20fad5abef4f488c2b92aec7181e65997b8a22de54cc976b4bd4555401723
|
|
30
|
+
canvaskit/canvaskit.js,1777393746000,df5aa63d90b0491908ad19d64fd18f29db1dc416548f6c73179d962eaae694e7
|
|
31
|
+
canvaskit/chromium/canvaskit.wasm,1777393830000,44d29356b9e2c903751a8aa583716275e165d1fb56eea46963c95c7c43f7ca34
|
|
32
|
+
canvaskit/chromium/canvaskit.js.symbols,1777393830000,60722421e56edacbeb674cc3ef0f6152969067e74b51a960c80cd36e75b75a54
|
|
33
|
+
canvaskit/chromium/canvaskit.js,1777393830000,10ea3badcf26e29aba851699c03e09bc35fea65cdc440a035bac263d6d02d665
|
|
34
|
+
assets/packages/mixpanel_flutter/assets/mixpanel.js,1779806094332,1915455df317dd1a9f42c6f3ea5bbe3ee357614f89d994f157a2e821f37956c3
|
|
35
|
+
assets/packages/lucide_icons_flutter/assets/lucide.ttf,1779806149220,bfca5b519d438d7194550cbc60a4e7c10f53a36ac96d48c7e17503a45b6b7b0b
|
|
36
|
+
assets/packages/lucide_icons_flutter/assets/build_font/LucideVariable-w600.ttf,1779806149210,cf2218879264e413687602c192e43b86000404ff85e2bca933d9a67020299ed4
|
|
37
|
+
assets/packages/lucide_icons_flutter/assets/build_font/LucideVariable-w500.ttf,1779806149217,587ce31612aa88e6c019210a18625531557eda111f5f8e838a298277efc9e308
|
|
38
|
+
assets/packages/lucide_icons_flutter/assets/build_font/LucideVariable-w400.ttf,1779806149212,644f7ccdf1b74bdb898210c4171327a25d7476690c7ade2d3082dd473bc24fe1
|
|
39
|
+
assets/packages/lucide_icons_flutter/assets/build_font/LucideVariable-w300.ttf,1779806149214,5dd834d2d84e5a1524e027fa21d87c6e8aaaf6421f201be2ec61e57c0b7bce72
|
|
40
|
+
assets/packages/lucide_icons_flutter/assets/build_font/LucideVariable-w200.ttf,1779806149208,d929819511975bf5030c0f359e8c16d21ad14b20ac24d5f2ff238462114b1d9b
|
|
41
|
+
assets/packages/lucide_icons_flutter/assets/build_font/LucideVariable-w100.ttf,1779806149216,1e9e6ea39a38b874c40242d02533adac9dd3d09c8119dae55458e65c6c3c16e6
|
|
42
|
+
assets/packages/cupertino_icons/assets/CupertinoIcons.ttf,1779806141382,010d647b6cab4e1a9b4398957353f43589903ce8dc760d05d894944b664e29bd
|
|
43
|
+
assets/fonts/MaterialIcons-Regular.otf,1662569016000,3a631b0761788d7cf2a71e8732a5b31288d6e7aa996c671c70d53a251bbd3848
|
|
44
|
+
assets/assets/images/splash_logo_light_android12.png,1779867497377,da2caee4f16230230dbb04d84913f0a9df2eae6bcb8f9d1ce83ed556cee6d094
|
|
45
|
+
assets/assets/images/splash_logo_light.png,1779867497286,643a1f45d6ef9458c4c0eed9f4889cc2adbdf1db616913215be66673a05a0066
|
|
46
|
+
assets/assets/images/splash_logo_dark_android12.png,1779867497464,b237d9f9035d419525a10b32889c30d44c706d62990b30bdc6bef911fe9352d6
|
|
47
|
+
assets/assets/images/splash_logo_dark.png,1779867497287,18090e40687efaa4bc7c70128bebf88e6a9952562f1fcfb255331305ff7cffa7
|
|
48
|
+
assets/assets/images/premium-switch-header.png,1781104464333,890c0bcac58363b6db88829af7c7e6134174c9fdbe61f39b6c72e28042e54483
|
|
49
|
+
assets/assets/images/premium-bg.jpg,1781104464331,4c48000d91087f9828e628e6336cb9791cb2c57bdcafdf78e5edbf9d568ab262
|
|
50
|
+
assets/assets/images/logo_wordmark_light.png,1780606594616,f4d559a7ae85706dfc0cafeabf1c03380fa0ce5339a471c8f50fcfd4f59e6dd2
|
|
51
|
+
assets/assets/images/logo_wordmark_dark.png,1780606594628,9b7ec728eb6b0f7798339065b2e311bf37cb57140ea068da8496e066773276cd
|
|
52
|
+
assets/assets/images/icon_foreground_empty.png,1779810762471,cdf875b39e231f303c6eff2baba9972404f1ea12757836b75f41611b58a122ec
|
|
53
|
+
assets/assets/images/icon_android.png,1779810762467,db0f6c9ff904d4571ab40d46110096370c41e3fa16496baa0fda71861ee47800
|
|
54
|
+
assets/assets/images/icon.png,1779745964920,194820ecc4eed7bac14b5605916d87093b4571a28f3ca24863ac09c783343488
|
|
55
|
+
assets/assets/images/favicon.png,1779745964922,194820ecc4eed7bac14b5605916d87093b4571a28f3ca24863ac09c783343488
|
|
56
|
+
assets/assets/images/empty_notifications.jpg,1772398653078,cbb7d57f7cf305cf33ee8cbd15544eb1020670a1a8100f1328b49ca61d76fb7e
|
|
57
|
+
assets/assets/icons/google_play_games.png,1772398653083,533c1d87d7be8690ab173ef42aa92ee8bac3b6e6859c0f97fe30daff2c843501
|
|
58
|
+
assets/assets/icons/google.png,1772398653083,f423e7e7be1e06008d45617d07f095f04da7fdcab9a56523f9e0633828e464e0
|
|
59
|
+
assets/assets/icons/facebook.png,1772398653083,79ac67e449c1db63319d43329ca91f682b4e0bc6a0883b0dfb2a849e13ae6eb6
|
|
60
|
+
assets/assets/icons/apple.png,1772398653083,2a737d8801ca81452b2978bb2e1ac72136acf1a4c338f2de2f77b65e9f6de1fa
|
|
61
|
+
version.json,1781382132245,b028f2bf7b54dc78541295a1ddf03306ac20a052662bde5b6b1aefe80d613249
|
|
62
|
+
index.html,1781382083192,bb8142eb84e9e44049957c3edf86006e1ae5f194c397a8326ce505b68fdf58f4
|
|
63
|
+
flutter_service_worker.js,1781382132717,baeeaf9f4b8e6f40d3b0549429ceb70ca01f120db6a7ef2f60d5809233dc2205
|
|
64
|
+
assets/FontManifest.json,1781382132345,4d84ab517c27984d36f9a3c8be6f2a72788c0c3985c1d5874297fef0a53407ca
|
|
65
|
+
assets/AssetManifest.bin.json,1781382132345,50a11b51c3fc4cbed1b5ec3a4f466c6a6b75c481d08d4782c8191f99bdbdba9c
|
|
66
|
+
assets/AssetManifest.bin,1781382132345,78bccb08a36307a400711a1d7e6868bd5f89a24e63439fb5b6747660323e4475
|
|
67
|
+
assets/shaders/stretch_effect.frag,1781382132431,1a7d4ac2be40cf0a459dfb390ef08bcd740f37913ffdee8de3c2ea836a18410e
|
|
68
|
+
assets/shaders/ink_sparkle.frag,1781382132431,1c8e222328206d1e06754f76fb53947aad38d62180aafad5298a3c6f510b173d
|
|
69
|
+
flutter_bootstrap.js,1781382083178,9a838d82fafadf6910ccbc6cdf4df03972abfe7749620e382c8ced856120bd8d
|
|
70
|
+
main.dart.js_3.part.js,1781382118356,80b75e3c9ff59756ea8a58318c7886e7a74787b7ed07fad6f7f4b4347d5bdbab
|
|
71
|
+
main.dart.js_1.part.js,1781382118351,a6dfa901d3a791b48e70499f583405215d20a4fe2491acd8d670fe0eac71cdaf
|
|
72
|
+
assets/NOTICES,1781382132345,a18efc42c5ed99b56481537d0f229ddd3add671c548a893aaf8766f30c854158
|
|
73
|
+
main.dart.js,1781382118819,5e7b0cab78a6e7cd653637824e33318f75554c9b5cce4b1ab26299da255247e1
|