@r8s/supabase 0.2.0 → 0.3.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.d.ts +131 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +259 -0
- package/dist/index.js.map +1 -0
- package/package.json +10 -7
- package/__tests__/supabase.test.ts +0 -480
- package/examples/basic.tsx +0 -16
- package/src/index.tsx +0 -454
- package/tsconfig.json +0 -15
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
export interface SupabaseProps {
|
|
2
|
+
/** Resource name — base for every derived resource (defaults to 'supabase') */
|
|
3
|
+
name?: string;
|
|
4
|
+
/** Kubernetes namespace (defaults to 'default') */
|
|
5
|
+
namespace?: string;
|
|
6
|
+
/** Public hostname for the REST API root — PostgREST (required) */
|
|
7
|
+
host: string;
|
|
8
|
+
/** Replicas per service (defaults to 1; PostgREST/GoTrue scale horizontally) */
|
|
9
|
+
replicas?: number;
|
|
10
|
+
/** Postgres cluster storage size for the Database core (defaults to '10Gi') */
|
|
11
|
+
storage?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Render the Storage API service (defaults to true). Set false to run a
|
|
14
|
+
* minimal auth + REST-only Supabase. The S3 objectStorage prop is always
|
|
15
|
+
* required so a bucket is declared for the platform.
|
|
16
|
+
*/
|
|
17
|
+
storageApi?: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* S3-compatible object storage for the Storage API (RustFS in the platform).
|
|
20
|
+
* Reference a bucket whose credentials live in a Secret provisioned by
|
|
21
|
+
* the secrets backend (keys: accessKey, secretKey) — never plaintext.
|
|
22
|
+
*/
|
|
23
|
+
objectStorage: {
|
|
24
|
+
/** S3 endpoint URL, e.g. https://s3.internal.example.com */
|
|
25
|
+
endpoint: string;
|
|
26
|
+
/** Bucket for uploads and stored files */
|
|
27
|
+
bucket: string;
|
|
28
|
+
/** Name of the Secret holding accessKey / secretKey */
|
|
29
|
+
credentialsSecret: string;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* S3 region reported to the Storage API (GLOBAL_S3_REGION, defaults to
|
|
33
|
+
* 'us-east-1'). For S3-compatible stores like RustFS any consistent
|
|
34
|
+
* region works — keep it aligned with the provider's default.
|
|
35
|
+
*/
|
|
36
|
+
region?: string;
|
|
37
|
+
/**
|
|
38
|
+
* Name of an existing Secret holding the Supabase JWT bundle with keys
|
|
39
|
+
* `jwtSecret`, `anonKey`, `serviceRoleKey` and `referrerURLs`. Required
|
|
40
|
+
* unless a secrets backend (openbao/vault) is configured on the
|
|
41
|
+
* surrounding Platform — the backend then provisions the bundle at
|
|
42
|
+
* path `<path>/<name>/jwt`. Plaintext JWT secrets are not supported.
|
|
43
|
+
*/
|
|
44
|
+
jwtSecretsName?: string;
|
|
45
|
+
/**
|
|
46
|
+
* Additional redirect URLs GoTrue may send users to after signup,
|
|
47
|
+
* magic-link or OAuth flows (GOTRUE_URI_ALLOW_LIST). The site URL is
|
|
48
|
+
* always allowed; pass a list (joined with ',') or a pre-joined string.
|
|
49
|
+
*/
|
|
50
|
+
uriAllowList?: string | string[];
|
|
51
|
+
/** Requested resources — applied to every service in the suite */
|
|
52
|
+
resources?: {
|
|
53
|
+
requests?: {
|
|
54
|
+
cpu?: string;
|
|
55
|
+
memory?: string;
|
|
56
|
+
};
|
|
57
|
+
limits?: {
|
|
58
|
+
cpu?: string;
|
|
59
|
+
memory?: string;
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
/** TLS configuration (defaults to letsencrypt-prod cluster issuer) */
|
|
63
|
+
tls?: {
|
|
64
|
+
secretName: string;
|
|
65
|
+
clusterIssuer: string;
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Supabase — open-source Firebase alternative: auth, REST, realtime and
|
|
70
|
+
* storage on Postgres. This is the Supabase backend platform, NOT Apache
|
|
71
|
+
* Superset (which ships in the separate r8s/superset package).
|
|
72
|
+
*
|
|
73
|
+
* @title Supabase
|
|
74
|
+
* @category Backend Platforms
|
|
75
|
+
*
|
|
76
|
+
* Composes:
|
|
77
|
+
* - CNPG Postgres cluster (the Supabase database core) bootstrapped with
|
|
78
|
+
* the Supabase roles (anon, authenticated, service_role, authenticator),
|
|
79
|
+
* extensions (pgcrypto, pgjwt) and schemas (auth, storage, realtime)
|
|
80
|
+
* - GoTrue auth service (`${name}-gotrue`, port 9999)
|
|
81
|
+
* - PostgREST REST API (`${name}-postgrest`, port 3000)
|
|
82
|
+
* - Realtime websockets service (`${name}-realtime`, port 4000)
|
|
83
|
+
* - Storage API on S3/RustFS (`${name}-storage-api`, port 5000)
|
|
84
|
+
* - ImgProxy image transform service (`${name}-imgproxy`, port 8080)
|
|
85
|
+
* - Endpoints on one host: `/rest/v1` (PostgREST), `/auth/v1` (GoTrue),
|
|
86
|
+
* `/realtime/v1` (Realtime, with WebSocket-friendly nginx annotations)
|
|
87
|
+
* and `/storage/v1` (Storage API), plus the REST root at `/`
|
|
88
|
+
* - JWT bundle (jwtSecret, anonKey, serviceRoleKey, referrerURLs)
|
|
89
|
+
* provisioned through the Platform secrets backend (openbao / vault),
|
|
90
|
+
* or referenced from an existing Secret
|
|
91
|
+
*
|
|
92
|
+
* Wrap the component in `<Platform secrets={{ backend: 'openbao' }}>` and
|
|
93
|
+
* the `${name}-jwt` bundle is provisioned for you. Without a backend you
|
|
94
|
+
* must point `jwtSecretsName` at a pre-created Secret.
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* import { Platform } from '@r8s/recipes'
|
|
98
|
+
* import { Supabase } from '@r8s/supabase'
|
|
99
|
+
*
|
|
100
|
+
* export default (
|
|
101
|
+
* <Platform secrets={{ backend: 'openbao', mount: 'kv', path: 'apps' }}>
|
|
102
|
+
* <Supabase
|
|
103
|
+
* name="backend"
|
|
104
|
+
* host="backend.example.com"
|
|
105
|
+
* objectStorage={{
|
|
106
|
+
* endpoint: 'https://s3.internal.example.com',
|
|
107
|
+
* bucket: 'backend-uploads',
|
|
108
|
+
* credentialsSecret: 'backend-object-store-credentials',
|
|
109
|
+
* }}
|
|
110
|
+
* />
|
|
111
|
+
* </Platform>
|
|
112
|
+
* )
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* // Reference a pre-created JWT bundle instead of provisioning one
|
|
116
|
+
* import { Supabase } from '@r8s/supabase'
|
|
117
|
+
*
|
|
118
|
+
* export default (
|
|
119
|
+
* <Supabase
|
|
120
|
+
* host="backend.example.com"
|
|
121
|
+
* jwtSecretsName="backend-jwt"
|
|
122
|
+
* objectStorage={{
|
|
123
|
+
* endpoint: 'https://s3.internal.example.com',
|
|
124
|
+
* bucket: 'backend-uploads',
|
|
125
|
+
* credentialsSecret: 'backend-object-store-credentials',
|
|
126
|
+
* }}
|
|
127
|
+
* />
|
|
128
|
+
* )
|
|
129
|
+
*/
|
|
130
|
+
export declare function Supabase(props: SupabaseProps): import("@r8s/core").r8sElement;
|
|
131
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,+EAA+E;IAC/E,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAA;IACZ,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;;OAIG;IACH,aAAa,EAAE;QACb,4DAA4D;QAC5D,QAAQ,EAAE,MAAM,CAAA;QAChB,0CAA0C;QAC1C,MAAM,EAAE,MAAM,CAAA;QACd,uDAAuD;QACvD,iBAAiB,EAAE,MAAM,CAAA;KAC1B,CAAA;IACD;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAChC,kEAAkE;IAClE,SAAS,CAAC,EAAE;QACV,QAAQ,CAAC,EAAE;YAAE,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;QAC5C,MAAM,CAAC,EAAE;YAAE,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAC3C,CAAA;IACD,sEAAsE;IACtE,GAAG,CAAC,EAAE;QACJ,UAAU,EAAE,MAAM,CAAA;QAClB,aAAa,EAAE,MAAM,CAAA;KACtB,CAAA;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,kCAsU5C"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Supabase = Supabase;
|
|
4
|
+
const jsx_runtime_1 = require("@r8s/core/jsx-runtime");
|
|
5
|
+
const core_1 = require("@r8s/core");
|
|
6
|
+
const defaults_1 = require("@r8s/core/defaults");
|
|
7
|
+
const recipes_1 = require("@r8s/recipes");
|
|
8
|
+
/**
|
|
9
|
+
* Supabase — open-source Firebase alternative: auth, REST, realtime and
|
|
10
|
+
* storage on Postgres. This is the Supabase backend platform, NOT Apache
|
|
11
|
+
* Superset (which ships in the separate r8s/superset package).
|
|
12
|
+
*
|
|
13
|
+
* @title Supabase
|
|
14
|
+
* @category Backend Platforms
|
|
15
|
+
*
|
|
16
|
+
* Composes:
|
|
17
|
+
* - CNPG Postgres cluster (the Supabase database core) bootstrapped with
|
|
18
|
+
* the Supabase roles (anon, authenticated, service_role, authenticator),
|
|
19
|
+
* extensions (pgcrypto, pgjwt) and schemas (auth, storage, realtime)
|
|
20
|
+
* - GoTrue auth service (`${name}-gotrue`, port 9999)
|
|
21
|
+
* - PostgREST REST API (`${name}-postgrest`, port 3000)
|
|
22
|
+
* - Realtime websockets service (`${name}-realtime`, port 4000)
|
|
23
|
+
* - Storage API on S3/RustFS (`${name}-storage-api`, port 5000)
|
|
24
|
+
* - ImgProxy image transform service (`${name}-imgproxy`, port 8080)
|
|
25
|
+
* - Endpoints on one host: `/rest/v1` (PostgREST), `/auth/v1` (GoTrue),
|
|
26
|
+
* `/realtime/v1` (Realtime, with WebSocket-friendly nginx annotations)
|
|
27
|
+
* and `/storage/v1` (Storage API), plus the REST root at `/`
|
|
28
|
+
* - JWT bundle (jwtSecret, anonKey, serviceRoleKey, referrerURLs)
|
|
29
|
+
* provisioned through the Platform secrets backend (openbao / vault),
|
|
30
|
+
* or referenced from an existing Secret
|
|
31
|
+
*
|
|
32
|
+
* Wrap the component in `<Platform secrets={{ backend: 'openbao' }}>` and
|
|
33
|
+
* the `${name}-jwt` bundle is provisioned for you. Without a backend you
|
|
34
|
+
* must point `jwtSecretsName` at a pre-created Secret.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* import { Platform } from '@r8s/recipes'
|
|
38
|
+
* import { Supabase } from '@r8s/supabase'
|
|
39
|
+
*
|
|
40
|
+
* export default (
|
|
41
|
+
* <Platform secrets={{ backend: 'openbao', mount: 'kv', path: 'apps' }}>
|
|
42
|
+
* <Supabase
|
|
43
|
+
* name="backend"
|
|
44
|
+
* host="backend.example.com"
|
|
45
|
+
* objectStorage={{
|
|
46
|
+
* endpoint: 'https://s3.internal.example.com',
|
|
47
|
+
* bucket: 'backend-uploads',
|
|
48
|
+
* credentialsSecret: 'backend-object-store-credentials',
|
|
49
|
+
* }}
|
|
50
|
+
* />
|
|
51
|
+
* </Platform>
|
|
52
|
+
* )
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* // Reference a pre-created JWT bundle instead of provisioning one
|
|
56
|
+
* import { Supabase } from '@r8s/supabase'
|
|
57
|
+
*
|
|
58
|
+
* export default (
|
|
59
|
+
* <Supabase
|
|
60
|
+
* host="backend.example.com"
|
|
61
|
+
* jwtSecretsName="backend-jwt"
|
|
62
|
+
* objectStorage={{
|
|
63
|
+
* endpoint: 'https://s3.internal.example.com',
|
|
64
|
+
* bucket: 'backend-uploads',
|
|
65
|
+
* credentialsSecret: 'backend-object-store-credentials',
|
|
66
|
+
* }}
|
|
67
|
+
* />
|
|
68
|
+
* )
|
|
69
|
+
*/
|
|
70
|
+
function Supabase(props) {
|
|
71
|
+
const { name = 'supabase', namespace = 'default', host, replicas = 1, storage = '10Gi', storageApi = true, region = 'us-east-1', objectStorage, jwtSecretsName, uriAllowList, resources = {
|
|
72
|
+
requests: { memory: '512Mi', cpu: '250m' },
|
|
73
|
+
limits: { memory: '2Gi', cpu: '1000m' },
|
|
74
|
+
}, tls = { secretName: `${name}-tls`, clusterIssuer: 'letsencrypt-prod' }, } = props;
|
|
75
|
+
const secretProvider = (0, core_1.useContext)(defaults_1.SecretContext);
|
|
76
|
+
const resources_ = [];
|
|
77
|
+
const dbHost = `${name}-rw`;
|
|
78
|
+
const dbCredentialsName = `${name}-db-credentials`;
|
|
79
|
+
const jwtBundleName = jwtSecretsName ?? `${name}-jwt`;
|
|
80
|
+
// Static parts only — the password arrives via $(PGPASSWORD), which every
|
|
81
|
+
// service declares through secretKeyRef (WebService resolves secrets
|
|
82
|
+
// before plain env, so Kubernetes dependent expansion sees it).
|
|
83
|
+
const dbUri = `postgresql://${name}:$(PGPASSWORD)@${dbHost}:5432/${name}`;
|
|
84
|
+
// --- Bootstrap SQL ---------------------------------------------------------
|
|
85
|
+
// Minimal Supabase bootstrap applied once by CNPG after initdb
|
|
86
|
+
// (bootstrap.initdb.postInitApplicationSQL). Every statement is
|
|
87
|
+
// idempotent where the SQL grammar allows it.
|
|
88
|
+
const postInitSQL = [
|
|
89
|
+
'CREATE EXTENSION IF NOT EXISTS pgcrypto;',
|
|
90
|
+
'CREATE EXTENSION IF NOT EXISTS pgjwt;',
|
|
91
|
+
'CREATE ROLE anon NOLOGIN;',
|
|
92
|
+
'CREATE ROLE authenticated NOLOGIN;',
|
|
93
|
+
'CREATE ROLE service_role NOLOGIN;',
|
|
94
|
+
'CREATE ROLE authenticator NOLOGIN;',
|
|
95
|
+
'GRANT USAGE ON SCHEMA public TO anon, authenticated, service_role;',
|
|
96
|
+
'CREATE SCHEMA IF NOT EXISTS auth;',
|
|
97
|
+
'CREATE SCHEMA IF NOT EXISTS storage;',
|
|
98
|
+
'CREATE SCHEMA IF NOT EXISTS realtime;',
|
|
99
|
+
'GRANT USAGE ON SCHEMA auth TO anon, authenticated, service_role;',
|
|
100
|
+
'GRANT USAGE ON SCHEMA storage TO anon, authenticated, service_role;',
|
|
101
|
+
'GRANT USAGE ON SCHEMA realtime TO anon, authenticated, service_role;',
|
|
102
|
+
'GRANT anon TO authenticator;',
|
|
103
|
+
'GRANT authenticated TO authenticator;',
|
|
104
|
+
'GRANT service_role TO authenticator;',
|
|
105
|
+
];
|
|
106
|
+
// --- JWT bundle provisioning ----------------------------------------------
|
|
107
|
+
// GoTrue, PostgREST and Storage API all verify Supabase JWTs. The bundle
|
|
108
|
+
// (jwtSecret, anonKey, serviceRoleKey, referrerURLs) must never be
|
|
109
|
+
// rendered as plaintext: with a secrets backend it is provisioned through
|
|
110
|
+
// the backend (keys live at <path>/<name>/jwt); otherwise reference a
|
|
111
|
+
// pre-created Secret.
|
|
112
|
+
if (!jwtSecretsName) {
|
|
113
|
+
if (!secretProvider ||
|
|
114
|
+
(secretProvider.backend !== 'vault' && secretProvider.backend !== 'openbao')) {
|
|
115
|
+
throw new Error(`Supabase "${name}" requires a JWT secret bundle (keys: jwtSecret, anonKey, serviceRoleKey, referrerURLs).\n` +
|
|
116
|
+
`\n` +
|
|
117
|
+
`GoTrue, PostgREST and Storage API verify Supabase JWTs — the bundle ` +
|
|
118
|
+
`must not be rendered as plaintext.\n` +
|
|
119
|
+
`\n` +
|
|
120
|
+
`Fix: configure a secrets backend on the Platform holding the bundle ` +
|
|
121
|
+
`at path <mount-path>/${name}/jwt:\n` +
|
|
122
|
+
` <Platform secrets={{ backend: 'openbao', mount: 'kv', path: 'apps' }}>\n` +
|
|
123
|
+
` <Supabase name="${name}" host="${host}" objectStorage={{ endpoint: '...', bucket: '...', credentialsSecret: '...' }} />\n` +
|
|
124
|
+
` </Platform>\n` +
|
|
125
|
+
`\n` +
|
|
126
|
+
`Or reference a pre-created Secret (keys: jwtSecret, anonKey, serviceRoleKey, referrerURLs):\n` +
|
|
127
|
+
` <Supabase name="${name}" host="${host}" jwtSecretsName="${name}-jwt" />`);
|
|
128
|
+
}
|
|
129
|
+
const spec = {
|
|
130
|
+
...(secretProvider.backend === 'vault'
|
|
131
|
+
? { vaultAuthRef: secretProvider.authRef }
|
|
132
|
+
: { openbaoAuthRef: secretProvider.authRef }),
|
|
133
|
+
mount: secretProvider.mount,
|
|
134
|
+
type: 'kv-v2',
|
|
135
|
+
path: `${secretProvider.path ?? name}/${name}/jwt`,
|
|
136
|
+
destination: { create: true, name: jwtBundleName },
|
|
137
|
+
};
|
|
138
|
+
resources_.push(secretProvider.backend === 'vault'
|
|
139
|
+
? (0, core_1.jsx)('VaultStaticSecret', {
|
|
140
|
+
apiVersion: 'secrets.hashicorp.com/v1beta1',
|
|
141
|
+
kind: 'VaultStaticSecret',
|
|
142
|
+
metadata: { name: `${name}-jwt`, namespace },
|
|
143
|
+
spec,
|
|
144
|
+
})
|
|
145
|
+
: (0, core_1.jsx)('OpenBaoStaticSecret', {
|
|
146
|
+
apiVersion: 'secrets.openbao.org/v1beta1',
|
|
147
|
+
kind: 'OpenBaoStaticSecret',
|
|
148
|
+
metadata: { name: `${name}-jwt`, namespace },
|
|
149
|
+
spec,
|
|
150
|
+
}));
|
|
151
|
+
}
|
|
152
|
+
// --- Database (CNPG) — the Postgres core -----------------------------------
|
|
153
|
+
// Wraps every Postgres-backed service so credentials stay consistent with
|
|
154
|
+
// the r8s Database recipe (CNPG dedicated cluster provisions the secret).
|
|
155
|
+
resources_.push((0, core_1.jsx)(recipes_1.Database, {
|
|
156
|
+
backup: false,
|
|
157
|
+
name,
|
|
158
|
+
namespace,
|
|
159
|
+
storage,
|
|
160
|
+
postInitSQL,
|
|
161
|
+
children: ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(recipes_1.WebService, { name: `${name}-gotrue`, namespace: namespace, image: "supabase/gotrue:v2", port: 9999, replicas: replicas, resources: resources, probes: {
|
|
162
|
+
liveness: { path: '/health', initialDelaySeconds: 15 },
|
|
163
|
+
readiness: { path: '/health', initialDelaySeconds: 15 },
|
|
164
|
+
}, env: {
|
|
165
|
+
GOTRUE_API_HOST: '0.0.0.0',
|
|
166
|
+
GOTRUE_API_PORT: '9999',
|
|
167
|
+
GOTRUE_SITE_URL: `https://${host}`,
|
|
168
|
+
API_EXTERNAL_URL: `https://${host}`,
|
|
169
|
+
GOTRUE_DB_DRIVER: 'postgres',
|
|
170
|
+
GOTRUE_DB_DATABASE_URL: dbUri,
|
|
171
|
+
GOTRUE_JWT_ISSUER: `https://${host}/auth/v1`,
|
|
172
|
+
GOTRUE_JWT_ADMIN_ROLES: 'service_role',
|
|
173
|
+
GOTRUE_JWT_AUD: 'authenticated',
|
|
174
|
+
GOTRUE_JWT_DEFAULT_GROUP_NAME: 'authenticated',
|
|
175
|
+
GOTRUE_JWT_EXP: '3600',
|
|
176
|
+
...(uriAllowList && {
|
|
177
|
+
GOTRUE_URI_ALLOW_LIST: Array.isArray(uriAllowList)
|
|
178
|
+
? uriAllowList.join(',')
|
|
179
|
+
: uriAllowList,
|
|
180
|
+
}),
|
|
181
|
+
}, secrets: {
|
|
182
|
+
PGPASSWORD: { secret: dbCredentialsName, key: 'password' },
|
|
183
|
+
GOTRUE_JWT_SECRET: { secret: jwtBundleName, key: 'jwtSecret' },
|
|
184
|
+
} }), (0, jsx_runtime_1.jsx)(recipes_1.WebService, { name: `${name}-postgrest`, namespace: namespace, image: "postgrest/postgrest:v12", port: 3000, replicas: replicas, resources: resources, probes: {
|
|
185
|
+
liveness: { path: '/' },
|
|
186
|
+
readiness: { path: '/' },
|
|
187
|
+
}, env: {
|
|
188
|
+
PGRST_SERVER_PORT: '3000',
|
|
189
|
+
PGRST_DB_URI: dbUri,
|
|
190
|
+
PGRST_DB_SCHEMAS: 'public,storage,graphql_public',
|
|
191
|
+
PGRST_DB_ANON_ROLE: 'anon',
|
|
192
|
+
PGRST_DB_USE_LEGACY_GUCS: 'false',
|
|
193
|
+
}, secrets: {
|
|
194
|
+
PGPASSWORD: { secret: dbCredentialsName, key: 'password' },
|
|
195
|
+
PGRST_JWT_SECRET: { secret: jwtBundleName, key: 'jwtSecret' },
|
|
196
|
+
} }), (0, jsx_runtime_1.jsx)(recipes_1.WebService, { name: `${name}-realtime`, namespace: namespace, image: "supabase/realtime:v2", port: 4000, replicas: replicas, resources: resources, probes: {
|
|
197
|
+
liveness: { path: '/health' },
|
|
198
|
+
readiness: { path: '/health' },
|
|
199
|
+
}, env: {
|
|
200
|
+
PORT: '4000',
|
|
201
|
+
DB_HOST: dbHost,
|
|
202
|
+
DB_PORT: '5432',
|
|
203
|
+
DB_USER: name,
|
|
204
|
+
DB_NAME: name,
|
|
205
|
+
DB_ENC_KEY: 'supabaserealtime',
|
|
206
|
+
SECURE_CHANNELS: 'true',
|
|
207
|
+
}, secrets: {
|
|
208
|
+
DB_PASSWORD: { secret: dbCredentialsName, key: 'password' },
|
|
209
|
+
API_JWT_SECRET: { secret: jwtBundleName, key: 'jwtSecret' },
|
|
210
|
+
} }), storageApi && ((0, jsx_runtime_1.jsx)(recipes_1.WebService, { name: `${name}-storage-api`, namespace: namespace, image: "supabase/storage-api:v0", port: 5000, replicas: replicas, resources: resources, probes: {
|
|
211
|
+
liveness: { path: '/status' },
|
|
212
|
+
readiness: { path: '/status' },
|
|
213
|
+
}, env: {
|
|
214
|
+
PORT: '5000',
|
|
215
|
+
DATABASE_URL: dbUri,
|
|
216
|
+
STORAGE_BACKEND: 's3',
|
|
217
|
+
GLOBAL_S3_BUCKET: objectStorage.bucket,
|
|
218
|
+
GLOBAL_S3_ENDPOINT: objectStorage.endpoint,
|
|
219
|
+
GLOBAL_S3_REGION: region,
|
|
220
|
+
GLOBAL_S3_FORCE_PATH_STYLE: 'true',
|
|
221
|
+
IMGPROXY_URL: `http://${name}-imgproxy:8080`,
|
|
222
|
+
FILE_SIZE_LIMIT: '50GiB',
|
|
223
|
+
}, secrets: {
|
|
224
|
+
PGPASSWORD: { secret: dbCredentialsName, key: 'password' },
|
|
225
|
+
PGRST_JWT_SECRET: { secret: jwtBundleName, key: 'jwtSecret' },
|
|
226
|
+
ANON_KEY: { secret: jwtBundleName, key: 'anonKey' },
|
|
227
|
+
SERVICE_KEY: { secret: jwtBundleName, key: 'serviceRoleKey' },
|
|
228
|
+
GLOBAL_S3_ACCESS_KEY: {
|
|
229
|
+
secret: objectStorage.credentialsSecret,
|
|
230
|
+
key: 'accessKey',
|
|
231
|
+
},
|
|
232
|
+
GLOBAL_S3_SECRET_KEY: {
|
|
233
|
+
secret: objectStorage.credentialsSecret,
|
|
234
|
+
key: 'secretKey',
|
|
235
|
+
},
|
|
236
|
+
} }))] })),
|
|
237
|
+
}));
|
|
238
|
+
// --- ImgProxy — image transforms for the Storage API ------------------------
|
|
239
|
+
// Stateful-free image resizer; no database or secrets needed.
|
|
240
|
+
resources_.push((0, jsx_runtime_1.jsx)(recipes_1.WebService, { name: `${name}-imgproxy`, namespace: namespace, image: "darthsim/imgproxy:v3", port: 8080, replicas: replicas, resources: resources, probes: {
|
|
241
|
+
liveness: { path: '/health' },
|
|
242
|
+
readiness: { path: '/health' },
|
|
243
|
+
}, env: {
|
|
244
|
+
IMGPROXY_ALLOW_ORIGIN: '*',
|
|
245
|
+
IMGPROXY_ENABLE_WEBP_DETECTION: 'true',
|
|
246
|
+
IMGPROXY_MAX_SRC_RESOLUTION: '50',
|
|
247
|
+
} }));
|
|
248
|
+
// --- Endpoints — one host, path-based routes --------------------------------
|
|
249
|
+
// The REST root (PostgREST) serves `/`; GoTrue, Realtime and Storage API
|
|
250
|
+
// are exposed as Prefix routes on the same host so clients use a single
|
|
251
|
+
// origin (`/auth/v1`, `/rest/v1`, `/realtime/v1`, `/storage/v1`).
|
|
252
|
+
resources_.push((0, jsx_runtime_1.jsx)(recipes_1.Endpoint, { name: `${name}-endpoint`, namespace: namespace, host: host, serviceName: `${name}-postgrest`, servicePort: 3000, tls: tls }), (0, jsx_runtime_1.jsx)(recipes_1.Endpoint, { name: `${name}-auth-endpoint`, namespace: namespace, host: host, path: "/auth/v1", serviceName: `${name}-gotrue`, servicePort: 9999, tls: tls }), (0, jsx_runtime_1.jsx)(recipes_1.Endpoint, { name: `${name}-rest-endpoint`, namespace: namespace, host: host, path: "/rest/v1", serviceName: `${name}-postgrest`, servicePort: 3000, tls: tls }), (0, jsx_runtime_1.jsx)(recipes_1.Endpoint, { name: `${name}-realtime-endpoint`, namespace: namespace, host: host, path: "/realtime/v1", serviceName: `${name}-realtime`, servicePort: 4000, tls: tls, annotations: {
|
|
253
|
+
'nginx.ingress.kubernetes.io/proxy-buffering': 'off',
|
|
254
|
+
'nginx.ingress.kubernetes.io/proxy-read-timeout': '3600',
|
|
255
|
+
'nginx.ingress.kubernetes.io/proxy-send-timeout': '3600',
|
|
256
|
+
} }), storageApi && ((0, jsx_runtime_1.jsx)(recipes_1.Endpoint, { name: `${name}-storage-endpoint`, namespace: namespace, host: host, path: "/storage/v1", serviceName: `${name}-storage-api`, servicePort: 5000, tls: tls })));
|
|
257
|
+
return (0, core_1.jsx)(core_1.Fragment, { children: resources_ });
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";;AAgIA,4BAsUC;;AAtcD,oCAAqD;AACrD,iDAAkD;AAClD,0CAA6D;AAgE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AACH,SAAgB,QAAQ,CAAC,KAAoB;IAC3C,MAAM,EACJ,IAAI,GAAG,UAAU,EACjB,SAAS,GAAG,SAAS,EACrB,IAAI,EACJ,QAAQ,GAAG,CAAC,EACZ,OAAO,GAAG,MAAM,EAChB,UAAU,GAAG,IAAI,EACjB,MAAM,GAAG,WAAW,EACpB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,SAAS,GAAG;QACV,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE;QAC1C,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE;KACxC,EACD,GAAG,GAAG,EAAE,UAAU,EAAE,GAAG,IAAI,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,GACvE,GAAG,KAAK,CAAA;IAET,MAAM,cAAc,GAAG,IAAA,iBAAU,EAAC,wBAAa,CAAC,CAAA;IAChD,MAAM,UAAU,GAA6B,EAAE,CAAA;IAE/C,MAAM,MAAM,GAAG,GAAG,IAAI,KAAK,CAAA;IAC3B,MAAM,iBAAiB,GAAG,GAAG,IAAI,iBAAiB,CAAA;IAClD,MAAM,aAAa,GAAG,cAAc,IAAI,GAAG,IAAI,MAAM,CAAA;IACrD,0EAA0E;IAC1E,qEAAqE;IACrE,gEAAgE;IAChE,MAAM,KAAK,GAAG,gBAAgB,IAAI,kBAAkB,MAAM,SAAS,IAAI,EAAE,CAAA;IAEzE,8EAA8E;IAC9E,+DAA+D;IAC/D,gEAAgE;IAChE,8CAA8C;IAC9C,MAAM,WAAW,GAAG;QAClB,0CAA0C;QAC1C,uCAAuC;QACvC,2BAA2B;QAC3B,oCAAoC;QACpC,mCAAmC;QACnC,oCAAoC;QACpC,oEAAoE;QACpE,mCAAmC;QACnC,sCAAsC;QACtC,uCAAuC;QACvC,kEAAkE;QAClE,qEAAqE;QACrE,sEAAsE;QACtE,8BAA8B;QAC9B,uCAAuC;QACvC,sCAAsC;KACvC,CAAA;IAED,6EAA6E;IAC7E,yEAAyE;IACzE,mEAAmE;IACnE,0EAA0E;IAC1E,sEAAsE;IACtE,sBAAsB;IACtB,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,IACE,CAAC,cAAc;YACf,CAAC,cAAc,CAAC,OAAO,KAAK,OAAO,IAAI,cAAc,CAAC,OAAO,KAAK,SAAS,CAAC,EAC5E,CAAC;YACD,MAAM,IAAI,KAAK,CACb,aAAa,IAAI,4FAA4F;gBAC3G,IAAI;gBACJ,sEAAsE;gBACtE,sCAAsC;gBACtC,IAAI;gBACJ,sEAAsE;gBACtE,wBAAwB,IAAI,SAAS;gBACrC,4EAA4E;gBAC5E,uBAAuB,IAAI,WAAW,IAAI,qFAAqF;gBAC/H,iBAAiB;gBACjB,IAAI;gBACJ,+FAA+F;gBAC/F,qBAAqB,IAAI,WAAW,IAAI,qBAAqB,IAAI,UAAU,CAC9E,CAAA;QACH,CAAC;QAED,MAAM,IAAI,GAAG;YACX,GAAG,CAAC,cAAc,CAAC,OAAO,KAAK,OAAO;gBACpC,CAAC,CAAC,EAAE,YAAY,EAAE,cAAc,CAAC,OAAO,EAAE;gBAC1C,CAAC,CAAC,EAAE,cAAc,EAAE,cAAc,CAAC,OAAO,EAAE,CAAC;YAC/C,KAAK,EAAE,cAAc,CAAC,KAAK;YAC3B,IAAI,EAAE,OAAgB;YACtB,IAAI,EAAE,GAAG,cAAc,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM;YAClD,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE;SACnD,CAAA;QACD,UAAU,CAAC,IAAI,CACb,cAAc,CAAC,OAAO,KAAK,OAAO;YAChC,CAAC,CAAC,IAAA,UAAG,EAAC,mBAAmB,EAAE;gBACvB,UAAU,EAAE,+BAA+B;gBAC3C,IAAI,EAAE,mBAAmB;gBACzB,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,MAAM,EAAE,SAAS,EAAE;gBAC5C,IAAI;aACL,CAAC;YACJ,CAAC,CAAC,IAAA,UAAG,EAAC,qBAAqB,EAAE;gBACzB,UAAU,EAAE,6BAA6B;gBACzC,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,MAAM,EAAE,SAAS,EAAE;gBAC5C,IAAI;aACL,CAAC,CACP,CAAA;IACH,CAAC;IAED,8EAA8E;IAC9E,0EAA0E;IAC1E,0EAA0E;IAC1E,UAAU,CAAC,IAAI,CACb,IAAA,UAAG,EAAC,kBAAQ,EAAE;QACZ,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,SAAS;QACT,OAAO;QACP,WAAW;QACX,QAAQ,EAAE,CACR,6DACE,uBAAC,oBAAU,IACT,IAAI,EAAE,GAAG,IAAI,SAAS,EACtB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAC,oBAAoB,EAC1B,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE;wBACN,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,mBAAmB,EAAE,EAAE,EAAE;wBACtD,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,mBAAmB,EAAE,EAAE,EAAE;qBACxD,EACD,GAAG,EAAE;wBACH,eAAe,EAAE,SAAS;wBAC1B,eAAe,EAAE,MAAM;wBACvB,eAAe,EAAE,WAAW,IAAI,EAAE;wBAClC,gBAAgB,EAAE,WAAW,IAAI,EAAE;wBACnC,gBAAgB,EAAE,UAAU;wBAC5B,sBAAsB,EAAE,KAAK;wBAC7B,iBAAiB,EAAE,WAAW,IAAI,UAAU;wBAC5C,sBAAsB,EAAE,cAAc;wBACtC,cAAc,EAAE,eAAe;wBAC/B,6BAA6B,EAAE,eAAe;wBAC9C,cAAc,EAAE,MAAM;wBACtB,GAAG,CAAC,YAAY,IAAI;4BAClB,qBAAqB,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;gCAChD,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;gCACxB,CAAC,CAAC,YAAY;yBACjB,CAAC;qBACH,EACD,OAAO,EAAE;wBACP,UAAU,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,UAAU,EAAE;wBAC1D,iBAAiB,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,WAAW,EAAE;qBAC/D,GACD,EACF,uBAAC,oBAAU,IACT,IAAI,EAAE,GAAG,IAAI,YAAY,EACzB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAC,yBAAyB,EAC/B,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE;wBACN,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;wBACvB,SAAS,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;qBACzB,EACD,GAAG,EAAE;wBACH,iBAAiB,EAAE,MAAM;wBACzB,YAAY,EAAE,KAAK;wBACnB,gBAAgB,EAAE,+BAA+B;wBACjD,kBAAkB,EAAE,MAAM;wBAC1B,wBAAwB,EAAE,OAAO;qBAClC,EACD,OAAO,EAAE;wBACP,UAAU,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,UAAU,EAAE;wBAC1D,gBAAgB,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,WAAW,EAAE;qBAC9D,GACD,EACF,uBAAC,oBAAU,IACT,IAAI,EAAE,GAAG,IAAI,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAC,sBAAsB,EAC5B,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE;wBACN,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;wBAC7B,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;qBAC/B,EACD,GAAG,EAAE;wBACH,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,MAAM;wBACf,OAAO,EAAE,MAAM;wBACf,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,IAAI;wBACb,UAAU,EAAE,kBAAkB;wBAC9B,eAAe,EAAE,MAAM;qBACxB,EACD,OAAO,EAAE;wBACP,WAAW,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,UAAU,EAAE;wBAC3D,cAAc,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,WAAW,EAAE;qBAC5D,GACD,EACD,UAAU,IAAI,CACb,uBAAC,oBAAU,IACT,IAAI,EAAE,GAAG,IAAI,cAAc,EAC3B,SAAS,EAAE,SAAS,EACpB,KAAK,EAAC,yBAAyB,EAC/B,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE;wBACN,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;wBAC7B,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;qBAC/B,EACD,GAAG,EAAE;wBACH,IAAI,EAAE,MAAM;wBACZ,YAAY,EAAE,KAAK;wBACnB,eAAe,EAAE,IAAI;wBACrB,gBAAgB,EAAE,aAAa,CAAC,MAAM;wBACtC,kBAAkB,EAAE,aAAa,CAAC,QAAQ;wBAC1C,gBAAgB,EAAE,MAAM;wBACxB,0BAA0B,EAAE,MAAM;wBAClC,YAAY,EAAE,UAAU,IAAI,gBAAgB;wBAC5C,eAAe,EAAE,OAAO;qBACzB,EACD,OAAO,EAAE;wBACP,UAAU,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,UAAU,EAAE;wBAC1D,gBAAgB,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,WAAW,EAAE;wBAC7D,QAAQ,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,SAAS,EAAE;wBACnD,WAAW,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,gBAAgB,EAAE;wBAC7D,oBAAoB,EAAE;4BACpB,MAAM,EAAE,aAAa,CAAC,iBAAiB;4BACvC,GAAG,EAAE,WAAW;yBACjB;wBACD,oBAAoB,EAAE;4BACpB,MAAM,EAAE,aAAa,CAAC,iBAAiB;4BACvC,GAAG,EAAE,WAAW;yBACjB;qBACF,GACD,CACH,IACA,CACJ;KACF,CAAC,CACH,CAAA;IAED,+EAA+E;IAC/E,8DAA8D;IAC9D,UAAU,CAAC,IAAI,CACb,uBAAC,oBAAU,IACT,IAAI,EAAE,GAAG,IAAI,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAC,sBAAsB,EAC5B,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE;YACN,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YAC7B,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;SAC/B,EACD,GAAG,EAAE;YACH,qBAAqB,EAAE,GAAG;YAC1B,8BAA8B,EAAE,MAAM;YACtC,2BAA2B,EAAE,IAAI;SAClC,GACD,CACH,CAAA;IAED,+EAA+E;IAC/E,yEAAyE;IACzE,wEAAwE;IACxE,kEAAkE;IAClE,UAAU,CAAC,IAAI,CACb,uBAAC,kBAAQ,IACP,IAAI,EAAE,GAAG,IAAI,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,GAAG,IAAI,YAAY,EAChC,WAAW,EAAE,IAAI,EACjB,GAAG,EAAE,GAAG,GACR,EACF,uBAAC,kBAAQ,IACP,IAAI,EAAE,GAAG,IAAI,gBAAgB,EAC7B,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,IAAI,EAAC,UAAU,EACf,WAAW,EAAE,GAAG,IAAI,SAAS,EAC7B,WAAW,EAAE,IAAI,EACjB,GAAG,EAAE,GAAG,GACR,EACF,uBAAC,kBAAQ,IACP,IAAI,EAAE,GAAG,IAAI,gBAAgB,EAC7B,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,IAAI,EAAC,UAAU,EACf,WAAW,EAAE,GAAG,IAAI,YAAY,EAChC,WAAW,EAAE,IAAI,EACjB,GAAG,EAAE,GAAG,GACR,EACF,uBAAC,kBAAQ,IACP,IAAI,EAAE,GAAG,IAAI,oBAAoB,EACjC,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,IAAI,EAAC,cAAc,EACnB,WAAW,EAAE,GAAG,IAAI,WAAW,EAC/B,WAAW,EAAE,IAAI,EACjB,GAAG,EAAE,GAAG,EACR,WAAW,EAAE;YACX,6CAA6C,EAAE,KAAK;YACpD,gDAAgD,EAAE,MAAM;YACxD,gDAAgD,EAAE,MAAM;SACzD,GACD,EACF,UAAU,IAAI,CACZ,uBAAC,kBAAQ,IACP,IAAI,EAAE,GAAG,IAAI,mBAAmB,EAChC,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,IAAI,EAAC,aAAa,EAClB,WAAW,EAAE,GAAG,IAAI,cAAc,EAClC,WAAW,EAAE,IAAI,EACjB,GAAG,EAAE,GAAG,GACR,CACH,CACF,CAAA;IAED,OAAO,IAAA,UAAG,EAAC,eAAQ,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAA;AAChD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@r8s/supabase",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Supabase backend platform
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "Supabase backend platform \u2014 Postgres core with GoTrue auth, PostgREST, Realtime, Storage API (S3/RustFS) and ImgProxy. This is Supabase, NOT Apache Superset.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Berget AI AB",
|
|
7
7
|
"homepage": "https://r8s.berget.ai",
|
|
@@ -30,13 +30,16 @@
|
|
|
30
30
|
},
|
|
31
31
|
"category": "Data & Analytics",
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@r8s/core": "^0.
|
|
34
|
-
"@r8s/crds": "^0.
|
|
35
|
-
"@r8s/k8s-types": "^0.
|
|
36
|
-
"@r8s/recipes": "^0.
|
|
33
|
+
"@r8s/core": "^0.3.0",
|
|
34
|
+
"@r8s/crds": "^0.3.0",
|
|
35
|
+
"@r8s/k8s-types": "^0.3.0",
|
|
36
|
+
"@r8s/recipes": "^0.3.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"typescript": "^5.3.0",
|
|
40
40
|
"vitest": "^1.0.0"
|
|
41
|
-
}
|
|
41
|
+
},
|
|
42
|
+
"files": [
|
|
43
|
+
"dist"
|
|
44
|
+
]
|
|
42
45
|
}
|