@chatman-media/storage 1.13.0 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +120 -0
- package/dist/schema.d.ts +1344 -0
- package/dist/schema.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -35,10 +35,15 @@ __export(exports_schema, {
|
|
|
35
35
|
skillOutcomes: () => skillOutcomes,
|
|
36
36
|
shadowEvaluations: () => shadowEvaluations,
|
|
37
37
|
sessions: () => sessions,
|
|
38
|
+
serviceCatalogItems: () => serviceCatalogItems,
|
|
38
39
|
selfPlayMatches: () => selfPlayMatches,
|
|
39
40
|
referralCodes: () => referralCodes,
|
|
40
41
|
questionnaireTokens: () => questionnaireTokens,
|
|
41
42
|
passwordResets: () => passwordResets,
|
|
43
|
+
partners: () => partners,
|
|
44
|
+
partnerSettlements: () => partnerSettlements,
|
|
45
|
+
partnerServices: () => partnerServices,
|
|
46
|
+
partnerDeals: () => partnerDeals,
|
|
42
47
|
pairwiseMatches: () => pairwiseMatches,
|
|
43
48
|
outreachCampaigns: () => outreachCampaigns,
|
|
44
49
|
outreachCampaignLeads: () => outreachCampaignLeads,
|
|
@@ -2745,6 +2750,8 @@ var stageDefinitions = pgTable("stage_definitions", {
|
|
|
2745
2750
|
icon: text("icon"),
|
|
2746
2751
|
goal: text("goal"),
|
|
2747
2752
|
guidance: text("guidance"),
|
|
2753
|
+
partnerWebhookUrl: text("partner_webhook_url"),
|
|
2754
|
+
partnerWebhookMode: text("partner_webhook_mode").notNull().default("fire_and_forget"),
|
|
2748
2755
|
createdAt: integer("created_at").notNull().default(epochNow()),
|
|
2749
2756
|
updatedAt: integer("updated_at").notNull().default(epochNow())
|
|
2750
2757
|
}, (t) => [
|
|
@@ -2790,10 +2797,12 @@ var leads = pgTable("leads", {
|
|
|
2790
2797
|
decidedAt: integer("decided_at"),
|
|
2791
2798
|
lastCheckinAt: integer("last_checkin_at"),
|
|
2792
2799
|
visaInterviewField: text("visa_interview_field"),
|
|
2800
|
+
awaitingToken: text("awaiting_token"),
|
|
2793
2801
|
createdAt: integer("created_at").notNull().default(epochNow()),
|
|
2794
2802
|
updatedAt: integer("updated_at").notNull().default(epochNow())
|
|
2795
2803
|
}, (t) => [
|
|
2796
2804
|
index("idx_leads_state_recency").on(t.state, sql`${t.updatedAt} DESC`),
|
|
2805
|
+
index("idx_leads_awaiting_token").on(t.awaitingToken).where(sql`${t.awaitingToken} IS NOT NULL`),
|
|
2797
2806
|
index("idx_leads_stage_def").on(t.stageDefinitionId),
|
|
2798
2807
|
index("idx_leads_tenant_user").on(t.tenantId, t.userId)
|
|
2799
2808
|
]);
|
|
@@ -3454,6 +3463,112 @@ var exchangeOrders = pgTable("exchange_orders", {
|
|
|
3454
3463
|
index("idx_exchange_orders_tenant_created").on(t.tenantId, t.createdAt),
|
|
3455
3464
|
index("idx_exchange_orders_awaiting_ttl").on(t.status, t.rateExpiresAt).where(sql`status = 'awaiting_payment'`)
|
|
3456
3465
|
]);
|
|
3466
|
+
var partners = pgTable("partners", {
|
|
3467
|
+
id: serial("id").primaryKey(),
|
|
3468
|
+
tenantId: integer("tenant_id").notNull().references(() => tenants.id, { onDelete: "cascade" }),
|
|
3469
|
+
name: text("name").notNull(),
|
|
3470
|
+
status: text("status").notNull().default("active"),
|
|
3471
|
+
contactName: text("contact_name"),
|
|
3472
|
+
contactChannel: text("contact_channel"),
|
|
3473
|
+
contactValue: text("contact_value"),
|
|
3474
|
+
defaultCommissionPct: doublePrecision("default_commission_pct").notNull().default(0),
|
|
3475
|
+
settlementCurrency: text("settlement_currency").notNull().default("THB"),
|
|
3476
|
+
notes: text("notes"),
|
|
3477
|
+
createdAt: integer("created_at").notNull().default(epochNow()),
|
|
3478
|
+
updatedAt: integer("updated_at").notNull().default(epochNow())
|
|
3479
|
+
}, (t) => [
|
|
3480
|
+
check("partners_status_check", sql`${t.status} IN ('active','archived')`),
|
|
3481
|
+
index("idx_partners_tenant_status").on(t.tenantId, t.status)
|
|
3482
|
+
]);
|
|
3483
|
+
var partnerServices = pgTable("partner_services", {
|
|
3484
|
+
id: serial("id").primaryKey(),
|
|
3485
|
+
tenantId: integer("tenant_id").notNull().references(() => tenants.id, { onDelete: "cascade" }),
|
|
3486
|
+
partnerId: integer("partner_id").notNull().references(() => partners.id, { onDelete: "cascade" }),
|
|
3487
|
+
name: text("name").notNull(),
|
|
3488
|
+
category: text("category"),
|
|
3489
|
+
funnelId: integer("funnel_id").references(() => funnels.id, { onDelete: "set null" }),
|
|
3490
|
+
stageDefinitionId: integer("stage_definition_id").references(() => stageDefinitions.id, { onDelete: "set null" }),
|
|
3491
|
+
commissionPct: doublePrecision("commission_pct").notNull().default(0),
|
|
3492
|
+
isActive: boolean("is_active").notNull().default(true),
|
|
3493
|
+
notes: text("notes"),
|
|
3494
|
+
createdAt: integer("created_at").notNull().default(epochNow()),
|
|
3495
|
+
updatedAt: integer("updated_at").notNull().default(epochNow())
|
|
3496
|
+
}, (t) => [
|
|
3497
|
+
uniqueIndex("uniq_partner_services_name").on(t.tenantId, t.partnerId, t.name),
|
|
3498
|
+
index("idx_partner_services_tenant_active").on(t.tenantId, t.isActive),
|
|
3499
|
+
index("idx_partner_services_stage").on(t.tenantId, t.stageDefinitionId)
|
|
3500
|
+
]);
|
|
3501
|
+
var serviceCatalogItems = pgTable("service_catalog_items", {
|
|
3502
|
+
id: serial("id").primaryKey(),
|
|
3503
|
+
tenantId: integer("tenant_id").notNull().references(() => tenants.id, { onDelete: "cascade" }),
|
|
3504
|
+
slug: text("slug").notNull(),
|
|
3505
|
+
name: text("name").notNull(),
|
|
3506
|
+
category: text("category"),
|
|
3507
|
+
description: text("description"),
|
|
3508
|
+
routeType: text("route_type").notNull().default("manual"),
|
|
3509
|
+
funnelId: integer("funnel_id").references(() => funnels.id, { onDelete: "set null" }),
|
|
3510
|
+
partnerServiceId: integer("partner_service_id").references(() => partnerServices.id, { onDelete: "set null" }),
|
|
3511
|
+
webhookUrl: text("webhook_url"),
|
|
3512
|
+
isActive: boolean("is_active").notNull().default(true),
|
|
3513
|
+
sortOrder: integer("sort_order").notNull().default(0),
|
|
3514
|
+
metadataJson: text("metadata_json").notNull().default("{}"),
|
|
3515
|
+
createdAt: integer("created_at").notNull().default(epochNow()),
|
|
3516
|
+
updatedAt: integer("updated_at").notNull().default(epochNow())
|
|
3517
|
+
}, (t) => [
|
|
3518
|
+
check("service_catalog_route_type_check", sql`${t.routeType} IN ('manual','funnel','partner_service','webhook')`),
|
|
3519
|
+
uniqueIndex("uniq_service_catalog_slug").on(t.tenantId, t.slug),
|
|
3520
|
+
index("idx_service_catalog_tenant_active").on(t.tenantId, t.isActive, t.sortOrder),
|
|
3521
|
+
index("idx_service_catalog_funnel").on(t.tenantId, t.funnelId),
|
|
3522
|
+
index("idx_service_catalog_partner_service").on(t.tenantId, t.partnerServiceId)
|
|
3523
|
+
]);
|
|
3524
|
+
var partnerDeals = pgTable("partner_deals", {
|
|
3525
|
+
id: serial("id").primaryKey(),
|
|
3526
|
+
tenantId: integer("tenant_id").notNull().references(() => tenants.id, { onDelete: "cascade" }),
|
|
3527
|
+
partnerId: integer("partner_id").references(() => partners.id, { onDelete: "set null" }),
|
|
3528
|
+
serviceId: integer("service_id").references(() => partnerServices.id, { onDelete: "set null" }),
|
|
3529
|
+
leadId: integer("lead_id").references(() => leads.id, { onDelete: "set null" }),
|
|
3530
|
+
stageDefinitionId: integer("stage_definition_id").references(() => stageDefinitions.id, { onDelete: "set null" }),
|
|
3531
|
+
status: text("status").notNull().default("sent"),
|
|
3532
|
+
handoffUrl: text("handoff_url"),
|
|
3533
|
+
handoffMode: text("handoff_mode").notNull().default("fire_and_forget"),
|
|
3534
|
+
grossAmount: doublePrecision("gross_amount"),
|
|
3535
|
+
currency: text("currency").notNull().default("THB"),
|
|
3536
|
+
commissionPct: doublePrecision("commission_pct").notNull().default(0),
|
|
3537
|
+
commissionAmount: doublePrecision("commission_amount"),
|
|
3538
|
+
proofJson: text("proof_json"),
|
|
3539
|
+
notes: text("notes"),
|
|
3540
|
+
sentAt: integer("sent_at"),
|
|
3541
|
+
acceptedAt: integer("accepted_at"),
|
|
3542
|
+
completedAt: integer("completed_at"),
|
|
3543
|
+
cancelledAt: integer("cancelled_at"),
|
|
3544
|
+
settledAt: integer("settled_at"),
|
|
3545
|
+
createdAt: integer("created_at").notNull().default(epochNow()),
|
|
3546
|
+
updatedAt: integer("updated_at").notNull().default(epochNow())
|
|
3547
|
+
}, (t) => [
|
|
3548
|
+
check("partner_deals_status_check", sql`${t.status} IN ('sent','accepted','rejected','completed','cancelled','disputed','settled')`),
|
|
3549
|
+
check("partner_deals_mode_check", sql`${t.handoffMode} IN ('fire_and_forget','await_callback')`),
|
|
3550
|
+
index("idx_partner_deals_tenant_status").on(t.tenantId, t.status),
|
|
3551
|
+
index("idx_partner_deals_partner").on(t.tenantId, t.partnerId),
|
|
3552
|
+
index("idx_partner_deals_lead").on(t.tenantId, t.leadId)
|
|
3553
|
+
]);
|
|
3554
|
+
var partnerSettlements = pgTable("partner_settlements", {
|
|
3555
|
+
id: serial("id").primaryKey(),
|
|
3556
|
+
tenantId: integer("tenant_id").notNull().references(() => tenants.id, { onDelete: "cascade" }),
|
|
3557
|
+
partnerId: integer("partner_id").notNull().references(() => partners.id, { onDelete: "cascade" }),
|
|
3558
|
+
periodStart: integer("period_start").notNull(),
|
|
3559
|
+
periodEnd: integer("period_end").notNull(),
|
|
3560
|
+
status: text("status").notNull().default("draft"),
|
|
3561
|
+
totalGross: doublePrecision("total_gross").notNull().default(0),
|
|
3562
|
+
totalCommission: doublePrecision("total_commission").notNull().default(0),
|
|
3563
|
+
currency: text("currency").notNull().default("THB"),
|
|
3564
|
+
paidAt: integer("paid_at"),
|
|
3565
|
+
notes: text("notes"),
|
|
3566
|
+
createdAt: integer("created_at").notNull().default(epochNow()),
|
|
3567
|
+
updatedAt: integer("updated_at").notNull().default(epochNow())
|
|
3568
|
+
}, (t) => [
|
|
3569
|
+
check("partner_settlements_status_check", sql`${t.status} IN ('draft','issued','paid','cancelled')`),
|
|
3570
|
+
index("idx_partner_settlements_partner").on(t.tenantId, t.partnerId, t.periodStart)
|
|
3571
|
+
]);
|
|
3457
3572
|
// src/integration-helpers.ts
|
|
3458
3573
|
import { readdirSync, readFileSync } from "node:fs";
|
|
3459
3574
|
import { join } from "node:path";
|
|
@@ -5492,11 +5607,16 @@ export {
|
|
|
5492
5607
|
skillOutcomes,
|
|
5493
5608
|
shadowEvaluations,
|
|
5494
5609
|
sessions,
|
|
5610
|
+
serviceCatalogItems,
|
|
5495
5611
|
selfPlayMatches,
|
|
5496
5612
|
exports_schema as schema,
|
|
5497
5613
|
referralCodes,
|
|
5498
5614
|
questionnaireTokens,
|
|
5499
5615
|
passwordResets,
|
|
5616
|
+
partners,
|
|
5617
|
+
partnerSettlements,
|
|
5618
|
+
partnerServices,
|
|
5619
|
+
partnerDeals,
|
|
5500
5620
|
pairwiseMatches,
|
|
5501
5621
|
outreachCampaigns,
|
|
5502
5622
|
outreachCampaignLeads,
|