UNPKG

@supabase/supabase-js

Version:
1,347 lines (1,328 loc) 55.7 kB
//#region rolldown:runtime var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __esmMin = (fn, res) => () => (fn && (res = fn(fn = 0)), res); var __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports); var __exportAll = (all, symbols) => { let target = {}; for (var name in all) { __defProp(target, name, { get: all[name], enumerable: true }); } if (symbols) { __defProp(target, Symbol.toStringTag, { value: "Module" }); } return target; }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) { key = keys[i]; if (!__hasOwnProp.call(to, key) && key !== except) { __defProp(to, key, { get: ((k) => from[k]).bind(null, key), enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } } } return to; }; var __toCommonJS = (mod) => __hasOwnProp.call(mod, "module.exports") ? mod["module.exports"] : __copyProps(__defProp({}, "__esModule", { value: true }), mod); //#endregion let _supabase_functions_js = require("@supabase/functions-js"); let _supabase_postgrest_js = require("@supabase/postgrest-js"); let _supabase_realtime_js = require("@supabase/realtime-js"); let _supabase_storage_js = require("@supabase/storage-js"); let _supabase_auth_js = require("@supabase/auth-js"); //#region src/lib/version.ts const version = "2.106.1"; //#endregion //#region src/lib/constants.ts let JS_ENV = ""; if (typeof Deno !== "undefined") JS_ENV = "deno"; else if (typeof document !== "undefined") JS_ENV = "web"; else if (typeof navigator !== "undefined" && navigator.product === "ReactNative") JS_ENV = "react-native"; else JS_ENV = "node"; const DEFAULT_HEADERS = { "X-Client-Info": `supabase-js-${JS_ENV}/${version}` }; const DEFAULT_GLOBAL_OPTIONS = { headers: DEFAULT_HEADERS }; const DEFAULT_DB_OPTIONS = { schema: "public" }; const DEFAULT_AUTH_OPTIONS = { autoRefreshToken: true, persistSession: true, detectSessionInUrl: true, flowType: "implicit" }; const DEFAULT_REALTIME_OPTIONS = {}; const DEFAULT_TRACE_PROPAGATION_OPTIONS = { enabled: false, respectSamplingDecision: true }; //#endregion //#region ../../../node_modules/tslib/tslib.es6.mjs var tslib_es6_exports = /* @__PURE__ */ __exportAll({ __addDisposableResource: () => __addDisposableResource, __assign: () => __assign, __asyncDelegator: () => __asyncDelegator, __asyncGenerator: () => __asyncGenerator, __asyncValues: () => __asyncValues, __await: () => __await, __awaiter: () => __awaiter, __classPrivateFieldGet: () => __classPrivateFieldGet, __classPrivateFieldIn: () => __classPrivateFieldIn, __classPrivateFieldSet: () => __classPrivateFieldSet, __createBinding: () => __createBinding, __decorate: () => __decorate, __disposeResources: () => __disposeResources, __esDecorate: () => __esDecorate, __exportStar: () => __exportStar, __extends: () => __extends, __generator: () => __generator, __importDefault: () => __importDefault, __importStar: () => __importStar, __makeTemplateObject: () => __makeTemplateObject, __metadata: () => __metadata, __param: () => __param, __propKey: () => __propKey, __read: () => __read, __rest: () => __rest, __rewriteRelativeImportExtension: () => __rewriteRelativeImportExtension, __runInitializers: () => __runInitializers, __setFunctionName: () => __setFunctionName, __spread: () => __spread, __spreadArray: () => __spreadArray, __spreadArrays: () => __spreadArrays, __values: () => __values, default: () => tslib_es6_default }); function __extends(d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); } function __rest(s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") { for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; } function __decorate(decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; } function __param(paramIndex, decorator) { return function(target, key) { decorator(target, key, paramIndex); }; } function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); var _, done = false; for (var i = decorators.length - 1; i >= 0; i--) { var context = {}; for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; for (var p in contextIn.access) context.access[p] = contextIn.access[p]; context.addInitializer = function(f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); if (kind === "accessor") { if (result === void 0) continue; if (result === null || typeof result !== "object") throw new TypeError("Object expected"); if (_ = accept(result.get)) descriptor.get = _; if (_ = accept(result.set)) descriptor.set = _; if (_ = accept(result.init)) initializers.unshift(_); } else if (_ = accept(result)) if (kind === "field") initializers.unshift(_); else descriptor[key] = _; } if (target) Object.defineProperty(target, contextIn.name, descriptor); done = true; } function __runInitializers(thisArg, initializers, value) { var useValue = arguments.length > 2; for (var i = 0; i < initializers.length; i++) value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); return useValue ? value : void 0; } function __propKey(x) { return typeof x === "symbol" ? x : "".concat(x); } function __setFunctionName(f, name, prefix) { if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : ""; return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name }); } function __metadata(metadataKey, metadataValue) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); } function __awaiter(thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function(resolve) { resolve(value); }); } return new (P || (P = Promise))(function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); } function __generator(thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function(v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (g && (g = 0, op[0] && (_ = 0)), _) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } } function __exportStar(m, o) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p); } function __values(o) { var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; if (m) return m.call(o); if (o && typeof o.length === "number") return { next: function() { if (o && i >= o.length) o = void 0; return { value: o && o[i++], done: !o }; } }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); } function __read(o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; } /** @deprecated */ function __spread() { for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); return ar; } /** @deprecated */ function __spreadArrays() { for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j]; return r; } function __spreadArray(to, from, pack) { if (pack || arguments.length === 2) { for (var i = 0, l = from.length, ar; i < l; i++) if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); } function __await(v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } function __asyncGenerator(thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var g = generator.apply(thisArg, _arguments || []), i, q = []; return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function() { return this; }, i; function awaitReturn(f) { return function(v) { return Promise.resolve(v).then(f, reject); }; } function verb(n, f) { if (g[n]) { i[n] = function(v) { return new Promise(function(a, b) { q.push([ n, v, a, b ]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } } function __asyncDelegator(o) { var i, p; return i = {}, verb("next"), verb("throw", function(e) { throw e; }), verb("return"), i[Symbol.iterator] = function() { return this; }, i; function verb(n, f) { i[n] = o[n] ? function(v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; } } function __asyncValues(o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator], i; return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function() { return this; }, i); function verb(n) { i[n] = o[n] && function(v) { return new Promise(function(resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v$1) { resolve({ value: v$1, done: d }); }, reject); } } function __makeTemplateObject(cooked, raw) { if (Object.defineProperty) Object.defineProperty(cooked, "raw", { value: raw }); else cooked.raw = raw; return cooked; } function __importStar(mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) { for (var k = ownKeys$1(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); } __setModuleDefault(result, mod); return result; } function __importDefault(mod) { return mod && mod.__esModule ? mod : { default: mod }; } function __classPrivateFieldGet(receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); } function __classPrivateFieldSet(receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value; } function __classPrivateFieldIn(state, receiver) { if (receiver === null || typeof receiver !== "object" && typeof receiver !== "function") throw new TypeError("Cannot use 'in' operator on non-object"); return typeof state === "function" ? receiver === state : state.has(receiver); } function __addDisposableResource(env, value, async) { if (value !== null && value !== void 0) { if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose, inner; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); dispose = value[Symbol.asyncDispose]; } if (dispose === void 0) { if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined."); dispose = value[Symbol.dispose]; if (async) inner = dispose; } if (typeof dispose !== "function") throw new TypeError("Object not disposable."); if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } }; env.stack.push({ value, dispose, async }); } else if (async) env.stack.push({ async: true }); return value; } function __disposeResources(env) { function fail(e) { env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e; env.hasError = true; } var r, s = 0; function next() { while (r = env.stack.pop()) try { if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next); if (r.dispose) { var result = r.dispose.call(r.value); if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); }); } else s |= 1; } catch (e) { fail(e); } if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve(); if (env.hasError) throw env.error; } return next(); } function __rewriteRelativeImportExtension(path, preserveJsx) { if (typeof path === "string" && /^\.\.?\//.test(path)) return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function(m, tsx, d, ext, cm) { return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : d + ext + "." + cm.toLowerCase() + "js"; }); return path; } var extendStatics, __assign, __createBinding, __setModuleDefault, ownKeys$1, _SuppressedError, tslib_es6_default; var init_tslib_es6 = __esmMin((() => { extendStatics = function(d, b) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d$1, b$1) { d$1.__proto__ = b$1; } || function(d$1, b$1) { for (var p in b$1) if (Object.prototype.hasOwnProperty.call(b$1, p)) d$1[p] = b$1[p]; }; return extendStatics(d, b); }; __assign = function() { __assign = Object.assign || function __assign$1(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; __createBinding = Object.create ? (function(o, m, k, k2) { if (k2 === void 0) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) desc = { enumerable: true, get: function() { return m[k]; } }; Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === void 0) k2 = k; o[k2] = m[k]; }); __setModuleDefault = Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }; ownKeys$1 = function(o) { ownKeys$1 = Object.getOwnPropertyNames || function(o$1) { var ar = []; for (var k in o$1) if (Object.prototype.hasOwnProperty.call(o$1, k)) ar[ar.length] = k; return ar; }; return ownKeys$1(o); }; _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) { var e = new Error(message); return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; }; tslib_es6_default = { __extends, __assign, __rest, __decorate, __param, __esDecorate, __runInitializers, __propKey, __setFunctionName, __metadata, __awaiter, __generator, __createBinding, __exportStar, __values, __read, __spread, __spreadArrays, __spreadArray, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault, __classPrivateFieldGet, __classPrivateFieldSet, __classPrivateFieldIn, __addDisposableResource, __disposeResources, __rewriteRelativeImportExtension }; })); //#endregion //#region ../../shared/tracing/dist/main/types.js var require_types = /* @__PURE__ */ __commonJSMin(((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); })); //#endregion //#region ../../shared/tracing/dist/main/extract.js var require_extract = /* @__PURE__ */ __commonJSMin(((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports._resetOtelCache = _resetOtelCache; exports.extractTraceContext = extractTraceContext; const tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports)); let otelModulePromise = null; const OTEL_PKG = "@opentelemetry/api"; function loadOtel() { if (otelModulePromise === null) otelModulePromise = Promise.resolve(`${OTEL_PKG}`).then((s) => tslib_1.__importStar(require(s))).catch(() => null); return otelModulePromise; } /** * For tests only. Resets the cached OpenTelemetry import. * * @internal */ function _resetOtelCache() { otelModulePromise = null; } /** * Extract trace context from the OpenTelemetry API. * * Returns null if `@opentelemetry/api` is not installed or there is no active * trace context. The dynamic import is cached after the first call. * * @returns Trace context with traceparent, tracestate, and baggage headers, or null if unavailable */ function extractTraceContext() { return tslib_1.__awaiter(this, void 0, void 0, function* () { try { const otel = yield loadOtel(); if (!otel || !otel.propagation || !otel.context) return null; const carrier = {}; otel.propagation.inject(otel.context.active(), carrier); const traceparent = carrier["traceparent"]; if (!traceparent) return null; return { traceparent, tracestate: carrier["tracestate"], baggage: carrier["baggage"] }; } catch (_a) { return null; } }); } })); //#endregion //#region ../../shared/tracing/dist/main/parse.js var require_parse = /* @__PURE__ */ __commonJSMin(((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.parseTraceParent = parseTraceParent; /** * Parse W3C traceparent header according to the specification. * * The traceparent header format is: version-traceid-parentid-traceflags * - version: 2 hex digits (currently always "00") * - traceid: 32 hex digits (128-bit trace identifier) * - parentid: 16 hex digits (64-bit span/parent identifier) * - traceflags: 2 hex digits (8-bit flags, bit 0 is sampled flag) * * @param traceparent - The traceparent header value * @returns Parsed traceparent object, or null if invalid format * * @see https://www.w3.org/TR/trace-context/#traceparent-header * * @example * ```typescript * const parsed = parseTraceParent('00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01') * * console.log(parsed) * // { * // version: '00', * // traceId: '0af7651916cd43dd8448eb211c80319c', * // parentId: 'b7ad6b7169203331', * // traceFlags: '01', * // isSampled: true * // } * ``` */ function parseTraceParent(traceparent) { if (!traceparent || typeof traceparent !== "string") return null; const parts = traceparent.split("-"); if (parts.length !== 4) return null; const [version$1, traceId, parentId, traceFlags] = parts; if (version$1.length !== 2 || traceId.length !== 32 || parentId.length !== 16 || traceFlags.length !== 2) return null; const hexRegex = /^[0-9a-f]+$/i; if (!hexRegex.test(version$1) || !hexRegex.test(traceId) || !hexRegex.test(parentId) || !hexRegex.test(traceFlags)) return null; if (traceId === "00000000000000000000000000000000" || parentId === "0000000000000000") return null; return { version: version$1, traceId, parentId, traceFlags, isSampled: (parseInt(traceFlags, 16) & 1) === 1 }; } })); //#endregion //#region ../../shared/tracing/dist/main/validate.js var require_validate = /* @__PURE__ */ __commonJSMin(((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.shouldPropagateToTarget = shouldPropagateToTarget; /** * Check if trace context should be propagated to the target URL. * * This function checks if the target URL matches any of the configured * propagation targets. Targets can be: * - String: Exact hostname match or wildcard domain (*.example.com) * - RegExp: Pattern matching hostname * - Function: Custom logic to determine if URL should receive trace context * * @param targetUrl - The URL to check * @param targets - Array of propagation targets * @returns True if trace context should be propagated, false otherwise * * @example * ```typescript * const targets = [ * 'myproject.supabase.co', // Exact match * '*.supabase.co', // Wildcard domain * /.*\.supabase\.co$/, // Regex pattern * (url) => url.hostname === 'localhost' // Custom function * ] * * shouldPropagateToTarget('https://myproject.supabase.co/rest/v1/table', targets) * // true * * shouldPropagateToTarget('https://evil.com/api', targets) * // false * ``` */ function shouldPropagateToTarget(targetUrl, targets) { if (!targetUrl || !targets || targets.length === 0) return false; let url; if (targetUrl instanceof URL) url = targetUrl; else try { url = new URL(targetUrl); } catch (error) { return false; } for (const target of targets) try { if (typeof target === "string") { if (matchStringTarget(url.hostname, target)) return true; } else if (target instanceof RegExp) { if (target.test(url.hostname)) return true; } else if (typeof target === "function") { if (target(url)) return true; } } catch (error) { continue; } return false; } /** * Match hostname against string target (exact match or wildcard) * * @param hostname - The hostname to check * @param target - The target pattern (exact or wildcard) * @returns True if hostname matches target */ function matchStringTarget(hostname, target) { if (target === hostname) return true; if (target.startsWith("*.")) { const domain = target.slice(2); if (hostname.endsWith(domain)) { if (hostname === domain || hostname.endsWith("." + domain)) return true; } } return false; } })); //#endregion //#region ../../shared/tracing/dist/main/defaults.js var require_defaults = /* @__PURE__ */ __commonJSMin(((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.getDefaultPropagationTargets = getDefaultPropagationTargets; /** * Generate default propagation targets based on the Supabase project URL. * * By default, trace context is only propagated to Supabase domains for * security. This prevents leaking trace context to potentially malicious * third-party services. * * Wildcard strings (e.g. `*.supabase.co`) are matched with linear string * operations rather than regex, avoiding ReDoS risk. * * @param supabaseUrl - The Supabase project URL * @returns Array of default propagation targets */ function getDefaultPropagationTargets(supabaseUrl) { const targets = []; try { const url = new URL(supabaseUrl); targets.push(url.hostname); } catch (error) {} targets.push("*.supabase.co", "*.supabase.in"); targets.push("localhost", "127.0.0.1", "[::1]"); return targets; } })); //#endregion //#region ../../shared/tracing/dist/main/index.js var require_main = /* @__PURE__ */ __commonJSMin(((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports)); tslib_1.__exportStar(require_types(), exports); tslib_1.__exportStar(require_extract(), exports); tslib_1.__exportStar(require_parse(), exports); tslib_1.__exportStar(require_validate(), exports); tslib_1.__exportStar(require_defaults(), exports); })); //#endregion //#region \0@oxc-project+runtime@0.103.0/helpers/typeof.js var import_main = require_main(); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o$1) { return typeof o$1; } : function(o$1) { return o$1 && "function" == typeof Symbol && o$1.constructor === Symbol && o$1 !== Symbol.prototype ? "symbol" : typeof o$1; }, _typeof(o); } //#endregion //#region \0@oxc-project+runtime@0.103.0/helpers/toPrimitive.js function toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } //#endregion //#region \0@oxc-project+runtime@0.103.0/helpers/toPropertyKey.js function toPropertyKey(t) { var i = toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } //#endregion //#region \0@oxc-project+runtime@0.103.0/helpers/defineProperty.js function _defineProperty(e, r, t) { return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } //#endregion //#region \0@oxc-project+runtime@0.103.0/helpers/objectSpread2.js function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function(r$1) { return Object.getOwnPropertyDescriptor(e, r$1).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread2(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function(r$1) { _defineProperty(e, r$1, t[r$1]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r$1) { Object.defineProperty(e, r$1, Object.getOwnPropertyDescriptor(t, r$1)); }); } return e; } //#endregion //#region src/lib/fetch.ts const resolveFetch = (customFetch) => { if (customFetch) return (...args) => customFetch(...args); return (...args) => fetch(...args); }; const resolveHeadersConstructor = () => { return Headers; }; const fetchWithAuth = (supabaseKey, supabaseUrl, getAccessToken, customFetch, tracePropagationOptions) => { const fetch$1 = resolveFetch(customFetch); const HeadersConstructor = resolveHeadersConstructor(); const traceEnabled = (tracePropagationOptions === null || tracePropagationOptions === void 0 ? void 0 : tracePropagationOptions.enabled) === true; const respectSampling = (tracePropagationOptions === null || tracePropagationOptions === void 0 ? void 0 : tracePropagationOptions.respectSamplingDecision) !== false; const traceTargets = traceEnabled ? (0, import_main.getDefaultPropagationTargets)(supabaseUrl) : null; return async (input, init) => { var _await$getAccessToken; const accessToken = (_await$getAccessToken = await getAccessToken()) !== null && _await$getAccessToken !== void 0 ? _await$getAccessToken : supabaseKey; let headers = new HeadersConstructor(init === null || init === void 0 ? void 0 : init.headers); if (!headers.has("apikey")) headers.set("apikey", supabaseKey); if (!headers.has("Authorization")) headers.set("Authorization", `Bearer ${accessToken}`); if (traceTargets) { const traceHeaders = await getTraceHeaders(input, traceTargets, respectSampling); if (traceHeaders) { if (traceHeaders.traceparent && !headers.has("traceparent")) headers.set("traceparent", traceHeaders.traceparent); if (traceHeaders.tracestate && !headers.has("tracestate")) headers.set("tracestate", traceHeaders.tracestate); if (traceHeaders.baggage && !headers.has("baggage")) headers.set("baggage", traceHeaders.baggage); } } return fetch$1(input, _objectSpread2(_objectSpread2({}, init), {}, { headers })); }; }; async function getTraceHeaders(input, targets, respectSampling) { if (!(0, import_main.shouldPropagateToTarget)(typeof input === "string" ? input : input instanceof URL ? input : input.url, targets)) return null; const traceContext = await (0, import_main.extractTraceContext)(); if (!traceContext || !traceContext.traceparent) return null; if (respectSampling) { const parsed = (0, import_main.parseTraceParent)(traceContext.traceparent); if (parsed && !parsed.isSampled) return null; } return traceContext; } //#endregion //#region src/lib/helpers.ts function normalizeTracePropagation(value) { return typeof value === "boolean" ? { enabled: value } : value; } function ensureTrailingSlash(url) { return url.endsWith("/") ? url : url + "/"; } function applySettingDefaults(options, defaults) { var _DEFAULT_GLOBAL_OPTIO, _globalOptions$header, _ref, _tracePropagationOpti, _ref2, _tracePropagationOpti2; const { db: dbOptions, auth: authOptions, realtime: realtimeOptions, global: globalOptions } = options; const { db: DEFAULT_DB_OPTIONS$1, auth: DEFAULT_AUTH_OPTIONS$1, realtime: DEFAULT_REALTIME_OPTIONS$1, global: DEFAULT_GLOBAL_OPTIONS$1 } = defaults; const tracePropagationOptions = normalizeTracePropagation(options.tracePropagation); const DEFAULT_TRACE_PROPAGATION_OPTIONS$1 = normalizeTracePropagation(defaults.tracePropagation); const result = { db: _objectSpread2(_objectSpread2({}, DEFAULT_DB_OPTIONS$1), dbOptions), auth: _objectSpread2(_objectSpread2({}, DEFAULT_AUTH_OPTIONS$1), authOptions), realtime: _objectSpread2(_objectSpread2({}, DEFAULT_REALTIME_OPTIONS$1), realtimeOptions), storage: {}, global: _objectSpread2(_objectSpread2(_objectSpread2({}, DEFAULT_GLOBAL_OPTIONS$1), globalOptions), {}, { headers: _objectSpread2(_objectSpread2({}, (_DEFAULT_GLOBAL_OPTIO = DEFAULT_GLOBAL_OPTIONS$1 === null || DEFAULT_GLOBAL_OPTIONS$1 === void 0 ? void 0 : DEFAULT_GLOBAL_OPTIONS$1.headers) !== null && _DEFAULT_GLOBAL_OPTIO !== void 0 ? _DEFAULT_GLOBAL_OPTIO : {}), (_globalOptions$header = globalOptions === null || globalOptions === void 0 ? void 0 : globalOptions.headers) !== null && _globalOptions$header !== void 0 ? _globalOptions$header : {}) }), tracePropagation: { enabled: (_ref = (_tracePropagationOpti = tracePropagationOptions === null || tracePropagationOptions === void 0 ? void 0 : tracePropagationOptions.enabled) !== null && _tracePropagationOpti !== void 0 ? _tracePropagationOpti : DEFAULT_TRACE_PROPAGATION_OPTIONS$1 === null || DEFAULT_TRACE_PROPAGATION_OPTIONS$1 === void 0 ? void 0 : DEFAULT_TRACE_PROPAGATION_OPTIONS$1.enabled) !== null && _ref !== void 0 ? _ref : false, respectSamplingDecision: (_ref2 = (_tracePropagationOpti2 = tracePropagationOptions === null || tracePropagationOptions === void 0 ? void 0 : tracePropagationOptions.respectSamplingDecision) !== null && _tracePropagationOpti2 !== void 0 ? _tracePropagationOpti2 : DEFAULT_TRACE_PROPAGATION_OPTIONS$1 === null || DEFAULT_TRACE_PROPAGATION_OPTIONS$1 === void 0 ? void 0 : DEFAULT_TRACE_PROPAGATION_OPTIONS$1.respectSamplingDecision) !== null && _ref2 !== void 0 ? _ref2 : true }, accessToken: async () => "" }; if (options.accessToken) result.accessToken = options.accessToken; else delete result.accessToken; return result; } /** * Validates a Supabase client URL * * @param {string} supabaseUrl - The Supabase client URL string. * @returns {URL} - The validated base URL. * @throws {Error} */ function validateSupabaseUrl(supabaseUrl) { const trimmedUrl = supabaseUrl === null || supabaseUrl === void 0 ? void 0 : supabaseUrl.trim(); if (!trimmedUrl) throw new Error("supabaseUrl is required."); if (!trimmedUrl.match(/^https?:\/\//i)) throw new Error("Invalid supabaseUrl: Must be a valid HTTP or HTTPS URL."); try { return new URL(ensureTrailingSlash(trimmedUrl)); } catch (_unused) { throw Error("Invalid supabaseUrl: Provided URL is malformed."); } } //#endregion //#region src/lib/SupabaseAuthClient.ts var SupabaseAuthClient = class extends _supabase_auth_js.AuthClient { constructor(options) { super(options); } }; //#endregion //#region src/SupabaseClient.ts /** * Supabase Client. * * An isomorphic Javascript client for interacting with Postgres. */ var SupabaseClient = class { /** * Create a new client for use in the browser. * * @category Initializing * * @param supabaseUrl The unique Supabase URL which is supplied when you create a new project in your project dashboard. * @param supabaseKey The unique Supabase Key which is supplied when you create a new project in your project dashboard. * @param options.db.schema You can switch in between schemas. The schema needs to be on the list of exposed schemas inside Supabase. * @param options.auth.autoRefreshToken Set to "true" if you want to automatically refresh the token before expiring. * @param options.auth.persistSession Set to "true" if you want to automatically save the user session into local storage. * @param options.auth.detectSessionInUrl Set to "true" if you want to automatically detects OAuth grants in the URL and signs in the user. * @param options.realtime Options passed along to realtime-js constructor. * @param options.storage Options passed along to the storage-js constructor. * @param options.global.fetch A custom fetch implementation. * @param options.global.headers Any additional headers to send with each network request. * * @example Creating a client * ```js * import { createClient } from '@supabase/supabase-js' * * // Create a single supabase client for interacting with your database * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key') * ``` * * @example With a custom domain * ```js * import { createClient } from '@supabase/supabase-js' * * // Use a custom domain as the supabase URL * const supabase = createClient('https://my-custom-domain.com', 'your-publishable-key') * ``` * * @example With additional parameters * ```js * import { createClient } from '@supabase/supabase-js' * * const options = { * db: { * schema: 'public', * }, * auth: { * autoRefreshToken: true, * persistSession: true, * detectSessionInUrl: true * }, * global: { * headers: { 'x-my-custom-header': 'my-app-name' }, * }, * } * const supabase = createClient("https://xyzcompany.supabase.co", "your-publishable-key", options) * ``` * * @exampleDescription With custom schemas * By default the API server points to the `public` schema. You can enable other database schemas within the Dashboard. * Go to [Settings > API > Exposed schemas](/dashboard/project/_/settings/api) and add the schema which you want to expose to the API. * * Note: each client connection can only access a single schema, so the code above can access the `other_schema` schema but cannot access the `public` schema. * * @example With custom schemas * ```js * import { createClient } from '@supabase/supabase-js' * * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key', { * // Provide a custom schema. Defaults to "public". * db: { schema: 'other_schema' } * }) * ``` * * @exampleDescription Custom fetch implementation * `supabase-js` uses the [`cross-fetch`](https://www.npmjs.com/package/cross-fetch) library to make HTTP requests, * but an alternative `fetch` implementation can be provided as an option. * This is most useful in environments where `cross-fetch` is not compatible (for instance Cloudflare Workers). * * @example Custom fetch implementation * ```js * import { createClient } from '@supabase/supabase-js' * * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key', { * global: { fetch: fetch.bind(globalThis) } * }) * ``` * * @exampleDescription React Native options with AsyncStorage * For React Native we recommend using `AsyncStorage` as the storage implementation for Supabase Auth. * * @example React Native options with AsyncStorage * ```js * import 'react-native-url-polyfill/auto' * import { createClient } from '@supabase/supabase-js' * import AsyncStorage from "@react-native-async-storage/async-storage"; * * const supabase = createClient("https://xyzcompany.supabase.co", "your-publishable-key", { * auth: { * storage: AsyncStorage, * autoRefreshToken: true, * persistSession: true, * detectSessionInUrl: false, * }, * }); * ``` * * @exampleDescription React Native options with Expo SecureStore * If you wish to encrypt the user's session information, you can use `aes-js` and store the encryption key in Expo SecureStore. * The `aes-js` library, a reputable JavaScript-only implementation of the AES encryption algorithm in CTR mode. * A new 256-bit encryption key is generated using the `react-native-get-random-values` library. * This key is stored inside Expo's SecureStore, while the value is encrypted and placed inside AsyncStorage. * * Please make sure that: * - You keep the `expo-secure-store`, `aes-js` and `react-native-get-random-values` libraries up-to-date. * - Choose the correct [`SecureStoreOptions`](https://docs.expo.dev/versions/latest/sdk/securestore/#securestoreoptions) for your app's needs. * E.g. [`SecureStore.WHEN_UNLOCKED`](https://docs.expo.dev/versions/latest/sdk/securestore/#securestorewhen_unlocked) regulates when the data can be accessed. * - Carefully consider optimizations or other modifications to the above example, as those can lead to introducing subtle security vulnerabilities. * * @example React Native options with Expo SecureStore * ```ts * import 'react-native-url-polyfill/auto' * import { createClient } from '@supabase/supabase-js' * import AsyncStorage from '@react-native-async-storage/async-storage'; * import * as SecureStore from 'expo-secure-store'; * import * as aesjs from 'aes-js'; * import 'react-native-get-random-values'; * * // As Expo's SecureStore does not support values larger than 2048 * // bytes, an AES-256 key is generated and stored in SecureStore, while * // it is used to encrypt/decrypt values stored in AsyncStorage. * class LargeSecureStore { * private async _encrypt(key: string, value: string) { * const encryptionKey = crypto.getRandomValues(new Uint8Array(256 / 8)); * * const cipher = new aesjs.ModeOfOperation.ctr(encryptionKey, new aesjs.Counter(1)); * const encryptedBytes = cipher.encrypt(aesjs.utils.utf8.toBytes(value)); * * await SecureStore.setItemAsync(key, aesjs.utils.hex.fromBytes(encryptionKey)); * * return aesjs.utils.hex.fromBytes(encryptedBytes); * } * * private async _decrypt(key: string, value: string) { * const encryptionKeyHex = await SecureStore.getItemAsync(key); * if (!encryptionKeyHex) { * return encryptionKeyHex; * } * * const cipher = new aesjs.ModeOfOperation.ctr(aesjs.utils.hex.toBytes(encryptionKeyHex), new aesjs.Counter(1)); * const decryptedBytes = cipher.decrypt(aesjs.utils.hex.toBytes(value)); * * return aesjs.utils.utf8.fromBytes(decryptedBytes); * } * * async getItem(key: string) { * const encrypted = await AsyncStorage.getItem(key); * if (!encrypted) { return encrypted; } * * return await this._decrypt(key, encrypted); * } * * async removeItem(key: string) { * await AsyncStorage.removeItem(key); * await SecureStore.deleteItemAsync(key); * } * * async setItem(key: string, value: string) { * const encrypted = await this._encrypt(key, value); * * await AsyncStorage.setItem(key, encrypted); * } * } * * const supabase = createClient("https://xyzcompany.supabase.co", "your-publishable-key", { * auth: { * storage: new LargeSecureStore(), * autoRefreshToken: true, * persistSession: true, * detectSessionInUrl: false, * }, * }); * ``` * * @example With a database query * ```ts * import { createClient } from '@supabase/supabase-js' * * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key') * * const { data } = await supabase.from('profiles').select('*') * ``` */ constructor(supabaseUrl, supabaseKey, options) { var _settings$auth$storag, _settings$global$head; this.supabaseUrl = supabaseUrl; this.supabaseKey = supabaseKey; const baseUrl = validateSupabaseUrl(supabaseUrl); if (!supabaseKey) throw new Error("supabaseKey is required."); this.realtimeUrl = new URL("realtime/v1", baseUrl); this.realtimeUrl.protocol = this.realtimeUrl.protocol.replace("http", "ws"); this.authUrl = new URL("auth/v1", baseUrl); this.storageUrl = new URL("storage/v1", baseUrl); this.functionsUrl = new URL("functions/v1", baseUrl); const defaultStorageKey = `sb-${baseUrl.hostname.split(".")[0]}-auth-token`; const DEFAULTS = { db: DEFAULT_DB_OPTIONS, realtime: DEFAULT_REALTIME_OPTIONS, auth: _objectSpread2(_objectSpread2({}, DEFAULT_AUTH_OPTIONS), {}, { storageKey: defaultStorageKey }), global: DEFAULT_GLOBAL_OPTIONS, tracePropagation: DEFAULT_TRACE_PROPAGATION_OPTIONS }; const settings = applySettingDefaults(options !== null && options !== void 0 ? options : {}, DEFAULTS); this.settings = settings; this.storageKey = (_settings$auth$storag = settings.auth.storageKey) !== null && _settings$auth$storag !== void 0 ? _settings$auth$storag : ""; this.headers = (_settings$global$head = settings.global.headers) !== null && _settings$global$head !== void 0 ? _settings$global$head : {}; if (!settings.accessToken) { var _settings$auth; this.auth = this._initSupabaseAuthClient((_settings$auth = settings.auth) !== null && _settings$auth !== void 0 ? _settings$auth : {}, this.headers, settings.global.fetch); } else { this.accessToken = settings.accessToken; this.auth = new Proxy({}, { get: (_, prop) => { throw new Error(`@supabase/supabase-js: Supabase Client is configured with the accessToken option, accessing supabase.auth.${String(prop)} is not possible`); } }); } this.fetch = fetchWithAuth(supabaseKey, supabaseUrl, this._getAccessToken.bind(this), settings.global.fetch, settings.tracePropagation); this.realtime = this._initRealtimeClient(_objectSpread2({ headers: this.headers, accessToken: this._getAccessToken.bind(this), fetch: this.fetch }, settings.realtime)); if (this.accessToken) Promise.resolve(this.accessToken()).then((token) => this.realtime.setAuth(token)).catch((e) => console.warn("Failed to set initial Realtime auth token:", e)); this.rest = new _supabase_postgrest_js.PostgrestClient(new URL("rest/v1", baseUrl).href, { headers: this.headers, schema: settings.db.schema, fetch: this.fetch, timeout: settings.db.timeout, urlLengthLimit: settings.db.urlLengthLimit }); this.storage = new _supabase_storage_js.StorageClient(this.storageUrl.href, this.headers, this.fetch, options === null || options === void 0 ? void 0 : options.storage); if (!settings.accessToken) this._listenForAuthEvents(); } /** * Supabase Functions allows you to deploy and invoke edge functions. */ get functions() { return new _supabase_functions_js.FunctionsClient(this.functionsUrl.href, { headers: this.headers, customFetch: this.fetch }); } /** * Perform a query on a table or a view. * * @param relation - The table or view name to query */ from(relation) { return this.rest.from(relation); } /** * Select a schema to query or perform an function (rpc) call. * * The schema needs to be on the list of exposed schemas inside Supabase. * * @param schema - The schema to query */ schema(schema) { return this.rest.schema(schema); } /** * Perform a function call. * * @param fn - The function name to call * @param args - The arguments to pass to the function call * @param options - Named parameters * @param options.head - When set to `true`, `data` will not be returned. * Useful if you only need the count. * @param options.get - When set to `true`, the function will be called with * read-only access mode. * @param options.count - Count algorithm to use to count rows returned by the * function. Only applicable for [set-returning * functions](https://www.postgresql.org/docs/current/functions-srf.html). * * `"exact"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the * hood. * * `"planned"`: Approximated but fast count algorithm. Uses the Postgres * statistics under the hood. * * `"estimated"`: Uses exact count for low numbers and planned count for high * numbers. */ rpc(fn, args = {}, options = { head: false, get: false, count: void 0 }) { return this.rest.rpc(fn, args, options); } /** * Creates a Realtime channel with Broadcast, Presence, and Postgres Changes. * * @param {string} name - The name of the Realtime channel. * @param {Object} opts - The options to pass to the Realtime channel. * * @category Realtime */ channel(name, opts = { config: {} }) { return this.realtime.channel(name, opts); } /** * Returns all Realtime channels. * * @category Realtime * * @example Get all channels * ```js * const channels = supabase.getChannels() * ``` */ getChannels() { return this.realtime.getChannels(); } /** * Unsubscribes and removes Realtime channel from Realtime client. * * @param {RealtimeChannel} channel - The name of the Realtime channel. * * * @category Realtime * * @remarks * - Removing a channel is a great way to maintain the performance of your project's Realtime service as well as your database if you're listening to Postgres changes. Supabase will automatically handle cleanup 30 seconds after a client is disconnected, but unused channels may cause degradation as more clients are simultaneously subscribed. * * @example Removes a channel * ```js * supabase.removeChannel(myChannel) * ``` */ removeChannel(channel) { return this.realtime.removeChannel(channel); } /** * Unsubscribes and