ras-stack 0.39.1 → 0.39.2

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 CHANGED
@@ -76,16 +76,16 @@ pnpm add postgres drizzle-orm
76
76
 
77
77
  Start with the narrowest public entrypoint that owns the repeated mechanic:
78
78
 
79
- | Need | Entrypoint or command | The application still owns |
80
- | --------------------------------------------------------- | ------------------------------------------------------------------------------- | -------------------------------------------------------------- |
81
- | Authentication defaults and browser action state | `ras-stack/auth`, `ras-stack/auth/client`, `ras-stack/auth/react` | Better Auth configuration, forms, policy, and navigation |
82
- | RPC, mutation-origin, health, and canonical-host handling | `ras-stack/server`, `ras-stack/tanstack/server` | Routes, authorization, logging, and health work |
83
- | SQLite or PostgreSQL lifecycle | `ras-stack/database/*` | Schemas, migrations, repositories, and transactions |
84
- | Realtime publication and browser lifecycle | `ras-stack/realtime/*` | Channels, tickets, payloads, presence models, and invalidation |
85
- | Email, uploads, and production assets | `ras-stack/email`, `ras-stack/uploads`, `ras assets` | Templates, metadata, quotas, storage, and asset contents |
86
- | Production or development realtime runtime | `ras-stack/runtime`, `ras realtime` | Images, ports, secrets, volumes, and distributed policy |
87
- | Compiler, lint, CI, release, and preview mechanics | `ras-stack/config/*`, `actions/*`, `.github/workflows/*`, `ras-stack/preview/*` | Triggers, permissions, services, deployment, and verification |
88
- | Generated repository policy files | `ras policy` | Which policies apply and every declared override |
79
+ | Need | Entrypoint or command | The application still owns |
80
+ | --------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------- |
81
+ | Authentication defaults and browser action state | `ras-stack/auth`, `ras-stack/auth/client`, `ras-stack/auth/react` | Better Auth configuration, forms, policy, and navigation |
82
+ | RPC, mutation-origin, health, and canonical-host handling | `ras-stack/server`, `ras-stack/tanstack/server`, `ras-stack/tanstack/middleware` | Routes, authorization, logging, and health work |
83
+ | SQLite or PostgreSQL lifecycle | `ras-stack/database/*` | Schemas, migrations, repositories, and transactions |
84
+ | Realtime publication and browser lifecycle | `ras-stack/realtime/*` | Channels, tickets, payloads, presence models, and invalidation |
85
+ | Email, uploads, and production assets | `ras-stack/email`, `ras-stack/uploads`, `ras assets` | Templates, metadata, quotas, storage, and asset contents |
86
+ | Production or development realtime runtime | `ras-stack/runtime`, `ras realtime` | Images, ports, secrets, volumes, and distributed policy |
87
+ | Compiler, lint, CI, release, and preview mechanics | `ras-stack/config/*`, `actions/*`, `.github/workflows/*`, `ras-stack/preview/*` | Triggers, permissions, services, deployment, and verification |
88
+ | Generated repository policy files | `ras policy` | Which policies apply and every declared override |
89
89
 
90
90
  ## Dokploy previews 🚀
91
91
 
