@omega.js/backend 0.1.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/LICENSE +98 -0
- package/README.md +1053 -0
- package/bin/omega +2 -0
- package/bin/omega-backend +2 -0
- package/bin/omg +2 -0
- package/cli.js +3 -0
- package/dist/cli/command-table.js +268 -0
- package/dist/cli/commands/auth.js +259 -0
- package/dist/cli/commands/base-command.js +451 -0
- package/dist/cli/commands/build.js +27 -0
- package/dist/cli/commands/clean.js +13 -0
- package/dist/cli/commands/clear.js +11 -0
- package/dist/cli/commands/cwd.js +9 -0
- package/dist/cli/commands/deploy.js +205 -0
- package/dist/cli/commands/emulator-orphans.js +440 -0
- package/dist/cli/commands/emulator.js +1829 -0
- package/dist/cli/commands/firebase-init.js +101 -0
- package/dist/cli/commands/firestore.js +261 -0
- package/dist/cli/commands/indexes.js +51 -0
- package/dist/cli/commands/install.js +151 -0
- package/dist/cli/commands/logs.js +358 -0
- package/dist/cli/commands/mcp.js +41 -0
- package/dist/cli/commands/migrate-markers.js +176 -0
- package/dist/cli/commands/migrate-rules.js +90 -0
- package/dist/cli/commands/migrate.js +59 -0
- package/dist/cli/commands/serve.js +208 -0
- package/dist/cli/commands/setup-tests/base-test.js +174 -0
- package/dist/cli/commands/setup-tests/emulator-config.js +109 -0
- package/dist/cli/commands/setup-tests/env-runtime-config-deprecated.js +47 -0
- package/dist/cli/commands/setup-tests/firebase-admin.js +49 -0
- package/dist/cli/commands/setup-tests/firebase-auth.js +26 -0
- package/dist/cli/commands/setup-tests/firebase-cli.js +26 -0
- package/dist/cli/commands/setup-tests/firebase-functions.js +49 -0
- package/dist/cli/commands/setup-tests/firestore-indexes-file.js +72 -0
- package/dist/cli/commands/setup-tests/firestore-indexes-in-json.js +20 -0
- package/dist/cli/commands/setup-tests/firestore-indexes-required.js +108 -0
- package/dist/cli/commands/setup-tests/firestore-indexes-synced.js +236 -0
- package/dist/cli/commands/setup-tests/firestore-rules-file.js +115 -0
- package/dist/cli/commands/setup-tests/firestore-rules-in-json.js +49 -0
- package/dist/cli/commands/setup-tests/functions-package.js +44 -0
- package/dist/cli/commands/setup-tests/gcloud-cli.js +26 -0
- package/dist/cli/commands/setup-tests/gitignore.js +122 -0
- package/dist/cli/commands/setup-tests/helpers/merge-line-files.js +28 -0
- package/dist/cli/commands/setup-tests/helpers/required-indexes.js +109 -0
- package/dist/cli/commands/setup-tests/helpers/seed-campaigns.js +246 -0
- package/dist/cli/commands/setup-tests/helpers.js +72 -0
- package/dist/cli/commands/setup-tests/hosting-folder.js +23 -0
- package/dist/cli/commands/setup-tests/hosting-rewrites.js +52 -0
- package/dist/cli/commands/setup-tests/index.js +111 -0
- package/dist/cli/commands/setup-tests/is-firebase-project.js +21 -0
- package/dist/cli/commands/setup-tests/java-installed.js +27 -0
- package/dist/cli/commands/setup-tests/legacy-tests-cleanup.js +43 -0
- package/dist/cli/commands/setup-tests/marketing-campaigns-seeded.js +230 -0
- package/dist/cli/commands/setup-tests/node-version.js +60 -0
- package/dist/cli/commands/setup-tests/npm-project-scripts.js +42 -0
- package/dist/cli/commands/setup-tests/nvmrc-version.js +36 -0
- package/dist/cli/commands/setup-tests/omega-backend.js +42 -0
- package/dist/cli/commands/setup-tests/omega-config.js +84 -0
- package/dist/cli/commands/setup-tests/project-directories.js +34 -0
- package/dist/cli/commands/setup-tests/project-id-consistency.js +201 -0
- package/dist/cli/commands/setup-tests/public-html-files.js +22 -0
- package/dist/cli/commands/setup-tests/realtime-rules-file.js +69 -0
- package/dist/cli/commands/setup-tests/realtime-rules-in-json.js +20 -0
- package/dist/cli/commands/setup-tests/remoteconfig-template-file.js +32 -0
- package/dist/cli/commands/setup-tests/remoteconfig-template-in-json.js +31 -0
- package/dist/cli/commands/setup-tests/service-account.js +86 -0
- package/dist/cli/commands/setup-tests/storage-lifecycle-policy.js +81 -0
- package/dist/cli/commands/setup-tests/storage-rules-file.js +32 -0
- package/dist/cli/commands/setup-tests/storage-rules-in-json.js +20 -0
- package/dist/cli/commands/stripe.js +14 -0
- package/dist/cli/commands/test-lanes/stripe-live.js +440 -0
- package/dist/cli/commands/test.js +976 -0
- package/dist/cli/commands/update.js +27 -0
- package/dist/cli/commands/version.js +10 -0
- package/dist/cli/commands/watch.js +196 -0
- package/dist/cli/flags.js +13 -0
- package/dist/cli/index.js +173 -0
- package/dist/cli/run.js +33 -0
- package/dist/cli/utils/attach-log-file.js +4 -0
- package/dist/cli/utils/compile-rules.js +1155 -0
- package/dist/cli/utils/ensure-target.js +314 -0
- package/dist/cli/utils/project-type.js +140 -0
- package/dist/cli/utils/public-files.js +49 -0
- package/dist/cli/utils/safe-install.js +4 -0
- package/dist/cli/utils/spawn-shell.js +94 -0
- package/dist/cli/utils/stage-functions.js +338 -0
- package/dist/cli/utils/stage-local-packages.js +210 -0
- package/dist/cli/utils/target-checks.js +161 -0
- package/dist/cli/utils/target.js +24 -0
- package/dist/cli/utils/ui.js +292 -0
- package/dist/defaults/AGENTS.md +125 -0
- package/dist/defaults/CHANGELOG.md +15 -0
- package/dist/defaults/CLAUDE.md +1 -0
- package/dist/defaults/_.gitignore +65 -0
- package/dist/defaults/docs/README.md +17 -0
- package/dist/defaults/test/README.md +65 -0
- package/dist/defaults/test/_init.js +14 -0
- package/dist/defaults/test/helpers/connect-trap.js +72 -0
- package/dist/defaults/test/unit/registration.test.js +143 -0
- package/dist/defaults/test/unit/rules-posture.test.js +101 -0
- package/dist/defaults/test/unit/socket-free.test.js +43 -0
- package/dist/manager/events/auth/before-create.js +89 -0
- package/dist/manager/events/auth/before-signin.js +76 -0
- package/dist/manager/events/auth/on-create.js +112 -0
- package/dist/manager/events/auth/on-delete.js +141 -0
- package/dist/manager/events/auth/utils.js +93 -0
- package/dist/manager/events/cron/daily/blog-auto-publisher.js +287 -0
- package/dist/manager/events/cron/daily/data-requests.js +57 -0
- package/dist/manager/events/cron/daily/expire-paypal-cancellations.js +191 -0
- package/dist/manager/events/cron/daily/marketing-prune.js +486 -0
- package/dist/manager/events/cron/daily/reset-usage.js +188 -0
- package/dist/manager/events/cron/daily/trial-lapse-sweep.js +355 -0
- package/dist/manager/events/cron/daily.js +3 -0
- package/dist/manager/events/cron/frequent/abandoned-carts.js +204 -0
- package/dist/manager/events/cron/frequent/email-queue.js +71 -0
- package/dist/manager/events/cron/frequent/marketing-campaigns.js +463 -0
- package/dist/manager/events/cron/frequent/retry-failed-webhooks.js +70 -0
- package/dist/manager/events/cron/frequent.js +3 -0
- package/dist/manager/events/cron/runner.js +64 -0
- package/dist/manager/events/firestore/notifications/on-write.js +123 -0
- package/dist/manager/events/firestore/payments-disputes/on-write.js +256 -0
- package/dist/manager/events/firestore/payments-disputes/providers/stripe.js +218 -0
- package/dist/manager/events/firestore/payments-disputes/providers/test.js +231 -0
- package/dist/manager/events/firestore/payments-webhooks/analytics.js +687 -0
- package/dist/manager/events/firestore/payments-webhooks/on-write.js +1224 -0
- package/dist/manager/events/firestore/payments-webhooks/transitions/index.js +395 -0
- package/dist/manager/events/firestore/payments-webhooks/transitions/one-time/purchase-completed.js +58 -0
- package/dist/manager/events/firestore/payments-webhooks/transitions/one-time/purchase-failed.js +28 -0
- package/dist/manager/events/firestore/payments-webhooks/transitions/one-time/purchase-refunded.js +30 -0
- package/dist/manager/events/firestore/payments-webhooks/transitions/send-email.js +74 -0
- package/dist/manager/events/firestore/payments-webhooks/transitions/subscription/cancellation-removed.js +14 -0
- package/dist/manager/events/firestore/payments-webhooks/transitions/subscription/cancellation-requested.js +28 -0
- package/dist/manager/events/firestore/payments-webhooks/transitions/subscription/checkout-declined.js +18 -0
- package/dist/manager/events/firestore/payments-webhooks/transitions/subscription/new-subscription.js +67 -0
- package/dist/manager/events/firestore/payments-webhooks/transitions/subscription/payment-failed.js +25 -0
- package/dist/manager/events/firestore/payments-webhooks/transitions/subscription/payment-recovered.js +26 -0
- package/dist/manager/events/firestore/payments-webhooks/transitions/subscription/payment-refunded.js +34 -0
- package/dist/manager/events/firestore/payments-webhooks/transitions/subscription/plan-changed.js +42 -0
- package/dist/manager/events/firestore/payments-webhooks/transitions/subscription/subscription-cancelled.js +33 -0
- package/dist/manager/events/firestore/payments-webhooks/transitions/subscription/subscription-winback.js +17 -0
- package/dist/manager/functions/_legacy/actions/create-post-handler.js +188 -0
- package/dist/manager/functions/_legacy/actions/generate-uuid.js +63 -0
- package/dist/manager/functions/_legacy/actions/sign-up-handler.js +205 -0
- package/dist/manager/functions/_legacy/admin/create-post.js +207 -0
- package/dist/manager/functions/_legacy/admin/firestore-write.js +72 -0
- package/dist/manager/functions/_legacy/admin/get-stats.js +218 -0
- package/dist/manager/functions/_legacy/admin/query.js +198 -0
- package/dist/manager/functions/_legacy/admin/send-notification.js +206 -0
- package/dist/manager/functions/_legacy/template.js +33 -0
- package/dist/manager/functions/_legacy/test/authenticate.js +40 -0
- package/dist/manager/functions/_legacy/test/webhook.js +37 -0
- package/dist/manager/functions/wrappers/mailchimp/addToList.js +25 -0
- package/dist/manager/helpers/analytics.js +498 -0
- package/dist/manager/helpers/api-manager.js +313 -0
- package/dist/manager/helpers/backend-router.js +37 -0
- package/dist/manager/helpers/context/authenticate.js +215 -0
- package/dist/manager/helpers/context/client-info.js +91 -0
- package/dist/manager/helpers/context/index.js +228 -0
- package/dist/manager/helpers/context/logging.js +150 -0
- package/dist/manager/helpers/context/parse.js +160 -0
- package/dist/manager/helpers/context/respond.js +247 -0
- package/dist/manager/helpers/event-middleware.js +109 -0
- package/dist/manager/helpers/metadata.js +32 -0
- package/dist/manager/helpers/middleware.js +541 -0
- package/dist/manager/helpers/redact-secret.js +25 -0
- package/dist/manager/helpers/resolved-config.js +34 -0
- package/dist/manager/helpers/roles.js +69 -0
- package/dist/manager/helpers/safe-compare.js +31 -0
- package/dist/manager/helpers/schema-engine.js +314 -0
- package/dist/manager/helpers/schema-zod.js +203 -0
- package/dist/manager/helpers/settings.js +215 -0
- package/dist/manager/helpers/usage.js +541 -0
- package/dist/manager/helpers/user.js +57 -0
- package/dist/manager/helpers/utilities.js +565 -0
- package/dist/manager/index.js +1404 -0
- package/dist/manager/libraries/abandoned-cart-config.js +12 -0
- package/dist/manager/libraries/ai/index.js +321 -0
- package/dist/manager/libraries/ai/prompt.js +85 -0
- package/dist/manager/libraries/ai/providers/anthropic-format.js +297 -0
- package/dist/manager/libraries/ai/providers/anthropic.js +169 -0
- package/dist/manager/libraries/ai/providers/claude-code.js +183 -0
- package/dist/manager/libraries/ai/providers/openai.js +1272 -0
- package/dist/manager/libraries/ai/providers/test.js +257 -0
- package/dist/manager/libraries/ai/tokens.js +54 -0
- package/dist/manager/libraries/analytics/conversions.js +478 -0
- package/dist/manager/libraries/analytics/match-data.js +573 -0
- package/dist/manager/libraries/analytics/signup.js +120 -0
- package/dist/manager/libraries/auth-user.js +46 -0
- package/dist/manager/libraries/content/feed-parser.js +198 -0
- package/dist/manager/libraries/content/ghostii.js +191 -0
- package/dist/manager/libraries/content/source-resolver.js +629 -0
- package/dist/manager/libraries/email/constants.js +532 -0
- package/dist/manager/libraries/email/data/blocked-local-parts.json +55 -0
- package/dist/manager/libraries/email/data/blocked-local-patterns.js +14 -0
- package/dist/manager/libraries/email/data/corporate-domains.json +23 -0
- package/dist/manager/libraries/email/data/custom-disposable-domains.json +58 -0
- package/dist/manager/libraries/email/data/disposable-domains.json +8184 -0
- package/dist/manager/libraries/email/data/typo-domains.js +83 -0
- package/dist/manager/libraries/email/disposable-domains.js +92 -0
- package/dist/manager/libraries/email/generators/lib/filter.js +179 -0
- package/dist/manager/libraries/email/generators/lib/image-host.js +344 -0
- package/dist/manager/libraries/email/generators/lib/image-illustrator.js +154 -0
- package/dist/manager/libraries/email/generators/lib/markdown-renderer.js +294 -0
- package/dist/manager/libraries/email/generators/lib/mjml-template.js +120 -0
- package/dist/manager/libraries/email/generators/lib/structure.js +299 -0
- package/dist/manager/libraries/email/generators/lib/svg-illustrator.js +197 -0
- package/dist/manager/libraries/email/generators/lib/templates/base.js +229 -0
- package/dist/manager/libraries/email/generators/lib/templates/card.js +33 -0
- package/dist/manager/libraries/email/generators/lib/templates/classic-schema.js +59 -0
- package/dist/manager/libraries/email/generators/lib/templates/clean.js +82 -0
- package/dist/manager/libraries/email/generators/lib/templates/editorial/helpers.js +100 -0
- package/dist/manager/libraries/email/generators/lib/templates/editorial/index.js +318 -0
- package/dist/manager/libraries/email/generators/lib/templates/feedback.js +101 -0
- package/dist/manager/libraries/email/generators/lib/templates/field-report/helpers.js +138 -0
- package/dist/manager/libraries/email/generators/lib/templates/field-report/index.js +494 -0
- package/dist/manager/libraries/email/generators/lib/templates/index.js +47 -0
- package/dist/manager/libraries/email/generators/lib/templates/newsletter-shared.js +610 -0
- package/dist/manager/libraries/email/generators/lib/templates/order.js +461 -0
- package/dist/manager/libraries/email/generators/lib/templates/plain.js +83 -0
- package/dist/manager/libraries/email/generators/lib/templates/shared-campaign.js +64 -0
- package/dist/manager/libraries/email/generators/newsletter.js +899 -0
- package/dist/manager/libraries/email/index.js +146 -0
- package/dist/manager/libraries/email/marketing/index.js +754 -0
- package/dist/manager/libraries/email/prepare.js +365 -0
- package/dist/manager/libraries/email/providers/beehiiv.js +589 -0
- package/dist/manager/libraries/email/providers/sendgrid.js +845 -0
- package/dist/manager/libraries/email/transactional/index.js +510 -0
- package/dist/manager/libraries/email/utm.js +86 -0
- package/dist/manager/libraries/email/validation-provider-neverbounce.js +70 -0
- package/dist/manager/libraries/email/validation-provider-zerobounce.js +42 -0
- package/dist/manager/libraries/email/validation.js +255 -0
- package/dist/manager/libraries/env.js +198 -0
- package/dist/manager/libraries/infer-contact.js +101 -0
- package/dist/manager/libraries/load-provider.js +65 -0
- package/dist/manager/libraries/notification.js +256 -0
- package/dist/manager/libraries/openai.js +13 -0
- package/dist/manager/libraries/payment/discount-codes.js +204 -0
- package/dist/manager/libraries/payment/fetch-failure.js +56 -0
- package/dist/manager/libraries/payment/license.js +44 -0
- package/dist/manager/libraries/payment/order-id.js +57 -0
- package/dist/manager/libraries/payment/provider-errors.js +71 -0
- package/dist/manager/libraries/payment/providers/chargebee.js +817 -0
- package/dist/manager/libraries/payment/providers/coinbase.js +330 -0
- package/dist/manager/libraries/payment/providers/paypal.js +987 -0
- package/dist/manager/libraries/payment/providers/stripe.js +755 -0
- package/dist/manager/libraries/payment/providers/test.js +250 -0
- package/dist/manager/libraries/payment/refund-linkage.js +78 -0
- package/dist/manager/libraries/payment/refund-policy.js +113 -0
- package/dist/manager/libraries/payment/winback.js +55 -0
- package/dist/manager/libraries/prompts/infer-contact.md +78 -0
- package/dist/manager/libraries/rate-limits.js +17 -0
- package/dist/manager/libraries/recaptcha.js +58 -0
- package/dist/manager/libraries/user-doc.js +234 -0
- package/dist/manager/routes/admin/backup/post.js +106 -0
- package/dist/manager/routes/admin/cron/post.js +37 -0
- package/dist/manager/routes/admin/database/get.js +35 -0
- package/dist/manager/routes/admin/database/post.js +34 -0
- package/dist/manager/routes/admin/email/post.js +74 -0
- package/dist/manager/routes/admin/firestore/get.js +35 -0
- package/dist/manager/routes/admin/firestore/post.js +56 -0
- package/dist/manager/routes/admin/firestore/query/post.js +128 -0
- package/dist/manager/routes/admin/hook/post.js +104 -0
- package/dist/manager/routes/admin/infer-contact/post.js +35 -0
- package/dist/manager/routes/admin/notification/post.js +37 -0
- package/dist/manager/routes/admin/payment/post.js +56 -0
- package/dist/manager/routes/admin/post/deduplicate-image-alts.js +52 -0
- package/dist/manager/routes/admin/post/dispatch-deploy.js +36 -0
- package/dist/manager/routes/admin/post/post.js +487 -0
- package/dist/manager/routes/admin/post/put.js +146 -0
- package/dist/manager/routes/admin/post/templates/post.html +14 -0
- package/dist/manager/routes/admin/repo/content/post.js +106 -0
- package/dist/manager/routes/admin/stats/get.js +222 -0
- package/dist/manager/routes/admin/users/disable/post.js +50 -0
- package/dist/manager/routes/admin/users/list/get.js +110 -0
- package/dist/manager/routes/admin/users/sync/post.js +119 -0
- package/dist/manager/routes/brand/get.js +26 -0
- package/dist/manager/routes/content/post/get.js +110 -0
- package/dist/manager/routes/general/email/post.js +89 -0
- package/dist/manager/routes/general/email/templates/general/download-app-link.js +42 -0
- package/dist/manager/routes/general/uuid/post.js +31 -0
- package/dist/manager/routes/handler/post/post.js +142 -0
- package/dist/manager/routes/health/get.js +43 -0
- package/dist/manager/routes/index.js +11 -0
- package/dist/manager/routes/marketing/campaign/delete.js +45 -0
- package/dist/manager/routes/marketing/campaign/get.js +69 -0
- package/dist/manager/routes/marketing/campaign/post.js +124 -0
- package/dist/manager/routes/marketing/campaign/put.js +86 -0
- package/dist/manager/routes/marketing/campaign/utils.js +59 -0
- package/dist/manager/routes/marketing/contact/delete.js +100 -0
- package/dist/manager/routes/marketing/contact/post.js +149 -0
- package/dist/manager/routes/marketing/contact/put.js +37 -0
- package/dist/manager/routes/marketing/email-preferences/post.js +275 -0
- package/dist/manager/routes/marketing/webhook/forward/post.js +170 -0
- package/dist/manager/routes/marketing/webhook/post.js +123 -0
- package/dist/manager/routes/marketing/webhook/providers/beehiiv.js +197 -0
- package/dist/manager/routes/marketing/webhook/providers/sendgrid.js +194 -0
- package/dist/manager/routes/payments/cancel/_is-trialing.js +40 -0
- package/dist/manager/routes/payments/cancel/post.js +149 -0
- package/dist/manager/routes/payments/cancel/providers/chargebee.js +41 -0
- package/dist/manager/routes/payments/cancel/providers/paypal.js +56 -0
- package/dist/manager/routes/payments/cancel/providers/stripe.js +33 -0
- package/dist/manager/routes/payments/cancel/providers/test.js +118 -0
- package/dist/manager/routes/payments/discount/get.js +25 -0
- package/dist/manager/routes/payments/dispute-alert/post.js +117 -0
- package/dist/manager/routes/payments/dispute-alert/providers/chargeblast.js +55 -0
- package/dist/manager/routes/payments/intent/post.js +341 -0
- package/dist/manager/routes/payments/intent/providers/chargebee.js +197 -0
- package/dist/manager/routes/payments/intent/providers/coinbase.js +94 -0
- package/dist/manager/routes/payments/intent/providers/paypal.js +244 -0
- package/dist/manager/routes/payments/intent/providers/stripe.js +141 -0
- package/dist/manager/routes/payments/intent/providers/test.js +341 -0
- package/dist/manager/routes/payments/plan/post.js +147 -0
- package/dist/manager/routes/payments/plan/providers/chargebee.js +62 -0
- package/dist/manager/routes/payments/plan/providers/paypal.js +62 -0
- package/dist/manager/routes/payments/plan/providers/stripe.js +59 -0
- package/dist/manager/routes/payments/plan/providers/test.js +113 -0
- package/dist/manager/routes/payments/portal/post.js +113 -0
- package/dist/manager/routes/payments/portal/providers/chargebee.js +62 -0
- package/dist/manager/routes/payments/portal/providers/paypal.js +25 -0
- package/dist/manager/routes/payments/portal/providers/stripe.js +62 -0
- package/dist/manager/routes/payments/portal/providers/test.js +18 -0
- package/dist/manager/routes/payments/refund/post.js +207 -0
- package/dist/manager/routes/payments/refund/providers/chargebee.js +147 -0
- package/dist/manager/routes/payments/refund/providers/coinbase.js +40 -0
- package/dist/manager/routes/payments/refund/providers/paypal.js +239 -0
- package/dist/manager/routes/payments/refund/providers/stripe.js +160 -0
- package/dist/manager/routes/payments/refund/providers/test.js +204 -0
- package/dist/manager/routes/payments/trial-eligibility/get.js +29 -0
- package/dist/manager/routes/payments/uncancel/post.js +106 -0
- package/dist/manager/routes/payments/uncancel/providers/chargebee.js +30 -0
- package/dist/manager/routes/payments/uncancel/providers/paypal.js +25 -0
- package/dist/manager/routes/payments/uncancel/providers/stripe.js +27 -0
- package/dist/manager/routes/payments/uncancel/providers/test.js +114 -0
- package/dist/manager/routes/payments/webhook/post.js +157 -0
- package/dist/manager/routes/payments/webhook/providers/chargebee.js +218 -0
- package/dist/manager/routes/payments/webhook/providers/coinbase.js +91 -0
- package/dist/manager/routes/payments/webhook/providers/paypal.js +214 -0
- package/dist/manager/routes/payments/webhook/providers/stripe.js +182 -0
- package/dist/manager/routes/payments/webhook/providers/test.js +18 -0
- package/dist/manager/routes/payments/winback/post.js +276 -0
- package/dist/manager/routes/payments/winback/providers/chargebee.js +24 -0
- package/dist/manager/routes/payments/winback/providers/paypal.js +22 -0
- package/dist/manager/routes/payments/winback/providers/stripe.js +41 -0
- package/dist/manager/routes/payments/winback/providers/test.js +42 -0
- package/dist/manager/routes/restart/index.js +37 -0
- package/dist/manager/routes/special/electron-client/post.js +59 -0
- package/dist/manager/routes/test/authenticate/get.js +11 -0
- package/dist/manager/routes/test/health/get.js +8 -0
- package/dist/manager/routes/test/index.js +16 -0
- package/dist/manager/routes/test/lab/post.js +17 -0
- package/dist/manager/routes/test/redirect/get.js +27 -0
- package/dist/manager/routes/test/reset-account/post.js +79 -0
- package/dist/manager/routes/test/roster/get.js +40 -0
- package/dist/manager/routes/test/schema/post.js +20 -0
- package/dist/manager/routes/test/usage/post.js +44 -0
- package/dist/manager/routes/test/webhook/post.js +21 -0
- package/dist/manager/routes/user/api-keys/post.js +51 -0
- package/dist/manager/routes/user/connections/_context.js +194 -0
- package/dist/manager/routes/user/connections/_grant.js +247 -0
- package/dist/manager/routes/user/connections/_lease.js +184 -0
- package/dist/manager/routes/user/connections/_providers.js +191 -0
- package/dist/manager/routes/user/connections/_state.js +117 -0
- package/dist/manager/routes/user/connections/delete.js +55 -0
- package/dist/manager/routes/user/connections/get.js +167 -0
- package/dist/manager/routes/user/connections/post.js +370 -0
- package/dist/manager/routes/user/connections/providers/discord.js +41 -0
- package/dist/manager/routes/user/connections/providers/google.js +55 -0
- package/dist/manager/routes/user/connections/providers/kick.js +68 -0
- package/dist/manager/routes/user/connections/providers/spotify.js +40 -0
- package/dist/manager/routes/user/connections/providers/twitch.js +52 -0
- package/dist/manager/routes/user/data-request/delete.js +84 -0
- package/dist/manager/routes/user/data-request/get.js +229 -0
- package/dist/manager/routes/user/data-request/post.js +136 -0
- package/dist/manager/routes/user/delete.js +149 -0
- package/dist/manager/routes/user/feedback/post.js +81 -0
- package/dist/manager/routes/user/get.js +14 -0
- package/dist/manager/routes/user/orders/get.js +95 -0
- package/dist/manager/routes/user/sessions/delete.js +95 -0
- package/dist/manager/routes/user/sessions/get.js +40 -0
- package/dist/manager/routes/user/settings/validate/post.js +86 -0
- package/dist/manager/routes/user/signup/post.js +662 -0
- package/dist/manager/routes/user/subscription/get.js +77 -0
- package/dist/manager/routes/user/token/post.js +30 -0
- package/dist/manager/routes/verts/delete.js +43 -0
- package/dist/manager/routes/verts/get.js +49 -0
- package/dist/manager/routes/verts/post.js +61 -0
- package/dist/manager/routes/verts/put.js +75 -0
- package/dist/manager/routes/verts/redirect/get.js +36 -0
- package/dist/manager/routes/verts/serve/get.js +67 -0
- package/dist/manager/routes/verts/utils.js +436 -0
- package/dist/manager/schemas/admin/backup/post.js +8 -0
- package/dist/manager/schemas/admin/cron/post.js +8 -0
- package/dist/manager/schemas/admin/database/get.js +5 -0
- package/dist/manager/schemas/admin/database/post.js +6 -0
- package/dist/manager/schemas/admin/email/post.js +31 -0
- package/dist/manager/schemas/admin/firestore/get.js +5 -0
- package/dist/manager/schemas/admin/firestore/post.js +8 -0
- package/dist/manager/schemas/admin/firestore/query/post.js +5 -0
- package/dist/manager/schemas/admin/hook/post.js +8 -0
- package/dist/manager/schemas/admin/infer-contact/post.js +6 -0
- package/dist/manager/schemas/admin/notification/post.js +23 -0
- package/dist/manager/schemas/admin/payment/post.js +8 -0
- package/dist/manager/schemas/admin/post/post.js +23 -0
- package/dist/manager/schemas/admin/post/put.js +13 -0
- package/dist/manager/schemas/admin/repo/content/post.js +10 -0
- package/dist/manager/schemas/admin/stats/get.js +5 -0
- package/dist/manager/schemas/admin/users/disable/post.js +9 -0
- package/dist/manager/schemas/admin/users/list/get.js +10 -0
- package/dist/manager/schemas/admin/users/sync/post.js +7 -0
- package/dist/manager/schemas/brand/get.js +3 -0
- package/dist/manager/schemas/content/post/get.js +8 -0
- package/dist/manager/schemas/general/email/post.js +10 -0
- package/dist/manager/schemas/general/uuid/post.js +9 -0
- package/dist/manager/schemas/handler/post/post.js +13 -0
- package/dist/manager/schemas/health/get.js +3 -0
- package/dist/manager/schemas/marketing/campaign/delete.js +8 -0
- package/dist/manager/schemas/marketing/campaign/get.js +13 -0
- package/dist/manager/schemas/marketing/campaign/post.js +43 -0
- package/dist/manager/schemas/marketing/campaign/put.js +37 -0
- package/dist/manager/schemas/marketing/contact/delete.js +8 -0
- package/dist/manager/schemas/marketing/contact/post.js +14 -0
- package/dist/manager/schemas/marketing/contact/put.js +8 -0
- package/dist/manager/schemas/marketing/email-preferences/post.js +15 -0
- package/dist/manager/schemas/marketing/webhook/forward/post.js +8 -0
- package/dist/manager/schemas/marketing/webhook/post.js +7 -0
- package/dist/manager/schemas/payments/cancel/post.js +15 -0
- package/dist/manager/schemas/payments/discount/get.js +8 -0
- package/dist/manager/schemas/payments/dispute-alert/post.js +6 -0
- package/dist/manager/schemas/payments/intent/post.js +28 -0
- package/dist/manager/schemas/payments/plan/post.js +11 -0
- package/dist/manager/schemas/payments/portal/post.js +12 -0
- package/dist/manager/schemas/payments/refund/post.js +14 -0
- package/dist/manager/schemas/payments/trial-eligibility/get.js +7 -0
- package/dist/manager/schemas/payments/uncancel/post.js +9 -0
- package/dist/manager/schemas/payments/webhook/post.js +6 -0
- package/dist/manager/schemas/payments/winback/post.js +12 -0
- package/dist/manager/schemas/restart/index.js +5 -0
- package/dist/manager/schemas/special/electron-client/post.js +11 -0
- package/dist/manager/schemas/test/authenticate/get.js +3 -0
- package/dist/manager/schemas/test/health/get.js +3 -0
- package/dist/manager/schemas/test/index.js +5 -0
- package/dist/manager/schemas/test/lab/post.js +3 -0
- package/dist/manager/schemas/test/redirect/get.js +7 -0
- package/dist/manager/schemas/test/reset-account/post.js +3 -0
- package/dist/manager/schemas/test/roster/get.js +3 -0
- package/dist/manager/schemas/test/schema/post.js +70 -0
- package/dist/manager/schemas/test/usage/post.js +8 -0
- package/dist/manager/schemas/test/webhook/post.js +7 -0
- package/dist/manager/schemas/user/api-keys/post.js +6 -0
- package/dist/manager/schemas/user/connections/delete.js +8 -0
- package/dist/manager/schemas/user/connections/get.js +21 -0
- package/dist/manager/schemas/user/connections/post.js +12 -0
- package/dist/manager/schemas/user/data-request/delete.js +3 -0
- package/dist/manager/schemas/user/data-request/get.js +5 -0
- package/dist/manager/schemas/user/data-request/post.js +6 -0
- package/dist/manager/schemas/user/delete.js +6 -0
- package/dist/manager/schemas/user/feedback/post.js +8 -0
- package/dist/manager/schemas/user/get.js +3 -0
- package/dist/manager/schemas/user/orders/get.js +6 -0
- package/dist/manager/schemas/user/sessions/delete.js +6 -0
- package/dist/manager/schemas/user/sessions/get.js +6 -0
- package/dist/manager/schemas/user/settings/validate/post.js +8 -0
- package/dist/manager/schemas/user/signup/post.js +27 -0
- package/dist/manager/schemas/user/subscription/get.js +5 -0
- package/dist/manager/schemas/user/token/post.js +5 -0
- package/dist/manager/schemas/verts/delete.js +8 -0
- package/dist/manager/schemas/verts/get.js +9 -0
- package/dist/manager/schemas/verts/post.js +23 -0
- package/dist/manager/schemas/verts/put.js +20 -0
- package/dist/manager/schemas/verts/redirect/get.js +10 -0
- package/dist/manager/schemas/verts/serve/get.js +14 -0
- package/dist/manager/server-manager.js +69 -0
- package/dist/mcp/client.js +98 -0
- package/dist/mcp/handler.js +521 -0
- package/dist/mcp/index.js +157 -0
- package/dist/mcp/tools.js +555 -0
- package/dist/mcp/utils.js +108 -0
- package/dist/omega-bin.js +6 -0
- package/dist/require.js +3 -0
- package/dist/test/fixtures/firebase-project/.firebaserc +5 -0
- package/dist/test/fixtures/firebase-project/config/omega.json5 +131 -0
- package/dist/test/fixtures/firebase-project/database.rules.json +6 -0
- package/dist/test/fixtures/firebase-project/firebase.json +49 -0
- package/dist/test/fixtures/firebase-project/firestore.indexes.json +4 -0
- package/dist/test/fixtures/firebase-project/package.json +14 -0
- package/dist/test/fixtures/firebase-project/src/index.js +11 -0
- package/dist/test/fixtures/firebase-project/storage.rules +8 -0
- package/dist/test/parse-audit.js +25 -0
- package/dist/test/run-tests.js +90 -0
- package/dist/test/runner.js +982 -0
- package/dist/test/seed.js +242 -0
- package/dist/test/test-accounts.js +2660 -0
- package/dist/test/utils/assertions.js +189 -0
- package/dist/test/utils/email-capture.js +252 -0
- package/dist/test/utils/extended-mode-warning.js +11 -0
- package/dist/test/utils/firestore-rules-client.js +277 -0
- package/dist/test/utils/http-client.js +228 -0
- package/dist/test/utils/test-mode-file.js +192 -0
- package/dist/utils/merge-line-files.js +6 -0
- package/dist/utils/scaffold-defaults.js +71 -0
- package/dist/utils/test-lanes.js +62 -0
- package/dist/vendor/account/engine.js +182 -0
- package/dist/vendor/account/features.js +220 -0
- package/dist/vendor/account/index.js +53 -0
- package/dist/vendor/account/schema.js +272 -0
- package/dist/vendor/account/subscription.js +38 -0
- package/dist/vendor/analytics/adapters/ga4.js +26 -0
- package/dist/vendor/analytics/adapters/meta.js +26 -0
- package/dist/vendor/analytics/adapters/resolve.js +130 -0
- package/dist/vendor/analytics/adapters/tiktok.js +27 -0
- package/dist/vendor/analytics/catalog.js +908 -0
- package/dist/vendor/analytics/identity.js +136 -0
- package/dist/vendor/config/company.js +31 -0
- package/dist/vendor/config/defaults.js +173 -0
- package/dist/vendor/config/demo.js +18 -0
- package/dist/vendor/config/desktop-artifacts.js +110 -0
- package/dist/vendor/config/edit.js +769 -0
- package/dist/vendor/config/env-delivery.js +145 -0
- package/dist/vendor/config/env-rules.js +93 -0
- package/dist/vendor/config/env-schema.js +1078 -0
- package/dist/vendor/config/env.js +445 -0
- package/dist/vendor/config/hooks.js +97 -0
- package/dist/vendor/config/index.js +237 -0
- package/dist/vendor/config/instances.js +208 -0
- package/dist/vendor/config/load.js +490 -0
- package/dist/vendor/config/merge.js +68 -0
- package/dist/vendor/config/order.js +139 -0
- package/dist/vendor/config/ports.js +374 -0
- package/dist/vendor/config/providers.js +32 -0
- package/dist/vendor/config/repo.js +142 -0
- package/dist/vendor/config/retired-keys.js +430 -0
- package/dist/vendor/config/schema.js +1610 -0
- package/dist/vendor/config/secrets.js +50 -0
- package/dist/vendor/config/seed.js +34 -0
- package/dist/vendor/config/site-global.js +205 -0
- package/dist/vendor/config/validate.js +554 -0
- package/dist/vendor/config/winback.js +61 -0
- package/dist/vendor/devkit/attach-log-file.js +262 -0
- package/dist/vendor/devkit/bare-requires.js +153 -0
- package/dist/vendor/devkit/command-path.js +46 -0
- package/dist/vendor/devkit/defaults-engine.js +372 -0
- package/dist/vendor/devkit/deploy-record.js +180 -0
- package/dist/vendor/devkit/deploy.js +286 -0
- package/dist/vendor/devkit/license.js +155 -0
- package/dist/vendor/devkit/local-https.js +360 -0
- package/dist/vendor/devkit/local.js +1905 -0
- package/dist/vendor/devkit/logger.js +128 -0
- package/dist/vendor/devkit/merge-line-files.js +296 -0
- package/dist/vendor/devkit/npm-registry.js +52 -0
- package/dist/vendor/devkit/omega-bin.js +345 -0
- package/dist/vendor/devkit/parse-audit.js +74 -0
- package/dist/vendor/devkit/safe-install.js +18 -0
- package/dist/vendor/devkit/scaffold-guard.js +96 -0
- package/dist/vendor/devkit/stop-signals.js +28 -0
- package/dist/vendor/devkit/test/assert.js +120 -0
- package/dist/vendor/devkit/test/define-cases.js +104 -0
- package/dist/vendor/devkit/test/runner-core.js +554 -0
- package/dist/vendor/devkit/test/scope.js +162 -0
- package/dist/vendor/devkit/update.js +569 -0
- package/dist/vendor/monitoring/core.js +180 -0
- package/dist/vendor/monitoring/env.js +49 -0
- package/dist/vendor/monitoring/logger.js +39 -0
- package/dist/vendor/monitoring/node.js +72 -0
- package/docs/admin-post-route.md +57 -0
- package/docs/ai-library.md +171 -0
- package/docs/architecture.md +62 -0
- package/docs/audit.md +70 -0
- package/docs/auth-hooks.md +74 -0
- package/docs/build-system.md +65 -0
- package/docs/cdp-debugging.md +29 -0
- package/docs/cli-firestore-auth.md +85 -0
- package/docs/cli-logs.md +67 -0
- package/docs/cli-output.md +146 -0
- package/docs/code-patterns.md +77 -0
- package/docs/common-mistakes.md +12 -0
- package/docs/common-operations.md +60 -0
- package/docs/connections.md +212 -0
- package/docs/consent.md +362 -0
- package/docs/directory-structure.md +150 -0
- package/docs/email-system.md +459 -0
- package/docs/environment-detection.md +93 -0
- package/docs/file-naming.md +10 -0
- package/docs/firestore.md +134 -0
- package/docs/ghostii.md +240 -0
- package/docs/index.md +299 -0
- package/docs/key-files.md +37 -0
- package/docs/logging.md +60 -0
- package/docs/marketing-campaigns.md +407 -0
- package/docs/marketing-fields.md +25 -0
- package/docs/mcp.md +222 -0
- package/docs/migration.md +129 -0
- package/docs/payment-system.md +856 -0
- package/docs/paypal-sandbox-qa.md +105 -0
- package/docs/response-headers.md +9 -0
- package/docs/routes.md +211 -0
- package/docs/sanitization.md +71 -0
- package/docs/schemas.md +163 -0
- package/docs/shared/agent-docs.md +89 -0
- package/docs/shared/analytics.md +612 -0
- package/docs/shared/brands.md +51 -0
- package/docs/shared/breaking-changes.md +497 -0
- package/docs/shared/config.md +1387 -0
- package/docs/shared/deploys.md +215 -0
- package/docs/shared/icons.md +201 -0
- package/docs/shared/local-dev.md +147 -0
- package/docs/shared/logging.md +202 -0
- package/docs/shared/monitoring.md +153 -0
- package/docs/shared/publishing.md +183 -0
- package/docs/shared/rulings.md +34 -0
- package/docs/shared/testing.md +147 -0
- package/docs/shared/theming.md +604 -0
- package/docs/shared/translation.md +291 -0
- package/docs/shared/updates.md +61 -0
- package/docs/stripe-webhook-forwarding.md +20 -0
- package/docs/test-boot-layer.md +67 -0
- package/docs/test-framework.md +583 -0
- package/docs/usage-rate-limiting.md +121 -0
- package/docs/verts.md +29 -0
- package/package.json +143 -0
- package/templates/config/omega.json5 +322 -0
- package/templates/database.rules.json +82 -0
- package/templates/firebase.json +67 -0
- package/templates/firestore.framework.rules +191 -0
- package/templates/firestore.indexes.json +4 -0
- package/templates/firestore.rules +59 -0
- package/templates/index.js +12 -0
- package/templates/public/404.html +26 -0
- package/templates/public/index.html +24 -0
- package/templates/remoteconfig.template.json +1 -0
- package/templates/storage-lifecycle-config-1-day.json +9 -0
- package/templates/storage-lifecycle-config-30-days.json +9 -0
- package/templates/storage.rules +11 -0
- package/test/_init/accounts-validation.js +58 -0
- package/test/ai/tools-live.test.js +171 -0
- package/test/analytics/conversion-delivery.test.js +1013 -0
- package/test/analytics/match-normalization.test.js +238 -0
- package/test/analytics/signup-conversion.test.js +135 -0
- package/test/boot/cli-dispatch.test.js +142 -0
- package/test/boot/defaults-scaffold.test.js +248 -0
- package/test/boot/deploy-staging.test.js +446 -0
- package/test/boot/disposable-domains.test.js +154 -0
- package/test/boot/emulator-boots.test.js +39 -0
- package/test/boot/emulator-port-preflight.test.js +126 -0
- package/test/boot/emulator-ready-timeout.test.js +46 -0
- package/test/boot/project-id-refresh.test.js +73 -0
- package/test/boot/suite-portability.test.js +278 -0
- package/test/boot/update-command.test.js +63 -0
- package/test/cli/cross-platform.test.js +168 -0
- package/test/cli/custom-project-type.test.js +426 -0
- package/test/cli/deploy-license-env.test.js +100 -0
- package/test/cli/emulator-adoption.test.js +254 -0
- package/test/cli/emulator-orphans.test.js +658 -0
- package/test/cli/emulator-ownership.test.js +177 -0
- package/test/cli/emulator-port-retry.test.js +395 -0
- package/test/cli/emulator-shutdown.test.js +788 -0
- package/test/cli/emulator-stale-reap.test.js +574 -0
- package/test/cli/ensure-target.test.js +325 -0
- package/test/cli/flags.test.js +64 -0
- package/test/cli/https-trust.test.js +38 -0
- package/test/cli/install-update-dispatch.test.js +47 -0
- package/test/cli/lane-environments.test.js +159 -0
- package/test/cli/marketing-campaigns-seeded.test.js +194 -0
- package/test/cli/migrate-bare-requires.test.js +128 -0
- package/test/cli/migrate-markers.test.js +530 -0
- package/test/cli/required-indexes.test.js +64 -0
- package/test/cli/rules-compile.test.js +622 -0
- package/test/cli/rules-migration-deferral.test.js +259 -0
- package/test/cli/rules-version.test.js +104 -0
- package/test/cli/setup-load-files.test.js +66 -0
- package/test/cli/setup-offline-mode.test.js +276 -0
- package/test/cli/setup-retired.test.js +64 -0
- package/test/cli/setup-shared-project-indexes.test.js +262 -0
- package/test/cli/setup-tests-requires.test.js +45 -0
- package/test/cli/stage-env-compose.test.js +316 -0
- package/test/cli/stripe-live-lane.test.js +303 -0
- package/test/cli/target.test.js +182 -0
- package/test/cli/templates.test.js +66 -0
- package/test/cli/test-runner-env.test.js +115 -0
- package/test/cli/test-stack-shutdown.test.js +275 -0
- package/test/cli/test-target-no-match.test.js +128 -0
- package/test/cli/verb-logs.test.js +118 -0
- package/test/cli/version-dispatch.test.js +39 -0
- package/test/content/blog-generate.test.js +164 -0
- package/test/email/campaign-config-fault.test.js +376 -0
- package/test/email/campaign-cron-pipeline.test.js +536 -0
- package/test/email/campaign-send.test.js +47 -0
- package/test/email/consent-lifecycle.test.js +258 -0
- package/test/email/content-html-policy.test.js +270 -0
- package/test/email/feedback-and-plain-send.test.js +54 -0
- package/test/email/fixtures/clean.json +30 -0
- package/test/email/fixtures/editorial.json +30 -0
- package/test/email/fixtures/field-report.json +53 -0
- package/test/email/identity.test.js +321 -0
- package/test/email/marketing/consent-gate.test.js +265 -0
- package/test/email/marketing/custom-fields-catalog.test.js +259 -0
- package/test/email/marketing/prune-per-provider.test.js +762 -0
- package/test/email/marketing/remove-log-privacy.test.js +225 -0
- package/test/email/marketing-lifecycle.test.js +139 -0
- package/test/email/newsletter-generate.test.js +853 -0
- package/test/email/newsletter-svg-tokens.test.js +51 -0
- package/test/email/newsletter-templates.test.js +492 -0
- package/test/email/order-one-time-cta.test.js +97 -0
- package/test/email/render-content.test.js +248 -0
- package/test/email/safe-url.test.js +0 -0
- package/test/email/sanitize-images.test.js +66 -0
- package/test/email/send-log-privacy.test.js +107 -0
- package/test/email/templates.test.js +288 -0
- package/test/email/testing-capture.test.js +260 -0
- package/test/email/transactional-send.test.js +36 -0
- package/test/email/transactional.test.js +562 -0
- package/test/email/unsubscribe-groups.test.js +155 -0
- package/test/email/unsubscribe-key.test.js +91 -0
- package/test/email/validation-cases.test.js +152 -0
- package/test/email/validation.test.js +746 -0
- package/test/events/auth-delete-conversion.test.js +138 -0
- package/test/events/auth-delete-race.test.js +211 -0
- package/test/events/auth-on-create-log.test.js +164 -0
- package/test/events/auth-signup-conversion.test.js +141 -0
- package/test/events/auth-signup-limit.test.js +142 -0
- package/test/events/auth-trigger-log-privacy.test.js +256 -0
- package/test/events/cron-job-doc-shape.test.js +101 -0
- package/test/events/cron-reset-usage.test.js +116 -0
- package/test/events/notification-conversion.test.js +182 -0
- package/test/events/payments/_webhook-harness.js +307 -0
- package/test/events/payments/abandoned-cart-activity.test.js +135 -0
- package/test/events/payments/analytics-payment-events.test.js +945 -0
- package/test/events/payments/dispute-email-status.test.js +55 -0
- package/test/events/payments/journey-payments-abandoned.test.js +126 -0
- package/test/events/payments/journey-payments-cancel-endpoint.test.js +102 -0
- package/test/events/payments/journey-payments-cancel-no-order.test.js +76 -0
- package/test/events/payments/journey-payments-cancel.test.js +184 -0
- package/test/events/payments/journey-payments-decline.test.js +225 -0
- package/test/events/payments/journey-payments-discount.test.js +91 -0
- package/test/events/payments/journey-payments-dispute.test.js +190 -0
- package/test/events/payments/journey-payments-failure.test.js +148 -0
- package/test/events/payments/journey-payments-legacy-product.test.js +151 -0
- package/test/events/payments/journey-payments-one-time-decline.test.js +127 -0
- package/test/events/payments/journey-payments-one-time-failure.test.js +113 -0
- package/test/events/payments/journey-payments-one-time-refund.test.js +186 -0
- package/test/events/payments/journey-payments-one-time.test.js +175 -0
- package/test/events/payments/journey-payments-plan-change.test.js +146 -0
- package/test/events/payments/journey-payments-plan-switch-trial.test.js +161 -0
- package/test/events/payments/journey-payments-plan-switch.test.js +182 -0
- package/test/events/payments/journey-payments-refund-no-order.test.js +76 -0
- package/test/events/payments/journey-payments-refund-webhook.test.js +225 -0
- package/test/events/payments/journey-payments-suspend.test.js +183 -0
- package/test/events/payments/journey-payments-trial-cancel.test.js +132 -0
- package/test/events/payments/journey-payments-trial.test.js +173 -0
- package/test/events/payments/journey-payments-uid-resolution.test.js +134 -0
- package/test/events/payments/journey-payments-uncancel.test.js +157 -0
- package/test/events/payments/journey-payments-upgrade.test.js +137 -0
- package/test/events/payments/journey-payments-winback-decline.test.js +171 -0
- package/test/events/payments/journey-payments-winback.test.js +195 -0
- package/test/events/payments/paypal-expiry-cron.test.js +166 -0
- package/test/events/payments/purchase-failed-handler.test.js +80 -0
- package/test/events/payments/purchase-refunded-handler.test.js +108 -0
- package/test/events/payments/test-processor-doc-shape.test.js +162 -0
- package/test/events/payments/transition-order-emails.test.js +185 -0
- package/test/events/payments/transition-promo-lines.test.js +192 -0
- package/test/events/payments/transitions-detect.test.js +767 -0
- package/test/events/payments/trial-lapse-sweep-staleness.test.js +173 -0
- package/test/events/payments/trial-lapse-sweep.test.js +359 -0
- package/test/events/payments/webhook-atomic-writes.test.js +69 -0
- package/test/events/payments/webhook-chargebee-unreachable.test.js +106 -0
- package/test/events/payments/webhook-discount-clear.test.js +189 -0
- package/test/events/payments/webhook-failure-intent.test.js +93 -0
- package/test/events/payments/webhook-hosted-page-uid-trust.test.js +212 -0
- package/test/events/payments/webhook-ordering.test.js +326 -0
- package/test/events/payments/webhook-provider-lookup-trust.test.js +206 -0
- package/test/events/payments/webhook-refund-amount-trust.test.js +223 -0
- package/test/events/payments/webhook-refund-envelope-shape.test.js +148 -0
- package/test/events/payments/webhook-refund-linkage-trust.test.js +404 -0
- package/test/events/payments/webhook-refund-transaction-fallback.test.js +184 -0
- package/test/events/payments/webhook-refund-without-order.test.js +170 -0
- package/test/events/payments/webhook-refusal-reporting.test.js +194 -0
- package/test/events/payments/webhook-refused-intent.test.js +142 -0
- package/test/events/payments/webhook-retry-sweep.test.js +252 -0
- package/test/events/payments/webhook-transition-claim.test.js +389 -0
- package/test/events/payments/webhook-uid-trust.test.js +203 -0
- package/test/events/payments/webhook-user-without-auth.test.js +161 -0
- package/test/fixtures/chargebee/invoice-one-time.json +27 -0
- package/test/fixtures/chargebee/subscription-active.json +44 -0
- package/test/fixtures/chargebee/subscription-cancelled.json +42 -0
- package/test/fixtures/chargebee/subscription-in-trial.json +41 -0
- package/test/fixtures/chargebee/subscription-legacy-plan.json +41 -0
- package/test/fixtures/chargebee/subscription-non-renewing.json +41 -0
- package/test/fixtures/chargebee/subscription-paused.json +42 -0
- package/test/fixtures/chargebee/webhook-payment-failed.json +51 -0
- package/test/fixtures/chargebee/webhook-subscription-created.json +47 -0
- package/test/fixtures/coinbase/charge-confirmed.json +50 -0
- package/test/fixtures/coinbase/charge-failed.json +34 -0
- package/test/fixtures/coinbase/charge-pending.json +34 -0
- package/test/fixtures/migrate/ported-route.js.txt +11 -0
- package/test/fixtures/paypal/capture-completed.json +51 -0
- package/test/fixtures/paypal/capture-refunded.json +43 -0
- package/test/fixtures/paypal/order-approved.json +62 -0
- package/test/fixtures/paypal/order-completed.json +110 -0
- package/test/fixtures/paypal/sale-refunded.json +38 -0
- package/test/fixtures/paypal/subscription-active.json +76 -0
- package/test/fixtures/paypal/subscription-cancelled.json +50 -0
- package/test/fixtures/paypal/subscription-suspended.json +65 -0
- package/test/fixtures/stripe/checkout-session-completed.json +130 -0
- package/test/fixtures/stripe/invoice-payment-failed.json +148 -0
- package/test/fixtures/stripe/invoice-subscription-payment-failed.json +28 -0
- package/test/fixtures/stripe/invoice-subscription-payment-succeeded.json +28 -0
- package/test/fixtures/stripe/subscription-active.json +161 -0
- package/test/fixtures/stripe/subscription-canceled.json +161 -0
- package/test/fixtures/stripe/subscription-trialing.json +161 -0
- package/test/helpers/_shared-config.js +15 -0
- package/test/helpers/ai-request-payload.test.js +619 -0
- package/test/helpers/ai-schema-resolve.test.js +125 -0
- package/test/helpers/ai-test-provider.test.js +227 -0
- package/test/helpers/ai-token-accounting.test.js +150 -0
- package/test/helpers/ai-tools-format.test.js +384 -0
- package/test/helpers/analytics-no-id-notice.test.js +146 -0
- package/test/helpers/analytics-user-data.test.js +194 -0
- package/test/helpers/api-manager.test.js +311 -0
- package/test/helpers/backend-router.test.js +136 -0
- package/test/helpers/content/blog-auto-publisher.test.js +482 -0
- package/test/helpers/content/feed-parser.test.js +529 -0
- package/test/helpers/content/ghostii-blocks.test.js +135 -0
- package/test/helpers/content/ghostii-feed-integration.test.js +405 -0
- package/test/helpers/content/ghostii-write-article.test.js +244 -0
- package/test/helpers/dev-only-routes.test.js +225 -0
- package/test/helpers/env-reader.test.js +362 -0
- package/test/helpers/environment.test.js +263 -0
- package/test/helpers/event-middleware.test.js +407 -0
- package/test/helpers/infer-contact.test.js +157 -0
- package/test/helpers/lane-url.test.js +90 -0
- package/test/helpers/merge-line-files.test.js +272 -0
- package/test/helpers/metadata.test.js +122 -0
- package/test/helpers/middleware-request-log.test.js +134 -0
- package/test/helpers/middleware-user-log.test.js +124 -0
- package/test/helpers/payment/chargebee/parse-webhook.test.js +490 -0
- package/test/helpers/payment/chargebee/refund-details.test.js +198 -0
- package/test/helpers/payment/chargebee/to-unified-one-time.test.js +148 -0
- package/test/helpers/payment/chargebee/to-unified-subscription.test.js +649 -0
- package/test/helpers/payment/coinbase/create-intent.test.js +247 -0
- package/test/helpers/payment/coinbase/parse-webhook.test.js +195 -0
- package/test/helpers/payment/coinbase/refund-unsupported.test.js +141 -0
- package/test/helpers/payment/coinbase/to-unified-one-time.test.js +201 -0
- package/test/helpers/payment/discount-codes.test.js +141 -0
- package/test/helpers/payment/extract-resource.test.js +113 -0
- package/test/helpers/payment/fetch-failure.test.js +215 -0
- package/test/helpers/payment/license-gate.test.js +108 -0
- package/test/helpers/payment/order-id.test.js +99 -0
- package/test/helpers/payment/paypal/create-intent.test.js +382 -0
- package/test/helpers/payment/paypal/fetch-capture.test.js +123 -0
- package/test/helpers/payment/paypal/fetch-sale.test.js +183 -0
- package/test/helpers/payment/paypal/parse-webhook.test.js +678 -0
- package/test/helpers/payment/paypal/refund-details.test.js +202 -0
- package/test/helpers/payment/paypal/resolve-plan-id.test.js +108 -0
- package/test/helpers/payment/paypal/switch-plan.test.js +92 -0
- package/test/helpers/payment/paypal/to-unified-one-time.test.js +383 -0
- package/test/helpers/payment/paypal/to-unified-subscription.test.js +884 -0
- package/test/helpers/payment/stripe/fetch-charge.test.js +147 -0
- package/test/helpers/payment/stripe/parse-webhook.test.js +448 -0
- package/test/helpers/payment/stripe/refund-details.test.js +147 -0
- package/test/helpers/payment/stripe/to-unified-one-time.test.js +307 -0
- package/test/helpers/payment/stripe/to-unified-subscription.test.js +709 -0
- package/test/helpers/persona-domain.test.js +87 -0
- package/test/helpers/recaptcha.test.js +166 -0
- package/test/helpers/resolved-config.test.js +106 -0
- package/test/helpers/response-log-redaction.test.js +262 -0
- package/test/helpers/roles.test.js +155 -0
- package/test/helpers/route-context-debug-gate.test.js +118 -0
- package/test/helpers/route-context-logging.test.js +214 -0
- package/test/helpers/route-context.test.js +129 -0
- package/test/helpers/safe-compare.test.js +114 -0
- package/test/helpers/sanitize.test.js +223 -0
- package/test/helpers/schema-engine.test.js +537 -0
- package/test/helpers/schema-zod.test.js +554 -0
- package/test/helpers/seed-accounts-load.test.js +163 -0
- package/test/helpers/seed-google-personas.test.js +114 -0
- package/test/helpers/seeded-personas.test.js +823 -0
- package/test/helpers/settings.test.js +292 -0
- package/test/helpers/setup-engines-pin.test.js +68 -0
- package/test/helpers/setup-manifest-sync.test.js +116 -0
- package/test/helpers/slugify.test.js +395 -0
- package/test/helpers/storage.test.js +195 -0
- package/test/helpers/test-banner-latch.test.js +139 -0
- package/test/helpers/usage-consume.test.js +460 -0
- package/test/helpers/usage-log-privacy.test.js +121 -0
- package/test/helpers/user-doc-heal.test.js +540 -0
- package/test/helpers/user.test.js +771 -0
- package/test/helpers/webhook-forward.test.js +419 -0
- package/test/helpers/wipe-auth-project.test.js +143 -0
- package/test/mcp/discovery.test.js +52 -0
- package/test/mcp/oauth.test.js +160 -0
- package/test/mcp/protocol.test.js +278 -0
- package/test/mcp/roles.test.js +203 -0
- package/test/mcp/utils.test.js +245 -0
- package/test/notification/identity.test.js +155 -0
- package/test/routes/admin/create-post.test.js +362 -0
- package/test/routes/admin/database.test.js +133 -0
- package/test/routes/admin/deduplicate-image-alts.test.js +191 -0
- package/test/routes/admin/email-content-html.test.js +58 -0
- package/test/routes/admin/email-request-log.test.js +86 -0
- package/test/routes/admin/email.test.js +116 -0
- package/test/routes/admin/firestore-query.test.js +206 -0
- package/test/routes/admin/firestore.test.js +129 -0
- package/test/routes/admin/infer-contact.test.js +220 -0
- package/test/routes/admin/notification.test.js +199 -0
- package/test/routes/admin/post-convert-image.test.js +159 -0
- package/test/routes/admin/post-deploy-flag.test.js +81 -0
- package/test/routes/admin/post-download-error.test.js +90 -0
- package/test/routes/admin/post-resize-image.test.js +185 -0
- package/test/routes/admin/post.test.js +369 -0
- package/test/routes/admin/repo-content.test.js +223 -0
- package/test/routes/admin/stats.test.js +114 -0
- package/test/routes/admin/users-disable.test.js +63 -0
- package/test/routes/admin/users-list.test.js +71 -0
- package/test/routes/content/post.test.js +60 -0
- package/test/routes/general/uuid.test.js +133 -0
- package/test/routes/health.test.js +110 -0
- package/test/routes/marketing/campaign.test.js +184 -0
- package/test/routes/marketing/contact.test.js +416 -0
- package/test/routes/marketing/email-preferences.test.js +293 -0
- package/test/routes/marketing/push-send.test.js +34 -0
- package/test/routes/marketing/webhook-forward.test.js +63 -0
- package/test/routes/marketing/webhook.test.js +641 -0
- package/test/routes/payments/_route-harness.js +145 -0
- package/test/routes/payments/cancel-provider-errors.test.js +227 -0
- package/test/routes/payments/cancel-skip-guards.test.js +126 -0
- package/test/routes/payments/cancel-trialing.test.js +428 -0
- package/test/routes/payments/cancel.test.js +165 -0
- package/test/routes/payments/dedup-race.test.js +186 -0
- package/test/routes/payments/discount.test.js +82 -0
- package/test/routes/payments/dispute-alert.test.js +324 -0
- package/test/routes/payments/intent-discount-amounts.test.js +550 -0
- package/test/routes/payments/intent-discount-coupons.test.js +293 -0
- package/test/routes/payments/intent-one-time-metadata.test.js +122 -0
- package/test/routes/payments/intent-purchaser-guard.test.js +139 -0
- package/test/routes/payments/intent-zero-total.test.js +260 -0
- package/test/routes/payments/intent.test.js +413 -0
- package/test/routes/payments/plan.test.js +367 -0
- package/test/routes/payments/portal-return-url.test.js +107 -0
- package/test/routes/payments/portal.test.js +94 -0
- package/test/routes/payments/refund-one-time.test.js +254 -0
- package/test/routes/payments/refund-paypal-proration.test.js +190 -0
- package/test/routes/payments/refund.test.js +181 -0
- package/test/routes/payments/trial-eligibility.test.js +73 -0
- package/test/routes/payments/uncancel.test.js +270 -0
- package/test/routes/payments/webhook-stripe-invoice.test.js +129 -0
- package/test/routes/payments/webhook-stripe-refund-one-time.test.js +130 -0
- package/test/routes/payments/webhook-test-provider.test.js +156 -0
- package/test/routes/payments/webhook.test.js +115 -0
- package/test/routes/payments/winback-stripe-coupon.test.js +126 -0
- package/test/routes/payments/winback.test.js +597 -0
- package/test/routes/test/authenticate.test.js +79 -0
- package/test/routes/test/redirect.test.js +66 -0
- package/test/routes/test/reset-account.test.js +126 -0
- package/test/routes/test/roster.test.js +101 -0
- package/test/routes/test/schema.test.js +556 -0
- package/test/routes/test/usage.test.js +374 -0
- package/test/routes/user/api-keys.test.js +158 -0
- package/test/routes/user/connections-grant.test.js +759 -0
- package/test/routes/user/connections-identity.test.js +260 -0
- package/test/routes/user/connections-log-privacy.test.js +206 -0
- package/test/routes/user/connections-refresh-lease.test.js +696 -0
- package/test/routes/user/connections-return.test.js +261 -0
- package/test/routes/user/connections-uid.test.js +516 -0
- package/test/routes/user/delete.test.js +138 -0
- package/test/routes/user/feedback.test.js +106 -0
- package/test/routes/user/orders.test.js +233 -0
- package/test/routes/user/sessions.test.js +231 -0
- package/test/routes/user/settings-validate.test.js +84 -0
- package/test/routes/user/signup-emails.test.js +113 -0
- package/test/routes/user/signup-location.test.js +84 -0
- package/test/routes/user/signup-log-privacy.test.js +112 -0
- package/test/routes/user/signup.test.js +579 -0
- package/test/routes/user/subscription.test.js +101 -0
- package/test/routes/user/token.test.js +111 -0
- package/test/routes/user/user.test.js +158 -0
- package/test/routes/verts/cache.test.js +78 -0
- package/test/routes/verts/click-destination.test.js +76 -0
- package/test/routes/verts/crud.test.js +194 -0
- package/test/routes/verts/redirect.test.js +147 -0
- package/test/routes/verts/selection.test.js +237 -0
- package/test/routes/verts/serve.test.js +185 -0
- package/test/routes/verts/unit-document.test.js +117 -0
- package/test/rules/_environment.js +66 -0
- package/test/rules/brand-merge.test.js +195 -0
- package/test/rules/field-helpers.test.js +309 -0
- package/test/rules/notifications.test.js +577 -0
- package/test/rules/payments-carts.test.js +406 -0
- package/test/rules/sessions.test.js +170 -0
- package/test/rules/user.test.js +517 -0
- package/test/rules/verts.test.js +101 -0
- package/test/security/fetch-log-secrets.test.js +124 -0
- package/test/security/primitives.test.js +105 -0
- package/test/security/repo-pinning.test.js +77 -0
- package/test/stripe-live/subscription-lifecycle.test.js +141 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
const chalk = require('chalk').default;
|
|
2
|
+
const BaseCommand = require('./base-command');
|
|
3
|
+
const { collectBareRequires } = require('../../vendor/devkit/bare-requires.js');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* `omega migrate` on a backend target: the ported-project report
|
|
7
|
+
* ([#600](https://github.com/Omega-JS-Stack/omega/issues/600)).
|
|
8
|
+
*
|
|
9
|
+
* Today it carries ONE finding class, the dependency-resolution scan. Under the
|
|
10
|
+
* legacy FLAT BEM install every framework dependency sat in the consumer's own
|
|
11
|
+
* `node_modules`, so a ported route could `require('fs-jetpack')` and be right.
|
|
12
|
+
* Under OMEGA the framework is a package with its own tree and that require
|
|
13
|
+
* resolves only by HOISTING, which holds on one install and not on the next.
|
|
14
|
+
* The requires that carried it were LAZY, inside the handler, so the module
|
|
15
|
+
* loads fine and the route 500s the first time a request reaches it.
|
|
16
|
+
*
|
|
17
|
+
* REPORT ONLY. Which package version a brand wants is the brand's call, so the
|
|
18
|
+
* verb names the file, the line and the fix and stops. The scan is devkit's
|
|
19
|
+
* (`src/bare-requires.js`), the SAME one @omega.js/web's `omega migrate` runs,
|
|
20
|
+
* so the two frameworks cannot answer the question differently. A backend has
|
|
21
|
+
* no bundler and therefore no aliases to exclude: every bare specifier is a
|
|
22
|
+
* real dependency or a built-in.
|
|
23
|
+
*
|
|
24
|
+
* The one-time CONVERSIONS stay their own run-alone verbs (`migrate:rules`,
|
|
25
|
+
* `migrate:markers`): those change what the project enforces, and this one
|
|
26
|
+
* changes nothing.
|
|
27
|
+
*/
|
|
28
|
+
class MigrateCommand extends BaseCommand {
|
|
29
|
+
/**
|
|
30
|
+
* @returns {Promise<Array<{ file: string, line: number, module: string, fix: string }>>}
|
|
31
|
+
* The findings, so a caller can act on the same list the report printed.
|
|
32
|
+
*/
|
|
33
|
+
async execute() {
|
|
34
|
+
const projectDir = this.main.firebaseProjectPath;
|
|
35
|
+
|
|
36
|
+
this.ui.header('Backend migration report', { subtitle: projectDir, subtitleColor: chalk.dim });
|
|
37
|
+
|
|
38
|
+
const bareRequires = collectBareRequires(projectDir);
|
|
39
|
+
|
|
40
|
+
if (bareRequires.length === 0) {
|
|
41
|
+
this.ui.status('pass', 'Every package this target requires is declared in its package.json.');
|
|
42
|
+
|
|
43
|
+
return bareRequires;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
this.ui.status('warn', `${bareRequires.length} bare ${bareRequires.length === 1 ? 'require' : 'requires'} of ${chalk.bold('undeclared')} packages:`);
|
|
47
|
+
|
|
48
|
+
for (const entry of bareRequires) {
|
|
49
|
+
this.ui.status('warn', `${entry.file}:${entry.line} \`${entry.module}\`: ${entry.fix}`, { level: 2 });
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
this.ui.blank();
|
|
53
|
+
this.ui.status('running', `Nothing was installed: declare each one, then run ${chalk.bold('npx omega test')}.`);
|
|
54
|
+
|
|
55
|
+
return bareRequires;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
module.exports = MigrateCommand;
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
const BaseCommand = require('./base-command');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const chalk = require('chalk').default;
|
|
4
|
+
const powertools = require('node-powertools');
|
|
5
|
+
const WatchCommand = require('./watch');
|
|
6
|
+
const { createChildLog } = require('../utils/attach-log-file');
|
|
7
|
+
const { refuseWhenCustom } = require('../utils/project-type');
|
|
8
|
+
|
|
9
|
+
class ServeCommand extends BaseCommand {
|
|
10
|
+
async execute() {
|
|
11
|
+
const self = this.main;
|
|
12
|
+
const projectDir = self.firebaseProjectPath;
|
|
13
|
+
|
|
14
|
+
// Custom-server mode boots its own server, not the emulator suite (#584)
|
|
15
|
+
if (refuseWhenCustom(projectDir, 'serve')) return;
|
|
16
|
+
|
|
17
|
+
// The backend's dev loop → <targetRoot>/logs/dev.log (#197). A SUPERSET of the
|
|
18
|
+
// firebase CHILD's dist/dev.log wired further down: our own output (port
|
|
19
|
+
// allocation, proxy, watcher) PLUS every child chunk, because we mirror the
|
|
20
|
+
// child to our stdout and this tee catches it there. dist/dev.log is the
|
|
21
|
+
// child-only view — and the one that rolls on each reload.
|
|
22
|
+
this.attachVerbLog('dev');
|
|
23
|
+
const { isPortFree, resolvePorts, writePortsFile, clearPortsFile } = require('../../vendor/config/index.js');
|
|
24
|
+
const { loadEmulatorPorts } = require('./setup-tests/emulator-config.js');
|
|
25
|
+
|
|
26
|
+
// HTTPS: proxy on the public port (classic 5002), firebase serve on an
|
|
27
|
+
// internal port (classic 5443). Disable with --no-https.
|
|
28
|
+
const httpsEnabled = self.argv.https !== false;
|
|
29
|
+
|
|
30
|
+
// N7: allocate instead of killing the incumbent — a taken port bumps +1
|
|
31
|
+
// (a second brand's serve just lands next door). An explicit --port (or
|
|
32
|
+
// positional) PINS: busy = hard error, never a silent move.
|
|
33
|
+
const flagPort = parseInt(self.argv.port || self.argv?._?.[1], 10) || null;
|
|
34
|
+
const pins = {};
|
|
35
|
+
if (flagPort) {
|
|
36
|
+
if (!(await isPortFree(flagPort))) {
|
|
37
|
+
throw new Error(`Port ${flagPort} (pinned via --port) is already in use — free it or pick another`);
|
|
38
|
+
}
|
|
39
|
+
pins.public = flagPort;
|
|
40
|
+
}
|
|
41
|
+
const { ports: servePorts, bumped } = await resolvePorts({
|
|
42
|
+
wanted: {
|
|
43
|
+
public: flagPort || loadEmulatorPorts(projectDir).hosting || 5000,
|
|
44
|
+
internal: 5443,
|
|
45
|
+
},
|
|
46
|
+
pins,
|
|
47
|
+
});
|
|
48
|
+
const port = servePorts.public;
|
|
49
|
+
const internalPort = servePorts.internal;
|
|
50
|
+
if (bumped.length) {
|
|
51
|
+
this.log(chalk.yellow(` Ports bumped (classic taken): ${bumped.map((name) => `${name}→${servePorts[name]}`).join(', ')}\n`));
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Wipe stale firebase-tools debug logs + any leftover @omega.js/backend logs from older
|
|
55
|
+
// versions. Keeps the project tree clean across runs.
|
|
56
|
+
this.sweepStaleLogs();
|
|
57
|
+
|
|
58
|
+
// functions/ is staged output (src/dist pillar): stage fresh + re-stage on
|
|
59
|
+
// src edits — firebase serve watches the functions dir, so a re-stage IS
|
|
60
|
+
// the hot reload. Closed when the firebase child exits below.
|
|
61
|
+
// `development` is PINNED (#586), the same local lane as the emulator: the
|
|
62
|
+
// composed dist/.env follows the LANE, never the shell's environment.
|
|
63
|
+
this.ensureStaged({ environment: 'development' });
|
|
64
|
+
const stageWatch = this.startStageWatch({ environment: 'development' });
|
|
65
|
+
|
|
66
|
+
// Start @omega.js/backend watcher in background
|
|
67
|
+
const watcher = new WatchCommand(self);
|
|
68
|
+
watcher.startBackground();
|
|
69
|
+
|
|
70
|
+
// Start HTTPS proxy if enabled. If certs can't be obtained, fall back to
|
|
71
|
+
// plain HTTP — don't set OMEGA_HTTPS_PORT or redirect to the internal port.
|
|
72
|
+
const httpsReady = httpsEnabled
|
|
73
|
+
? await this._startHttpsProxy(port, internalPort, projectDir)
|
|
74
|
+
: false;
|
|
75
|
+
|
|
76
|
+
// Start Stripe webhook forwarding in background, aimed at the port that
|
|
77
|
+
// actually speaks plain http: the internal firebase-serve port under the
|
|
78
|
+
// https proxy, the public port otherwise. (Pre-N7 it re-derived hosting
|
|
79
|
+
// from firebase.json and pointed http at the TLS proxy — a dead target.)
|
|
80
|
+
this.startStripeWebhookForwarding(httpsReady ? internalPort : port);
|
|
81
|
+
|
|
82
|
+
// Publish the resolved map for siblings (N7): `omega dev` composes it
|
|
83
|
+
// into the page chrome, so @omega.js/client's getApiUrl follows even a
|
|
84
|
+
// bumped serve. `https` = the mkcert proxy, `hosting` = wherever hosting
|
|
85
|
+
// speaks plain http. Retracted when the firebase child exits.
|
|
86
|
+
writePortsFile(projectDir, httpsReady
|
|
87
|
+
? { https: port, hosting: internalPort }
|
|
88
|
+
: { hosting: port });
|
|
89
|
+
|
|
90
|
+
// The firebase child's own log, beside firebase-tools' *-debug.log files.
|
|
91
|
+
// The reset sentinel lets a sibling process ask this long-lived log for a
|
|
92
|
+
// fresh slate mid-run; the poll + roll live in the shared child-log sink.
|
|
93
|
+
const logPath = this.getLogsPath('dev.log');
|
|
94
|
+
const RELOAD_MARKER = /Using node@\d+ from host\./;
|
|
95
|
+
const childLog = createChildLog({
|
|
96
|
+
logPath,
|
|
97
|
+
resetPath: this.getTempPath('dev.log.reset'),
|
|
98
|
+
});
|
|
99
|
+
let reloadCount = 0;
|
|
100
|
+
|
|
101
|
+
this.log(chalk.gray(` Logs saving to: ${logPath}\n`));
|
|
102
|
+
|
|
103
|
+
// demo-* projects are emulator-only by convention: `firebase serve`'s
|
|
104
|
+
// hosting upstream fetches LIVE site config and 403s (there is no live
|
|
105
|
+
// project to reach — BEM 1.4b residue; the serve mechanics themselves
|
|
106
|
+
// are fine, cp90). Functions still serve, so warn-and-continue and point
|
|
107
|
+
// at the hosting EMULATOR for the full surface.
|
|
108
|
+
const { resolveProjectId } = require('./firebase-init');
|
|
109
|
+
const serveProjectId = resolveProjectId(projectDir);
|
|
110
|
+
if (String(serveProjectId || '').startsWith('demo-')) {
|
|
111
|
+
this.log(chalk.yellow(` ⚠ ${serveProjectId} is a demo-* (emulator-only) project — the hosting upstream will 403 here.`));
|
|
112
|
+
this.log(chalk.yellow(` Use ${chalk.cyan('omega emulator')} for demo-* hosting (its hosting emulator serves it fine).\n`));
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Execute with tee to log file
|
|
116
|
+
const firebasePort = httpsReady ? internalPort : port;
|
|
117
|
+
const firebaseEnv = {
|
|
118
|
+
...process.env,
|
|
119
|
+
FORCE_COLOR: '1',
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
if (httpsReady) {
|
|
123
|
+
// Internal calls (getApiUrl → BEMClient) loop through the HTTPS proxy
|
|
124
|
+
// under the local mkcert certificate: the child TRUSTS that root (#795)
|
|
125
|
+
// instead of switching verification off, so Node prints no warning. A
|
|
126
|
+
// shell-set value wins verbatim; a host whose mkcert root vanished under
|
|
127
|
+
// existing certs still takes the old bypass.
|
|
128
|
+
const { mkcertCaRootPem } = require('../../vendor/devkit/local-https.js');
|
|
129
|
+
const caPem = process.env.NODE_EXTRA_CA_CERTS || mkcertCaRootPem();
|
|
130
|
+
|
|
131
|
+
if (caPem) {
|
|
132
|
+
firebaseEnv.NODE_EXTRA_CA_CERTS = caPem;
|
|
133
|
+
} else {
|
|
134
|
+
firebaseEnv.NODE_TLS_REJECT_UNAUTHORIZED = '0';
|
|
135
|
+
this.log(chalk.yellow(' mkcert root CA not found — internal calls fall back to NODE_TLS_REJECT_UNAUTHORIZED=0 (Node will warn)'));
|
|
136
|
+
}
|
|
137
|
+
firebaseEnv.OMEGA_HTTPS_PORT = String(port);
|
|
138
|
+
}
|
|
139
|
+
// Where hosting speaks plain http (N7 env channel — functions inherit)
|
|
140
|
+
firebaseEnv.OMEGA_HOSTING_PORT = String(firebasePort);
|
|
141
|
+
|
|
142
|
+
try {
|
|
143
|
+
await powertools.execute(`firebase serve --port ${firebasePort}`, {
|
|
144
|
+
log: false,
|
|
145
|
+
cwd: projectDir,
|
|
146
|
+
config: {
|
|
147
|
+
stdio: ['inherit', 'pipe', 'pipe'],
|
|
148
|
+
env: firebaseEnv,
|
|
149
|
+
},
|
|
150
|
+
}, (child) => {
|
|
151
|
+
child.stdout.on('data', (data) => {
|
|
152
|
+
process.stdout.write(data);
|
|
153
|
+
const text = data.toString();
|
|
154
|
+
if (RELOAD_MARKER.test(text)) {
|
|
155
|
+
reloadCount++;
|
|
156
|
+
if (reloadCount > 1) {
|
|
157
|
+
childLog.roll();
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
childLog.write(data);
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
child.stderr.on('data', (data) => {
|
|
164
|
+
process.stderr.write(data);
|
|
165
|
+
childLog.write(data);
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
child.on('close', () => {
|
|
169
|
+
childLog.close();
|
|
170
|
+
stageWatch.close();
|
|
171
|
+
// Retract the published port map (clean shutdown)
|
|
172
|
+
clearPortsFile(projectDir);
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
} catch (error) {
|
|
176
|
+
this.log(chalk.gray('\n Server stopped.\n'));
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// The mechanism lives in @omega.js/devkit/local-https (shared with
|
|
181
|
+
// `omega emulator` and web's `omega dev`): mkcert certs in .temp/certs
|
|
182
|
+
// (staleness-checked), TLS proxy on the public port → plain-http target.
|
|
183
|
+
async _startHttpsProxy(httpsPort, httpPort, projectDir) {
|
|
184
|
+
const { ensureLocalHttpsCerts, startLocalHttpsProxy, mkcertInstallHint } = require('../../vendor/devkit/local-https.js');
|
|
185
|
+
|
|
186
|
+
const certs = await ensureLocalHttpsCerts({
|
|
187
|
+
certsDir: path.join(this.getTempPath(), 'certs'),
|
|
188
|
+
log: (line) => this.log(chalk.gray(` ${line}`)),
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
if (!certs) {
|
|
192
|
+
this.log(chalk.yellow(' HTTPS disabled — could not obtain certificates.'));
|
|
193
|
+
this.log(chalk.yellow(` Install mkcert for trusted local HTTPS: ${mkcertInstallHint()}\n`));
|
|
194
|
+
return false;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
startLocalHttpsProxy({
|
|
198
|
+
port: httpsPort,
|
|
199
|
+
targetPort: httpPort,
|
|
200
|
+
certs,
|
|
201
|
+
log: (line) => this.log(chalk.green(` ${line}`)),
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
return true;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
module.exports = ServeCommand;
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base class for all setup tests
|
|
3
|
+
* Each test should extend this class and implement the `run()` method
|
|
4
|
+
*/
|
|
5
|
+
class BaseTest {
|
|
6
|
+
constructor(context) {
|
|
7
|
+
this.context = context;
|
|
8
|
+
this.self = context.main;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* demo-* project ids are EMULATOR-ONLY by convention — checks that touch
|
|
13
|
+
* live Firebase gate on this (there is no live project to reach).
|
|
14
|
+
* @returns {boolean}
|
|
15
|
+
*/
|
|
16
|
+
get isDemoProject() {
|
|
17
|
+
return String(this.self.projectId || '').startsWith('demo-');
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* `cloud.shared: true` — one Firebase project carrying every tenant brand's
|
|
22
|
+
* state. Checks that PULL live state down into this brand's repo gate on this
|
|
23
|
+
* for the same reason the demo one above exists: what is up there is not one
|
|
24
|
+
* brand's to track, and merging it in ships another tenant's definitions
|
|
25
|
+
* ([#716](https://github.com/Omega-JS-Stack/omega/issues/716)).
|
|
26
|
+
* @returns {boolean}
|
|
27
|
+
*/
|
|
28
|
+
get isSharedProject() {
|
|
29
|
+
const { loadConfig } = require('../../../vendor/config/index.js');
|
|
30
|
+
|
|
31
|
+
try {
|
|
32
|
+
return loadConfig(this.self.firebaseProjectPath, 'backend').config.cloud?.shared === true;
|
|
33
|
+
} catch (e) {
|
|
34
|
+
// No config, or an unloadable one — the omega-config check reports that.
|
|
35
|
+
// An unreadable config is not a shared project.
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* `--offline` mode: the run may still READ live cloud state, but nothing may
|
|
42
|
+
* MUTATE it. A check whose fix (or whose check itself) deploys/writes to the
|
|
43
|
+
* brand's live project downgrades to a reported 'warn' instead of spawning
|
|
44
|
+
* `firebase`/`gsutil` — scaffolding a fresh app must never rewrite production
|
|
45
|
+
* infrastructure as a side effect ([#284](https://github.com/Omega-JS-Stack/omega/issues/284)).
|
|
46
|
+
* @returns {boolean}
|
|
47
|
+
*/
|
|
48
|
+
get isOffline() {
|
|
49
|
+
return !!(this.self.argv || {}).offline;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Re-stage functions/ from the authored tree. Fixes that write STAGED
|
|
54
|
+
* INPUTS (the target manifest, .env, .nvmrc, service-account.json, config)
|
|
55
|
+
* call this so the already-staged tree reflects the fix within the same
|
|
56
|
+
* setup run — idempotent and cheap (src/dist pillar).
|
|
57
|
+
*/
|
|
58
|
+
restage() {
|
|
59
|
+
const { stageFunctions } = require('../../utils/stage-functions');
|
|
60
|
+
stageFunctions({ projectDir: this.self.firebaseProjectPath });
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Reload the TARGET MANIFEST from disk into the SHARED in-memory object
|
|
65
|
+
* (self.package === context.package — one object, every check reads it).
|
|
66
|
+
* npm-driven fixes rewrite the file mid-run, so any fix that WRITES the
|
|
67
|
+
* manifest must start from disk truth: writing the stale snapshot erases
|
|
68
|
+
* the deps npm just added (cp195 journey catch — the project-scripts fix
|
|
69
|
+
* clobbered the firebase-admin/functions installs, and the next setup's
|
|
70
|
+
* re-install raced the monorepo watch and killed the boot).
|
|
71
|
+
*
|
|
72
|
+
* @returns {Object} The live manifest object (same identity as self.package)
|
|
73
|
+
*/
|
|
74
|
+
readTargetManifest() {
|
|
75
|
+
const jetpack = require('fs-jetpack');
|
|
76
|
+
const fresh = jetpack.read(`${this.self.firebaseProjectPath}/package.json`, 'json') || {};
|
|
77
|
+
const target = this.self.package;
|
|
78
|
+
for (const key of Object.keys(target)) {
|
|
79
|
+
delete target[key];
|
|
80
|
+
}
|
|
81
|
+
Object.assign(target, fresh);
|
|
82
|
+
return target;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Persist the target manifest (call after readTargetManifest() + mutation).
|
|
87
|
+
* npm's own shape, trailing newline included — the SAME byte contract
|
|
88
|
+
* ensure-target's scaffoldPackageJson and the sibling writers keep
|
|
89
|
+
* ([#590](https://github.com/Omega-JS-Stack/omega/issues/590)). A fix that
|
|
90
|
+
* dropped it flipped the consumer's manifest between two byte shapes
|
|
91
|
+
* depending on which writer ran last (jetpack.write emits none).
|
|
92
|
+
*/
|
|
93
|
+
writeTargetManifest() {
|
|
94
|
+
const jetpack = require('fs-jetpack');
|
|
95
|
+
jetpack.write(`${this.self.firebaseProjectPath}/package.json`, `${JSON.stringify(this.self.package, null, 2)}\n`);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* The npm install command a dependency fix runs, at the TARGET ROOT (runtime
|
|
100
|
+
* deps live on the target manifest — src/dist pillar). `--ignore-scripts` is
|
|
101
|
+
* load-bearing: in a file:-linked brand, a bare install re-runs the LINKED
|
|
102
|
+
* framework's prepare inside the monorepo — re-staging framework dist
|
|
103
|
+
* mid-run and racing the watch/running stacks (cp195 journey catch: the
|
|
104
|
+
* race rmdir-killed @omega.js/backend's own dist). The packages these
|
|
105
|
+
* fixes install are pre-built registry tarballs; no scripts are needed.
|
|
106
|
+
*
|
|
107
|
+
* @param {string} name - Package name
|
|
108
|
+
* @param {string} [version] - Version suffix ('@^1.2.3'); '@latest' when omitted
|
|
109
|
+
* @param {string} [type] - 'dev'/'--save-dev' for devDependencies
|
|
110
|
+
* @returns {string} The full npm command
|
|
111
|
+
*/
|
|
112
|
+
buildInstallCommand(name, version, type) {
|
|
113
|
+
let v;
|
|
114
|
+
if (name.indexOf('file:') > -1) {
|
|
115
|
+
v = '';
|
|
116
|
+
} else if (!version) {
|
|
117
|
+
v = '@latest';
|
|
118
|
+
} else {
|
|
119
|
+
v = version;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const t = (type === 'dev' || type === '--save-dev') ? ' --save-dev' : '';
|
|
123
|
+
|
|
124
|
+
return `npm i ${name}${v}${t} --ignore-scripts`;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Install a package at the target root (via safeInstall/Socket Firewall) and
|
|
129
|
+
* resync the shared in-memory manifest with what npm wrote.
|
|
130
|
+
*/
|
|
131
|
+
async installPkg(name, version, type) {
|
|
132
|
+
const { safeInstall } = require('../../utils/safe-install');
|
|
133
|
+
const command = this.buildInstallCommand(name, version, type);
|
|
134
|
+
|
|
135
|
+
console.log('Running ', command);
|
|
136
|
+
await safeInstall(command, { log: true, config: { cwd: this.self.firebaseProjectPath } });
|
|
137
|
+
|
|
138
|
+
this.readTargetManifest();
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Override this method in each test
|
|
143
|
+
* @returns {Promise<boolean>} True if test passes, false if it fails
|
|
144
|
+
*/
|
|
145
|
+
async run() {
|
|
146
|
+
throw new Error('Test must implement run() method');
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Override this method to provide a fix for failed tests
|
|
151
|
+
* @returns {Promise<void>}
|
|
152
|
+
*/
|
|
153
|
+
async fix() {
|
|
154
|
+
throw new Error('No automatic fix available for this test');
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Override to provide warning details when run() returns 'warn'.
|
|
159
|
+
* @returns {string[]}
|
|
160
|
+
*/
|
|
161
|
+
getWarning() {
|
|
162
|
+
return [];
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Get the test name (used for logging)
|
|
167
|
+
* @returns {string}
|
|
168
|
+
*/
|
|
169
|
+
getName() {
|
|
170
|
+
return this.constructor.name.replace(/Test$/, '').replace(/([A-Z])/g, ' $1').trim().toLowerCase();
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
module.exports = BaseTest;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
const BaseTest = require('./base-test');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const jetpack = require('fs-jetpack');
|
|
4
|
+
const JSON5 = require('json5');
|
|
5
|
+
const _ = require('lodash');
|
|
6
|
+
|
|
7
|
+
// Default emulator ports - SSOT for fallback values
|
|
8
|
+
const DEFAULT_EMULATOR_PORTS = {
|
|
9
|
+
auth: 9099,
|
|
10
|
+
functions: 5001,
|
|
11
|
+
firestore: 8080,
|
|
12
|
+
database: 9000,
|
|
13
|
+
hosting: 5002,
|
|
14
|
+
storage: 9199,
|
|
15
|
+
pubsub: 8085,
|
|
16
|
+
ui: 4050,
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Load a project's emulator ports from firebase.json, falling back to the
|
|
21
|
+
* classic defaults. ONE home (N7) — emulator.js, test.js, and
|
|
22
|
+
* firebase-init.js import this instead of carrying their own copies.
|
|
23
|
+
* @param {string} projectDir - Firebase project directory.
|
|
24
|
+
* @returns {object} Name → port map.
|
|
25
|
+
*/
|
|
26
|
+
function loadEmulatorPorts(projectDir) {
|
|
27
|
+
const emulatorPorts = { ...DEFAULT_EMULATOR_PORTS };
|
|
28
|
+
const firebaseJsonPath = path.join(projectDir, 'firebase.json');
|
|
29
|
+
|
|
30
|
+
if (jetpack.exists(firebaseJsonPath)) {
|
|
31
|
+
try {
|
|
32
|
+
const firebaseConfig = JSON5.parse(jetpack.read(firebaseJsonPath));
|
|
33
|
+
if (firebaseConfig.emulators) {
|
|
34
|
+
for (const name of Object.keys(DEFAULT_EMULATOR_PORTS)) {
|
|
35
|
+
emulatorPorts[name] = firebaseConfig.emulators[name]?.port || DEFAULT_EMULATOR_PORTS[name];
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
} catch (error) {
|
|
39
|
+
console.warn(`Warning: Could not parse firebase.json: ${error.message}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return emulatorPorts;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const REQUIRED_EMULATORS = {
|
|
47
|
+
auth: { port: DEFAULT_EMULATOR_PORTS.auth },
|
|
48
|
+
functions: { port: DEFAULT_EMULATOR_PORTS.functions },
|
|
49
|
+
firestore: { port: DEFAULT_EMULATOR_PORTS.firestore },
|
|
50
|
+
database: { port: DEFAULT_EMULATOR_PORTS.database },
|
|
51
|
+
hosting: { port: DEFAULT_EMULATOR_PORTS.hosting },
|
|
52
|
+
storage: { port: DEFAULT_EMULATOR_PORTS.storage },
|
|
53
|
+
pubsub: { port: DEFAULT_EMULATOR_PORTS.pubsub },
|
|
54
|
+
ui: { enabled: true, port: DEFAULT_EMULATOR_PORTS.ui },
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
class EmulatorConfigTest extends BaseTest {
|
|
58
|
+
getName() {
|
|
59
|
+
return 'emulator config in firebase.json';
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
async run() {
|
|
63
|
+
const emulators = this.self.firebaseJSON?.emulators;
|
|
64
|
+
|
|
65
|
+
if (!emulators) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Check each required emulator
|
|
70
|
+
for (const [name, config] of Object.entries(REQUIRED_EMULATORS)) {
|
|
71
|
+
if (!emulators[name]) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Check all required properties
|
|
76
|
+
for (const [key, value] of Object.entries(config)) {
|
|
77
|
+
if (emulators[name][key] !== value) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Check singleProjectMode
|
|
84
|
+
if (emulators.singleProjectMode !== true) {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
async fix() {
|
|
92
|
+
// Set each emulator config
|
|
93
|
+
for (const [name, config] of Object.entries(REQUIRED_EMULATORS)) {
|
|
94
|
+
for (const [key, value] of Object.entries(config)) {
|
|
95
|
+
_.set(this.self.firebaseJSON, `emulators.${name}.${key}`, value);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Set singleProjectMode
|
|
100
|
+
_.set(this.self.firebaseJSON, 'emulators.singleProjectMode', true);
|
|
101
|
+
|
|
102
|
+
// Write updated config
|
|
103
|
+
jetpack.write(`${this.self.firebaseProjectPath}/firebase.json`, JSON.stringify(this.self.firebaseJSON, null, 2));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
module.exports = EmulatorConfigTest;
|
|
108
|
+
module.exports.DEFAULT_EMULATOR_PORTS = DEFAULT_EMULATOR_PORTS;
|
|
109
|
+
module.exports.loadEmulatorPorts = loadEmulatorPorts;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const BaseTest = require('./base-test');
|
|
2
|
+
const jetpack = require('fs-jetpack');
|
|
3
|
+
|
|
4
|
+
class EnvRuntimeConfigDeprecatedTest extends BaseTest {
|
|
5
|
+
getName() {
|
|
6
|
+
return 'does not use deprecated RUNTIME_CONFIG';
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
async run() {
|
|
10
|
+
// The authored .env (target root) — OPTIONAL and human-written since #678:
|
|
11
|
+
// it is the per-key override over the brand root's, and no machine writes it
|
|
12
|
+
const envPath = `${this.self.firebaseProjectPath}/.env`;
|
|
13
|
+
const existingContent = jetpack.read(envPath);
|
|
14
|
+
|
|
15
|
+
// If no .env file, pass (other test will handle that)
|
|
16
|
+
if (!existingContent) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// Check if RUNTIME_CONFIG exists in the file
|
|
21
|
+
const hasRuntimeConfig = existingContent.split('\n').some(line => {
|
|
22
|
+
const trimmed = line.trim();
|
|
23
|
+
// Skip comments
|
|
24
|
+
if (trimmed.startsWith('#')) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
// Check for RUNTIME_CONFIG= at start of line
|
|
28
|
+
return trimmed.startsWith('RUNTIME_CONFIG=');
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
// Return true (pass) if RUNTIME_CONFIG is NOT found
|
|
32
|
+
return !hasRuntimeConfig;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
async fix() {
|
|
36
|
+
throw new Error(
|
|
37
|
+
'RUNTIME_CONFIG is deprecated and must be manually migrated.\n' +
|
|
38
|
+
' The new format uses individual environment variables:\n' +
|
|
39
|
+
' OMEGA_ADMIN_KEY=\n' +
|
|
40
|
+
' OMEGA_NAMESPACE=\n' +
|
|
41
|
+
' GH_TOKEN=\n' +
|
|
42
|
+
' Please update your .env file manually and remove RUNTIME_CONFIG.'
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
module.exports = EnvRuntimeConfigDeprecatedTest;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
const BaseTest = require('./base-test');
|
|
2
|
+
const chalk = require('chalk').default;
|
|
3
|
+
const wonderfulVersion = require('wonderful-version');
|
|
4
|
+
const powertools = require('node-powertools');
|
|
5
|
+
const helpers = require('./helpers');
|
|
6
|
+
|
|
7
|
+
class FirebaseAdminTest extends BaseTest {
|
|
8
|
+
getName() {
|
|
9
|
+
return 'using updated firebase-admin';
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
async run() {
|
|
13
|
+
const pkg = 'firebase-admin';
|
|
14
|
+
const latest = this.context.packageJSON.peerDependencies['firebase-admin'];
|
|
15
|
+
const mine = this.context.package.dependencies[pkg];
|
|
16
|
+
const bemv = this.context.packageJSON.peerDependencies[pkg];
|
|
17
|
+
|
|
18
|
+
// Not in package.json at all — must install
|
|
19
|
+
if (!mine) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Get level difference
|
|
24
|
+
const levelDifference = wonderfulVersion.levelDifference(latest, mine);
|
|
25
|
+
|
|
26
|
+
// Log
|
|
27
|
+
this.bemPackageVersionWarning(pkg, bemv, latest);
|
|
28
|
+
|
|
29
|
+
// Log if major version mismatch
|
|
30
|
+
if (levelDifference === 'major') {
|
|
31
|
+
console.log(chalk.red(`Version ${chalk.bold(latest)} of ${chalk.bold(pkg)} available but you must install this manually because it is a major update.`));
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Ensure the version is up to date
|
|
35
|
+
return wonderfulVersion.is(mine, '>=', latest) || levelDifference === 'major';
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
async fix() {
|
|
39
|
+
await this.installPkg('firebase-admin', `@${this.context.packageJSON.peerDependencies['firebase-admin']}`);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
bemPackageVersionWarning(packageName, current, latest) {
|
|
43
|
+
if (wonderfulVersion.greaterThan(latest, current)) {
|
|
44
|
+
console.log(chalk.yellow(`${packageName} needs to be updated in @omega.js/backend: ${current} => ${latest}`));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
module.exports = FirebaseAdminTest;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
const BaseTest = require('./base-test');
|
|
2
|
+
const powertools = require('node-powertools');
|
|
3
|
+
|
|
4
|
+
class FirebaseAuthTest extends BaseTest {
|
|
5
|
+
getName() {
|
|
6
|
+
return 'firebase CLI is authenticated';
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
getWarning() {
|
|
10
|
+
return [
|
|
11
|
+
'You are not logged in to Firebase.',
|
|
12
|
+
'Run: firebase login',
|
|
13
|
+
];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
async run() {
|
|
17
|
+
try {
|
|
18
|
+
await powertools.execute('firebase projects:list', { log: false });
|
|
19
|
+
return true;
|
|
20
|
+
} catch (error) {
|
|
21
|
+
return 'warn';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
module.exports = FirebaseAuthTest;
|