3
CREATE EXTENSION IF NOT EXISTS pg_net SCHEMA extensions;
5
CREATE SCHEMA supabase_functions AUTHORIZATION supabase_admin;
6
GRANT USAGE ON SCHEMA supabase_functions TO postgres, anon, authenticated, service_role;
7
ALTER DEFAULT PRIVILEGES IN SCHEMA supabase_functions GRANT ALL ON TABLES TO postgres, anon, authenticated, service_role;
8
ALTER DEFAULT PRIVILEGES IN SCHEMA supabase_functions GRANT ALL ON FUNCTIONS TO postgres, anon, authenticated, service_role;
9
ALTER DEFAULT PRIVILEGES IN SCHEMA supabase_functions GRANT ALL ON SEQUENCES TO postgres, anon, authenticated, service_role;
11
CREATE TABLE supabase_functions.migrations (
12
version text PRIMARY KEY,
13
inserted_at timestamptz NOT NULL DEFAULT NOW()
16
INSERT INTO supabase_functions.migrations (version) VALUES ('initial');
18
CREATE TABLE supabase_functions.hooks (
19
id bigserial PRIMARY KEY,
20
hook_table_id integer NOT NULL,
21
hook_name text NOT NULL,
22
created_at timestamptz NOT NULL DEFAULT NOW(),
25
CREATE INDEX supabase_functions_hooks_request_id_idx ON supabase_functions.hooks USING btree (request_id);
26
CREATE INDEX supabase_functions_hooks_h_table_id_h_name_idx ON supabase_functions.hooks USING btree (hook_table_id, hook_name);
27
COMMENT ON TABLE supabase_functions.hooks IS 'Supabase Functions Hooks: Audit trail for triggered hooks.';
28
CREATE FUNCTION supabase_functions.http_request()
35
url text := TG_ARGV[0]::text;
36
method text := TG_ARGV[1]::text;
37
headers jsonb DEFAULT '{}'::jsonb;
38
params jsonb DEFAULT '{}'::jsonb;
39
timeout_ms integer DEFAULT 1000;
41
IF url IS NULL OR url = 'null' THEN
42
RAISE EXCEPTION 'url argument is missing';
45
IF method IS NULL OR method = 'null' THEN
46
RAISE EXCEPTION 'method argument is missing';
49
IF TG_ARGV[2] IS NULL OR TG_ARGV[2] = 'null' THEN
50
headers = '{"Content-Type": "application/json"}'::jsonb;
52
headers = TG_ARGV[2]::jsonb;
55
IF TG_ARGV[3] IS NULL OR TG_ARGV[3] = 'null' THEN
58
params = TG_ARGV[3]::jsonb;
61
IF TG_ARGV[4] IS NULL OR TG_ARGV[4] = 'null' THEN
64
timeout_ms = TG_ARGV[4]::integer;
68
WHEN method = 'GET' THEN
69
SELECT http_get INTO request_id FROM net.http_get(
75
WHEN method = 'POST' THEN
76
payload = jsonb_build_object(
80
'table', TG_TABLE_NAME,
81
'schema', TG_TABLE_SCHEMA
84
SELECT http_post INTO request_id FROM net.http_post(
92
RAISE EXCEPTION 'method argument % is invalid', method;
95
INSERT INTO supabase_functions.hooks
96
(hook_table_id, hook_name, request_id)
98
(TG_RELID, TG_NAME, request_id);
110
WHERE rolname = 'supabase_functions_admin'
113
CREATE USER supabase_functions_admin NOINHERIT CREATEROLE LOGIN NOREPLICATION;
117
GRANT ALL PRIVILEGES ON SCHEMA supabase_functions TO supabase_functions_admin;
118
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA supabase_functions TO supabase_functions_admin;
119
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA supabase_functions TO supabase_functions_admin;
120
ALTER USER supabase_functions_admin SET search_path = "supabase_functions";
121
ALTER table "supabase_functions".migrations OWNER TO supabase_functions_admin;
122
ALTER table "supabase_functions".hooks OWNER TO supabase_functions_admin;
123
ALTER function "supabase_functions".http_request() OWNER TO supabase_functions_admin;
124
GRANT supabase_functions_admin TO postgres;
132
WHERE rolname = 'supabase_pg_net_admin'
135
REASSIGN OWNED BY supabase_pg_net_admin TO supabase_admin;
136
DROP OWNED BY supabase_pg_net_admin;
137
DROP ROLE supabase_pg_net_admin;
148
WHERE extname = 'pg_net'
151
GRANT USAGE ON SCHEMA net TO supabase_functions_admin, postgres, anon, authenticated, service_role;
152
ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER;
153
ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER;
154
ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net;
155
ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net;
156
REVOKE ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC;
157
REVOKE ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC;
158
GRANT EXECUTE ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role;
159
GRANT EXECUTE ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role;
164
CREATE OR REPLACE FUNCTION extensions.grant_pg_net_access()
165
RETURNS event_trigger
171
FROM pg_event_trigger_ddl_commands() AS ev
172
JOIN pg_extension AS ext
173
ON ev.objid = ext.oid
174
WHERE ext.extname = 'pg_net'
177
GRANT USAGE ON SCHEMA net TO supabase_functions_admin, postgres, anon, authenticated, service_role;
178
ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER;
179
ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER;
180
ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net;
181
ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net;
182
REVOKE ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC;
183
REVOKE ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC;
184
GRANT EXECUTE ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role;
185
GRANT EXECUTE ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role;
189
COMMENT ON FUNCTION extensions.grant_pg_net_access IS 'Grants access to pg_net';
195
FROM pg_event_trigger
196
WHERE evtname = 'issue_pg_net_access'
198
CREATE EVENT TRIGGER issue_pg_net_access ON ddl_command_end WHEN TAG IN ('CREATE EXTENSION')
199
EXECUTE PROCEDURE extensions.grant_pg_net_access();
203
INSERT INTO supabase_functions.migrations (version) VALUES ('20210809183423_update_grants');
204
ALTER function supabase_functions.http_request() SECURITY DEFINER;
205
ALTER function supabase_functions.http_request() SET search_path = supabase_functions;
206
REVOKE ALL ON FUNCTION supabase_functions.http_request() FROM PUBLIC;
207
GRANT EXECUTE ON FUNCTION supabase_functions.http_request() TO postgres, anon, authenticated, service_role;