spine-framework 0.1.59 → 0.1.61

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.
@@ -490,7 +490,12 @@ async function installApp(slug: string, options: InstallOptions): Promise<void>
490
490
  console.log(` ⏭️ No seed/ directory — skipping data seeding`)
491
491
  } else {
492
492
  console.log(`\n🌱 Applying seed data...`)
493
- const seedFiles = readdirSync(seedDir).filter(f => f.endsWith('.json'))
493
+ const SEED_ORDER = ['accounts.json', 'types.json', 'link-types.json', 'roles.json', 'pipelines.json', 'triggers.json']
494
+ const allFiles = readdirSync(seedDir).filter(f => f.endsWith('.json'))
495
+ const seedFiles = [
496
+ ...SEED_ORDER.filter(f => allFiles.includes(f)),
497
+ ...allFiles.filter(f => !SEED_ORDER.includes(f)),
498
+ ]
494
499
 
495
500
  let totalInserted = 0
496
501
  let totalErrors = 0
@@ -139,7 +139,8 @@ CREATE TABLE IF NOT EXISTS public.roles (
139
139
  app_id uuid,
140
140
  account_id uuid,
141
141
  created_at timestamptz DEFAULT now(),
142
- updated_at timestamptz DEFAULT now()
142
+ updated_at timestamptz DEFAULT now(),
143
+ UNIQUE (app_id, slug)
143
144
  );
144
145
 
145
146
  -- apps (no dependencies on other custom tables)
@@ -941,103 +942,103 @@ ALTER TABLE public.webhook_handlers ENABLE ROW LEVEL SECURITY;
941
942
  -- account_paths is managed exclusively by trigger (update_account_paths).
942
943
  -- test_runs/test_results are written by service_role from the test harness.
943
944
 
944
- -- RLS Policies
945
+ -- RLS Policies (idempotent - uses DO blocks to handle existing policies)
945
946
 
946
- CREATE POLICY accounts_access ON public.accounts FOR ALL TO public
947
- USING ((id IN (SELECT get_accessible_accounts(current_actor_id()))) OR current_actor_id() IS NULL);
947
+ DO $$ BEGIN CREATE POLICY accounts_access ON public.accounts FOR ALL TO public
948
+ USING ((id IN (SELECT get_accessible_accounts(current_actor_id()))) OR current_actor_id() IS NULL); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
948
949
 
949
- CREATE POLICY actions_access ON public.actions FOR ALL TO public
950
- USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL);
950
+ DO $$ BEGIN CREATE POLICY actions_access ON public.actions FOR ALL TO public
951
+ USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
951
952
 
952
- CREATE POLICY ai_agents_access ON public.ai_agents FOR ALL TO public
953
- USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL);
953
+ DO $$ BEGIN CREATE POLICY ai_agents_access ON public.ai_agents FOR ALL TO public
954
+ USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
954
955
 
955
- CREATE POLICY akul_access ON public.api_key_usage_logs FOR ALL TO public
956
- USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL);
956
+ DO $$ BEGIN CREATE POLICY akul_access ON public.api_key_usage_logs FOR ALL TO public
957
+ USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
957
958
 
958
- CREATE POLICY api_keys_access ON public.api_keys FOR ALL TO public
959
- USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR (id = auth.uid()) OR auth.uid() IS NULL);
959
+ DO $$ BEGIN CREATE POLICY api_keys_access ON public.api_keys FOR ALL TO public
960
+ USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR (id = auth.uid()) OR auth.uid() IS NULL); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
960
961
 
961
- CREATE POLICY app_installations_select ON public.app_installations FOR SELECT TO authenticated USING (true);
962
- CREATE POLICY app_installations_admin ON public.app_installations FOR ALL TO authenticated
962
+ DO $$ BEGIN CREATE POLICY app_installations_select ON public.app_installations FOR SELECT TO authenticated USING (true); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
963
+ DO $$ BEGIN CREATE POLICY app_installations_admin ON public.app_installations FOR ALL TO authenticated
963
964
  USING ((SELECT raw_user_meta_data->>'role' FROM auth.users WHERE id = auth.uid()) = 'system_admin')
