@kamod-ch/otok-supabase 1.0.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.
Files changed (100) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/LICENSE +21 -0
  3. package/README.md +248 -0
  4. package/dist/admin/create-admin-client.d.ts +4 -0
  5. package/dist/admin/create-admin-client.d.ts.map +1 -0
  6. package/dist/admin/create-admin-client.js +22 -0
  7. package/dist/admin/create-admin-client.js.map +1 -0
  8. package/dist/admin/index.d.ts +2 -0
  9. package/dist/admin/index.d.ts.map +1 -0
  10. package/dist/admin/index.js +2 -0
  11. package/dist/admin/index.js.map +1 -0
  12. package/dist/auth/actions.d.ts +13 -0
  13. package/dist/auth/actions.d.ts.map +1 -0
  14. package/dist/auth/actions.js +98 -0
  15. package/dist/auth/actions.js.map +1 -0
  16. package/dist/auth/index.d.ts +4 -0
  17. package/dist/auth/index.d.ts.map +1 -0
  18. package/dist/auth/index.js +4 -0
  19. package/dist/auth/index.js.map +1 -0
  20. package/dist/auth/middleware.d.ts +7 -0
  21. package/dist/auth/middleware.d.ts.map +1 -0
  22. package/dist/auth/middleware.js +70 -0
  23. package/dist/auth/middleware.js.map +1 -0
  24. package/dist/auth/redirects.d.ts +9 -0
  25. package/dist/auth/redirects.d.ts.map +1 -0
  26. package/dist/auth/redirects.js +45 -0
  27. package/dist/auth/redirects.js.map +1 -0
  28. package/dist/auth/routes.d.ts +10 -0
  29. package/dist/auth/routes.d.ts.map +1 -0
  30. package/dist/auth/routes.js +111 -0
  31. package/dist/auth/routes.js.map +1 -0
  32. package/dist/browser/create-browser-client.d.ts +6 -0
  33. package/dist/browser/create-browser-client.d.ts.map +1 -0
  34. package/dist/browser/create-browser-client.js +27 -0
  35. package/dist/browser/create-browser-client.js.map +1 -0
  36. package/dist/browser/index.d.ts +2 -0
  37. package/dist/browser/index.d.ts.map +1 -0
  38. package/dist/browser/index.js +2 -0
  39. package/dist/browser/index.js.map +1 -0
  40. package/dist/config.d.ts +19 -0
  41. package/dist/config.d.ts.map +1 -0
  42. package/dist/config.js +77 -0
  43. package/dist/config.js.map +1 -0
  44. package/dist/context.d.ts +6 -0
  45. package/dist/context.d.ts.map +1 -0
  46. package/dist/context.js +15 -0
  47. package/dist/context.js.map +1 -0
  48. package/dist/errors.d.ts +27 -0
  49. package/dist/errors.d.ts.map +1 -0
  50. package/dist/errors.js +74 -0
  51. package/dist/errors.js.map +1 -0
  52. package/dist/index.d.ts +10 -0
  53. package/dist/index.d.ts.map +1 -0
  54. package/dist/index.js +7 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/loader.d.ts +23 -0
  57. package/dist/loader.d.ts.map +1 -0
  58. package/dist/loader.js +27 -0
  59. package/dist/loader.js.map +1 -0
  60. package/dist/plugin.d.ts +6 -0
  61. package/dist/plugin.d.ts.map +1 -0
  62. package/dist/plugin.js +65 -0
  63. package/dist/plugin.js.map +1 -0
  64. package/dist/realtime/index.d.ts +8 -0
  65. package/dist/realtime/index.d.ts.map +1 -0
  66. package/dist/realtime/index.js +8 -0
  67. package/dist/realtime/index.js.map +1 -0
  68. package/dist/registry.d.ts +7 -0
  69. package/dist/registry.d.ts.map +1 -0
  70. package/dist/registry.js +18 -0
  71. package/dist/registry.js.map +1 -0
  72. package/dist/server/cookies.d.ts +20 -0
  73. package/dist/server/cookies.d.ts.map +1 -0
  74. package/dist/server/cookies.js +87 -0
  75. package/dist/server/cookies.js.map +1 -0
  76. package/dist/server/create-server-client.d.ts +6 -0
  77. package/dist/server/create-server-client.d.ts.map +1 -0
  78. package/dist/server/create-server-client.js +20 -0
  79. package/dist/server/create-server-client.js.map +1 -0
  80. package/dist/server/index.d.ts +3 -0
  81. package/dist/server/index.d.ts.map +1 -0
  82. package/dist/server/index.js +3 -0
  83. package/dist/server/index.js.map +1 -0
  84. package/dist/server/middleware.d.ts +6 -0
  85. package/dist/server/middleware.d.ts.map +1 -0
  86. package/dist/server/middleware.js +14 -0
  87. package/dist/server/middleware.js.map +1 -0
  88. package/dist/storage/index.d.ts +8 -0
  89. package/dist/storage/index.d.ts.map +1 -0
  90. package/dist/storage/index.js +8 -0
  91. package/dist/storage/index.js.map +1 -0
  92. package/dist/test/fixtures.d.ts +141 -0
  93. package/dist/test/fixtures.d.ts.map +1 -0
  94. package/dist/test/fixtures.js +30 -0
  95. package/dist/test/fixtures.js.map +1 -0
  96. package/dist/types.d.ts +63 -0
  97. package/dist/types.d.ts.map +1 -0
  98. package/dist/types.js +2 -0
  99. package/dist/types.js.map +1 -0
  100. package/package.json +94 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGlD,MAAM,mBAAmB,GAAG;IAC1B,eAAe,EAAE,YAAY;IAC7B,aAAa,EAAE,QAAQ;IACvB,iBAAiB,EAAE,CAAC,GAAG,CAAU;CAClC,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,GAAS,EAAE,OAA8B;IAC5E,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,KAAK,KAAK,CAAC;IAC1D,MAAM,UAAU,GAAG;QACjB,GAAG,mBAAmB;QACtB,GAAG,OAAO,CAAC,UAAU;KACtB,CAAC;IAEF,MAAM,OAAO,GAAoB;QAC/B,MAAM;QACN,UAAU;QACV,eAAe;KAChB,CAAC;IAEF,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAEjC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAE/B,IAAI,eAAe,EAAE,CAAC;QACpB,wBAAwB,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,qBAAqB,GAAG,YAAY,CAAwB;IAChE,IAAI,EAAE,yBAAyB;IAC/B,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE;QACN,KAAK,CAAC,KAAK;YACT,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACxC,MAAM,IAAI,0BAA0B,CAAC,uCAAuC,CAAC,CAAC;YAChF,CAAC;YACD,sBAAsB,CAAC,KAA8B,CAAC,CAAC;YACvD,OAAO,KAA8B,CAAC;QACxC,CAAC;KACF;IACD,SAAS,EAAE;QACT,KAAK,CAAC,KAAK;YACT,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;YACvC,MAAM,cAAc,GAAG,KAAK,CAAC,wBAAwB,EAAE,IAAI,EAAE,CAAC;YAC9D,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC9B,MAAM,IAAI,0BAA0B,CAAC,0CAA0C,CAAC,CAAC;YACnF,CAAC;YACD,IAAI,cAAc,KAAK,SAAS,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpD,MAAM,IAAI,0BAA0B,CAAC,sDAAsD,CAAC,CAAC;YAC/F,CAAC;YACD,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,sBAAsB,EAAE,cAAc,EAAE,CAAC;QACtE,CAAC;KACF;CACF,CAAC,CAAC;AAEH,sEAAsE;AACtE,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,OAA8B;IACnE,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,CAAC,YAAY,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;QAChC,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { RealtimeChannel, RealtimeChannelOptions, SupabaseClient } from "@supabase/supabase-js";
