@timeback/sdk 0.1.4
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/README.md +612 -0
- package/dist/client/adapters/react/SignInButton.d.ts +60 -0
- package/dist/client/adapters/react/SignInButton.d.ts.map +1 -0
- package/dist/client/adapters/react/index.d.ts +47 -0
- package/dist/client/adapters/react/index.d.ts.map +1 -0
- package/dist/client/adapters/react/index.js +478 -0
- package/dist/client/adapters/react/provider.d.ts +78 -0
- package/dist/client/adapters/react/provider.d.ts.map +1 -0
- package/dist/client/adapters/solid/SignInButton.d.ts +52 -0
- package/dist/client/adapters/solid/SignInButton.d.ts.map +1 -0
- package/dist/client/adapters/solid/SignInButton.tsx +321 -0
- package/dist/client/adapters/solid/context.d.ts +73 -0
- package/dist/client/adapters/solid/context.d.ts.map +1 -0
- package/dist/client/adapters/solid/context.tsx +91 -0
- package/dist/client/adapters/solid/index.d.ts +46 -0
- package/dist/client/adapters/solid/index.d.ts.map +1 -0
- package/dist/client/adapters/solid/index.ts +50 -0
- package/dist/client/adapters/svelte/SignInButton.svelte +234 -0
- package/dist/client/adapters/svelte/SignInButton.svelte.d.ts +24 -0
- package/dist/client/adapters/svelte/index.d.ts +37 -0
- package/dist/client/adapters/svelte/index.d.ts.map +1 -0
- package/dist/client/adapters/svelte/index.ts +42 -0
- package/dist/client/adapters/svelte/stores.d.ts +66 -0
- package/dist/client/adapters/svelte/stores.d.ts.map +1 -0
- package/dist/client/adapters/svelte/stores.ts +143 -0
- package/dist/client/adapters/vue/SignInButton.vue +260 -0
- package/dist/client/adapters/vue/SignInButton.vue.d.ts +53 -0
- package/dist/client/adapters/vue/index.d.ts +43 -0
- package/dist/client/adapters/vue/index.d.ts.map +1 -0
- package/dist/client/adapters/vue/index.ts +48 -0
- package/dist/client/adapters/vue/provider.d.ts +94 -0
- package/dist/client/adapters/vue/provider.d.ts.map +1 -0
- package/dist/client/adapters/vue/provider.ts +147 -0
- package/dist/client/index.d.ts +9 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/lib/activity/activity.class.d.ts +73 -0
- package/dist/client/lib/activity/activity.class.d.ts.map +1 -0
- package/dist/client/lib/activity/activity.d.ts +16 -0
- package/dist/client/lib/activity/activity.d.ts.map +1 -0
- package/dist/client/lib/activity/index.d.ts +6 -0
- package/dist/client/lib/activity/index.d.ts.map +1 -0
- package/dist/client/lib/utils.d.ts +20 -0
- package/dist/client/lib/utils.d.ts.map +1 -0
- package/dist/client/namespaces/activity.d.ts +41 -0
- package/dist/client/namespaces/activity.d.ts.map +1 -0
- package/dist/client/namespaces/auth.d.ts +33 -0
- package/dist/client/namespaces/auth.d.ts.map +1 -0
- package/dist/client/namespaces/index.d.ts +7 -0
- package/dist/client/namespaces/index.d.ts.map +1 -0
- package/dist/client/namespaces/user.d.ts +29 -0
- package/dist/client/namespaces/user.d.ts.map +1 -0
- package/dist/client/timeback-client.class.d.ts +37 -0
- package/dist/client/timeback-client.class.d.ts.map +1 -0
- package/dist/client/timeback-client.d.ts +29 -0
- package/dist/client/timeback-client.d.ts.map +1 -0
- package/dist/client.d.ts +30 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +198 -0
- package/dist/config.d.ts +20 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +0 -0
- package/dist/edge.d.ts +13 -0
- package/dist/edge.d.ts.map +1 -0
- package/dist/edge.js +1149 -0
- package/dist/identity.d.ts +14 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +1019 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +84921 -0
- package/dist/server/adapters/express.d.ts +66 -0
- package/dist/server/adapters/express.d.ts.map +1 -0
- package/dist/server/adapters/express.js +67332 -0
- package/dist/server/adapters/native.d.ts +47 -0
- package/dist/server/adapters/native.d.ts.map +1 -0
- package/dist/server/adapters/native.js +190 -0
- package/dist/server/adapters/nextjs.d.ts +32 -0
- package/dist/server/adapters/nextjs.d.ts.map +1 -0
- package/dist/server/adapters/nextjs.js +202 -0
- package/dist/server/adapters/nuxt.d.ts +98 -0
- package/dist/server/adapters/nuxt.d.ts.map +1 -0
- package/dist/server/adapters/nuxt.js +67401 -0
- package/dist/server/adapters/solid-start.d.ts +63 -0
- package/dist/server/adapters/solid-start.d.ts.map +1 -0
- package/dist/server/adapters/solid-start.js +67300 -0
- package/dist/server/adapters/svelte-kit.d.ts +84 -0
- package/dist/server/adapters/svelte-kit.d.ts.map +1 -0
- package/dist/server/adapters/svelte-kit.js +243 -0
- package/dist/server/adapters/tanstack-start.d.ts +42 -0
- package/dist/server/adapters/tanstack-start.d.ts.map +1 -0
- package/dist/server/adapters/tanstack-start.js +67278 -0
- package/dist/server/adapters/types.d.ts +294 -0
- package/dist/server/adapters/types.d.ts.map +1 -0
- package/dist/server/adapters/utils.d.ts +76 -0
- package/dist/server/adapters/utils.d.ts.map +1 -0
- package/dist/server/handlers/activity.d.ts +28 -0
- package/dist/server/handlers/activity.d.ts.map +1 -0
- package/dist/server/handlers/identity-full.d.ts +28 -0
- package/dist/server/handlers/identity-full.d.ts.map +1 -0
- package/dist/server/handlers/identity-only.d.ts +22 -0
- package/dist/server/handlers/identity-only.d.ts.map +1 -0
- package/dist/server/handlers/index.d.ts +9 -0
- package/dist/server/handlers/index.d.ts.map +1 -0
- package/dist/server/handlers/user.d.ts +31 -0
- package/dist/server/handlers/user.d.ts.map +1 -0
- package/dist/server/index.d.ts +9 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/lib/build-activity-events.d.ts +39 -0
- package/dist/server/lib/build-activity-events.d.ts.map +1 -0
- package/dist/server/lib/build-user-profile.d.ts +62 -0
- package/dist/server/lib/build-user-profile.d.ts.map +1 -0
- package/dist/server/lib/index.d.ts +14 -0
- package/dist/server/lib/index.d.ts.map +1 -0
- package/dist/server/lib/logger.d.ts +21 -0
- package/dist/server/lib/logger.d.ts.map +1 -0
- package/dist/server/lib/oidc.d.ts +76 -0
- package/dist/server/lib/oidc.d.ts.map +1 -0
- package/dist/server/lib/resolve-activity-course.d.ts +22 -0
- package/dist/server/lib/resolve-activity-course.d.ts.map +1 -0
- package/dist/server/lib/resolve-timeback-id.d.ts +28 -0
- package/dist/server/lib/resolve-timeback-id.d.ts.map +1 -0
- package/dist/server/lib/resolve-timeback-user.d.ts +42 -0
- package/dist/server/lib/resolve-timeback-user.d.ts.map +1 -0
- package/dist/server/lib/utils.d.ts +54 -0
- package/dist/server/lib/utils.d.ts.map +1 -0
- package/dist/server/timeback-identity.d.ts +19 -0
- package/dist/server/timeback-identity.d.ts.map +1 -0
- package/dist/server/timeback.d.ts +68 -0
- package/dist/server/timeback.d.ts.map +1 -0
- package/dist/server/types.d.ts +421 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/shared/constants.d.ts +18 -0
- package/dist/shared/constants.d.ts.map +1 -0
- package/dist/shared/types.d.ts +159 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/package.json +119 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SvelteKit Adapter
|
|
3
|
+
*
|
|
4
|
+
* Adapts Timeback handlers for SvelteKit.
|
|
5
|
+
* Supports both hooks-based (recommended) and route-based approaches.
|
|
6
|
+
*/
|
|
7
|
+
import type { AnyTimebackInput, SvelteKitHandlerOptions, SvelteKitHandlers, SvelteKitRequestEvent } from './types';
|
|
8
|
+
/**
|
|
9
|
+
* SvelteKit server hook handler for Timeback.
|
|
10
|
+
*
|
|
11
|
+
* This is the **recommended** approach for SvelteKit integration.
|
|
12
|
+
* It intercepts requests at the hooks level, providing deeper integration
|
|
13
|
+
* with SvelteKit's request lifecycle.
|
|
14
|
+
*
|
|
15
|
+
* @param options - Handler options
|
|
16
|
+
* @returns Response from either Timeback or the resolve chain
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* // hooks.server.ts
|
|
21
|
+
* import { timeback } from '$lib/timeback'
|
|
22
|
+
* import { svelteKitHandler } from '@timeback/sdk/svelte-kit'
|
|
23
|
+
* import { building } from '$app/environment'
|
|
24
|
+
*
|
|
25
|
+
* export async function handle({ event, resolve }) {
|
|
26
|
+
* return svelteKitHandler({
|
|
27
|
+
* timeback,
|
|
28
|
+
* event,
|
|
29
|
+
* resolve,
|
|
30
|
+
* building,
|
|
31
|
+
* })
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```typescript
|
|
37
|
+
* // hooks.server.ts - with session in event.locals
|
|
38
|
+
* import { timeback } from '$lib/timeback'
|
|
39
|
+
* import { svelteKitHandler } from '@timeback/sdk/svelte-kit'
|
|
40
|
+
* import { building } from '$app/environment'
|
|
41
|
+
*
|
|
42
|
+
* export async function handle({ event, resolve }) {
|
|
43
|
+
* // Optionally populate event.locals with user session
|
|
44
|
+
* // const session = await getSessionFromCookie(event.cookies)
|
|
45
|
+
* // if (session) {
|
|
46
|
+
* // event.locals.user = session.user
|
|
47
|
+
* // }
|
|
48
|
+
*
|
|
49
|
+
* return svelteKitHandler({
|
|
50
|
+
* timeback,
|
|
51
|
+
* event,
|
|
52
|
+
* resolve,
|
|
53
|
+
* building,
|
|
54
|
+
* })
|
|
55
|
+
* }
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export declare function svelteKitHandler<TEvent extends SvelteKitRequestEvent>(options: SvelteKitHandlerOptions<TEvent>): Promise<Response>;
|
|
59
|
+
/**
|
|
60
|
+
* Convert Timeback instance to SvelteKit route handlers.
|
|
61
|
+
*
|
|
62
|
+
* This is an **alternative** approach using SvelteKit's route handlers.
|
|
63
|
+
* Use this if you prefer explicit route files over hooks.
|
|
64
|
+
*
|
|
65
|
+
* Accepts either the full Timeback instance or just the handlers:
|
|
66
|
+
* - `toSvelteKitHandler(timeback)`
|
|
67
|
+
* - `toSvelteKitHandler(timeback.handle)`
|
|
68
|
+
*
|
|
69
|
+
* Also accepts identity-only instances from `createTimebackIdentity()`.
|
|
70
|
+
*
|
|
71
|
+
* @param input - Timeback instance or handlers (full or identity-only)
|
|
72
|
+
* @returns Object with HTTP method handlers for SvelteKit
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```typescript
|
|
76
|
+
* // src/routes/api/timeback/[...path]/+server.ts
|
|
77
|
+
* import { timeback } from '$lib/timeback'
|
|
78
|
+
* import { toSvelteKitHandler } from '@timeback/sdk/svelte-kit'
|
|
79
|
+
*
|
|
80
|
+
* export const { GET, POST } = toSvelteKitHandler(timeback)
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
export declare function toSvelteKitHandler(input: AnyTimebackInput): SvelteKitHandlers;
|
|
84
|
+
//# sourceMappingURL=svelte-kit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svelte-kit.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/svelte-kit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EACX,gBAAgB,EAChB,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EAErB,MAAM,SAAS,CAAA;AAMhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,SAAS,qBAAqB,EAC1E,OAAO,EAAE,uBAAuB,CAAC,MAAM,CAAC,GACtC,OAAO,CAAC,QAAQ,CAAC,CAqDnB;AAMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAgB7E"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __toESM = (mod, isNodeMode, target) => {
|
|
8
|
+
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
9
|
+
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
10
|
+
for (let key of __getOwnPropNames(mod))
|
|
11
|
+
if (!__hasOwnProp.call(to, key))
|
|
12
|
+
__defProp(to, key, {
|
|
13
|
+
get: () => mod[key],
|
|
14
|
+
enumerable: true
|
|
15
|
+
});
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
19
|
+
|
|
20
|
+
// src/server/lib/utils.ts
|
|
21
|
+
function mapEnvForApi(env) {
|
|
22
|
+
if (env === "local" || env === "staging") {
|
|
23
|
+
return "staging";
|
|
24
|
+
}
|
|
25
|
+
return "production";
|
|
26
|
+
}
|
|
27
|
+
function jsonResponse(data, status = 200, headers) {
|
|
28
|
+
const responseHeaders = new Headers(headers);
|
|
29
|
+
responseHeaders.set("Content-Type", "application/json");
|
|
30
|
+
return new Response(JSON.stringify(data), { status, headers: responseHeaders });
|
|
31
|
+
}
|
|
32
|
+
function redirectResponse(url, headers) {
|
|
33
|
+
const responseHeaders = new Headers(headers);
|
|
34
|
+
responseHeaders.set("Location", url);
|
|
35
|
+
return new Response(null, { status: 302, headers: responseHeaders });
|
|
36
|
+
}
|
|
37
|
+
function encodeBase64Url(data) {
|
|
38
|
+
const json = JSON.stringify(data);
|
|
39
|
+
return btoa(json).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
40
|
+
}
|
|
41
|
+
function decodeBase64Url(encoded) {
|
|
42
|
+
const padded = encoded.replace(/-/g, "+").replace(/_/g, "/");
|
|
43
|
+
const json = atob(padded);
|
|
44
|
+
return JSON.parse(json);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// src/shared/constants.ts
|
|
48
|
+
var ROUTES = {
|
|
49
|
+
ACTIVITY: "/activity",
|
|
50
|
+
IDENTITY: {
|
|
51
|
+
SIGNIN: "/identity/signin",
|
|
52
|
+
SIGNOUT: "/identity/signout",
|
|
53
|
+
CALLBACK: "/identity/callback"
|
|
54
|
+
},
|
|
55
|
+
USER: {
|
|
56
|
+
ME: "/user/me"
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
// src/server/adapters/utils.ts
|
|
61
|
+
function normalizePathname(path) {
|
|
62
|
+
const raw = path.trim();
|
|
63
|
+
if (raw === "") {
|
|
64
|
+
return "/";
|
|
65
|
+
}
|
|
66
|
+
const queryIndex = raw.indexOf("?");
|
|
67
|
+
if (queryIndex === -1) {
|
|
68
|
+
return raw;
|
|
69
|
+
}
|
|
70
|
+
const pathname = raw.slice(0, queryIndex);
|
|
71
|
+
if (pathname === "") {
|
|
72
|
+
return "/";
|
|
73
|
+
}
|
|
74
|
+
return pathname;
|
|
75
|
+
}
|
|
76
|
+
function normalizeBasePath(basePath) {
|
|
77
|
+
let raw = normalizePathname(basePath);
|
|
78
|
+
if (raw !== "" && !raw.startsWith("/")) {
|
|
79
|
+
raw = `/${raw}`;
|
|
80
|
+
}
|
|
81
|
+
if (raw === "/" || raw === "") {
|
|
82
|
+
return "";
|
|
83
|
+
}
|
|
84
|
+
if (raw.endsWith("/")) {
|
|
85
|
+
return raw.slice(0, -1);
|
|
86
|
+
}
|
|
87
|
+
return raw;
|
|
88
|
+
}
|
|
89
|
+
function matchTimebackRoute(params) {
|
|
90
|
+
const method = params.method.toUpperCase();
|
|
91
|
+
const pathname = normalizePathname(params.pathname);
|
|
92
|
+
const callbackPath = params.callbackPath ? normalizePathname(params.callbackPath) : undefined;
|
|
93
|
+
if (callbackPath && pathname === callbackPath) {
|
|
94
|
+
return method === "GET" ? "identity.callback" : null;
|
|
95
|
+
}
|
|
96
|
+
const basePathInput = params.basePath;
|
|
97
|
+
const hasBasePath = basePathInput !== undefined;
|
|
98
|
+
const basePath = hasBasePath ? normalizeBasePath(basePathInput) : undefined;
|
|
99
|
+
const matchesRelative = (relative) => {
|
|
100
|
+
if (method === "GET") {
|
|
101
|
+
if (relative === ROUTES.IDENTITY.SIGNIN)
|
|
102
|
+
return "identity.signIn";
|
|
103
|
+
if (relative === ROUTES.IDENTITY.CALLBACK)
|
|
104
|
+
return "identity.callback";
|
|
105
|
+
if (relative === ROUTES.IDENTITY.SIGNOUT)
|
|
106
|
+
return "identity.signOut";
|
|
107
|
+
if (relative === ROUTES.USER.ME)
|
|
108
|
+
return "user.me";
|
|
109
|
+
}
|
|
110
|
+
if (method === "POST") {
|
|
111
|
+
if (relative === ROUTES.ACTIVITY)
|
|
112
|
+
return "activity";
|
|
113
|
+
}
|
|
114
|
+
return null;
|
|
115
|
+
};
|
|
116
|
+
if (hasBasePath && basePath !== undefined) {
|
|
117
|
+
if (basePath !== "" && pathname === basePath)
|
|
118
|
+
return null;
|
|
119
|
+
if (basePath !== "" && !pathname.startsWith(`${basePath}/`))
|
|
120
|
+
return null;
|
|
121
|
+
const relativeRaw = basePath === "" ? pathname : pathname.slice(basePath.length);
|
|
122
|
+
const relative = relativeRaw.startsWith("/") ? relativeRaw : `/${relativeRaw}`;
|
|
123
|
+
return matchesRelative(relative);
|
|
124
|
+
}
|
|
125
|
+
if (method === "GET") {
|
|
126
|
+
if (pathname.endsWith(ROUTES.IDENTITY.SIGNIN))
|
|
127
|
+
return "identity.signIn";
|
|
128
|
+
if (pathname.endsWith(ROUTES.IDENTITY.CALLBACK))
|
|
129
|
+
return "identity.callback";
|
|
130
|
+
if (pathname.endsWith(ROUTES.IDENTITY.SIGNOUT))
|
|
131
|
+
return "identity.signOut";
|
|
132
|
+
if (pathname.endsWith(ROUTES.USER.ME))
|
|
133
|
+
return "user.me";
|
|
134
|
+
}
|
|
135
|
+
if (method === "POST") {
|
|
136
|
+
if (pathname.endsWith(ROUTES.ACTIVITY))
|
|
137
|
+
return "activity";
|
|
138
|
+
}
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
function getHandlers(input) {
|
|
142
|
+
return "handle" in input ? input.handle : input;
|
|
143
|
+
}
|
|
144
|
+
function hasActivityHandler(handlers) {
|
|
145
|
+
return "activity" in handlers;
|
|
146
|
+
}
|
|
147
|
+
function hasUserHandler(handlers) {
|
|
148
|
+
return "user" in handlers;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// src/server/adapters/native.ts
|
|
152
|
+
function isNativeHandlerOptions(v) {
|
|
153
|
+
return typeof v === "object" && v !== null && "timeback" in v;
|
|
154
|
+
}
|
|
155
|
+
function toNativeHandler(input) {
|
|
156
|
+
const { timeback, callbackPath } = isNativeHandlerOptions(input) ? input : { timeback: input, callbackPath: undefined };
|
|
157
|
+
const handle = getHandlers(timeback);
|
|
158
|
+
return (req) => {
|
|
159
|
+
const url = new URL(req.url);
|
|
160
|
+
const path = url.pathname;
|
|
161
|
+
const method = req.method;
|
|
162
|
+
const route = matchTimebackRoute({
|
|
163
|
+
pathname: path,
|
|
164
|
+
method,
|
|
165
|
+
callbackPath
|
|
166
|
+
});
|
|
167
|
+
if (route === "identity.signIn")
|
|
168
|
+
return handle.identity.signIn(req);
|
|
169
|
+
if (route === "identity.callback")
|
|
170
|
+
return handle.identity.callback(req);
|
|
171
|
+
if (route === "identity.signOut")
|
|
172
|
+
return Promise.resolve(handle.identity.signOut());
|
|
173
|
+
if (route === "user.me") {
|
|
174
|
+
if (!hasUserHandler(handle)) {
|
|
175
|
+
return Promise.resolve(jsonResponse({ error: "Not found" }, 404));
|
|
176
|
+
}
|
|
177
|
+
return handle.user.me(req);
|
|
178
|
+
}
|
|
179
|
+
if (route === "activity") {
|
|
180
|
+
if (!hasActivityHandler(handle)) {
|
|
181
|
+
return Promise.resolve(jsonResponse({ error: "Not found" }, 404));
|
|
182
|
+
}
|
|
183
|
+
return handle.activity(req);
|
|
184
|
+
}
|
|
185
|
+
return Promise.resolve(jsonResponse({ error: "Not found" }, 404));
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// src/server/adapters/svelte-kit.ts
|
|
190
|
+
async function svelteKitHandler(options) {
|
|
191
|
+
const {
|
|
192
|
+
timeback,
|
|
193
|
+
event,
|
|
194
|
+
resolve,
|
|
195
|
+
building = false,
|
|
196
|
+
basePath = "/api/timeback",
|
|
197
|
+
callbackPath
|
|
198
|
+
} = options;
|
|
199
|
+
if (building) {
|
|
200
|
+
return resolve(event);
|
|
201
|
+
}
|
|
202
|
+
const { url, request } = event;
|
|
203
|
+
const handle = getHandlers(timeback);
|
|
204
|
+
const path = url.pathname;
|
|
205
|
+
const method = request.method;
|
|
206
|
+
const route = matchTimebackRoute({ pathname: path, method, basePath, callbackPath });
|
|
207
|
+
if (!route)
|
|
208
|
+
return resolve(event);
|
|
209
|
+
if (route === "identity.signOut")
|
|
210
|
+
return handle.identity.signOut();
|
|
211
|
+
if (route === "identity.signIn")
|
|
212
|
+
return await handle.identity.signIn(request);
|
|
213
|
+
if (route === "identity.callback")
|
|
214
|
+
return await handle.identity.callback(request);
|
|
215
|
+
if (route === "user.me") {
|
|
216
|
+
if (!hasUserHandler(handle))
|
|
217
|
+
return resolve(event);
|
|
218
|
+
return await handle.user.me(request);
|
|
219
|
+
}
|
|
220
|
+
if (route === "activity") {
|
|
221
|
+
if (!hasActivityHandler(handle))
|
|
222
|
+
return resolve(event);
|
|
223
|
+
return await handle.activity(request);
|
|
224
|
+
}
|
|
225
|
+
return resolve(event);
|
|
226
|
+
}
|
|
227
|
+
function toSvelteKitHandler(input) {
|
|
228
|
+
const handler = toNativeHandler(input);
|
|
229
|
+
const wrapHandler = (nativeHandler) => {
|
|
230
|
+
return (event) => nativeHandler(event.request);
|
|
231
|
+
};
|
|
232
|
+
return {
|
|
233
|
+
GET: wrapHandler(handler),
|
|
234
|
+
POST: wrapHandler(handler),
|
|
235
|
+
PUT: wrapHandler(handler),
|
|
236
|
+
DELETE: wrapHandler(handler),
|
|
237
|
+
PATCH: wrapHandler(handler)
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
export {
|
|
241
|
+
toSvelteKitHandler,
|
|
242
|
+
svelteKitHandler
|
|
243
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TanStack Start Adapter
|
|
3
|
+
*
|
|
4
|
+
* Adapts Timeback handlers for TanStack Start.
|
|
5
|
+
* Uses file-based API routes with TanStack's createFileRoute.
|
|
6
|
+
*/
|
|
7
|
+
import type { AnyTimebackInput, TanStackStartHandlerOptions, TanStackStartHandlers } from './types';
|
|
8
|
+
/**
|
|
9
|
+
* Convert Timeback instance to TanStack Start route handlers.
|
|
10
|
+
*
|
|
11
|
+
* TanStack Start uses file-based routing with API routes exporting HTTP method handlers.
|
|
12
|
+
* This function creates handlers compatible with TanStack Start's route system.
|
|
13
|
+
*
|
|
14
|
+
* Accepts either the full Timeback instance or just the handlers:
|
|
15
|
+
* - `toTanStackStartHandler(timeback)`
|
|
16
|
+
* - `toTanStackStartHandler(timeback.handle)`
|
|
17
|
+
*
|
|
18
|
+
* Also accepts identity-only instances from `createTimebackIdentity()`.
|
|
19
|
+
*
|
|
20
|
+
* @param input - Timeback instance or handlers (full or identity-only), or options object
|
|
21
|
+
* @returns Object with HTTP method handlers for TanStack Start
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* // src/routes/api/timeback/$.ts
|
|
26
|
+
* import { createFileRoute } from '@tanstack/react-router'
|
|
27
|
+
* import { timeback } from '~/lib/timeback'
|
|
28
|
+
* import { toTanStackStartHandler } from '@timeback/sdk/tanstack-start'
|
|
29
|
+
*
|
|
30
|
+
* const handlers = toTanStackStartHandler(timeback)
|
|
31
|
+
*
|
|
32
|
+
* export const Route = createFileRoute('/api/timeback/$')({
|
|
33
|
+
* server: { handlers }
|
|
34
|
+
* })
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare function toTanStackStartHandler(input: AnyTimebackInput | TanStackStartHandlerOptions): TanStackStartHandlers;
|
|
38
|
+
/**
|
|
39
|
+
* Alias for toTanStackStartHandler for consistency with other adapters.
|
|
40
|
+
*/
|
|
41
|
+
export declare const tanstackStartHandler: typeof toTanStackStartHandler;
|
|
42
|
+
//# sourceMappingURL=tanstack-start.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tanstack-start.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/tanstack-start.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EACX,gBAAgB,EAEhB,2BAA2B,EAC3B,qBAAqB,EACrB,MAAM,SAAS,CAAA;AAMhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,sBAAsB,CACrC,KAAK,EAAE,gBAAgB,GAAG,2BAA2B,GACnD,qBAAqB,CAsCvB;AAcD;;GAEG;AACH,eAAO,MAAM,oBAAoB,+BAAyB,CAAA"}
|