964
- WITH CHECK ((SELECT raw_user_meta_data->>'role' FROM auth.users WHERE id = auth.uid()) = 'system_admin');
965
- CREATE POLICY app_installations_service ON public.app_installations FOR ALL TO service_role USING (true) WITH CHECK (true);
965
+ WITH CHECK ((SELECT raw_user_meta_data->>'role' FROM auth.users WHERE id = auth.uid()) = 'system_admin'); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
966
+ DO $$ BEGIN CREATE POLICY app_installations_service ON public.app_installations FOR ALL TO service_role USING (true) WITH CHECK (true); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
966
967
 
967
- CREATE POLICY apps_access ON public.apps FOR ALL TO public
968
- USING ((is_system = true) OR (owner_account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL);
968
+ DO $$ BEGIN CREATE POLICY apps_access ON public.apps FOR ALL TO public
969
+ USING ((is_system = true) OR (owner_account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
969
970
 
970
- CREATE POLICY attachments_access ON public.attachments FOR ALL TO public
971
- USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR ((design_schema->>'scope' = 'platform') AND auth.uid() IS NOT NULL) OR auth.uid() IS NULL);
971
+ DO $$ BEGIN CREATE POLICY attachments_access ON public.attachments FOR ALL TO public
972
+ USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR ((design_schema->>'scope' = 'platform') AND auth.uid() IS NOT NULL) OR auth.uid() IS NULL); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
972
973
 
973
- CREATE POLICY embeddings_access ON public.embeddings FOR ALL TO public
974
- USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL);
974
+ DO $$ BEGIN CREATE POLICY embeddings_access ON public.embeddings FOR ALL TO public
975
+ USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
975
976
 
976
- CREATE POLICY integrations_access ON public.integrations FOR ALL TO public
977
- USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL);
977
+ DO $$ BEGIN CREATE POLICY integrations_access ON public.integrations FOR ALL TO public
978
+ USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
978
979
 
979
- CREATE POLICY item_progress_access ON public.item_progress FOR ALL TO public
980
- USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL);
980
+ DO $$ BEGIN CREATE POLICY item_progress_access ON public.item_progress FOR ALL TO public
981
+ USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
981
982
 
982
- CREATE POLICY items_access ON public.items FOR ALL TO public
983
- USING ((account_id IN (SELECT get_accessible_accounts(current_actor_id()))) OR ((design_schema->>'scope' = 'platform') AND current_actor_id() IS NOT NULL) OR current_actor_id() IS NULL);
983
+ DO $$ BEGIN CREATE POLICY items_access ON public.items FOR ALL TO public
984
+ USING ((account_id IN (SELECT get_accessible_accounts(current_actor_id()))) OR ((design_schema->>'scope' = 'platform') AND current_actor_id() IS NOT NULL) OR current_actor_id() IS NULL); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
984
985
 
985
- CREATE POLICY link_types_access ON public.link_types FOR ALL TO public
986
- USING ((app_id IS NULL) OR (EXISTS (SELECT 1 FROM apps a WHERE a.id = link_types.app_id AND a.owner_account_id IN (SELECT get_accessible_accounts(auth.uid())))) OR auth.uid() IS NULL);
986
+ DO $$ BEGIN CREATE POLICY link_types_access ON public.link_types FOR ALL TO public
987
+ USING ((app_id IS NULL) OR (EXISTS (SELECT 1 FROM apps a WHERE a.id = link_types.app_id AND a.owner_account_id IN (SELECT get_accessible_accounts(auth.uid())))) OR auth.uid() IS NULL); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
987
988
 
988
- CREATE POLICY links_access ON public.links FOR ALL TO public
989
- USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR ((design_schema->>'scope' = 'platform') AND auth.uid() IS NOT NULL) OR auth.uid() IS NULL);
989
+ DO $$ BEGIN CREATE POLICY links_access ON public.links FOR ALL TO public
990
+ USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR ((design_schema->>'scope' = 'platform') AND auth.uid() IS NOT NULL) OR auth.uid() IS NULL); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
990
991
 
991
- CREATE POLICY logs_access ON public.logs FOR ALL TO public
992
- USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL);
992
+ DO $$ BEGIN CREATE POLICY logs_access ON public.logs FOR ALL TO public
993
+ USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
993
994
 