@@ -0,0 +1,3 @@
1
+ import { type CanonicalRedirectOptions } from '../server/canonical-host.js';
2
+ export declare function canonicalHostRequest<T>(request: Request, next: () => T, options: CanonicalRedirectOptions): Response | T;
3
+ export declare function canonicalHostMiddleware(resolveOptions: () => CanonicalRedirectOptions): import("@tanstack/react-start").RequestMiddlewareAfterServer<{}, undefined, undefined>;
@@ -0,0 +1,12 @@
1
+ import { createMiddleware } from '@tanstack/react-start';
2
+ import { canonicalRedirect } from '../server/canonical-host.js';
3
+ export function canonicalHostRequest(request, next, options) {
4
+ const redirect = canonicalRedirect(request.url, options);
5
+ return redirect ? Response.redirect(redirect, 301) : next();
6
+ }
7
+ export function canonicalHostMiddleware(resolveOptions) {
8
+ return createMiddleware({ type: 'request' }).server(({ request, next }) => {
9
+ return canonicalHostRequest(request, next, resolveOptions());
10
+ });
11
+ }
12
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/tanstack/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAiC,MAAM,6BAA6B,CAAA;AAE9F,MAAM,UAAU,oBAAoB,CAAI,OAAgB,EAAE,IAAa,EAAE,OAAiC;IACxG,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IACxD,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;AAC7D,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,cAA8C;IACpF,OAAO,gBAAgB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;QACxE,OAAO,oBAAoB,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAA;IAC9D,CAAC,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import { createMiddleware } from '@tanstack/react-start'\nimport { canonicalRedirect, type CanonicalRedirectOptions } from '../server/canonical-host.js'\n\nexport function canonicalHostRequest<T>(request: Request, next: () => T, options: CanonicalRedirectOptions): Response | T {\n const redirect = canonicalRedirect(request.url, options)\n return redirect ? Response.redirect(redirect, 301) : next()\n}\n\nexport function canonicalHostMiddleware(resolveOptions: () => CanonicalRedirectOptions) {\n return createMiddleware({ type: 'request' }).server(({ request, next }) => {\n return canonicalHostRequest(request, next, resolveOptions())\n })\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import { type OriginOptions } from '../auth/origins.js';
2
- import { type CanonicalRedirectOptions, type HealthResponseOptions, type RpcOptions } from '../server/index.js';
2
+ import { type HealthResponseOptions, type RpcOptions } from '../server/index.js';
3
+ export { canonicalHostMiddleware, canonicalHostRequest } from './middleware.js';
3
4
  export type TanStackRpcOptions = Omit<RpcOptions, 'getRequest'> & Pick<RpcOptions, 'getRequest'>;
4
5
  export declare function createTanStackRpc(options?: TanStackRpcOptions): {
5
6
  rpc: <T>(work: () => Promise<T> | T) => Promise<T>;
@@ -16,6 +17,3 @@ export declare function betterAuthHandlers(resolveAuth: () => {
16
17
  POST: ({ request }: RequestContext) => Promise<Response> | Response;
17
18
  };
18
19
  export declare function tanStackHealthHandler(check: () => void | Promise<void>, options?: HealthResponseOptions): () => Promise<Response>;
19
- export declare function canonicalHostRequest<T>(request: Request, next: () => T, options: CanonicalRedirectOptions): Response | T;
20
- export declare function canonicalHostMiddleware(resolveOptions: () => CanonicalRedirectOptions): import("@tanstack/react-start").RequestMiddlewareAfterServer<{}, undefined, undefined>;
21
- export {};
@@ -1,7 +1,7 @@
1
1
  import { getRequest } from '@tanstack/react-start/server';
2
- import { createMiddleware } from '@tanstack/react-start';
3
2
  import { requireSameOrigin } from '../auth/origins.js';
4
- import { canonicalRedirect, createRpc, healthResponse, } from '../server/index.js';
3
+ import { createRpc, healthResponse } from '../server/index.js';
4
+ export { canonicalHostMiddleware, canonicalHostRequest } from './middleware.js';
5
5
  export function createTanStackRpc(options = {}) {
6
6
  return createRpc({ ...options, getRequest: options.getRequest ?? getRequest });
7
7
  }
@@ -15,13 +15,4 @@ export function betterAuthHandlers(resolveAuth) {
15
15
  export function tanStackHealthHandler(check, options = {}) {
16
16
  return () => healthResponse(check, options);
17
17
  }
18
- export function canonicalHostRequest(request, next, options) {
19
- const redirect = canonicalRedirect(request.url, options);
20
- return redirect ? Response.redirect(redirect, 301) : next();
21
- }
22
- export function canonicalHostMiddleware(resolveOptions) {
23
- return createMiddleware({ type: 'request' }).server(({ request, next }) => {
24
- return canonicalHostRequest(request, next, resolveOptions());
25
- });
26
- }
27
18
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/tanstack/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAsB,MAAM,oBAAoB,CAAA;AAC1E,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,cAAc,GAIf,MAAM,oBAAoB,CAAA;AAI3B,MAAM,UAAU,iBAAiB,CAAC,OAAO,GAAuB,EAAE;IAChE,OAAO,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,UAAU,EAAE,CAAC,CAAA;AAChF,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,OAAO,GAAkB,EAAE,EAAE,OAAO,GAAG,UAAU,EAAE;IAC/F,OAAO,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AAC5C,CAAC;AAID,MAAM,UAAU,kBAAkB,CAAC,WAA8E;IAC/G,MAAM,MAAM,GAAG,CAAC,EAAE,OAAO,EAAkB,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9E,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAiC,EAAE,OAAO,GAA0B,EAAE;IAC1G,OAAO,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAI,OAAgB,EAAE,IAAa,EAAE,OAAiC;IACxG,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IACxD,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;AAC7D,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,cAA8C;IACpF,OAAO,gBAAgB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;QACxE,OAAO,oBAAoB,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAA;IAC9D,CAAC,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import { getRequest } from '@tanstack/react-start/server'\nimport { createMiddleware } from '@tanstack/react-start'\nimport { requireSameOrigin, type OriginOptions } from '../auth/origins.js'\nimport {\n canonicalRedirect,\n createRpc,\n healthResponse,\n type CanonicalRedirectOptions,\n type HealthResponseOptions,\n type RpcOptions,\n} from '../server/index.js'\n\nexport type TanStackRpcOptions = Omit<RpcOptions, 'getRequest'> & Pick<RpcOptions, 'getRequest'>\n\nexport function createTanStackRpc(options: TanStackRpcOptions = {}) {\n return createRpc({ ...options, getRequest: options.getRequest ?? getRequest })\n}\n\nexport function requireTanStackMutationOrigin(options: OriginOptions = {}, request = getRequest()) {\n return requireSameOrigin(request, options)\n}\n\ntype RequestContext = { request: Request }\n\nexport function betterAuthHandlers(resolveAuth: () => { handler(request: Request): Response | Promise<Response> }) {\n const handle = ({ request }: RequestContext) => resolveAuth().handler(request)\n return { GET: handle, POST: handle }\n}\n\nexport function tanStackHealthHandler(check: () => void | Promise<void>, options: HealthResponseOptions = {}) {\n return () => healthResponse(check, options)\n}\n\nexport function canonicalHostRequest<T>(request: Request, next: () => T, options: CanonicalRedirectOptions): Response | T {\n const redirect = canonicalRedirect(request.url, options)\n return redirect ? Response.redirect(redirect, 301) : next()\n}\n\nexport function canonicalHostMiddleware(resolveOptions: () => CanonicalRedirectOptions) {\n return createMiddleware({ type: 'request' }).server(({ request, next }) => {\n return canonicalHostRequest(request, next, resolveOptions())\n })\n}\n"]}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/tanstack/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAsB,MAAM,oBAAoB,CAAA;AAC1E,OAAO,EAAE,SAAS,EAAE,cAAc,EAA+C,MAAM,oBAAoB,CAAA;AAC3G,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAI/E,MAAM,UAAU,iBAAiB,CAAC,OAAO,GAAuB,EAAE;IAChE,OAAO,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,UAAU,EAAE,CAAC,CAAA;AAChF,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,OAAO,GAAkB,EAAE,EAAE,OAAO,GAAG,UAAU,EAAE;IAC/F,OAAO,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AAC5C,CAAC;AAID,MAAM,UAAU,kBAAkB,CAAC,WAA8E;IAC/G,MAAM,MAAM,GAAG,CAAC,EAAE,OAAO,EAAkB,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9E,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAiC,EAAE,OAAO,GAA0B,EAAE;IAC1G,OAAO,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAC7C,CAAC","sourcesContent":["import { getRequest } from '@tanstack/react-start/server'\nimport { requireSameOrigin, type OriginOptions } from '../auth/origins.js'\nimport { createRpc, healthResponse, type HealthResponseOptions, type RpcOptions } from '../server/index.js'\nexport { canonicalHostMiddleware, canonicalHostRequest } from './middleware.js'\n\nexport type TanStackRpcOptions = Omit<RpcOptions, 'getRequest'> & Pick<RpcOptions, 'getRequest'>\n\nexport function createTanStackRpc(options: TanStackRpcOptions = {}) {\n return createRpc({ ...options, getRequest: options.getRequest ?? getRequest })\n}\n\nexport function requireTanStackMutationOrigin(options: OriginOptions = {}, request = getRequest()) {\n return requireSameOrigin(request, options)\n}\n\ntype RequestContext = { request: Request }\n\nexport function betterAuthHandlers(resolveAuth: () => { handler(request: Request): Response | Promise<Response> }) {\n const handle = ({ request }: RequestContext) => resolveAuth().handler(request)\n return { GET: handle, POST: handle }\n}\n\nexport function tanStackHealthHandler(check: () => void | Promise<void>, options: HealthResponseOptions = {}) {\n return () => healthResponse(check, options)\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ras-stack",
3
- "version": "0.39.1",
3
+ "version": "0.39.2",
4
4
  "description": "Composable full-stack primitives shared across Richard Solomou's applications.",
5
5
  "keywords": [
6
6
  "authentication",
@@ -118,6 +118,10 @@
118
118
  "types": "./dist/tanstack/query.d.ts",
119
119
  "default": "./dist/tanstack/query.js"
120
120
  },
121
+ "./tanstack/middleware": {
122
+ "types": "./dist/tanstack/middleware.d.ts",
123
+ "default": "./dist/tanstack/middleware.js"
124
+ },
121
125
  "./tanstack/server": {
122
126
  "types": "./dist/tanstack/server.d.ts",
123
127
  "default": "./dist/tanstack/server.js"