@happyvertical/smrt-subscriptions 0.57.9 → 0.57.11
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/AGENTS.md +21 -0
- package/README.md +112 -3
- package/dist/chunks/SubscriptionPlanCollection-CqlYYtPg.js +229 -0
- package/dist/chunks/SubscriptionPlanCollection-CqlYYtPg.js.map +1 -0
- package/dist/chunks/SubscriptionPlanVersionCollection-CV0QPmp0.js +193 -0
- package/dist/chunks/SubscriptionPlanVersionCollection-CV0QPmp0.js.map +1 -0
- package/dist/chunks/plan-terms-BoeXvDhs.js +219 -0
- package/dist/chunks/plan-terms-BoeXvDhs.js.map +1 -0
- package/dist/chunks/plan-versioning-Bp0NqTJf.js +142 -0
- package/dist/chunks/plan-versioning-Bp0NqTJf.js.map +1 -0
- package/dist/chunks/rolldown-runtime-D7D4PA-g.js +13 -0
- package/dist/collections/SubscriptionPlanVersionCollection.d.ts +33 -0
- package/dist/collections/SubscriptionPlanVersionCollection.d.ts.map +1 -0
- package/dist/collections/index.d.ts +1 -0
- package/dist/collections/index.d.ts.map +1 -1
- package/dist/index.d.ts +7 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +181 -349
- package/dist/index.js.map +1 -1
- package/dist/manifest.json +1114 -328
- package/dist/migrations/planVersions.d.ts +16 -0
- package/dist/migrations/planVersions.d.ts.map +1 -0
- package/dist/models/SubscriptionPlan.d.ts +39 -3
- package/dist/models/SubscriptionPlan.d.ts.map +1 -1
- package/dist/models/SubscriptionPlanVersion.d.ts +51 -0
- package/dist/models/SubscriptionPlanVersion.d.ts.map +1 -0
- package/dist/models/TenantSubscription.d.ts +49 -1
- package/dist/models/TenantSubscription.d.ts.map +1 -1
- package/dist/models/index.d.ts +1 -0
- package/dist/models/index.d.ts.map +1 -1
- package/dist/plan-terms.d.ts +26 -0
- package/dist/plan-terms.d.ts.map +1 -0
- package/dist/plan-versioning.d.ts +45 -0
- package/dist/plan-versioning.d.ts.map +1 -0
- package/dist/services/index.d.ts +1 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/subscription-resolver.d.ts +26 -0
- package/dist/services/subscription-resolver.d.ts.map +1 -1
- package/dist/smrt-knowledge.json +547 -7
- package/dist/types.d.ts +72 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +6 -6
package/dist/index.js
CHANGED
|
@@ -1,339 +1,13 @@
|
|
|
1
|
+
import { t as __exportAll } from "./chunks/rolldown-runtime-D7D4PA-g.js";
|
|
2
|
+
import { _ as subscriberToColumns, a as samePlanTerms, c as deterministicUuid, d as isValidThreshold, f as normalizeFeatureGrants, g as stringifyJson, h as parseJsonObject, i as isEntitlementUpgrade, l as getWindowForThreshold, n as enabledFeatureKeys, o as validThresholds, p as normalizeSubscriber, r as extractPlanTerms, s as assertSubscriberInvariant, t as PLAN_TERM_FIELDS, u as getWindowKey, v as tenantKey } from "./chunks/plan-terms-BoeXvDhs.js";
|
|
3
|
+
import { r as SubscriptionPlan, t as SubscriptionPlanCollection } from "./chunks/SubscriptionPlanCollection-CqlYYtPg.js";
|
|
4
|
+
import { r as SubscriptionPlanVersion, t as SubscriptionPlanVersionCollection } from "./chunks/SubscriptionPlanVersionCollection-CV0QPmp0.js";
|
|
5
|
+
import { r as snapshotLegacyPlanVersion, t as pinSubscriptionPlanVersion } from "./chunks/plan-versioning-Bp0NqTJf.js";
|
|
1
6
|
import { ObjectRegistry, SmrtCollection, SmrtObject, crossPackageRef, field, foreignKey, isDatabaseInterface, isEmbeddedDatabase, isPostgresDatabase, smrt, withEmbeddedWriteTransaction } from "@happyvertical/smrt-core";
|
|
2
7
|
import { TenantIsolationError, TenantScoped, getTenantId, isSuperAdminBypass, isSystemContext, tenantId, withSystemContext } from "@happyvertical/smrt-tenancy";
|
|
3
8
|
import { preflightMinorUnitsRescale, rescaleMoneyColumnsToMinorUnits } from "@happyvertical/smrt-core/migrations";
|
|
4
|
-
//#region \0rolldown/runtime.js
|
|
5
|
-
var __defProp$5 = Object.defineProperty;
|
|
6
|
-
var __exportAll = (all, no_symbols) => {
|
|
7
|
-
let target = {};
|
|
8
|
-
for (var name in all) __defProp$5(target, name, {
|
|
9
|
-
get: all[name],
|
|
10
|
-
enumerable: true
|
|
11
|
-
});
|
|
12
|
-
if (!no_symbols) __defProp$5(target, Symbol.toStringTag, { value: "Module" });
|
|
13
|
-
return target;
|
|
14
|
-
};
|
|
15
|
-
//#endregion
|
|
16
9
|
//#region src/__smrt-register__.ts
|
|
17
|
-
ObjectRegistry.registerPackageManifest(JSON.parse(`{"version":"1.0.0","timestamp":0,"packageName":"@happyvertical/smrt-subscriptions","packageVersion":"0.57.9","objects":{"@happyvertical/smrt-subscriptions:SubscriptionPlanCollection":{"name":"subscriptionplancollection","className":"SubscriptionPlanCollection","qualifiedName":"@happyvertical/smrt-subscriptions:SubscriptionPlanCollection","collection":"subscriptionplans","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/collections/SubscriptionPlanCollection.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{},"methods":{"findByPlanKey":{"name":"findByPlanKey","async":true,"parameters":[{"name":"tenantId","type":"string | null","optional":false,"unionBranches":[{"type":"string"},{"type":"null"}]},{"name":"planKey","type":"string","optional":false}],"returnType":"Promise<SubscriptionPlan | null>","isStatic":false,"isPublic":true},"findActive":{"name":"findActive","async":true,"parameters":[],"returnType":"Promise<SubscriptionPlan[]>","isStatic":false,"isPublic":true},"findByProviderPriceId":{"name":"findByProviderPriceId","async":true,"parameters":[{"name":"providerPriceId","type":"string","optional":false}],"returnType":"Promise<SubscriptionPlan | null>","isStatic":false,"isPublic":true},"findByStripePriceId":{"name":"findByStripePriceId","async":true,"parameters":[{"name":"stripePriceId","type":"string","optional":false}],"returnType":"Promise<SubscriptionPlan | null>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"_smrt_subscription_plans","api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get"]}},"extends":"SmrtCollection","extendsTypeArg":"SubscriptionPlan","exportName":"SubscriptionPlanCollection","collectionExportName":"SubscriptionPlanCollectionCollection","schema":{"tableName":"_smrt_subscription_plans","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_subscription_plans\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"plan_key\\" TEXT DEFAULT '',\\n \\"name\\" TEXT DEFAULT '',\\n \\"description\\" TEXT DEFAULT '',\\n \\"status\\" TEXT DEFAULT 'active',\\n \\"sort_order\\" INTEGER DEFAULT 0,\\n \\"price_amount\\" INTEGER DEFAULT 0,\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"billing_interval\\" TEXT DEFAULT 'month',\\n \\"pricing_mode\\" TEXT DEFAULT 'fixed',\\n \\"minimum_amount\\" INTEGER DEFAULT 0,\\n \\"suggested_amount\\" INTEGER DEFAULT 0,\\n \\"external_provider\\" TEXT,\\n \\"provider_product_id\\" TEXT,\\n \\"provider_price_id\\" TEXT,\\n \\"stripe_product_id\\" TEXT,\\n \\"stripe_price_id\\" TEXT,\\n \\"features\\" TEXT DEFAULT '[]',\\n \\"thresholds\\" TEXT DEFAULT '[]',\\n \\"metadata\\" TEXT DEFAULT '{}'\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false,"unique":false},"plan_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"name":{"type":"TEXT","notNull":false,"unique":false,"default":""},"description":{"type":"TEXT","notNull":false,"unique":false,"default":""},"status":{"type":"TEXT","notNull":false,"unique":false,"default":"active"},"sort_order":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"price_amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"billing_interval":{"type":"TEXT","notNull":false,"unique":false,"default":"month"},"pricing_mode":{"type":"TEXT","notNull":false,"unique":false,"default":"fixed"},"minimum_amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"suggested_amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"external_provider":{"type":"TEXT","notNull":false,"unique":false},"provider_product_id":{"type":"TEXT","notNull":false,"unique":false},"provider_price_id":{"type":"TEXT","notNull":false,"unique":false},"stripe_product_id":{"type":"TEXT","notNull":false,"unique":false},"stripe_price_id":{"type":"TEXT","notNull":false,"unique":false},"features":{"type":"TEXT","notNull":false,"unique":false,"default":"[]"},"thresholds":{"type":"TEXT","notNull":false,"unique":false,"default":"[]"},"metadata":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"}},"indexes":[{"name":"_smrt_subscription_plans_tenant_id_plan_key_idx","columns":["tenant_id","plan_key"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_subscription_plans_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_subscription_plans_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"02602c74"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:TenantSubscriptionCollection":{"name":"tenantsubscriptioncollection","className":"TenantSubscriptionCollection","qualifiedName":"@happyvertical/smrt-subscriptions:TenantSubscriptionCollection","collection":"tenantsubscriptions","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/collections/TenantSubscriptionCollection.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{},"methods":{"findByTenant":{"name":"findByTenant","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<TenantSubscription[]>","isStatic":false,"isPublic":true},"findCurrentForTenant":{"name":"findCurrentForTenant","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false},{"name":"now","type":"any","optional":true}],"returnType":"Promise<TenantSubscription | null>","isStatic":false,"isPublic":true},"findCurrentForSubscriber":{"name":"findCurrentForSubscriber","async":true,"parameters":[{"name":"subscriber","type":"Subscriber","optional":false},{"name":"now","type":"any","optional":true}],"returnType":"Promise<TenantSubscription | null>","isStatic":false,"isPublic":true},"findByStripeSubscriptionId":{"name":"findByStripeSubscriptionId","async":true,"parameters":[{"name":"stripeSubscriptionId","type":"string","optional":false}],"returnType":"Promise<TenantSubscription | null>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"_smrt_tenant_subscriptions","api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get"]}},"extends":"SmrtCollection","extendsTypeArg":"TenantSubscription","exportName":"TenantSubscriptionCollection","collectionExportName":"TenantSubscriptionCollectionCollection","schema":{"tableName":"_smrt_tenant_subscriptions","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_tenant_subscriptions\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"subscriber_kind\\" TEXT DEFAULT 'tenant',\\n \\"subscriber_external_id\\" TEXT DEFAULT '',\\n \\"plan_id\\" UUID,\\n \\"status\\" TEXT DEFAULT 'incomplete',\\n \\"started_at\\" TIMESTAMP,\\n \\"current_period_start\\" TIMESTAMP,\\n \\"current_period_end\\" TIMESTAMP,\\n \\"trial_ends_at\\" TIMESTAMP,\\n \\"cancel_at_period_end\\" BOOLEAN DEFAULT FALSE,\\n \\"canceled_at\\" TIMESTAMP,\\n \\"agreed_amount\\" INTEGER,\\n \\"external_provider\\" TEXT,\\n \\"stripe_customer_id\\" TEXT DEFAULT '',\\n \\"stripe_subscription_id\\" TEXT DEFAULT '',\\n \\"stripe_checkout_session_id\\" TEXT DEFAULT '',\\n \\"metadata\\" TEXT DEFAULT '{}'\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"subscriber_kind":{"type":"TEXT","notNull":false,"unique":false,"default":"tenant"},"subscriber_external_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"plan_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_subscription_plans","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"status":{"type":"TEXT","notNull":false,"unique":false,"default":"incomplete"},"started_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"current_period_start":{"type":"TIMESTAMP","notNull":false,"unique":false},"current_period_end":{"type":"TIMESTAMP","notNull":false,"unique":false},"trial_ends_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"cancel_at_period_end":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false},"canceled_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"agreed_amount":{"type":"INTEGER","notNull":false,"unique":false},"external_provider":{"type":"TEXT","notNull":false,"unique":false},"stripe_customer_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"stripe_subscription_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"stripe_checkout_session_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"metadata":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"}},"indexes":[{"name":"_smrt_tenant_subscriptions_tenant_id_subscriber_kind_idx","columns":["tenant_id","subscriber_kind","subscriber_external_id"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_tenant_subscriptions_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_tenant_subscriptions_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_tenant_subscriptions_plan_id_idx","columns":["plan_id"]}],"version":"2a04942c"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:TenantUsageMetricCollection":{"name":"tenantusagemetriccollection","className":"TenantUsageMetricCollection","qualifiedName":"@happyvertical/smrt-subscriptions:TenantUsageMetricCollection","collection":"tenantusagemetrics","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/collections/TenantUsageMetricCollection.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{},"methods":{"recordUsage":{"name":"recordUsage","async":true,"parameters":[{"name":"options","type":"RecordUsageOptions","optional":false}],"returnType":"Promise<TenantUsageMetric>","isStatic":false,"isPublic":true},"findByTenantAndMetric":{"name":"findByTenantAndMetric","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false},{"name":"metricKey","type":"string","optional":false}],"returnType":"Promise<TenantUsageMetric[]>","isStatic":false,"isPublic":true},"summarizeUsage":{"name":"summarizeUsage","async":true,"parameters":[{"name":"options","type":"SummarizeUsageOptions","optional":false}],"returnType":"Promise<UsageSummary>","isStatic":false,"isPublic":true},"summarizeUsageBatch":{"name":"summarizeUsageBatch","async":true,"parameters":[{"name":"options","type":"SummarizeUsageBatchOptions","optional":false}],"returnType":"Promise<UsageSummary[]>","isStatic":false,"isPublic":true},"summarizeTenantAiUsage":{"name":"summarizeTenantAiUsage","async":true,"parameters":[{"name":"options","type":"SummarizeAiUsageOptions","optional":false}],"returnType":"Promise<AiUsageSummary>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"_smrt_tenant_usage_metrics","api":{"include":["list","get","create"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get","create"]}},"extends":"SmrtCollection","extendsTypeArg":"TenantUsageMetric","exportName":"TenantUsageMetricCollection","collectionExportName":"TenantUsageMetricCollectionCollection","schema":{"tableName":"_smrt_tenant_usage_metrics","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_tenant_usage_metrics\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"subscriber_kind\\" TEXT DEFAULT 'tenant',\\n \\"subscriber_external_id\\" TEXT DEFAULT '',\\n \\"metric_key\\" TEXT DEFAULT '',\\n \\"quantity\\" REAL DEFAULT 0,\\n \\"window_start\\" TIMESTAMP,\\n \\"window_end\\" TIMESTAMP,\\n \\"source\\" TEXT DEFAULT '',\\n \\"source_id\\" TEXT DEFAULT '',\\n \\"project_id\\" TEXT DEFAULT '',\\n \\"work_ref_type\\" TEXT DEFAULT '',\\n \\"work_ref_id\\" TEXT DEFAULT '',\\n \\"provider\\" TEXT DEFAULT '',\\n \\"dimensions\\" TEXT DEFAULT '{}'\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"subscriber_kind":{"type":"TEXT","notNull":false,"unique":false,"default":"tenant"},"subscriber_external_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"metric_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"quantity":{"type":"REAL","notNull":false,"unique":false,"default":0},"window_start":{"type":"TIMESTAMP","notNull":false,"unique":false},"window_end":{"type":"TIMESTAMP","notNull":false,"unique":false},"source":{"type":"TEXT","notNull":false,"unique":false,"default":""},"source_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"project_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"work_ref_type":{"type":"TEXT","notNull":false,"unique":false,"default":""},"work_ref_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"provider":{"type":"TEXT","notNull":false,"unique":false,"default":""},"dimensions":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"}},"indexes":[{"name":"_smrt_tenant_usage_metrics_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"_smrt_tenant_usage_metrics_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"b799c746"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:SubscriptionPlan":{"name":"subscriptionplan","className":"SubscriptionPlan","qualifiedName":"@happyvertical/smrt-subscriptions:SubscriptionPlan","collection":"subscriptionplans","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/SubscriptionPlan.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{"tenantId":{"type":"text","required":false,"_meta":{"sqlType":"UUID","nullable":true,"__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":false,"autoPopulate":true,"nullable":true,"mode":"optional","field":"tenantId","allowSuperAdminBypass":false}}},"planKey":{"type":"text","required":false,"default":""},"name":{"type":"text","required":false,"default":""},"description":{"type":"text","required":false,"default":""},"status":{"type":"text","required":false,"default":"active","enum":["active","archived","draft"]},"sortOrder":{"type":"integer","required":false,"default":0},"priceAmount":{"type":"integer","required":false,"default":0},"currency":{"type":"text","required":false,"default":"USD"},"billingInterval":{"type":"text","required":false,"default":"month","enum":["day","week","month","year"]},"pricingMode":{"type":"text","required":false,"default":"fixed","enum":["free","fixed","pay_what_you_can"]},"minimumAmount":{"type":"integer","required":false,"default":0},"suggestedAmount":{"type":"integer","required":false,"default":0},"externalProvider":{"type":"text","required":false},"providerProductId":{"type":"text","required":false},"providerPriceId":{"type":"text","required":false},"stripeProductId":{"type":"text","required":false},"stripePriceId":{"type":"text","required":false},"features":{"type":"text","required":false,"default":"[]"},"thresholds":{"type":"text","required":false,"default":"[]"},"metadata":{"type":"text","required":false,"default":"{}"}},"methods":{"isActive":{"name":"isActive","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"getFeatureGrants":{"name":"getFeatureGrants","async":false,"parameters":[],"returnType":"PlanFeatureGrant[]","isStatic":false,"isPublic":true},"setFeatureGrants":{"name":"setFeatureGrants","async":false,"parameters":[{"name":"grants","type":"Array<string | PlanFeatureGrant>","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"getFeatureKeys":{"name":"getFeatureKeys","async":false,"parameters":[],"returnType":"string[]","isStatic":false,"isPublic":true},"getThresholds":{"name":"getThresholds","async":false,"parameters":[],"returnType":"PlanThreshold[]","isStatic":false,"isPublic":true},"setThresholds":{"name":"setThresholds","async":false,"parameters":[{"name":"thresholds","type":"PlanThreshold[]","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"getMetadata":{"name":"getMetadata","async":false,"parameters":[],"returnType":"JsonObject","isStatic":false,"isPublic":true},"setMetadata":{"name":"setMetadata","async":false,"parameters":[{"name":"metadata","type":"JsonObject","optional":false}],"returnType":"void","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"_smrt_subscription_plans","api":{"include":["list","get","create","update"]},"cli":{"skipApiCheck":true},"mcp":{"include":["list","get"]},"conflictColumns":["tenant_id","plan_key"],"tenantScoped":{"mode":"optional"}},"extends":"SmrtObject","exportName":"SubscriptionPlan","collectionExportName":"SubscriptionPlanCollection","displayLabelField":"name","schema":{"tableName":"_smrt_subscription_plans","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_subscription_plans\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"plan_key\\" TEXT DEFAULT '',\\n \\"name\\" TEXT DEFAULT '',\\n \\"description\\" TEXT DEFAULT '',\\n \\"status\\" TEXT DEFAULT 'active',\\n \\"sort_order\\" INTEGER DEFAULT 0,\\n \\"price_amount\\" INTEGER DEFAULT 0,\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"billing_interval\\" TEXT DEFAULT 'month',\\n \\"pricing_mode\\" TEXT DEFAULT 'fixed',\\n \\"minimum_amount\\" INTEGER DEFAULT 0,\\n \\"suggested_amount\\" INTEGER DEFAULT 0,\\n \\"external_provider\\" TEXT,\\n \\"provider_product_id\\" TEXT,\\n \\"provider_price_id\\" TEXT,\\n \\"stripe_product_id\\" TEXT,\\n \\"stripe_price_id\\" TEXT,\\n \\"features\\" TEXT DEFAULT '[]',\\n \\"thresholds\\" TEXT DEFAULT '[]',\\n \\"metadata\\" TEXT DEFAULT '{}'\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false,"unique":false},"plan_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"name":{"type":"TEXT","notNull":false,"unique":false,"default":""},"description":{"type":"TEXT","notNull":false,"unique":false,"default":""},"status":{"type":"TEXT","notNull":false,"unique":false,"default":"active"},"sort_order":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"price_amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"billing_interval":{"type":"TEXT","notNull":false,"unique":false,"default":"month"},"pricing_mode":{"type":"TEXT","notNull":false,"unique":false,"default":"fixed"},"minimum_amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"suggested_amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"external_provider":{"type":"TEXT","notNull":false,"unique":false},"provider_product_id":{"type":"TEXT","notNull":false,"unique":false},"provider_price_id":{"type":"TEXT","notNull":false,"unique":false},"stripe_product_id":{"type":"TEXT","notNull":false,"unique":false},"stripe_price_id":{"type":"TEXT","notNull":false,"unique":false},"features":{"type":"TEXT","notNull":false,"unique":false,"default":"[]"},"thresholds":{"type":"TEXT","notNull":false,"unique":false,"default":"[]"},"metadata":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"}},"indexes":[{"name":"_smrt_subscription_plans_tenant_id_plan_key_idx","columns":["tenant_id","plan_key"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_subscription_plans_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_subscription_plans_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"02602c74"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:TenantSubscription":{"name":"tenantsubscription","className":"TenantSubscription","qualifiedName":"@happyvertical/smrt-subscriptions:TenantSubscription","collection":"tenantsubscriptions","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/TenantSubscription.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"subscriberKind":{"type":"text","required":false,"default":"tenant","enum":["tenant","external"]},"subscriberExternalId":{"type":"text","required":false,"default":""},"planId":{"type":"foreignKey","required":false,"related":"SubscriptionPlan"},"status":{"type":"text","required":false,"default":"incomplete","enum":["active","canceled","incomplete","past_due","trialing","unpaid"]},"startedAt":{"type":"datetime","required":false},"currentPeriodStart":{"type":"datetime","required":false},"currentPeriodEnd":{"type":"datetime","required":false},"trialEndsAt":{"type":"datetime","required":false},"cancelAtPeriodEnd":{"type":"boolean","required":false,"default":false},"canceledAt":{"type":"datetime","required":false},"agreedAmount":{"type":"integer","required":false},"externalProvider":{"type":"text","required":false},"stripeCustomerId":{"type":"text","required":false,"default":""},"stripeSubscriptionId":{"type":"text","required":false,"default":""},"stripeCheckoutSessionId":{"type":"text","required":false,"default":""},"metadata":{"type":"text","required":false,"default":"{}"}},"methods":{"isEntitled":{"name":"isEntitled","async":false,"parameters":[{"name":"now","type":"any","optional":true}],"returnType":"boolean","isStatic":false,"isPublic":true},"getSubscriber":{"name":"getSubscriber","async":false,"parameters":[],"returnType":"Subscriber | null","isStatic":false,"isPublic":true},"getMetadata":{"name":"getMetadata","async":false,"parameters":[],"returnType":"JsonObject","isStatic":false,"isPublic":true},"setMetadata":{"name":"setMetadata","async":false,"parameters":[{"name":"metadata","type":"JsonObject","optional":false}],"returnType":"void","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"_smrt_tenant_subscriptions","api":{"include":["list","get","create","update"]},"cli":{"skipApiCheck":true},"mcp":{"include":["list","get"]},"conflictColumns":["tenant_id","subscriber_kind","subscriber_external_id"],"tenantScoped":{"mode":"required"}},"extends":"SmrtObject","exportName":"TenantSubscription","collectionExportName":"TenantSubscriptionCollection","validationRules":[],"schema":{"tableName":"_smrt_tenant_subscriptions","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_tenant_subscriptions\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"subscriber_kind\\" TEXT DEFAULT 'tenant',\\n \\"subscriber_external_id\\" TEXT DEFAULT '',\\n \\"plan_id\\" UUID,\\n \\"status\\" TEXT DEFAULT 'incomplete',\\n \\"started_at\\" TIMESTAMP,\\n \\"current_period_start\\" TIMESTAMP,\\n \\"current_period_end\\" TIMESTAMP,\\n \\"trial_ends_at\\" TIMESTAMP,\\n \\"cancel_at_period_end\\" BOOLEAN DEFAULT FALSE,\\n \\"canceled_at\\" TIMESTAMP,\\n \\"agreed_amount\\" INTEGER,\\n \\"external_provider\\" TEXT,\\n \\"stripe_customer_id\\" TEXT DEFAULT '',\\n \\"stripe_subscription_id\\" TEXT DEFAULT '',\\n \\"stripe_checkout_session_id\\" TEXT DEFAULT '',\\n \\"metadata\\" TEXT DEFAULT '{}'\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"subscriber_kind":{"type":"TEXT","notNull":false,"unique":false,"default":"tenant"},"subscriber_external_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"plan_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_subscription_plans","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"status":{"type":"TEXT","notNull":false,"unique":false,"default":"incomplete"},"started_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"current_period_start":{"type":"TIMESTAMP","notNull":false,"unique":false},"current_period_end":{"type":"TIMESTAMP","notNull":false,"unique":false},"trial_ends_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"cancel_at_period_end":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false},"canceled_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"agreed_amount":{"type":"INTEGER","notNull":false,"unique":false},"external_provider":{"type":"TEXT","notNull":false,"unique":false},"stripe_customer_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"stripe_subscription_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"stripe_checkout_session_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"metadata":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"}},"indexes":[{"name":"_smrt_tenant_subscriptions_tenant_id_subscriber_kind_idx","columns":["tenant_id","subscriber_kind","subscriber_external_id"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_tenant_subscriptions_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_tenant_subscriptions_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_tenant_subscriptions_plan_id_idx","columns":["plan_id"]}],"version":"2a04942c"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:TenantUsageMetric":{"name":"tenantusagemetric","className":"TenantUsageMetric","qualifiedName":"@happyvertical/smrt-subscriptions:TenantUsageMetric","collection":"tenantusagemetrics","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/TenantUsageMetric.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"subscriberKind":{"type":"text","required":false,"default":"tenant","enum":["tenant","external"]},"subscriberExternalId":{"type":"text","required":false,"default":""},"metricKey":{"type":"text","required":false,"default":""},"quantity":{"type":"decimal","required":false,"default":0},"windowStart":{"type":"datetime","required":false},"windowEnd":{"type":"datetime","required":false},"source":{"type":"text","required":false,"default":""},"sourceId":{"type":"text","required":false,"default":""},"projectId":{"type":"text","required":false,"default":""},"workRefType":{"type":"text","required":false,"default":""},"workRefId":{"type":"text","required":false,"default":""},"provider":{"type":"text","required":false,"default":""},"dimensions":{"type":"text","required":false,"default":"{}"}},"methods":{"getSubscriber":{"name":"getSubscriber","async":false,"parameters":[],"returnType":"Subscriber | null","isStatic":false,"isPublic":true},"getDimensions":{"name":"getDimensions","async":false,"parameters":[],"returnType":"JsonObject","isStatic":false,"isPublic":true},"setDimensions":{"name":"setDimensions","async":false,"parameters":[{"name":"dimensions","type":"JsonObject","optional":false}],"returnType":"void","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"_smrt_tenant_usage_metrics","api":{"include":["list","get","create"]},"cli":{"include":["list","get","create"]},"mcp":{"include":["list","get"]},"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"TenantUsageMetric","collectionExportName":"TenantUsageMetricCollection","validationRules":[],"schema":{"tableName":"_smrt_tenant_usage_metrics","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_tenant_usage_metrics\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"subscriber_kind\\" TEXT DEFAULT 'tenant',\\n \\"subscriber_external_id\\" TEXT DEFAULT '',\\n \\"metric_key\\" TEXT DEFAULT '',\\n \\"quantity\\" REAL DEFAULT 0,\\n \\"window_start\\" TIMESTAMP,\\n \\"window_end\\" TIMESTAMP,\\n \\"source\\" TEXT DEFAULT '',\\n \\"source_id\\" TEXT DEFAULT '',\\n \\"project_id\\" TEXT DEFAULT '',\\n \\"work_ref_type\\" TEXT DEFAULT '',\\n \\"work_ref_id\\" TEXT DEFAULT '',\\n \\"provider\\" TEXT DEFAULT '',\\n \\"dimensions\\" TEXT DEFAULT '{}'\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"subscriber_kind":{"type":"TEXT","notNull":false,"unique":false,"default":"tenant"},"subscriber_external_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"metric_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"quantity":{"type":"REAL","notNull":false,"unique":false,"default":0},"window_start":{"type":"TIMESTAMP","notNull":false,"unique":false},"window_end":{"type":"TIMESTAMP","notNull":false,"unique":false},"source":{"type":"TEXT","notNull":false,"unique":false,"default":""},"source_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"project_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"work_ref_type":{"type":"TEXT","notNull":false,"unique":false,"default":""},"work_ref_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"provider":{"type":"TEXT","notNull":false,"unique":false,"default":""},"dimensions":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"}},"indexes":[{"name":"_smrt_tenant_usage_metrics_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"_smrt_tenant_usage_metrics_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"b799c746"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:PricingRule":{"name":"pricingrule","className":"PricingRule","qualifiedName":"@happyvertical/smrt-subscriptions:PricingRule","collection":"pricingrules","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/commercial.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"ruleKey":{"type":"text","required":false,"default":""},"metricKey":{"type":"text","required":false,"default":""},"serviceKey":{"type":"text","required":false,"default":""},"strategy":{"type":"text","required":false,"default":"fixed_unit","enum":["fixed_unit","cost_plus","multiplier","tiered","included_overage","flat","custom"]},"currency":{"type":"text","required":false,"default":"USD"},"effectiveFrom":{"type":"datetime","required":false},"effectiveTo":{"type":"datetime","required":false},"priority":{"type":"integer","required":false,"default":0},"terms":{"type":"text","required":false,"default":"{}"},"active":{"type":"boolean","required":false,"default":true},"priceBookId":{"type":"foreignKey","required":false,"related":"PriceBook"}},"methods":{"getTerms":{"name":"getTerms","async":false,"parameters":[],"returnType":"Record<string, unknown>","isStatic":false,"isPublic":true},"setTerms":{"name":"setTerms","async":false,"parameters":[{"name":"value","type":"Record<string, unknown>","optional":false}],"returnType":"void","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"_smrt_pricing_rules","api":true,"cli":true,"mcp":true,"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"PricingRule","collectionExportName":"PricingRuleCollection","validationRules":[],"schema":{"tableName":"_smrt_pricing_rules","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_pricing_rules\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"rule_key\\" TEXT DEFAULT '',\\n \\"metric_key\\" TEXT DEFAULT '',\\n \\"service_key\\" TEXT DEFAULT '',\\n \\"strategy\\" TEXT DEFAULT 'fixed_unit',\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"effective_from\\" TIMESTAMP,\\n \\"effective_to\\" TIMESTAMP,\\n \\"priority\\" INTEGER DEFAULT 0,\\n \\"terms\\" TEXT DEFAULT '{}',\\n \\"active\\" BOOLEAN DEFAULT TRUE,\\n \\"price_book_id\\" UUID\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"rule_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"metric_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"service_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"strategy":{"type":"TEXT","notNull":false,"unique":false,"default":"fixed_unit"},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"effective_from":{"type":"TIMESTAMP","notNull":false,"unique":false},"effective_to":{"type":"TIMESTAMP","notNull":false,"unique":false},"priority":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"terms":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"active":{"type":"BOOLEAN","notNull":false,"unique":false,"default":true},"price_book_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_price_books","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}}},"indexes":[{"name":"_smrt_pricing_rules_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"_smrt_pricing_rules_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_pricing_rules_price_book_id_idx","columns":["price_book_id"]}],"version":"65ce9b3f"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:ClientCharge":{"name":"clientcharge","className":"ClientCharge","qualifiedName":"@happyvertical/smrt-subscriptions:ClientCharge","collection":"clientcharges","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/commercial.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"usageEventId":{"type":"foreignKey","required":false,"related":"TenantUsageMetric"},"usageTenantId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-users:Tenant"},"subscriberKind":{"type":"text","required":false,"default":"tenant"},"subscriberExternalId":{"type":"text","required":false,"default":""},"projectId":{"type":"text","required":false,"default":""},"workRefType":{"type":"text","required":false,"default":""},"workRefId":{"type":"text","required":false,"default":""},"provider":{"type":"text","required":false,"default":""},"serviceKey":{"type":"text","required":false,"default":""},"metricKey":{"type":"text","required":false,"default":""},"quantity":{"type":"decimal","required":false,"default":0},"amount":{"type":"integer","required":false,"default":0},"currency":{"type":"text","required":false,"default":"USD"},"pricingRuleId":{"type":"foreignKey","required":false,"related":"PricingRule"},"priceBookId":{"type":"foreignKey","required":false,"related":"PriceBook"},"pricingSnapshot":{"type":"text","required":false,"default":"{}"},"status":{"type":"text","required":false,"default":"draft","enum":["draft","approved","adjusted"]},"approvedAt":{"type":"datetime","required":false}},"methods":{"getPricingSnapshot":{"name":"getPricingSnapshot","async":false,"parameters":[],"returnType":"Record<string, unknown>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"_smrt_client_charges","api":{"include":["list","get"]},"cli":{"include":["list","get"]},"mcp":{"include":["list","get"]},"conflictColumns":["usage_event_id"],"tenantScoped":{"mode":"required"}},"extends":"SmrtObject","exportName":"ClientCharge","collectionExportName":"ClientChargeCollection","validationRules":[],"schema":{"tableName":"_smrt_client_charges","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_client_charges\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"usage_event_id\\" UUID,\\n \\"usage_tenant_id\\" UUID,\\n \\"subscriber_kind\\" TEXT DEFAULT 'tenant',\\n \\"subscriber_external_id\\" TEXT DEFAULT '',\\n \\"project_id\\" TEXT DEFAULT '',\\n \\"work_ref_type\\" TEXT DEFAULT '',\\n \\"work_ref_id\\" TEXT DEFAULT '',\\n \\"provider\\" TEXT DEFAULT '',\\n \\"service_key\\" TEXT DEFAULT '',\\n \\"metric_key\\" TEXT DEFAULT '',\\n \\"quantity\\" REAL DEFAULT 0,\\n \\"amount\\" INTEGER DEFAULT 0,\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"pricing_rule_id\\" UUID,\\n \\"price_book_id\\" UUID,\\n \\"pricing_snapshot\\" TEXT DEFAULT '{}',\\n \\"status\\" TEXT DEFAULT 'draft',\\n \\"approved_at\\" TIMESTAMP\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"usage_event_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_tenant_usage_metrics","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"usage_tenant_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false},"subscriber_kind":{"type":"TEXT","notNull":false,"unique":false,"default":"tenant"},"subscriber_external_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"project_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"work_ref_type":{"type":"TEXT","notNull":false,"unique":false,"default":""},"work_ref_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"provider":{"type":"TEXT","notNull":false,"unique":false,"default":""},"service_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"metric_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"quantity":{"type":"REAL","notNull":false,"unique":false,"default":0},"amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"pricing_rule_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_pricing_rules","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"price_book_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_price_books","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"pricing_snapshot":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"status":{"type":"TEXT","notNull":false,"unique":false,"default":"draft"},"approved_at":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"_smrt_client_charges_usage_event_id_idx","columns":["usage_event_id"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_client_charges_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_client_charges_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_client_charges_usage_tenant_id_idx","columns":["usage_tenant_id"]},{"name":"_smrt_client_charges_pricing_rule_id_idx","columns":["pricing_rule_id"]},{"name":"_smrt_client_charges_price_book_id_idx","columns":["price_book_id"]}],"version":"e542be95"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:BillingAdjustment":{"name":"billingadjustment","className":"BillingAdjustment","qualifiedName":"@happyvertical/smrt-subscriptions:BillingAdjustment","collection":"billingadjustments","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/commercial.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"clientChargeId":{"type":"foreignKey","required":false,"related":"ClientCharge"},"amount":{"type":"integer","required":false,"default":0},"currency":{"type":"text","required":false,"default":"USD"},"reason":{"type":"text","required":false,"default":""},"source":{"type":"text","required":false,"default":""},"sourceId":{"type":"text","required":false,"default":""},"createdBy":{"type":"text","required":false,"default":""}},"methods":{},"decoratorConfig":{"tableName":"_smrt_billing_adjustments","api":{"include":["list","get"]},"cli":{"include":["list","get"]},"mcp":{"include":["list","get"]},"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"BillingAdjustment","collectionExportName":"BillingAdjustmentCollection","validationRules":[],"schema":{"tableName":"_smrt_billing_adjustments","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_billing_adjustments\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"client_charge_id\\" UUID,\\n \\"amount\\" INTEGER DEFAULT 0,\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"reason\\" TEXT DEFAULT '',\\n \\"source\\" TEXT DEFAULT '',\\n \\"source_id\\" TEXT DEFAULT '',\\n \\"created_by\\" TEXT DEFAULT ''\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"client_charge_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_client_charges","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"reason":{"type":"TEXT","notNull":false,"unique":false,"default":""},"source":{"type":"TEXT","notNull":false,"unique":false,"default":""},"source_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"created_by":{"type":"TEXT","notNull":false,"unique":false,"default":""}},"indexes":[{"name":"_smrt_billing_adjustments_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"_smrt_billing_adjustments_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_billing_adjustments_client_charge_id_idx","columns":["client_charge_id"]}],"version":"cded0b52"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:SpendingPolicy":{"name":"spendingpolicy","className":"SpendingPolicy","qualifiedName":"@happyvertical/smrt-subscriptions:SpendingPolicy","collection":"spendingpolicies","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/commercial.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"name":{"type":"text","required":false,"default":""},"subscriberKind":{"type":"text","required":false,"default":""},"subscriberExternalId":{"type":"text","required":false,"default":""},"projectId":{"type":"text","required":false,"default":""},"serviceKey":{"type":"text","required":false,"default":""},"metricKey":{"type":"text","required":false,"default":""},"period":{"type":"text","required":false,"default":"month","enum":["day","week","month","year","rolling","balance"]},"rollingSeconds":{"type":"integer","required":false,"default":0},"limitAmount":{"type":"integer","required":false,"default":0},"currency":{"type":"text","required":false,"default":"USD"},"behavior":{"type":"text","required":false,"default":"observe","enum":["observe","warn","block","approval_required"]},"priority":{"type":"integer","required":false,"default":0},"active":{"type":"boolean","required":false,"default":true},"basis":{"type":"text","required":false,"default":"billed","enum":["billed","retail","wholesale"]},"setByTenantId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-users:Tenant"},"balanceFrom":{"type":"datetime","required":false}},"methods":{},"decoratorConfig":{"tableName":"_smrt_spending_policies","conflictColumns":["tenant_id","subscriber_kind","subscriber_external_id","project_id","service_key","metric_key","period","name"],"api":true,"cli":true,"mcp":true,"hooks":{"beforeDelete":"assertDelegationAuthority"},"tenantScoped":{"mode":"required"}},"extends":"SmrtObject","exportName":"SpendingPolicy","collectionExportName":"SpendingPolicyCollection","displayLabelField":"name","validationRules":[],"schema":{"tableName":"_smrt_spending_policies","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_spending_policies\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"name\\" TEXT DEFAULT '',\\n \\"subscriber_kind\\" TEXT DEFAULT '',\\n \\"subscriber_external_id\\" TEXT DEFAULT '',\\n \\"project_id\\" TEXT DEFAULT '',\\n \\"service_key\\" TEXT DEFAULT '',\\n \\"metric_key\\" TEXT DEFAULT '',\\n \\"period\\" TEXT DEFAULT 'month',\\n \\"rolling_seconds\\" INTEGER DEFAULT 0,\\n \\"limit_amount\\" INTEGER DEFAULT 0,\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"behavior\\" TEXT DEFAULT 'observe',\\n \\"priority\\" INTEGER DEFAULT 0,\\n \\"active\\" BOOLEAN DEFAULT TRUE,\\n \\"basis\\" TEXT DEFAULT 'billed',\\n \\"set_by_tenant_id\\" UUID,\\n \\"balance_from\\" TIMESTAMP\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"name":{"type":"TEXT","notNull":false,"unique":false,"default":""},"subscriber_kind":{"type":"TEXT","notNull":false,"unique":false,"default":""},"subscriber_external_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"project_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"service_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"metric_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"period":{"type":"TEXT","notNull":false,"unique":false,"default":"month"},"rolling_seconds":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"limit_amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"behavior":{"type":"TEXT","notNull":false,"unique":false,"default":"observe"},"priority":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"active":{"type":"BOOLEAN","notNull":false,"unique":false,"default":true},"basis":{"type":"TEXT","notNull":false,"unique":false,"default":"billed"},"set_by_tenant_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false},"balance_from":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"_smrt_spending_policies_tenant_id_subscriber_kind_idx","columns":["tenant_id","subscriber_kind","subscriber_external_id","project_id","service_key","metric_key","period","name"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_spending_policies_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_spending_policies_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_spending_policies_set_by_tenant_id_idx","columns":["set_by_tenant_id"]}],"version":"c4ac2f49"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:PricingRuleCollection":{"name":"pricingrulecollection","className":"PricingRuleCollection","qualifiedName":"@happyvertical/smrt-subscriptions:PricingRuleCollection","collection":"pricingrules","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/commercial.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{},"methods":{},"decoratorConfig":{"tableName":"_smrt_pricing_rules"},"extends":"SmrtCollection","extendsTypeArg":"PricingRule","exportName":"PricingRuleCollection","collectionExportName":"PricingRuleCollectionCollection","schema":{"tableName":"_smrt_pricing_rules","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_pricing_rules\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"rule_key\\" TEXT DEFAULT '',\\n \\"metric_key\\" TEXT DEFAULT '',\\n \\"service_key\\" TEXT DEFAULT '',\\n \\"strategy\\" TEXT DEFAULT 'fixed_unit',\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"effective_from\\" TIMESTAMP,\\n \\"effective_to\\" TIMESTAMP,\\n \\"priority\\" INTEGER DEFAULT 0,\\n \\"terms\\" TEXT DEFAULT '{}',\\n \\"active\\" BOOLEAN DEFAULT TRUE,\\n \\"price_book_id\\" UUID\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"rule_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"metric_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"service_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"strategy":{"type":"TEXT","notNull":false,"unique":false,"default":"fixed_unit"},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"effective_from":{"type":"TIMESTAMP","notNull":false,"unique":false},"effective_to":{"type":"TIMESTAMP","notNull":false,"unique":false},"priority":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"terms":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"active":{"type":"BOOLEAN","notNull":false,"unique":false,"default":true},"price_book_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_price_books","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}}},"indexes":[{"name":"_smrt_pricing_rules_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"_smrt_pricing_rules_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_pricing_rules_price_book_id_idx","columns":["price_book_id"]}],"version":"65ce9b3f"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:ClientChargeCollection":{"name":"clientchargecollection","className":"ClientChargeCollection","qualifiedName":"@happyvertical/smrt-subscriptions:ClientChargeCollection","collection":"clientcharges","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/commercial.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{},"methods":{},"decoratorConfig":{"tableName":"_smrt_client_charges","api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get"]}},"extends":"SmrtCollection","extendsTypeArg":"ClientCharge","exportName":"ClientChargeCollection","collectionExportName":"ClientChargeCollectionCollection","schema":{"tableName":"_smrt_client_charges","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_client_charges\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"usage_event_id\\" UUID,\\n \\"usage_tenant_id\\" UUID,\\n \\"subscriber_kind\\" TEXT DEFAULT 'tenant',\\n \\"subscriber_external_id\\" TEXT DEFAULT '',\\n \\"project_id\\" TEXT DEFAULT '',\\n \\"work_ref_type\\" TEXT DEFAULT '',\\n \\"work_ref_id\\" TEXT DEFAULT '',\\n \\"provider\\" TEXT DEFAULT '',\\n \\"service_key\\" TEXT DEFAULT '',\\n \\"metric_key\\" TEXT DEFAULT '',\\n \\"quantity\\" REAL DEFAULT 0,\\n \\"amount\\" INTEGER DEFAULT 0,\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"pricing_rule_id\\" UUID,\\n \\"price_book_id\\" UUID,\\n \\"pricing_snapshot\\" TEXT DEFAULT '{}',\\n \\"status\\" TEXT DEFAULT 'draft',\\n \\"approved_at\\" TIMESTAMP\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"usage_event_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_tenant_usage_metrics","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"usage_tenant_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false},"subscriber_kind":{"type":"TEXT","notNull":false,"unique":false,"default":"tenant"},"subscriber_external_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"project_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"work_ref_type":{"type":"TEXT","notNull":false,"unique":false,"default":""},"work_ref_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"provider":{"type":"TEXT","notNull":false,"unique":false,"default":""},"service_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"metric_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"quantity":{"type":"REAL","notNull":false,"unique":false,"default":0},"amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"pricing_rule_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_pricing_rules","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"price_book_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_price_books","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"pricing_snapshot":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"status":{"type":"TEXT","notNull":false,"unique":false,"default":"draft"},"approved_at":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"_smrt_client_charges_usage_event_id_idx","columns":["usage_event_id"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_client_charges_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_client_charges_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_client_charges_usage_tenant_id_idx","columns":["usage_tenant_id"]},{"name":"_smrt_client_charges_pricing_rule_id_idx","columns":["pricing_rule_id"]},{"name":"_smrt_client_charges_price_book_id_idx","columns":["price_book_id"]}],"version":"e542be95"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:BillingAdjustmentCollection":{"name":"billingadjustmentcollection","className":"BillingAdjustmentCollection","qualifiedName":"@happyvertical/smrt-subscriptions:BillingAdjustmentCollection","collection":"billingadjustments","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/commercial.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{},"methods":{},"decoratorConfig":{"tableName":"_smrt_billing_adjustments","api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get"]}},"extends":"SmrtCollection","extendsTypeArg":"BillingAdjustment","exportName":"BillingAdjustmentCollection","collectionExportName":"BillingAdjustmentCollectionCollection","schema":{"tableName":"_smrt_billing_adjustments","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_billing_adjustments\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"client_charge_id\\" UUID,\\n \\"amount\\" INTEGER DEFAULT 0,\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"reason\\" TEXT DEFAULT '',\\n \\"source\\" TEXT DEFAULT '',\\n \\"source_id\\" TEXT DEFAULT '',\\n \\"created_by\\" TEXT DEFAULT ''\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"client_charge_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_client_charges","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"reason":{"type":"TEXT","notNull":false,"unique":false,"default":""},"source":{"type":"TEXT","notNull":false,"unique":false,"default":""},"source_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"created_by":{"type":"TEXT","notNull":false,"unique":false,"default":""}},"indexes":[{"name":"_smrt_billing_adjustments_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"_smrt_billing_adjustments_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_billing_adjustments_client_charge_id_idx","columns":["client_charge_id"]}],"version":"cded0b52"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:SpendingPolicyCollection":{"name":"spendingpolicycollection","className":"SpendingPolicyCollection","qualifiedName":"@happyvertical/smrt-subscriptions:SpendingPolicyCollection","collection":"spendingpolicies","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/commercial.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{},"methods":{},"decoratorConfig":{"tableName":"_smrt_spending_policies"},"extends":"SmrtCollection","extendsTypeArg":"SpendingPolicy","exportName":"SpendingPolicyCollection","collectionExportName":"SpendingPolicyCollectionCollection","schema":{"tableName":"_smrt_spending_policies","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_spending_policies\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"name\\" TEXT DEFAULT '',\\n \\"subscriber_kind\\" TEXT DEFAULT '',\\n \\"subscriber_external_id\\" TEXT DEFAULT '',\\n \\"project_id\\" TEXT DEFAULT '',\\n \\"service_key\\" TEXT DEFAULT '',\\n \\"metric_key\\" TEXT DEFAULT '',\\n \\"period\\" TEXT DEFAULT 'month',\\n \\"rolling_seconds\\" INTEGER DEFAULT 0,\\n \\"limit_amount\\" INTEGER DEFAULT 0,\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"behavior\\" TEXT DEFAULT 'observe',\\n \\"priority\\" INTEGER DEFAULT 0,\\n \\"active\\" BOOLEAN DEFAULT TRUE,\\n \\"basis\\" TEXT DEFAULT 'billed',\\n \\"set_by_tenant_id\\" UUID,\\n \\"balance_from\\" TIMESTAMP\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"name":{"type":"TEXT","notNull":false,"unique":false,"default":""},"subscriber_kind":{"type":"TEXT","notNull":false,"unique":false,"default":""},"subscriber_external_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"project_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"service_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"metric_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"period":{"type":"TEXT","notNull":false,"unique":false,"default":"month"},"rolling_seconds":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"limit_amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"behavior":{"type":"TEXT","notNull":false,"unique":false,"default":"observe"},"priority":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"active":{"type":"BOOLEAN","notNull":false,"unique":false,"default":true},"basis":{"type":"TEXT","notNull":false,"unique":false,"default":"billed"},"set_by_tenant_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false},"balance_from":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"_smrt_spending_policies_tenant_id_subscriber_kind_idx","columns":["tenant_id","subscriber_kind","subscriber_external_id","project_id","service_key","metric_key","period","name"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_spending_policies_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_spending_policies_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_spending_policies_set_by_tenant_id_idx","columns":["set_by_tenant_id"]}],"version":"c4ac2f49"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:PriceBook":{"name":"pricebook","className":"PriceBook","qualifiedName":"@happyvertical/smrt-subscriptions:PriceBook","collection":"pricebooks","description":"A named set of prices published by one seller tenant. Its prices are ordinary PricingRule rows that carry this book's id and the same tenant; one rule per currency gives a price in several currencies.","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/reseller.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"bookKey":{"type":"text","required":false,"default":""},"name":{"type":"text","required":false,"default":""},"kind":{"type":"text","required":false,"default":"retail","enum":["wholesale","retail"]},"active":{"type":"boolean","required":false,"default":true}},"methods":{},"decoratorConfig":{"tableName":"_smrt_price_books","conflictColumns":["tenant_id","book_key"],"api":false,"cli":false,"mcp":false,"tenantScoped":{"mode":"required"}},"extends":"SmrtObject","exportName":"PriceBook","collectionExportName":"PriceBookCollection","displayLabelField":"name","validationRules":[],"schema":{"tableName":"_smrt_price_books","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_price_books\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"book_key\\" TEXT DEFAULT '',\\n \\"name\\" TEXT DEFAULT '',\\n \\"kind\\" TEXT DEFAULT 'retail',\\n \\"active\\" BOOLEAN DEFAULT TRUE\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"book_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"name":{"type":"TEXT","notNull":false,"unique":false,"default":""},"kind":{"type":"TEXT","notNull":false,"unique":false,"default":"retail"},"active":{"type":"BOOLEAN","notNull":false,"unique":false,"default":true}},"indexes":[{"name":"_smrt_price_books_tenant_id_book_key_idx","columns":["tenant_id","book_key"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_price_books_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_price_books_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"c7e5f5e0"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:PriceBookAssignment":{"name":"pricebookassignment","className":"PriceBookAssignment","qualifiedName":"@happyvertical/smrt-subscriptions:PriceBookAssignment","collection":"pricebookassignments","description":"Which price books rate one child tenant's usage, keyed like the tenancy billing relationship it belongs to (one row per child).","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/reseller.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{"childTenantId":{"type":"crossPackageRef","required":true,"related":"@happyvertical/smrt-users:Tenant","_meta":{"required":true}},"resellerTenantId":{"type":"crossPackageRef","required":true,"related":"@happyvertical/smrt-users:Tenant","_meta":{"required":true}},"wholesalePriceBookId":{"type":"foreignKey","required":false,"related":"PriceBook"},"wholesaleCurrency":{"type":"text","required":false,"default":""},"retailPriceBookId":{"type":"foreignKey","required":false,"related":"PriceBook"},"retailCurrency":{"type":"text","required":false,"default":""}},"methods":{},"decoratorConfig":{"tableName":"_smrt_price_book_assignments","conflictColumns":["child_tenant_id"],"api":false,"cli":false,"mcp":false},"extends":"SmrtObject","exportName":"PriceBookAssignment","collectionExportName":"PriceBookAssignmentCollection","validationRules":[{"field":"childTenantId","rule":"required","fieldType":"crossPackageRef"},{"field":"resellerTenantId","rule":"required","fieldType":"crossPackageRef"}],"schema":{"tableName":"_smrt_price_book_assignments","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_price_book_assignments\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"child_tenant_id\\" UUID NOT NULL,\\n \\"reseller_tenant_id\\" UUID NOT NULL,\\n \\"wholesale_price_book_id\\" UUID,\\n \\"wholesale_currency\\" TEXT DEFAULT '',\\n \\"retail_price_book_id\\" UUID,\\n \\"retail_currency\\" TEXT DEFAULT ''\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"child_tenant_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"reseller_tenant_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"wholesale_price_book_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_price_books","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"wholesale_currency":{"type":"TEXT","notNull":false,"unique":false,"default":""},"retail_price_book_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_price_books","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"retail_currency":{"type":"TEXT","notNull":false,"unique":false,"default":""}},"indexes":[{"name":"_smrt_price_book_assignments_child_tenant_id_idx","columns":["child_tenant_id"],"unique":true},{"name":"_smrt_price_book_assignments_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_price_book_assignments_created_at_idx","columns":["created_at"]},{"name":"_smrt_price_book_assignments_reseller_tenant_id_idx","columns":["reseller_tenant_id"]},{"name":"_smrt_price_book_assignments_wholesale_price_book_id_idx","columns":["wholesale_price_book_id"]},{"name":"_smrt_price_book_assignments_retail_price_book_id_idx","columns":["retail_price_book_id"]}],"version":"f24f020e"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:RetailCharge":{"name":"retailcharge","className":"RetailCharge","qualifiedName":"@happyvertical/smrt-subscriptions:RetailCharge","collection":"retailcharges","description":"What a reseller charges one child for one usage event, priced from the reseller's retail book.","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/reseller.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"resellerTenantId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-users:Tenant"},"usageEventId":{"type":"foreignKey","required":false,"related":"TenantUsageMetric"},"clientChargeId":{"type":"foreignKey","required":false,"related":"ClientCharge"},"subscriberKind":{"type":"text","required":false,"default":"tenant"},"subscriberExternalId":{"type":"text","required":false,"default":""},"projectId":{"type":"text","required":false,"default":""},"workRefType":{"type":"text","required":false,"default":""},"workRefId":{"type":"text","required":false,"default":""},"provider":{"type":"text","required":false,"default":""},"serviceKey":{"type":"text","required":false,"default":""},"metricKey":{"type":"text","required":false,"default":""},"quantity":{"type":"decimal","required":false,"default":0},"amount":{"type":"integer","required":false,"default":0},"currency":{"type":"text","required":false,"default":"USD"},"priceBookId":{"type":"foreignKey","required":false,"related":"PriceBook"},"pricingRuleId":{"type":"foreignKey","required":false,"related":"PricingRule"},"pricingSnapshot":{"type":"text","required":false,"default":"{}"},"status":{"type":"text","required":false,"default":"draft","enum":["draft","approved"]},"approvedAt":{"type":"datetime","required":false}},"methods":{"getPricingSnapshot":{"name":"getPricingSnapshot","async":false,"parameters":[],"returnType":"Record<string, unknown>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"_smrt_retail_charges","api":{"include":["list","get"]},"cli":{"include":["list","get"]},"mcp":{"include":["list","get"]},"conflictColumns":["usage_event_id"],"tenantScoped":{"mode":"required"}},"extends":"SmrtObject","exportName":"RetailCharge","collectionExportName":"RetailChargeCollection","validationRules":[],"schema":{"tableName":"_smrt_retail_charges","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_retail_charges\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"reseller_tenant_id\\" UUID,\\n \\"usage_event_id\\" UUID,\\n \\"client_charge_id\\" UUID,\\n \\"subscriber_kind\\" TEXT DEFAULT 'tenant',\\n \\"subscriber_external_id\\" TEXT DEFAULT '',\\n \\"project_id\\" TEXT DEFAULT '',\\n \\"work_ref_type\\" TEXT DEFAULT '',\\n \\"work_ref_id\\" TEXT DEFAULT '',\\n \\"provider\\" TEXT DEFAULT '',\\n \\"service_key\\" TEXT DEFAULT '',\\n \\"metric_key\\" TEXT DEFAULT '',\\n \\"quantity\\" REAL DEFAULT 0,\\n \\"amount\\" INTEGER DEFAULT 0,\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"price_book_id\\" UUID,\\n \\"pricing_rule_id\\" UUID,\\n \\"pricing_snapshot\\" TEXT DEFAULT '{}',\\n \\"status\\" TEXT DEFAULT 'draft',\\n \\"approved_at\\" TIMESTAMP\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"reseller_tenant_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false},"usage_event_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_tenant_usage_metrics","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"client_charge_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_client_charges","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"subscriber_kind":{"type":"TEXT","notNull":false,"unique":false,"default":"tenant"},"subscriber_external_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"project_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"work_ref_type":{"type":"TEXT","notNull":false,"unique":false,"default":""},"work_ref_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"provider":{"type":"TEXT","notNull":false,"unique":false,"default":""},"service_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"metric_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"quantity":{"type":"REAL","notNull":false,"unique":false,"default":0},"amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"price_book_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_price_books","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"pricing_rule_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_pricing_rules","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"pricing_snapshot":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"status":{"type":"TEXT","notNull":false,"unique":false,"default":"draft"},"approved_at":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"_smrt_retail_charges_usage_event_id_idx","columns":["usage_event_id"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_retail_charges_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_retail_charges_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_retail_charges_reseller_tenant_id_idx","columns":["reseller_tenant_id"]},{"name":"_smrt_retail_charges_client_charge_id_idx","columns":["client_charge_id"]},{"name":"_smrt_retail_charges_price_book_id_idx","columns":["price_book_id"]},{"name":"_smrt_retail_charges_pricing_rule_id_idx","columns":["pricing_rule_id"]}],"version":"1c1ae3c8"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:CreditGrant":{"name":"creditgrant","className":"CreditGrant","qualifiedName":"@happyvertical/smrt-subscriptions:CreditGrant","collection":"creditgrants","description":"An append-only credit on a prepaid (period: 'balance') spending policy. Positive amounts add credit; a negative amount reverses an earlier grant.","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/reseller.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"spendingPolicyId":{"type":"foreignKey","required":false,"related":"SpendingPolicy"},"amount":{"type":"integer","required":false,"default":0},"currency":{"type":"text","required":false,"default":"USD"},"reason":{"type":"text","required":false,"default":""},"source":{"type":"text","required":false,"default":""},"sourceId":{"type":"text","required":false,"default":""},"grantedByTenantId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-users:Tenant"}},"methods":{},"decoratorConfig":{"tableName":"_smrt_credit_grants","api":{"include":["list","get"]},"cli":{"include":["list","get"]},"mcp":{"include":["list","get"]},"hooks":{"beforeDelete":"refuseDelete"},"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"CreditGrant","collectionExportName":"CreditGrantCollection","validationRules":[],"schema":{"tableName":"_smrt_credit_grants","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_credit_grants\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"spending_policy_id\\" UUID,\\n \\"amount\\" INTEGER DEFAULT 0,\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"reason\\" TEXT DEFAULT '',\\n \\"source\\" TEXT DEFAULT '',\\n \\"source_id\\" TEXT DEFAULT '',\\n \\"granted_by_tenant_id\\" UUID\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"spending_policy_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_spending_policies","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"reason":{"type":"TEXT","notNull":false,"unique":false,"default":""},"source":{"type":"TEXT","notNull":false,"unique":false,"default":""},"source_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"granted_by_tenant_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false}},"indexes":[{"name":"_smrt_credit_grants_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"_smrt_credit_grants_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_credit_grants_spending_policy_id_idx","columns":["spending_policy_id"]},{"name":"_smrt_credit_grants_granted_by_tenant_id_idx","columns":["granted_by_tenant_id"]}],"version":"602c4e02"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:PriceBookCollection":{"name":"pricebookcollection","className":"PriceBookCollection","qualifiedName":"@happyvertical/smrt-subscriptions:PriceBookCollection","collection":"pricebooks","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/reseller.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{},"methods":{},"decoratorConfig":{"tableName":"_smrt_price_books","api":false,"mcp":false,"cli":false},"extends":"SmrtCollection","extendsTypeArg":"PriceBook","exportName":"PriceBookCollection","collectionExportName":"PriceBookCollectionCollection","schema":{"tableName":"_smrt_price_books","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_price_books\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"book_key\\" TEXT DEFAULT '',\\n \\"name\\" TEXT DEFAULT '',\\n \\"kind\\" TEXT DEFAULT 'retail',\\n \\"active\\" BOOLEAN DEFAULT TRUE\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"book_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"name":{"type":"TEXT","notNull":false,"unique":false,"default":""},"kind":{"type":"TEXT","notNull":false,"unique":false,"default":"retail"},"active":{"type":"BOOLEAN","notNull":false,"unique":false,"default":true}},"indexes":[{"name":"_smrt_price_books_tenant_id_book_key_idx","columns":["tenant_id","book_key"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_price_books_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_price_books_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"c7e5f5e0"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:PriceBookAssignmentCollection":{"name":"pricebookassignmentcollection","className":"PriceBookAssignmentCollection","qualifiedName":"@happyvertical/smrt-subscriptions:PriceBookAssignmentCollection","collection":"pricebookassignments","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/reseller.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{},"methods":{},"decoratorConfig":{"tableName":"_smrt_price_book_assignments","api":false,"mcp":false,"cli":false},"extends":"SmrtCollection","extendsTypeArg":"PriceBookAssignment","exportName":"PriceBookAssignmentCollection","collectionExportName":"PriceBookAssignmentCollectionCollection","schema":{"tableName":"_smrt_price_book_assignments","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_price_book_assignments\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"child_tenant_id\\" UUID NOT NULL,\\n \\"reseller_tenant_id\\" UUID NOT NULL,\\n \\"wholesale_price_book_id\\" UUID,\\n \\"wholesale_currency\\" TEXT DEFAULT '',\\n \\"retail_price_book_id\\" UUID,\\n \\"retail_currency\\" TEXT DEFAULT ''\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"child_tenant_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"reseller_tenant_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"wholesale_price_book_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_price_books","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"wholesale_currency":{"type":"TEXT","notNull":false,"unique":false,"default":""},"retail_price_book_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_price_books","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"retail_currency":{"type":"TEXT","notNull":false,"unique":false,"default":""}},"indexes":[{"name":"_smrt_price_book_assignments_child_tenant_id_idx","columns":["child_tenant_id"],"unique":true},{"name":"_smrt_price_book_assignments_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_price_book_assignments_created_at_idx","columns":["created_at"]},{"name":"_smrt_price_book_assignments_reseller_tenant_id_idx","columns":["reseller_tenant_id"]},{"name":"_smrt_price_book_assignments_wholesale_price_book_id_idx","columns":["wholesale_price_book_id"]},{"name":"_smrt_price_book_assignments_retail_price_book_id_idx","columns":["retail_price_book_id"]}],"version":"f24f020e"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:RetailChargeCollection":{"name":"retailchargecollection","className":"RetailChargeCollection","qualifiedName":"@happyvertical/smrt-subscriptions:RetailChargeCollection","collection":"retailcharges","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/reseller.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{},"methods":{},"decoratorConfig":{"tableName":"_smrt_retail_charges","api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get"]}},"extends":"SmrtCollection","extendsTypeArg":"RetailCharge","exportName":"RetailChargeCollection","collectionExportName":"RetailChargeCollectionCollection","schema":{"tableName":"_smrt_retail_charges","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_retail_charges\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"reseller_tenant_id\\" UUID,\\n \\"usage_event_id\\" UUID,\\n \\"client_charge_id\\" UUID,\\n \\"subscriber_kind\\" TEXT DEFAULT 'tenant',\\n \\"subscriber_external_id\\" TEXT DEFAULT '',\\n \\"project_id\\" TEXT DEFAULT '',\\n \\"work_ref_type\\" TEXT DEFAULT '',\\n \\"work_ref_id\\" TEXT DEFAULT '',\\n \\"provider\\" TEXT DEFAULT '',\\n \\"service_key\\" TEXT DEFAULT '',\\n \\"metric_key\\" TEXT DEFAULT '',\\n \\"quantity\\" REAL DEFAULT 0,\\n \\"amount\\" INTEGER DEFAULT 0,\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"price_book_id\\" UUID,\\n \\"pricing_rule_id\\" UUID,\\n \\"pricing_snapshot\\" TEXT DEFAULT '{}',\\n \\"status\\" TEXT DEFAULT 'draft',\\n \\"approved_at\\" TIMESTAMP\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"reseller_tenant_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false},"usage_event_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_tenant_usage_metrics","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"client_charge_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_client_charges","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"subscriber_kind":{"type":"TEXT","notNull":false,"unique":false,"default":"tenant"},"subscriber_external_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"project_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"work_ref_type":{"type":"TEXT","notNull":false,"unique":false,"default":""},"work_ref_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"provider":{"type":"TEXT","notNull":false,"unique":false,"default":""},"service_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"metric_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"quantity":{"type":"REAL","notNull":false,"unique":false,"default":0},"amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"price_book_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_price_books","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"pricing_rule_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_pricing_rules","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"pricing_snapshot":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"status":{"type":"TEXT","notNull":false,"unique":false,"default":"draft"},"approved_at":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"_smrt_retail_charges_usage_event_id_idx","columns":["usage_event_id"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_retail_charges_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_retail_charges_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_retail_charges_reseller_tenant_id_idx","columns":["reseller_tenant_id"]},{"name":"_smrt_retail_charges_client_charge_id_idx","columns":["client_charge_id"]},{"name":"_smrt_retail_charges_price_book_id_idx","columns":["price_book_id"]},{"name":"_smrt_retail_charges_pricing_rule_id_idx","columns":["pricing_rule_id"]}],"version":"1c1ae3c8"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:CreditGrantCollection":{"name":"creditgrantcollection","className":"CreditGrantCollection","qualifiedName":"@happyvertical/smrt-subscriptions:CreditGrantCollection","collection":"creditgrants","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/reseller.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{},"methods":{},"decoratorConfig":{"tableName":"_smrt_credit_grants","api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get"]}},"extends":"SmrtCollection","extendsTypeArg":"CreditGrant","exportName":"CreditGrantCollection","collectionExportName":"CreditGrantCollectionCollection","schema":{"tableName":"_smrt_credit_grants","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_credit_grants\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"spending_policy_id\\" UUID,\\n \\"amount\\" INTEGER DEFAULT 0,\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"reason\\" TEXT DEFAULT '',\\n \\"source\\" TEXT DEFAULT '',\\n \\"source_id\\" TEXT DEFAULT '',\\n \\"granted_by_tenant_id\\" UUID\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"spending_policy_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_spending_policies","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"reason":{"type":"TEXT","notNull":false,"unique":false,"default":""},"source":{"type":"TEXT","notNull":false,"unique":false,"default":""},"source_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"granted_by_tenant_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false}},"indexes":[{"name":"_smrt_credit_grants_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"_smrt_credit_grants_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_credit_grants_spending_policy_id_idx","columns":["spending_policy_id"]},{"name":"_smrt_credit_grants_granted_by_tenant_id_idx","columns":["granted_by_tenant_id"]}],"version":"602c4e02"},"importPath":"@happyvertical/smrt-subscriptions"}},"moduleType":"smrt","smrtDependencies":["@happyvertical/smrt-core","@happyvertical/smrt-tenancy"],"browser":{"status":"server-only","issues":["#3624","#3626"],"reason":"core migrations (node:crypto, node:os)","via":["@happyvertical/smrt-tenancy"]},"stampsConstructors":true}`));
|
|
18
|
-
//#endregion
|
|
19
|
-
//#region src/utils.ts
|
|
20
|
-
var THRESHOLD_WINDOWS = [
|
|
21
|
-
"day",
|
|
22
|
-
"week",
|
|
23
|
-
"month",
|
|
24
|
-
"year",
|
|
25
|
-
"rolling"
|
|
26
|
-
];
|
|
27
|
-
var THRESHOLD_ENFORCEMENTS = [
|
|
28
|
-
"observe",
|
|
29
|
-
"warn",
|
|
30
|
-
"block"
|
|
31
|
-
];
|
|
32
|
-
async function deterministicUuid(parts) {
|
|
33
|
-
const bytes = new TextEncoder().encode(JSON.stringify(parts));
|
|
34
|
-
const uuid = new Uint8Array(await crypto.subtle.digest("SHA-256", bytes)).slice(0, 16);
|
|
35
|
-
uuid[6] = uuid[6] & 15 | 80;
|
|
36
|
-
uuid[8] = uuid[8] & 63 | 128;
|
|
37
|
-
const hex = Array.from(uuid, (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
38
|
-
return [
|
|
39
|
-
hex.slice(0, 8),
|
|
40
|
-
hex.slice(8, 12),
|
|
41
|
-
hex.slice(12, 16),
|
|
42
|
-
hex.slice(16, 20),
|
|
43
|
-
hex.slice(20)
|
|
44
|
-
].join("-");
|
|
45
|
-
}
|
|
46
|
-
function parseJsonArray(value, fallback = []) {
|
|
47
|
-
if (!value) return fallback;
|
|
48
|
-
try {
|
|
49
|
-
const parsed = JSON.parse(value);
|
|
50
|
-
return Array.isArray(parsed) ? parsed : fallback;
|
|
51
|
-
} catch {
|
|
52
|
-
return fallback;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
function parseJsonObject(value, fallback) {
|
|
56
|
-
if (!value) return fallback;
|
|
57
|
-
try {
|
|
58
|
-
const parsed = JSON.parse(value);
|
|
59
|
-
return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : fallback;
|
|
60
|
-
} catch {
|
|
61
|
-
return fallback;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
function stringifyJson(value) {
|
|
65
|
-
return JSON.stringify(value ?? null);
|
|
66
|
-
}
|
|
67
|
-
function normalizeFeatureGrants(grants) {
|
|
68
|
-
return grants.map((grant) => typeof grant === "string" ? {
|
|
69
|
-
featureKey: grant,
|
|
70
|
-
enabled: true
|
|
71
|
-
} : grant);
|
|
72
|
-
}
|
|
73
|
-
function normalizeSubscriber(input) {
|
|
74
|
-
const rawExternalId = input.subscriberExternalId;
|
|
75
|
-
const externalId = rawExternalId === null || rawExternalId === void 0 ? "" : String(rawExternalId);
|
|
76
|
-
const rawKind = input.subscriberKind;
|
|
77
|
-
const kind = rawKind === null || rawKind === void 0 ? "tenant" : rawKind;
|
|
78
|
-
if (kind !== "tenant" && kind !== "external") throw new Error(`subscriberKind must be "tenant" or "external" (got ${JSON.stringify(rawKind)})`);
|
|
79
|
-
if (kind === "tenant") {
|
|
80
|
-
if (externalId !== "") throw new Error("subscriberExternalId is set but subscriberKind is \"tenant\"; set subscriberKind=\"external\" explicitly or omit subscriberExternalId");
|
|
81
|
-
return {
|
|
82
|
-
kind: "tenant",
|
|
83
|
-
tenantId: input.tenantId
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
if (externalId === "") throw new Error("subscriberKind=\"external\" requires a non-empty subscriberExternalId");
|
|
87
|
-
return {
|
|
88
|
-
kind: "external",
|
|
89
|
-
tenantId: input.tenantId,
|
|
90
|
-
externalId
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
function subscriberToColumns(subscriber) {
|
|
94
|
-
if (subscriber.kind === "tenant") return {
|
|
95
|
-
tenantId: subscriber.tenantId,
|
|
96
|
-
subscriberKind: "tenant",
|
|
97
|
-
subscriberExternalId: ""
|
|
98
|
-
};
|
|
99
|
-
return {
|
|
100
|
-
tenantId: subscriber.tenantId,
|
|
101
|
-
subscriberKind: "external",
|
|
102
|
-
subscriberExternalId: subscriber.externalId
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
function assertSubscriberInvariant(modelName, fields) {
|
|
106
|
-
if (fields.subscriberKind !== "tenant" && fields.subscriberKind !== "external") throw new Error(`${modelName}: subscriberKind must be "tenant" or "external" (got ${describe(fields.subscriberKind)})`);
|
|
107
|
-
if (typeof fields.subscriberExternalId !== "string") throw new Error(`${modelName}: subscriberExternalId must be a string (got ${describe(fields.subscriberExternalId)})`);
|
|
108
|
-
if (fields.subscriberKind === "tenant" && fields.subscriberExternalId !== "") throw new Error(`${modelName}: subscriberExternalId must be empty when subscriberKind is "tenant"`);
|
|
109
|
-
if (fields.subscriberKind === "external" && fields.subscriberExternalId === "") throw new Error(`${modelName}: subscriberKind="external" requires a non-empty subscriberExternalId`);
|
|
110
|
-
}
|
|
111
|
-
function describe(value) {
|
|
112
|
-
if (value === null) return "null";
|
|
113
|
-
if (value === void 0) return "undefined";
|
|
114
|
-
if (typeof value === "string") return `"${value}"`;
|
|
115
|
-
return String(value);
|
|
116
|
-
}
|
|
117
|
-
function getWindowForThreshold(thresholdWindow, now = /* @__PURE__ */ new Date()) {
|
|
118
|
-
switch (thresholdWindow) {
|
|
119
|
-
case "day": return utcWindow(now, "day");
|
|
120
|
-
case "week": return utcWindow(now, "week");
|
|
121
|
-
case "month": return utcWindow(now, "month");
|
|
122
|
-
case "year": return utcWindow(now, "year");
|
|
123
|
-
case "rolling": return {
|
|
124
|
-
start: /* @__PURE__ */ new Date(now.getTime() - 720 * 60 * 60 * 1e3),
|
|
125
|
-
end: now
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
function getWindowKey(window) {
|
|
130
|
-
return `${window.start.toISOString()}..${window.end.toISOString()}`;
|
|
131
|
-
}
|
|
132
|
-
function isValidThreshold(threshold) {
|
|
133
|
-
return typeof threshold.metricKey === "string" && threshold.metricKey.length > 0 && Number.isFinite(threshold.limit) && threshold.limit >= 0 && isThresholdWindow(threshold.window) && isThresholdEnforcement(threshold.enforcement) && (threshold.warningRatio === void 0 || Number.isFinite(threshold.warningRatio) && threshold.warningRatio >= 0 && threshold.warningRatio <= 1);
|
|
134
|
-
}
|
|
135
|
-
function isThresholdWindow(value) {
|
|
136
|
-
return typeof value === "string" && THRESHOLD_WINDOWS.includes(value);
|
|
137
|
-
}
|
|
138
|
-
function isThresholdEnforcement(value) {
|
|
139
|
-
return typeof value === "string" && THRESHOLD_ENFORCEMENTS.includes(value);
|
|
140
|
-
}
|
|
141
|
-
function utcWindow(now, unit) {
|
|
142
|
-
const start = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()));
|
|
143
|
-
if (unit === "week") {
|
|
144
|
-
const day = start.getUTCDay();
|
|
145
|
-
const mondayOffset = day === 0 ? -6 : 1 - day;
|
|
146
|
-
start.setUTCDate(start.getUTCDate() + mondayOffset);
|
|
147
|
-
}
|
|
148
|
-
if (unit === "month") start.setUTCDate(1);
|
|
149
|
-
if (unit === "year") start.setUTCMonth(0, 1);
|
|
150
|
-
const end = new Date(start);
|
|
151
|
-
switch (unit) {
|
|
152
|
-
case "day":
|
|
153
|
-
end.setUTCDate(end.getUTCDate() + 1);
|
|
154
|
-
break;
|
|
155
|
-
case "week":
|
|
156
|
-
end.setUTCDate(end.getUTCDate() + 7);
|
|
157
|
-
break;
|
|
158
|
-
case "month":
|
|
159
|
-
end.setUTCMonth(end.getUTCMonth() + 1);
|
|
160
|
-
break;
|
|
161
|
-
case "year":
|
|
162
|
-
end.setUTCFullYear(end.getUTCFullYear() + 1);
|
|
163
|
-
break;
|
|
164
|
-
}
|
|
165
|
-
return {
|
|
166
|
-
start,
|
|
167
|
-
end
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
function tenantKey(value) {
|
|
171
|
-
return String(value ?? "").toLowerCase();
|
|
172
|
-
}
|
|
173
|
-
//#endregion
|
|
174
|
-
//#region src/models/SubscriptionPlan.ts
|
|
175
|
-
var __defProp$4 = Object.defineProperty;
|
|
176
|
-
var __getOwnPropDesc$4 = Object.getOwnPropertyDescriptor;
|
|
177
|
-
var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, {
|
|
178
|
-
enumerable: true,
|
|
179
|
-
configurable: true,
|
|
180
|
-
writable: true,
|
|
181
|
-
value
|
|
182
|
-
}) : obj[key] = value;
|
|
183
|
-
var __decorateClass$4 = (decorators, target, key, kind) => {
|
|
184
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$4(target, key) : target;
|
|
185
|
-
for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
186
|
-
if (kind && result) __defProp$4(target, key, result);
|
|
187
|
-
return result;
|
|
188
|
-
};
|
|
189
|
-
var __publicField$4 = (obj, key, value) => __defNormalProp$4(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
190
|
-
var SubscriptionPlan = class extends SmrtObject {
|
|
191
|
-
tenantId = null;
|
|
192
|
-
planKey = "";
|
|
193
|
-
name = "";
|
|
194
|
-
description = "";
|
|
195
|
-
status = "active";
|
|
196
|
-
sortOrder = 0;
|
|
197
|
-
/**
|
|
198
|
-
* Plan price in **integer minor units** of {@link currency} — `$19.99` is
|
|
199
|
-
* `1999`. The `= 0` initializer is load-bearing: SMRT maps an integer literal
|
|
200
|
-
* to INTEGER and a decimal literal to DECIMAL, and money is exact (#2401).
|
|
201
|
-
*/
|
|
202
|
-
priceAmount = 0;
|
|
203
|
-
currency = "USD";
|
|
204
|
-
billingInterval = "month";
|
|
205
|
-
pricingMode = "fixed";
|
|
206
|
-
minimumAmount = 0;
|
|
207
|
-
suggestedAmount = 0;
|
|
208
|
-
/** Optional provider binding; plan semantics never require a provider. */
|
|
209
|
-
externalProvider = null;
|
|
210
|
-
providerProductId = null;
|
|
211
|
-
providerPriceId = null;
|
|
212
|
-
/** @deprecated Use providerProductId. */
|
|
213
|
-
stripeProductId = null;
|
|
214
|
-
/** @deprecated Use providerPriceId. */
|
|
215
|
-
stripePriceId = null;
|
|
216
|
-
features = "[]";
|
|
217
|
-
thresholds = "[]";
|
|
218
|
-
metadata = "{}";
|
|
219
|
-
constructor(options = {}) {
|
|
220
|
-
super(options);
|
|
221
|
-
if (options.tenantId !== void 0) this.tenantId = options.tenantId;
|
|
222
|
-
if (options.planKey !== void 0) this.planKey = options.planKey;
|
|
223
|
-
if (options.name !== void 0) this.name = options.name;
|
|
224
|
-
if (options.description !== void 0) this.description = options.description;
|
|
225
|
-
if (options.status !== void 0) this.status = options.status;
|
|
226
|
-
if (options.sortOrder !== void 0) this.sortOrder = options.sortOrder;
|
|
227
|
-
if (options.priceAmount !== void 0) this.priceAmount = options.priceAmount;
|
|
228
|
-
if (options.currency !== void 0) this.currency = options.currency;
|
|
229
|
-
if (options.billingInterval !== void 0) this.billingInterval = options.billingInterval;
|
|
230
|
-
if (options.externalProvider !== void 0) this.externalProvider = options.externalProvider;
|
|
231
|
-
if (options.pricingMode !== void 0) this.pricingMode = options.pricingMode;
|
|
232
|
-
if (options.minimumAmount !== void 0) this.minimumAmount = options.minimumAmount;
|
|
233
|
-
if (options.suggestedAmount !== void 0) this.suggestedAmount = options.suggestedAmount;
|
|
234
|
-
if (options.providerProductId !== void 0) this.providerProductId = options.providerProductId;
|
|
235
|
-
if (options.providerPriceId !== void 0) this.providerPriceId = options.providerPriceId;
|
|
236
|
-
if (options.stripeProductId !== void 0) this.stripeProductId = options.stripeProductId;
|
|
237
|
-
if (options.stripePriceId !== void 0) this.stripePriceId = options.stripePriceId;
|
|
238
|
-
if (options.features !== void 0) this.features = options.features;
|
|
239
|
-
if (options.thresholds !== void 0) this.thresholds = options.thresholds;
|
|
240
|
-
if (options.metadata !== void 0) this.metadata = options.metadata;
|
|
241
|
-
}
|
|
242
|
-
isActive() {
|
|
243
|
-
return this.status === "active";
|
|
244
|
-
}
|
|
245
|
-
getFeatureGrants() {
|
|
246
|
-
return normalizeFeatureGrants(parseJsonArray(this.features));
|
|
247
|
-
}
|
|
248
|
-
setFeatureGrants(grants) {
|
|
249
|
-
this.features = stringifyJson(normalizeFeatureGrants(grants));
|
|
250
|
-
}
|
|
251
|
-
getFeatureKeys() {
|
|
252
|
-
return this.getFeatureGrants().filter((grant) => grant.enabled !== false).map((grant) => grant.featureKey);
|
|
253
|
-
}
|
|
254
|
-
getThresholds() {
|
|
255
|
-
return parseJsonArray(this.thresholds).filter((threshold) => threshold.metricKey);
|
|
256
|
-
}
|
|
257
|
-
setThresholds(thresholds) {
|
|
258
|
-
this.thresholds = stringifyJson(thresholds);
|
|
259
|
-
}
|
|
260
|
-
getMetadata() {
|
|
261
|
-
return parseJsonObject(this.metadata, {});
|
|
262
|
-
}
|
|
263
|
-
setMetadata(metadata) {
|
|
264
|
-
this.metadata = stringifyJson(metadata);
|
|
265
|
-
}
|
|
266
|
-
async validateBeforeSave() {
|
|
267
|
-
await super.validateBeforeSave();
|
|
268
|
-
const { SubscriptionPlanCollection } = await Promise.resolve().then(() => SubscriptionPlanCollection_exports);
|
|
269
|
-
const plans = await SubscriptionPlanCollection.create({ db: this.db });
|
|
270
|
-
const persisted = (this.id ? await plans.get({ id: String(this.id) }, { cache: false }) : null) ?? await plans.findByPlanKey(this.tenantId ?? getTenantId() ?? null, this.planKey);
|
|
271
|
-
if (!persisted) this.requireInsertOnSave();
|
|
272
|
-
if (persisted && (persisted.pricingMode !== this.pricingMode || persisted.minimumAmount !== this.minimumAmount)) throw new Error("Create a new plan to change pricing mode or minimum after persistence");
|
|
273
|
-
if (![
|
|
274
|
-
"free",
|
|
275
|
-
"fixed",
|
|
276
|
-
"pay_what_you_can"
|
|
277
|
-
].includes(this.pricingMode)) throw new Error("Invalid pricingMode");
|
|
278
|
-
if (this.pricingMode !== "fixed" && this.priceAmount !== 0) throw new Error("priceAmount must be zero for free and pay_what_you_can plans");
|
|
279
|
-
for (const [name, value] of [
|
|
280
|
-
["priceAmount", this.priceAmount],
|
|
281
|
-
["minimumAmount", this.minimumAmount],
|
|
282
|
-
["suggestedAmount", this.suggestedAmount]
|
|
283
|
-
]) if (!Number.isSafeInteger(value) || value < 0) throw new Error(`${name} must be a non-negative integer minor-unit amount`);
|
|
284
|
-
if (this.pricingMode === "pay_what_you_can" && this.suggestedAmount > 0 && this.suggestedAmount < this.minimumAmount) throw new Error("suggestedAmount must be at least minimumAmount");
|
|
285
|
-
}
|
|
286
|
-
};
|
|
287
|
-
__publicField$4(SubscriptionPlan, "__smrtPackage__", "@happyvertical/smrt-subscriptions");
|
|
288
|
-
__decorateClass$4([tenantId({ nullable: true })], SubscriptionPlan.prototype, "tenantId", 2);
|
|
289
|
-
SubscriptionPlan = __decorateClass$4([TenantScoped({ mode: "optional" }), smrt({
|
|
290
|
-
tableName: "_smrt_subscription_plans",
|
|
291
|
-
api: { include: [
|
|
292
|
-
"list",
|
|
293
|
-
"get",
|
|
294
|
-
"create",
|
|
295
|
-
"update"
|
|
296
|
-
] },
|
|
297
|
-
cli: { skipApiCheck: true },
|
|
298
|
-
mcp: { include: ["list", "get"] },
|
|
299
|
-
conflictColumns: ["tenant_id", "plan_key"]
|
|
300
|
-
})], SubscriptionPlan);
|
|
301
|
-
//#endregion
|
|
302
|
-
//#region src/collections/SubscriptionPlanCollection.ts
|
|
303
|
-
var SubscriptionPlanCollection_exports = /* @__PURE__ */ __exportAll({ SubscriptionPlanCollection: () => SubscriptionPlanCollection });
|
|
304
|
-
var SubscriptionPlanCollection = class extends SmrtCollection {
|
|
305
|
-
static _itemClass = SubscriptionPlan;
|
|
306
|
-
async findByPlanKey(tenantId, planKey) {
|
|
307
|
-
return (await this.list({
|
|
308
|
-
where: {
|
|
309
|
-
tenantId,
|
|
310
|
-
planKey
|
|
311
|
-
},
|
|
312
|
-
limit: 1
|
|
313
|
-
}))[0] ?? null;
|
|
314
|
-
}
|
|
315
|
-
async findActive() {
|
|
316
|
-
return this.list({
|
|
317
|
-
where: { status: "active" },
|
|
318
|
-
orderBy: "sortOrder ASC"
|
|
319
|
-
});
|
|
320
|
-
}
|
|
321
|
-
async findByProviderPriceId(providerPriceId) {
|
|
322
|
-
const plans = await this.list({
|
|
323
|
-
where: { providerPriceId },
|
|
324
|
-
limit: 1
|
|
325
|
-
});
|
|
326
|
-
if (plans[0]) return plans[0];
|
|
327
|
-
return (await this.list({ where: { stripePriceId: providerPriceId } })).find((plan) => !plan.externalProvider || plan.externalProvider === "stripe") ?? null;
|
|
328
|
-
}
|
|
329
|
-
/** @deprecated Provider-neutral integrations should use findByProviderPriceId. */
|
|
330
|
-
async findByStripePriceId(stripePriceId) {
|
|
331
|
-
return (await this.list({
|
|
332
|
-
where: { stripePriceId },
|
|
333
|
-
limit: 1
|
|
334
|
-
}))[0] ?? null;
|
|
335
|
-
}
|
|
336
|
-
};
|
|
10
|
+
ObjectRegistry.registerPackageManifest(JSON.parse(`{"version":"1.0.0","timestamp":0,"packageName":"@happyvertical/smrt-subscriptions","packageVersion":"0.57.11","objects":{"@happyvertical/smrt-subscriptions:SubscriptionPlanCollection":{"name":"subscriptionplancollection","className":"SubscriptionPlanCollection","qualifiedName":"@happyvertical/smrt-subscriptions:SubscriptionPlanCollection","collection":"subscriptionplans","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/collections/SubscriptionPlanCollection.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{},"methods":{"findByPlanKey":{"name":"findByPlanKey","async":true,"parameters":[{"name":"tenantId","type":"string | null","optional":false,"unionBranches":[{"type":"string"},{"type":"null"}]},{"name":"planKey","type":"string","optional":false}],"returnType":"Promise<SubscriptionPlan | null>","isStatic":false,"isPublic":true},"findActive":{"name":"findActive","async":true,"parameters":[],"returnType":"Promise<SubscriptionPlan[]>","isStatic":false,"isPublic":true},"findByProviderPriceId":{"name":"findByProviderPriceId","async":true,"parameters":[{"name":"providerPriceId","type":"string","optional":false}],"returnType":"Promise<SubscriptionPlan | null>","isStatic":false,"isPublic":true},"findByStripePriceId":{"name":"findByStripePriceId","async":true,"parameters":[{"name":"stripePriceId","type":"string","optional":false}],"returnType":"Promise<SubscriptionPlan | null>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"_smrt_subscription_plans","api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get"]}},"extends":"SmrtCollection","extendsTypeArg":"SubscriptionPlan","exportName":"SubscriptionPlanCollection","collectionExportName":"SubscriptionPlanCollectionCollection","schema":{"tableName":"_smrt_subscription_plans","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_subscription_plans\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"plan_key\\" TEXT DEFAULT '',\\n \\"name\\" TEXT DEFAULT '',\\n \\"description\\" TEXT DEFAULT '',\\n \\"status\\" TEXT DEFAULT 'active',\\n \\"sort_order\\" INTEGER DEFAULT 0,\\n \\"price_amount\\" INTEGER DEFAULT 0,\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"billing_interval\\" TEXT DEFAULT 'month',\\n \\"pricing_mode\\" TEXT DEFAULT 'fixed',\\n \\"minimum_amount\\" INTEGER DEFAULT 0,\\n \\"suggested_amount\\" INTEGER DEFAULT 0,\\n \\"external_provider\\" TEXT,\\n \\"provider_product_id\\" TEXT,\\n \\"provider_price_id\\" TEXT,\\n \\"stripe_product_id\\" TEXT,\\n \\"stripe_price_id\\" TEXT,\\n \\"features\\" TEXT DEFAULT '[]',\\n \\"thresholds\\" TEXT DEFAULT '[]',\\n \\"metadata\\" TEXT DEFAULT '{}'\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false,"unique":false},"plan_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"name":{"type":"TEXT","notNull":false,"unique":false,"default":""},"description":{"type":"TEXT","notNull":false,"unique":false,"default":""},"status":{"type":"TEXT","notNull":false,"unique":false,"default":"active"},"sort_order":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"price_amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"billing_interval":{"type":"TEXT","notNull":false,"unique":false,"default":"month"},"pricing_mode":{"type":"TEXT","notNull":false,"unique":false,"default":"fixed"},"minimum_amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"suggested_amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"external_provider":{"type":"TEXT","notNull":false,"unique":false},"provider_product_id":{"type":"TEXT","notNull":false,"unique":false},"provider_price_id":{"type":"TEXT","notNull":false,"unique":false},"stripe_product_id":{"type":"TEXT","notNull":false,"unique":false},"stripe_price_id":{"type":"TEXT","notNull":false,"unique":false},"features":{"type":"TEXT","notNull":false,"unique":false,"default":"[]"},"thresholds":{"type":"TEXT","notNull":false,"unique":false,"default":"[]"},"metadata":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"}},"indexes":[{"name":"_smrt_subscription_plans_tenant_id_plan_key_idx","columns":["tenant_id","plan_key"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_subscription_plans_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_subscription_plans_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"02602c74"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:SubscriptionPlanVersionCollection":{"name":"subscriptionplanversioncollection","className":"SubscriptionPlanVersionCollection","qualifiedName":"@happyvertical/smrt-subscriptions:SubscriptionPlanVersionCollection","collection":"subscriptionplanversions","description":"Effective-dated plan versions (#4032).","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/collections/SubscriptionPlanVersionCollection.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{},"methods":{"findVisibleById":{"name":"findVisibleById","async":true,"parameters":[{"name":"id","type":"string","optional":false}],"returnType":"Promise<SubscriptionPlanVersion | null>","isStatic":false,"isPublic":true},"listForPlan":{"name":"listForPlan","async":true,"parameters":[{"name":"planId","type":"string","optional":false}],"returnType":"Promise<SubscriptionPlanVersion[]>","isStatic":false,"isPublic":true},"findLatest":{"name":"findLatest","async":true,"parameters":[{"name":"planId","type":"string","optional":false},{"name":"tenantId","type":"string | null","optional":true,"unionBranches":[{"type":"string"},{"type":"null"}]}],"returnType":"Promise<SubscriptionPlanVersion | null>","isStatic":false,"isPublic":true},"findInForce":{"name":"findInForce","async":true,"parameters":[{"name":"planId","type":"string","optional":false},{"name":"at","type":"Date","optional":false}],"returnType":"Promise<SubscriptionPlanVersion | null>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"_smrt_subscription_plan_versions","api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get"]}},"extends":"SmrtCollection","extendsTypeArg":"SubscriptionPlanVersion","exportName":"SubscriptionPlanVersionCollection","collectionExportName":"SubscriptionPlanVersionCollectionCollection","schema":{"tableName":"_smrt_subscription_plan_versions","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_subscription_plan_versions\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"plan_id\\" UUID,\\n \\"plan_key\\" TEXT DEFAULT '',\\n \\"version\\" INTEGER DEFAULT 0,\\n \\"effective_from\\" TIMESTAMP,\\n \\"name\\" TEXT DEFAULT '',\\n \\"status\\" TEXT DEFAULT 'active',\\n \\"price_amount\\" INTEGER DEFAULT 0,\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"billing_interval\\" TEXT DEFAULT 'month',\\n \\"pricing_mode\\" TEXT DEFAULT 'fixed',\\n \\"minimum_amount\\" INTEGER DEFAULT 0,\\n \\"suggested_amount\\" INTEGER DEFAULT 0,\\n \\"features\\" TEXT DEFAULT '[]',\\n \\"thresholds\\" TEXT DEFAULT '[]'\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false,"unique":false},"plan_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_subscription_plans","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"plan_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"version":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"effective_from":{"type":"TIMESTAMP","notNull":false,"unique":false},"name":{"type":"TEXT","notNull":false,"unique":false,"default":""},"status":{"type":"TEXT","notNull":false,"unique":false,"default":"active"},"price_amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"billing_interval":{"type":"TEXT","notNull":false,"unique":false,"default":"month"},"pricing_mode":{"type":"TEXT","notNull":false,"unique":false,"default":"fixed"},"minimum_amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"suggested_amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"features":{"type":"TEXT","notNull":false,"unique":false,"default":"[]"},"thresholds":{"type":"TEXT","notNull":false,"unique":false,"default":"[]"}},"indexes":[{"name":"_smrt_subscription_plan_versions_plan_id_version_idx","columns":["plan_id","version"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_subscription_plan_versions_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_subscription_plan_versions_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"f610e477"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:TenantSubscriptionCollection":{"name":"tenantsubscriptioncollection","className":"TenantSubscriptionCollection","qualifiedName":"@happyvertical/smrt-subscriptions:TenantSubscriptionCollection","collection":"tenantsubscriptions","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/collections/TenantSubscriptionCollection.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{},"methods":{"findByTenant":{"name":"findByTenant","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<TenantSubscription[]>","isStatic":false,"isPublic":true},"findCurrentForTenant":{"name":"findCurrentForTenant","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false},{"name":"now","type":"any","optional":true}],"returnType":"Promise<TenantSubscription | null>","isStatic":false,"isPublic":true},"findCurrentForSubscriber":{"name":"findCurrentForSubscriber","async":true,"parameters":[{"name":"subscriber","type":"Subscriber","optional":false},{"name":"now","type":"any","optional":true}],"returnType":"Promise<TenantSubscription | null>","isStatic":false,"isPublic":true},"findByStripeSubscriptionId":{"name":"findByStripeSubscriptionId","async":true,"parameters":[{"name":"stripeSubscriptionId","type":"string","optional":false}],"returnType":"Promise<TenantSubscription | null>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"_smrt_tenant_subscriptions","api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get"]}},"extends":"SmrtCollection","extendsTypeArg":"TenantSubscription","exportName":"TenantSubscriptionCollection","collectionExportName":"TenantSubscriptionCollectionCollection","schema":{"tableName":"_smrt_tenant_subscriptions","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_tenant_subscriptions\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"subscriber_kind\\" TEXT DEFAULT 'tenant',\\n \\"subscriber_external_id\\" TEXT DEFAULT '',\\n \\"plan_id\\" UUID,\\n \\"status\\" TEXT DEFAULT 'incomplete',\\n \\"started_at\\" TIMESTAMP,\\n \\"current_period_start\\" TIMESTAMP,\\n \\"current_period_end\\" TIMESTAMP,\\n \\"trial_ends_at\\" TIMESTAMP,\\n \\"cancel_at_period_end\\" BOOLEAN DEFAULT FALSE,\\n \\"canceled_at\\" TIMESTAMP,\\n \\"agreed_amount\\" INTEGER,\\n \\"plan_version_id\\" UUID,\\n \\"plan_version_pinned_at\\" TIMESTAMP,\\n \\"plan_version_pin_reason\\" TEXT,\\n \\"plan_version_pin_note\\" TEXT DEFAULT '',\\n \\"retains_paid_period\\" BOOLEAN DEFAULT FALSE,\\n \\"external_provider\\" TEXT,\\n \\"stripe_customer_id\\" TEXT DEFAULT '',\\n \\"stripe_subscription_id\\" TEXT DEFAULT '',\\n \\"stripe_checkout_session_id\\" TEXT DEFAULT '',\\n \\"metadata\\" TEXT DEFAULT '{}'\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"subscriber_kind":{"type":"TEXT","notNull":false,"unique":false,"default":"tenant"},"subscriber_external_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"plan_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_subscription_plans","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"status":{"type":"TEXT","notNull":false,"unique":false,"default":"incomplete"},"started_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"current_period_start":{"type":"TIMESTAMP","notNull":false,"unique":false},"current_period_end":{"type":"TIMESTAMP","notNull":false,"unique":false},"trial_ends_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"cancel_at_period_end":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false},"canceled_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"agreed_amount":{"type":"INTEGER","notNull":false,"unique":false},"plan_version_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_subscription_plan_versions","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"plan_version_pinned_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"plan_version_pin_reason":{"type":"TEXT","notNull":false,"unique":false},"plan_version_pin_note":{"type":"TEXT","notNull":false,"unique":false,"default":""},"retains_paid_period":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false},"external_provider":{"type":"TEXT","notNull":false,"unique":false},"stripe_customer_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"stripe_subscription_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"stripe_checkout_session_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"metadata":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"}},"indexes":[{"name":"_smrt_tenant_subscriptions_tenant_id_subscriber_kind_idx","columns":["tenant_id","subscriber_kind","subscriber_external_id"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_tenant_subscriptions_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_tenant_subscriptions_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_tenant_subscriptions_plan_id_idx","columns":["plan_id"]},{"name":"_smrt_tenant_subscriptions_plan_version_id_idx","columns":["plan_version_id"]}],"version":"328e412c"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:TenantUsageMetricCollection":{"name":"tenantusagemetriccollection","className":"TenantUsageMetricCollection","qualifiedName":"@happyvertical/smrt-subscriptions:TenantUsageMetricCollection","collection":"tenantusagemetrics","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/collections/TenantUsageMetricCollection.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{},"methods":{"recordUsage":{"name":"recordUsage","async":true,"parameters":[{"name":"options","type":"RecordUsageOptions","optional":false}],"returnType":"Promise<TenantUsageMetric>","isStatic":false,"isPublic":true},"findByTenantAndMetric":{"name":"findByTenantAndMetric","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false},{"name":"metricKey","type":"string","optional":false}],"returnType":"Promise<TenantUsageMetric[]>","isStatic":false,"isPublic":true},"summarizeUsage":{"name":"summarizeUsage","async":true,"parameters":[{"name":"options","type":"SummarizeUsageOptions","optional":false}],"returnType":"Promise<UsageSummary>","isStatic":false,"isPublic":true},"summarizeUsageBatch":{"name":"summarizeUsageBatch","async":true,"parameters":[{"name":"options","type":"SummarizeUsageBatchOptions","optional":false}],"returnType":"Promise<UsageSummary[]>","isStatic":false,"isPublic":true},"summarizeTenantAiUsage":{"name":"summarizeTenantAiUsage","async":true,"parameters":[{"name":"options","type":"SummarizeAiUsageOptions","optional":false}],"returnType":"Promise<AiUsageSummary>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"_smrt_tenant_usage_metrics","api":{"include":["list","get","create"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get","create"]}},"extends":"SmrtCollection","extendsTypeArg":"TenantUsageMetric","exportName":"TenantUsageMetricCollection","collectionExportName":"TenantUsageMetricCollectionCollection","schema":{"tableName":"_smrt_tenant_usage_metrics","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_tenant_usage_metrics\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"subscriber_kind\\" TEXT DEFAULT 'tenant',\\n \\"subscriber_external_id\\" TEXT DEFAULT '',\\n \\"metric_key\\" TEXT DEFAULT '',\\n \\"quantity\\" REAL DEFAULT 0,\\n \\"window_start\\" TIMESTAMP,\\n \\"window_end\\" TIMESTAMP,\\n \\"source\\" TEXT DEFAULT '',\\n \\"source_id\\" TEXT DEFAULT '',\\n \\"project_id\\" TEXT DEFAULT '',\\n \\"work_ref_type\\" TEXT DEFAULT '',\\n \\"work_ref_id\\" TEXT DEFAULT '',\\n \\"provider\\" TEXT DEFAULT '',\\n \\"dimensions\\" TEXT DEFAULT '{}'\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"subscriber_kind":{"type":"TEXT","notNull":false,"unique":false,"default":"tenant"},"subscriber_external_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"metric_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"quantity":{"type":"REAL","notNull":false,"unique":false,"default":0},"window_start":{"type":"TIMESTAMP","notNull":false,"unique":false},"window_end":{"type":"TIMESTAMP","notNull":false,"unique":false},"source":{"type":"TEXT","notNull":false,"unique":false,"default":""},"source_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"project_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"work_ref_type":{"type":"TEXT","notNull":false,"unique":false,"default":""},"work_ref_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"provider":{"type":"TEXT","notNull":false,"unique":false,"default":""},"dimensions":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"}},"indexes":[{"name":"_smrt_tenant_usage_metrics_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"_smrt_tenant_usage_metrics_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"b799c746"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:SubscriptionPlan":{"name":"subscriptionplan","className":"SubscriptionPlan","qualifiedName":"@happyvertical/smrt-subscriptions:SubscriptionPlan","collection":"subscriptionplans","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/SubscriptionPlan.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{"tenantId":{"type":"text","required":false,"_meta":{"sqlType":"UUID","nullable":true,"__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":false,"autoPopulate":true,"nullable":true,"mode":"optional","field":"tenantId","allowSuperAdminBypass":false}}},"planKey":{"type":"text","required":false,"default":""},"name":{"type":"text","required":false,"default":""},"description":{"type":"text","required":false,"default":""},"status":{"type":"text","required":false,"default":"active","enum":["active","archived","draft"]},"sortOrder":{"type":"integer","required":false,"default":0},"priceAmount":{"type":"integer","required":false,"default":0},"currency":{"type":"text","required":false,"default":"USD"},"billingInterval":{"type":"text","required":false,"default":"month","enum":["day","week","month","year"]},"pricingMode":{"type":"text","required":false,"default":"fixed","enum":["free","fixed","pay_what_you_can"]},"minimumAmount":{"type":"integer","required":false,"default":0},"suggestedAmount":{"type":"integer","required":false,"default":0},"externalProvider":{"type":"text","required":false},"providerProductId":{"type":"text","required":false},"providerPriceId":{"type":"text","required":false},"stripeProductId":{"type":"text","required":false},"stripePriceId":{"type":"text","required":false},"features":{"type":"text","required":false,"default":"[]"},"thresholds":{"type":"text","required":false,"default":"[]"},"metadata":{"type":"text","required":false,"default":"{}"}},"methods":{"isActive":{"name":"isActive","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"getTerms":{"name":"getTerms","async":false,"parameters":[],"returnType":"PlanTerms","isStatic":false,"isPublic":true},"save":{"name":"save","async":true,"parameters":[{"name":"options","type":"SmrtSaveOptions","optional":true}],"returnType":"Promise<this>","isStatic":false,"isPublic":true},"publishTerms":{"name":"publishTerms","async":true,"parameters":[{"name":"options","type":"object","optional":true,"memberTypes":["Date"]}],"returnType":"Promise<SubscriptionPlanVersion>","isStatic":false,"isPublic":true},"getVersionInForce":{"name":"getVersionInForce","async":true,"parameters":[{"name":"at","type":"any","optional":true}],"returnType":"Promise<SubscriptionPlanVersion | null>","isStatic":false,"isPublic":true},"getFeatureGrants":{"name":"getFeatureGrants","async":false,"parameters":[],"returnType":"PlanFeatureGrant[]","isStatic":false,"isPublic":true},"setFeatureGrants":{"name":"setFeatureGrants","async":false,"parameters":[{"name":"grants","type":"Array<string | PlanFeatureGrant>","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"getFeatureKeys":{"name":"getFeatureKeys","async":false,"parameters":[],"returnType":"string[]","isStatic":false,"isPublic":true},"getThresholds":{"name":"getThresholds","async":false,"parameters":[],"returnType":"PlanThreshold[]","isStatic":false,"isPublic":true},"setThresholds":{"name":"setThresholds","async":false,"parameters":[{"name":"thresholds","type":"PlanThreshold[]","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"getMetadata":{"name":"getMetadata","async":false,"parameters":[],"returnType":"JsonObject","isStatic":false,"isPublic":true},"setMetadata":{"name":"setMetadata","async":false,"parameters":[{"name":"metadata","type":"JsonObject","optional":false}],"returnType":"void","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"_smrt_subscription_plans","api":{"include":["list","get","create","update"]},"cli":{"skipApiCheck":true},"mcp":{"include":["list","get"]},"conflictColumns":["tenant_id","plan_key"],"tenantScoped":{"mode":"optional"}},"extends":"SmrtObject","exportName":"SubscriptionPlan","collectionExportName":"SubscriptionPlanCollection","displayLabelField":"name","schema":{"tableName":"_smrt_subscription_plans","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_subscription_plans\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"plan_key\\" TEXT DEFAULT '',\\n \\"name\\" TEXT DEFAULT '',\\n \\"description\\" TEXT DEFAULT '',\\n \\"status\\" TEXT DEFAULT 'active',\\n \\"sort_order\\" INTEGER DEFAULT 0,\\n \\"price_amount\\" INTEGER DEFAULT 0,\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"billing_interval\\" TEXT DEFAULT 'month',\\n \\"pricing_mode\\" TEXT DEFAULT 'fixed',\\n \\"minimum_amount\\" INTEGER DEFAULT 0,\\n \\"suggested_amount\\" INTEGER DEFAULT 0,\\n \\"external_provider\\" TEXT,\\n \\"provider_product_id\\" TEXT,\\n \\"provider_price_id\\" TEXT,\\n \\"stripe_product_id\\" TEXT,\\n \\"stripe_price_id\\" TEXT,\\n \\"features\\" TEXT DEFAULT '[]',\\n \\"thresholds\\" TEXT DEFAULT '[]',\\n \\"metadata\\" TEXT DEFAULT '{}'\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false,"unique":false},"plan_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"name":{"type":"TEXT","notNull":false,"unique":false,"default":""},"description":{"type":"TEXT","notNull":false,"unique":false,"default":""},"status":{"type":"TEXT","notNull":false,"unique":false,"default":"active"},"sort_order":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"price_amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"billing_interval":{"type":"TEXT","notNull":false,"unique":false,"default":"month"},"pricing_mode":{"type":"TEXT","notNull":false,"unique":false,"default":"fixed"},"minimum_amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"suggested_amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"external_provider":{"type":"TEXT","notNull":false,"unique":false},"provider_product_id":{"type":"TEXT","notNull":false,"unique":false},"provider_price_id":{"type":"TEXT","notNull":false,"unique":false},"stripe_product_id":{"type":"TEXT","notNull":false,"unique":false},"stripe_price_id":{"type":"TEXT","notNull":false,"unique":false},"features":{"type":"TEXT","notNull":false,"unique":false,"default":"[]"},"thresholds":{"type":"TEXT","notNull":false,"unique":false,"default":"[]"},"metadata":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"}},"indexes":[{"name":"_smrt_subscription_plans_tenant_id_plan_key_idx","columns":["tenant_id","plan_key"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_subscription_plans_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_subscription_plans_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"02602c74"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:SubscriptionPlanVersion":{"name":"subscriptionplanversion","className":"SubscriptionPlanVersion","qualifiedName":"@happyvertical/smrt-subscriptions:SubscriptionPlanVersion","collection":"subscriptionplanversions","description":"An immutable, effective-dated snapshot of a plan's terms (#4032).","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/SubscriptionPlanVersion.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{"tenantId":{"type":"text","required":false,"_meta":{"sqlType":"UUID","nullable":true,"__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":false,"autoPopulate":true,"nullable":true,"mode":"optional","field":"tenantId","allowSuperAdminBypass":false}}},"planId":{"type":"foreignKey","required":false,"related":"SubscriptionPlan"},"planKey":{"type":"text","required":false,"default":""},"version":{"type":"integer","required":false,"default":0},"effectiveFrom":{"type":"datetime","required":false},"name":{"type":"text","required":false,"default":""},"status":{"type":"text","required":false,"default":"active","enum":["active","archived","draft"]},"priceAmount":{"type":"integer","required":false,"default":0},"currency":{"type":"text","required":false,"default":"USD"},"billingInterval":{"type":"text","required":false,"default":"month","enum":["day","week","month","year"]},"pricingMode":{"type":"text","required":false,"default":"fixed","enum":["free","fixed","pay_what_you_can"]},"minimumAmount":{"type":"integer","required":false,"default":0},"suggestedAmount":{"type":"integer","required":false,"default":0},"features":{"type":"text","required":false,"default":"[]"},"thresholds":{"type":"text","required":false,"default":"[]"}},"methods":{"isActive":{"name":"isActive","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"getTerms":{"name":"getTerms","async":false,"parameters":[],"returnType":"PlanTerms","isStatic":false,"isPublic":true},"getFeatureGrants":{"name":"getFeatureGrants","async":false,"parameters":[],"returnType":"PlanFeatureGrant[]","isStatic":false,"isPublic":true},"getFeatureKeys":{"name":"getFeatureKeys","async":false,"parameters":[],"returnType":"string[]","isStatic":false,"isPublic":true},"getThresholds":{"name":"getThresholds","async":false,"parameters":[],"returnType":"PlanThreshold[]","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"_smrt_subscription_plan_versions","api":{"include":["list","get"]},"cli":{"include":["list","get"]},"mcp":{"include":["list","get"]},"conflictColumns":["plan_id","version"],"hooks":{"beforeDelete":"refuseDelete"},"tenantScoped":{"mode":"optional"}},"extends":"SmrtObject","exportName":"SubscriptionPlanVersion","collectionExportName":"SubscriptionPlanVersionCollection","displayLabelField":"name","schema":{"tableName":"_smrt_subscription_plan_versions","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_subscription_plan_versions\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"plan_id\\" UUID,\\n \\"plan_key\\" TEXT DEFAULT '',\\n \\"version\\" INTEGER DEFAULT 0,\\n \\"effective_from\\" TIMESTAMP,\\n \\"name\\" TEXT DEFAULT '',\\n \\"status\\" TEXT DEFAULT 'active',\\n \\"price_amount\\" INTEGER DEFAULT 0,\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"billing_interval\\" TEXT DEFAULT 'month',\\n \\"pricing_mode\\" TEXT DEFAULT 'fixed',\\n \\"minimum_amount\\" INTEGER DEFAULT 0,\\n \\"suggested_amount\\" INTEGER DEFAULT 0,\\n \\"features\\" TEXT DEFAULT '[]',\\n \\"thresholds\\" TEXT DEFAULT '[]'\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false,"unique":false},"plan_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_subscription_plans","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"plan_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"version":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"effective_from":{"type":"TIMESTAMP","notNull":false,"unique":false},"name":{"type":"TEXT","notNull":false,"unique":false,"default":""},"status":{"type":"TEXT","notNull":false,"unique":false,"default":"active"},"price_amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"billing_interval":{"type":"TEXT","notNull":false,"unique":false,"default":"month"},"pricing_mode":{"type":"TEXT","notNull":false,"unique":false,"default":"fixed"},"minimum_amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"suggested_amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"features":{"type":"TEXT","notNull":false,"unique":false,"default":"[]"},"thresholds":{"type":"TEXT","notNull":false,"unique":false,"default":"[]"}},"indexes":[{"name":"_smrt_subscription_plan_versions_plan_id_version_idx","columns":["plan_id","version"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_subscription_plan_versions_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_subscription_plan_versions_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"f610e477"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:TenantSubscription":{"name":"tenantsubscription","className":"TenantSubscription","qualifiedName":"@happyvertical/smrt-subscriptions:TenantSubscription","collection":"tenantsubscriptions","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/TenantSubscription.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"subscriberKind":{"type":"text","required":false,"default":"tenant","enum":["tenant","external"]},"subscriberExternalId":{"type":"text","required":false,"default":""},"planId":{"type":"foreignKey","required":false,"related":"SubscriptionPlan"},"status":{"type":"text","required":false,"default":"incomplete","enum":["active","canceled","incomplete","past_due","trialing","unpaid"]},"startedAt":{"type":"datetime","required":false},"currentPeriodStart":{"type":"datetime","required":false},"currentPeriodEnd":{"type":"datetime","required":false},"trialEndsAt":{"type":"datetime","required":false},"cancelAtPeriodEnd":{"type":"boolean","required":false,"default":false},"canceledAt":{"type":"datetime","required":false},"agreedAmount":{"type":"integer","required":false},"planVersionId":{"type":"foreignKey","required":false,"related":"SubscriptionPlanVersion"},"planVersionPinnedAt":{"type":"datetime","required":false},"planVersionPinReason":{"type":"text","required":false,"enum":["period_start","renewal","upgrade","authorized","migration"]},"planVersionPinNote":{"type":"text","required":false,"default":""},"retainsPaidPeriod":{"type":"boolean","required":false,"default":false},"externalProvider":{"type":"text","required":false},"stripeCustomerId":{"type":"text","required":false,"default":""},"stripeSubscriptionId":{"type":"text","required":false,"default":""},"stripeCheckoutSessionId":{"type":"text","required":false,"default":""},"metadata":{"type":"text","required":false,"default":"{}"}},"methods":{"replacePlanVersion":{"name":"replacePlanVersion","async":true,"parameters":[{"name":"options","type":"any","optional":false,"typeUnresolved":true}],"returnType":"Promise<this>","isStatic":false,"isPublic":true},"isEntitled":{"name":"isEntitled","async":false,"parameters":[{"name":"now","type":"any","optional":true}],"returnType":"boolean","isStatic":false,"isPublic":true},"getSubscriber":{"name":"getSubscriber","async":false,"parameters":[],"returnType":"Subscriber | null","isStatic":false,"isPublic":true},"getMetadata":{"name":"getMetadata","async":false,"parameters":[],"returnType":"JsonObject","isStatic":false,"isPublic":true},"setMetadata":{"name":"setMetadata","async":false,"parameters":[{"name":"metadata","type":"JsonObject","optional":false}],"returnType":"void","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"_smrt_tenant_subscriptions","api":{"include":["list","get","create","update"]},"cli":{"skipApiCheck":true},"mcp":{"include":["list","get"]},"conflictColumns":["tenant_id","subscriber_kind","subscriber_external_id"],"tenantScoped":{"mode":"required"}},"extends":"SmrtObject","exportName":"TenantSubscription","collectionExportName":"TenantSubscriptionCollection","validationRules":[],"schema":{"tableName":"_smrt_tenant_subscriptions","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_tenant_subscriptions\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"subscriber_kind\\" TEXT DEFAULT 'tenant',\\n \\"subscriber_external_id\\" TEXT DEFAULT '',\\n \\"plan_id\\" UUID,\\n \\"status\\" TEXT DEFAULT 'incomplete',\\n \\"started_at\\" TIMESTAMP,\\n \\"current_period_start\\" TIMESTAMP,\\n \\"current_period_end\\" TIMESTAMP,\\n \\"trial_ends_at\\" TIMESTAMP,\\n \\"cancel_at_period_end\\" BOOLEAN DEFAULT FALSE,\\n \\"canceled_at\\" TIMESTAMP,\\n \\"agreed_amount\\" INTEGER,\\n \\"plan_version_id\\" UUID,\\n \\"plan_version_pinned_at\\" TIMESTAMP,\\n \\"plan_version_pin_reason\\" TEXT,\\n \\"plan_version_pin_note\\" TEXT DEFAULT '',\\n \\"retains_paid_period\\" BOOLEAN DEFAULT FALSE,\\n \\"external_provider\\" TEXT,\\n \\"stripe_customer_id\\" TEXT DEFAULT '',\\n \\"stripe_subscription_id\\" TEXT DEFAULT '',\\n \\"stripe_checkout_session_id\\" TEXT DEFAULT '',\\n \\"metadata\\" TEXT DEFAULT '{}'\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"subscriber_kind":{"type":"TEXT","notNull":false,"unique":false,"default":"tenant"},"subscriber_external_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"plan_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_subscription_plans","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"status":{"type":"TEXT","notNull":false,"unique":false,"default":"incomplete"},"started_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"current_period_start":{"type":"TIMESTAMP","notNull":false,"unique":false},"current_period_end":{"type":"TIMESTAMP","notNull":false,"unique":false},"trial_ends_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"cancel_at_period_end":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false},"canceled_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"agreed_amount":{"type":"INTEGER","notNull":false,"unique":false},"plan_version_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_subscription_plan_versions","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"plan_version_pinned_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"plan_version_pin_reason":{"type":"TEXT","notNull":false,"unique":false},"plan_version_pin_note":{"type":"TEXT","notNull":false,"unique":false,"default":""},"retains_paid_period":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false},"external_provider":{"type":"TEXT","notNull":false,"unique":false},"stripe_customer_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"stripe_subscription_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"stripe_checkout_session_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"metadata":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"}},"indexes":[{"name":"_smrt_tenant_subscriptions_tenant_id_subscriber_kind_idx","columns":["tenant_id","subscriber_kind","subscriber_external_id"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_tenant_subscriptions_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_tenant_subscriptions_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_tenant_subscriptions_plan_id_idx","columns":["plan_id"]},{"name":"_smrt_tenant_subscriptions_plan_version_id_idx","columns":["plan_version_id"]}],"version":"328e412c"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:TenantUsageMetric":{"name":"tenantusagemetric","className":"TenantUsageMetric","qualifiedName":"@happyvertical/smrt-subscriptions:TenantUsageMetric","collection":"tenantusagemetrics","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/TenantUsageMetric.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"subscriberKind":{"type":"text","required":false,"default":"tenant","enum":["tenant","external"]},"subscriberExternalId":{"type":"text","required":false,"default":""},"metricKey":{"type":"text","required":false,"default":""},"quantity":{"type":"decimal","required":false,"default":0},"windowStart":{"type":"datetime","required":false},"windowEnd":{"type":"datetime","required":false},"source":{"type":"text","required":false,"default":""},"sourceId":{"type":"text","required":false,"default":""},"projectId":{"type":"text","required":false,"default":""},"workRefType":{"type":"text","required":false,"default":""},"workRefId":{"type":"text","required":false,"default":""},"provider":{"type":"text","required":false,"default":""},"dimensions":{"type":"text","required":false,"default":"{}"}},"methods":{"getSubscriber":{"name":"getSubscriber","async":false,"parameters":[],"returnType":"Subscriber | null","isStatic":false,"isPublic":true},"getDimensions":{"name":"getDimensions","async":false,"parameters":[],"returnType":"JsonObject","isStatic":false,"isPublic":true},"setDimensions":{"name":"setDimensions","async":false,"parameters":[{"name":"dimensions","type":"JsonObject","optional":false}],"returnType":"void","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"_smrt_tenant_usage_metrics","api":{"include":["list","get","create"]},"cli":{"include":["list","get","create"]},"mcp":{"include":["list","get"]},"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"TenantUsageMetric","collectionExportName":"TenantUsageMetricCollection","validationRules":[],"schema":{"tableName":"_smrt_tenant_usage_metrics","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_tenant_usage_metrics\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"subscriber_kind\\" TEXT DEFAULT 'tenant',\\n \\"subscriber_external_id\\" TEXT DEFAULT '',\\n \\"metric_key\\" TEXT DEFAULT '',\\n \\"quantity\\" REAL DEFAULT 0,\\n \\"window_start\\" TIMESTAMP,\\n \\"window_end\\" TIMESTAMP,\\n \\"source\\" TEXT DEFAULT '',\\n \\"source_id\\" TEXT DEFAULT '',\\n \\"project_id\\" TEXT DEFAULT '',\\n \\"work_ref_type\\" TEXT DEFAULT '',\\n \\"work_ref_id\\" TEXT DEFAULT '',\\n \\"provider\\" TEXT DEFAULT '',\\n \\"dimensions\\" TEXT DEFAULT '{}'\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"subscriber_kind":{"type":"TEXT","notNull":false,"unique":false,"default":"tenant"},"subscriber_external_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"metric_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"quantity":{"type":"REAL","notNull":false,"unique":false,"default":0},"window_start":{"type":"TIMESTAMP","notNull":false,"unique":false},"window_end":{"type":"TIMESTAMP","notNull":false,"unique":false},"source":{"type":"TEXT","notNull":false,"unique":false,"default":""},"source_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"project_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"work_ref_type":{"type":"TEXT","notNull":false,"unique":false,"default":""},"work_ref_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"provider":{"type":"TEXT","notNull":false,"unique":false,"default":""},"dimensions":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"}},"indexes":[{"name":"_smrt_tenant_usage_metrics_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"_smrt_tenant_usage_metrics_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"b799c746"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:PricingRule":{"name":"pricingrule","className":"PricingRule","qualifiedName":"@happyvertical/smrt-subscriptions:PricingRule","collection":"pricingrules","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/commercial.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"ruleKey":{"type":"text","required":false,"default":""},"metricKey":{"type":"text","required":false,"default":""},"serviceKey":{"type":"text","required":false,"default":""},"strategy":{"type":"text","required":false,"default":"fixed_unit","enum":["fixed_unit","cost_plus","multiplier","tiered","included_overage","flat","custom"]},"currency":{"type":"text","required":false,"default":"USD"},"effectiveFrom":{"type":"datetime","required":false},"effectiveTo":{"type":"datetime","required":false},"priority":{"type":"integer","required":false,"default":0},"terms":{"type":"text","required":false,"default":"{}"},"active":{"type":"boolean","required":false,"default":true},"priceBookId":{"type":"foreignKey","required":false,"related":"PriceBook"}},"methods":{"getTerms":{"name":"getTerms","async":false,"parameters":[],"returnType":"Record<string, unknown>","isStatic":false,"isPublic":true},"setTerms":{"name":"setTerms","async":false,"parameters":[{"name":"value","type":"Record<string, unknown>","optional":false}],"returnType":"void","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"_smrt_pricing_rules","api":true,"cli":true,"mcp":true,"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"PricingRule","collectionExportName":"PricingRuleCollection","validationRules":[],"schema":{"tableName":"_smrt_pricing_rules","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_pricing_rules\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"rule_key\\" TEXT DEFAULT '',\\n \\"metric_key\\" TEXT DEFAULT '',\\n \\"service_key\\" TEXT DEFAULT '',\\n \\"strategy\\" TEXT DEFAULT 'fixed_unit',\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"effective_from\\" TIMESTAMP,\\n \\"effective_to\\" TIMESTAMP,\\n \\"priority\\" INTEGER DEFAULT 0,\\n \\"terms\\" TEXT DEFAULT '{}',\\n \\"active\\" BOOLEAN DEFAULT TRUE,\\n \\"price_book_id\\" UUID\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"rule_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"metric_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"service_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"strategy":{"type":"TEXT","notNull":false,"unique":false,"default":"fixed_unit"},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"effective_from":{"type":"TIMESTAMP","notNull":false,"unique":false},"effective_to":{"type":"TIMESTAMP","notNull":false,"unique":false},"priority":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"terms":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"active":{"type":"BOOLEAN","notNull":false,"unique":false,"default":true},"price_book_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_price_books","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}}},"indexes":[{"name":"_smrt_pricing_rules_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"_smrt_pricing_rules_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_pricing_rules_price_book_id_idx","columns":["price_book_id"]}],"version":"65ce9b3f"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:ClientCharge":{"name":"clientcharge","className":"ClientCharge","qualifiedName":"@happyvertical/smrt-subscriptions:ClientCharge","collection":"clientcharges","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/commercial.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"usageEventId":{"type":"foreignKey","required":false,"related":"TenantUsageMetric"},"usageTenantId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-users:Tenant"},"subscriberKind":{"type":"text","required":false,"default":"tenant"},"subscriberExternalId":{"type":"text","required":false,"default":""},"projectId":{"type":"text","required":false,"default":""},"workRefType":{"type":"text","required":false,"default":""},"workRefId":{"type":"text","required":false,"default":""},"provider":{"type":"text","required":false,"default":""},"serviceKey":{"type":"text","required":false,"default":""},"metricKey":{"type":"text","required":false,"default":""},"quantity":{"type":"decimal","required":false,"default":0},"amount":{"type":"integer","required":false,"default":0},"currency":{"type":"text","required":false,"default":"USD"},"pricingRuleId":{"type":"foreignKey","required":false,"related":"PricingRule"},"priceBookId":{"type":"foreignKey","required":false,"related":"PriceBook"},"pricingSnapshot":{"type":"text","required":false,"default":"{}"},"status":{"type":"text","required":false,"default":"draft","enum":["draft","approved","adjusted"]},"approvedAt":{"type":"datetime","required":false}},"methods":{"getPricingSnapshot":{"name":"getPricingSnapshot","async":false,"parameters":[],"returnType":"Record<string, unknown>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"_smrt_client_charges","api":{"include":["list","get"]},"cli":{"include":["list","get"]},"mcp":{"include":["list","get"]},"conflictColumns":["usage_event_id"],"tenantScoped":{"mode":"required"}},"extends":"SmrtObject","exportName":"ClientCharge","collectionExportName":"ClientChargeCollection","validationRules":[],"schema":{"tableName":"_smrt_client_charges","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_client_charges\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"usage_event_id\\" UUID,\\n \\"usage_tenant_id\\" UUID,\\n \\"subscriber_kind\\" TEXT DEFAULT 'tenant',\\n \\"subscriber_external_id\\" TEXT DEFAULT '',\\n \\"project_id\\" TEXT DEFAULT '',\\n \\"work_ref_type\\" TEXT DEFAULT '',\\n \\"work_ref_id\\" TEXT DEFAULT '',\\n \\"provider\\" TEXT DEFAULT '',\\n \\"service_key\\" TEXT DEFAULT '',\\n \\"metric_key\\" TEXT DEFAULT '',\\n \\"quantity\\" REAL DEFAULT 0,\\n \\"amount\\" INTEGER DEFAULT 0,\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"pricing_rule_id\\" UUID,\\n \\"price_book_id\\" UUID,\\n \\"pricing_snapshot\\" TEXT DEFAULT '{}',\\n \\"status\\" TEXT DEFAULT 'draft',\\n \\"approved_at\\" TIMESTAMP\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"usage_event_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_tenant_usage_metrics","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"usage_tenant_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false},"subscriber_kind":{"type":"TEXT","notNull":false,"unique":false,"default":"tenant"},"subscriber_external_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"project_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"work_ref_type":{"type":"TEXT","notNull":false,"unique":false,"default":""},"work_ref_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"provider":{"type":"TEXT","notNull":false,"unique":false,"default":""},"service_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"metric_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"quantity":{"type":"REAL","notNull":false,"unique":false,"default":0},"amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"pricing_rule_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_pricing_rules","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"price_book_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_price_books","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"pricing_snapshot":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"status":{"type":"TEXT","notNull":false,"unique":false,"default":"draft"},"approved_at":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"_smrt_client_charges_usage_event_id_idx","columns":["usage_event_id"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_client_charges_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_client_charges_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_client_charges_usage_tenant_id_idx","columns":["usage_tenant_id"]},{"name":"_smrt_client_charges_pricing_rule_id_idx","columns":["pricing_rule_id"]},{"name":"_smrt_client_charges_price_book_id_idx","columns":["price_book_id"]}],"version":"e542be95"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:BillingAdjustment":{"name":"billingadjustment","className":"BillingAdjustment","qualifiedName":"@happyvertical/smrt-subscriptions:BillingAdjustment","collection":"billingadjustments","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/commercial.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"clientChargeId":{"type":"foreignKey","required":false,"related":"ClientCharge"},"amount":{"type":"integer","required":false,"default":0},"currency":{"type":"text","required":false,"default":"USD"},"reason":{"type":"text","required":false,"default":""},"source":{"type":"text","required":false,"default":""},"sourceId":{"type":"text","required":false,"default":""},"createdBy":{"type":"text","required":false,"default":""}},"methods":{},"decoratorConfig":{"tableName":"_smrt_billing_adjustments","api":{"include":["list","get"]},"cli":{"include":["list","get"]},"mcp":{"include":["list","get"]},"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"BillingAdjustment","collectionExportName":"BillingAdjustmentCollection","validationRules":[],"schema":{"tableName":"_smrt_billing_adjustments","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_billing_adjustments\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"client_charge_id\\" UUID,\\n \\"amount\\" INTEGER DEFAULT 0,\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"reason\\" TEXT DEFAULT '',\\n \\"source\\" TEXT DEFAULT '',\\n \\"source_id\\" TEXT DEFAULT '',\\n \\"created_by\\" TEXT DEFAULT ''\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"client_charge_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_client_charges","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"reason":{"type":"TEXT","notNull":false,"unique":false,"default":""},"source":{"type":"TEXT","notNull":false,"unique":false,"default":""},"source_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"created_by":{"type":"TEXT","notNull":false,"unique":false,"default":""}},"indexes":[{"name":"_smrt_billing_adjustments_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"_smrt_billing_adjustments_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_billing_adjustments_client_charge_id_idx","columns":["client_charge_id"]}],"version":"cded0b52"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:SpendingPolicy":{"name":"spendingpolicy","className":"SpendingPolicy","qualifiedName":"@happyvertical/smrt-subscriptions:SpendingPolicy","collection":"spendingpolicies","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/commercial.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"name":{"type":"text","required":false,"default":""},"subscriberKind":{"type":"text","required":false,"default":""},"subscriberExternalId":{"type":"text","required":false,"default":""},"projectId":{"type":"text","required":false,"default":""},"serviceKey":{"type":"text","required":false,"default":""},"metricKey":{"type":"text","required":false,"default":""},"period":{"type":"text","required":false,"default":"month","enum":["day","week","month","year","rolling","balance"]},"rollingSeconds":{"type":"integer","required":false,"default":0},"limitAmount":{"type":"integer","required":false,"default":0},"currency":{"type":"text","required":false,"default":"USD"},"behavior":{"type":"text","required":false,"default":"observe","enum":["observe","warn","block","approval_required"]},"priority":{"type":"integer","required":false,"default":0},"active":{"type":"boolean","required":false,"default":true},"basis":{"type":"text","required":false,"default":"billed","enum":["billed","retail","wholesale"]},"setByTenantId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-users:Tenant"},"balanceFrom":{"type":"datetime","required":false}},"methods":{},"decoratorConfig":{"tableName":"_smrt_spending_policies","conflictColumns":["tenant_id","subscriber_kind","subscriber_external_id","project_id","service_key","metric_key","period","name"],"api":true,"cli":true,"mcp":true,"hooks":{"beforeDelete":"assertDelegationAuthority"},"tenantScoped":{"mode":"required"}},"extends":"SmrtObject","exportName":"SpendingPolicy","collectionExportName":"SpendingPolicyCollection","displayLabelField":"name","validationRules":[],"schema":{"tableName":"_smrt_spending_policies","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_spending_policies\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"name\\" TEXT DEFAULT '',\\n \\"subscriber_kind\\" TEXT DEFAULT '',\\n \\"subscriber_external_id\\" TEXT DEFAULT '',\\n \\"project_id\\" TEXT DEFAULT '',\\n \\"service_key\\" TEXT DEFAULT '',\\n \\"metric_key\\" TEXT DEFAULT '',\\n \\"period\\" TEXT DEFAULT 'month',\\n \\"rolling_seconds\\" INTEGER DEFAULT 0,\\n \\"limit_amount\\" INTEGER DEFAULT 0,\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"behavior\\" TEXT DEFAULT 'observe',\\n \\"priority\\" INTEGER DEFAULT 0,\\n \\"active\\" BOOLEAN DEFAULT TRUE,\\n \\"basis\\" TEXT DEFAULT 'billed',\\n \\"set_by_tenant_id\\" UUID,\\n \\"balance_from\\" TIMESTAMP\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"name":{"type":"TEXT","notNull":false,"unique":false,"default":""},"subscriber_kind":{"type":"TEXT","notNull":false,"unique":false,"default":""},"subscriber_external_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"project_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"service_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"metric_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"period":{"type":"TEXT","notNull":false,"unique":false,"default":"month"},"rolling_seconds":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"limit_amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"behavior":{"type":"TEXT","notNull":false,"unique":false,"default":"observe"},"priority":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"active":{"type":"BOOLEAN","notNull":false,"unique":false,"default":true},"basis":{"type":"TEXT","notNull":false,"unique":false,"default":"billed"},"set_by_tenant_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false},"balance_from":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"_smrt_spending_policies_tenant_id_subscriber_kind_idx","columns":["tenant_id","subscriber_kind","subscriber_external_id","project_id","service_key","metric_key","period","name"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_spending_policies_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_spending_policies_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_spending_policies_set_by_tenant_id_idx","columns":["set_by_tenant_id"]}],"version":"c4ac2f49"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:PricingRuleCollection":{"name":"pricingrulecollection","className":"PricingRuleCollection","qualifiedName":"@happyvertical/smrt-subscriptions:PricingRuleCollection","collection":"pricingrules","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/commercial.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{},"methods":{},"decoratorConfig":{"tableName":"_smrt_pricing_rules"},"extends":"SmrtCollection","extendsTypeArg":"PricingRule","exportName":"PricingRuleCollection","collectionExportName":"PricingRuleCollectionCollection","schema":{"tableName":"_smrt_pricing_rules","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_pricing_rules\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"rule_key\\" TEXT DEFAULT '',\\n \\"metric_key\\" TEXT DEFAULT '',\\n \\"service_key\\" TEXT DEFAULT '',\\n \\"strategy\\" TEXT DEFAULT 'fixed_unit',\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"effective_from\\" TIMESTAMP,\\n \\"effective_to\\" TIMESTAMP,\\n \\"priority\\" INTEGER DEFAULT 0,\\n \\"terms\\" TEXT DEFAULT '{}',\\n \\"active\\" BOOLEAN DEFAULT TRUE,\\n \\"price_book_id\\" UUID\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"rule_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"metric_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"service_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"strategy":{"type":"TEXT","notNull":false,"unique":false,"default":"fixed_unit"},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"effective_from":{"type":"TIMESTAMP","notNull":false,"unique":false},"effective_to":{"type":"TIMESTAMP","notNull":false,"unique":false},"priority":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"terms":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"active":{"type":"BOOLEAN","notNull":false,"unique":false,"default":true},"price_book_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_price_books","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}}},"indexes":[{"name":"_smrt_pricing_rules_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"_smrt_pricing_rules_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_pricing_rules_price_book_id_idx","columns":["price_book_id"]}],"version":"65ce9b3f"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:ClientChargeCollection":{"name":"clientchargecollection","className":"ClientChargeCollection","qualifiedName":"@happyvertical/smrt-subscriptions:ClientChargeCollection","collection":"clientcharges","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/commercial.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{},"methods":{},"decoratorConfig":{"tableName":"_smrt_client_charges","api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get"]}},"extends":"SmrtCollection","extendsTypeArg":"ClientCharge","exportName":"ClientChargeCollection","collectionExportName":"ClientChargeCollectionCollection","schema":{"tableName":"_smrt_client_charges","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_client_charges\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"usage_event_id\\" UUID,\\n \\"usage_tenant_id\\" UUID,\\n \\"subscriber_kind\\" TEXT DEFAULT 'tenant',\\n \\"subscriber_external_id\\" TEXT DEFAULT '',\\n \\"project_id\\" TEXT DEFAULT '',\\n \\"work_ref_type\\" TEXT DEFAULT '',\\n \\"work_ref_id\\" TEXT DEFAULT '',\\n \\"provider\\" TEXT DEFAULT '',\\n \\"service_key\\" TEXT DEFAULT '',\\n \\"metric_key\\" TEXT DEFAULT '',\\n \\"quantity\\" REAL DEFAULT 0,\\n \\"amount\\" INTEGER DEFAULT 0,\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"pricing_rule_id\\" UUID,\\n \\"price_book_id\\" UUID,\\n \\"pricing_snapshot\\" TEXT DEFAULT '{}',\\n \\"status\\" TEXT DEFAULT 'draft',\\n \\"approved_at\\" TIMESTAMP\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"usage_event_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_tenant_usage_metrics","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"usage_tenant_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false},"subscriber_kind":{"type":"TEXT","notNull":false,"unique":false,"default":"tenant"},"subscriber_external_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"project_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"work_ref_type":{"type":"TEXT","notNull":false,"unique":false,"default":""},"work_ref_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"provider":{"type":"TEXT","notNull":false,"unique":false,"default":""},"service_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"metric_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"quantity":{"type":"REAL","notNull":false,"unique":false,"default":0},"amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"pricing_rule_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_pricing_rules","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"price_book_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_price_books","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"pricing_snapshot":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"status":{"type":"TEXT","notNull":false,"unique":false,"default":"draft"},"approved_at":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"_smrt_client_charges_usage_event_id_idx","columns":["usage_event_id"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_client_charges_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_client_charges_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_client_charges_usage_tenant_id_idx","columns":["usage_tenant_id"]},{"name":"_smrt_client_charges_pricing_rule_id_idx","columns":["pricing_rule_id"]},{"name":"_smrt_client_charges_price_book_id_idx","columns":["price_book_id"]}],"version":"e542be95"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:BillingAdjustmentCollection":{"name":"billingadjustmentcollection","className":"BillingAdjustmentCollection","qualifiedName":"@happyvertical/smrt-subscriptions:BillingAdjustmentCollection","collection":"billingadjustments","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/commercial.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{},"methods":{},"decoratorConfig":{"tableName":"_smrt_billing_adjustments","api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get"]}},"extends":"SmrtCollection","extendsTypeArg":"BillingAdjustment","exportName":"BillingAdjustmentCollection","collectionExportName":"BillingAdjustmentCollectionCollection","schema":{"tableName":"_smrt_billing_adjustments","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_billing_adjustments\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"client_charge_id\\" UUID,\\n \\"amount\\" INTEGER DEFAULT 0,\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"reason\\" TEXT DEFAULT '',\\n \\"source\\" TEXT DEFAULT '',\\n \\"source_id\\" TEXT DEFAULT '',\\n \\"created_by\\" TEXT DEFAULT ''\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"client_charge_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_client_charges","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"reason":{"type":"TEXT","notNull":false,"unique":false,"default":""},"source":{"type":"TEXT","notNull":false,"unique":false,"default":""},"source_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"created_by":{"type":"TEXT","notNull":false,"unique":false,"default":""}},"indexes":[{"name":"_smrt_billing_adjustments_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"_smrt_billing_adjustments_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_billing_adjustments_client_charge_id_idx","columns":["client_charge_id"]}],"version":"cded0b52"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:SpendingPolicyCollection":{"name":"spendingpolicycollection","className":"SpendingPolicyCollection","qualifiedName":"@happyvertical/smrt-subscriptions:SpendingPolicyCollection","collection":"spendingpolicies","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/commercial.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{},"methods":{},"decoratorConfig":{"tableName":"_smrt_spending_policies"},"extends":"SmrtCollection","extendsTypeArg":"SpendingPolicy","exportName":"SpendingPolicyCollection","collectionExportName":"SpendingPolicyCollectionCollection","schema":{"tableName":"_smrt_spending_policies","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_spending_policies\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"name\\" TEXT DEFAULT '',\\n \\"subscriber_kind\\" TEXT DEFAULT '',\\n \\"subscriber_external_id\\" TEXT DEFAULT '',\\n \\"project_id\\" TEXT DEFAULT '',\\n \\"service_key\\" TEXT DEFAULT '',\\n \\"metric_key\\" TEXT DEFAULT '',\\n \\"period\\" TEXT DEFAULT 'month',\\n \\"rolling_seconds\\" INTEGER DEFAULT 0,\\n \\"limit_amount\\" INTEGER DEFAULT 0,\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"behavior\\" TEXT DEFAULT 'observe',\\n \\"priority\\" INTEGER DEFAULT 0,\\n \\"active\\" BOOLEAN DEFAULT TRUE,\\n \\"basis\\" TEXT DEFAULT 'billed',\\n \\"set_by_tenant_id\\" UUID,\\n \\"balance_from\\" TIMESTAMP\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"name":{"type":"TEXT","notNull":false,"unique":false,"default":""},"subscriber_kind":{"type":"TEXT","notNull":false,"unique":false,"default":""},"subscriber_external_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"project_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"service_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"metric_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"period":{"type":"TEXT","notNull":false,"unique":false,"default":"month"},"rolling_seconds":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"limit_amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"behavior":{"type":"TEXT","notNull":false,"unique":false,"default":"observe"},"priority":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"active":{"type":"BOOLEAN","notNull":false,"unique":false,"default":true},"basis":{"type":"TEXT","notNull":false,"unique":false,"default":"billed"},"set_by_tenant_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false},"balance_from":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"_smrt_spending_policies_tenant_id_subscriber_kind_idx","columns":["tenant_id","subscriber_kind","subscriber_external_id","project_id","service_key","metric_key","period","name"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_spending_policies_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_spending_policies_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_spending_policies_set_by_tenant_id_idx","columns":["set_by_tenant_id"]}],"version":"c4ac2f49"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:PriceBook":{"name":"pricebook","className":"PriceBook","qualifiedName":"@happyvertical/smrt-subscriptions:PriceBook","collection":"pricebooks","description":"A named set of prices published by one seller tenant. Its prices are ordinary PricingRule rows that carry this book's id and the same tenant; one rule per currency gives a price in several currencies.","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/reseller.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"bookKey":{"type":"text","required":false,"default":""},"name":{"type":"text","required":false,"default":""},"kind":{"type":"text","required":false,"default":"retail","enum":["wholesale","retail"]},"active":{"type":"boolean","required":false,"default":true}},"methods":{},"decoratorConfig":{"tableName":"_smrt_price_books","conflictColumns":["tenant_id","book_key"],"api":false,"cli":false,"mcp":false,"tenantScoped":{"mode":"required"}},"extends":"SmrtObject","exportName":"PriceBook","collectionExportName":"PriceBookCollection","displayLabelField":"name","validationRules":[],"schema":{"tableName":"_smrt_price_books","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_price_books\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"book_key\\" TEXT DEFAULT '',\\n \\"name\\" TEXT DEFAULT '',\\n \\"kind\\" TEXT DEFAULT 'retail',\\n \\"active\\" BOOLEAN DEFAULT TRUE\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"book_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"name":{"type":"TEXT","notNull":false,"unique":false,"default":""},"kind":{"type":"TEXT","notNull":false,"unique":false,"default":"retail"},"active":{"type":"BOOLEAN","notNull":false,"unique":false,"default":true}},"indexes":[{"name":"_smrt_price_books_tenant_id_book_key_idx","columns":["tenant_id","book_key"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_price_books_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_price_books_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"c7e5f5e0"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:PriceBookAssignment":{"name":"pricebookassignment","className":"PriceBookAssignment","qualifiedName":"@happyvertical/smrt-subscriptions:PriceBookAssignment","collection":"pricebookassignments","description":"Which price books rate one child tenant's usage, keyed like the tenancy billing relationship it belongs to (one row per child).","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/reseller.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{"childTenantId":{"type":"crossPackageRef","required":true,"related":"@happyvertical/smrt-users:Tenant","_meta":{"required":true}},"resellerTenantId":{"type":"crossPackageRef","required":true,"related":"@happyvertical/smrt-users:Tenant","_meta":{"required":true}},"wholesalePriceBookId":{"type":"foreignKey","required":false,"related":"PriceBook"},"wholesaleCurrency":{"type":"text","required":false,"default":""},"retailPriceBookId":{"type":"foreignKey","required":false,"related":"PriceBook"},"retailCurrency":{"type":"text","required":false,"default":""}},"methods":{},"decoratorConfig":{"tableName":"_smrt_price_book_assignments","conflictColumns":["child_tenant_id"],"api":false,"cli":false,"mcp":false},"extends":"SmrtObject","exportName":"PriceBookAssignment","collectionExportName":"PriceBookAssignmentCollection","validationRules":[{"field":"childTenantId","rule":"required","fieldType":"crossPackageRef"},{"field":"resellerTenantId","rule":"required","fieldType":"crossPackageRef"}],"schema":{"tableName":"_smrt_price_book_assignments","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_price_book_assignments\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"child_tenant_id\\" UUID NOT NULL,\\n \\"reseller_tenant_id\\" UUID NOT NULL,\\n \\"wholesale_price_book_id\\" UUID,\\n \\"wholesale_currency\\" TEXT DEFAULT '',\\n \\"retail_price_book_id\\" UUID,\\n \\"retail_currency\\" TEXT DEFAULT ''\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"child_tenant_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"reseller_tenant_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"wholesale_price_book_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_price_books","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"wholesale_currency":{"type":"TEXT","notNull":false,"unique":false,"default":""},"retail_price_book_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_price_books","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"retail_currency":{"type":"TEXT","notNull":false,"unique":false,"default":""}},"indexes":[{"name":"_smrt_price_book_assignments_child_tenant_id_idx","columns":["child_tenant_id"],"unique":true},{"name":"_smrt_price_book_assignments_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_price_book_assignments_created_at_idx","columns":["created_at"]},{"name":"_smrt_price_book_assignments_reseller_tenant_id_idx","columns":["reseller_tenant_id"]},{"name":"_smrt_price_book_assignments_wholesale_price_book_id_idx","columns":["wholesale_price_book_id"]},{"name":"_smrt_price_book_assignments_retail_price_book_id_idx","columns":["retail_price_book_id"]}],"version":"f24f020e"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:RetailCharge":{"name":"retailcharge","className":"RetailCharge","qualifiedName":"@happyvertical/smrt-subscriptions:RetailCharge","collection":"retailcharges","description":"What a reseller charges one child for one usage event, priced from the reseller's retail book.","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/reseller.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"resellerTenantId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-users:Tenant"},"usageEventId":{"type":"foreignKey","required":false,"related":"TenantUsageMetric"},"clientChargeId":{"type":"foreignKey","required":false,"related":"ClientCharge"},"subscriberKind":{"type":"text","required":false,"default":"tenant"},"subscriberExternalId":{"type":"text","required":false,"default":""},"projectId":{"type":"text","required":false,"default":""},"workRefType":{"type":"text","required":false,"default":""},"workRefId":{"type":"text","required":false,"default":""},"provider":{"type":"text","required":false,"default":""},"serviceKey":{"type":"text","required":false,"default":""},"metricKey":{"type":"text","required":false,"default":""},"quantity":{"type":"decimal","required":false,"default":0},"amount":{"type":"integer","required":false,"default":0},"currency":{"type":"text","required":false,"default":"USD"},"priceBookId":{"type":"foreignKey","required":false,"related":"PriceBook"},"pricingRuleId":{"type":"foreignKey","required":false,"related":"PricingRule"},"pricingSnapshot":{"type":"text","required":false,"default":"{}"},"status":{"type":"text","required":false,"default":"draft","enum":["draft","approved"]},"approvedAt":{"type":"datetime","required":false}},"methods":{"getPricingSnapshot":{"name":"getPricingSnapshot","async":false,"parameters":[],"returnType":"Record<string, unknown>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"_smrt_retail_charges","api":{"include":["list","get"]},"cli":{"include":["list","get"]},"mcp":{"include":["list","get"]},"conflictColumns":["usage_event_id"],"tenantScoped":{"mode":"required"}},"extends":"SmrtObject","exportName":"RetailCharge","collectionExportName":"RetailChargeCollection","validationRules":[],"schema":{"tableName":"_smrt_retail_charges","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_retail_charges\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"reseller_tenant_id\\" UUID,\\n \\"usage_event_id\\" UUID,\\n \\"client_charge_id\\" UUID,\\n \\"subscriber_kind\\" TEXT DEFAULT 'tenant',\\n \\"subscriber_external_id\\" TEXT DEFAULT '',\\n \\"project_id\\" TEXT DEFAULT '',\\n \\"work_ref_type\\" TEXT DEFAULT '',\\n \\"work_ref_id\\" TEXT DEFAULT '',\\n \\"provider\\" TEXT DEFAULT '',\\n \\"service_key\\" TEXT DEFAULT '',\\n \\"metric_key\\" TEXT DEFAULT '',\\n \\"quantity\\" REAL DEFAULT 0,\\n \\"amount\\" INTEGER DEFAULT 0,\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"price_book_id\\" UUID,\\n \\"pricing_rule_id\\" UUID,\\n \\"pricing_snapshot\\" TEXT DEFAULT '{}',\\n \\"status\\" TEXT DEFAULT 'draft',\\n \\"approved_at\\" TIMESTAMP\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"reseller_tenant_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false},"usage_event_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_tenant_usage_metrics","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"client_charge_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_client_charges","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"subscriber_kind":{"type":"TEXT","notNull":false,"unique":false,"default":"tenant"},"subscriber_external_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"project_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"work_ref_type":{"type":"TEXT","notNull":false,"unique":false,"default":""},"work_ref_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"provider":{"type":"TEXT","notNull":false,"unique":false,"default":""},"service_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"metric_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"quantity":{"type":"REAL","notNull":false,"unique":false,"default":0},"amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"price_book_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_price_books","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"pricing_rule_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_pricing_rules","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"pricing_snapshot":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"status":{"type":"TEXT","notNull":false,"unique":false,"default":"draft"},"approved_at":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"_smrt_retail_charges_usage_event_id_idx","columns":["usage_event_id"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_retail_charges_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_retail_charges_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_retail_charges_reseller_tenant_id_idx","columns":["reseller_tenant_id"]},{"name":"_smrt_retail_charges_client_charge_id_idx","columns":["client_charge_id"]},{"name":"_smrt_retail_charges_price_book_id_idx","columns":["price_book_id"]},{"name":"_smrt_retail_charges_pricing_rule_id_idx","columns":["pricing_rule_id"]}],"version":"1c1ae3c8"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:CreditGrant":{"name":"creditgrant","className":"CreditGrant","qualifiedName":"@happyvertical/smrt-subscriptions:CreditGrant","collection":"creditgrants","description":"An append-only credit on a prepaid (period: 'balance') spending policy. Positive amounts add credit; a negative amount reverses an earlier grant.","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/reseller.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"spendingPolicyId":{"type":"foreignKey","required":false,"related":"SpendingPolicy"},"amount":{"type":"integer","required":false,"default":0},"currency":{"type":"text","required":false,"default":"USD"},"reason":{"type":"text","required":false,"default":""},"source":{"type":"text","required":false,"default":""},"sourceId":{"type":"text","required":false,"default":""},"grantedByTenantId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-users:Tenant"}},"methods":{},"decoratorConfig":{"tableName":"_smrt_credit_grants","api":{"include":["list","get"]},"cli":{"include":["list","get"]},"mcp":{"include":["list","get"]},"hooks":{"beforeDelete":"refuseDelete"},"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"CreditGrant","collectionExportName":"CreditGrantCollection","validationRules":[],"schema":{"tableName":"_smrt_credit_grants","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_credit_grants\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"spending_policy_id\\" UUID,\\n \\"amount\\" INTEGER DEFAULT 0,\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"reason\\" TEXT DEFAULT '',\\n \\"source\\" TEXT DEFAULT '',\\n \\"source_id\\" TEXT DEFAULT '',\\n \\"granted_by_tenant_id\\" UUID\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"spending_policy_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_spending_policies","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"reason":{"type":"TEXT","notNull":false,"unique":false,"default":""},"source":{"type":"TEXT","notNull":false,"unique":false,"default":""},"source_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"granted_by_tenant_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false}},"indexes":[{"name":"_smrt_credit_grants_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"_smrt_credit_grants_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_credit_grants_spending_policy_id_idx","columns":["spending_policy_id"]},{"name":"_smrt_credit_grants_granted_by_tenant_id_idx","columns":["granted_by_tenant_id"]}],"version":"602c4e02"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:PriceBookCollection":{"name":"pricebookcollection","className":"PriceBookCollection","qualifiedName":"@happyvertical/smrt-subscriptions:PriceBookCollection","collection":"pricebooks","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/reseller.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{},"methods":{},"decoratorConfig":{"tableName":"_smrt_price_books","api":false,"mcp":false,"cli":false},"extends":"SmrtCollection","extendsTypeArg":"PriceBook","exportName":"PriceBookCollection","collectionExportName":"PriceBookCollectionCollection","schema":{"tableName":"_smrt_price_books","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_price_books\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"book_key\\" TEXT DEFAULT '',\\n \\"name\\" TEXT DEFAULT '',\\n \\"kind\\" TEXT DEFAULT 'retail',\\n \\"active\\" BOOLEAN DEFAULT TRUE\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"book_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"name":{"type":"TEXT","notNull":false,"unique":false,"default":""},"kind":{"type":"TEXT","notNull":false,"unique":false,"default":"retail"},"active":{"type":"BOOLEAN","notNull":false,"unique":false,"default":true}},"indexes":[{"name":"_smrt_price_books_tenant_id_book_key_idx","columns":["tenant_id","book_key"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_price_books_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_price_books_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"c7e5f5e0"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:PriceBookAssignmentCollection":{"name":"pricebookassignmentcollection","className":"PriceBookAssignmentCollection","qualifiedName":"@happyvertical/smrt-subscriptions:PriceBookAssignmentCollection","collection":"pricebookassignments","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/reseller.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{},"methods":{},"decoratorConfig":{"tableName":"_smrt_price_book_assignments","api":false,"mcp":false,"cli":false},"extends":"SmrtCollection","extendsTypeArg":"PriceBookAssignment","exportName":"PriceBookAssignmentCollection","collectionExportName":"PriceBookAssignmentCollectionCollection","schema":{"tableName":"_smrt_price_book_assignments","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_price_book_assignments\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"child_tenant_id\\" UUID NOT NULL,\\n \\"reseller_tenant_id\\" UUID NOT NULL,\\n \\"wholesale_price_book_id\\" UUID,\\n \\"wholesale_currency\\" TEXT DEFAULT '',\\n \\"retail_price_book_id\\" UUID,\\n \\"retail_currency\\" TEXT DEFAULT ''\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"child_tenant_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"reseller_tenant_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"wholesale_price_book_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_price_books","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"wholesale_currency":{"type":"TEXT","notNull":false,"unique":false,"default":""},"retail_price_book_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_price_books","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"retail_currency":{"type":"TEXT","notNull":false,"unique":false,"default":""}},"indexes":[{"name":"_smrt_price_book_assignments_child_tenant_id_idx","columns":["child_tenant_id"],"unique":true},{"name":"_smrt_price_book_assignments_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_price_book_assignments_created_at_idx","columns":["created_at"]},{"name":"_smrt_price_book_assignments_reseller_tenant_id_idx","columns":["reseller_tenant_id"]},{"name":"_smrt_price_book_assignments_wholesale_price_book_id_idx","columns":["wholesale_price_book_id"]},{"name":"_smrt_price_book_assignments_retail_price_book_id_idx","columns":["retail_price_book_id"]}],"version":"f24f020e"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:RetailChargeCollection":{"name":"retailchargecollection","className":"RetailChargeCollection","qualifiedName":"@happyvertical/smrt-subscriptions:RetailChargeCollection","collection":"retailcharges","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/reseller.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{},"methods":{},"decoratorConfig":{"tableName":"_smrt_retail_charges","api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get"]}},"extends":"SmrtCollection","extendsTypeArg":"RetailCharge","exportName":"RetailChargeCollection","collectionExportName":"RetailChargeCollectionCollection","schema":{"tableName":"_smrt_retail_charges","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_retail_charges\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"reseller_tenant_id\\" UUID,\\n \\"usage_event_id\\" UUID,\\n \\"client_charge_id\\" UUID,\\n \\"subscriber_kind\\" TEXT DEFAULT 'tenant',\\n \\"subscriber_external_id\\" TEXT DEFAULT '',\\n \\"project_id\\" TEXT DEFAULT '',\\n \\"work_ref_type\\" TEXT DEFAULT '',\\n \\"work_ref_id\\" TEXT DEFAULT '',\\n \\"provider\\" TEXT DEFAULT '',\\n \\"service_key\\" TEXT DEFAULT '',\\n \\"metric_key\\" TEXT DEFAULT '',\\n \\"quantity\\" REAL DEFAULT 0,\\n \\"amount\\" INTEGER DEFAULT 0,\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"price_book_id\\" UUID,\\n \\"pricing_rule_id\\" UUID,\\n \\"pricing_snapshot\\" TEXT DEFAULT '{}',\\n \\"status\\" TEXT DEFAULT 'draft',\\n \\"approved_at\\" TIMESTAMP\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"reseller_tenant_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false},"usage_event_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_tenant_usage_metrics","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"client_charge_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_client_charges","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"subscriber_kind":{"type":"TEXT","notNull":false,"unique":false,"default":"tenant"},"subscriber_external_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"project_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"work_ref_type":{"type":"TEXT","notNull":false,"unique":false,"default":""},"work_ref_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"provider":{"type":"TEXT","notNull":false,"unique":false,"default":""},"service_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"metric_key":{"type":"TEXT","notNull":false,"unique":false,"default":""},"quantity":{"type":"REAL","notNull":false,"unique":false,"default":0},"amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"price_book_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_price_books","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"pricing_rule_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_pricing_rules","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"pricing_snapshot":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"status":{"type":"TEXT","notNull":false,"unique":false,"default":"draft"},"approved_at":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"_smrt_retail_charges_usage_event_id_idx","columns":["usage_event_id"],"unique":true,"nullsNotDistinct":true},{"name":"_smrt_retail_charges_slug_context_idx","columns":["slug","context"]},{"name":"_smrt_retail_charges_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_retail_charges_reseller_tenant_id_idx","columns":["reseller_tenant_id"]},{"name":"_smrt_retail_charges_client_charge_id_idx","columns":["client_charge_id"]},{"name":"_smrt_retail_charges_price_book_id_idx","columns":["price_book_id"]},{"name":"_smrt_retail_charges_pricing_rule_id_idx","columns":["pricing_rule_id"]}],"version":"1c1ae3c8"},"importPath":"@happyvertical/smrt-subscriptions"},"@happyvertical/smrt-subscriptions:CreditGrantCollection":{"name":"creditgrantcollection","className":"CreditGrantCollection","qualifiedName":"@happyvertical/smrt-subscriptions:CreditGrantCollection","collection":"creditgrants","filePath":"/home/runner/work/smrt/smrt/packages/subscriptions/src/models/reseller.ts","packageName":"@happyvertical/smrt-subscriptions","fields":{},"methods":{},"decoratorConfig":{"tableName":"_smrt_credit_grants","api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":{"include":["list","get"]}},"extends":"SmrtCollection","extendsTypeArg":"CreditGrant","exportName":"CreditGrantCollection","collectionExportName":"CreditGrantCollectionCollection","schema":{"tableName":"_smrt_credit_grants","ddl":"CREATE TABLE IF NOT EXISTS \\"_smrt_credit_grants\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"spending_policy_id\\" UUID,\\n \\"amount\\" INTEGER DEFAULT 0,\\n \\"currency\\" TEXT DEFAULT 'USD',\\n \\"reason\\" TEXT DEFAULT '',\\n \\"source\\" TEXT DEFAULT '',\\n \\"source_id\\" TEXT DEFAULT '',\\n \\"granted_by_tenant_id\\" UUID\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"spending_policy_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"_smrt_spending_policies","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"amount":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"currency":{"type":"TEXT","notNull":false,"unique":false,"default":"USD"},"reason":{"type":"TEXT","notNull":false,"unique":false,"default":""},"source":{"type":"TEXT","notNull":false,"unique":false,"default":""},"source_id":{"type":"TEXT","notNull":false,"unique":false,"default":""},"granted_by_tenant_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false}},"indexes":[{"name":"_smrt_credit_grants_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"_smrt_credit_grants_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"_smrt_credit_grants_spending_policy_id_idx","columns":["spending_policy_id"]},{"name":"_smrt_credit_grants_granted_by_tenant_id_idx","columns":["granted_by_tenant_id"]}],"version":"602c4e02"},"importPath":"@happyvertical/smrt-subscriptions"}},"moduleType":"smrt","smrtDependencies":["@happyvertical/smrt-core","@happyvertical/smrt-tenancy"],"browser":{"status":"server-only","issues":["#3624","#3626"],"reason":"core migrations (node:crypto, node:os)","via":["@happyvertical/smrt-tenancy"]},"stampsConstructors":true}`));
|
|
337
11
|
//#endregion
|
|
338
12
|
//#region src/models/TenantSubscription.ts
|
|
339
13
|
var __defProp$3 = Object.defineProperty;
|
|
@@ -351,6 +25,7 @@ var __decorateClass$3 = (decorators, target, key, kind) => {
|
|
|
351
25
|
return result;
|
|
352
26
|
};
|
|
353
27
|
var __publicField$3 = (obj, key, value) => __defNormalProp$3(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
28
|
+
var pendingReplacements = /* @__PURE__ */ new WeakMap();
|
|
354
29
|
var TenantSubscription = class extends SmrtObject {
|
|
355
30
|
tenantId;
|
|
356
31
|
/**
|
|
@@ -382,6 +57,21 @@ var TenantSubscription = class extends SmrtObject {
|
|
|
382
57
|
canceledAt = null;
|
|
383
58
|
/** Amount selected for this subscription, in integer minor units. */
|
|
384
59
|
agreedAmount = null;
|
|
60
|
+
planVersionId = null;
|
|
61
|
+
/** When {@link planVersionId} was last set. */
|
|
62
|
+
planVersionPinnedAt = null;
|
|
63
|
+
/** Why {@link planVersionId} was last set (audit). */
|
|
64
|
+
planVersionPinReason = null;
|
|
65
|
+
/** Caller-supplied reason for an `upgrade`/`authorized` replacement. */
|
|
66
|
+
planVersionPinNote = "";
|
|
67
|
+
/**
|
|
68
|
+
* Set when the row was canceled while it entitled (`active`/`trialing`
|
|
69
|
+
* within its period), so the paid period runs to `currentPeriodEnd`.
|
|
70
|
+
* Derived on save from the stored row and never taken from the caller: a
|
|
71
|
+
* subscription canceled while `incomplete`, `past_due` or `unpaid` (for
|
|
72
|
+
* example a provider's `incomplete_expired`) entitles nothing.
|
|
73
|
+
*/
|
|
74
|
+
retainsPaidPeriod = false;
|
|
385
75
|
externalProvider = null;
|
|
386
76
|
stripeCustomerId = "";
|
|
387
77
|
stripeSubscriptionId = "";
|
|
@@ -405,6 +95,11 @@ var TenantSubscription = class extends SmrtObject {
|
|
|
405
95
|
if (options.cancelAtPeriodEnd !== void 0) this.cancelAtPeriodEnd = options.cancelAtPeriodEnd;
|
|
406
96
|
if (options.canceledAt !== void 0) this.canceledAt = options.canceledAt;
|
|
407
97
|
if (options.agreedAmount !== void 0) this.agreedAmount = options.agreedAmount;
|
|
98
|
+
if (options.planVersionId !== void 0) this.planVersionId = options.planVersionId;
|
|
99
|
+
if (options.planVersionPinnedAt !== void 0) this.planVersionPinnedAt = options.planVersionPinnedAt;
|
|
100
|
+
if (options.planVersionPinReason !== void 0) this.planVersionPinReason = options.planVersionPinReason;
|
|
101
|
+
if (options.planVersionPinNote !== void 0) this.planVersionPinNote = options.planVersionPinNote;
|
|
102
|
+
if (options.retainsPaidPeriod !== void 0) this.retainsPaidPeriod = options.retainsPaidPeriod;
|
|
408
103
|
if (options.externalProvider !== void 0) this.externalProvider = options.externalProvider;
|
|
409
104
|
if (options.stripeCustomerId !== void 0) this.stripeCustomerId = options.stripeCustomerId;
|
|
410
105
|
if (options.stripeSubscriptionId !== void 0) this.stripeSubscriptionId = options.stripeSubscriptionId;
|
|
@@ -436,10 +131,60 @@ var TenantSubscription = class extends SmrtObject {
|
|
|
436
131
|
if (plan.pricingMode === "pay_what_you_can") {
|
|
437
132
|
if (this.agreedAmount === null || this.agreedAmount < plan.minimumAmount) throw new Error("agreedAmount must meet the plan minimumAmount");
|
|
438
133
|
} else if (this.agreedAmount !== null) throw new Error("agreedAmount requires a pay_what_you_can plan");
|
|
134
|
+
const replacement = pendingReplacements.get(this);
|
|
135
|
+
pendingReplacements.delete(this);
|
|
136
|
+
const { TenantSubscriptionCollection } = await Promise.resolve().then(() => TenantSubscriptionCollection_exports);
|
|
137
|
+
const subscriptions = await TenantSubscriptionCollection.create({ db: this.db });
|
|
138
|
+
const persisted = (this.id ? await subscriptions.get({ id: String(this.id) }, { cache: false }) : null) ?? (this.isPersisted ? null : (await subscriptions.list({
|
|
139
|
+
where: {
|
|
140
|
+
tenantId: this.tenantId ?? getTenantId() ?? null,
|
|
141
|
+
subscriberKind: this.subscriberKind,
|
|
142
|
+
subscriberExternalId: this.subscriberExternalId
|
|
143
|
+
},
|
|
144
|
+
limit: 1
|
|
145
|
+
}))[0] ?? null);
|
|
146
|
+
if (this.status !== "canceled") this.retainsPaidPeriod = false;
|
|
147
|
+
else if (persisted?.status === "canceled") this.retainsPaidPeriod = persisted.retainsPaidPeriod;
|
|
148
|
+
else this.retainsPaidPeriod = persisted !== null && (persisted.status === "active" || persisted.status === "trialing") && persisted.isEntitled();
|
|
149
|
+
await pinSubscriptionPlanVersion(this, persisted, replacement);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Replace the plan version frozen for the current period and save (#4032).
|
|
153
|
+
*
|
|
154
|
+
* - `policy: 'upgrade'` succeeds only when the target's entitlements cover
|
|
155
|
+
* the frozen version's (see `isEntitlementUpgrade`); otherwise the save
|
|
156
|
+
* is rejected and the paid period keeps its terms.
|
|
157
|
+
* - `policy: 'authorized'` accepts any target and requires a `reason`,
|
|
158
|
+
* recorded with `planVersionPinReason: 'authorized'` for audit — use it
|
|
159
|
+
* for an operator-approved downgrade, refund, or correction.
|
|
160
|
+
*
|
|
161
|
+
* The target is `planVersionId`, else the version of `planId` (as set on
|
|
162
|
+
* this instance) in force now. A plain `planId` change in the same period
|
|
163
|
+
* is treated as `policy: 'upgrade'`.
|
|
164
|
+
*/
|
|
165
|
+
async replacePlanVersion(options) {
|
|
166
|
+
const { planId, ...replacement } = options;
|
|
167
|
+
if (planId !== void 0) this.planId = planId;
|
|
168
|
+
pendingReplacements.set(this, replacement);
|
|
169
|
+
try {
|
|
170
|
+
return await this.save();
|
|
171
|
+
} finally {
|
|
172
|
+
pendingReplacements.delete(this);
|
|
173
|
+
}
|
|
439
174
|
}
|
|
175
|
+
/**
|
|
176
|
+
* Whether the subscription grants entitlements at `now`. Active and
|
|
177
|
+
* trialing subscriptions entitle until `currentPeriodEnd`. A subscription
|
|
178
|
+
* canceled while it entitled keeps its paid period ({@link
|
|
179
|
+
* retainsPaidPeriod}) until `currentPeriodEnd`, never without one (#4032).
|
|
180
|
+
* For an immediate cancellation (for example with a refund) set
|
|
181
|
+
* `currentPeriodEnd` to the cancellation time.
|
|
182
|
+
*/
|
|
440
183
|
isEntitled(now = /* @__PURE__ */ new Date()) {
|
|
184
|
+
const end = this.currentPeriodEnd ? new Date(this.currentPeriodEnd).getTime() : null;
|
|
185
|
+
if (this.status === "canceled") return this.retainsPaidPeriod && end !== null && now.getTime() <= end;
|
|
441
186
|
if (this.status !== "active" && this.status !== "trialing") return false;
|
|
442
|
-
if (
|
|
187
|
+
if (end !== null && end < now.getTime()) return false;
|
|
443
188
|
return true;
|
|
444
189
|
}
|
|
445
190
|
/**
|
|
@@ -472,6 +217,7 @@ var TenantSubscription = class extends SmrtObject {
|
|
|
472
217
|
__publicField$3(TenantSubscription, "__smrtPackage__", "@happyvertical/smrt-subscriptions");
|
|
473
218
|
__decorateClass$3([tenantId()], TenantSubscription.prototype, "tenantId", 2);
|
|
474
219
|
__decorateClass$3([foreignKey("SubscriptionPlan")], TenantSubscription.prototype, "planId", 2);
|
|
220
|
+
__decorateClass$3([foreignKey("SubscriptionPlanVersion")], TenantSubscription.prototype, "planVersionId", 2);
|
|
475
221
|
TenantSubscription = __decorateClass$3([TenantScoped({ mode: "required" }), smrt({
|
|
476
222
|
tableName: "_smrt_tenant_subscriptions",
|
|
477
223
|
api: { include: [
|
|
@@ -490,6 +236,7 @@ TenantSubscription = __decorateClass$3([TenantScoped({ mode: "required" }), smrt
|
|
|
490
236
|
})], TenantSubscription);
|
|
491
237
|
//#endregion
|
|
492
238
|
//#region src/collections/TenantSubscriptionCollection.ts
|
|
239
|
+
var TenantSubscriptionCollection_exports = /* @__PURE__ */ __exportAll({ TenantSubscriptionCollection: () => TenantSubscriptionCollection });
|
|
493
240
|
var TenantSubscriptionCollection = class extends SmrtCollection {
|
|
494
241
|
static _itemClass = TenantSubscription;
|
|
495
242
|
/**
|
|
@@ -927,6 +674,55 @@ function migrateSubscriptionsMoneyToMinorUnits(db, options = {}) {
|
|
|
927
674
|
});
|
|
928
675
|
}
|
|
929
676
|
//#endregion
|
|
677
|
+
//#region src/migrations/planVersions.ts
|
|
678
|
+
async function migrateSubscriptionPlanVersions(db, options = {}) {
|
|
679
|
+
const pageSize = options.pageSize ?? 200;
|
|
680
|
+
return withSystemContext(async () => {
|
|
681
|
+
const report = {
|
|
682
|
+
plansVersioned: 0,
|
|
683
|
+
subscriptionsPinned: 0,
|
|
684
|
+
failed: []
|
|
685
|
+
};
|
|
686
|
+
const plans = await SubscriptionPlanCollection.create({ db });
|
|
687
|
+
for (let offset = 0;; offset += pageSize) {
|
|
688
|
+
const page = await plans.list({
|
|
689
|
+
orderBy: "id ASC",
|
|
690
|
+
limit: pageSize,
|
|
691
|
+
offset
|
|
692
|
+
});
|
|
693
|
+
for (const plan of page) if (await snapshotLegacyPlanVersion(plan)) report.plansVersioned += 1;
|
|
694
|
+
if (page.length < pageSize) break;
|
|
695
|
+
}
|
|
696
|
+
const subscriptions = await TenantSubscriptionCollection.create({ db });
|
|
697
|
+
for (let offset = 0;; offset += pageSize) {
|
|
698
|
+
const page = await subscriptions.list({
|
|
699
|
+
orderBy: "id ASC",
|
|
700
|
+
limit: pageSize,
|
|
701
|
+
offset
|
|
702
|
+
});
|
|
703
|
+
for (const subscription of page) {
|
|
704
|
+
if (subscription.planVersionId || !subscription.planId) continue;
|
|
705
|
+
try {
|
|
706
|
+
await subscription.save();
|
|
707
|
+
if (subscription.planVersionId) report.subscriptionsPinned += 1;
|
|
708
|
+
} catch (error) {
|
|
709
|
+
report.failed.push({
|
|
710
|
+
subscriptionId: String(subscription.id),
|
|
711
|
+
error: rootMessage(error)
|
|
712
|
+
});
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
if (page.length < pageSize) break;
|
|
716
|
+
}
|
|
717
|
+
return report;
|
|
718
|
+
});
|
|
719
|
+
}
|
|
720
|
+
function rootMessage(error) {
|
|
721
|
+
let current = error;
|
|
722
|
+
while (current instanceof Error && current.cause instanceof Error) current = current.cause;
|
|
723
|
+
return current instanceof Error ? current.message : String(current);
|
|
724
|
+
}
|
|
725
|
+
//#endregion
|
|
930
726
|
//#region src/models/commercial.ts
|
|
931
727
|
var __defProp$1 = Object.defineProperty;
|
|
932
728
|
var __getOwnPropDesc$1 = Object.getOwnPropertyDescriptor;
|
|
@@ -2854,15 +2650,20 @@ var SubscriptionResolver = class SubscriptionResolver {
|
|
|
2854
2650
|
* reuse the returned resolver across entitlement checks.
|
|
2855
2651
|
*/
|
|
2856
2652
|
static async create(classOptions = {}) {
|
|
2857
|
-
const [plans, subscriptions, usage] = await Promise.all([
|
|
2653
|
+
const [plans, subscriptions, usage, planVersions] = await Promise.all([
|
|
2858
2654
|
SubscriptionPlanCollection.create(classOptions),
|
|
2859
2655
|
TenantSubscriptionCollection.create(classOptions),
|
|
2860
|
-
TenantUsageMeter.create(classOptions)
|
|
2656
|
+
TenantUsageMeter.create(classOptions),
|
|
2657
|
+
SubscriptionPlanVersionCollection.create(classOptions)
|
|
2861
2658
|
]);
|
|
2862
2659
|
return new SubscriptionResolver({
|
|
2863
2660
|
plans,
|
|
2864
2661
|
subscriptions,
|
|
2865
|
-
usage
|
|
2662
|
+
usage,
|
|
2663
|
+
planVersions: {
|
|
2664
|
+
get: ({ id }) => planVersions.findVisibleById(id),
|
|
2665
|
+
findInForce: (planId, at) => planVersions.findInForce(planId, at)
|
|
2666
|
+
}
|
|
2866
2667
|
});
|
|
2867
2668
|
}
|
|
2868
2669
|
/**
|
|
@@ -2876,7 +2677,8 @@ var SubscriptionResolver = class SubscriptionResolver {
|
|
|
2876
2677
|
const subscription = await this.resolveSubscription(subscriber, now, options.context);
|
|
2877
2678
|
return {
|
|
2878
2679
|
subscription,
|
|
2879
|
-
plan: await this.resolvePlan(subscription, options.context)
|
|
2680
|
+
plan: await this.resolvePlan(subscription, options.context),
|
|
2681
|
+
planVersion: await this.resolvePlanVersion(subscription, options.context)
|
|
2880
2682
|
};
|
|
2881
2683
|
}
|
|
2882
2684
|
/**
|
|
@@ -2886,28 +2688,31 @@ var SubscriptionResolver = class SubscriptionResolver {
|
|
|
2886
2688
|
*/
|
|
2887
2689
|
async resolveEntitlements(subscriber, options = {}) {
|
|
2888
2690
|
const now = options.now ?? /* @__PURE__ */ new Date();
|
|
2889
|
-
const { subscription, plan } = await this.loadEntitlementContext(subscriber, {
|
|
2691
|
+
const { subscription, plan, planVersion } = await this.loadEntitlementContext(subscriber, {
|
|
2890
2692
|
...options,
|
|
2891
2693
|
now
|
|
2892
2694
|
});
|
|
2893
2695
|
if (!subscription) return emptyResolution(subscriber);
|
|
2894
|
-
|
|
2895
|
-
|
|
2896
|
-
planId: plan?.id ?? subscription.planId ?? null,
|
|
2897
|
-
planKey: plan?.planKey ?? null,
|
|
2696
|
+
const terms = planVersion === void 0 ? plan : planVersion ?? (subscription.planVersionId ? null : plan);
|
|
2697
|
+
const identity = {
|
|
2698
|
+
planId: plan?.id ?? planVersion?.planId ?? subscription.planId ?? null,
|
|
2699
|
+
planKey: plan?.planKey ?? planVersion?.planKey ?? null,
|
|
2700
|
+
planVersionId: terms === planVersion ? planVersion?.id ?? null : null,
|
|
2701
|
+
planVersion: terms === planVersion ? planVersion?.version ?? null : null,
|
|
2898
2702
|
subscriptionId: subscription.id ?? null,
|
|
2899
2703
|
status: subscription.status
|
|
2900
2704
|
};
|
|
2901
|
-
|
|
2705
|
+
if (!terms?.isActive() || !subscription.isEntitled(now)) return {
|
|
2706
|
+
...emptyResolution(subscriber),
|
|
2707
|
+
...identity
|
|
2708
|
+
};
|
|
2709
|
+
const thresholds = terms.getThresholds().filter(isValidThreshold);
|
|
2902
2710
|
const thresholdEvaluations = await this.resolveThresholdEvaluations(subscriber, thresholds, now, options);
|
|
2903
2711
|
return {
|
|
2904
2712
|
tenantId: subscriber.tenantId,
|
|
2905
2713
|
subscriber,
|
|
2906
|
-
|
|
2907
|
-
|
|
2908
|
-
subscriptionId: subscription.id ?? null,
|
|
2909
|
-
status: subscription.status,
|
|
2910
|
-
featureKeys: plan.getFeatureKeys(),
|
|
2714
|
+
...identity,
|
|
2715
|
+
featureKeys: terms.getFeatureKeys(),
|
|
2911
2716
|
thresholds,
|
|
2912
2717
|
thresholdEvaluations,
|
|
2913
2718
|
allowed: thresholdEvaluations.every((evaluation) => evaluation.allowed)
|
|
@@ -2954,6 +2759,26 @@ var SubscriptionResolver = class SubscriptionResolver {
|
|
|
2954
2759
|
return plan;
|
|
2955
2760
|
}
|
|
2956
2761
|
/**
|
|
2762
|
+
* The version frozen for the subscription's current period: its pinned
|
|
2763
|
+
* `planVersionId`, or — for rows not yet pinned — the version in force at
|
|
2764
|
+
* its period start. Null when the subscription has no plan or a pinned
|
|
2765
|
+
* version is missing (the resolver then fails closed); undefined when no
|
|
2766
|
+
* version reader or context is available.
|
|
2767
|
+
*/
|
|
2768
|
+
async resolvePlanVersion(subscription, context) {
|
|
2769
|
+
if (!subscription?.planId) return null;
|
|
2770
|
+
if (hasContextValue(context, "planVersion")) {
|
|
2771
|
+
const planVersion2 = context?.planVersion ?? null;
|
|
2772
|
+
assertPlanVersionMatchesSubscription(planVersion2, subscription);
|
|
2773
|
+
return planVersion2;
|
|
2774
|
+
}
|
|
2775
|
+
const reader = this.readers.planVersions;
|
|
2776
|
+
if (!reader) return;
|
|
2777
|
+
const planVersion = subscription.planVersionId ? await reader.get({ id: subscription.planVersionId }) : await reader.findInForce?.(subscription.planId, new Date(subscription.currentPeriodStart ?? subscription.startedAt)) ?? null;
|
|
2778
|
+
assertPlanVersionMatchesSubscription(planVersion, subscription);
|
|
2779
|
+
return planVersion;
|
|
2780
|
+
}
|
|
2781
|
+
/**
|
|
2957
2782
|
* Bridge the legacy and polymorphic reader contracts.
|
|
2958
2783
|
*
|
|
2959
2784
|
* Prefers `findCurrentForSubscriber` when the reader provides it (the
|
|
@@ -3031,6 +2856,8 @@ function emptyResolution(subscriber) {
|
|
|
3031
2856
|
subscriber,
|
|
3032
2857
|
planId: null,
|
|
3033
2858
|
planKey: null,
|
|
2859
|
+
planVersionId: null,
|
|
2860
|
+
planVersion: null,
|
|
3034
2861
|
subscriptionId: null,
|
|
3035
2862
|
status: "none",
|
|
3036
2863
|
featureKeys: [],
|
|
@@ -3052,6 +2879,11 @@ function assertPlanMatchesSubscription(plan, subscription) {
|
|
|
3052
2879
|
if (!isSystemContext() && plan.tenantId !== null && plan.tenantId !== subscription.tenantId) throw new Error("Entitlement plan does not belong to subscription tenant");
|
|
3053
2880
|
if (!plan.id || plan.id !== subscription.planId) throw new Error("Provided entitlement context plan does not match subscription.planId");
|
|
3054
2881
|
}
|
|
2882
|
+
function assertPlanVersionMatchesSubscription(planVersion, subscription) {
|
|
2883
|
+
if (!planVersion) return;
|
|
2884
|
+
if (!isSystemContext() && planVersion.tenantId !== null && planVersion.tenantId !== subscription.tenantId) throw new Error("Entitlement plan version does not belong to subscription tenant");
|
|
2885
|
+
if (!planVersion.id || planVersion.planId !== subscription.planId || subscription.planVersionId !== null && planVersion.id !== subscription.planVersionId) throw new Error("Provided entitlement plan version does not match the subscription");
|
|
2886
|
+
}
|
|
3055
2887
|
function sameSubscriber(left, right) {
|
|
3056
2888
|
if (left.kind !== right.kind || left.tenantId !== right.tenantId) return false;
|
|
3057
2889
|
if (left.kind === "tenant") return true;
|
|
@@ -3076,6 +2908,6 @@ function emptyUsageSummary(subscriber, metricKey, window) {
|
|
|
3076
2908
|
return summary;
|
|
3077
2909
|
}
|
|
3078
2910
|
//#endregion
|
|
3079
|
-
export { BillingAdjustment, BillingAdjustmentCollection, ClientCharge, ClientChargeCollection, CommercialBillingStorageConfigurationError, CommercialUsageService, CreditGrant, CreditGrantCollection, PriceBook, PriceBookAssignment, PriceBookCollection, PricingRule, PricingRuleCollection, ResellerBillingError, ResellerBillingService, RetailCharge, RetailChargeCollection, SUBSCRIPTIONS_MONEY_COLUMNS, SUBSCRIPTIONS_MONEY_MINOR_UNITS_BACKFILL, SpendingPolicy, SpendingPolicyCollection, SpendingPolicyEvaluator, SubscriptionPlan, SubscriptionPlanCollection, SubscriptionResolver, TenantSubscription, TenantSubscriptionCollection, TenantUsageMeter, TenantUsageMetric, TenantUsageMetricCollection, UnsupportedCommercialBillingStorageError, assertCommercialBillingStorageSupported, assertSubscriberInvariant, evaluateThreshold, evaluateThresholds, getWindowForThreshold, getWindowKey, isCurrencyCode, isPriceBookKind, isValidThreshold, migrateSubscriptionsMoneyToMinorUnits, normalizeFeatureGrants, normalizeSubscriber, preflightSubscriptionsMoneyMinorUnits, subscriberToColumns };
|
|
2911
|
+
export { BillingAdjustment, BillingAdjustmentCollection, ClientCharge, ClientChargeCollection, CommercialBillingStorageConfigurationError, CommercialUsageService, CreditGrant, CreditGrantCollection, PLAN_TERM_FIELDS, PriceBook, PriceBookAssignment, PriceBookCollection, PricingRule, PricingRuleCollection, ResellerBillingError, ResellerBillingService, RetailCharge, RetailChargeCollection, SUBSCRIPTIONS_MONEY_COLUMNS, SUBSCRIPTIONS_MONEY_MINOR_UNITS_BACKFILL, SpendingPolicy, SpendingPolicyCollection, SpendingPolicyEvaluator, SubscriptionPlan, SubscriptionPlanCollection, SubscriptionPlanVersion, SubscriptionPlanVersionCollection, SubscriptionResolver, TenantSubscription, TenantSubscriptionCollection, TenantUsageMeter, TenantUsageMetric, TenantUsageMetricCollection, UnsupportedCommercialBillingStorageError, assertCommercialBillingStorageSupported, assertSubscriberInvariant, enabledFeatureKeys, evaluateThreshold, evaluateThresholds, extractPlanTerms, getWindowForThreshold, getWindowKey, isCurrencyCode, isEntitlementUpgrade, isPriceBookKind, isValidThreshold, migrateSubscriptionPlanVersions, migrateSubscriptionsMoneyToMinorUnits, normalizeFeatureGrants, normalizeSubscriber, preflightSubscriptionsMoneyMinorUnits, samePlanTerms, subscriberToColumns, validThresholds };
|
|
3080
2912
|
|
|
3081
2913
|
//# sourceMappingURL=index.js.map
|