994
- CREATE POLICY messages_access ON public.messages FOR ALL TO public
995
- USING ((EXISTS (SELECT 1 FROM threads t WHERE t.id = messages.thread_id AND (t.account_id IN (SELECT get_accessible_accounts(current_actor_id())) OR (t.design_schema->>'scope' = 'platform' AND current_actor_id() IS NOT NULL)))) OR (design_schema->>'scope' = 'platform' AND current_actor_id() IS NOT NULL) OR current_actor_id() IS NULL);
995
+ DO $$ BEGIN CREATE POLICY messages_access ON public.messages FOR ALL TO public
996
+ USING ((EXISTS (SELECT 1 FROM threads t WHERE t.id = messages.thread_id AND (t.account_id IN (SELECT get_accessible_accounts(current_actor_id())) OR (t.design_schema->>'scope' = 'platform' AND current_actor_id() IS NOT NULL)))) OR (design_schema->>'scope' = 'platform' AND current_actor_id() IS NOT NULL) OR current_actor_id() IS NULL); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
996
997
 
997
- CREATE POLICY people_access ON public.people FOR ALL TO public
998
- USING ((id = current_actor_id()) OR (account_id IN (SELECT get_accessible_accounts(current_actor_id()))) OR current_actor_id() IS NULL);
998
+ DO $$ BEGIN CREATE POLICY people_access ON public.people FOR ALL TO public
999
+ USING ((id = current_actor_id()) OR (account_id IN (SELECT get_accessible_accounts(current_actor_id()))) OR current_actor_id() IS NULL); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
999
1000
 
1000
- CREATE POLICY pe_access ON public.pipeline_executions FOR ALL TO public
1001
- USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL);
1001
+ DO $$ BEGIN CREATE POLICY pe_access ON public.pipeline_executions FOR ALL TO public
1002
+ USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
1002
1003
 
1003
- CREATE POLICY pipelines_access ON public.pipelines FOR ALL TO public
1004
- USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL);
1004
+ DO $$ BEGIN CREATE POLICY pipelines_access ON public.pipelines FOR ALL TO public
1005
+ USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
1005
1006
 
1006
- CREATE POLICY prompt_configs_access ON public.prompt_configs FOR ALL TO public
1007
- USING ((app_id IS NULL) OR (EXISTS (SELECT 1 FROM apps a WHERE a.id = prompt_configs.app_id AND a.owner_account_id IN (SELECT get_accessible_accounts(auth.uid())))) OR auth.uid() IS NULL);
1007
+ DO $$ BEGIN CREATE POLICY prompt_configs_access ON public.prompt_configs FOR ALL TO public
1008
+ USING ((app_id IS NULL) OR (EXISTS (SELECT 1 FROM apps a WHERE a.id = prompt_configs.app_id AND a.owner_account_id IN (SELECT get_accessible_accounts(auth.uid())))) OR auth.uid() IS NULL); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
1008
1009
 
1009
- CREATE POLICY roles_read ON public.roles FOR SELECT TO public USING (true);
1010
- CREATE POLICY roles_modify ON public.roles FOR ALL TO public
1011
- USING (((is_system = true) AND person_is_system_admin(current_actor_id())) OR (is_system = false) OR current_actor_id() IS NULL);
1010
+ DO $$ BEGIN CREATE POLICY roles_read ON public.roles FOR SELECT TO public USING (true); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
1011
+ DO $$ BEGIN CREATE POLICY roles_modify ON public.roles FOR ALL TO public
1012
+ USING (((is_system = true) AND person_is_system_admin(current_actor_id())) OR (is_system = false) OR current_actor_id() IS NULL); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
1012
1013
 
1013
- CREATE POLICY se_access ON public.schedule_executions FOR ALL TO public
1014
- USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL);
1014
+ DO $$ BEGIN CREATE POLICY se_access ON public.schedule_executions FOR ALL TO public
1015
+ USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
1015
1016
 
1016
- CREATE POLICY schedules_access ON public.schedules FOR ALL TO public
1017
- USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL);
1017
+ DO $$ BEGIN CREATE POLICY schedules_access ON public.schedules FOR ALL TO public
1018
+ USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
1018
1019
 
