@aglyn/plugins-ai 1.0.0-beta.143
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 +201 -0
- package/README.md +25 -0
- package/package.json +60 -0
- package/src/index.d.ts +21 -0
- package/src/index.js +22 -0
- package/src/index.js.map +1 -0
- package/src/lib/activity/ai-activity-actions.d.ts +106 -0
- package/src/lib/activity/ai-activity-actions.js +209 -0
- package/src/lib/activity/ai-activity-actions.js.map +1 -0
- package/src/lib/activity/ai-activity.d.ts +219 -0
- package/src/lib/activity/ai-activity.js +251 -0
- package/src/lib/activity/ai-activity.js.map +1 -0
- package/src/lib/billing/ai-overage-charge.d.ts +102 -0
- package/src/lib/billing/ai-overage-charge.js +258 -0
- package/src/lib/billing/ai-overage-charge.js.map +1 -0
- package/src/lib/billing/ai-overage-close.d.ts +62 -0
- package/src/lib/billing/ai-overage-close.js +129 -0
- package/src/lib/billing/ai-overage-close.js.map +1 -0
- package/src/lib/billing/ai-overage-cutover.d.ts +63 -0
- package/src/lib/billing/ai-overage-cutover.js +114 -0
- package/src/lib/billing/ai-overage-cutover.js.map +1 -0
- package/src/lib/billing/ai-overage-events.d.ts +77 -0
- package/src/lib/billing/ai-overage-events.js +174 -0
- package/src/lib/billing/ai-overage-events.js.map +1 -0
- package/src/lib/billing/ai-overage-gate.d.ts +147 -0
- package/src/lib/billing/ai-overage-gate.js +177 -0
- package/src/lib/billing/ai-overage-gate.js.map +1 -0
- package/src/lib/billing/ai-overage-ledger.d.ts +135 -0
- package/src/lib/billing/ai-overage-ledger.js +278 -0
- package/src/lib/billing/ai-overage-ledger.js.map +1 -0
- package/src/lib/billing/ai-overage-standing-writes.d.ts +110 -0
- package/src/lib/billing/ai-overage-standing-writes.js +205 -0
- package/src/lib/billing/ai-overage-standing-writes.js.map +1 -0
- package/src/lib/billing/ai-overage-standing.d.ts +168 -0
- package/src/lib/billing/ai-overage-standing.js +215 -0
- package/src/lib/billing/ai-overage-standing.js.map +1 -0
- package/src/lib/billing/ai-overage-trigger.d.ts +30 -0
- package/src/lib/billing/ai-overage-trigger.js +76 -0
- package/src/lib/billing/ai-overage-trigger.js.map +1 -0
- package/src/lib/components/ai-allotment-editor.component.d.ts +40 -0
- package/src/lib/components/ai-allotment-editor.component.js +213 -0
- package/src/lib/components/ai-allotment-editor.component.js.map +1 -0
- package/src/lib/components/ai-assist-actions-context.d.ts +13 -0
- package/src/lib/components/ai-assist-actions-context.js +21 -0
- package/src/lib/components/ai-assist-actions-context.js.map +1 -0
- package/src/lib/components/ai-assist-provider.component.d.ts +51 -0
- package/src/lib/components/ai-assist-provider.component.js +519 -0
- package/src/lib/components/ai-assist-provider.component.js.map +1 -0
- package/src/lib/components/ai-brief-dialog.component.d.ts +56 -0
- package/src/lib/components/ai-brief-dialog.component.js +319 -0
- package/src/lib/components/ai-brief-dialog.component.js.map +1 -0
- package/src/lib/components/ai-collaborator-permissions-column.component.d.ts +32 -0
- package/src/lib/components/ai-collaborator-permissions-column.component.js +132 -0
- package/src/lib/components/ai-collaborator-permissions-column.component.js.map +1 -0
- package/src/lib/components/ai-credits-card.component.d.ts +34 -0
- package/src/lib/components/ai-credits-card.component.js +131 -0
- package/src/lib/components/ai-credits-card.component.js.map +1 -0
- package/src/lib/components/ai-credits-columns.component.d.ts +56 -0
- package/src/lib/components/ai-credits-columns.component.js +118 -0
- package/src/lib/components/ai-credits-columns.component.js.map +1 -0
- package/src/lib/components/ai-crm-email-draft.component.d.ts +17 -0
- package/src/lib/components/ai-crm-email-draft.component.js +159 -0
- package/src/lib/components/ai-crm-email-draft.component.js.map +1 -0
- package/src/lib/components/ai-crm-import-mapping.component.d.ts +20 -0
- package/src/lib/components/ai-crm-import-mapping.component.js +167 -0
- package/src/lib/components/ai-crm-import-mapping.component.js.map +1 -0
- package/src/lib/components/ai-crm-record-card.component.d.ts +27 -0
- package/src/lib/components/ai-crm-record-card.component.js +263 -0
- package/src/lib/components/ai-crm-record-card.component.js.map +1 -0
- package/src/lib/components/ai-describe-automation.component.d.ts +31 -0
- package/src/lib/components/ai-describe-automation.component.js +226 -0
- package/src/lib/components/ai-describe-automation.component.js.map +1 -0
- package/src/lib/components/ai-describe-button.component.d.ts +39 -0
- package/src/lib/components/ai-describe-button.component.js +87 -0
- package/src/lib/components/ai-describe-button.component.js.map +1 -0
- package/src/lib/components/ai-describe-page.component.d.ts +26 -0
- package/src/lib/components/ai-describe-page.component.js +18 -0
- package/src/lib/components/ai-describe-page.component.js.map +1 -0
- package/src/lib/components/ai-experiment-cards.component.d.ts +75 -0
- package/src/lib/components/ai-experiment-cards.component.js +573 -0
- package/src/lib/components/ai-experiment-cards.component.js.map +1 -0
- package/src/lib/components/ai-explain-automation.component.d.ts +31 -0
- package/src/lib/components/ai-explain-automation.component.js +265 -0
- package/src/lib/components/ai-explain-automation.component.js.map +1 -0
- package/src/lib/components/ai-insight-dialog.component.d.ts +37 -0
- package/src/lib/components/ai-insight-dialog.component.js +441 -0
- package/src/lib/components/ai-insight-dialog.component.js.map +1 -0
- package/src/lib/components/ai-job-plan.component.d.ts +46 -0
- package/src/lib/components/ai-job-plan.component.js +192 -0
- package/src/lib/components/ai-job-plan.component.js.map +1 -0
- package/src/lib/components/ai-model-selector.component.d.ts +21 -0
- package/src/lib/components/ai-model-selector.component.js +109 -0
- package/src/lib/components/ai-model-selector.component.js.map +1 -0
- package/src/lib/components/ai-page-brief-dialog.component.d.ts +29 -0
- package/src/lib/components/ai-page-brief-dialog.component.js +27 -0
- package/src/lib/components/ai-page-brief-dialog.component.js.map +1 -0
- package/src/lib/components/ai-permissions-on-host.component.d.ts +55 -0
- package/src/lib/components/ai-permissions-on-host.component.js +91 -0
- package/src/lib/components/ai-permissions-on-host.component.js.map +1 -0
- package/src/lib/components/ai-product-copy-card.component.d.ts +25 -0
- package/src/lib/components/ai-product-copy-card.component.js +328 -0
- package/src/lib/components/ai-product-copy-card.component.js.map +1 -0
- package/src/lib/components/ai-product-import-option.component.d.ts +14 -0
- package/src/lib/components/ai-product-import-option.component.js +58 -0
- package/src/lib/components/ai-product-import-option.component.js.map +1 -0
- package/src/lib/components/ai-products-hub-card.component.d.ts +15 -0
- package/src/lib/components/ai-products-hub-card.component.js +418 -0
- package/src/lib/components/ai-products-hub-card.component.js.map +1 -0
- package/src/lib/components/ai-products-proposals.component.d.ts +19 -0
- package/src/lib/components/ai-products-proposals.component.js +547 -0
- package/src/lib/components/ai-products-proposals.component.js.map +1 -0
- package/src/lib/components/ai-save-as-component.component.d.ts +38 -0
- package/src/lib/components/ai-save-as-component.component.js +231 -0
- package/src/lib/components/ai-save-as-component.component.js.map +1 -0
- package/src/lib/components/ai-seo-audit-card.component.d.ts +9 -0
- package/src/lib/components/ai-seo-audit-card.component.js +620 -0
- package/src/lib/components/ai-seo-audit-card.component.js.map +1 -0
- package/src/lib/components/ai-seo-fields-card.component.d.ts +10 -0
- package/src/lib/components/ai-seo-fields-card.component.js +453 -0
- package/src/lib/components/ai-seo-fields-card.component.js.map +1 -0
- package/src/lib/components/ai-site-batch-card.component.d.ts +32 -0
- package/src/lib/components/ai-site-batch-card.component.js +531 -0
- package/src/lib/components/ai-site-batch-card.component.js.map +1 -0
- package/src/lib/components/ai-site-seo-start-card.component.d.ts +26 -0
- package/src/lib/components/ai-site-seo-start-card.component.js +178 -0
- package/src/lib/components/ai-site-seo-start-card.component.js.map +1 -0
- package/src/lib/components/ai-site-start-card.component.d.ts +19 -0
- package/src/lib/components/ai-site-start-card.component.js +348 -0
- package/src/lib/components/ai-site-start-card.component.js.map +1 -0
- package/src/lib/components/ai-template-collection-field.component.d.ts +32 -0
- package/src/lib/components/ai-template-collection-field.component.js +63 -0
- package/src/lib/components/ai-template-collection-field.component.js.map +1 -0
- package/src/lib/components/ai-theme-proposal-card.component.d.ts +6 -0
- package/src/lib/components/ai-theme-proposal-card.component.js +619 -0
- package/src/lib/components/ai-theme-proposal-card.component.js.map +1 -0
- package/src/lib/components/ai-usage-strip.component.d.ts +27 -0
- package/src/lib/components/ai-usage-strip.component.js +145 -0
- package/src/lib/components/ai-usage-strip.component.js.map +1 -0
- package/src/lib/components/assist-edit-canvas.d.ts +169 -0
- package/src/lib/components/assist-edit-canvas.js +636 -0
- package/src/lib/components/assist-edit-canvas.js.map +1 -0
- package/src/lib/components/assist-edit-card.component.d.ts +16 -0
- package/src/lib/components/assist-edit-card.component.js +181 -0
- package/src/lib/components/assist-edit-card.component.js.map +1 -0
- package/src/lib/components/assist-jobs-drawer.component.d.ts +72 -0
- package/src/lib/components/assist-jobs-drawer.component.js +626 -0
- package/src/lib/components/assist-jobs-drawer.component.js.map +1 -0
- package/src/lib/components/assist-panel.component.d.ts +136 -0
- package/src/lib/components/assist-panel.component.js +1099 -0
- package/src/lib/components/assist-panel.component.js.map +1 -0
- package/src/lib/components/assist-signals-page.component.d.ts +3 -0
- package/src/lib/components/assist-signals-page.component.js +1017 -0
- package/src/lib/components/assist-signals-page.component.js.map +1 -0
- package/src/lib/components/besigner-ai-controls.component.d.ts +29 -0
- package/src/lib/components/besigner-ai-controls.component.js +81 -0
- package/src/lib/components/besigner-ai-controls.component.js.map +1 -0
- package/src/lib/components/billing-ai-allotments.component.d.ts +36 -0
- package/src/lib/components/billing-ai-allotments.component.js +486 -0
- package/src/lib/components/billing-ai-allotments.component.js.map +1 -0
- package/src/lib/components/billing-ai-top-users.component.d.ts +44 -0
- package/src/lib/components/billing-ai-top-users.component.js +304 -0
- package/src/lib/components/billing-ai-top-users.component.js.map +1 -0
- package/src/lib/components/billing-assist-overage-card.component.d.ts +69 -0
- package/src/lib/components/billing-assist-overage-card.component.js +437 -0
- package/src/lib/components/billing-assist-overage-card.component.js.map +1 -0
- package/src/lib/components/host-ai-allotments.component.d.ts +40 -0
- package/src/lib/components/host-ai-allotments.component.js +239 -0
- package/src/lib/components/host-ai-allotments.component.js.map +1 -0
- package/src/lib/components/member-ai-allotment-card.component.d.ts +28 -0
- package/src/lib/components/member-ai-allotment-card.component.js +172 -0
- package/src/lib/components/member-ai-allotment-card.component.js.map +1 -0
- package/src/lib/components/member-ai-usage-card.component.d.ts +28 -0
- package/src/lib/components/member-ai-usage-card.component.js +240 -0
- package/src/lib/components/member-ai-usage-card.component.js.map +1 -0
- package/src/lib/components/staff-org-ai-card.component.d.ts +17 -0
- package/src/lib/components/staff-org-ai-card.component.js +739 -0
- package/src/lib/components/staff-org-ai-card.component.js.map +1 -0
- package/src/lib/components/staff-org-usage-ai-columns.component.d.ts +41 -0
- package/src/lib/components/staff-org-usage-ai-columns.component.js +65 -0
- package/src/lib/components/staff-org-usage-ai-columns.component.js.map +1 -0
- package/src/lib/components/staff-orgs-ai-spend-column.component.d.ts +28 -0
- package/src/lib/components/staff-orgs-ai-spend-column.component.js +89 -0
- package/src/lib/components/staff-orgs-ai-spend-column.component.js.map +1 -0
- package/src/lib/components/staff-user-ai-usage-card.component.d.ts +27 -0
- package/src/lib/components/staff-user-ai-usage-card.component.js +183 -0
- package/src/lib/components/staff-user-ai-usage-card.component.js.map +1 -0
- package/src/lib/components/use-ai-allotments.d.ts +49 -0
- package/src/lib/components/use-ai-allotments.js +171 -0
- package/src/lib/components/use-ai-allotments.js.map +1 -0
- package/src/lib/components/use-ai-crm-answer.d.ts +50 -0
- package/src/lib/components/use-ai-crm-answer.js +220 -0
- package/src/lib/components/use-ai-crm-answer.js.map +1 -0
- package/src/lib/components/use-ai-job-run.d.ts +51 -0
- package/src/lib/components/use-ai-job-run.js +176 -0
- package/src/lib/components/use-ai-job-run.js.map +1 -0
- package/src/lib/components/use-ai-model-choice.d.ts +47 -0
- package/src/lib/components/use-ai-model-choice.js +150 -0
- package/src/lib/components/use-ai-model-choice.js.map +1 -0
- package/src/lib/components/use-ai-products-jobs.d.ts +36 -0
- package/src/lib/components/use-ai-products-jobs.js +190 -0
- package/src/lib/components/use-ai-products-jobs.js.map +1 -0
- package/src/lib/components/use-ai-usage-meter.d.ts +11 -0
- package/src/lib/components/use-ai-usage-meter.js +96 -0
- package/src/lib/components/use-ai-usage-meter.js.map +1 -0
- package/src/lib/components/use-org-ai-usage.d.ts +42 -0
- package/src/lib/components/use-org-ai-usage.js +181 -0
- package/src/lib/components/use-org-ai-usage.js.map +1 -0
- package/src/lib/components/use-staff-orgs-ai-spend.d.ts +18 -0
- package/src/lib/components/use-staff-orgs-ai-spend.js +127 -0
- package/src/lib/components/use-staff-orgs-ai-spend.js.map +1 -0
- package/src/lib/constants.d.ts +24 -0
- package/src/lib/constants.js +23 -0
- package/src/lib/constants.js.map +1 -0
- package/src/lib/declarations.d.ts +48 -0
- package/src/lib/declarations.js +129 -0
- package/src/lib/declarations.js.map +1 -0
- package/src/lib/declarations.server.d.ts +35 -0
- package/src/lib/declarations.server.js +138 -0
- package/src/lib/declarations.server.js.map +1 -0
- package/src/lib/insights/ai-figure-readers.d.ts +90 -0
- package/src/lib/insights/ai-figure-readers.js +863 -0
- package/src/lib/insights/ai-figure-readers.js.map +1 -0
- package/src/lib/insights/ai-insight-digest.d.ts +165 -0
- package/src/lib/insights/ai-insight-digest.js +363 -0
- package/src/lib/insights/ai-insight-digest.js.map +1 -0
- package/src/lib/insights/ai-insight-readers.d.ts +71 -0
- package/src/lib/insights/ai-insight-readers.js +141 -0
- package/src/lib/insights/ai-insight-readers.js.map +1 -0
- package/src/lib/jobs/ai-crm-access.d.ts +61 -0
- package/src/lib/jobs/ai-crm-access.js +94 -0
- package/src/lib/jobs/ai-crm-access.js.map +1 -0
- package/src/lib/jobs/ai-email-bindings.d.ts +97 -0
- package/src/lib/jobs/ai-email-bindings.js +147 -0
- package/src/lib/jobs/ai-email-bindings.js.map +1 -0
- package/src/lib/jobs/ai-job-admission.d.ts +82 -0
- package/src/lib/jobs/ai-job-admission.js +45 -0
- package/src/lib/jobs/ai-job-admission.js.map +1 -0
- package/src/lib/jobs/ai-job-budget.d.ts +167 -0
- package/src/lib/jobs/ai-job-budget.js +161 -0
- package/src/lib/jobs/ai-job-budget.js.map +1 -0
- package/src/lib/jobs/ai-job-campaign-step.d.ts +108 -0
- package/src/lib/jobs/ai-job-campaign-step.js +340 -0
- package/src/lib/jobs/ai-job-campaign-step.js.map +1 -0
- package/src/lib/jobs/ai-job-component-checks.d.ts +74 -0
- package/src/lib/jobs/ai-job-component-checks.js +442 -0
- package/src/lib/jobs/ai-job-component-checks.js.map +1 -0
- package/src/lib/jobs/ai-job-component-step.d.ts +75 -0
- package/src/lib/jobs/ai-job-component-step.js +262 -0
- package/src/lib/jobs/ai-job-component-step.js.map +1 -0
- package/src/lib/jobs/ai-job-crm-step.d.ts +192 -0
- package/src/lib/jobs/ai-job-crm-step.js +734 -0
- package/src/lib/jobs/ai-job-crm-step.js.map +1 -0
- package/src/lib/jobs/ai-job-draft-ids.d.ts +62 -0
- package/src/lib/jobs/ai-job-draft-ids.js +132 -0
- package/src/lib/jobs/ai-job-draft-ids.js.map +1 -0
- package/src/lib/jobs/ai-job-drafts.d.ts +304 -0
- package/src/lib/jobs/ai-job-drafts.js +557 -0
- package/src/lib/jobs/ai-job-drafts.js.map +1 -0
- package/src/lib/jobs/ai-job-email-step.d.ts +195 -0
- package/src/lib/jobs/ai-job-email-step.js +547 -0
- package/src/lib/jobs/ai-job-email-step.js.map +1 -0
- package/src/lib/jobs/ai-job-experiment-step.d.ts +105 -0
- package/src/lib/jobs/ai-job-experiment-step.js +445 -0
- package/src/lib/jobs/ai-job-experiment-step.js.map +1 -0
- package/src/lib/jobs/ai-job-form-step.d.ts +250 -0
- package/src/lib/jobs/ai-job-form-step.js +634 -0
- package/src/lib/jobs/ai-job-form-step.js.map +1 -0
- package/src/lib/jobs/ai-job-generation.d.ts +114 -0
- package/src/lib/jobs/ai-job-generation.js +384 -0
- package/src/lib/jobs/ai-job-generation.js.map +1 -0
- package/src/lib/jobs/ai-job-insight-budget.d.ts +41 -0
- package/src/lib/jobs/ai-job-insight-budget.js +46 -0
- package/src/lib/jobs/ai-job-insight-budget.js.map +1 -0
- package/src/lib/jobs/ai-job-insight-step.d.ts +58 -0
- package/src/lib/jobs/ai-job-insight-step.js +350 -0
- package/src/lib/jobs/ai-job-insight-step.js.map +1 -0
- package/src/lib/jobs/ai-job-layout-step.d.ts +103 -0
- package/src/lib/jobs/ai-job-layout-step.js +340 -0
- package/src/lib/jobs/ai-job-layout-step.js.map +1 -0
- package/src/lib/jobs/ai-job-page-budget.d.ts +57 -0
- package/src/lib/jobs/ai-job-page-budget.js +60 -0
- package/src/lib/jobs/ai-job-page-budget.js.map +1 -0
- package/src/lib/jobs/ai-job-page-sections.d.ts +150 -0
- package/src/lib/jobs/ai-job-page-sections.js +450 -0
- package/src/lib/jobs/ai-job-page-sections.js.map +1 -0
- package/src/lib/jobs/ai-job-page-step.d.ts +198 -0
- package/src/lib/jobs/ai-job-page-step.js +667 -0
- package/src/lib/jobs/ai-job-page-step.js.map +1 -0
- package/src/lib/jobs/ai-job-plan-conformance.d.ts +107 -0
- package/src/lib/jobs/ai-job-plan-conformance.js +164 -0
- package/src/lib/jobs/ai-job-plan-conformance.js.map +1 -0
- package/src/lib/jobs/ai-job-plan-step.d.ts +196 -0
- package/src/lib/jobs/ai-job-plan-step.js +458 -0
- package/src/lib/jobs/ai-job-plan-step.js.map +1 -0
- package/src/lib/jobs/ai-job-plugin-drafts.d.ts +76 -0
- package/src/lib/jobs/ai-job-plugin-drafts.js +91 -0
- package/src/lib/jobs/ai-job-plugin-drafts.js.map +1 -0
- package/src/lib/jobs/ai-job-products-step.d.ts +106 -0
- package/src/lib/jobs/ai-job-products-step.js +436 -0
- package/src/lib/jobs/ai-job-products-step.js.map +1 -0
- package/src/lib/jobs/ai-job-seo-budget.d.ts +52 -0
- package/src/lib/jobs/ai-job-seo-budget.js +63 -0
- package/src/lib/jobs/ai-job-seo-budget.js.map +1 -0
- package/src/lib/jobs/ai-job-seo-step.d.ts +145 -0
- package/src/lib/jobs/ai-job-seo-step.js +809 -0
- package/src/lib/jobs/ai-job-seo-step.js.map +1 -0
- package/src/lib/jobs/ai-job-site-step.d.ts +252 -0
- package/src/lib/jobs/ai-job-site-step.js +538 -0
- package/src/lib/jobs/ai-job-site-step.js.map +1 -0
- package/src/lib/jobs/ai-job-template-step.d.ts +105 -0
- package/src/lib/jobs/ai-job-template-step.js +391 -0
- package/src/lib/jobs/ai-job-template-step.js.map +1 -0
- package/src/lib/jobs/ai-job-text-step.d.ts +125 -0
- package/src/lib/jobs/ai-job-text-step.js +128 -0
- package/src/lib/jobs/ai-job-text-step.js.map +1 -0
- package/src/lib/jobs/ai-job-theme-budget.d.ts +38 -0
- package/src/lib/jobs/ai-job-theme-budget.js +43 -0
- package/src/lib/jobs/ai-job-theme-budget.js.map +1 -0
- package/src/lib/jobs/ai-job-theme-step.d.ts +115 -0
- package/src/lib/jobs/ai-job-theme-step.js +337 -0
- package/src/lib/jobs/ai-job-theme-step.js.map +1 -0
- package/src/lib/jobs/ai-job-workflow-step.d.ts +139 -0
- package/src/lib/jobs/ai-job-workflow-step.js +530 -0
- package/src/lib/jobs/ai-job-workflow-step.js.map +1 -0
- package/src/lib/jobs/ai-jobs-beat.d.ts +78 -0
- package/src/lib/jobs/ai-jobs-beat.js +93 -0
- package/src/lib/jobs/ai-jobs-beat.js.map +1 -0
- package/src/lib/jobs/ai-jobs-pause.d.ts +38 -0
- package/src/lib/jobs/ai-jobs-pause.js +45 -0
- package/src/lib/jobs/ai-jobs-pause.js.map +1 -0
- package/src/lib/jobs/ai-jobs.d.ts +558 -0
- package/src/lib/jobs/ai-jobs.js +1410 -0
- package/src/lib/jobs/ai-jobs.js.map +1 -0
- package/src/lib/jobs/ai-media-asset-server.d.ts +34 -0
- package/src/lib/jobs/ai-media-asset-server.js +34 -0
- package/src/lib/jobs/ai-media-asset-server.js.map +1 -0
- package/src/lib/jobs/ai-media-asset.d.ts +59 -0
- package/src/lib/jobs/ai-media-asset.js +86 -0
- package/src/lib/jobs/ai-media-asset.js.map +1 -0
- package/src/lib/jobs/ai-product-image.d.ts +78 -0
- package/src/lib/jobs/ai-product-image.js +113 -0
- package/src/lib/jobs/ai-product-image.js.map +1 -0
- package/src/lib/jobs/ai-theme-brand-inputs.d.ts +125 -0
- package/src/lib/jobs/ai-theme-brand-inputs.js +378 -0
- package/src/lib/jobs/ai-theme-brand-inputs.js.map +1 -0
- package/src/lib/jobs/ai-theme-brand-server.d.ts +33 -0
- package/src/lib/jobs/ai-theme-brand-server.js +33 -0
- package/src/lib/jobs/ai-theme-brand-server.js.map +1 -0
- package/src/lib/jobs/ai-workflow-records.d.ts +84 -0
- package/src/lib/jobs/ai-workflow-records.js +158 -0
- package/src/lib/jobs/ai-workflow-records.js.map +1 -0
- package/src/lib/jobs/fixtures/ai-free-page-built-recording.d.ts +31 -0
- package/src/lib/jobs/fixtures/ai-free-page-built-recording.js +367 -0
- package/src/lib/jobs/fixtures/ai-free-page-built-recording.js.map +1 -0
- package/src/lib/jobs/fixtures/ai-free-page-recording.d.ts +69 -0
- package/src/lib/jobs/fixtures/ai-free-page-recording.js +442 -0
- package/src/lib/jobs/fixtures/ai-free-page-recording.js.map +1 -0
- package/src/lib/jobs/fixtures/ai-page-briefs.d.ts +146 -0
- package/src/lib/jobs/fixtures/ai-page-briefs.js +1850 -0
- package/src/lib/jobs/fixtures/ai-page-briefs.js.map +1 -0
- package/src/lib/model/ai-allotments.d.ts +208 -0
- package/src/lib/model/ai-allotments.js +269 -0
- package/src/lib/model/ai-allotments.js.map +1 -0
- package/src/lib/model/ai-automation-draft.d.ts +74 -0
- package/src/lib/model/ai-automation-draft.js +310 -0
- package/src/lib/model/ai-automation-draft.js.map +1 -0
- package/src/lib/model/ai-automation-outline.d.ts +50 -0
- package/src/lib/model/ai-automation-outline.js +262 -0
- package/src/lib/model/ai-automation-outline.js.map +1 -0
- package/src/lib/model/ai-build-plan.d.ts +197 -0
- package/src/lib/model/ai-build-plan.js +438 -0
- package/src/lib/model/ai-build-plan.js.map +1 -0
- package/src/lib/model/ai-crm.d.ts +237 -0
- package/src/lib/model/ai-crm.js +225 -0
- package/src/lib/model/ai-crm.js.map +1 -0
- package/src/lib/model/ai-experiment-proposal.d.ts +68 -0
- package/src/lib/model/ai-experiment-proposal.js +146 -0
- package/src/lib/model/ai-experiment-proposal.js.map +1 -0
- package/src/lib/model/ai-experiment.d.ts +309 -0
- package/src/lib/model/ai-experiment.js +395 -0
- package/src/lib/model/ai-experiment.js.map +1 -0
- package/src/lib/model/ai-insight.d.ts +178 -0
- package/src/lib/model/ai-insight.js +201 -0
- package/src/lib/model/ai-insight.js.map +1 -0
- package/src/lib/model/ai-jobs.types.d.ts +412 -0
- package/src/lib/model/ai-jobs.types.js +42 -0
- package/src/lib/model/ai-jobs.types.js.map +1 -0
- package/src/lib/model/ai-page-job.d.ts +92 -0
- package/src/lib/model/ai-page-job.js +159 -0
- package/src/lib/model/ai-page-job.js.map +1 -0
- package/src/lib/model/ai-permissions.d.ts +49 -0
- package/src/lib/model/ai-permissions.js +97 -0
- package/src/lib/model/ai-permissions.js.map +1 -0
- package/src/lib/model/ai-plan-capabilities.d.ts +139 -0
- package/src/lib/model/ai-plan-capabilities.js +149 -0
- package/src/lib/model/ai-plan-capabilities.js.map +1 -0
- package/src/lib/model/ai-products.d.ts +251 -0
- package/src/lib/model/ai-products.js +253 -0
- package/src/lib/model/ai-products.js.map +1 -0
- package/src/lib/model/ai-seo.d.ts +208 -0
- package/src/lib/model/ai-seo.js +150 -0
- package/src/lib/model/ai-seo.js.map +1 -0
- package/src/lib/model/ai-site-inventory.d.ts +164 -0
- package/src/lib/model/ai-site-inventory.js +145 -0
- package/src/lib/model/ai-site-inventory.js.map +1 -0
- package/src/lib/model/ai-site-job.d.ts +247 -0
- package/src/lib/model/ai-site-job.js +314 -0
- package/src/lib/model/ai-site-job.js.map +1 -0
- package/src/lib/model/ai-site-start-seo.d.ts +103 -0
- package/src/lib/model/ai-site-start-seo.js +154 -0
- package/src/lib/model/ai-site-start-seo.js.map +1 -0
- package/src/lib/model/ai-site-start.d.ts +122 -0
- package/src/lib/model/ai-site-start.js +159 -0
- package/src/lib/model/ai-site-start.js.map +1 -0
- package/src/lib/model/ai-site-switch.d.ts +56 -0
- package/src/lib/model/ai-site-switch.js +73 -0
- package/src/lib/model/ai-site-switch.js.map +1 -0
- package/src/lib/model/ai-storefront-claims.d.ts +70 -0
- package/src/lib/model/ai-storefront-claims.js +130 -0
- package/src/lib/model/ai-storefront-claims.js.map +1 -0
- package/src/lib/model/ai-template-subjects.d.ts +82 -0
- package/src/lib/model/ai-template-subjects.js +136 -0
- package/src/lib/model/ai-template-subjects.js.map +1 -0
- package/src/lib/model/ai-theme-proposal.d.ts +210 -0
- package/src/lib/model/ai-theme-proposal.js +506 -0
- package/src/lib/model/ai-theme-proposal.js.map +1 -0
- package/src/lib/model/ai-tokens.d.ts +96 -0
- package/src/lib/model/ai-tokens.js +117 -0
- package/src/lib/model/ai-tokens.js.map +1 -0
- package/src/lib/model/ai-usage-by-user.d.ts +120 -0
- package/src/lib/model/ai-usage-by-user.js +139 -0
- package/src/lib/model/ai-usage-by-user.js.map +1 -0
- package/src/lib/model/ai-workflow-job.d.ts +111 -0
- package/src/lib/model/ai-workflow-job.js +183 -0
- package/src/lib/model/ai-workflow-job.js.map +1 -0
- package/src/lib/model/assist-edit.d.ts +261 -0
- package/src/lib/model/assist-edit.js +175 -0
- package/src/lib/model/assist-edit.js.map +1 -0
- package/src/lib/plugin-config.d.ts +33 -0
- package/src/lib/plugin-config.js +118 -0
- package/src/lib/plugin-config.js.map +1 -0
- package/src/lib/plugin.d.ts +30 -0
- package/src/lib/plugin.js +525 -0
- package/src/lib/plugin.js.map +1 -0
- package/src/lib/providers/anthropic.d.ts +84 -0
- package/src/lib/providers/anthropic.js +432 -0
- package/src/lib/providers/anthropic.js.map +1 -0
- package/src/lib/providers/catalog.d.ts +197 -0
- package/src/lib/providers/catalog.js +312 -0
- package/src/lib/providers/catalog.js.map +1 -0
- package/src/lib/providers/contract.d.ts +464 -0
- package/src/lib/providers/contract.js +274 -0
- package/src/lib/providers/contract.js.map +1 -0
- package/src/lib/providers/model-choice.d.ts +119 -0
- package/src/lib/providers/model-choice.js +416 -0
- package/src/lib/providers/model-choice.js.map +1 -0
- package/src/lib/providers/openai-compatible.d.ts +58 -0
- package/src/lib/providers/openai-compatible.js +361 -0
- package/src/lib/providers/openai-compatible.js.map +1 -0
- package/src/lib/providers/registry.d.ts +49 -0
- package/src/lib/providers/registry.js +71 -0
- package/src/lib/providers/registry.js.map +1 -0
- package/src/lib/providers/routing.d.ts +98 -0
- package/src/lib/providers/routing.js +450 -0
- package/src/lib/providers/routing.js.map +1 -0
- package/src/lib/runtime/ai-abuse-guards.d.ts +113 -0
- package/src/lib/runtime/ai-abuse-guards.js +148 -0
- package/src/lib/runtime/ai-abuse-guards.js.map +1 -0
- package/src/lib/runtime/ai-component-bindings.d.ts +67 -0
- package/src/lib/runtime/ai-component-bindings.js +106 -0
- package/src/lib/runtime/ai-component-bindings.js.map +1 -0
- package/src/lib/runtime/ai-device-audit.d.ts +109 -0
- package/src/lib/runtime/ai-device-audit.js +97 -0
- package/src/lib/runtime/ai-device-audit.js.map +1 -0
- package/src/lib/runtime/ai-doctrine-validators.d.ts +720 -0
- package/src/lib/runtime/ai-doctrine-validators.js +3133 -0
- package/src/lib/runtime/ai-doctrine-validators.js.map +1 -0
- package/src/lib/runtime/ai-doctrine.d.ts +372 -0
- package/src/lib/runtime/ai-doctrine.js +944 -0
- package/src/lib/runtime/ai-doctrine.js.map +1 -0
- package/src/lib/runtime/ai-eval-live.d.ts +321 -0
- package/src/lib/runtime/ai-eval-live.js +1257 -0
- package/src/lib/runtime/ai-eval-live.js.map +1 -0
- package/src/lib/runtime/ai-eval-memory-firestore.d.ts +51 -0
- package/src/lib/runtime/ai-eval-memory-firestore.js +183 -0
- package/src/lib/runtime/ai-eval-memory-firestore.js.map +1 -0
- package/src/lib/runtime/ai-eval.d.ts +441 -0
- package/src/lib/runtime/ai-eval.js +1151 -0
- package/src/lib/runtime/ai-eval.js.map +1 -0
- package/src/lib/runtime/ai-gate.d.ts +130 -0
- package/src/lib/runtime/ai-gate.js +272 -0
- package/src/lib/runtime/ai-gate.js.map +1 -0
- package/src/lib/runtime/ai-generation-bounds.d.ts +24 -0
- package/src/lib/runtime/ai-generation-bounds.js +23 -0
- package/src/lib/runtime/ai-generation-bounds.js.map +1 -0
- package/src/lib/runtime/ai-insight-check.d.ts +76 -0
- package/src/lib/runtime/ai-insight-check.js +281 -0
- package/src/lib/runtime/ai-insight-check.js.map +1 -0
- package/src/lib/runtime/ai-node-tree.d.ts +181 -0
- package/src/lib/runtime/ai-node-tree.js +931 -0
- package/src/lib/runtime/ai-node-tree.js.map +1 -0
- package/src/lib/runtime/ai-page-links.d.ts +79 -0
- package/src/lib/runtime/ai-page-links.js +135 -0
- package/src/lib/runtime/ai-page-links.js.map +1 -0
- package/src/lib/runtime/ai-palette.d.ts +252 -0
- package/src/lib/runtime/ai-palette.generated.d.ts +34 -0
- package/src/lib/runtime/ai-palette.generated.js +5263 -0
- package/src/lib/runtime/ai-palette.generated.js.map +1 -0
- package/src/lib/runtime/ai-palette.js +187 -0
- package/src/lib/runtime/ai-palette.js.map +1 -0
- package/src/lib/runtime/ai-products-generation.d.ts +107 -0
- package/src/lib/runtime/ai-products-generation.js +250 -0
- package/src/lib/runtime/ai-products-generation.js.map +1 -0
- package/src/lib/runtime/ai-repeated-items.d.ts +95 -0
- package/src/lib/runtime/ai-repeated-items.js +397 -0
- package/src/lib/runtime/ai-repeated-items.js.map +1 -0
- package/src/lib/runtime/ai-runtime.d.ts +148 -0
- package/src/lib/runtime/ai-runtime.js +237 -0
- package/src/lib/runtime/ai-runtime.js.map +1 -0
- package/src/lib/runtime/ai-template-examples.d.ts +71 -0
- package/src/lib/runtime/ai-template-examples.js +135 -0
- package/src/lib/runtime/ai-template-examples.js.map +1 -0
- package/src/lib/runtime/assist-answer-cache.d.ts +80 -0
- package/src/lib/runtime/assist-answer-cache.js +184 -0
- package/src/lib/runtime/assist-answer-cache.js.map +1 -0
- package/src/lib/runtime/seo-audit.d.ts +93 -0
- package/src/lib/runtime/seo-audit.js +260 -0
- package/src/lib/runtime/seo-audit.js.map +1 -0
- package/src/lib/runtime/seo-content-fixes.d.ts +41 -0
- package/src/lib/runtime/seo-content-fixes.js +168 -0
- package/src/lib/runtime/seo-content-fixes.js.map +1 -0
- package/src/lib/runtime/seo-fields.d.ts +152 -0
- package/src/lib/runtime/seo-fields.js +215 -0
- package/src/lib/runtime/seo-fields.js.map +1 -0
- package/src/lib/runtime/seo-page-facts.d.ts +61 -0
- package/src/lib/runtime/seo-page-facts.js +150 -0
- package/src/lib/runtime/seo-page-facts.js.map +1 -0
- package/src/lib/runtime/site-inventory.d.ts +63 -0
- package/src/lib/runtime/site-inventory.js +230 -0
- package/src/lib/runtime/site-inventory.js.map +1 -0
- package/src/lib/server/ai-admin-org.d.ts +33 -0
- package/src/lib/server/ai-admin-org.js +381 -0
- package/src/lib/server/ai-admin-org.js.map +1 -0
- package/src/lib/server/ai-admin-orgs-spend.d.ts +40 -0
- package/src/lib/server/ai-admin-orgs-spend.js +129 -0
- package/src/lib/server/ai-admin-orgs-spend.js.map +1 -0
- package/src/lib/server/ai-admin-overage.d.ts +19 -0
- package/src/lib/server/ai-admin-overage.js +246 -0
- package/src/lib/server/ai-admin-overage.js.map +1 -0
- package/src/lib/server/ai-admin-signals.d.ts +34 -0
- package/src/lib/server/ai-admin-signals.js +330 -0
- package/src/lib/server/ai-admin-signals.js.map +1 -0
- package/src/lib/server/ai-admin-user.d.ts +27 -0
- package/src/lib/server/ai-admin-user.js +128 -0
- package/src/lib/server/ai-admin-user.js.map +1 -0
- package/src/lib/server/ai-allotments.d.ts +27 -0
- package/src/lib/server/ai-allotments.js +544 -0
- package/src/lib/server/ai-allotments.js.map +1 -0
- package/src/lib/server/ai-assist-prompts.d.ts +102 -0
- package/src/lib/server/ai-assist-prompts.js +207 -0
- package/src/lib/server/ai-assist-prompts.js.map +1 -0
- package/src/lib/server/ai-assist.d.ts +119 -0
- package/src/lib/server/ai-assist.js +517 -0
- package/src/lib/server/ai-assist.js.map +1 -0
- package/src/lib/server/ai-crm-answer.d.ts +30 -0
- package/src/lib/server/ai-crm-answer.js +98 -0
- package/src/lib/server/ai-crm-answer.js.map +1 -0
- package/src/lib/server/ai-generate-component.d.ts +111 -0
- package/src/lib/server/ai-generate-component.js +643 -0
- package/src/lib/server/ai-generate-component.js.map +1 -0
- package/src/lib/server/ai-host-permissions.d.ts +46 -0
- package/src/lib/server/ai-host-permissions.js +204 -0
- package/src/lib/server/ai-host-permissions.js.map +1 -0
- package/src/lib/server/ai-insight-answer.d.ts +30 -0
- package/src/lib/server/ai-insight-answer.js +83 -0
- package/src/lib/server/ai-insight-answer.js.map +1 -0
- package/src/lib/server/ai-insight-digest-route.d.ts +30 -0
- package/src/lib/server/ai-insight-digest-route.js +156 -0
- package/src/lib/server/ai-insight-digest-route.js.map +1 -0
- package/src/lib/server/ai-jobs-batch.d.ts +48 -0
- package/src/lib/server/ai-jobs-batch.js +306 -0
- package/src/lib/server/ai-jobs-batch.js.map +1 -0
- package/src/lib/server/ai-jobs-beat-route.d.ts +36 -0
- package/src/lib/server/ai-jobs-beat-route.js +86 -0
- package/src/lib/server/ai-jobs-beat-route.js.map +1 -0
- package/src/lib/server/ai-jobs-cancel.d.ts +30 -0
- package/src/lib/server/ai-jobs-cancel.js +74 -0
- package/src/lib/server/ai-jobs-cancel.js.map +1 -0
- package/src/lib/server/ai-jobs-events-route.d.ts +31 -0
- package/src/lib/server/ai-jobs-events-route.js +51 -0
- package/src/lib/server/ai-jobs-events-route.js.map +1 -0
- package/src/lib/server/ai-jobs-events.d.ts +55 -0
- package/src/lib/server/ai-jobs-events.js +144 -0
- package/src/lib/server/ai-jobs-events.js.map +1 -0
- package/src/lib/server/ai-jobs-gate.d.ts +47 -0
- package/src/lib/server/ai-jobs-gate.js +106 -0
- package/src/lib/server/ai-jobs-gate.js.map +1 -0
- package/src/lib/server/ai-jobs-resume.d.ts +23 -0
- package/src/lib/server/ai-jobs-resume.js +209 -0
- package/src/lib/server/ai-jobs-resume.js.map +1 -0
- package/src/lib/server/ai-jobs-route.d.ts +32 -0
- package/src/lib/server/ai-jobs-route.js +307 -0
- package/src/lib/server/ai-jobs-route.js.map +1 -0
- package/src/lib/server/ai-models.d.ts +18 -0
- package/src/lib/server/ai-models.js +134 -0
- package/src/lib/server/ai-models.js.map +1 -0
- package/src/lib/server/ai-seo-apply.d.ts +53 -0
- package/src/lib/server/ai-seo-apply.js +294 -0
- package/src/lib/server/ai-seo-apply.js.map +1 -0
- package/src/lib/server/ai-usage.d.ts +18 -0
- package/src/lib/server/ai-usage.js +220 -0
- package/src/lib/server/ai-usage.js.map +1 -0
- package/src/lib/server/assist-chat.d.ts +234 -0
- package/src/lib/server/assist-chat.js +1446 -0
- package/src/lib/server/assist-chat.js.map +1 -0
- package/src/lib/server/assist-edit-applied.d.ts +22 -0
- package/src/lib/server/assist-edit-applied.js +239 -0
- package/src/lib/server/assist-edit-applied.js.map +1 -0
- package/src/lib/server/assist-edit.d.ts +124 -0
- package/src/lib/server/assist-edit.js +1000 -0
- package/src/lib/server/assist-edit.js.map +1 -0
- package/src/lib/server/assist-feedback.d.ts +31 -0
- package/src/lib/server/assist-feedback.js +115 -0
- package/src/lib/server/assist-feedback.js.map +1 -0
- package/src/lib/server/assist-view-context.d.ts +343 -0
- package/src/lib/server/assist-view-context.js +690 -0
- package/src/lib/server/assist-view-context.js.map +1 -0
- package/src/lib/server/billing-credits.d.ts +59 -0
- package/src/lib/server/billing-credits.js +146 -0
- package/src/lib/server/billing-credits.js.map +1 -0
- package/src/lib/server/billing-overage.d.ts +19 -0
- package/src/lib/server/billing-overage.js +337 -0
- package/src/lib/server/billing-overage.js.map +1 -0
- package/src/lib/server.d.ts +32 -0
- package/src/lib/server.js +265 -0
- package/src/lib/server.js.map +1 -0
- package/src/lib/subprocessors.d.ts +18 -0
- package/src/lib/subprocessors.js +52 -0
- package/src/lib/subprocessors.js.map +1 -0
- package/src/lib/tools/ai-component-tool.d.ts +99 -0
- package/src/lib/tools/ai-component-tool.js +369 -0
- package/src/lib/tools/ai-component-tool.js.map +1 -0
- package/src/lib/tools/ai-crm-tool.d.ts +106 -0
- package/src/lib/tools/ai-crm-tool.js +488 -0
- package/src/lib/tools/ai-crm-tool.js.map +1 -0
- package/src/lib/tools/ai-duplicate-resource-tool.d.ts +71 -0
- package/src/lib/tools/ai-duplicate-resource-tool.js +164 -0
- package/src/lib/tools/ai-duplicate-resource-tool.js.map +1 -0
- package/src/lib/tools/ai-experiment-tool.d.ts +40 -0
- package/src/lib/tools/ai-experiment-tool.js +155 -0
- package/src/lib/tools/ai-experiment-tool.js.map +1 -0
- package/src/lib/tools/ai-insight-tool.d.ts +46 -0
- package/src/lib/tools/ai-insight-tool.js +200 -0
- package/src/lib/tools/ai-insight-tool.js.map +1 -0
- package/src/lib/tools/ai-inventory-lookup-tool.d.ts +86 -0
- package/src/lib/tools/ai-inventory-lookup-tool.js +164 -0
- package/src/lib/tools/ai-inventory-lookup-tool.js.map +1 -0
- package/src/lib/tools/ai-products-tool.d.ts +65 -0
- package/src/lib/tools/ai-products-tool.js +644 -0
- package/src/lib/tools/ai-products-tool.js.map +1 -0
- package/src/lib/tools/ai-seo-tool.d.ts +162 -0
- package/src/lib/tools/ai-seo-tool.js +546 -0
- package/src/lib/tools/ai-seo-tool.js.map +1 -0
- package/src/lib/tools/ai-theme-tool.d.ts +101 -0
- package/src/lib/tools/ai-theme-tool.js +562 -0
- package/src/lib/tools/ai-theme-tool.js.map +1 -0
- package/src/lib/tools/ai-workflow-tool.d.ts +166 -0
- package/src/lib/tools/ai-workflow-tool.js +860 -0
- package/src/lib/tools/ai-workflow-tool.js.map +1 -0
- package/src/lib/usage/ai-allotment-alerts.d.ts +72 -0
- package/src/lib/usage/ai-allotment-alerts.js +157 -0
- package/src/lib/usage/ai-allotment-alerts.js.map +1 -0
- package/src/lib/usage/ai-allotments.d.ts +125 -0
- package/src/lib/usage/ai-allotments.js +239 -0
- package/src/lib/usage/ai-allotments.js.map +1 -0
- package/src/lib/usage/ai-model-sample.d.ts +36 -0
- package/src/lib/usage/ai-model-sample.js +68 -0
- package/src/lib/usage/ai-model-sample.js.map +1 -0
- package/src/lib/usage/ai-usage-alerts.d.ts +55 -0
- package/src/lib/usage/ai-usage-alerts.js +114 -0
- package/src/lib/usage/ai-usage-alerts.js.map +1 -0
- package/src/lib/usage/ai-usage-by-user.d.ts +161 -0
- package/src/lib/usage/ai-usage-by-user.js +211 -0
- package/src/lib/usage/ai-usage-by-user.js.map +1 -0
- package/src/lib/usage/ai-usage-eraser.d.ts +29 -0
- package/src/lib/usage/ai-usage-eraser.js +40 -0
- package/src/lib/usage/ai-usage-eraser.js.map +1 -0
- package/src/lib/usage/ai-usage-meter.d.ts +39 -0
- package/src/lib/usage/ai-usage-meter.js +85 -0
- package/src/lib/usage/ai-usage-meter.js.map +1 -0
- package/src/lib/usage/ai-usage-wire.d.ts +184 -0
- package/src/lib/usage/ai-usage-wire.js +98 -0
- package/src/lib/usage/ai-usage-wire.js.map +1 -0
- package/src/lib/usage/assist-ceiling.d.ts +87 -0
- package/src/lib/usage/assist-ceiling.js +110 -0
- package/src/lib/usage/assist-ceiling.js.map +1 -0
- package/src/lib/usage/assist-free-taste.d.ts +225 -0
- package/src/lib/usage/assist-free-taste.js +308 -0
- package/src/lib/usage/assist-free-taste.js.map +1 -0
- package/src/lib/usage/assist-refusals.d.ts +69 -0
- package/src/lib/usage/assist-refusals.js +79 -0
- package/src/lib/usage/assist-refusals.js.map +1 -0
- package/src/lib/usage/assist-signal-mining.d.ts +375 -0
- package/src/lib/usage/assist-signal-mining.js +344 -0
- package/src/lib/usage/assist-signal-mining.js.map +1 -0
- package/src/lib/usage/assist-usage.d.ts +571 -0
- package/src/lib/usage/assist-usage.js +978 -0
- package/src/lib/usage/assist-usage.js.map +1 -0
- package/src/lib/usage/staff-org-ai.d.ts +242 -0
- package/src/lib/usage/staff-org-ai.js +173 -0
- package/src/lib/usage/staff-org-ai.js.map +1 -0
- package/src/lib/usage/staff-org-usage-ai.d.ts +83 -0
- package/src/lib/usage/staff-org-usage-ai.js +59 -0
- package/src/lib/usage/staff-org-usage-ai.js.map +1 -0
- package/src/lib/usage/staff-orgs-ai-spend.d.ts +83 -0
- package/src/lib/usage/staff-orgs-ai-spend.js +114 -0
- package/src/lib/usage/staff-orgs-ai-spend.js.map +1 -0
|
@@ -0,0 +1,557 @@
|
|
|
1
|
+
import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2026 Aglyn LLC
|
|
5
|
+
*
|
|
6
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
* you may not use this file except in compliance with the License.
|
|
8
|
+
* You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*/ import { createResourceUid } from "@aglyn/aglyn/app-utils/create-resource-uid";
|
|
18
|
+
import { uniqueDuplicateName } from "@aglyn/aglyn/app-utils/duplicate-resource";
|
|
19
|
+
import { FORM_COMPONENT_ID, normalizeFormSlug } from "@aglyn/aglyn/app-utils/forms";
|
|
20
|
+
import { nameSearchKey } from "@aglyn/aglyn/app-utils/name-search";
|
|
21
|
+
import { checkDatasetQuota, checkEntitlement, checkQuota, resolveEffectivePlan, resolveOrgEntitlements } from "@aglyn/aglyn/app-utils/plan-entitlements";
|
|
22
|
+
import { billableScreenIds, normalizeScreenSlug, reservedScreenRouteSegment, SCREEN_ROOT_PATH } from "@aglyn/aglyn/app-utils/screen-route";
|
|
23
|
+
import { decodeStoredNodes, encodeStoredNodes } from "@aglyn/aglyn/app-utils/stored-nodes";
|
|
24
|
+
import { resolveOrgIdForHost } from "@aglyn/tenant-data-admin/server/organizations";
|
|
25
|
+
import { aiUnrestrictedPlanCapabilities } from "../model/ai-plan-capabilities.js";
|
|
26
|
+
/** The console host resources route's allow-list for each kind. */ export const AI_DRAFT_FIELDS = {
|
|
27
|
+
layout: [
|
|
28
|
+
'displayName',
|
|
29
|
+
'description',
|
|
30
|
+
'versionId'
|
|
31
|
+
],
|
|
32
|
+
template: [
|
|
33
|
+
'kind',
|
|
34
|
+
'displayName',
|
|
35
|
+
'description',
|
|
36
|
+
'placeholders',
|
|
37
|
+
'nodes',
|
|
38
|
+
'rootId',
|
|
39
|
+
'props',
|
|
40
|
+
'slug',
|
|
41
|
+
'seo'
|
|
42
|
+
],
|
|
43
|
+
form: [
|
|
44
|
+
'displayName',
|
|
45
|
+
'slug',
|
|
46
|
+
'fields',
|
|
47
|
+
'consentFieldName',
|
|
48
|
+
'routing',
|
|
49
|
+
'legacyMatch',
|
|
50
|
+
'rootId',
|
|
51
|
+
'nodes'
|
|
52
|
+
],
|
|
53
|
+
component: [
|
|
54
|
+
'displayName',
|
|
55
|
+
'description',
|
|
56
|
+
'rootId',
|
|
57
|
+
'nodes',
|
|
58
|
+
'props'
|
|
59
|
+
],
|
|
60
|
+
// `kind` is on the route's list for the email composer; a page has none, and
|
|
61
|
+
// the writer never sends one.
|
|
62
|
+
screen: [
|
|
63
|
+
'displayName',
|
|
64
|
+
'description',
|
|
65
|
+
'slug',
|
|
66
|
+
'seo',
|
|
67
|
+
'kind',
|
|
68
|
+
'versionId'
|
|
69
|
+
]
|
|
70
|
+
};
|
|
71
|
+
/** The keys a layout's first version is seeded with, all on the versions route's list. */ export const AI_DRAFT_VERSION_FIELDS = [
|
|
72
|
+
'layoutId',
|
|
73
|
+
'hostId',
|
|
74
|
+
'displayName',
|
|
75
|
+
'nodes'
|
|
76
|
+
];
|
|
77
|
+
/**
|
|
78
|
+
* The keys a screen's first version is seeded with, all on the versions
|
|
79
|
+
* route's list: the screen it belongs to, the site, the label, the tree, and
|
|
80
|
+
* the layout it renders inside when the plan names one the site has.
|
|
81
|
+
*/ export const AI_DRAFT_SCREEN_VERSION_FIELDS = [
|
|
82
|
+
'screenId',
|
|
83
|
+
'hostId',
|
|
84
|
+
'displayName',
|
|
85
|
+
'nodes',
|
|
86
|
+
'layoutId'
|
|
87
|
+
];
|
|
88
|
+
/** The label on a generated draft's first version, as on one Use template makes. */ export const AI_DRAFT_VERSION_NAME = 'Initial version';
|
|
89
|
+
/** The route's refusal when the site's plan does not include the kind at all. */ export const AI_DRAFT_ENTITLEMENT_REFUSAL = 'This feature is not included in your plan — see Billing';
|
|
90
|
+
/** Each kind's collection, counter, feature and label, as the create route declares them. */ export const AI_DRAFT_BANDS = {
|
|
91
|
+
layout: {
|
|
92
|
+
collection: 'layouts',
|
|
93
|
+
quotaKey: 'sharedLayoutsPerHost',
|
|
94
|
+
label: 'shared layouts'
|
|
95
|
+
},
|
|
96
|
+
template: {
|
|
97
|
+
collection: 'templates',
|
|
98
|
+
quotaKey: 'templatesPerHost',
|
|
99
|
+
label: 'templates'
|
|
100
|
+
},
|
|
101
|
+
form: {
|
|
102
|
+
collection: 'forms',
|
|
103
|
+
quotaKey: 'formsPerHost',
|
|
104
|
+
entitlement: 'reusableComponents',
|
|
105
|
+
label: 'forms'
|
|
106
|
+
},
|
|
107
|
+
component: {
|
|
108
|
+
collection: 'components',
|
|
109
|
+
entitlement: 'reusableComponents',
|
|
110
|
+
label: 'reusable components'
|
|
111
|
+
},
|
|
112
|
+
screen: {
|
|
113
|
+
collection: 'screens',
|
|
114
|
+
quotaKey: 'screensPerHost',
|
|
115
|
+
label: 'screens'
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
function draftCollection(firestore, hostId, kind) {
|
|
119
|
+
return firestore.collection('hosts').doc(hostId).collection(AI_DRAFT_BANDS[kind].collection);
|
|
120
|
+
}
|
|
121
|
+
/** The fields the band, the name, the address and a deletion are read from. */ function siblingsOf(collection) {
|
|
122
|
+
return collection.select('displayName', 'slug', 'kind', 'source.type', 'deletedAt');
|
|
123
|
+
}
|
|
124
|
+
function siblingRows(snapshot) {
|
|
125
|
+
return snapshot.docs.map((doc)=>{
|
|
126
|
+
var _doc_get, _doc_get1;
|
|
127
|
+
return {
|
|
128
|
+
id: doc.id,
|
|
129
|
+
name: String((_doc_get = doc.get('displayName')) != null ? _doc_get : ''),
|
|
130
|
+
slug: String((_doc_get1 = doc.get('slug')) != null ? _doc_get1 : ''),
|
|
131
|
+
kind: doc.get('kind'),
|
|
132
|
+
sourceType: doc.get('source.type'),
|
|
133
|
+
deletedAt: doc.get('deletedAt'),
|
|
134
|
+
deleted: doc.get('deletedAt') != null
|
|
135
|
+
};
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
function subdomainOf(host) {
|
|
139
|
+
const subdomain = host.get('subdomain');
|
|
140
|
+
return typeof subdomain === 'string' && subdomain ? subdomain : null;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* The route's refusal when the site's plan does not include the kind, or
|
|
144
|
+
* holds no more of it; `null` while it does. The feature is asked first, as
|
|
145
|
+
* the route asks it before it counts.
|
|
146
|
+
*/ export function aiDraftBandRefusal(kind, rows, org, routingMap) {
|
|
147
|
+
const band = AI_DRAFT_BANDS[kind];
|
|
148
|
+
if (band.entitlement && !checkEntitlement(org, band.entitlement)) {
|
|
149
|
+
return AI_DRAFT_ENTITLEMENT_REFUSAL;
|
|
150
|
+
}
|
|
151
|
+
if (!band.quotaKey) return null;
|
|
152
|
+
const used = kind === 'template' ? rows.filter((row)=>row.sourceType !== undefined && row.sourceType !== 'starter').length : kind === 'screen' ? billableScreenIds(rows.map((row)=>({
|
|
153
|
+
id: row.id,
|
|
154
|
+
kind: row.kind,
|
|
155
|
+
deletedAt: row.deletedAt
|
|
156
|
+
})), routingMap != null ? routingMap : undefined).size : rows.length;
|
|
157
|
+
const quota = checkQuota(org, band.quotaKey, used);
|
|
158
|
+
return quota.allowed ? null : `Your plan includes ${quota.limit} ${band.label} — upgrade in Billing for more`;
|
|
159
|
+
}
|
|
160
|
+
/** The draft kinds a plan's creations land as, whose band a plan is told about (AGL-3030). */ const AI_PLAN_DRAFT_KINDS = [
|
|
161
|
+
'component',
|
|
162
|
+
'form',
|
|
163
|
+
'layout',
|
|
164
|
+
'template'
|
|
165
|
+
];
|
|
166
|
+
/** Every draft kind's plural label made singular, for a band of one. */ function bandLabel(label, count) {
|
|
167
|
+
return count === 1 ? label.replace(/s$/, '') : label;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Whether the site may take `used + 1` of a kind, in the create route's
|
|
171
|
+
* arithmetic: the feature first, then the allowance. `null` for a kind whose
|
|
172
|
+
* allowance is unlimited or counts nothing, which needs no rows read.
|
|
173
|
+
*/ function planCreation(kind, org, rows) {
|
|
174
|
+
const band = AI_DRAFT_BANDS[kind];
|
|
175
|
+
if (band.entitlement && !checkEntitlement(org, band.entitlement)) {
|
|
176
|
+
return {
|
|
177
|
+
allowed: false,
|
|
178
|
+
left: 0,
|
|
179
|
+
reason: `this workspace's plan does not include ${kind === 'form' ? 'saved forms' : band.label}`
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
const limit = band.quotaKey ? resolveOrgEntitlements(org)[band.quotaKey] : Number.POSITIVE_INFINITY;
|
|
183
|
+
if (!rows || !Number.isFinite(limit)) return {
|
|
184
|
+
allowed: true,
|
|
185
|
+
left: null,
|
|
186
|
+
reason: null
|
|
187
|
+
};
|
|
188
|
+
// The route's own arithmetic decides; the count beside it is what is left.
|
|
189
|
+
const refusal = aiDraftBandRefusal(kind, rows, org);
|
|
190
|
+
const used = kind === 'template' ? rows.filter((row)=>row.sourceType !== undefined && row.sourceType !== 'starter').length : rows.length;
|
|
191
|
+
return refusal ? {
|
|
192
|
+
allowed: false,
|
|
193
|
+
left: 0,
|
|
194
|
+
reason: `this site already holds the ${limit} ${bandLabel(band.label, limit)} its plan includes`
|
|
195
|
+
} : {
|
|
196
|
+
allowed: true,
|
|
197
|
+
left: Math.max(0, limit - used),
|
|
198
|
+
reason: null
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
/** Whether a kind's rows are counted at all on this plan: included, and under a finite allowance. */ function countsRows(kind, org) {
|
|
202
|
+
const band = AI_DRAFT_BANDS[kind];
|
|
203
|
+
if (!band.quotaKey) return false;
|
|
204
|
+
if (band.entitlement && !checkEntitlement(org, band.entitlement)) return false;
|
|
205
|
+
return Number.isFinite(resolveOrgEntitlements(org)[band.quotaKey]);
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* What a plan may create on this site (AGL-3030), from the workspace's plan
|
|
209
|
+
* and the rows each counted kind already holds — pure, so the specs and the
|
|
210
|
+
* eval harness hold the arithmetic without a Firestore. A kind whose rows
|
|
211
|
+
* are not given is counted as having room, which is what an unlimited
|
|
212
|
+
* allowance means.
|
|
213
|
+
*
|
|
214
|
+
* A theme change is a proposal a member applies, never a draft, so it counts
|
|
215
|
+
* against nothing. A dataset is org data that no job writes; a plan may name
|
|
216
|
+
* one only where the workspace's plan includes datasets at all. An email
|
|
217
|
+
* design is written by the email plugin, whose own gate decides.
|
|
218
|
+
*
|
|
219
|
+
* A workspace on the Free plan spends the Free taste, a wall of monthly
|
|
220
|
+
* credits, so its plan is held to the sections that wall pays for (AGL-3070).
|
|
221
|
+
* The effective plan decides, as it decides the taste's own allowance: a
|
|
222
|
+
* workspace whose subscription died is Free again.
|
|
223
|
+
*/ export function aiPlanCapabilitiesFrom(org, rows = {}) {
|
|
224
|
+
var _rows_component, _rows_form, _rows_layout, _rows_template;
|
|
225
|
+
const unrestricted = aiUnrestrictedPlanCapabilities();
|
|
226
|
+
const datasets = checkDatasetQuota(org, 0).limit > 0;
|
|
227
|
+
return _extends({
|
|
228
|
+
reusableComponents: checkEntitlement(org, 'reusableComponents'),
|
|
229
|
+
create: _extends({}, unrestricted.create, {
|
|
230
|
+
component: planCreation('component', org, (_rows_component = rows.component) != null ? _rows_component : null),
|
|
231
|
+
form: planCreation('form', org, (_rows_form = rows.form) != null ? _rows_form : null),
|
|
232
|
+
layout: planCreation('layout', org, (_rows_layout = rows.layout) != null ? _rows_layout : null),
|
|
233
|
+
template: planCreation('template', org, (_rows_template = rows.template) != null ? _rows_template : null),
|
|
234
|
+
dataset: datasets ? unrestricted.create.dataset : {
|
|
235
|
+
allowed: false,
|
|
236
|
+
left: 0,
|
|
237
|
+
reason: "this workspace's plan does not include datasets"
|
|
238
|
+
}
|
|
239
|
+
})
|
|
240
|
+
}, resolveEffectivePlan(org) === 'free' ? {
|
|
241
|
+
freeTaste: true
|
|
242
|
+
} : {});
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* What a plan may create on this site, read: the rows of each kind whose
|
|
246
|
+
* allowance the workspace's plan counts, as the draft writer reads them, and
|
|
247
|
+
* nothing for a kind the plan leaves out or leaves unlimited.
|
|
248
|
+
*/ export async function readAiPlanCapabilities(firestore, input) {
|
|
249
|
+
const counted = AI_PLAN_DRAFT_KINDS.filter((kind)=>countsRows(kind, input.org));
|
|
250
|
+
const snapshots = await Promise.all(counted.map((kind)=>siblingsOf(draftCollection(firestore, input.hostId, kind)).get()));
|
|
251
|
+
return aiPlanCapabilitiesFrom(input.org, Object.fromEntries(counted.map((kind, index)=>[
|
|
252
|
+
kind,
|
|
253
|
+
siblingRows(snapshots[index])
|
|
254
|
+
])));
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Whether the site can take one more draft of the kind: a read, for a door
|
|
258
|
+
* that asks before it spends. The write asks again inside its transaction.
|
|
259
|
+
*/ export async function aiDraftAllowanceRefusal(firestore, input) {
|
|
260
|
+
const [snapshot, host] = await Promise.all([
|
|
261
|
+
siblingsOf(draftCollection(firestore, input.hostId, input.kind)).get(),
|
|
262
|
+
input.kind === 'screen' ? firestore.collection('hosts').doc(input.hostId).get() : Promise.resolve(null)
|
|
263
|
+
]);
|
|
264
|
+
return aiDraftBandRefusal(input.kind, siblingRows(snapshot), input.org, host == null ? void 0 : host.get('screens'));
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* A draft screen's one-segment address: the one asked for, else one from its
|
|
268
|
+
* name, never a reserved segment, and never an address a live screen keeps
|
|
269
|
+
* or the routing map already serves — so the member's publish at it later
|
|
270
|
+
* takes nothing from a live page. The root is asked for only while no screen
|
|
271
|
+
* holds it.
|
|
272
|
+
*/ export function aiDraftScreenSlug(requested, name, rows, routingMap) {
|
|
273
|
+
var _ref, _usable;
|
|
274
|
+
const taken = new Set([
|
|
275
|
+
...rows.filter((row)=>!row.deleted && row.slug).map((row)=>row.slug),
|
|
276
|
+
...Object.values(routingMap != null ? routingMap : {}).filter((path)=>typeof path === 'string')
|
|
277
|
+
]);
|
|
278
|
+
const usable = (value)=>value && !reservedScreenRouteSegment(value) && !(value === SCREEN_ROOT_PATH && taken.has(value)) ? value : undefined;
|
|
279
|
+
const base = (_ref = (_usable = usable(normalizeScreenSlug(requested != null ? requested : undefined))) != null ? _usable : usable(normalizeScreenSlug(name))) != null ? _ref : 'page';
|
|
280
|
+
if (base === SCREEN_ROOT_PATH) return base;
|
|
281
|
+
let slug = base;
|
|
282
|
+
let attempt = 2;
|
|
283
|
+
while(taken.has(slug))slug = `${base}-${attempt++}`;
|
|
284
|
+
return slug;
|
|
285
|
+
}
|
|
286
|
+
function recordOf(id, draft, host) {
|
|
287
|
+
var _draft_get;
|
|
288
|
+
const versionId = draft.get('versionId');
|
|
289
|
+
const seo = draft.get('seo');
|
|
290
|
+
return _extends({
|
|
291
|
+
id,
|
|
292
|
+
versionId: typeof versionId === 'string' && versionId ? versionId : null,
|
|
293
|
+
name: String((_draft_get = draft.get('displayName')) != null ? _draft_get : ''),
|
|
294
|
+
hostSubdomain: subdomainOf(host)
|
|
295
|
+
}, seo && typeof seo === 'object' ? {
|
|
296
|
+
seo: seo
|
|
297
|
+
} : {}, draft.get('deletedAt') != null ? {
|
|
298
|
+
deleted: true
|
|
299
|
+
} : {});
|
|
300
|
+
}
|
|
301
|
+
/** The draft a job already wrote under `id`, when a run of its step got that far. */ export async function readAiDraft(firestore, input) {
|
|
302
|
+
const draft = await draftCollection(firestore, input.hostId, input.kind).doc(input.id).get();
|
|
303
|
+
if (!draft.exists) return null;
|
|
304
|
+
return recordOf(input.id, draft, await firestore.collection('hosts').doc(input.hostId).get());
|
|
305
|
+
}
|
|
306
|
+
/** The tree a versioned draft's first version holds now, decoded; `null` when there is none. */ export async function readAiDraftNodes(firestore, input) {
|
|
307
|
+
const draftRef = draftCollection(firestore, input.hostId, input.kind).doc(input.id);
|
|
308
|
+
const draft = await draftRef.get();
|
|
309
|
+
const versionId = draft.exists ? draft.get('versionId') : null;
|
|
310
|
+
if (typeof versionId !== 'string' || !versionId) return null;
|
|
311
|
+
const version = await draftRef.collection('versions').doc(versionId).get();
|
|
312
|
+
const nodes = version.exists ? decodeStoredNodes(version.get('nodes')) : null;
|
|
313
|
+
return nodes ? {
|
|
314
|
+
versionId,
|
|
315
|
+
nodes
|
|
316
|
+
} : null;
|
|
317
|
+
}
|
|
318
|
+
/** Keep only the keys the create route admits for the kind. */ function allowListed(kind, data) {
|
|
319
|
+
const allowed = new Set(AI_DRAFT_FIELDS[kind]);
|
|
320
|
+
return Object.fromEntries(Object.entries(data).filter(([key, value])=>allowed.has(key) && value !== undefined));
|
|
321
|
+
}
|
|
322
|
+
/** The node map with its form node captioned with `name`, as Create captions a new form. */ function withFormCaption(nodes, formNodeId, name) {
|
|
323
|
+
var _node_props;
|
|
324
|
+
const node = nodes[formNodeId];
|
|
325
|
+
if (!node || node.componentId !== FORM_COMPONENT_ID) return nodes;
|
|
326
|
+
return _extends({}, nodes, {
|
|
327
|
+
[formNodeId]: _extends({}, node, {
|
|
328
|
+
props: _extends({}, (_node_props = node.props) != null ? _node_props : {}, {
|
|
329
|
+
formName: name
|
|
330
|
+
})
|
|
331
|
+
})
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Write one draft: the band met, the name made unique among the live
|
|
336
|
+
* siblings, the node map stored as msgpack, all in one transaction. A
|
|
337
|
+
* refusal is returned, never thrown; a Firestore failure propagates, so the
|
|
338
|
+
* machine's retry applies.
|
|
339
|
+
*/ export async function writeAiDraft(firestore, input) {
|
|
340
|
+
const packed = encodeStoredNodes(input.nodes);
|
|
341
|
+
if (!packed) throw new Error('an AI draft needs a node map');
|
|
342
|
+
if (input.kind === 'form' && !input.form) throw new Error('an AI form draft needs its declaration');
|
|
343
|
+
if (input.kind === 'component' && !(input.rootId && input.nodes[input.rootId])) {
|
|
344
|
+
throw new Error('a component draft needs a root its node map holds');
|
|
345
|
+
}
|
|
346
|
+
const hostRef = firestore.collection('hosts').doc(input.hostId);
|
|
347
|
+
const collection = draftCollection(firestore, input.hostId, input.kind);
|
|
348
|
+
const draftRef = collection.doc(input.id);
|
|
349
|
+
return firestore.runTransaction(async (tx)=>{
|
|
350
|
+
// Every read before any write, which Firestore requires.
|
|
351
|
+
const [host, existing, siblings] = await Promise.all([
|
|
352
|
+
tx.get(hostRef),
|
|
353
|
+
tx.get(draftRef),
|
|
354
|
+
tx.get(siblingsOf(collection))
|
|
355
|
+
]);
|
|
356
|
+
if (!host.exists) return {
|
|
357
|
+
ok: false,
|
|
358
|
+
status: 404,
|
|
359
|
+
error: 'Unknown site'
|
|
360
|
+
};
|
|
361
|
+
if (existing.exists) {
|
|
362
|
+
return _extends({
|
|
363
|
+
ok: true,
|
|
364
|
+
replayed: true
|
|
365
|
+
}, recordOf(input.id, existing, host));
|
|
366
|
+
}
|
|
367
|
+
const rows = siblingRows(siblings);
|
|
368
|
+
// Read, never written: the routing map decides which screens count.
|
|
369
|
+
const routingMap = host.get('screens');
|
|
370
|
+
const refusal = aiDraftBandRefusal(input.kind, rows, input.org, routingMap);
|
|
371
|
+
if (refusal) return {
|
|
372
|
+
ok: false,
|
|
373
|
+
status: 403,
|
|
374
|
+
error: refusal
|
|
375
|
+
};
|
|
376
|
+
const name = uniqueDuplicateName(input.name, rows.filter((row)=>!row.deleted).map((row)=>row.name));
|
|
377
|
+
const stamps = {
|
|
378
|
+
createdAt: input.now,
|
|
379
|
+
updatedAt: input.now,
|
|
380
|
+
createdBy: input.uid
|
|
381
|
+
};
|
|
382
|
+
const nodes = Buffer.from(packed);
|
|
383
|
+
let versionId = null;
|
|
384
|
+
if (input.kind === 'layout') {
|
|
385
|
+
versionId = createResourceUid();
|
|
386
|
+
tx.create(draftRef, _extends({}, allowListed('layout', {
|
|
387
|
+
displayName: name,
|
|
388
|
+
versionId
|
|
389
|
+
}), stamps));
|
|
390
|
+
tx.create(draftRef.collection('versions').doc(versionId), _extends({
|
|
391
|
+
layoutId: input.id,
|
|
392
|
+
hostId: input.hostId,
|
|
393
|
+
displayName: AI_DRAFT_VERSION_NAME,
|
|
394
|
+
nodes
|
|
395
|
+
}, stamps));
|
|
396
|
+
} else if (input.kind === 'screen') {
|
|
397
|
+
versionId = createResourceUid();
|
|
398
|
+
const slug = aiDraftScreenSlug(input.slug, name, rows, routingMap);
|
|
399
|
+
tx.create(draftRef, _extends({}, allowListed('screen', {
|
|
400
|
+
displayName: name,
|
|
401
|
+
slug,
|
|
402
|
+
versionId
|
|
403
|
+
}), {
|
|
404
|
+
nameLower: nameSearchKey(name)
|
|
405
|
+
}, stamps));
|
|
406
|
+
tx.create(draftRef.collection('versions').doc(versionId), _extends({
|
|
407
|
+
screenId: input.id,
|
|
408
|
+
hostId: input.hostId,
|
|
409
|
+
displayName: AI_DRAFT_VERSION_NAME,
|
|
410
|
+
nodes
|
|
411
|
+
}, input.layoutId ? {
|
|
412
|
+
layoutId: input.layoutId
|
|
413
|
+
} : {}, stamps));
|
|
414
|
+
} else if (input.kind === 'template') {
|
|
415
|
+
tx.create(draftRef, _extends({}, allowListed('template', {
|
|
416
|
+
kind: 'page',
|
|
417
|
+
displayName: name,
|
|
418
|
+
nodes,
|
|
419
|
+
slug: input.slug || undefined
|
|
420
|
+
}), {
|
|
421
|
+
source: {
|
|
422
|
+
type: 'authored'
|
|
423
|
+
}
|
|
424
|
+
}, stamps));
|
|
425
|
+
} else if (input.kind === 'component') {
|
|
426
|
+
var _input_props;
|
|
427
|
+
tx.create(draftRef, _extends({}, allowListed('component', {
|
|
428
|
+
displayName: name,
|
|
429
|
+
rootId: input.rootId,
|
|
430
|
+
nodes,
|
|
431
|
+
props: ((_input_props = input.props) == null ? void 0 : _input_props.length) ? [
|
|
432
|
+
...input.props
|
|
433
|
+
] : undefined
|
|
434
|
+
}), stamps));
|
|
435
|
+
} else {
|
|
436
|
+
var _encodeStoredNodes, _form_routing;
|
|
437
|
+
const form = input.form;
|
|
438
|
+
const captioned = (_encodeStoredNodes = encodeStoredNodes(withFormCaption(input.nodes, form.formNodeId, name))) != null ? _encodeStoredNodes : packed;
|
|
439
|
+
tx.create(draftRef, _extends({}, allowListed('form', {
|
|
440
|
+
displayName: name,
|
|
441
|
+
slug: normalizeFormSlug(name) || input.id,
|
|
442
|
+
fields: form.fields,
|
|
443
|
+
consentFieldName: form.consentFieldName || undefined,
|
|
444
|
+
routing: (_form_routing = form.routing) != null ? _form_routing : undefined,
|
|
445
|
+
rootId: form.rootId,
|
|
446
|
+
nodes: Buffer.from(captioned)
|
|
447
|
+
}), stamps));
|
|
448
|
+
}
|
|
449
|
+
return {
|
|
450
|
+
ok: true,
|
|
451
|
+
replayed: false,
|
|
452
|
+
id: input.id,
|
|
453
|
+
versionId,
|
|
454
|
+
name,
|
|
455
|
+
hostSubdomain: subdomainOf(host)
|
|
456
|
+
};
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* Change the tree of a versioned draft the job wrote, in one transaction:
|
|
461
|
+
* read the first version as it is stored NOW — a member may have opened and
|
|
462
|
+
* saved it — hand it to `update`, and store what comes back with a fresh
|
|
463
|
+
* `updatedAt`, which is what the besigner's save guard compares. `update`
|
|
464
|
+
* answering `null` changes nothing: a pass run again after its write.
|
|
465
|
+
*/ export async function updateAiDraftNodes(firestore, input) {
|
|
466
|
+
const draftRef = draftCollection(firestore, input.hostId, input.kind).doc(input.id);
|
|
467
|
+
return firestore.runTransaction(async (tx)=>{
|
|
468
|
+
const draft = await tx.get(draftRef);
|
|
469
|
+
const versionId = draft.exists && draft.get('deletedAt') == null ? draft.get('versionId') : null;
|
|
470
|
+
if (typeof versionId !== 'string' || !versionId) {
|
|
471
|
+
return {
|
|
472
|
+
ok: false,
|
|
473
|
+
status: 404,
|
|
474
|
+
error: 'The draft is no longer on the site'
|
|
475
|
+
};
|
|
476
|
+
}
|
|
477
|
+
const versionRef = draftRef.collection('versions').doc(versionId);
|
|
478
|
+
const version = await tx.get(versionRef);
|
|
479
|
+
const nodes = version.exists ? decodeStoredNodes(version.get('nodes')) : null;
|
|
480
|
+
if (!nodes) return {
|
|
481
|
+
ok: false,
|
|
482
|
+
status: 404,
|
|
483
|
+
error: 'The draft is no longer on the site'
|
|
484
|
+
};
|
|
485
|
+
const next = input.update(nodes);
|
|
486
|
+
if (!next) return {
|
|
487
|
+
ok: true,
|
|
488
|
+
changed: false
|
|
489
|
+
};
|
|
490
|
+
const packed = encodeStoredNodes(next);
|
|
491
|
+
if (!packed) throw new Error('an AI draft needs a node map');
|
|
492
|
+
tx.update(versionRef, {
|
|
493
|
+
nodes: Buffer.from(packed),
|
|
494
|
+
updatedAt: input.now
|
|
495
|
+
});
|
|
496
|
+
return {
|
|
497
|
+
ok: true,
|
|
498
|
+
changed: true
|
|
499
|
+
};
|
|
500
|
+
});
|
|
501
|
+
}
|
|
502
|
+
/**
|
|
503
|
+
* Put a search title and description on a draft screen the job wrote, each
|
|
504
|
+
* only where the draft has none: a value a member typed since is theirs.
|
|
505
|
+
*/ export async function writeAiDraftScreenSeo(firestore, input) {
|
|
506
|
+
const ref = draftCollection(firestore, input.hostId, 'screen').doc(input.id);
|
|
507
|
+
await firestore.runTransaction(async (tx)=>{
|
|
508
|
+
const screen = await tx.get(ref);
|
|
509
|
+
if (!screen.exists || screen.get('deletedAt') != null) return;
|
|
510
|
+
const patch = {};
|
|
511
|
+
for (const key of [
|
|
512
|
+
'title',
|
|
513
|
+
'description'
|
|
514
|
+
]){
|
|
515
|
+
var _input_seo_key, _screen_get;
|
|
516
|
+
const value = String((_input_seo_key = input.seo[key]) != null ? _input_seo_key : '').trim();
|
|
517
|
+
if (value && !String((_screen_get = screen.get(`seo.${key}`)) != null ? _screen_get : '').trim()) patch[`seo.${key}`] = value;
|
|
518
|
+
}
|
|
519
|
+
if (Object.keys(patch).length) tx.update(ref, _extends({}, patch, {
|
|
520
|
+
updatedAt: input.now
|
|
521
|
+
}));
|
|
522
|
+
});
|
|
523
|
+
}
|
|
524
|
+
/** The site's subdomain, which a console link names the site by. */ export async function aiSiteSubdomain(firestore, hostId) {
|
|
525
|
+
return subdomainOf(await firestore.collection('hosts').doc(hostId).get());
|
|
526
|
+
}
|
|
527
|
+
/**
|
|
528
|
+
* What a door says before a job that writes a draft of this kind exists: a
|
|
529
|
+
* site is named, and it is the job's own org's; whatever the kind checks of
|
|
530
|
+
* its own; then the allowance. `null` admits the job.
|
|
531
|
+
*/ export async function aiDraftAdmissionRefusal(firestore, input) {
|
|
532
|
+
if (!input.hostId) {
|
|
533
|
+
var _input_noun;
|
|
534
|
+
return {
|
|
535
|
+
status: 400,
|
|
536
|
+
error: `Open the site the ${(_input_noun = input.noun) != null ? _input_noun : input.kind} is for before starting the job`
|
|
537
|
+
};
|
|
538
|
+
}
|
|
539
|
+
const owner = await resolveOrgIdForHost(input.hostId);
|
|
540
|
+
if (!owner || owner !== input.orgId) return {
|
|
541
|
+
status: 404,
|
|
542
|
+
error: 'Unknown site'
|
|
543
|
+
};
|
|
544
|
+
const own = await (input.ownCheck == null ? void 0 : input.ownCheck.call(input, input.hostId));
|
|
545
|
+
if (own) return own;
|
|
546
|
+
const refusal = await aiDraftAllowanceRefusal(firestore, {
|
|
547
|
+
kind: input.kind,
|
|
548
|
+
hostId: input.hostId,
|
|
549
|
+
org: input.org
|
|
550
|
+
});
|
|
551
|
+
return refusal ? {
|
|
552
|
+
status: 403,
|
|
553
|
+
error: refusal
|
|
554
|
+
} : null;
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
//# sourceMappingURL=ai-job-drafts.js.map
|