@happyvertical/smrt-affiliates 0.39.2 → 0.39.4

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/dist/index.js CHANGED
@@ -1,1322 +1,40 @@
1
- import { ObjectRegistry, SmrtCollection, SmrtObject, crossPackageRef, foreignKey, smrt } from "@happyvertical/smrt-core";
2
- //#region src/__smrt-register__.ts
3
- ObjectRegistry.registerPackageManifest(JSON.parse("{\"version\":\"1.0.0\",\"timestamp\":1783741823928,\"packageName\":\"@happyvertical/smrt-affiliates\",\"packageVersion\":\"0.39.2\",\"objects\":{\"@happyvertical/smrt-affiliates:CommissionCollection\":{\"name\":\"commissioncollection\",\"className\":\"CommissionCollection\",\"qualifiedName\":\"@happyvertical/smrt-affiliates:CommissionCollection\",\"collection\":\"commissions\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/affiliates/src/collections/CommissionCollection.ts\",\"packageName\":\"@happyvertical/smrt-affiliates\",\"fields\":{},\"methods\":{\"findByPartner\":{\"name\":\"findByPartner\",\"async\":true,\"parameters\":[{\"name\":\"partnerId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Commission[]>\",\"isStatic\":false,\"isPublic\":true},\"findByEvent\":{\"name\":\"findByEvent\",\"async\":true,\"parameters\":[{\"name\":\"eventId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Commission[]>\",\"isStatic\":false,\"isPublic\":true},\"findByPayout\":{\"name\":\"findByPayout\",\"async\":true,\"parameters\":[{\"name\":\"payoutId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Commission[]>\",\"isStatic\":false,\"isPublic\":true},\"findByStatus\":{\"name\":\"findByStatus\",\"async\":true,\"parameters\":[{\"name\":\"status\",\"type\":\"CommissionStatus\",\"optional\":false}],\"returnType\":\"Promise<Commission[]>\",\"isStatic\":false,\"isPublic\":true},\"findPending\":{\"name\":\"findPending\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Commission[]>\",\"isStatic\":false,\"isPublic\":true},\"findPendingByPartner\":{\"name\":\"findPendingByPartner\",\"async\":true,\"parameters\":[{\"name\":\"partnerId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Commission[]>\",\"isStatic\":false,\"isPublic\":true},\"findByType\":{\"name\":\"findByType\",\"async\":true,\"parameters\":[{\"name\":\"commissionType\",\"type\":\"CommissionType\",\"optional\":false}],\"returnType\":\"Promise<Commission[]>\",\"isStatic\":false,\"isPublic\":true},\"findByDateRange\":{\"name\":\"findByDateRange\",\"async\":true,\"parameters\":[{\"name\":\"start\",\"type\":\"Date\",\"optional\":false},{\"name\":\"end\",\"type\":\"Date\",\"optional\":false}],\"returnType\":\"Promise<Commission[]>\",\"isStatic\":false,\"isPublic\":true},\"findByPartnerAndDateRange\":{\"name\":\"findByPartnerAndDateRange\",\"async\":true,\"parameters\":[{\"name\":\"partnerId\",\"type\":\"string\",\"optional\":false},{\"name\":\"start\",\"type\":\"Date\",\"optional\":false},{\"name\":\"end\",\"type\":\"Date\",\"optional\":false}],\"returnType\":\"Promise<Commission[]>\",\"isStatic\":false,\"isPublic\":true},\"findByNetwork\":{\"name\":\"findByNetwork\",\"async\":true,\"parameters\":[{\"name\":\"networkId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Commission[]>\",\"isStatic\":false,\"isPublic\":true},\"findByNetworkAndType\":{\"name\":\"findByNetworkAndType\",\"async\":true,\"parameters\":[{\"name\":\"networkId\",\"type\":\"string\",\"optional\":false},{\"name\":\"commissionType\",\"type\":\"CommissionType\",\"optional\":false}],\"returnType\":\"Promise<Commission[]>\",\"isStatic\":false,\"isPublic\":true},\"findPendingByNetwork\":{\"name\":\"findPendingByNetwork\",\"async\":true,\"parameters\":[{\"name\":\"networkId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Commission[]>\",\"isStatic\":false,\"isPublic\":true},\"getSummaryByNetwork\":{\"name\":\"getSummaryByNetwork\",\"async\":true,\"parameters\":[{\"name\":\"networkId\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<object>\",\"isStatic\":false,\"isPublic\":true},\"getPendingPayoutsByNetwork\":{\"name\":\"getPendingPayoutsByNetwork\",\"async\":true,\"parameters\":[{\"name\":\"networkId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Array<object>>\",\"isStatic\":false,\"isPublic\":true},\"sumPendingByPartner\":{\"name\":\"sumPendingByPartner\",\"async\":true,\"parameters\":[{\"name\":\"partnerId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true},\"sumByPartnerAndType\":{\"name\":\"sumByPartnerAndType\",\"async\":true,\"parameters\":[{\"name\":\"partnerId\",\"type\":\"string\",\"optional\":false},{\"name\":\"commissionType\",\"type\":\"CommissionType\",\"optional\":false}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true},\"getEarningsBreakdown\":{\"name\":\"getEarningsBreakdown\",\"async\":true,\"parameters\":[{\"name\":\"partnerId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<object>\",\"isStatic\":false,\"isPublic\":true},\"getPendingBreakdown\":{\"name\":\"getPendingBreakdown\",\"async\":true,\"parameters\":[{\"name\":\"partnerId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<object>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"Commission\",\"exportName\":\"CommissionCollection\",\"collectionExportName\":\"CommissionCollectionCollection\",\"schema\":{\"tableName\":\"commission_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"commission_collections\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"commission_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"commission_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"0ebca899\"}},\"@happyvertical/smrt-affiliates:PartnerCollection\":{\"name\":\"partnercollection\",\"className\":\"PartnerCollection\",\"qualifiedName\":\"@happyvertical/smrt-affiliates:PartnerCollection\",\"collection\":\"partners\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/affiliates/src/collections/PartnerCollection.ts\",\"packageName\":\"@happyvertical/smrt-affiliates\",\"fields\":{},\"methods\":{\"findByProfile\":{\"name\":\"findByProfile\",\"async\":true,\"parameters\":[{\"name\":\"profileId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Partner[]>\",\"isStatic\":false,\"isPublic\":true},\"findByProperty\":{\"name\":\"findByProperty\",\"async\":true,\"parameters\":[{\"name\":\"propertyId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Partner | null>\",\"isStatic\":false,\"isPublic\":true},\"findByParent\":{\"name\":\"findByParent\",\"async\":true,\"parameters\":[{\"name\":\"parentPartnerId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Partner[]>\",\"isStatic\":false,\"isPublic\":true},\"findByReferrer\":{\"name\":\"findByReferrer\",\"async\":true,\"parameters\":[{\"name\":\"referredById\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Partner[]>\",\"isStatic\":false,\"isPublic\":true},\"findByStatus\":{\"name\":\"findByStatus\",\"async\":true,\"parameters\":[{\"name\":\"status\",\"type\":\"PartnerStatus\",\"optional\":false}],\"returnType\":\"Promise<Partner[]>\",\"isStatic\":false,\"isPublic\":true},\"findActive\":{\"name\":\"findActive\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Partner[]>\",\"isStatic\":false,\"isPublic\":true},\"findPending\":{\"name\":\"findPending\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Partner[]>\",\"isStatic\":false,\"isPublic\":true},\"findSuspended\":{\"name\":\"findSuspended\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Partner[]>\",\"isStatic\":false,\"isPublic\":true},\"findByType\":{\"name\":\"findByType\",\"async\":true,\"parameters\":[{\"name\":\"type\",\"type\":\"PartnerType\",\"optional\":false}],\"returnType\":\"Promise<Partner[]>\",\"isStatic\":false,\"isPublic\":true},\"findPublishers\":{\"name\":\"findPublishers\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Partner[]>\",\"isStatic\":false,\"isPublic\":true},\"findSalespeople\":{\"name\":\"findSalespeople\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Partner[]>\",\"isStatic\":false,\"isPublic\":true},\"findReferrers\":{\"name\":\"findReferrers\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Partner[]>\",\"isStatic\":false,\"isPublic\":true},\"findActivePublishers\":{\"name\":\"findActivePublishers\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Partner[]>\",\"isStatic\":false,\"isPublic\":true},\"findActiveByProperty\":{\"name\":\"findActiveByProperty\",\"async\":true,\"parameters\":[{\"name\":\"propertyId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Partner | null>\",\"isStatic\":false,\"isPublic\":true},\"findEligibleForPayout\":{\"name\":\"findEligibleForPayout\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Partner[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"Partner\",\"exportName\":\"PartnerCollection\",\"collectionExportName\":\"PartnerCollectionCollection\",\"schema\":{\"tableName\":\"partner_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"partner_collections\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"partner_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"partner_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"d0bfd8cf\"}},\"@happyvertical/smrt-affiliates:PayoutCollection\":{\"name\":\"payoutcollection\",\"className\":\"PayoutCollection\",\"qualifiedName\":\"@happyvertical/smrt-affiliates:PayoutCollection\",\"collection\":\"payouts\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/affiliates/src/collections/PayoutCollection.ts\",\"packageName\":\"@happyvertical/smrt-affiliates\",\"fields\":{},\"methods\":{\"findByPartner\":{\"name\":\"findByPartner\",\"async\":true,\"parameters\":[{\"name\":\"partnerId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Payout[]>\",\"isStatic\":false,\"isPublic\":true},\"findByStatus\":{\"name\":\"findByStatus\",\"async\":true,\"parameters\":[{\"name\":\"status\",\"type\":\"PayoutStatus\",\"optional\":false}],\"returnType\":\"Promise<Payout[]>\",\"isStatic\":false,\"isPublic\":true},\"findPending\":{\"name\":\"findPending\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Payout[]>\",\"isStatic\":false,\"isPublic\":true},\"findApproved\":{\"name\":\"findApproved\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Payout[]>\",\"isStatic\":false,\"isPublic\":true},\"findProcessing\":{\"name\":\"findProcessing\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Payout[]>\",\"isStatic\":false,\"isPublic\":true},\"findCompleted\":{\"name\":\"findCompleted\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Payout[]>\",\"isStatic\":false,\"isPublic\":true},\"findFailed\":{\"name\":\"findFailed\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Payout[]>\",\"isStatic\":false,\"isPublic\":true},\"findByInvoice\":{\"name\":\"findByInvoice\",\"async\":true,\"parameters\":[{\"name\":\"invoiceId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Payout[]>\",\"isStatic\":false,\"isPublic\":true},\"findByPeriod\":{\"name\":\"findByPeriod\",\"async\":true,\"parameters\":[{\"name\":\"start\",\"type\":\"Date\",\"optional\":false},{\"name\":\"end\",\"type\":\"Date\",\"optional\":false}],\"returnType\":\"Promise<Payout[]>\",\"isStatic\":false,\"isPublic\":true},\"findByPartnerAndStatus\":{\"name\":\"findByPartnerAndStatus\",\"async\":true,\"parameters\":[{\"name\":\"partnerId\",\"type\":\"string\",\"optional\":false},{\"name\":\"status\",\"type\":\"PayoutStatus\",\"optional\":false}],\"returnType\":\"Promise<Payout[]>\",\"isStatic\":false,\"isPublic\":true},\"findPendingByPartner\":{\"name\":\"findPendingByPartner\",\"async\":true,\"parameters\":[{\"name\":\"partnerId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Payout[]>\",\"isStatic\":false,\"isPublic\":true},\"findCompletedByPartner\":{\"name\":\"findCompletedByPartner\",\"async\":true,\"parameters\":[{\"name\":\"partnerId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Payout[]>\",\"isStatic\":false,\"isPublic\":true},\"sumPaidByPartner\":{\"name\":\"sumPaidByPartner\",\"async\":true,\"parameters\":[{\"name\":\"partnerId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true},\"sumPendingByPartner\":{\"name\":\"sumPendingByPartner\",\"async\":true,\"parameters\":[{\"name\":\"partnerId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true},\"findLatestByPartner\":{\"name\":\"findLatestByPartner\",\"async\":true,\"parameters\":[{\"name\":\"partnerId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Payout | null>\",\"isStatic\":false,\"isPublic\":true},\"getStats\":{\"name\":\"getStats\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<object>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"Payout\",\"exportName\":\"PayoutCollection\",\"collectionExportName\":\"PayoutCollectionCollection\",\"schema\":{\"tableName\":\"payout_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"payout_collections\\\" (\\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);\",\"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\"}},\"indexes\":[{\"name\":\"payout_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"payout_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"79c6b841\"}},\"@happyvertical/smrt-affiliates:Commission\":{\"name\":\"commission\",\"className\":\"Commission\",\"qualifiedName\":\"@happyvertical/smrt-affiliates:Commission\",\"collection\":\"commissions\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/affiliates/src/models/Commission.ts\",\"packageName\":\"@happyvertical/smrt-affiliates\",\"fields\":{\"eventId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-ads:AdEvent\"},\"partnerId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"Partner\"},\"commissionType\":{\"type\":\"text\",\"required\":false},\"grossRevenue\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"commissionRate\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"commissionAmount\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"currency\":{\"type\":\"text\",\"required\":false,\"default\":\"CAD\"},\"payoutId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"Payout\"},\"status\":{\"type\":\"text\",\"required\":false},\"eventTimestamp\":{\"type\":\"datetime\",\"required\":false},\"networkId\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"siteId\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"campaignId\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"metadata\":{\"type\":\"text\",\"required\":false,\"default\":\"\"}},\"methods\":{\"calculateAmount\":{\"name\":\"calculateAmount\",\"async\":false,\"parameters\":[{\"name\":\"grossRevenue\",\"type\":\"number\",\"optional\":false},{\"name\":\"rate\",\"type\":\"number\",\"optional\":false}],\"returnType\":\"number\",\"isStatic\":true,\"isPublic\":true},\"isPending\":{\"name\":\"isPending\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isIncluded\":{\"name\":\"isIncluded\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isPaid\":{\"name\":\"isPaid\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isDisplay\":{\"name\":\"isDisplay\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isReferral\":{\"name\":\"isReferral\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isSales\":{\"name\":\"isSales\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isParent\":{\"name\":\"isParent\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isOverhead\":{\"name\":\"isOverhead\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"getAmountInDollars\":{\"name\":\"getAmountInDollars\",\"async\":false,\"parameters\":[],\"returnType\":\"number\",\"isStatic\":false,\"isPublic\":true},\"getGrossRevenueInDollars\":{\"name\":\"getGrossRevenueInDollars\",\"async\":false,\"parameters\":[],\"returnType\":\"number\",\"isStatic\":false,\"isPublic\":true},\"getMetadata\":{\"name\":\"getMetadata\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setMetadata\":{\"name\":\"setMetadata\",\"async\":false,\"parameters\":[{\"name\":\"data\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"create\",\"list\",\"get\"]},\"mcp\":{\"include\":[\"create\",\"list\"]},\"cli\":false},\"extends\":\"SmrtObject\",\"exportName\":\"Commission\",\"collectionExportName\":\"CommissionCollection\",\"schema\":{\"tableName\":\"commissions\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"commissions\\\" (\\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 \\\"event_id\\\" UUID,\\n \\\"partner_id\\\" UUID,\\n \\\"commission_type\\\" TEXT,\\n \\\"gross_revenue\\\" INTEGER DEFAULT 0,\\n \\\"commission_rate\\\" INTEGER DEFAULT 0,\\n \\\"commission_amount\\\" INTEGER DEFAULT 0,\\n \\\"currency\\\" TEXT DEFAULT 'CAD',\\n \\\"payout_id\\\" UUID,\\n \\\"status\\\" TEXT,\\n \\\"event_timestamp\\\" TIMESTAMP,\\n \\\"network_id\\\" TEXT DEFAULT '',\\n \\\"site_id\\\" TEXT DEFAULT '',\\n \\\"campaign_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\"},\"event_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":false},\"partner_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"commission_type\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"gross_revenue\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"commission_rate\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"commission_amount\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"currency\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"CAD\"},\"payout_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"event_timestamp\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"network_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"site_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"campaign_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"}},\"indexes\":[{\"name\":\"commissions_id_idx\",\"columns\":[\"id\"]},{\"name\":\"commissions_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"c5446ec3\"}},\"@happyvertical/smrt-affiliates:Partner\":{\"name\":\"partner\",\"className\":\"Partner\",\"qualifiedName\":\"@happyvertical/smrt-affiliates:Partner\",\"collection\":\"partners\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/affiliates/src/models/Partner.ts\",\"packageName\":\"@happyvertical/smrt-affiliates\",\"fields\":{\"profileId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-profiles:Profile\"},\"propertyId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-properties:Property\"},\"partnerTypes\":{\"type\":\"text\",\"required\":false,\"default\":\"[]\"},\"parentPartnerId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"Partner\"},\"referredById\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"Partner\"},\"parentCommissionShare\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"displayCommissionRate\":{\"type\":\"decimal\",\"required\":false,\"default\":0.5},\"referralCommissionRate\":{\"type\":\"decimal\",\"required\":false,\"default\":0.05},\"salesCommissionRate\":{\"type\":\"decimal\",\"required\":false,\"default\":0.1},\"payoutThreshold\":{\"type\":\"integer\",\"required\":false,\"default\":5000},\"payoutMethod\":{\"type\":\"text\",\"required\":false},\"currency\":{\"type\":\"text\",\"required\":false,\"default\":\"CAD\"},\"status\":{\"type\":\"text\",\"required\":false},\"metadata\":{\"type\":\"text\",\"required\":false,\"default\":\"\"}},\"methods\":{\"getPartnerTypes\":{\"name\":\"getPartnerTypes\",\"async\":false,\"parameters\":[],\"returnType\":\"PartnerType[]\",\"isStatic\":false,\"isPublic\":true},\"setPartnerTypes\":{\"name\":\"setPartnerTypes\",\"async\":false,\"parameters\":[{\"name\":\"types\",\"type\":\"PartnerType[]\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"hasType\":{\"name\":\"hasType\",\"async\":false,\"parameters\":[{\"name\":\"type\",\"type\":\"PartnerType\",\"optional\":false}],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isPublisher\":{\"name\":\"isPublisher\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isSalesperson\":{\"name\":\"isSalesperson\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isReferrer\":{\"name\":\"isReferrer\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isActive\":{\"name\":\"isActive\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isPending\":{\"name\":\"isPending\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isSuspended\":{\"name\":\"isSuspended\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"hasParent\":{\"name\":\"hasParent\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"wasReferred\":{\"name\":\"wasReferred\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"getMetadata\":{\"name\":\"getMetadata\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setMetadata\":{\"name\":\"setMetadata\",\"async\":false,\"parameters\":[{\"name\":\"data\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getEffectiveSalesRate\":{\"name\":\"getEffectiveSalesRate\",\"async\":false,\"parameters\":[],\"returnType\":\"number\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\",\"create\",\"update\"]},\"mcp\":{\"include\":[\"list\",\"get\",\"create\"]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"Partner\",\"collectionExportName\":\"PartnerCollection\",\"schema\":{\"tableName\":\"partners\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"partners\\\" (\\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 \\\"profile_id\\\" UUID,\\n \\\"property_id\\\" UUID,\\n \\\"partner_types\\\" TEXT DEFAULT '[]',\\n \\\"parent_partner_id\\\" UUID,\\n \\\"referred_by_id\\\" UUID,\\n \\\"parent_commission_share\\\" INTEGER DEFAULT 0,\\n \\\"display_commission_rate\\\" REAL DEFAULT 0.5,\\n \\\"referral_commission_rate\\\" REAL DEFAULT 0.05,\\n \\\"sales_commission_rate\\\" REAL DEFAULT 0.1,\\n \\\"payout_threshold\\\" INTEGER DEFAULT 5000,\\n \\\"payout_method\\\" TEXT,\\n \\\"currency\\\" TEXT DEFAULT 'CAD',\\n \\\"status\\\" TEXT,\\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\"},\"profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":false},\"property_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":false},\"partner_types\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"[]\"},\"parent_partner_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"referred_by_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"parent_commission_share\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"display_commission_rate\":{\"type\":\"REAL\",\"notNull\":false,\"unique\":false,\"default\":0.5},\"referral_commission_rate\":{\"type\":\"REAL\",\"notNull\":false,\"unique\":false,\"default\":0.05},\"sales_commission_rate\":{\"type\":\"REAL\",\"notNull\":false,\"unique\":false,\"default\":0.1},\"payout_threshold\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":5000},\"payout_method\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"currency\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"CAD\"},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"}},\"indexes\":[{\"name\":\"partners_id_idx\",\"columns\":[\"id\"]},{\"name\":\"partners_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"af1bf156\"}},\"@happyvertical/smrt-affiliates:Payout\":{\"name\":\"payout\",\"className\":\"Payout\",\"qualifiedName\":\"@happyvertical/smrt-affiliates:Payout\",\"collection\":\"payouts\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/affiliates/src/models/Payout.ts\",\"packageName\":\"@happyvertical/smrt-affiliates\",\"fields\":{\"partnerId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"Partner\"},\"periodStart\":{\"type\":\"datetime\",\"required\":false},\"periodEnd\":{\"type\":\"datetime\",\"required\":false},\"displayEarnings\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"referralEarnings\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"salesEarnings\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"parentEarnings\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"overheadEarnings\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"totalAmount\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"currency\":{\"type\":\"text\",\"required\":false,\"default\":\"CAD\"},\"invoiceId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-commerce:Invoice\"},\"status\":{\"type\":\"text\",\"required\":false},\"paymentReference\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"paidAt\":{\"type\":\"datetime\",\"required\":false},\"notes\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"metadata\":{\"type\":\"text\",\"required\":false,\"default\":\"\"}},\"methods\":{\"isPending\":{\"name\":\"isPending\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isApproved\":{\"name\":\"isApproved\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isProcessing\":{\"name\":\"isProcessing\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isCompleted\":{\"name\":\"isCompleted\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isFailed\":{\"name\":\"isFailed\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"getTotalInDollars\":{\"name\":\"getTotalInDollars\",\"async\":false,\"parameters\":[],\"returnType\":\"number\",\"isStatic\":false,\"isPublic\":true},\"getDisplayEarningsInDollars\":{\"name\":\"getDisplayEarningsInDollars\",\"async\":false,\"parameters\":[],\"returnType\":\"number\",\"isStatic\":false,\"isPublic\":true},\"getReferralEarningsInDollars\":{\"name\":\"getReferralEarningsInDollars\",\"async\":false,\"parameters\":[],\"returnType\":\"number\",\"isStatic\":false,\"isPublic\":true},\"getSalesEarningsInDollars\":{\"name\":\"getSalesEarningsInDollars\",\"async\":false,\"parameters\":[],\"returnType\":\"number\",\"isStatic\":false,\"isPublic\":true},\"getParentEarningsInDollars\":{\"name\":\"getParentEarningsInDollars\",\"async\":false,\"parameters\":[],\"returnType\":\"number\",\"isStatic\":false,\"isPublic\":true},\"getOverheadEarningsInDollars\":{\"name\":\"getOverheadEarningsInDollars\",\"async\":false,\"parameters\":[],\"returnType\":\"number\",\"isStatic\":false,\"isPublic\":true},\"calculateTotal\":{\"name\":\"calculateTotal\",\"async\":false,\"parameters\":[],\"returnType\":\"number\",\"isStatic\":false,\"isPublic\":true},\"getPeriodString\":{\"name\":\"getPeriodString\",\"async\":false,\"parameters\":[],\"returnType\":\"string\",\"isStatic\":false,\"isPublic\":true},\"getMetadata\":{\"name\":\"getMetadata\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setMetadata\":{\"name\":\"setMetadata\",\"async\":false,\"parameters\":[{\"name\":\"data\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"approve\":{\"name\":\"approve\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"markProcessing\":{\"name\":\"markProcessing\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"complete\":{\"name\":\"complete\",\"async\":false,\"parameters\":[{\"name\":\"paymentReference\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"fail\":{\"name\":\"fail\",\"async\":false,\"parameters\":[{\"name\":\"reason\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\",\"create\",\"update\"]},\"mcp\":{\"include\":[\"list\",\"get\",\"create\"]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"Payout\",\"collectionExportName\":\"PayoutCollection\",\"schema\":{\"tableName\":\"payouts\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"payouts\\\" (\\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 \\\"partner_id\\\" UUID,\\n \\\"period_start\\\" TIMESTAMP,\\n \\\"period_end\\\" TIMESTAMP,\\n \\\"display_earnings\\\" INTEGER DEFAULT 0,\\n \\\"referral_earnings\\\" INTEGER DEFAULT 0,\\n \\\"sales_earnings\\\" INTEGER DEFAULT 0,\\n \\\"parent_earnings\\\" INTEGER DEFAULT 0,\\n \\\"overhead_earnings\\\" INTEGER DEFAULT 0,\\n \\\"total_amount\\\" INTEGER DEFAULT 0,\\n \\\"currency\\\" TEXT DEFAULT 'CAD',\\n \\\"invoice_id\\\" UUID,\\n \\\"status\\\" TEXT,\\n \\\"payment_reference\\\" TEXT DEFAULT '',\\n \\\"paid_at\\\" TIMESTAMP,\\n \\\"notes\\\" 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\"},\"partner_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"period_start\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"period_end\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"display_earnings\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"referral_earnings\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"sales_earnings\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"parent_earnings\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"overhead_earnings\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"total_amount\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false,\"default\":0},\"currency\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"CAD\"},\"invoice_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"payment_reference\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"paid_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"notes\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"}},\"indexes\":[{\"name\":\"payouts_id_idx\",\"columns\":[\"id\"]},{\"name\":\"payouts_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"e94f3029\"}}},\"moduleType\":\"smrt\",\"smrtDependencies\":[\"@happyvertical/smrt-core\"]}"));
4
- //#endregion
5
- //#region src/types/index.ts
6
- var PartnerType = /* @__PURE__ */ ((PartnerType2) => {
7
- PartnerType2["PUBLISHER"] = "publisher";
8
- PartnerType2["SALESPERSON"] = "salesperson";
9
- PartnerType2["REFERRER"] = "referrer";
10
- return PartnerType2;
11
- })(PartnerType || {});
12
- var PartnerStatus = /* @__PURE__ */ ((PartnerStatus2) => {
13
- PartnerStatus2["PENDING"] = "pending";
14
- PartnerStatus2["ACTIVE"] = "active";
15
- PartnerStatus2["SUSPENDED"] = "suspended";
16
- return PartnerStatus2;
17
- })(PartnerStatus || {});
18
- var CommissionType = /* @__PURE__ */ ((CommissionType2) => {
19
- CommissionType2["DISPLAY"] = "display";
20
- CommissionType2["REFERRAL"] = "referral";
21
- CommissionType2["SALES"] = "sales";
22
- CommissionType2["PARENT"] = "parent";
23
- CommissionType2["OVERHEAD"] = "overhead";
24
- return CommissionType2;
25
- })(CommissionType || {});
26
- var CommissionStatus = /* @__PURE__ */ ((CommissionStatus2) => {
27
- CommissionStatus2["PENDING"] = "pending";
28
- CommissionStatus2["INCLUDED"] = "included";
29
- CommissionStatus2["PAID"] = "paid";
30
- return CommissionStatus2;
31
- })(CommissionStatus || {});
32
- var PayoutStatus = /* @__PURE__ */ ((PayoutStatus2) => {
33
- PayoutStatus2["PENDING"] = "pending";
34
- PayoutStatus2["APPROVED"] = "approved";
35
- PayoutStatus2["PROCESSING"] = "processing";
36
- PayoutStatus2["COMPLETED"] = "completed";
37
- PayoutStatus2["FAILED"] = "failed";
38
- return PayoutStatus2;
39
- })(PayoutStatus || {});
40
- var PayoutMethod = /* @__PURE__ */ ((PayoutMethod2) => {
41
- PayoutMethod2["BANK_TRANSFER"] = "bank_transfer";
42
- PayoutMethod2["CHECK"] = "check";
43
- PayoutMethod2["PAYPAL"] = "paypal";
44
- PayoutMethod2["CREDIT"] = "credit";
45
- return PayoutMethod2;
46
- })(PayoutMethod || {});
47
- //#endregion
48
- //#region src/models/Commission.ts
49
- var __defProp$2 = Object.defineProperty;
50
- var __getOwnPropDesc$2 = Object.getOwnPropertyDescriptor;
51
- var __decorateClass$2 = (decorators, target, key, kind) => {
52
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$2(target, key) : target;
53
- for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
54
- if (kind && result) __defProp$2(target, key, result);
55
- return result;
56
- };
57
- var Commission = class extends SmrtObject {
58
- /**
59
- * Calculate commission amount from gross revenue and rate
60
- *
61
- * @param grossRevenue - Gross revenue in cents
62
- * @param rate - Commission rate (0-1)
63
- * @returns Commission amount in cents (rounded)
64
- *
65
- * @example
66
- * ```typescript
67
- * const amount = Commission.calculateAmount(1000, 0.50); // 500 cents
68
- * ```
69
- */
70
- static calculateAmount(grossRevenue, rate) {
71
- return Math.round(grossRevenue * rate);
72
- }
73
- eventId = "";
74
- partnerId = "";
75
- /**
76
- * Commission type (display, referral, sales, parent)
77
- */
78
- commissionType = CommissionType.DISPLAY;
79
- /**
80
- * Gross revenue from the event in cents
81
- * This is the total ad revenue before commission split
82
- */
83
- grossRevenue = 0;
84
- /**
85
- * Commission rate applied (0-1)
86
- * Copied from partner at time of event for audit trail
87
- */
88
- commissionRate = 0;
89
- /**
90
- * Calculated commission amount in cents
91
- * = grossRevenue * commissionRate
92
- */
93
- commissionAmount = 0;
94
- /**
95
- * Currency code
96
- * Defaults to CAD
97
- */
98
- currency = "CAD";
99
- payoutId = "";
100
- /**
101
- * Commission status
102
- */
103
- status = CommissionStatus.PENDING;
104
- /**
105
- * Event timestamp (copied from AdEvent for reporting)
106
- */
107
- eventTimestamp = /* @__PURE__ */ new Date();
108
- /**
109
- * Network ID for aggregate queries (optional context)
110
- */
111
- networkId = "";
112
- /**
113
- * Site/Property ID for aggregate queries (optional context)
114
- */
115
- siteId = "";
116
- /**
117
- * Campaign ID for aggregate queries (optional context)
118
- */
119
- campaignId = "";
120
- /**
121
- * Additional metadata as JSON string
122
- */
123
- metadata = "";
124
- constructor(options = {}) {
125
- super(options);
126
- if (options.eventId !== void 0) this.eventId = options.eventId;
127
- if (options.partnerId !== void 0) this.partnerId = options.partnerId;
128
- if (options.commissionType !== void 0) this.commissionType = options.commissionType;
129
- if (options.grossRevenue !== void 0) this.grossRevenue = options.grossRevenue;
130
- if (options.commissionRate !== void 0) this.commissionRate = options.commissionRate;
131
- if (options.commissionAmount !== void 0) this.commissionAmount = options.commissionAmount;
132
- if (options.currency !== void 0) this.currency = options.currency;
133
- if (options.payoutId !== void 0) this.payoutId = options.payoutId;
134
- if (options.status !== void 0) this.status = options.status;
135
- if (options.eventTimestamp !== void 0) this.eventTimestamp = options.eventTimestamp;
136
- if (options.networkId !== void 0) this.networkId = options.networkId;
137
- if (options.siteId !== void 0) this.siteId = options.siteId;
138
- if (options.campaignId !== void 0) this.campaignId = options.campaignId;
139
- if (options.metadata !== void 0) this.metadata = options.metadata;
140
- }
141
- /**
142
- * Check if commission is pending (not yet in a payout)
143
- */
144
- isPending() {
145
- return this.status === CommissionStatus.PENDING;
146
- }
147
- /**
148
- * Check if commission is included in a payout
149
- */
150
- isIncluded() {
151
- return this.status === CommissionStatus.INCLUDED;
152
- }
153
- /**
154
- * Check if commission has been paid
155
- */
156
- isPaid() {
157
- return this.status === CommissionStatus.PAID;
158
- }
159
- /**
160
- * Check if this is a display commission
161
- */
162
- isDisplay() {
163
- return this.commissionType === CommissionType.DISPLAY;
164
- }
165
- /**
166
- * Check if this is a referral commission
167
- */
168
- isReferral() {
169
- return this.commissionType === CommissionType.REFERRAL;
170
- }
171
- /**
172
- * Check if this is a sales commission
173
- */
174
- isSales() {
175
- return this.commissionType === CommissionType.SALES;
176
- }
177
- /**
178
- * Check if this is a parent commission
179
- */
180
- isParent() {
181
- return this.commissionType === CommissionType.PARENT;
182
- }
183
- /**
184
- * Check if this is an overhead commission
185
- */
186
- isOverhead() {
187
- return this.commissionType === CommissionType.OVERHEAD;
188
- }
189
- /**
190
- * Get commission amount in dollars (for display)
191
- */
192
- getAmountInDollars() {
193
- return this.commissionAmount / 100;
194
- }
195
- /**
196
- * Get gross revenue in dollars (for display)
197
- */
198
- getGrossRevenueInDollars() {
199
- return this.grossRevenue / 100;
200
- }
201
- /**
202
- * Get metadata as object
203
- */
204
- getMetadata() {
205
- if (!this.metadata) return {};
206
- try {
207
- return JSON.parse(this.metadata);
208
- } catch {
209
- return {};
210
- }
211
- }
212
- /**
213
- * Set metadata from object
214
- */
215
- setMetadata(data) {
216
- this.metadata = JSON.stringify(data);
217
- }
218
- };
219
- __decorateClass$2([crossPackageRef("@happyvertical/smrt-ads:AdEvent")], Commission.prototype, "eventId", 2);
220
- __decorateClass$2([foreignKey("Partner")], Commission.prototype, "partnerId", 2);
221
- __decorateClass$2([foreignKey("Payout")], Commission.prototype, "payoutId", 2);
222
- Commission = __decorateClass$2([smrt({
223
- api: { include: [
224
- "create",
225
- "list",
226
- "get"
227
- ] },
228
- mcp: { include: ["create", "list"] },
229
- cli: false
230
- })], Commission);
231
- //#endregion
232
- //#region src/collections/CommissionCollection.ts
233
- var CommissionCollection = class extends SmrtCollection {
234
- static _itemClass = Commission;
235
- /**
236
- * Find commissions by partner
237
- *
238
- * @param partnerId - Partner ID
239
- * @returns Array of commissions
240
- */
241
- async findByPartner(partnerId) {
242
- return await this.list({
243
- where: { partnerId },
244
- orderBy: "event_timestamp DESC"
245
- });
246
- }
247
- /**
248
- * Find commissions by ad event
249
- *
250
- * @param eventId - Ad Event ID
251
- * @returns Array of commissions
252
- */
253
- async findByEvent(eventId) {
254
- return await this.list({
255
- where: { eventId },
256
- orderBy: "created_at DESC"
257
- });
258
- }
259
- /**
260
- * Find commissions by payout
261
- *
262
- * @param payoutId - Payout ID
263
- * @returns Array of commissions
264
- */
265
- async findByPayout(payoutId) {
266
- return await this.list({
267
- where: { payoutId },
268
- orderBy: "event_timestamp DESC"
269
- });
270
- }
271
- /**
272
- * Find commissions by status
273
- *
274
- * @param status - Commission status
275
- * @returns Array of commissions
276
- */
277
- async findByStatus(status) {
278
- return await this.list({
279
- where: { status },
280
- orderBy: "event_timestamp DESC"
281
- });
282
- }
283
- /**
284
- * Find all pending commissions
285
- */
286
- async findPending() {
287
- return await this.findByStatus(CommissionStatus.PENDING);
288
- }
289
- /**
290
- * Find pending commissions for a partner
291
- *
292
- * @param partnerId - Partner ID
293
- * @returns Array of pending commissions
294
- */
295
- async findPendingByPartner(partnerId) {
296
- return await this.list({
297
- where: {
298
- partnerId,
299
- status: CommissionStatus.PENDING
300
- },
301
- orderBy: "event_timestamp DESC"
302
- });
303
- }
304
- /**
305
- * Find commissions by type
306
- *
307
- * @param commissionType - Commission type
308
- * @returns Array of commissions
309
- */
310
- async findByType(commissionType) {
311
- return await this.list({
312
- where: { commissionType },
313
- orderBy: "event_timestamp DESC"
314
- });
315
- }
316
- /**
317
- * Find commissions in date range
318
- *
319
- * @param start - Start date
320
- * @param end - End date
321
- * @returns Array of commissions
322
- */
323
- async findByDateRange(start, end) {
324
- return await this.list({
325
- where: {
326
- "event_timestamp >=": start.toISOString(),
327
- "event_timestamp <=": end.toISOString()
328
- },
329
- orderBy: "event_timestamp DESC"
330
- });
331
- }
332
- /**
333
- * Find commissions for a partner in date range
334
- *
335
- * @param partnerId - Partner ID
336
- * @param start - Start date
337
- * @param end - End date
338
- * @returns Array of commissions
339
- */
340
- async findByPartnerAndDateRange(partnerId, start, end) {
341
- return await this.list({
342
- where: {
343
- partnerId,
344
- "event_timestamp >=": start.toISOString(),
345
- "event_timestamp <=": end.toISOString()
346
- },
347
- orderBy: "event_timestamp DESC"
348
- });
349
- }
350
- /**
351
- * Find all commissions for a network
352
- *
353
- * @param networkId - Network ID
354
- * @returns Array of commissions
355
- */
356
- async findByNetwork(networkId) {
357
- return await this.list({
358
- where: { networkId },
359
- orderBy: "event_timestamp DESC"
360
- });
361
- }
362
- /**
363
- * Find commissions for a network filtered by type
364
- *
365
- * @param networkId - Network ID
366
- * @param commissionType - Commission type
367
- * @returns Array of commissions
368
- */
369
- async findByNetworkAndType(networkId, commissionType) {
370
- return await this.list({
371
- where: {
372
- networkId,
373
- commissionType
374
- },
375
- orderBy: "event_timestamp DESC"
376
- });
377
- }
378
- /**
379
- * Find pending commissions for a network
380
- *
381
- * @param networkId - Network ID
382
- * @returns Array of pending commissions
383
- */
384
- async findPendingByNetwork(networkId) {
385
- return await this.list({
386
- where: {
387
- networkId,
388
- status: CommissionStatus.PENDING
389
- },
390
- orderBy: "event_timestamp DESC"
391
- });
392
- }
393
- /**
394
- * Get aggregate summary of commissions by type and site for a network.
395
- *
396
- * @param networkId - Network ID
397
- * @param options - Optional filters (siteId, from, to, commissionType)
398
- * @returns Summary with byType, bySite, total, and count
399
- */
400
- async getSummaryByNetwork(networkId, options = {}) {
401
- const where = { networkId };
402
- if (options.siteId) where.siteId = options.siteId;
403
- if (options.commissionType) where.commissionType = options.commissionType;
404
- if (options.from) where["event_timestamp >="] = options.from.toISOString();
405
- if (options.to) where["event_timestamp <="] = options.to.toISOString();
406
- const filtered = await this.list({ where });
407
- const byType = {
408
- overhead: 0,
409
- display: 0,
410
- referral: 0,
411
- sales: 0,
412
- parent: 0
413
- };
414
- const bySite = {};
415
- let total = 0;
416
- for (const c of filtered) {
417
- byType[c.commissionType] = (byType[c.commissionType] ?? 0) + c.commissionAmount;
418
- if (c.siteId) bySite[c.siteId] = (bySite[c.siteId] ?? 0) + c.commissionAmount;
419
- total += c.commissionAmount;
420
- }
421
- return {
422
- byType,
423
- bySite,
424
- total,
425
- count: filtered.length
426
- };
427
- }
428
- /**
429
- * Get pending commissions grouped by partnerId for a network.
430
- *
431
- * @param networkId - Network ID
432
- * @returns Array of payout groups (partnerId, totalPending, currency, entries)
433
- */
434
- async getPendingPayoutsByNetwork(networkId) {
435
- const withPartner = (await this.findPendingByNetwork(networkId)).filter((c) => c.partnerId && c.partnerId !== "");
436
- const grouped = /* @__PURE__ */ new Map();
437
- for (const c of withPartner) {
438
- const existing = grouped.get(c.partnerId) ?? [];
439
- existing.push(c);
440
- grouped.set(c.partnerId, existing);
441
- }
442
- const payouts = [];
443
- for (const [partnerId, group] of grouped) {
444
- const totalPending = group.reduce((sum, c) => sum + c.commissionAmount, 0);
445
- const currency = group[0]?.currency ?? "CAD";
446
- payouts.push({
447
- partnerId,
448
- totalPending,
449
- currency,
450
- entryCount: group.length,
451
- entries: group.map((c) => ({
452
- id: c.id ?? "",
453
- commissionType: c.commissionType,
454
- commissionAmount: c.commissionAmount,
455
- campaignId: c.campaignId,
456
- siteId: c.siteId
457
- }))
458
- });
459
- }
460
- payouts.sort((a, b) => b.totalPending - a.totalPending);
461
- return payouts;
462
- }
463
- /**
464
- * Sum pending commissions for a partner
465
- *
466
- * @param partnerId - Partner ID
467
- * @returns Total pending amount in cents
468
- */
469
- async sumPendingByPartner(partnerId) {
470
- return (await this.findPendingByPartner(partnerId)).reduce((sum, c) => sum + c.commissionAmount, 0);
471
- }
472
- /**
473
- * Sum commissions by type for a partner
474
- *
475
- * @param partnerId - Partner ID
476
- * @param commissionType - Commission type
477
- * @returns Total amount in cents
478
- */
479
- async sumByPartnerAndType(partnerId, commissionType) {
480
- return (await this.list({ where: {
481
- partnerId,
482
- commissionType
483
- } })).reduce((sum, c) => sum + c.commissionAmount, 0);
484
- }
485
- /**
486
- * Get earnings breakdown for a partner
487
- *
488
- * @param partnerId - Partner ID
489
- * @returns Breakdown by commission type
490
- */
491
- async getEarningsBreakdown(partnerId) {
492
- const commissions = await this.findByPartner(partnerId);
493
- const breakdown = {
494
- display: 0,
495
- referral: 0,
496
- sales: 0,
497
- parent: 0,
498
- overhead: 0,
499
- total: 0
500
- };
501
- for (const c of commissions) if (c.isPaid() || c.isIncluded()) switch (c.commissionType) {
502
- case CommissionType.DISPLAY:
503
- breakdown.display += c.commissionAmount;
504
- break;
505
- case CommissionType.REFERRAL:
506
- breakdown.referral += c.commissionAmount;
507
- break;
508
- case CommissionType.SALES:
509
- breakdown.sales += c.commissionAmount;
510
- break;
511
- case CommissionType.PARENT:
512
- breakdown.parent += c.commissionAmount;
513
- break;
514
- case CommissionType.OVERHEAD:
515
- breakdown.overhead += c.commissionAmount;
516
- break;
517
- }
518
- breakdown.total = breakdown.display + breakdown.referral + breakdown.sales + breakdown.parent + breakdown.overhead;
519
- return breakdown;
520
- }
521
- /**
522
- * Get pending earnings breakdown for a partner
523
- *
524
- * @param partnerId - Partner ID
525
- * @returns Breakdown of pending commissions by type
526
- */
527
- async getPendingBreakdown(partnerId) {
528
- const pending = await this.findPendingByPartner(partnerId);
529
- const breakdown = {
530
- display: 0,
531
- referral: 0,
532
- sales: 0,
533
- parent: 0,
534
- overhead: 0,
535
- total: 0
536
- };
537
- for (const c of pending) switch (c.commissionType) {
538
- case CommissionType.DISPLAY:
539
- breakdown.display += c.commissionAmount;
540
- break;
541
- case CommissionType.REFERRAL:
542
- breakdown.referral += c.commissionAmount;
543
- break;
544
- case CommissionType.SALES:
545
- breakdown.sales += c.commissionAmount;
546
- break;
547
- case CommissionType.PARENT:
548
- breakdown.parent += c.commissionAmount;
549
- break;
550
- case CommissionType.OVERHEAD:
551
- breakdown.overhead += c.commissionAmount;
552
- break;
553
- }
554
- breakdown.total = breakdown.display + breakdown.referral + breakdown.sales + breakdown.parent + breakdown.overhead;
555
- return breakdown;
556
- }
557
- };
558
- //#endregion
559
- //#region src/models/Partner.ts
560
- var __defProp$1 = Object.defineProperty;
561
- var __getOwnPropDesc$1 = Object.getOwnPropertyDescriptor;
562
- var __decorateClass$1 = (decorators, target, key, kind) => {
563
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1(target, key) : target;
564
- for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
565
- if (kind && result) __defProp$1(target, key, result);
566
- return result;
567
- };
568
- var Partner = class extends SmrtObject {
569
- profileId = "";
570
- propertyId = "";
571
- /**
572
- * Partner types as JSON array (publisher, salesperson, referrer)
573
- * A partner can have multiple types
574
- */
575
- partnerTypes = "[]";
576
- parentPartnerId = "";
577
- referredById = "";
578
- /**
579
- * Share of commission that goes to parent partner (0-1)
580
- * e.g., 0.20 means 20% of this partner's sales commission goes to parent
581
- */
582
- parentCommissionShare = 0;
583
- /**
584
- * Commission rate for display (impression) revenue (0-1)
585
- * Default 50% - publisher earns half of ad impression revenue
586
- */
587
- displayCommissionRate = .5;
588
- /**
589
- * Commission rate for referral revenue (0-1)
590
- * Default 5% - referrer earns 5% of referred partner's first-year revenue
591
- */
592
- referralCommissionRate = .05;
593
- /**
594
- * Commission rate for sales revenue (0-1)
595
- * Default 10% - salesperson earns 10% of advertiser spend they brought in
596
- */
597
- salesCommissionRate = .1;
598
- /**
599
- * Minimum payout threshold in cents
600
- * Default $50 = 5000 cents
601
- */
602
- payoutThreshold = 5e3;
603
- /**
604
- * Preferred payout method
605
- */
606
- payoutMethod = PayoutMethod.BANK_TRANSFER;
607
- /**
608
- * Currency code for all monetary values
609
- * Defaults to CAD, allows future multi-currency support
610
- */
611
- currency = "CAD";
612
- /**
613
- * Partner status
614
- */
615
- status = PartnerStatus.PENDING;
616
- /**
617
- * Additional metadata as JSON string
618
- * (bank details, tax info, etc.)
619
- */
620
- metadata = "";
621
- constructor(options = {}) {
622
- super(options);
623
- if (options.profileId !== void 0) this.profileId = options.profileId;
624
- if (options.propertyId !== void 0) this.propertyId = options.propertyId;
625
- if (options.partnerTypes !== void 0) this.partnerTypes = options.partnerTypes;
626
- if (options.parentPartnerId !== void 0) this.parentPartnerId = options.parentPartnerId;
627
- if (options.referredById !== void 0) this.referredById = options.referredById;
628
- if (options.parentCommissionShare !== void 0) this.parentCommissionShare = options.parentCommissionShare;
629
- if (options.displayCommissionRate !== void 0) this.displayCommissionRate = options.displayCommissionRate;
630
- if (options.referralCommissionRate !== void 0) this.referralCommissionRate = options.referralCommissionRate;
631
- if (options.salesCommissionRate !== void 0) this.salesCommissionRate = options.salesCommissionRate;
632
- if (options.payoutThreshold !== void 0) this.payoutThreshold = options.payoutThreshold;
633
- if (options.payoutMethod !== void 0) this.payoutMethod = options.payoutMethod;
634
- if (options.currency !== void 0) this.currency = options.currency;
635
- if (options.status !== void 0) this.status = options.status;
636
- if (options.metadata !== void 0) this.metadata = options.metadata;
637
- }
638
- /**
639
- * Get partner types as array
640
- */
641
- getPartnerTypes() {
642
- if (!this.partnerTypes) return [];
643
- try {
644
- return JSON.parse(this.partnerTypes);
645
- } catch {
646
- return [];
647
- }
648
- }
649
- /**
650
- * Set partner types from array
651
- */
652
- setPartnerTypes(types) {
653
- this.partnerTypes = JSON.stringify(types);
654
- }
655
- /**
656
- * Check if partner has a specific type
657
- */
658
- hasType(type) {
659
- return this.getPartnerTypes().includes(type);
660
- }
661
- /**
662
- * Check if partner is a publisher
663
- */
664
- isPublisher() {
665
- return this.hasType(PartnerType.PUBLISHER);
666
- }
667
- /**
668
- * Check if partner is a salesperson
669
- */
670
- isSalesperson() {
671
- return this.hasType(PartnerType.SALESPERSON);
672
- }
673
- /**
674
- * Check if partner is a referrer
675
- */
676
- isReferrer() {
677
- return this.hasType(PartnerType.REFERRER);
678
- }
679
- /**
680
- * Check if partner is active
681
- */
682
- isActive() {
683
- return this.status === PartnerStatus.ACTIVE;
684
- }
685
- /**
686
- * Check if partner is pending approval
687
- */
688
- isPending() {
689
- return this.status === PartnerStatus.PENDING;
690
- }
691
- /**
692
- * Check if partner is suspended
693
- */
694
- isSuspended() {
695
- return this.status === PartnerStatus.SUSPENDED;
696
- }
697
- /**
698
- * Check if partner has a parent (site-attached)
699
- */
700
- hasParent() {
701
- return !!this.parentPartnerId;
702
- }
703
- /**
704
- * Check if partner was referred by another partner
705
- */
706
- wasReferred() {
707
- return !!this.referredById;
708
- }
709
- /**
710
- * Get metadata as object
711
- */
712
- getMetadata() {
713
- if (!this.metadata) return {};
714
- try {
715
- return JSON.parse(this.metadata);
716
- } catch {
717
- return {};
718
- }
719
- }
720
- /**
721
- * Set metadata from object
722
- */
723
- setMetadata(data) {
724
- this.metadata = JSON.stringify(data);
725
- }
726
- /**
727
- * Calculate effective sales commission rate (after parent share)
728
- */
729
- getEffectiveSalesRate() {
730
- if (this.parentPartnerId && this.parentCommissionShare > 0) return this.salesCommissionRate * (1 - this.parentCommissionShare);
731
- return this.salesCommissionRate;
732
- }
733
- };
734
- __decorateClass$1([crossPackageRef("@happyvertical/smrt-profiles:Profile")], Partner.prototype, "profileId", 2);
735
- __decorateClass$1([crossPackageRef("@happyvertical/smrt-properties:Property")], Partner.prototype, "propertyId", 2);
736
- __decorateClass$1([foreignKey("Partner")], Partner.prototype, "parentPartnerId", 2);
737
- __decorateClass$1([foreignKey("Partner")], Partner.prototype, "referredById", 2);
738
- Partner = __decorateClass$1([smrt({
739
- api: { include: [
740
- "list",
741
- "get",
742
- "create",
743
- "update"
744
- ] },
745
- mcp: { include: [
746
- "list",
747
- "get",
748
- "create"
749
- ] },
750
- cli: true
751
- })], Partner);
752
- //#endregion
753
- //#region src/collections/PartnerCollection.ts
754
- var PartnerCollection = class extends SmrtCollection {
755
- static _itemClass = Partner;
756
- /**
757
- * Find partners by profile ID
758
- *
759
- * @param profileId - Profile ID
760
- * @returns Array of partners
761
- */
762
- async findByProfile(profileId) {
763
- return await this.list({
764
- where: { profileId },
765
- orderBy: "created_at DESC"
766
- });
767
- }
768
- /**
769
- * Find partner by property ID (publishers)
770
- *
771
- * @param propertyId - Property ID
772
- * @returns Partner or null
773
- */
774
- async findByProperty(propertyId) {
775
- return (await this.list({
776
- where: { propertyId },
777
- limit: 1
778
- }))[0] || null;
779
- }
780
- /**
781
- * Find partners by parent partner ID
782
- *
783
- * @param parentPartnerId - Parent partner ID
784
- * @returns Array of child partners
785
- */
786
- async findByParent(parentPartnerId) {
787
- return await this.list({
788
- where: { parentPartnerId },
789
- orderBy: "created_at DESC"
790
- });
791
- }
792
- /**
793
- * Find partners referred by a specific partner
794
- *
795
- * @param referredById - Referrer partner ID
796
- * @returns Array of referred partners
797
- */
798
- async findByReferrer(referredById) {
799
- return await this.list({
800
- where: { referredById },
801
- orderBy: "created_at DESC"
802
- });
803
- }
804
- /**
805
- * Find partners by status
806
- *
807
- * @param status - Partner status
808
- * @returns Array of partners
809
- */
810
- async findByStatus(status) {
811
- return await this.list({
812
- where: { status },
813
- orderBy: "created_at DESC"
814
- });
815
- }
816
- /**
817
- * Find all active partners
818
- */
819
- async findActive() {
820
- return await this.findByStatus(PartnerStatus.ACTIVE);
821
- }
822
- /**
823
- * Find all pending partners (awaiting approval)
824
- */
825
- async findPending() {
826
- return await this.findByStatus(PartnerStatus.PENDING);
827
- }
828
- /**
829
- * Find all suspended partners
830
- */
831
- async findSuspended() {
832
- return await this.findByStatus(PartnerStatus.SUSPENDED);
833
- }
834
- /**
835
- * Find partners by type (requires in-memory filtering for JSON field)
836
- *
837
- * @param type - Partner type to filter by
838
- * @returns Array of partners with that type
839
- */
840
- async findByType(type) {
841
- return (await this.list({})).filter((partner) => partner.hasType(type));
842
- }
843
- /**
844
- * Find all publisher partners
845
- */
846
- async findPublishers() {
847
- return await this.findByType(PartnerType.PUBLISHER);
848
- }
849
- /**
850
- * Find all salesperson partners
851
- */
852
- async findSalespeople() {
853
- return await this.findByType(PartnerType.SALESPERSON);
854
- }
855
- /**
856
- * Find all referrer partners
857
- */
858
- async findReferrers() {
859
- return await this.findByType(PartnerType.REFERRER);
860
- }
861
- /**
862
- * Find active publishers (for ad serving)
863
- */
864
- async findActivePublishers() {
865
- return (await this.findPublishers()).filter((p) => p.isActive());
866
- }
867
- /**
868
- * Find partner for ad serving by property ID
869
- * Returns active publisher partner for the property
870
- *
871
- * @param propertyId - Property ID
872
- * @returns Active publisher partner or null
873
- */
874
- async findActiveByProperty(propertyId) {
875
- const partner = await this.findByProperty(propertyId);
876
- if (partner?.isActive() && partner.isPublisher()) return partner;
877
- return null;
878
- }
879
- /**
880
- * Find partners eligible for payout
881
- * (active partners with pending commissions above threshold)
882
- * Note: Actual threshold check requires joining with commissions
883
- */
884
- async findEligibleForPayout() {
885
- return await this.findActive();
886
- }
887
- };
888
- //#endregion
889
- //#region src/models/Payout.ts
890
- var __defProp = Object.defineProperty;
891
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
892
- var __decorateClass = (decorators, target, key, kind) => {
893
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
894
- for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
895
- if (kind && result) __defProp(target, key, result);
896
- return result;
897
- };
898
- var Payout = class extends SmrtObject {
899
- partnerId = "";
900
- /**
901
- * Period start date
902
- */
903
- periodStart = /* @__PURE__ */ new Date();
904
- /**
905
- * Period end date
906
- */
907
- periodEnd = /* @__PURE__ */ new Date();
908
- /**
909
- * Total display earnings in cents
910
- */
911
- displayEarnings = 0;
912
- /**
913
- * Total referral earnings in cents
914
- */
915
- referralEarnings = 0;
916
- /**
917
- * Total sales earnings in cents
918
- */
919
- salesEarnings = 0;
920
- /**
921
- * Total parent earnings in cents (from site-attached salespeople)
922
- */
923
- parentEarnings = 0;
924
- /**
925
- * Total overhead earnings in cents (network overhead commissions)
926
- */
927
- overheadEarnings = 0;
928
- /**
929
- * Total payout amount in cents
930
- * = displayEarnings + referralEarnings + salesEarnings + parentEarnings + overheadEarnings
931
- */
932
- totalAmount = 0;
933
- /**
934
- * Currency code
935
- * Defaults to CAD
936
- */
937
- currency = "CAD";
938
- invoiceId = "";
939
- /**
940
- * Payout status
941
- */
942
- status = PayoutStatus.PENDING;
943
- /**
944
- * Payment reference (check number, transfer ID, etc.)
945
- */
946
- paymentReference = "";
947
- /**
948
- * Date payment was processed
949
- */
950
- paidAt = null;
951
- /**
952
- * Notes from admin (approval notes, issues, etc.)
953
- */
954
- notes = "";
955
- /**
956
- * Additional metadata as JSON string
957
- */
958
- metadata = "";
959
- constructor(options = {}) {
960
- super(options);
961
- if (options.partnerId !== void 0) this.partnerId = options.partnerId;
962
- if (options.periodStart !== void 0) this.periodStart = options.periodStart;
963
- if (options.periodEnd !== void 0) this.periodEnd = options.periodEnd;
964
- if (options.displayEarnings !== void 0) this.displayEarnings = options.displayEarnings;
965
- if (options.referralEarnings !== void 0) this.referralEarnings = options.referralEarnings;
966
- if (options.salesEarnings !== void 0) this.salesEarnings = options.salesEarnings;
967
- if (options.parentEarnings !== void 0) this.parentEarnings = options.parentEarnings;
968
- if (options.overheadEarnings !== void 0) this.overheadEarnings = options.overheadEarnings;
969
- if (options.totalAmount !== void 0) this.totalAmount = options.totalAmount;
970
- if (options.currency !== void 0) this.currency = options.currency;
971
- if (options.invoiceId !== void 0) this.invoiceId = options.invoiceId;
972
- if (options.status !== void 0) this.status = options.status;
973
- if (options.paymentReference !== void 0) this.paymentReference = options.paymentReference;
974
- if (options.paidAt !== void 0) this.paidAt = options.paidAt;
975
- if (options.notes !== void 0) this.notes = options.notes;
976
- if (options.metadata !== void 0) this.metadata = options.metadata;
977
- }
978
- /**
979
- * Check if payout is pending approval
980
- */
981
- isPending() {
982
- return this.status === PayoutStatus.PENDING;
983
- }
984
- /**
985
- * Check if payout is approved (waiting for processing)
986
- */
987
- isApproved() {
988
- return this.status === PayoutStatus.APPROVED;
989
- }
990
- /**
991
- * Check if payout is being processed
992
- */
993
- isProcessing() {
994
- return this.status === PayoutStatus.PROCESSING;
995
- }
996
- /**
997
- * Check if payout is completed
998
- */
999
- isCompleted() {
1000
- return this.status === PayoutStatus.COMPLETED;
1001
- }
1002
- /**
1003
- * Check if payout failed
1004
- */
1005
- isFailed() {
1006
- return this.status === PayoutStatus.FAILED;
1007
- }
1008
- /**
1009
- * Get total amount in dollars (for display)
1010
- */
1011
- getTotalInDollars() {
1012
- return this.totalAmount / 100;
1013
- }
1014
- /**
1015
- * Get display earnings in dollars
1016
- */
1017
- getDisplayEarningsInDollars() {
1018
- return this.displayEarnings / 100;
1019
- }
1020
- /**
1021
- * Get referral earnings in dollars
1022
- */
1023
- getReferralEarningsInDollars() {
1024
- return this.referralEarnings / 100;
1025
- }
1026
- /**
1027
- * Get sales earnings in dollars
1028
- */
1029
- getSalesEarningsInDollars() {
1030
- return this.salesEarnings / 100;
1031
- }
1032
- /**
1033
- * Get parent earnings in dollars
1034
- */
1035
- getParentEarningsInDollars() {
1036
- return this.parentEarnings / 100;
1037
- }
1038
- /**
1039
- * Get overhead earnings in dollars
1040
- */
1041
- getOverheadEarningsInDollars() {
1042
- return this.overheadEarnings / 100;
1043
- }
1044
- /**
1045
- * Calculate total from component earnings
1046
- */
1047
- calculateTotal() {
1048
- return this.displayEarnings + this.referralEarnings + this.salesEarnings + this.parentEarnings + this.overheadEarnings;
1049
- }
1050
- /**
1051
- * Get period as human-readable string
1052
- */
1053
- getPeriodString() {
1054
- return `${this.periodStart.toISOString().split("T")[0]} to ${this.periodEnd.toISOString().split("T")[0]}`;
1055
- }
1056
- /**
1057
- * Get metadata as object
1058
- */
1059
- getMetadata() {
1060
- if (!this.metadata) return {};
1061
- try {
1062
- return JSON.parse(this.metadata);
1063
- } catch {
1064
- return {};
1065
- }
1066
- }
1067
- /**
1068
- * Set metadata from object
1069
- */
1070
- setMetadata(data) {
1071
- this.metadata = JSON.stringify(data);
1072
- }
1073
- /**
1074
- * Approve the payout for processing
1075
- *
1076
- * @throws Error if payout is not in pending status
1077
- */
1078
- approve() {
1079
- if (this.status !== PayoutStatus.PENDING) throw new Error(`Cannot approve payout with status '${this.status}'. Only pending payouts can be approved.`);
1080
- this.status = PayoutStatus.APPROVED;
1081
- }
1082
- /**
1083
- * Mark payout as processing (payment in progress)
1084
- *
1085
- * @throws Error if payout is not in approved status
1086
- */
1087
- markProcessing() {
1088
- if (this.status !== PayoutStatus.APPROVED) throw new Error(`Cannot mark payout as processing with status '${this.status}'. Only approved payouts can be processed.`);
1089
- this.status = PayoutStatus.PROCESSING;
1090
- }
1091
- /**
1092
- * Mark payout as completed
1093
- *
1094
- * @param paymentReference - Payment reference (check number, transfer ID, etc.)
1095
- * @throws Error if payout is not in processing status
1096
- */
1097
- complete(paymentReference) {
1098
- if (this.status !== PayoutStatus.PROCESSING) throw new Error(`Cannot complete payout with status '${this.status}'. Only processing payouts can be completed.`);
1099
- this.status = PayoutStatus.COMPLETED;
1100
- this.paymentReference = paymentReference;
1101
- this.paidAt = /* @__PURE__ */ new Date();
1102
- }
1103
- /**
1104
- * Mark payout as failed
1105
- *
1106
- * @param reason - Reason for failure (stored in notes)
1107
- */
1108
- fail(reason) {
1109
- if (this.status !== PayoutStatus.APPROVED && this.status !== PayoutStatus.PROCESSING) throw new Error(`Cannot fail payout with status '${this.status}'. Only approved or processing payouts can fail.`);
1110
- this.status = PayoutStatus.FAILED;
1111
- this.notes = reason;
1112
- }
1113
- };
1114
- __decorateClass([foreignKey("Partner")], Payout.prototype, "partnerId", 2);
1115
- __decorateClass([crossPackageRef("@happyvertical/smrt-commerce:Invoice")], Payout.prototype, "invoiceId", 2);
1116
- Payout = __decorateClass([smrt({
1117
- api: { include: [
1118
- "list",
1119
- "get",
1120
- "create",
1121
- "update"
1122
- ] },
1123
- mcp: { include: [
1124
- "list",
1125
- "get",
1126
- "create"
1127
- ] },
1128
- cli: true
1129
- })], Payout);
1130
- //#endregion
1131
- //#region src/collections/PayoutCollection.ts
1132
- var PayoutCollection = class extends SmrtCollection {
1133
- static _itemClass = Payout;
1134
- /**
1135
- * Find payouts by partner
1136
- *
1137
- * @param partnerId - Partner ID
1138
- * @returns Array of payouts
1139
- */
1140
- async findByPartner(partnerId) {
1141
- return await this.list({
1142
- where: { partnerId },
1143
- orderBy: "period_end DESC"
1144
- });
1145
- }
1146
- /**
1147
- * Find payouts by status
1148
- *
1149
- * @param status - Payout status
1150
- * @returns Array of payouts
1151
- */
1152
- async findByStatus(status) {
1153
- return await this.list({
1154
- where: { status },
1155
- orderBy: "period_end DESC"
1156
- });
1157
- }
1158
- /**
1159
- * Find all pending payouts (awaiting approval)
1160
- */
1161
- async findPending() {
1162
- return await this.findByStatus(PayoutStatus.PENDING);
1163
- }
1164
- /**
1165
- * Find all approved payouts (ready for processing)
1166
- */
1167
- async findApproved() {
1168
- return await this.findByStatus(PayoutStatus.APPROVED);
1169
- }
1170
- /**
1171
- * Find all processing payouts
1172
- */
1173
- async findProcessing() {
1174
- return await this.findByStatus(PayoutStatus.PROCESSING);
1175
- }
1176
- /**
1177
- * Find all completed payouts
1178
- */
1179
- async findCompleted() {
1180
- return await this.findByStatus(PayoutStatus.COMPLETED);
1181
- }
1182
- /**
1183
- * Find all failed payouts
1184
- */
1185
- async findFailed() {
1186
- return await this.findByStatus(PayoutStatus.FAILED);
1187
- }
1188
- /**
1189
- * Find payouts by invoice
1190
- *
1191
- * @param invoiceId - Invoice ID
1192
- * @returns Array of payouts
1193
- */
1194
- async findByInvoice(invoiceId) {
1195
- return await this.list({
1196
- where: { invoiceId },
1197
- orderBy: "period_end DESC"
1198
- });
1199
- }
1200
- /**
1201
- * Find payouts in period range
1202
- *
1203
- * @param start - Period start date
1204
- * @param end - Period end date
1205
- * @returns Array of payouts
1206
- */
1207
- async findByPeriod(start, end) {
1208
- return await this.list({
1209
- where: {
1210
- "period_start >=": start.toISOString(),
1211
- "period_end <=": end.toISOString()
1212
- },
1213
- orderBy: "period_end DESC"
1214
- });
1215
- }
1216
- /**
1217
- * Find payouts for a partner by status
1218
- *
1219
- * @param partnerId - Partner ID
1220
- * @param status - Payout status
1221
- * @returns Array of payouts
1222
- */
1223
- async findByPartnerAndStatus(partnerId, status) {
1224
- return await this.list({
1225
- where: {
1226
- partnerId,
1227
- status
1228
- },
1229
- orderBy: "period_end DESC"
1230
- });
1231
- }
1232
- /**
1233
- * Find pending payouts for a partner
1234
- *
1235
- * @param partnerId - Partner ID
1236
- * @returns Array of pending payouts
1237
- */
1238
- async findPendingByPartner(partnerId) {
1239
- return await this.findByPartnerAndStatus(partnerId, PayoutStatus.PENDING);
1240
- }
1241
- /**
1242
- * Find completed payouts for a partner
1243
- *
1244
- * @param partnerId - Partner ID
1245
- * @returns Array of completed payouts
1246
- */
1247
- async findCompletedByPartner(partnerId) {
1248
- return await this.findByPartnerAndStatus(partnerId, PayoutStatus.COMPLETED);
1249
- }
1250
- /**
1251
- * Sum total paid to a partner
1252
- *
1253
- * @param partnerId - Partner ID
1254
- * @returns Total paid in cents
1255
- */
1256
- async sumPaidByPartner(partnerId) {
1257
- return (await this.findCompletedByPartner(partnerId)).reduce((sum, p) => sum + p.totalAmount, 0);
1258
- }
1259
- /**
1260
- * Sum total pending for a partner
1261
- *
1262
- * @param partnerId - Partner ID
1263
- * @returns Total pending in cents
1264
- */
1265
- async sumPendingByPartner(partnerId) {
1266
- return (await this.findPendingByPartner(partnerId)).reduce((sum, p) => sum + p.totalAmount, 0);
1267
- }
1268
- /**
1269
- * Get most recent payout for a partner
1270
- *
1271
- * @param partnerId - Partner ID
1272
- * @returns Most recent payout or null
1273
- */
1274
- async findLatestByPartner(partnerId) {
1275
- return (await this.list({
1276
- where: { partnerId },
1277
- orderBy: "period_end DESC",
1278
- limit: 1
1279
- }))[0] || null;
1280
- }
1281
- /**
1282
- * Get payout statistics
1283
- *
1284
- * @returns Stats object
1285
- */
1286
- async getStats() {
1287
- const all = await this.list({});
1288
- const stats = {
1289
- pending: 0,
1290
- approved: 0,
1291
- processing: 0,
1292
- completed: 0,
1293
- failed: 0,
1294
- totalPaid: 0,
1295
- totalPending: 0
1296
- };
1297
- for (const p of all) switch (p.status) {
1298
- case PayoutStatus.PENDING:
1299
- stats.pending++;
1300
- stats.totalPending += p.totalAmount;
1301
- break;
1302
- case PayoutStatus.APPROVED:
1303
- stats.approved++;
1304
- stats.totalPending += p.totalAmount;
1305
- break;
1306
- case PayoutStatus.PROCESSING:
1307
- stats.processing++;
1308
- break;
1309
- case PayoutStatus.COMPLETED:
1310
- stats.completed++;
1311
- stats.totalPaid += p.totalAmount;
1312
- break;
1313
- case PayoutStatus.FAILED:
1314
- stats.failed++;
1315
- break;
1316
- }
1317
- return stats;
1318
- }
1319
- };
1
+ import { Commission, CommissionCollection, CommissionPayout as Payout, CommissionPayoutCollection as PayoutCollection, Earner as Partner, EarnerCollection as PartnerCollection } from "@happyvertical/smrt-sales";
2
+ //#region src/index.ts
3
+ var PartnerStatus = Object.freeze({
4
+ PENDING: "pending",
5
+ ACTIVE: "active",
6
+ SUSPENDED: "suspended"
7
+ });
8
+ var PartnerType = Object.freeze({
9
+ PUBLISHER: "publisher",
10
+ SALESPERSON: "salesperson",
11
+ REFERRER: "referrer"
12
+ });
13
+ var CommissionType = Object.freeze({
14
+ DISPLAY: "display",
15
+ REFERRAL: "referral",
16
+ SALES: "sales",
17
+ PARENT: "parent",
18
+ OVERHEAD: "overhead"
19
+ });
20
+ var CommissionStatus = Object.freeze({
21
+ PENDING: "pending",
22
+ INCLUDED: "included",
23
+ PAID: "paid"
24
+ });
25
+ var PayoutStatus = Object.freeze({
26
+ PENDING: "pending",
27
+ APPROVED: "approved",
28
+ PROCESSING: "processing",
29
+ COMPLETED: "completed",
30
+ FAILED: "failed"
31
+ });
32
+ var PayoutMethod = Object.freeze({
33
+ BANK_TRANSFER: "bank_transfer",
34
+ CHECK: "check",
35
+ PAYPAL: "paypal",
36
+ CREDIT: "credit"
37
+ });
1320
38
  //#endregion
1321
39
  export { Commission, CommissionCollection, CommissionStatus, CommissionType, Partner, PartnerCollection, PartnerStatus, PartnerType, Payout, PayoutCollection, PayoutMethod, PayoutStatus };
1322
40