1019
- CREATE POLICY threads_access ON public.threads FOR ALL TO public
1020
- USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR (design_schema->>'scope' = 'platform' AND auth.uid() IS NOT NULL) OR auth.uid() IS NULL);
1020
+ DO $$ BEGIN CREATE POLICY threads_access ON public.threads FOR ALL TO public
1021
+ USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR (design_schema->>'scope' = 'platform' AND auth.uid() IS NOT NULL) OR auth.uid() IS NULL); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
1021
1022
 
1022
- CREATE POLICY timers_access ON public.timers FOR ALL TO public
1023
- USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL);
1023
+ DO $$ BEGIN CREATE POLICY timers_access ON public.timers FOR ALL TO public
1024
+ USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
1024
1025
 
1025
- CREATE POLICY te_access ON public.trigger_executions FOR ALL TO public
1026
- USING ((EXISTS (SELECT 1 FROM triggers t WHERE t.id = trigger_executions.trigger_id AND t.account_id IN (SELECT get_accessible_accounts(auth.uid())))) OR auth.uid() IS NULL);
1026
+ DO $$ BEGIN CREATE POLICY te_access ON public.trigger_executions FOR ALL TO public
1027
+ USING ((EXISTS (SELECT 1 FROM triggers t WHERE t.id = trigger_executions.trigger_id AND t.account_id IN (SELECT get_accessible_accounts(auth.uid())))) OR auth.uid() IS NULL); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
1027
1028
 
1028
- CREATE POLICY triggers_access ON public.triggers FOR ALL TO public
1029
- USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL);
1029
+ DO $$ BEGIN CREATE POLICY triggers_access ON public.triggers FOR ALL TO public
1030
+ USING ((account_id IN (SELECT get_accessible_accounts(auth.uid()))) OR auth.uid() IS NULL); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
1030
1031
 
1031
- CREATE POLICY types_access ON public.types FOR ALL TO public
1032
- USING (current_actor_id() IS NOT NULL OR true);
1032
+ DO $$ BEGIN CREATE POLICY types_access ON public.types FOR ALL TO public
1033
+ USING (current_actor_id() IS NOT NULL OR true); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
1033
1034
 
1034
- CREATE POLICY watchers_access ON public.watchers FOR ALL TO public
1035
- USING (auth.uid() IS NOT NULL OR true);
1035
+ DO $$ BEGIN CREATE POLICY watchers_access ON public.watchers FOR ALL TO public
1036
+ USING (auth.uid() IS NOT NULL OR true); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
1036
1037
 
1037
- CREATE POLICY webhook_handlers_service_role ON public.webhook_handlers FOR ALL TO service_role USING (true) WITH CHECK (true);
1038
- CREATE POLICY webhook_handlers_system_admin ON public.webhook_handlers FOR ALL TO authenticated
1038
+ DO $$ BEGIN CREATE POLICY webhook_handlers_service_role ON public.webhook_handlers FOR ALL TO service_role USING (true) WITH CHECK (true); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
1039
+ DO $$ BEGIN CREATE POLICY webhook_handlers_system_admin ON public.webhook_handlers FOR ALL TO authenticated
1039
1040
  USING ((SELECT raw_user_meta_data->>'role' FROM auth.users WHERE id = auth.uid()) = 'system_admin')
1040
- WITH CHECK ((SELECT raw_user_meta_data->>'role' FROM auth.users WHERE id = auth.uid()) = 'system_admin');
1041
+ WITH CHECK ((SELECT raw_user_meta_data->>'role' FROM auth.users WHERE id = auth.uid()) = 'system_admin'); EXCEPTION WHEN duplicate_object THEN NULL; END $$;
1041
1042
 
1042
1043
  -- ---------------------------------------------------------------------------
1043
1044
  -- Additional Functions (depend on tables existing)
@@ -1 +1 @@
1
- {"version":3,"file":"install-app.d.ts","sourceRoot":"","sources":["../../../.framework/cli/commands/install-app.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAkgBxC,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,QAgB1D"}
1
+ {"version":3,"file":"install-app.d.ts","sourceRoot":"","sources":["../../../.framework/cli/commands/install-app.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAugBxC,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,QAgB1D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spine-framework",
3
- "version": "0.1.59",
3
+ "version": "0.1.61",
4
4
  "private": false,
5
5
  "description": "Spine — enterprise application framework built on Supabase + Netlify + React",
6
6
  "type": "module",