@fayz-ai/plugin-marketing 0.2.1 → 0.8.1
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/README.md +2 -0
- package/dist/MarketingContext.d.ts +2 -0
- package/dist/MarketingContext.d.ts.map +1 -1
- package/dist/MarketingPage.d.ts.map +1 -1
- package/dist/data/blogEntities.d.ts +28 -0
- package/dist/data/blogEntities.d.ts.map +1 -0
- package/dist/data/contentSupabase.d.ts.map +1 -1
- package/dist/data/tables.d.ts +6 -0
- package/dist/data/tables.d.ts.map +1 -0
- package/dist/index.cjs +630 -127
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +636 -133
- package/dist/index.js.map +1 -1
- package/dist/integrations/ranklayer/connectorDef.d.ts +3 -0
- package/dist/integrations/ranklayer/connectorDef.d.ts.map +1 -0
- package/dist/integrations/ranklayer/data/supabase.d.ts +16 -0
- package/dist/integrations/ranklayer/data/supabase.d.ts.map +1 -0
- package/dist/integrations/ranklayer/types.d.ts +16 -0
- package/dist/integrations/ranklayer/types.d.ts.map +1 -0
- package/dist/migrations/index.d.ts +9 -3
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/presets.d.ts +2 -0
- package/dist/presets.d.ts.map +1 -1
- package/dist/schema/index.d.ts +44 -44
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema.cjs +9 -9
- package/dist/schema.cjs.map +1 -1
- package/dist/schema.js +9 -9
- package/dist/schema.js.map +1 -1
- package/dist/views/blog/BlogAdminView.d.ts +5 -0
- package/dist/views/blog/BlogAdminView.d.ts.map +1 -0
- package/dist/views/blog/BlogEntityForm.d.ts +11 -0
- package/dist/views/blog/BlogEntityForm.d.ts.map +1 -0
- package/dist/views/blog/useEntityCrud.d.ts +29 -0
- package/dist/views/blog/useEntityCrud.d.ts.map +1 -0
- package/package.json +8 -5
- package/src/MarketingContext.tsx +2 -0
- package/src/MarketingPage.tsx +22 -1
- package/src/data/blogEntities.tsx +91 -0
- package/src/data/contentSupabase.ts +18 -17
- package/src/data/tables.ts +7 -0
- package/src/index.ts +27 -3
- package/src/integrations/ranklayer/RANKLAYER.md +40 -0
- package/src/integrations/ranklayer/connectorDef.tsx +98 -0
- package/src/integrations/ranklayer/data/supabase.ts +106 -0
- package/src/integrations/ranklayer/types.ts +16 -0
- package/src/migrations/000_plg_rename.sql +15 -0
- package/src/migrations/001_content_planner.sql +48 -48
- package/src/migrations/002_multi_platform.sql +5 -5
- package/src/migrations/003_recording_ops.sql +10 -10
- package/src/migrations/004_ranklayer.sql +50 -0
- package/src/migrations/index.ts +152 -74
- package/src/presets.ts +5 -3
- package/src/schema/index.ts +9 -9
- package/src/views/blog/BlogAdminView.tsx +99 -0
- package/src/views/blog/BlogEntityForm.tsx +92 -0
- package/src/views/blog/useEntityCrud.ts +50 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectorDef.d.ts","sourceRoot":"","sources":["../../../src/integrations/ranklayer/connectorDef.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAmExD,eAAO,MAAM,qBAAqB,EAAE,mBAuBnC,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { TestConnectionResult } from '@fayz-ai/core';
|
|
2
|
+
import type { RankLayerIntegration, RankLayerSyncLogEntry } from '../types';
|
|
3
|
+
export declare function createRankLayerProvider(): {
|
|
4
|
+
getIntegration(): Promise<RankLayerIntegration | null>;
|
|
5
|
+
saveIntegration(values: {
|
|
6
|
+
apiKey: string;
|
|
7
|
+
siteDomain?: string;
|
|
8
|
+
}): Promise<RankLayerIntegration>;
|
|
9
|
+
disconnect(): Promise<void>;
|
|
10
|
+
testConnection(values: {
|
|
11
|
+
apiKey: string;
|
|
12
|
+
}): Promise<TestConnectionResult>;
|
|
13
|
+
getSyncLog(integrationId: string): Promise<RankLayerSyncLogEntry[]>;
|
|
14
|
+
};
|
|
15
|
+
export type RankLayerProvider = ReturnType<typeof createRankLayerProvider>;
|
|
16
|
+
//# sourceMappingURL=supabase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supabase.d.ts","sourceRoot":"","sources":["../../../../src/integrations/ranklayer/data/supabase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAqC3E,wBAAgB,uBAAuB;sBAEX,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;4BAW9B;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC;kBAmBjF,OAAO,CAAC,IAAI,CAAC;2BAQJ;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC;8BAO/C,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;EAiB5E;AAED,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface RankLayerIntegration {
|
|
2
|
+
id: string;
|
|
3
|
+
apiKey?: string;
|
|
4
|
+
siteDomain?: string;
|
|
5
|
+
active: boolean;
|
|
6
|
+
lastSyncAt?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface RankLayerSyncLogEntry {
|
|
9
|
+
id: string;
|
|
10
|
+
createdAt: string;
|
|
11
|
+
status: 'success' | 'partial' | 'error';
|
|
12
|
+
message?: string;
|
|
13
|
+
fetched: number;
|
|
14
|
+
written: number;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/integrations/ranklayer/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAA;IACvC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB"}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
export declare const
|
|
2
|
-
export declare const
|
|
3
|
-
export declare const
|
|
1
|
+
export declare const MIGRATION_000_PLG_RENAME = "-- 000_plg_rename.sql \u2014 rename legacy marketing tables to plg_marketing_* for pools\n-- provisioned before the industry-pool rename. Guarded: fires only when legacy\n-- name exists and target does not, so fresh pools skip every branch.\nDO $$\nBEGIN\n IF to_regclass('public.mkt_social_accounts') IS NOT NULL AND to_regclass('public.plg_marketing_social_accounts') IS NULL THEN\n ALTER TABLE public.mkt_social_accounts RENAME TO plg_marketing_social_accounts;\n END IF;\n IF to_regclass('public.mkt_content_plans') IS NOT NULL AND to_regclass('public.plg_marketing_content_plans') IS NULL THEN\n ALTER TABLE public.mkt_content_plans RENAME TO plg_marketing_content_plans;\n END IF;\n IF to_regclass('public.mkt_content_posts') IS NOT NULL AND to_regclass('public.plg_marketing_content_posts') IS NULL THEN\n ALTER TABLE public.mkt_content_posts RENAME TO plg_marketing_content_posts;\n END IF;\nEND $$;\n";
|
|
2
|
+
export declare const MIGRATION_001_CONTENT_PLANNER = "-- Marketing Plugin: Content Planner\n-- Prefix: plg_marketing_\n-- Social accounts + content plans + posts (Notion-style markdown pages).\n\nCREATE TABLE IF NOT EXISTS public.plg_marketing_social_accounts (\n id uuid PRIMARY KEY DEFAULT gen_random_uuid(),\n tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,\n name text NOT NULL,\n handle text,\n platform text NOT NULL DEFAULT 'instagram'\n CHECK (platform IN ('instagram', 'tiktok', 'youtube', 'facebook', 'linkedin')),\n is_active boolean NOT NULL DEFAULT true,\n created_at timestamptz NOT NULL DEFAULT now()\n);\nALTER TABLE public.plg_marketing_social_accounts ENABLE ROW LEVEL SECURITY;\nCREATE INDEX IF NOT EXISTS idx_plg_marketing_social_accounts_tenant ON public.plg_marketing_social_accounts(tenant_id);\n\nCREATE TABLE IF NOT EXISTS public.plg_marketing_content_plans (\n id uuid PRIMARY KEY DEFAULT gen_random_uuid(),\n tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,\n account_id uuid NOT NULL REFERENCES public.plg_marketing_social_accounts(id) ON DELETE CASCADE,\n name text NOT NULL,\n status text NOT NULL DEFAULT 'active'\n CHECK (status IN ('draft', 'active', 'archived')),\n weeks_count integer NOT NULL DEFAULT 8,\n start_date date,\n objective text,\n tone text,\n pillars jsonb NOT NULL DEFAULT '[]'::jsonb,\n formats jsonb NOT NULL DEFAULT '[]'::jsonb,\n weekly_frequency integer NOT NULL DEFAULT 3,\n brief_md text NOT NULL DEFAULT '',\n created_at timestamptz NOT NULL DEFAULT now(),\n updated_at timestamptz NOT NULL DEFAULT now()\n);\nALTER TABLE public.plg_marketing_content_plans ENABLE ROW LEVEL SECURITY;\nCREATE INDEX IF NOT EXISTS idx_plg_marketing_content_plans_tenant ON public.plg_marketing_content_plans(tenant_id);\nCREATE INDEX IF NOT EXISTS idx_plg_marketing_content_plans_account ON public.plg_marketing_content_plans(account_id);\n\nCREATE TABLE IF NOT EXISTS public.plg_marketing_content_posts (\n id uuid PRIMARY KEY DEFAULT gen_random_uuid(),\n tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,\n plan_id uuid NOT NULL REFERENCES public.plg_marketing_content_plans(id) ON DELETE CASCADE,\n week_number integer NOT NULL DEFAULT 1,\n position integer NOT NULL DEFAULT 0,\n title text NOT NULL,\n format text NOT NULL DEFAULT 'reel'\n CHECK (format IN ('reel', 'static', 'carousel', 'story')),\n status text NOT NULL DEFAULT 'idea'\n CHECK (status IN ('idea', 'script', 'recording', 'editing', 'scheduled', 'published')),\n scheduled_date date,\n hook text,\n cta text,\n content_md text NOT NULL DEFAULT '',\n created_at timestamptz NOT NULL DEFAULT now(),\n updated_at timestamptz NOT NULL DEFAULT now()\n);\nALTER TABLE public.plg_marketing_content_posts ENABLE ROW LEVEL SECURITY;\nCREATE INDEX IF NOT EXISTS idx_plg_marketing_content_posts_tenant ON public.plg_marketing_content_posts(tenant_id);\nCREATE INDEX IF NOT EXISTS idx_plg_marketing_content_posts_plan ON public.plg_marketing_content_posts(plan_id, week_number, position);\nCREATE INDEX IF NOT EXISTS idx_plg_marketing_content_posts_status ON public.plg_marketing_content_posts(tenant_id, status);\n\n-- RLS policies for plg_marketing_social_accounts\nDROP POLICY IF EXISTS plg_marketing_social_accounts_select ON public.plg_marketing_social_accounts;\nDROP POLICY IF EXISTS plg_marketing_social_accounts_insert ON public.plg_marketing_social_accounts;\nDROP POLICY IF EXISTS plg_marketing_social_accounts_update ON public.plg_marketing_social_accounts;\nDROP POLICY IF EXISTS plg_marketing_social_accounts_delete ON public.plg_marketing_social_accounts;\nCREATE POLICY plg_marketing_social_accounts_select ON public.plg_marketing_social_accounts FOR SELECT TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY plg_marketing_social_accounts_insert ON public.plg_marketing_social_accounts FOR INSERT TO authenticated WITH CHECK (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY plg_marketing_social_accounts_update ON public.plg_marketing_social_accounts FOR UPDATE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY plg_marketing_social_accounts_delete ON public.plg_marketing_social_accounts FOR DELETE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nGRANT SELECT, INSERT, UPDATE, DELETE ON public.plg_marketing_social_accounts TO authenticated;\n\n-- RLS policies for plg_marketing_content_plans\nDROP POLICY IF EXISTS plg_marketing_content_plans_select ON public.plg_marketing_content_plans;\nDROP POLICY IF EXISTS plg_marketing_content_plans_insert ON public.plg_marketing_content_plans;\nDROP POLICY IF EXISTS plg_marketing_content_plans_update ON public.plg_marketing_content_plans;\nDROP POLICY IF EXISTS plg_marketing_content_plans_delete ON public.plg_marketing_content_plans;\nCREATE POLICY plg_marketing_content_plans_select ON public.plg_marketing_content_plans FOR SELECT TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY plg_marketing_content_plans_insert ON public.plg_marketing_content_plans FOR INSERT TO authenticated WITH CHECK (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY plg_marketing_content_plans_update ON public.plg_marketing_content_plans FOR UPDATE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY plg_marketing_content_plans_delete ON public.plg_marketing_content_plans FOR DELETE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nGRANT SELECT, INSERT, UPDATE, DELETE ON public.plg_marketing_content_plans TO authenticated;\n\n-- RLS policies for plg_marketing_content_posts\nDROP POLICY IF EXISTS plg_marketing_content_posts_select ON public.plg_marketing_content_posts;\nDROP POLICY IF EXISTS plg_marketing_content_posts_insert ON public.plg_marketing_content_posts;\nDROP POLICY IF EXISTS plg_marketing_content_posts_update ON public.plg_marketing_content_posts;\nDROP POLICY IF EXISTS plg_marketing_content_posts_delete ON public.plg_marketing_content_posts;\nCREATE POLICY plg_marketing_content_posts_select ON public.plg_marketing_content_posts FOR SELECT TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY plg_marketing_content_posts_insert ON public.plg_marketing_content_posts FOR INSERT TO authenticated WITH CHECK (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY plg_marketing_content_posts_update ON public.plg_marketing_content_posts FOR UPDATE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY plg_marketing_content_posts_delete ON public.plg_marketing_content_posts FOR DELETE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nGRANT SELECT, INSERT, UPDATE, DELETE ON public.plg_marketing_content_posts TO authenticated;\n";
|
|
3
|
+
export declare const MIGRATION_002_MULTI_PLATFORM = "-- Marketing Plugin: multi-platform accounts + per-post targets.\n-- An account is a brand/profile that publishes to MANY platforms (Instagram,\n-- YouTube, TikTok, ...). Posts optionally narrow the target platforms; an\n-- empty array means \"inherit the account's platforms\".\n\nALTER TABLE public.plg_marketing_social_accounts\n ADD COLUMN IF NOT EXISTS platforms text[] NOT NULL DEFAULT '{instagram}';\n\n-- Backfill from the legacy single-platform column, then drop it (also drops\n-- its CHECK constraint \u2014 the platform list is UI-driven from here on).\nDO $$\nBEGIN\n IF EXISTS (\n SELECT 1 FROM information_schema.columns\n WHERE table_schema = 'public' AND table_name = 'plg_marketing_social_accounts' AND column_name = 'platform'\n ) THEN\n UPDATE public.plg_marketing_social_accounts\n SET platforms = ARRAY[platform]\n WHERE platform IS NOT NULL AND platforms = '{instagram}';\n ALTER TABLE public.plg_marketing_social_accounts DROP COLUMN platform;\n END IF;\nEND $$;\n\nALTER TABLE public.plg_marketing_content_posts\n ADD COLUMN IF NOT EXISTS platforms text[] NOT NULL DEFAULT '{}';\n";
|
|
4
|
+
export declare const MIGRATION_003_RECORDING_OPS = "-- Marketing Plugin: recording-day ops on posts.\n-- checklist: shooting checklist items [{ id, text, done }] \u2014 the on-set\n-- companion for recording day. media_url: uploaded asset (static posts get a\n-- caption + final art instead of a script).\n\nALTER TABLE public.plg_marketing_content_posts\n ADD COLUMN IF NOT EXISTS checklist jsonb NOT NULL DEFAULT '[]';\n\nALTER TABLE public.plg_marketing_content_posts\n ADD COLUMN IF NOT EXISTS media_url text;\n\n-- Public media bucket for content assets (mirrors the avatars-bucket pattern:\n-- public read, authenticated write). Path convention: content/{tenantId}/{postId}-{ts}.{ext}\nINSERT INTO storage.buckets (id, name, public)\n VALUES ('mkt-media', 'mkt-media', true)\n ON CONFLICT (id) DO NOTHING;\n\nDROP POLICY IF EXISTS plg_marketing_media_read ON storage.objects;\nDROP POLICY IF EXISTS plg_marketing_media_insert ON storage.objects;\nDROP POLICY IF EXISTS plg_marketing_media_update ON storage.objects;\nDROP POLICY IF EXISTS plg_marketing_media_delete ON storage.objects;\nCREATE POLICY plg_marketing_media_read ON storage.objects FOR SELECT TO public USING (bucket_id = 'mkt-media');\nCREATE POLICY plg_marketing_media_insert ON storage.objects FOR INSERT TO authenticated WITH CHECK (bucket_id = 'mkt-media');\nCREATE POLICY plg_marketing_media_update ON storage.objects FOR UPDATE TO authenticated USING (bucket_id = 'mkt-media');\nCREATE POLICY plg_marketing_media_delete ON storage.objects FOR DELETE TO authenticated USING (bucket_id = 'mkt-media');\n";
|
|
5
|
+
export declare const MIGRATION_004_RANKLAYER = "-- Marketing Plugin: RankLayer integration (SEO content publishing).\n-- Control-plane state for the RankLayer connector rendered in Marketing \u2192\n-- Integra\u00E7\u00F5es. Prefix: plg_marketing_ranklayer_. Scaffold: the real sync\n-- (edge function + RankLayer API calls) lands via an external PR \u2014 see\n-- src/integrations/ranklayer/RANKLAYER.md.\n\nCREATE TABLE IF NOT EXISTS public.plg_marketing_ranklayer_integrations (\n id uuid PRIMARY KEY DEFAULT gen_random_uuid(),\n tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,\n api_key text,\n site_domain text,\n active boolean NOT NULL DEFAULT true,\n last_sync_at timestamptz,\n created_at timestamptz NOT NULL DEFAULT now(),\n updated_at timestamptz NOT NULL DEFAULT now()\n);\nALTER TABLE public.plg_marketing_ranklayer_integrations ENABLE ROW LEVEL SECURITY;\nCREATE UNIQUE INDEX IF NOT EXISTS uq_plg_marketing_ranklayer_integrations_tenant\n ON public.plg_marketing_ranklayer_integrations(tenant_id);\n\nCREATE TABLE IF NOT EXISTS public.plg_marketing_ranklayer_sync_log (\n id uuid PRIMARY KEY DEFAULT gen_random_uuid(),\n tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,\n integration_id uuid REFERENCES public.plg_marketing_ranklayer_integrations(id) ON DELETE CASCADE,\n status text NOT NULL DEFAULT 'success' CHECK (status IN ('success', 'partial', 'error')),\n message text,\n fetched integer NOT NULL DEFAULT 0,\n written integer NOT NULL DEFAULT 0,\n created_at timestamptz NOT NULL DEFAULT now()\n);\nALTER TABLE public.plg_marketing_ranklayer_sync_log ENABLE ROW LEVEL SECURITY;\nCREATE INDEX IF NOT EXISTS idx_plg_marketing_ranklayer_sync_log_tenant\n ON public.plg_marketing_ranklayer_sync_log(tenant_id, created_at DESC);\n\n-- RLS: authenticated tenant CRUD\nDROP POLICY IF EXISTS plg_marketing_ranklayer_integrations_select ON public.plg_marketing_ranklayer_integrations;\nDROP POLICY IF EXISTS plg_marketing_ranklayer_integrations_insert ON public.plg_marketing_ranklayer_integrations;\nDROP POLICY IF EXISTS plg_marketing_ranklayer_integrations_update ON public.plg_marketing_ranklayer_integrations;\nDROP POLICY IF EXISTS plg_marketing_ranklayer_integrations_delete ON public.plg_marketing_ranklayer_integrations;\nCREATE POLICY plg_marketing_ranklayer_integrations_select ON public.plg_marketing_ranklayer_integrations FOR SELECT TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY plg_marketing_ranklayer_integrations_insert ON public.plg_marketing_ranklayer_integrations FOR INSERT TO authenticated WITH CHECK (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY plg_marketing_ranklayer_integrations_update ON public.plg_marketing_ranklayer_integrations FOR UPDATE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY plg_marketing_ranklayer_integrations_delete ON public.plg_marketing_ranklayer_integrations FOR DELETE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nGRANT SELECT, INSERT, UPDATE, DELETE ON public.plg_marketing_ranklayer_integrations TO authenticated;\n\nDROP POLICY IF EXISTS plg_marketing_ranklayer_sync_log_select ON public.plg_marketing_ranklayer_sync_log;\nDROP POLICY IF EXISTS plg_marketing_ranklayer_sync_log_insert ON public.plg_marketing_ranklayer_sync_log;\nCREATE POLICY plg_marketing_ranklayer_sync_log_select ON public.plg_marketing_ranklayer_sync_log FOR SELECT TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY plg_marketing_ranklayer_sync_log_insert ON public.plg_marketing_ranklayer_sync_log FOR INSERT TO authenticated WITH CHECK (tenant_id IN (SELECT public.user_tenant_ids()));\nGRANT SELECT, INSERT ON public.plg_marketing_ranklayer_sync_log TO authenticated;\n";
|
|
6
|
+
export declare const MIGRATIONS: Array<{
|
|
7
|
+
id: string;
|
|
8
|
+
sql: string;
|
|
9
|
+
}>;
|
|
4
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,wBAAwB,i6BAepC,CAAA;AAED,eAAO,MAAM,6BAA6B,ivNA8FzC,CAAA;AAED,eAAO,MAAM,4BAA4B,inCAyBxC,CAAA;AAED,eAAO,MAAM,2BAA2B,8/CAyBvC,CAAA;AAED,eAAO,MAAM,uBAAuB,6tHAkDnC,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAMzD,CAAA"}
|
package/dist/presets.d.ts
CHANGED
|
@@ -7,6 +7,8 @@ export interface MarketingDomainModules {
|
|
|
7
7
|
landingPages: boolean;
|
|
8
8
|
/** Social content planner — accounts, week board, markdown post pages. */
|
|
9
9
|
contentPlanner: boolean;
|
|
10
|
+
/** Blog backoffice — posts + categories CMS feeding @fayz-ai/plugin-blog. Off by default. */
|
|
11
|
+
blog: boolean;
|
|
10
12
|
/** Outbound — reserved, off by default, implemented in a later milestone. */
|
|
11
13
|
broadcasts: boolean;
|
|
12
14
|
journeys: boolean;
|
package/dist/presets.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AASlE,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAA;AAE3D,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,OAAO,CAAA;IACf,YAAY,EAAE,OAAO,CAAA;IACrB,0EAA0E;IAC1E,cAAc,EAAE,OAAO,CAAA;IACvB,6EAA6E;IAC7E,UAAU,EAAE,OAAO,CAAA;IACnB,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,eAAe,CAAA;IAC3B,QAAQ,EAAE,kBAAkB,EAAE,CAAA;IAC9B,OAAO,EAAE,sBAAsB,CAAA;CAChC;AA4DD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAI5E,CAAA;AAED,mEAAmE;AACnE,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,EAAE,CAsBjE,CAAA"}
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AASlE,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAA;AAE3D,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,OAAO,CAAA;IACf,YAAY,EAAE,OAAO,CAAA;IACrB,0EAA0E;IAC1E,cAAc,EAAE,OAAO,CAAA;IACvB,6FAA6F;IAC7F,IAAI,EAAE,OAAO,CAAA;IACb,6EAA6E;IAC7E,UAAU,EAAE,OAAO,CAAA;IACnB,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,eAAe,CAAA;IAC3B,QAAQ,EAAE,kBAAkB,EAAE,CAAA;IAC9B,OAAO,EAAE,sBAAsB,CAAA;CAChC;AA4DD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAI5E,CAAA;AAED,mEAAmE;AACnE,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,EAAE,CAsBjE,CAAA"}
|
package/dist/schema/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export declare const mktSocialAccounts: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
2
|
-
name: "
|
|
2
|
+
name: "plg_marketing_social_accounts";
|
|
3
3
|
schema: undefined;
|
|
4
4
|
columns: {
|
|
5
5
|
createdAt: import("drizzle-orm/pg-core").PgColumn<{
|
|
6
6
|
name: "created_at";
|
|
7
|
-
tableName: "
|
|
7
|
+
tableName: "plg_marketing_social_accounts";
|
|
8
8
|
dataType: "date";
|
|
9
9
|
columnType: "PgTimestamp";
|
|
10
10
|
data: Date;
|
|
@@ -21,7 +21,7 @@ export declare const mktSocialAccounts: import("drizzle-orm/pg-core").PgTableWit
|
|
|
21
21
|
}, {}, {}>;
|
|
22
22
|
id: import("drizzle-orm/pg-core").PgColumn<{
|
|
23
23
|
name: "id";
|
|
24
|
-
tableName: "
|
|
24
|
+
tableName: "plg_marketing_social_accounts";
|
|
25
25
|
dataType: "string";
|
|
26
26
|
columnType: "PgUUID";
|
|
27
27
|
data: string;
|
|
@@ -38,7 +38,7 @@ export declare const mktSocialAccounts: import("drizzle-orm/pg-core").PgTableWit
|
|
|
38
38
|
}, {}, {}>;
|
|
39
39
|
tenantId: import("drizzle-orm/pg-core").PgColumn<{
|
|
40
40
|
name: "tenant_id";
|
|
41
|
-
tableName: "
|
|
41
|
+
tableName: "plg_marketing_social_accounts";
|
|
42
42
|
dataType: "string";
|
|
43
43
|
columnType: "PgUUID";
|
|
44
44
|
data: string;
|
|
@@ -55,7 +55,7 @@ export declare const mktSocialAccounts: import("drizzle-orm/pg-core").PgTableWit
|
|
|
55
55
|
}, {}, {}>;
|
|
56
56
|
name: import("drizzle-orm/pg-core").PgColumn<{
|
|
57
57
|
name: "name";
|
|
58
|
-
tableName: "
|
|
58
|
+
tableName: "plg_marketing_social_accounts";
|
|
59
59
|
dataType: "string";
|
|
60
60
|
columnType: "PgText";
|
|
61
61
|
data: string;
|
|
@@ -72,7 +72,7 @@ export declare const mktSocialAccounts: import("drizzle-orm/pg-core").PgTableWit
|
|
|
72
72
|
}, {}, {}>;
|
|
73
73
|
handle: import("drizzle-orm/pg-core").PgColumn<{
|
|
74
74
|
name: "handle";
|
|
75
|
-
tableName: "
|
|
75
|
+
tableName: "plg_marketing_social_accounts";
|
|
76
76
|
dataType: "string";
|
|
77
77
|
columnType: "PgText";
|
|
78
78
|
data: string;
|
|
@@ -89,7 +89,7 @@ export declare const mktSocialAccounts: import("drizzle-orm/pg-core").PgTableWit
|
|
|
89
89
|
}, {}, {}>;
|
|
90
90
|
platforms: import("drizzle-orm/pg-core").PgColumn<{
|
|
91
91
|
name: "platforms";
|
|
92
|
-
tableName: "
|
|
92
|
+
tableName: "plg_marketing_social_accounts";
|
|
93
93
|
dataType: "array";
|
|
94
94
|
columnType: "PgArray";
|
|
95
95
|
data: string[];
|
|
@@ -102,7 +102,7 @@ export declare const mktSocialAccounts: import("drizzle-orm/pg-core").PgTableWit
|
|
|
102
102
|
enumValues: [string, ...string[]];
|
|
103
103
|
baseColumn: import("drizzle-orm").Column<{
|
|
104
104
|
name: "platforms";
|
|
105
|
-
tableName: "
|
|
105
|
+
tableName: "plg_marketing_social_accounts";
|
|
106
106
|
dataType: "string";
|
|
107
107
|
columnType: "PgText";
|
|
108
108
|
data: string;
|
|
@@ -122,7 +122,7 @@ export declare const mktSocialAccounts: import("drizzle-orm/pg-core").PgTableWit
|
|
|
122
122
|
}, {}, {}>;
|
|
123
123
|
isActive: import("drizzle-orm/pg-core").PgColumn<{
|
|
124
124
|
name: "is_active";
|
|
125
|
-
tableName: "
|
|
125
|
+
tableName: "plg_marketing_social_accounts";
|
|
126
126
|
dataType: "boolean";
|
|
127
127
|
columnType: "PgBoolean";
|
|
128
128
|
data: boolean;
|
|
@@ -141,12 +141,12 @@ export declare const mktSocialAccounts: import("drizzle-orm/pg-core").PgTableWit
|
|
|
141
141
|
dialect: "pg";
|
|
142
142
|
}>;
|
|
143
143
|
export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
144
|
-
name: "
|
|
144
|
+
name: "plg_marketing_content_plans";
|
|
145
145
|
schema: undefined;
|
|
146
146
|
columns: {
|
|
147
147
|
createdAt: import("drizzle-orm/pg-core").PgColumn<{
|
|
148
148
|
name: "created_at";
|
|
149
|
-
tableName: "
|
|
149
|
+
tableName: "plg_marketing_content_plans";
|
|
150
150
|
dataType: "date";
|
|
151
151
|
columnType: "PgTimestamp";
|
|
152
152
|
data: Date;
|
|
@@ -163,7 +163,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
163
163
|
}, {}, {}>;
|
|
164
164
|
updatedAt: import("drizzle-orm/pg-core").PgColumn<{
|
|
165
165
|
name: "updated_at";
|
|
166
|
-
tableName: "
|
|
166
|
+
tableName: "plg_marketing_content_plans";
|
|
167
167
|
dataType: "date";
|
|
168
168
|
columnType: "PgTimestamp";
|
|
169
169
|
data: Date;
|
|
@@ -180,7 +180,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
180
180
|
}, {}, {}>;
|
|
181
181
|
id: import("drizzle-orm/pg-core").PgColumn<{
|
|
182
182
|
name: "id";
|
|
183
|
-
tableName: "
|
|
183
|
+
tableName: "plg_marketing_content_plans";
|
|
184
184
|
dataType: "string";
|
|
185
185
|
columnType: "PgUUID";
|
|
186
186
|
data: string;
|
|
@@ -197,7 +197,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
197
197
|
}, {}, {}>;
|
|
198
198
|
tenantId: import("drizzle-orm/pg-core").PgColumn<{
|
|
199
199
|
name: "tenant_id";
|
|
200
|
-
tableName: "
|
|
200
|
+
tableName: "plg_marketing_content_plans";
|
|
201
201
|
dataType: "string";
|
|
202
202
|
columnType: "PgUUID";
|
|
203
203
|
data: string;
|
|
@@ -214,7 +214,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
214
214
|
}, {}, {}>;
|
|
215
215
|
accountId: import("drizzle-orm/pg-core").PgColumn<{
|
|
216
216
|
name: "account_id";
|
|
217
|
-
tableName: "
|
|
217
|
+
tableName: "plg_marketing_content_plans";
|
|
218
218
|
dataType: "string";
|
|
219
219
|
columnType: "PgUUID";
|
|
220
220
|
data: string;
|
|
@@ -231,7 +231,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
231
231
|
}, {}, {}>;
|
|
232
232
|
name: import("drizzle-orm/pg-core").PgColumn<{
|
|
233
233
|
name: "name";
|
|
234
|
-
tableName: "
|
|
234
|
+
tableName: "plg_marketing_content_plans";
|
|
235
235
|
dataType: "string";
|
|
236
236
|
columnType: "PgText";
|
|
237
237
|
data: string;
|
|
@@ -248,7 +248,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
248
248
|
}, {}, {}>;
|
|
249
249
|
status: import("drizzle-orm/pg-core").PgColumn<{
|
|
250
250
|
name: "status";
|
|
251
|
-
tableName: "
|
|
251
|
+
tableName: "plg_marketing_content_plans";
|
|
252
252
|
dataType: "string";
|
|
253
253
|
columnType: "PgText";
|
|
254
254
|
data: string;
|
|
@@ -265,7 +265,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
265
265
|
}, {}, {}>;
|
|
266
266
|
weeksCount: import("drizzle-orm/pg-core").PgColumn<{
|
|
267
267
|
name: "weeks_count";
|
|
268
|
-
tableName: "
|
|
268
|
+
tableName: "plg_marketing_content_plans";
|
|
269
269
|
dataType: "number";
|
|
270
270
|
columnType: "PgInteger";
|
|
271
271
|
data: number;
|
|
@@ -282,7 +282,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
282
282
|
}, {}, {}>;
|
|
283
283
|
startDate: import("drizzle-orm/pg-core").PgColumn<{
|
|
284
284
|
name: "start_date";
|
|
285
|
-
tableName: "
|
|
285
|
+
tableName: "plg_marketing_content_plans";
|
|
286
286
|
dataType: "string";
|
|
287
287
|
columnType: "PgDateString";
|
|
288
288
|
data: string;
|
|
@@ -299,7 +299,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
299
299
|
}, {}, {}>;
|
|
300
300
|
objective: import("drizzle-orm/pg-core").PgColumn<{
|
|
301
301
|
name: "objective";
|
|
302
|
-
tableName: "
|
|
302
|
+
tableName: "plg_marketing_content_plans";
|
|
303
303
|
dataType: "string";
|
|
304
304
|
columnType: "PgText";
|
|
305
305
|
data: string;
|
|
@@ -316,7 +316,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
316
316
|
}, {}, {}>;
|
|
317
317
|
tone: import("drizzle-orm/pg-core").PgColumn<{
|
|
318
318
|
name: "tone";
|
|
319
|
-
tableName: "
|
|
319
|
+
tableName: "plg_marketing_content_plans";
|
|
320
320
|
dataType: "string";
|
|
321
321
|
columnType: "PgText";
|
|
322
322
|
data: string;
|
|
@@ -333,7 +333,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
333
333
|
}, {}, {}>;
|
|
334
334
|
pillars: import("drizzle-orm/pg-core").PgColumn<{
|
|
335
335
|
name: "pillars";
|
|
336
|
-
tableName: "
|
|
336
|
+
tableName: "plg_marketing_content_plans";
|
|
337
337
|
dataType: "json";
|
|
338
338
|
columnType: "PgJsonb";
|
|
339
339
|
data: unknown;
|
|
@@ -350,7 +350,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
350
350
|
}, {}, {}>;
|
|
351
351
|
formats: import("drizzle-orm/pg-core").PgColumn<{
|
|
352
352
|
name: "formats";
|
|
353
|
-
tableName: "
|
|
353
|
+
tableName: "plg_marketing_content_plans";
|
|
354
354
|
dataType: "json";
|
|
355
355
|
columnType: "PgJsonb";
|
|
356
356
|
data: unknown;
|
|
@@ -367,7 +367,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
367
367
|
}, {}, {}>;
|
|
368
368
|
weeklyFrequency: import("drizzle-orm/pg-core").PgColumn<{
|
|
369
369
|
name: "weekly_frequency";
|
|
370
|
-
tableName: "
|
|
370
|
+
tableName: "plg_marketing_content_plans";
|
|
371
371
|
dataType: "number";
|
|
372
372
|
columnType: "PgInteger";
|
|
373
373
|
data: number;
|
|
@@ -384,7 +384,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
384
384
|
}, {}, {}>;
|
|
385
385
|
briefMd: import("drizzle-orm/pg-core").PgColumn<{
|
|
386
386
|
name: "brief_md";
|
|
387
|
-
tableName: "
|
|
387
|
+
tableName: "plg_marketing_content_plans";
|
|
388
388
|
dataType: "string";
|
|
389
389
|
columnType: "PgText";
|
|
390
390
|
data: string;
|
|
@@ -403,12 +403,12 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
403
403
|
dialect: "pg";
|
|
404
404
|
}>;
|
|
405
405
|
export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
406
|
-
name: "
|
|
406
|
+
name: "plg_marketing_content_posts";
|
|
407
407
|
schema: undefined;
|
|
408
408
|
columns: {
|
|
409
409
|
createdAt: import("drizzle-orm/pg-core").PgColumn<{
|
|
410
410
|
name: "created_at";
|
|
411
|
-
tableName: "
|
|
411
|
+
tableName: "plg_marketing_content_posts";
|
|
412
412
|
dataType: "date";
|
|
413
413
|
columnType: "PgTimestamp";
|
|
414
414
|
data: Date;
|
|
@@ -425,7 +425,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
425
425
|
}, {}, {}>;
|
|
426
426
|
updatedAt: import("drizzle-orm/pg-core").PgColumn<{
|
|
427
427
|
name: "updated_at";
|
|
428
|
-
tableName: "
|
|
428
|
+
tableName: "plg_marketing_content_posts";
|
|
429
429
|
dataType: "date";
|
|
430
430
|
columnType: "PgTimestamp";
|
|
431
431
|
data: Date;
|
|
@@ -442,7 +442,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
442
442
|
}, {}, {}>;
|
|
443
443
|
id: import("drizzle-orm/pg-core").PgColumn<{
|
|
444
444
|
name: "id";
|
|
445
|
-
tableName: "
|
|
445
|
+
tableName: "plg_marketing_content_posts";
|
|
446
446
|
dataType: "string";
|
|
447
447
|
columnType: "PgUUID";
|
|
448
448
|
data: string;
|
|
@@ -459,7 +459,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
459
459
|
}, {}, {}>;
|
|
460
460
|
tenantId: import("drizzle-orm/pg-core").PgColumn<{
|
|
461
461
|
name: "tenant_id";
|
|
462
|
-
tableName: "
|
|
462
|
+
tableName: "plg_marketing_content_posts";
|
|
463
463
|
dataType: "string";
|
|
464
464
|
columnType: "PgUUID";
|
|
465
465
|
data: string;
|
|
@@ -476,7 +476,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
476
476
|
}, {}, {}>;
|
|
477
477
|
planId: import("drizzle-orm/pg-core").PgColumn<{
|
|
478
478
|
name: "plan_id";
|
|
479
|
-
tableName: "
|
|
479
|
+
tableName: "plg_marketing_content_posts";
|
|
480
480
|
dataType: "string";
|
|
481
481
|
columnType: "PgUUID";
|
|
482
482
|
data: string;
|
|
@@ -493,7 +493,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
493
493
|
}, {}, {}>;
|
|
494
494
|
weekNumber: import("drizzle-orm/pg-core").PgColumn<{
|
|
495
495
|
name: "week_number";
|
|
496
|
-
tableName: "
|
|
496
|
+
tableName: "plg_marketing_content_posts";
|
|
497
497
|
dataType: "number";
|
|
498
498
|
columnType: "PgInteger";
|
|
499
499
|
data: number;
|
|
@@ -510,7 +510,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
510
510
|
}, {}, {}>;
|
|
511
511
|
position: import("drizzle-orm/pg-core").PgColumn<{
|
|
512
512
|
name: "position";
|
|
513
|
-
tableName: "
|
|
513
|
+
tableName: "plg_marketing_content_posts";
|
|
514
514
|
dataType: "number";
|
|
515
515
|
columnType: "PgInteger";
|
|
516
516
|
data: number;
|
|
@@ -527,7 +527,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
527
527
|
}, {}, {}>;
|
|
528
528
|
title: import("drizzle-orm/pg-core").PgColumn<{
|
|
529
529
|
name: "title";
|
|
530
|
-
tableName: "
|
|
530
|
+
tableName: "plg_marketing_content_posts";
|
|
531
531
|
dataType: "string";
|
|
532
532
|
columnType: "PgText";
|
|
533
533
|
data: string;
|
|
@@ -544,7 +544,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
544
544
|
}, {}, {}>;
|
|
545
545
|
format: import("drizzle-orm/pg-core").PgColumn<{
|
|
546
546
|
name: "format";
|
|
547
|
-
tableName: "
|
|
547
|
+
tableName: "plg_marketing_content_posts";
|
|
548
548
|
dataType: "string";
|
|
549
549
|
columnType: "PgText";
|
|
550
550
|
data: string;
|
|
@@ -561,7 +561,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
561
561
|
}, {}, {}>;
|
|
562
562
|
status: import("drizzle-orm/pg-core").PgColumn<{
|
|
563
563
|
name: "status";
|
|
564
|
-
tableName: "
|
|
564
|
+
tableName: "plg_marketing_content_posts";
|
|
565
565
|
dataType: "string";
|
|
566
566
|
columnType: "PgText";
|
|
567
567
|
data: string;
|
|
@@ -578,7 +578,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
578
578
|
}, {}, {}>;
|
|
579
579
|
scheduledDate: import("drizzle-orm/pg-core").PgColumn<{
|
|
580
580
|
name: "scheduled_date";
|
|
581
|
-
tableName: "
|
|
581
|
+
tableName: "plg_marketing_content_posts";
|
|
582
582
|
dataType: "string";
|
|
583
583
|
columnType: "PgDateString";
|
|
584
584
|
data: string;
|
|
@@ -595,7 +595,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
595
595
|
}, {}, {}>;
|
|
596
596
|
platforms: import("drizzle-orm/pg-core").PgColumn<{
|
|
597
597
|
name: "platforms";
|
|
598
|
-
tableName: "
|
|
598
|
+
tableName: "plg_marketing_content_posts";
|
|
599
599
|
dataType: "array";
|
|
600
600
|
columnType: "PgArray";
|
|
601
601
|
data: string[];
|
|
@@ -608,7 +608,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
608
608
|
enumValues: [string, ...string[]];
|
|
609
609
|
baseColumn: import("drizzle-orm").Column<{
|
|
610
610
|
name: "platforms";
|
|
611
|
-
tableName: "
|
|
611
|
+
tableName: "plg_marketing_content_posts";
|
|
612
612
|
dataType: "string";
|
|
613
613
|
columnType: "PgText";
|
|
614
614
|
data: string;
|
|
@@ -628,7 +628,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
628
628
|
}, {}, {}>;
|
|
629
629
|
checklist: import("drizzle-orm/pg-core").PgColumn<{
|
|
630
630
|
name: "checklist";
|
|
631
|
-
tableName: "
|
|
631
|
+
tableName: "plg_marketing_content_posts";
|
|
632
632
|
dataType: "json";
|
|
633
633
|
columnType: "PgJsonb";
|
|
634
634
|
data: unknown;
|
|
@@ -645,7 +645,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
645
645
|
}, {}, {}>;
|
|
646
646
|
mediaUrl: import("drizzle-orm/pg-core").PgColumn<{
|
|
647
647
|
name: "media_url";
|
|
648
|
-
tableName: "
|
|
648
|
+
tableName: "plg_marketing_content_posts";
|
|
649
649
|
dataType: "string";
|
|
650
650
|
columnType: "PgText";
|
|
651
651
|
data: string;
|
|
@@ -662,7 +662,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
662
662
|
}, {}, {}>;
|
|
663
663
|
hook: import("drizzle-orm/pg-core").PgColumn<{
|
|
664
664
|
name: "hook";
|
|
665
|
-
tableName: "
|
|
665
|
+
tableName: "plg_marketing_content_posts";
|
|
666
666
|
dataType: "string";
|
|
667
667
|
columnType: "PgText";
|
|
668
668
|
data: string;
|
|
@@ -679,7 +679,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
679
679
|
}, {}, {}>;
|
|
680
680
|
cta: import("drizzle-orm/pg-core").PgColumn<{
|
|
681
681
|
name: "cta";
|
|
682
|
-
tableName: "
|
|
682
|
+
tableName: "plg_marketing_content_posts";
|
|
683
683
|
dataType: "string";
|
|
684
684
|
columnType: "PgText";
|
|
685
685
|
data: string;
|
|
@@ -696,7 +696,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
|
|
|
696
696
|
}, {}, {}>;
|
|
697
697
|
contentMd: import("drizzle-orm/pg-core").PgColumn<{
|
|
698
698
|
name: "content_md";
|
|
699
|
-
tableName: "
|
|
699
|
+
tableName: "plg_marketing_content_posts";
|
|
700
700
|
dataType: "string";
|
|
701
701
|
columnType: "PgText";
|
|
702
702
|
data: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS+C,CAAA;AAE7E,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkB1B,CAAA;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwB1B,CAAA"}
|
package/dist/schema.cjs
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var db = require('@fayz-ai/db');
|
|
4
4
|
|
|
5
5
|
// src/schema/index.ts
|
|
6
|
-
var mktSocialAccounts = db.pgTable("
|
|
6
|
+
var mktSocialAccounts = db.pgTable("plg_marketing_social_accounts", {
|
|
7
7
|
id: db.uuid("id").primaryKey().defaultRandom(),
|
|
8
8
|
tenantId: db.tenantId(),
|
|
9
9
|
name: db.text("name").notNull(),
|
|
@@ -12,8 +12,8 @@ var mktSocialAccounts = db.pgTable("mkt_social_accounts", {
|
|
|
12
12
|
platforms: db.text("platforms").array().notNull().default(["instagram"]),
|
|
13
13
|
isActive: db.boolean("is_active").notNull().default(true),
|
|
14
14
|
...db.createdAt
|
|
15
|
-
}, (t) => [db.index("
|
|
16
|
-
var mktContentPlans = db.pgTable("
|
|
15
|
+
}, (t) => [db.index("idx_plg_marketing_social_accounts_tenant").on(t.tenantId)]);
|
|
16
|
+
var mktContentPlans = db.pgTable("plg_marketing_content_plans", {
|
|
17
17
|
id: db.uuid("id").primaryKey().defaultRandom(),
|
|
18
18
|
tenantId: db.tenantId(),
|
|
19
19
|
accountId: db.uuid("account_id").notNull().references(() => mktSocialAccounts.id, { onDelete: "cascade" }),
|
|
@@ -29,10 +29,10 @@ var mktContentPlans = db.pgTable("mkt_content_plans", {
|
|
|
29
29
|
briefMd: db.text("brief_md").notNull().default(""),
|
|
30
30
|
...db.timestamps
|
|
31
31
|
}, (t) => [
|
|
32
|
-
db.index("
|
|
33
|
-
db.index("
|
|
32
|
+
db.index("idx_plg_marketing_content_plans_tenant").on(t.tenantId),
|
|
33
|
+
db.index("idx_plg_marketing_content_plans_account").on(t.accountId)
|
|
34
34
|
]);
|
|
35
|
-
var mktContentPosts = db.pgTable("
|
|
35
|
+
var mktContentPosts = db.pgTable("plg_marketing_content_posts", {
|
|
36
36
|
id: db.uuid("id").primaryKey().defaultRandom(),
|
|
37
37
|
tenantId: db.tenantId(),
|
|
38
38
|
planId: db.uuid("plan_id").notNull().references(() => mktContentPlans.id, { onDelete: "cascade" }),
|
|
@@ -53,9 +53,9 @@ var mktContentPosts = db.pgTable("mkt_content_posts", {
|
|
|
53
53
|
contentMd: db.text("content_md").notNull().default(""),
|
|
54
54
|
...db.timestamps
|
|
55
55
|
}, (t) => [
|
|
56
|
-
db.index("
|
|
57
|
-
db.index("
|
|
58
|
-
db.index("
|
|
56
|
+
db.index("idx_plg_marketing_content_posts_tenant").on(t.tenantId),
|
|
57
|
+
db.index("idx_plg_marketing_content_posts_plan").on(t.planId, t.weekNumber, t.position),
|
|
58
|
+
db.index("idx_plg_marketing_content_posts_status").on(t.tenantId, t.status)
|
|
59
59
|
]);
|
|
60
60
|
|
|
61
61
|
exports.mktContentPlans = mktContentPlans;
|
package/dist/schema.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/schema/index.ts"],"names":["pgTable","uuid","tenantId","text","boolean","createdAt","index","integer","date","jsonb","timestamps"],"mappings":";;;;;AAaO,IAAM,iBAAA,GAAoBA,WAAQ,
|
|
1
|
+
{"version":3,"sources":["../src/schema/index.ts"],"names":["pgTable","uuid","tenantId","text","boolean","createdAt","index","integer","date","jsonb","timestamps"],"mappings":"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","file":"schema.cjs","sourcesContent":["// Builders come from @fayz-ai/db (single drizzle-orm instance) — never import\n// pgTable/uuid directly from drizzle-orm/pg-core. See MIGRATION-ARCHITECTURE §6.\nimport {\n pgTable, uuid, text, boolean, integer, date, jsonb, index,\n tenantId, timestamps, createdAt,\n} from '@fayz-ai/db'\n\n// ---------------------------------------------------------------------------\n// Marketing plugin — Ring-1 schema (schema-as-code), content planner tables.\n// RLS policies + grants are companion SQL (Drizzle doesn't diff those) —\n// see src/migrations/001_content_planner.sql.\n// ---------------------------------------------------------------------------\n\nexport const mktSocialAccounts = pgTable('plg_marketing_social_accounts', {\n id: uuid('id').primaryKey().defaultRandom(),\n tenantId: tenantId(),\n name: text('name').notNull(),\n handle: text('handle'),\n // One account, many platform connections (Instagram, YouTube, TikTok, ...)\n platforms: text('platforms').array().notNull().default(['instagram']),\n isActive: boolean('is_active').notNull().default(true),\n ...createdAt,\n}, (t) => [index('idx_plg_marketing_social_accounts_tenant').on(t.tenantId)])\n\nexport const mktContentPlans = pgTable('plg_marketing_content_plans', {\n id: uuid('id').primaryKey().defaultRandom(),\n tenantId: tenantId(),\n accountId: uuid('account_id').notNull().references(() => mktSocialAccounts.id, { onDelete: 'cascade' }),\n name: text('name').notNull(),\n status: text('status').notNull().default('active'),\n weeksCount: integer('weeks_count').notNull().default(8),\n startDate: date('start_date'),\n objective: text('objective'),\n tone: text('tone'),\n pillars: jsonb('pillars').notNull().default([]),\n formats: jsonb('formats').notNull().default([]),\n weeklyFrequency: integer('weekly_frequency').notNull().default(3),\n briefMd: text('brief_md').notNull().default(''),\n ...timestamps,\n}, (t) => [\n index('idx_plg_marketing_content_plans_tenant').on(t.tenantId),\n index('idx_plg_marketing_content_plans_account').on(t.accountId),\n])\n\nexport const mktContentPosts = pgTable('plg_marketing_content_posts', {\n id: uuid('id').primaryKey().defaultRandom(),\n tenantId: tenantId(),\n planId: uuid('plan_id').notNull().references(() => mktContentPlans.id, { onDelete: 'cascade' }),\n weekNumber: integer('week_number').notNull().default(1),\n position: integer('position').notNull().default(0),\n title: text('title').notNull(),\n format: text('format').notNull().default('reel'),\n status: text('status').notNull().default('idea'),\n scheduledDate: date('scheduled_date'),\n // Target platforms for this post; empty = inherit the account's platforms\n platforms: text('platforms').array().notNull().default([]),\n // Recording-day checklist [{ id, text, done }]\n checklist: jsonb('checklist').notNull().default([]),\n // Uploaded asset (static posts: caption + final art instead of a script)\n mediaUrl: text('media_url'),\n hook: text('hook'),\n cta: text('cta'),\n contentMd: text('content_md').notNull().default(''),\n ...timestamps,\n}, (t) => [\n index('idx_plg_marketing_content_posts_tenant').on(t.tenantId),\n index('idx_plg_marketing_content_posts_plan').on(t.planId, t.weekNumber, t.position),\n index('idx_plg_marketing_content_posts_status').on(t.tenantId, t.status),\n])\n"]}
|