@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,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* target-checks — the AUDIT half of the retired `omega setup`
|
|
3
|
+
* ([#675](https://github.com/Omega-JS-Stack/omega/issues/675)).
|
|
4
|
+
*
|
|
5
|
+
* The setup command had two halves: write the local files if missing (now
|
|
6
|
+
* `ensureTarget()`, which every verb runs through `ensureStaged`) and CHECK
|
|
7
|
+
* the target, healing what it can. The checks are a test lane, so they ride
|
|
8
|
+
* `omega test`: the registry under cli/commands/setup-tests runs before the
|
|
9
|
+
* emulator suite, and a check nothing can fix halts the run.
|
|
10
|
+
*
|
|
11
|
+
* The registry reads its state off the `main` object (`self.package`,
|
|
12
|
+
* `self.gitignore`, `self.omegaConfigJSON`, `self.projectId`, the generated
|
|
13
|
+
* rules on `self.default`), so `loadFiles` + `getRulesFile` below are the
|
|
14
|
+
* preamble every run needs — the same one `runSetup()` did before the split.
|
|
15
|
+
*/
|
|
16
|
+
const path = require('path');
|
|
17
|
+
const chalk = require('chalk').default;
|
|
18
|
+
const jetpack = require('fs-jetpack');
|
|
19
|
+
const JSON5 = require('json5');
|
|
20
|
+
const omegaConfig = require('../../vendor/config/index.js');
|
|
21
|
+
|
|
22
|
+
const ui = require('./ui');
|
|
23
|
+
|
|
24
|
+
// Rules-marker regex shared with the rules checks (used by getRulesFile)
|
|
25
|
+
const { omegaAllRulesRegex } = require('../commands/setup-tests/helpers.js');
|
|
26
|
+
|
|
27
|
+
// The rules SCHEMA version — the stamp in `database.rules.json`'s open marker
|
|
28
|
+
// and in the compiled firestore artifact's header. Owned by the rules compiler
|
|
29
|
+
// (src/cli/utils/compile-rules.js) and re-exported here, the address every
|
|
30
|
+
// caller already knows.
|
|
31
|
+
const { RULES_VERSION } = require('./compile-rules');
|
|
32
|
+
|
|
33
|
+
/** Read a JSON5 file, `{}` when it is missing or empty. */
|
|
34
|
+
function loadJSON(filePath) {
|
|
35
|
+
const contents = jetpack.read(filePath);
|
|
36
|
+
return contents ? JSON5.parse(contents) : {};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function hasContent(object) {
|
|
40
|
+
return Object.keys(object).length > 0;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Load the target files every check reads onto `main`.
|
|
45
|
+
*
|
|
46
|
+
* @param {object} main - The CLI's Main instance (firebaseProjectPath).
|
|
47
|
+
* @returns {object} The same main, for chaining.
|
|
48
|
+
*/
|
|
49
|
+
function loadFiles(main) {
|
|
50
|
+
// THE target manifest (target root — scripts + runtime deps; the staged
|
|
51
|
+
// dist/package.json derives from it at stage time)
|
|
52
|
+
main.package = loadJSON(`${main.firebaseProjectPath}/package.json`);
|
|
53
|
+
main.firebaseJSON = loadJSON(`${main.firebaseProjectPath}/firebase.json`);
|
|
54
|
+
main.firebaseRC = loadJSON(`${main.firebaseProjectPath}/.firebaserc`);
|
|
55
|
+
// Target root — where setup-tests/remoteconfig-template-file.js writes it.
|
|
56
|
+
// The old `functions/` spelling is the pre-src/dist layout and always
|
|
57
|
+
// read {}.
|
|
58
|
+
main.remoteconfigJSON = loadJSON(`${main.firebaseProjectPath}/remoteconfig.template.json`);
|
|
59
|
+
main.projectPackage = main.package;
|
|
60
|
+
// Resolved through @omega.js/config (local ← brand root, no framework-defaults
|
|
61
|
+
// layer). Throws on secrets/parse errors (the checks ARE the audit — hard
|
|
62
|
+
// failures are correct here). The omega-config check validates the resolved
|
|
63
|
+
// config against the shared schema (friction #5). A brand target carries no
|
|
64
|
+
// file of its own — the brand root's config resolves alone.
|
|
65
|
+
main.omegaConfigJSON = (omegaConfig.hasOmegaConfig(main.firebaseProjectPath)
|
|
66
|
+
|| omegaConfig.findBrandRoot(main.firebaseProjectPath))
|
|
67
|
+
? omegaConfig.loadConfig(main.firebaseProjectPath, 'backend').config
|
|
68
|
+
: {};
|
|
69
|
+
main.gitignore = jetpack.read(`${main.firebaseProjectPath}/.gitignore`) || '';
|
|
70
|
+
|
|
71
|
+
return main;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Generate the realtime-database rules the rules checks compare against, onto
|
|
76
|
+
* `main.default`. firestore.rules is COMPILED (#255), not marker-managed: the
|
|
77
|
+
* brand's file is pure source and the framework half ships in templates/, so
|
|
78
|
+
* nothing here generates it. database.rules.json keeps the marker model.
|
|
79
|
+
*
|
|
80
|
+
* @param {object} main - The CLI's Main instance.
|
|
81
|
+
* @returns {object} `main.default`, carrying the generated rules.
|
|
82
|
+
*/
|
|
83
|
+
function getRulesFile(main) {
|
|
84
|
+
main.default.databaseRulesWhole = jetpack
|
|
85
|
+
.read(path.resolve(`${__dirname}/../../../templates/database.rules.json`))
|
|
86
|
+
.replace('(v0.0.0)', `(v${RULES_VERSION})`);
|
|
87
|
+
main.default.databaseRulesCore = main.default.databaseRulesWhole.match(omegaAllRulesRegex)[0];
|
|
88
|
+
|
|
89
|
+
return main.default;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Run the check registry against the target, healing what it can.
|
|
94
|
+
*
|
|
95
|
+
* Every check reports through `main.test()` — pass, warn, or fix-then-pass —
|
|
96
|
+
* and an unfixable one calls `main.haltSetup()`, which prints the summary and
|
|
97
|
+
* exits 1. Loud by design: a target that cannot be made whole must not go on
|
|
98
|
+
* to boot an emulator against it.
|
|
99
|
+
*
|
|
100
|
+
* @param {object} main - The CLI's Main instance.
|
|
101
|
+
* @returns {Promise<{ passed: boolean, total: number }>}
|
|
102
|
+
*/
|
|
103
|
+
async function runTargetChecks(main) {
|
|
104
|
+
const testRegistry = require('../commands/setup-tests');
|
|
105
|
+
const helpers = require('../commands/setup-tests/helpers');
|
|
106
|
+
|
|
107
|
+
// Fresh state for this run (the check runner records into the summary and
|
|
108
|
+
// prints it on a hard failure; we print it here on success).
|
|
109
|
+
main.testCount = 0;
|
|
110
|
+
main.testTotal = 0;
|
|
111
|
+
main.warnCount = 0;
|
|
112
|
+
main.setupSummary = new ui.Summary().start();
|
|
113
|
+
|
|
114
|
+
loadFiles(main);
|
|
115
|
+
|
|
116
|
+
if (!hasContent(main.package)) {
|
|
117
|
+
ui.status('fail', `Missing ${chalk.bold('package.json')} at the target root`);
|
|
118
|
+
ui.note(`Run an OMEGA verb from a backend target root (a package.json with the ${chalk.bold('@omega.js/backend')} dependency).`);
|
|
119
|
+
process.exit(1);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
getRulesFile(main);
|
|
123
|
+
// The rules SCHEMA version rides in the block's open marker:
|
|
124
|
+
// `// ========== OMEGA Rules (v2.0.0) ==========`
|
|
125
|
+
main.default.rulesVersionRegex = new RegExp(`========== OMEGA Rules \\(v${RULES_VERSION.replace(/\./g, '\\.')}\\) ==========`);
|
|
126
|
+
|
|
127
|
+
// Resolve project info — the checks read projectId (demo-* gating, live
|
|
128
|
+
// index sync, campaign seeding). ensureTarget() guarantees .firebaserc.
|
|
129
|
+
main.projectId = main.firebaseRC.projects?.default;
|
|
130
|
+
main.projectUrl = `https://console.firebase.google.com/project/${main.projectId}`;
|
|
131
|
+
main.apiUrl = `https://api.${(main.omegaConfigJSON.brand?.url || '').replace(/^https?:\/\//, '')}`;
|
|
132
|
+
|
|
133
|
+
const tests = testRegistry.getTests({
|
|
134
|
+
main,
|
|
135
|
+
package: main.package,
|
|
136
|
+
packageJSON: main.packageJSON,
|
|
137
|
+
gitignore: main.gitignore,
|
|
138
|
+
hasContent: helpers.hasContent,
|
|
139
|
+
isLocal: helpers.isLocal,
|
|
140
|
+
loadJSON: helpers.loadJSON,
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
// Expose the total count so the per-check `[N]` prefix can right-align its
|
|
144
|
+
// width (single- vs double-digit indices stay aligned).
|
|
145
|
+
main.testTotalExpected = tests.length;
|
|
146
|
+
|
|
147
|
+
for (const test of tests) {
|
|
148
|
+
await main.test(
|
|
149
|
+
test.getName(),
|
|
150
|
+
async () => test.run(),
|
|
151
|
+
async () => test.fix(),
|
|
152
|
+
{ details: () => test.getWarning() },
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
main.setupSummary.print();
|
|
157
|
+
|
|
158
|
+
return { passed: main.testCount + main.warnCount === main.testTotal, total: main.testTotal };
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
module.exports = { runTargetChecks, loadFiles, getRulesFile, RULES_VERSION };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which stack a CLI subcommand talks to — the ONE home of that rule.
|
|
3
|
+
*
|
|
4
|
+
* Ruling (#51, uniformity amendment Ian 2026-07-30): EVERY subcommand targets
|
|
5
|
+
* the emulator by default — reads and writes alike, one rule for the whole
|
|
6
|
+
* surface — and reaches live only with an explicit `--production`. A habitual
|
|
7
|
+
* `--emulator` is accepted (it names the default) but consults nothing.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Resolve the stack a subcommand should run against.
|
|
12
|
+
*
|
|
13
|
+
* @param {object} argv - Parsed CLI flags (`production`)
|
|
14
|
+
* @returns {{ emulator: boolean, label: string }} label is 'emulator' or 'production'
|
|
15
|
+
*/
|
|
16
|
+
function resolveTarget(argv) {
|
|
17
|
+
argv = argv || {};
|
|
18
|
+
|
|
19
|
+
const emulator = !argv.production;
|
|
20
|
+
|
|
21
|
+
return { emulator, label: emulator ? 'emulator' : 'production' };
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
module.exports = { resolveTarget };
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
const chalk = require('chalk').default;
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Shared CLI styling helpers — the SSOT for @omega.js/backend's console output look.
|
|
5
|
+
*
|
|
6
|
+
* Mirrors the OMEGA Manager (omega-manager) styling conventions so every @omega.js/backend
|
|
7
|
+
* command renders with the same dividers, indentation, timestamps, colors, and
|
|
8
|
+
* status symbols. Pull these helpers into any command (setup/serve/deploy/test/
|
|
9
|
+
* emulator/...) instead of hand-rolling chalk + console.log.
|
|
10
|
+
*
|
|
11
|
+
* Conventions (matching OMEGA):
|
|
12
|
+
* - 70-char `━` horizontal rules wrap section titles.
|
|
13
|
+
* - Indentation is 2 spaces per level (level 1 = 2 spaces, level 2 = 4, ...).
|
|
14
|
+
* - Dimmed labels (`ID:`, `URL:`, `Local:`) with normal-weight values.
|
|
15
|
+
* - Status symbols: → (running) ✓ (pass) ✗ (fail) ⊘ (skip) ⚠ (warn) ✅ (done).
|
|
16
|
+
* - Timestamps via `new Date().toLocaleTimeString()` (e.g. "7:47:12 PM").
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
// Divider width + character (OMEGA uses 70 × `━`).
|
|
20
|
+
const RULE_WIDTH = 70;
|
|
21
|
+
const RULE_CHAR = '━';
|
|
22
|
+
|
|
23
|
+
// Status symbols — the single source of truth for @omega.js/backend's CLI iconography.
|
|
24
|
+
const SYMBOLS = {
|
|
25
|
+
running: '→',
|
|
26
|
+
pass: '✓',
|
|
27
|
+
fail: '✗',
|
|
28
|
+
skip: '⊘',
|
|
29
|
+
warn: '⚠',
|
|
30
|
+
done: '✅',
|
|
31
|
+
rocket: '🚀',
|
|
32
|
+
add: '+',
|
|
33
|
+
change: '↻',
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
/** Two-space-per-level indentation. */
|
|
37
|
+
function indent(level = 1) {
|
|
38
|
+
return ' '.repeat(level);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** Locale time string, e.g. "7:47:12 PM". */
|
|
42
|
+
function timestamp() {
|
|
43
|
+
return new Date().toLocaleTimeString();
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** A full-width horizontal rule in the given chalk color (default cyan). */
|
|
47
|
+
function rule(color = chalk.cyan) {
|
|
48
|
+
return color(RULE_CHAR.repeat(RULE_WIDTH));
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** Print a blank line. */
|
|
52
|
+
function blank() {
|
|
53
|
+
console.log('');
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Print the top-level program banner, e.g. `🚀 OMEGA Backend`.
|
|
58
|
+
* @param {string} title
|
|
59
|
+
*/
|
|
60
|
+
function banner(title) {
|
|
61
|
+
blank();
|
|
62
|
+
console.log(chalk.bold.cyan(`${SYMBOLS.rocket} ${title}`));
|
|
63
|
+
blank();
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Print a divider-wrapped section header with an optional subtitle + timestamp.
|
|
68
|
+
*
|
|
69
|
+
* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
70
|
+
* Title subtitle @ 7:47:12 PM
|
|
71
|
+
* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
72
|
+
*
|
|
73
|
+
* @param {string} title - Bold white title.
|
|
74
|
+
* @param {object} [opts]
|
|
75
|
+
* @param {string} [opts.subtitle] - Dimmed/colored text after the title (e.g. a URL).
|
|
76
|
+
* @param {Function} [opts.subtitleColor] - chalk fn for the subtitle (default cyan).
|
|
77
|
+
* @param {boolean} [opts.time=true] - Append `@ <time>`.
|
|
78
|
+
* @param {Function} [opts.color] - chalk fn for the rules (default cyan).
|
|
79
|
+
*/
|
|
80
|
+
function header(title, opts = {}) {
|
|
81
|
+
const color = opts.color || chalk.cyan;
|
|
82
|
+
const subtitleColor = opts.subtitleColor || chalk.cyan;
|
|
83
|
+
const time = opts.time !== false;
|
|
84
|
+
|
|
85
|
+
const parts = [chalk.bold.white(title)];
|
|
86
|
+
if (opts.subtitle) {
|
|
87
|
+
parts.push(subtitleColor(opts.subtitle));
|
|
88
|
+
}
|
|
89
|
+
if (time) {
|
|
90
|
+
parts.push(chalk.dim(`@ ${timestamp()}`));
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
console.log(rule(color));
|
|
94
|
+
console.log(`${indent(1)}${parts.join(' ')}`);
|
|
95
|
+
console.log(rule(color));
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Print a magenta section label like `[SETUP]`.
|
|
100
|
+
* @param {string} label
|
|
101
|
+
*/
|
|
102
|
+
function section(label) {
|
|
103
|
+
blank();
|
|
104
|
+
console.log(`${indent(1)}${chalk.bold.magenta(`[${String(label).toUpperCase()}]`)}`);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Print a dimmed `Label: value` line at a given indent level.
|
|
109
|
+
* @param {string} label
|
|
110
|
+
* @param {string} value
|
|
111
|
+
* @param {object} [opts]
|
|
112
|
+
* @param {number} [opts.level=1]
|
|
113
|
+
* @param {number} [opts.pad] - Pad the label (incl. trailing colon) to this width for alignment.
|
|
114
|
+
* @param {Function} [opts.valueColor] - chalk fn for the value (default none).
|
|
115
|
+
*/
|
|
116
|
+
function field(label, value, opts = {}) {
|
|
117
|
+
const level = opts.level || 1;
|
|
118
|
+
let labelText = `${label}:`;
|
|
119
|
+
if (opts.pad) {
|
|
120
|
+
labelText = labelText.padEnd(opts.pad);
|
|
121
|
+
}
|
|
122
|
+
const valueText = opts.valueColor ? opts.valueColor(value) : value;
|
|
123
|
+
console.log(`${indent(level)}${chalk.dim(labelText)} ${valueText}`);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Print a status line: `<symbol> <text>` at a given indent level.
|
|
128
|
+
* @param {('running'|'pass'|'fail'|'skip'|'warn'|'add'|'change')} kind
|
|
129
|
+
* @param {string} text
|
|
130
|
+
* @param {object} [opts]
|
|
131
|
+
* @param {number} [opts.level=1]
|
|
132
|
+
* @param {string} [opts.detail] - Dimmed trailing detail.
|
|
133
|
+
*/
|
|
134
|
+
function status(kind, text, opts = {}) {
|
|
135
|
+
const level = opts.level || 1;
|
|
136
|
+
const colorByKind = {
|
|
137
|
+
running: chalk.dim,
|
|
138
|
+
pass: chalk.green,
|
|
139
|
+
fail: chalk.red,
|
|
140
|
+
skip: chalk.dim,
|
|
141
|
+
warn: chalk.yellow,
|
|
142
|
+
add: chalk.green,
|
|
143
|
+
change: chalk.yellow,
|
|
144
|
+
};
|
|
145
|
+
const color = colorByKind[kind] || chalk.white;
|
|
146
|
+
const symbol = SYMBOLS[kind] || '';
|
|
147
|
+
const detail = opts.detail ? ` ${chalk.dim(opts.detail)}` : '';
|
|
148
|
+
console.log(`${indent(level)}${color(symbol)} ${text}${detail}`);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/** Print a plain dimmed note line. */
|
|
152
|
+
function note(text, level = 1) {
|
|
153
|
+
console.log(`${indent(level)}${chalk.dim(text)}`);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Collects setup-check results and prints an OMEGA-style summary block.
|
|
158
|
+
*
|
|
159
|
+
* Used by the setup command's test runner. `start()` stamps a wall-clock so the
|
|
160
|
+
* summary can report duration; `passed()` / `failed()` record outcomes; the
|
|
161
|
+
* failing check (if any) carries optional detail lines to surface in the block.
|
|
162
|
+
*/
|
|
163
|
+
class Summary {
|
|
164
|
+
constructor() {
|
|
165
|
+
this.startTime = null;
|
|
166
|
+
this.passes = 0;
|
|
167
|
+
this.warns = [];
|
|
168
|
+
this.fails = [];
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
start() {
|
|
172
|
+
this.startTime = Date.now();
|
|
173
|
+
return this;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
pass() {
|
|
177
|
+
this.passes++;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* @param {string} name - Check name.
|
|
182
|
+
* @param {string[]} [details] - Pre-formatted detail lines to show under the warning.
|
|
183
|
+
*/
|
|
184
|
+
warn(name, details = []) {
|
|
185
|
+
this.warns.push({ name, details });
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* @param {string} name - Check name.
|
|
190
|
+
* @param {string[]} [details] - Pre-formatted detail lines to show under the failure.
|
|
191
|
+
*/
|
|
192
|
+
fail(name, details = []) {
|
|
193
|
+
this.fails.push({ name, details });
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
get total() {
|
|
197
|
+
return this.passes + this.warns.length + this.fails.length;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Format milliseconds into "Xs" / "Xm Ys" / "Xh Ym Zs".
|
|
202
|
+
* @param {number} ms
|
|
203
|
+
*/
|
|
204
|
+
_formatDuration(ms) {
|
|
205
|
+
const seconds = Math.floor(ms / 1000);
|
|
206
|
+
if (seconds < 60) {
|
|
207
|
+
return `${seconds}s`;
|
|
208
|
+
}
|
|
209
|
+
const minutes = Math.floor(seconds / 60);
|
|
210
|
+
const remSeconds = seconds % 60;
|
|
211
|
+
if (minutes < 60) {
|
|
212
|
+
return `${minutes}m ${remSeconds}s`;
|
|
213
|
+
}
|
|
214
|
+
const hours = Math.floor(minutes / 60);
|
|
215
|
+
const remMinutes = minutes % 60;
|
|
216
|
+
return `${hours}h ${remMinutes}m ${remSeconds}s`;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Print the summary block. Green ✅ when everything passed, yellow ⚠ otherwise.
|
|
221
|
+
* @param {object} [opts]
|
|
222
|
+
* @param {string} [opts.hint] - A closing call-to-action line (e.g. how to re-run).
|
|
223
|
+
*/
|
|
224
|
+
print(opts = {}) {
|
|
225
|
+
const hasErrors = this.fails.length > 0;
|
|
226
|
+
const hasWarnings = this.warns.length > 0;
|
|
227
|
+
const headerColor = hasErrors ? chalk.yellow : chalk.green;
|
|
228
|
+
const icon = hasErrors ? SYMBOLS.warn : SYMBOLS.done;
|
|
229
|
+
const elapsed = this.startTime ? this._formatDuration(Date.now() - this.startTime) : '0s';
|
|
230
|
+
|
|
231
|
+
blank();
|
|
232
|
+
console.log(headerColor(RULE_CHAR.repeat(RULE_WIDTH)));
|
|
233
|
+
console.log(`${indent(1)}${headerColor.bold(`${icon} Summary`)}`);
|
|
234
|
+
console.log(headerColor(RULE_CHAR.repeat(RULE_WIDTH)));
|
|
235
|
+
|
|
236
|
+
blank();
|
|
237
|
+
field('Checks', String(this.total), { pad: 11 });
|
|
238
|
+
field('Duration', elapsed, { pad: 11 });
|
|
239
|
+
const parts = [chalk.green(`${this.passes} passed`)];
|
|
240
|
+
if (hasWarnings) {
|
|
241
|
+
parts.push(chalk.yellow(`${this.warns.length} warned`));
|
|
242
|
+
}
|
|
243
|
+
parts.push(hasErrors ? chalk.red(`${this.fails.length} failed`) : chalk.dim('0 failed'));
|
|
244
|
+
field('Results', parts.join(chalk.dim(', ')), { pad: 11 });
|
|
245
|
+
|
|
246
|
+
if (hasWarnings) {
|
|
247
|
+
blank();
|
|
248
|
+
for (const { name, details } of this.warns) {
|
|
249
|
+
console.log(`${indent(1)}${chalk.yellow(SYMBOLS.warn)} ${chalk.bold(name)}`);
|
|
250
|
+
for (const line of details) {
|
|
251
|
+
console.log(`${indent(3)}${line}`);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
if (hasErrors) {
|
|
257
|
+
blank();
|
|
258
|
+
for (const { name, details } of this.fails) {
|
|
259
|
+
console.log(`${indent(1)}${chalk.red(SYMBOLS.fail)} ${chalk.bold(name)}`);
|
|
260
|
+
for (const line of details) {
|
|
261
|
+
console.log(`${indent(3)}${line}`);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
if (opts.hint) {
|
|
267
|
+
blank();
|
|
268
|
+
console.log(`${indent(1)}${chalk.dim(SYMBOLS.running)} ${opts.hint}`);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
blank();
|
|
272
|
+
console.log(headerColor(RULE_CHAR.repeat(RULE_WIDTH)));
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
module.exports = {
|
|
277
|
+
chalk,
|
|
278
|
+
RULE_WIDTH,
|
|
279
|
+
RULE_CHAR,
|
|
280
|
+
SYMBOLS,
|
|
281
|
+
indent,
|
|
282
|
+
timestamp,
|
|
283
|
+
rule,
|
|
284
|
+
blank,
|
|
285
|
+
banner,
|
|
286
|
+
header,
|
|
287
|
+
section,
|
|
288
|
+
field,
|
|
289
|
+
status,
|
|
290
|
+
note,
|
|
291
|
+
Summary,
|
|
292
|
+
};
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# ========== Default Values ==========
|
|
2
|
+
# OMEGA Backend (@omega.js/backend) consumer project
|
|
3
|
+
|
|
4
|
+
<!-- MAINTAINERS (framework repo): this consumer template is MIRRORED across all OMEGA framework
|
|
5
|
+
consumer templates (src/defaults/AGENTS.md ×N; web's lives at scaffold/AGENTS.md) with the same
|
|
6
|
+
sections in the same order (framework-specific extras may be inserted; canonical sections are
|
|
7
|
+
never reordered/renamed). Edit every framework consumer template together. The mirroring rule
|
|
8
|
+
lives in each framework guide's Doc-update parity section (docs/<framework>/index.md) -->
|
|
9
|
+
|
|
10
|
+
## Framework
|
|
11
|
+
|
|
12
|
+
This project consumes **OMEGA Backend** (@omega.js/backend), a comprehensive framework for building
|
|
13
|
+
modern Firebase Cloud Functions backends. A single `Manager.init(exports, {...})` bootstrap wires:
|
|
14
|
+
|
|
15
|
+
- built-in functions (`omega_api`, auth events, cron jobs)
|
|
16
|
+
- helper classes (RouteContext, User, Analytics, Usage, Middleware, Settings, Utilities, Metadata)
|
|
17
|
+
- payment provider integrations (Stripe / PayPal) and Firestore-trigger pipelines
|
|
18
|
+
- a deploy/emulator/watch tooling pipeline
|
|
19
|
+
|
|
20
|
+
## 🚨 READ THE FRAMEWORK DOCS FIRST
|
|
21
|
+
|
|
22
|
+
**Before doing ANY work on this codebase, the agent MUST read the framework documentation: that is where the architecture, conventions, APIs, and gotchas live. Skipping these will result in solutions that conflict with framework patterns.**
|
|
23
|
+
|
|
24
|
+
**Required reading:**
|
|
25
|
+
- **`node_modules/@omega.js/AGENTS.md`**: the OMEGA map, the one agent entry into the framework docs; follow it to `docs/backend/index.md` (the @omega.js/backend guide: identity, architecture, conventions)
|
|
26
|
+
- **`node_modules/@omega.js/backend/docs/`**: subsystem deep references (read the relevant ones for the task at hand)
|
|
27
|
+
|
|
28
|
+
## Quick start
|
|
29
|
+
|
|
30
|
+
All commands run from the **target root** (this directory). `dist/` is staged build output; never edit it.
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npx omega build # stage src/ → dist/ (the tree firebase.json points at)
|
|
34
|
+
npx omega emulator # start Firebase emulators (auth/firestore/functions/database/storage)
|
|
35
|
+
npx omega test # target checks, then YOUR project's test suites (bare runs are project-only; mgr:/backend: → framework, full: → both)
|
|
36
|
+
npx omega test --extended # opt into REAL external APIs (shorthand for the shared TEST_EXTENDED_MODE; default: skipped)
|
|
37
|
+
npx omega watch # auto-reload functions on file change
|
|
38
|
+
npx omega deploy # deploy to Firebase
|
|
39
|
+
npx omega logs:read # read Cloud Functions logs (also: logs:tail to stream)
|
|
40
|
+
npx omega firestore:get # read a doc from Firestore (also: firestore:set / :query / :delete)
|
|
41
|
+
npx omega auth:get # read an Auth user (also: auth:list / :delete / :set-claims)
|
|
42
|
+
npx omega install dev # use LOCAL @omega.js/backend source (to test framework edits)
|
|
43
|
+
npx omega install live # restore the published @omega.js/backend from npm
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
`npx omega-backend <cmd>` works too (alias of `npx omega <cmd>`).
|
|
47
|
+
|
|
48
|
+
> Editing the @omega.js/backend framework source while working here? Run `npx omega install dev` so this project picks up your uncommitted framework changes (it otherwise uses its installed `node_modules/@omega.js/backend`). Run `npx omega install live` to switch back.
|
|
49
|
+
|
|
50
|
+
## Where things live
|
|
51
|
+
|
|
52
|
+
- `package.json`: THE target manifest, carrying scripts + runtime deps (`@omega.js/backend`, firebase-admin, firebase-functions). The staged `dist/package.json` derives from it.
|
|
53
|
+
- `src/index.js`: entry point. Must call `Manager.init(exports, { ... })` to register all built-in + custom endpoints.
|
|
54
|
+
- `src/routes/<verb>/<path>.js`: custom routes mounted at runtime (e.g. `src/routes/get/hello.js` → `GET /hello`).
|
|
55
|
+
- `src/schemas/<name>.js`: schema definitions for `Manager.Settings()` validation.
|
|
56
|
+
- `src/hooks/<area>/<event>.js`: auth/cron hooks.
|
|
57
|
+
- `src/public/`: OPTIONAL overrides for the hosting boilerplate (`index.html`, `404.html`); defaults are generated into `dist/public/`.
|
|
58
|
+
- `config/omega.json5`: STANDALONE projects only. In a brand monorepo the brand root's `config/omega.json5` is the config (`targets.backend` = this target's settings) and this target carries NO config file.
|
|
59
|
+
- `.env`: OPTIONAL per-key overrides you write by hand. The brand root's `.env` is the one file to edit; every verb composes `dist/.env` from the cascade (company ← brand ← this file), filtered to the keys the env schema names for `backend`. Gitignored; no machine writes this file.
|
|
60
|
+
- `service-account.json`: Firebase Admin credentials (STANDALONE projects; brand targets keep it in the brand's `.omega/secrets/`). Gitignored.
|
|
61
|
+
- `firebase.json`: Firebase config (hosting, rewrites, emulator ports). Points `functions.source` + `hosting.public` at `dist/`. Some fields managed by the verbs' scaffold.
|
|
62
|
+
- `.firebaserc`: Firebase project ID alias.
|
|
63
|
+
- `firestore.rules`: YOUR security rules — the whole file, no managed block. `omega build` compiles it with @omega.js/backend's framework half into `dist/firestore.rules`, which the emulator and `firebase deploy` read (never edit that).
|
|
64
|
+
- Your rules may call any framework helper: `is*` asks a question (`isUser`, `isOwner`, `isAdmin`, `isWritingAny`), `get*` hands back a value (`getAuthUid`, `getExistingData`).
|
|
65
|
+
- A match block of yours whose path names a framework block's MERGES into it (your condition ANDs onto the framework's) — that is how you TIGHTEN. Ops pair by NAME: `match /users/{uid} { allow create, update: if !isWritingAny(['xp']); }`.
|
|
66
|
+
- `database.rules.json`: Realtime Database security rules. @omega.js/backend owns a `// ========== OMEGA Rules ==========` block inside it; everything outside is yours.
|
|
67
|
+
- `dist/`: GENERATED staged output (`omega build`) carrying the src copy, derived manifest, composed config, and hosting boilerplate. Never edit; gitignored.
|
|
68
|
+
|
|
69
|
+
## Per-context imports
|
|
70
|
+
|
|
71
|
+
```js
|
|
72
|
+
// src/index.js: the entire backend bootstrap
|
|
73
|
+
const Manager = require('@omega.js/backend');
|
|
74
|
+
Manager.init(exports, {
|
|
75
|
+
// ...your options. How this backend RUNS is config, not an option here:
|
|
76
|
+
// targets.backend.projectType in config/omega.json5 ('firebase' | 'custom').
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
// In a custom route (src/routes/get/hello.js):
|
|
80
|
+
module.exports = async function(Manager, ctx) {
|
|
81
|
+
// ctx.req, ctx.res, ctx.user, etc.
|
|
82
|
+
};
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Available APIs at runtime
|
|
86
|
+
|
|
87
|
+
After `Manager.init()`, the Manager instance exposes factory methods:
|
|
88
|
+
- `Manager.RouteContext({ req, res })`: request handler with user + analytics + utility access
|
|
89
|
+
- `Manager.User(data)`: user property structure + schema
|
|
90
|
+
- `Manager.Analytics({ ctx })`: GA4 event tracking
|
|
91
|
+
- `Manager.Usage()`: rate-limiting
|
|
92
|
+
- `Manager.Middleware(req, res)`: request pipeline
|
|
93
|
+
- `Manager.Settings()`: schema validation against `src/schemas/*`
|
|
94
|
+
- `Manager.Utilities()`: batch operations + helpers
|
|
95
|
+
- `Manager.Metadata(doc)`: timestamps + tag helpers
|
|
96
|
+
- `Manager.storage({ name })`: local JSON storage (lowdb)
|
|
97
|
+
|
|
98
|
+
Auth events, payment-webhook transitions, and cron jobs are wired automatically; hook into them by exporting from `src/hooks/<area>/<event>.js`.
|
|
99
|
+
|
|
100
|
+
## Dependency resolution
|
|
101
|
+
|
|
102
|
+
- **`Manager.require(name)`** resolves from @omega.js/backend's module context. Consumer code (routes, schemas) can use it to access @omega.js/backend's bundled dependencies without installing them directly.
|
|
103
|
+
- **@omega.js/client owns Firebase on the client side.** Frontend consumer code (UJM pages, BXM extensions, EM renderers) NEVER imports Firebase directly. @omega.js/backend backend code uses `firebase-admin` directly (server-side is different).
|
|
104
|
+
|
|
105
|
+
## Testing
|
|
106
|
+
|
|
107
|
+
**Two lanes.** `npm test` is the STATIC lane: `node --test` over `test/_unit/**/*.test.js` with `test/_helpers/connect-trap.js` preloaded, which turns any TCP connect or DNS lookup into a throw. `npm run test:emulator` (`npx omega test`) is the emulator lane. A test needing a real client goes there; in the static lane, pass a stub.
|
|
108
|
+
|
|
109
|
+
Every feature ships with tests at every surface it exposes:
|
|
110
|
+
|
|
111
|
+
- **logic** — `test/routes/`, `test/events/`: handler suites against the real emulator
|
|
112
|
+
- **wiring** — route round-trips over `http.as(...)`: registration, auth gates, schema validation
|
|
113
|
+
- **rules** — `test/rules/`, when Firestore rules change
|
|
114
|
+
|
|
115
|
+
Skip a surface only when the feature genuinely doesn't have one; "the handler test covers it" does
|
|
116
|
+
not excuse the route round-trip. See `test/README.md` and
|
|
117
|
+
`node_modules/@omega.js/backend/docs/test-framework.md`.
|
|
118
|
+
|
|
119
|
+
<!-- Everything above this marker is owned by the framework and rewritten by every OMEGA verb. Add your project-specific notes below — they are preserved. -->
|
|
120
|
+
|
|
121
|
+
# ========== Custom Values ==========
|
|
122
|
+
|
|
123
|
+
## Project-specific notes
|
|
124
|
+
|
|
125
|
+
Add anything specific to THIS project here. Edits below this line are preserved across runs.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# CHANGELOG
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|
6
|
+
|
|
7
|
+
## Changelog Categories
|
|
8
|
+
|
|
9
|
+
- `BREAKING` for breaking changes.
|
|
10
|
+
- `Added` for new features.
|
|
11
|
+
- `Changed` for changes in existing functionality.
|
|
12
|
+
- `Deprecated` for soon-to-be removed features.
|
|
13
|
+
- `Removed` for now removed features.
|
|
14
|
+
- `Fixed` for any bug fixes.
|
|
15
|
+
- `Security` in case of vulnerabilities.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@AGENTS.md
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# ========== Default Values ==========
|
|
2
|
+
# macOS
|
|
3
|
+
.DS_Store
|
|
4
|
+
|
|
5
|
+
# Logs
|
|
6
|
+
logs
|
|
7
|
+
*.log
|
|
8
|
+
npm-debug.log*
|
|
9
|
+
yarn-debug.log*
|
|
10
|
+
yarn-error.log*
|
|
11
|
+
firebase-debug.log*
|
|
12
|
+
|
|
13
|
+
# Firebase cache
|
|
14
|
+
.firebase/
|
|
15
|
+
|
|
16
|
+
# Firebase config
|
|
17
|
+
.firebaserc
|
|
18
|
+
|
|
19
|
+
# Staged output (generated by `omega build` — src/ is the source)
|
|
20
|
+
dist/
|
|
21
|
+
|
|
22
|
+
# Runtime data
|
|
23
|
+
pids
|
|
24
|
+
*.pid
|
|
25
|
+
*.seed
|
|
26
|
+
*.pid.lock
|
|
27
|
+
|
|
28
|
+
# Coverage directory
|
|
29
|
+
coverage
|
|
30
|
+
.nyc_output
|
|
31
|
+
|
|
32
|
+
# Dependency directories
|
|
33
|
+
node_modules/
|
|
34
|
+
|
|
35
|
+
# Optional npm cache directory
|
|
36
|
+
.npm
|
|
37
|
+
|
|
38
|
+
# Optional eslint cache
|
|
39
|
+
.eslintcache
|
|
40
|
+
|
|
41
|
+
# Output of 'npm pack'
|
|
42
|
+
*.tgz
|
|
43
|
+
|
|
44
|
+
# Yarn Integrity file
|
|
45
|
+
.yarn-integrity
|
|
46
|
+
|
|
47
|
+
# dotenv environment variables file
|
|
48
|
+
.env*
|
|
49
|
+
|
|
50
|
+
# @omega.js/backend specific
|
|
51
|
+
.runtimeconfig.json
|
|
52
|
+
service-account*.json
|
|
53
|
+
omega-reload-trigger.js
|
|
54
|
+
.temp/
|
|
55
|
+
_legacy
|
|
56
|
+
|
|
57
|
+
# Per-run port-bumped emulator config (N7 auto-allocation)
|
|
58
|
+
firebase.resolved.json
|
|
59
|
+
|
|
60
|
+
# Hosting boilerplate (generated by setup / emulator boot / deploy)
|
|
61
|
+
/public/
|
|
62
|
+
|
|
63
|
+
# ========== Custom Values ==========
|
|
64
|
+
# Add your custom ignore patterns below this line
|
|
65
|
+
# ...
|