2
+ export type { RealtimeChannel, SupabaseClient };
3
+ /**
4
+ * Create a Supabase Realtime channel through the typed client.
5
+ * Future Otok-specific presence and SSR-safe subscription helpers will live here.
6
+ */
7
+ export declare function createSupabaseChannel<Database>(client: SupabaseClient<Database>, name: string, options?: RealtimeChannelOptions): RealtimeChannel;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/realtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAErG,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC;AAEhD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAC5C,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,EAChC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,sBAAsB,GAC/B,eAAe,CAEjB"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Create a Supabase Realtime channel through the typed client.
3
+ * Future Otok-specific presence and SSR-safe subscription helpers will live here.
4
+ */
5
+ export function createSupabaseChannel(client, name, options) {
6
+ return client.channel(name, options);
7
+ }
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/realtime/index.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAgC,EAChC,IAAY,EACZ,OAAgC;IAEhC,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { SupabaseRuntime } from "./types.js";
2
+ /** @internal Test helper */
3
+ export declare function resetSupabaseRuntimeForTests(): void;
4
+ export declare function registerSupabaseRuntime(value: SupabaseRuntime): void;
5
+ export declare function getSupabaseRuntime(): SupabaseRuntime;
6
+ export declare function tryGetSupabaseRuntime(): SupabaseRuntime | null;
7
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlD,4BAA4B;AAC5B,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAEpE;AAED,wBAAgB,kBAAkB,IAAI,eAAe,CAOpD;AAED,wBAAgB,qBAAqB,IAAI,eAAe,GAAG,IAAI,CAE9D"}
@@ -0,0 +1,18 @@
1
+ let runtime = null;
2
+ /** @internal Test helper */
3
+ export function resetSupabaseRuntimeForTests() {
4
+ runtime = null;
5
+ }
6
+ export function registerSupabaseRuntime(value) {
7
+ runtime = value;
8
+ }
9
+ export function getSupabaseRuntime() {
10
+ if (!runtime) {
11
+ throw new Error("otok-supabase: no runtime registered. Add supabase() to otok.config.ts plugins or call registerSupabaseRuntime().");
12
+ }
13
+ return runtime;
14
+ }
15
+ export function tryGetSupabaseRuntime() {
16
+ return runtime;
17
+ }
18
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAEA,IAAI,OAAO,GAA2B,IAAI,CAAC;AAE3C,4BAA4B;AAC5B,MAAM,UAAU,4BAA4B;IAC1C,OAAO,GAAG,IAAI,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAsB;IAC5D,OAAO,GAAG,KAAK,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,mHAAmH,CACpH,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { Context } from "hono";
2
+ import { type SupabaseConfig, type SupabaseCookieOptions } from "../config.js";
3
+ export interface CookieRecord {
4
+ name: string;
5
+ value: string;
6
+ }
7
+ export declare function readRequestCookies(c: Context): CookieRecord[];
8
+ export declare function readRequestCookie(c: Context, name: string): string | undefined;
9
+ export declare function writeResponseCookie(c: Context, name: string, value: string, options: Record<string, unknown> | undefined, defaults: SupabaseCookieOptions | undefined): void;
10
+ export declare function createOtokSupabaseCookieMethods(c: Context, config: SupabaseConfig): {
11
+ getAll(): CookieRecord[];
12
+ setAll(cookiesToSet: Array<{
13
+ name: string;
14
+ value: string;
15
+ options: Record<string, unknown>;
16
+ }>, headers?: Record<string, string>): void;
17
+ };
18
+ export declare function getSetCookieHeaders(response: Response): string[];
19
+ export declare function mergeResponseHeaders(existing: Headers, incoming: Headers): Headers;
20
+ //# sourceMappingURL=cookies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../../src/server/cookies.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,EAAsB,KAAK,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAGnG,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,OAAO,GAAG,YAAY,EAAE,CAG7D;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE9E;AA2BD,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,OAAO,EACV,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC5C,QAAQ,EAAE,qBAAqB,GAAG,SAAS,GAC1C,IAAI,CAEN;AAED,wBAAgB,+BAA+B,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc;;yBAQ9D,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,YAC5E,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;EAsBrC;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,CAOhE;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAYlF"}
@@ -0,0 +1,87 @@
1
+ import { parseCookieHeader, serializeCookieHeader } from "@supabase/ssr";
2
+ import { getCookie, setCookie } from "hono/cookie";
3
+ import { mergeCookieOptions } from "../config.js";
4
+ import { SupabaseCookieError } from "../errors.js";
5
+ export function readRequestCookies(c) {
6
+ const header = c.req.header("Cookie") ?? "";
7
+ return parseCookieHeader(header).map(({ name, value }) => ({ name, value: value ?? "" }));
8
+ }
9
+ export function readRequestCookie(c, name) {
10
+ return getCookie(c, name);
11
+ }
12
+ function resolveSameSite(value) {
13
+ if (typeof value !== "string")
14
+ return undefined;
15
+ const normalized = value.toLowerCase();
16
+ if (normalized === "strict")
17
+ return "Strict";
18
+ if (normalized === "lax")
19
+ return "Lax";
20
+ if (normalized === "none")
21
+ return "None";
22
+ return undefined;
23
+ }
24
+ function toHonoCookieOptions(options, defaults) {
25
+ const merged = mergeCookieOptions(options, defaults);
26
+ return {
27
+ domain: typeof merged.domain === "string" ? merged.domain : undefined,
28
+ path: typeof merged.path === "string" ? merged.path : "/",
29
+ secure: typeof merged.secure === "boolean" ? merged.secure : undefined,
30
+ sameSite: resolveSameSite(merged.sameSite),
31
+ httpOnly: typeof merged.httpOnly === "boolean" ? merged.httpOnly : undefined,
32
+ maxAge: typeof merged.maxAge === "number" ? merged.maxAge : undefined,
33
+ expires: merged.expires instanceof Date ? merged.expires : undefined,
34
+ };
35
+ }
36
+ export function writeResponseCookie(c, name, value, options, defaults) {
37
+ setCookie(c, name, value, toHonoCookieOptions(options, defaults));
38
+ }
39
+ export function createOtokSupabaseCookieMethods(c, config) {
40
+ const defaults = config.cookieOptions;
41
+ return {
42
+ getAll() {
43
+ return readRequestCookies(c);
44
+ },
45
+ setAll(cookiesToSet, headers) {
46
+ try {
47
+ for (const { name, value, options } of cookiesToSet) {
48
+ writeResponseCookie(c, name, value, options, defaults);
49
+ c.res.headers.append("Set-Cookie", serializeCookieHeader(name, value, mergeCookieOptions(options, defaults)));
50
+ }
51
+ if (headers) {
52
+ for (const [key, value] of Object.entries(headers)) {
53
+ if (value !== undefined) {
54
+ c.header(key, value);
55
+ }
56
+ }
57
+ }
58
+ }
59
+ catch (cause) {
60
+ throw new SupabaseCookieError(cause instanceof Error ? cause.message : "Failed to write Supabase session cookies.");
61
+ }
62
+ },
63
+ };
64
+ }
65
+ export function getSetCookieHeaders(response) {
66
+ if (typeof response.headers.getSetCookie === "function") {
67
+ return response.headers.getSetCookie();
68
+ }
69
+ const raw = response.headers.get("Set-Cookie");
70
+ if (!raw)
71
+ return [];
72
+ return raw.split(/,(?=\s*[^;,=\s]+=)/);
73
+ }
74
+ export function mergeResponseHeaders(existing, incoming) {
75
+ const merged = new Headers(existing);
76
+ incoming.forEach((value, key) => {
77
+ if (key.toLowerCase() === "set-cookie") {
78
+ merged.append("Set-Cookie", value);
79
+ return;
80
+ }
81
+ if (!merged.has(key)) {
82
+ merged.set(key, value);
83
+ }
84
+ });
85
+ return merged;
86
+ }
87
+ //# sourceMappingURL=cookies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookies.js","sourceRoot":"","sources":["../../src/server/cookies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { SupabaseClient } from "@supabase/supabase-js";
2
+ import type { Context } from "hono";
3
+ import { type SupabaseConfig } from "../config.js";
4
+ export declare function createOtokSupabaseServerClient<Database>(context: Context, config: SupabaseConfig): SupabaseClient<Database>;
5
+ export { createOtokSupabaseCookieMethods, readRequestCookies, writeResponseCookie } from "./cookies.js";
6
+ //# sourceMappingURL=create-server-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-server-client.d.ts","sourceRoot":"","sources":["../../src/server/create-server-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAA0B,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAG3E,wBAAgB,8BAA8B,CAAC,QAAQ,EACrD,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,cAAc,GACrB,cAAc,CAAC,QAAQ,CAAC,CAe1B;AAED,OAAO,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { createServerClient } from "@supabase/ssr";
2
+ import { validateSupabaseConfig } from "../config.js";
3
+ import { createOtokSupabaseCookieMethods } from "./cookies.js";
4
+ export function createOtokSupabaseServerClient(context, config) {
5
+ const validated = validateSupabaseConfig(config);
6
+ const cookies = createOtokSupabaseCookieMethods(context, validated);
7
+ return createServerClient(validated.url, validated.publishableKey, {
8
+ cookies,
9
+ cookieOptions: validated.cookieOptions
10
+ ? {
11
+ domain: validated.cookieOptions.domain,
12
+ path: validated.cookieOptions.path,
13
+ sameSite: validated.cookieOptions.sameSite,
14
+ secure: validated.cookieOptions.secure,
15
+ }
16
+ : undefined,
17
+ });
18
+ }
19
+ export { createOtokSupabaseCookieMethods, readRequestCookies, writeResponseCookie } from "./cookies.js";
20
+ //# sourceMappingURL=create-server-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-server-client.js","sourceRoot":"","sources":["../../src/server/create-server-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGnD,OAAO,EAAE,sBAAsB,EAAuB,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAC;AAE/D,MAAM,UAAU,8BAA8B,CAC5C,OAAgB,EAChB,MAAsB;IAEtB,MAAM,SAAS,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,+BAA+B,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAEpE,OAAO,kBAAkB,CAAW,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,cAAc,EAAE;QAC3E,OAAO;QACP,aAAa,EAAE,SAAS,CAAC,aAAa;YACpC,CAAC,CAAC;gBACE,MAAM,EAAE,SAAS,CAAC,aAAa,CAAC,MAAM;gBACtC,IAAI,EAAE,SAAS,CAAC,aAAa,CAAC,IAAI;gBAClC,QAAQ,EAAE,SAAS,CAAC,aAAa,CAAC,QAAQ;gBAC1C,MAAM,EAAE,SAAS,CAAC,aAAa,CAAC,MAAM;aACvC;YACH,CAAC,CAAC,SAAS;KACd,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { supabase, createOtokSupabaseServerClient } from "./middleware.js";
2
+ export { createOtokSupabaseCookieMethods, readRequestCookies, readRequestCookie, writeResponseCookie, getSetCookieHeaders, mergeResponseHeaders, } from "./cookies.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,8BAA8B,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EACL,+BAA+B,EAC/B,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { supabase, createOtokSupabaseServerClient } from "./middleware.js";
2
+ export { createOtokSupabaseCookieMethods, readRequestCookies, readRequestCookie, writeResponseCookie, getSetCookieHeaders, mergeResponseHeaders, } from "./cookies.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,8BAA8B,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EACL,+BAA+B,EAC/B,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { MiddlewareHandler } from "hono";
2
+ import { type SupabaseConfig } from "../config.js";
3
+ import type { SupabaseEnv } from "../types.js";
4
+ export declare function supabase<Database = unknown>(config: SupabaseConfig): MiddlewareHandler<SupabaseEnv<Database>>;
5
+ export { createOtokSupabaseServerClient } from "./create-server-client.js";
6
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/server/middleware.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,EAA0B,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,wBAAgB,QAAQ,CAAC,QAAQ,GAAG,OAAO,EAAE,MAAM,EAAE,cAAc,GAAG,iBAAiB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAS7G;AAED,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { createMiddleware } from "hono/factory";
2
+ import { validateSupabaseConfig } from "../config.js";
3
+ import { createOtokSupabaseServerClient } from "./create-server-client.js";
4
+ export function supabase(config) {
5
+ const validated = validateSupabaseConfig(config);
6
+ return createMiddleware(async (c, next) => {
7
+ const client = createOtokSupabaseServerClient(c, validated);
8
+ c.set("supabase", client);
9
+ await client.auth.getSession();
10
+ await next();
11
+ });
12
+ }
13
+ export { createOtokSupabaseServerClient } from "./create-server-client.js";
14
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/server/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,sBAAsB,EAAuB,MAAM,cAAc,CAAC;AAE3E,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAE3E,MAAM,UAAU,QAAQ,CAAqB,MAAsB;IACjE,MAAM,SAAS,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAEjD,OAAO,gBAAgB,CAAwB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,8BAA8B,CAAW,CAAC,EAAE,SAAS,CAAC,CAAC;QACtE,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC1B,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/B,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { SupabaseClient } from "@supabase/supabase-js";
2
+ /**
3
+ * Access Supabase Storage through the typed client.
4
+ * Future helpers for signed URLs and upload policies will live here.
5
+ */
6
+ export declare function getSupabaseStorage<Database>(client: SupabaseClient<Database>): SupabaseClient<Database>["storage"];
7
+ export type { SupabaseClient };
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAElH;AAED,YAAY,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Access Supabase Storage through the typed client.
3
+ * Future helpers for signed URLs and upload policies will live here.
4
+ */
5
+ export function getSupabaseStorage(client) {
6
+ return client.storage;
7
+ }
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAW,MAAgC;IAC3E,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC"}
@@ -0,0 +1,141 @@
1
+ /** Test fixtures — not real credentials. */
2
+ export declare const TEST_SUPABASE_URL = "https://your-project.supabase.co";
3
+ export declare const TEST_PUBLISHABLE_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJvbGUiOiJhbm9uIiwiaWF0IjoxNjQ1MDAwMDAwfQ.test-anon-key";
4
+ export declare const TEST_SERVICE_ROLE_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJvbGUiOiJzZXJ2aWNlX3JvbGUiLCJpYXQiOjE2NDUwMDAwMDB9.test-service-role";
5
+ export interface MockDatabase {
6
+ public: {
7
+ Tables: {
8
+ projects: {
9
+ Row: {
10
+ id: string;
11
+ name: string;
12
+ };
13
+ Insert: {
14
+ id?: string;
15
+ name: string;
16
+ };
17
+ Update: {
18
+ id?: string;
19
+ name?: string;
20
+ };
21
+ };
22
+ };
23
+ };
24
+ }
25
+ export type MockAuthHandlers = {
26
+ getSession?: () => Promise<{
27
+ data: {
28
+ session: null;
29
+ };
30
+ error: null;
31
+ }>;
32
+ getClaims?: () => Promise<{
33
+ data: {
34
+ claims: Record<string, unknown>;
35
+ } | null;
36
+ error: null | {
37
+ message: string;
38
+ };
39
+ }>;
40
+ getUser?: () => Promise<{
41
+ data: {
42
+ user: {
43
+ id: string;
44
+ email?: string;
45
+ } | null;
46
+ };
47
+ error: null | {
48
+ message: string;
49
+ status?: number;
50
+ };
51
+ }>;
52
+ exchangeCodeForSession?: (code: string) => Promise<{
53
+ error: null | {
54
+ message: string;
55
+ code?: string;
56
+ };
57
+ }>;
58
+ verifyOtp?: (input: {
59
+ type: string;
60
+ token_hash: string;
61
+ }) => Promise<{
62
+ error: null | {
63
+ message: string;
64
+ code?: string;
65
+ };
66
+ }>;
67
+ signOut?: () => Promise<{
68
+ error: null | {
69
+ message: string;
70
+ };
71
+ }>;
72
+ };
73
+ export declare function createMockSupabaseClient(handlers?: MockAuthHandlers): {
74
+ auth: {
75
+ getSession: () => Promise<{
76
+ data: {
77
+ session: null;
78
+ };
79
+ error: null;
80
+ }>;
81
+ getClaims: (() => Promise<{
82
+ data: {
83
+ claims: Record<string, unknown>;
84
+ } | null;
85
+ error: null | {
86
+ message: string;
87
+ };
88
+ }>) | (() => Promise<{
89
+ data: {
90
+ claims: {
91
+ sub: string;
92
+ email: string;
93
+ role: string;
94
+ };
95
+ };
96
+ error: null;
97
+ }>);
98
+ getUser: () => Promise<{
99
+ data: {
100
+ user: {
101
+ id: string;
102
+ email?: string;
103
+ } | null;
104
+ };
105
+ error: null | {
106
+ message: string;
107
+ status?: number;
108
+ };
109
+ }>;
110
+ exchangeCodeForSession: (code: string) => Promise<{
111
+ error: null | {
112
+ message: string;
113
+ code?: string;
114
+ };
115
+ }>;
116
+ verifyOtp: (input: {
117
+ type: string;
118
+ token_hash: string;
119
+ }) => Promise<{
120
+ error: null | {
121
+ message: string;
122
+ code?: string;
123
+ };
124
+ }>;
125
+ signOut: () => Promise<{
126
+ error: null | {
127
+ message: string;
128
+ };
129
+ }>;
130
+ };
131
+ from(table: string): {
132
+ select: () => {
133
+ data: {
134
+ id: string;
135
+ name: string;
136
+ }[];
137
+ error: null;
138
+ };
139
+ };
140
+ };
141
+ //# sourceMappingURL=fixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../src/test/fixtures.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /** Test fixtures — not real credentials. */
2
+ export const TEST_SUPABASE_URL = "https://your-project.supabase.co";
3
+ export const TEST_PUBLISHABLE_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJvbGUiOiJhbm9uIiwiaWF0IjoxNjQ1MDAwMDAwfQ.test-anon-key";
4
+ export const TEST_SERVICE_ROLE_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJvbGUiOiJzZXJ2aWNlX3JvbGUiLCJpYXQiOjE2NDUwMDAwMDB9.test-service-role";
5
+ export function createMockSupabaseClient(handlers = {}) {
6
+ return {
7
+ auth: {
8
+ getSession: handlers.getSession ?? (async () => ({ data: { session: null }, error: null })),
9
+ getClaims: handlers.getClaims ??
10
+ (async () => ({
11
+ data: { claims: { sub: "user-1", email: "user@example.com", role: "authenticated" } },
12
+ error: null,
13
+ })),
14
+ getUser: handlers.getUser ??
15
+ (async () => ({ data: { user: { id: "user-1", email: "user@example.com" } }, error: null })),
16
+ exchangeCodeForSession: handlers.exchangeCodeForSession ?? (async () => ({ error: null })),
17
+ verifyOtp: handlers.verifyOtp ?? (async () => ({ error: null })),
18
+ signOut: handlers.signOut ?? (async () => ({ error: null })),
19
+ },
20
+ from(table) {
21
+ return {
22
+ select: () => ({
23
+ data: table === "projects" ? [{ id: "p1", name: "Alpha" }] : [],
24
+ error: null,
25
+ }),
26
+ };
27
+ },
28
+ };
29
+ }
30
+ //# sourceMappingURL=fixtures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../src/test/fixtures.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,MAAM,CAAC,MAAM,iBAAiB,GAAG,kCAAkC,CAAC;AACpE,MAAM,CAAC,MAAM,oBAAoB,GAC/B,uHAAuH,CAAC;AAC1H,MAAM,CAAC,MAAM,qBAAqB,GAChC,qIAAqI,CAAC;AA6BxI,MAAM,UAAU,wBAAwB,CAAC,WAA6B,EAAE;IACtE,OAAO;QACL,IAAI,EAAE;YACJ,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3F,SAAS,EACP,QAAQ,CAAC,SAAS;gBAClB,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;oBACZ,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE;oBACrF,KAAK,EAAE,IAAI;iBACZ,CAAC,CAAC;YACL,OAAO,EACL,QAAQ,CAAC,OAAO;gBAChB,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9F,sBAAsB,EAAE,QAAQ,CAAC,sBAAsB,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1F,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAChE,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;SAC7D;QACD,IAAI,CAAC,KAAa;YAChB,OAAO;gBACL,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;oBACb,IAAI,EAAE,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;oBAC/D,KAAK,EAAE,IAAI;iBACZ,CAAC;aACH,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,63 @@
1
+ import type { SupabaseClient } from "@supabase/supabase-js";
2
+ import type { JwtPayload } from "@supabase/supabase-js";
3
+ import type { User } from "@supabase/supabase-js";
4
+ import type { SupabaseConfig } from "./config.js";
5
+ export type { SupabaseClient, User, JwtPayload };
6
+ export interface SupabaseVariables<Database = unknown> {
7
+ supabase: SupabaseClient<Database>;
8
+ }
9
+ export interface SupabaseClaimsVariables {
10
+ supabaseClaims: JwtPayload;
11
+ }
12
+ export interface SupabaseUserVariables {
13
+ supabaseUser: User;
14
+ }
15
+ export type SupabaseEnv<Database = unknown> = {
16
+ Variables: SupabaseVariables<Database>;
17
+ };
18
+ export type SupabaseAuthClaimsEnv<Database = unknown> = {
19
+ Variables: SupabaseVariables<Database> & SupabaseClaimsVariables;
20
+ };
21
+ export type SupabaseAuthUserEnv<Database = unknown> = {
22
+ Variables: SupabaseVariables<Database> & SupabaseUserVariables;
23
+ };
24
+ export type SupabaseAuthFullEnv<Database = unknown> = {
25
+ Variables: SupabaseVariables<Database> & SupabaseClaimsVariables & SupabaseUserVariables;
26
+ };
27
+ export interface SupabaseAuthRoutesOptions {
28
+ successRedirect?: string;
29
+ errorRedirect?: string;
30
+ callbackPath?: string;
31
+ confirmPath?: string;
32
+ signOutPath?: string;
33
+ redirectAllowlist?: readonly string[];
34
+ }
35
+ export interface RequireSupabaseAuthOptions {
36
+ redirectTo?: string;
37
+ response?: "redirect" | "json";
38
+ redirectAllowlist?: readonly string[];
39
+ }
40
+ export interface RequireSupabaseUserOptions extends RequireSupabaseAuthOptions {
41
+ }
42
+ export interface SupabasePluginOptions extends SupabaseConfig {
43
+ /** Mount callback, confirm, and sign-out routes. Default: true. */
44
+ mountAuthRoutes?: boolean;
45
+ /** Options passed to `createSupabaseAuthRoutes`. */
46
+ authRoutes?: SupabaseAuthRoutesOptions;
47
+ }
48
+ export interface SupabaseRuntime {
49
+ config: SupabaseConfig;
50
+ authRoutes: SupabaseAuthRoutesOptions;
51
+ mountAuthRoutes: boolean;
52
+ }
53
+ export type SupabaseActionResult<T = unknown> = {
54
+ ok: true;
55
+ data?: T;
56
+ redirect?: string;
57
+ } | {
58
+ ok: false;
59
+ status: number;
60
+ message: string;
61
+ fieldErrors?: Record<string, string[]>;
62
+ };
63
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,YAAY,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAEjD,MAAM,WAAW,iBAAiB,CAAC,QAAQ,GAAG,OAAO;IACnD,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,uBAAuB;IACtC,cAAc,EAAE,UAAU,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,IAAI,CAAC;CACpB;AAED,MAAM,MAAM,WAAW,CAAC,QAAQ,GAAG,OAAO,IAAI;IAC5C,SAAS,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,qBAAqB,CAAC,QAAQ,GAAG,OAAO,IAAI;IACtD,SAAS,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GAAG,uBAAuB,CAAC;CAClE,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAAC,QAAQ,GAAG,OAAO,IAAI;IACpD,SAAS,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GAAG,qBAAqB,CAAC;CAChE,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAAC,QAAQ,GAAG,OAAO,IAAI;IACpD,SAAS,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GAAG,uBAAuB,GAAG,qBAAqB,CAAC;CAC1F,CAAC;AAEF,MAAM,WAAW,yBAAyB;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,0BAA0B;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IAC/B,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,0BAA2B,SAAQ,0BAA0B;CAAG;AAEjF,MAAM,WAAW,qBAAsB,SAAQ,cAAc;IAC3D,mEAAmE;IACnE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oDAAoD;IACpD,UAAU,CAAC,EAAE,yBAAyB,CAAC;CACxC;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,yBAAyB,CAAC;IACtC,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,MAAM,oBAAoB,CAAC,CAAC,GAAG,OAAO,IACxC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CAAE,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}