@getstrata/core 0.5.70 → 0.5.72

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/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # @getstrata/core changelog
2
2
 
3
+ ## 0.5.72
4
+
5
+ - OpenAPI treats `POST /auth/forgot-password` and `POST /auth/reset-password` as public operations (no bearer).
6
+
7
+ ## 0.5.71
8
+
9
+ - OpenAPI treats `POST /auth/login` and `POST /auth/register` as public (no bearer), including when routes are registered under `API_PREFIX`.
10
+ - Route summaries look up `PUBLIC_ROUTE_DESCRIPTIONS` after stripping `API_PREFIX`.
11
+
3
12
  ## 0.5.70
4
13
 
5
14
  - `OAuthProvider.getAuthorizationUrl` / `exchangeCode` accept an optional `redirectUri` so HTMX login can use `/oauth/:provider/callback` while the API keeps `OAUTH_REDIRECT_URI`.
package/README.md CHANGED
@@ -82,7 +82,7 @@ import type { Migration } from "@getstrata/core/database/migrations/types";
82
82
  Package name: **`@getstrata/core`** (npm org [`@getstrata`](https://www.npmjs.com/org/getstrata)).
83
83
 
84
84
  1. Add `NPM_TOKEN` to GitHub repository secrets.
85
- 2. Tag a release: `git tag v0.5.70 && git push origin v0.5.70`
85
+ 2. Tag a release: `git tag v0.5.72 && git push origin v0.5.72`
86
86
  3. [Release workflow](../../.github/workflows/release.yml) builds and runs `npm publish --access public`.
87
87
 
88
88
  Previously published as `@eyk-workhub/framework@0.1.0`, deprecated in favor of this package.
@@ -51,6 +51,9 @@ function sdkClientClassName() {
51
51
  var PUBLIC_ROUTE_DESCRIPTIONS = {
52
52
  "GET /auth/me": "Current authenticated user",
53
53
  "POST /auth/login": "Login with email and password",
54
+ "POST /auth/register": "Register with name, email, and password",
55
+ "POST /auth/forgot-password": "Request a password reset email",
56
+ "POST /auth/reset-password": "Reset password with email and token",
54
57
  "GET /auth/tokens": "List API tokens",
55
58
  "POST /auth/tokens": "Create API token",
56
59
  "DELETE /auth/tokens/:id": "Revoke API token",
@@ -83,27 +86,38 @@ var PUBLIC_ROUTE_DESCRIPTIONS = {
83
86
  function toOpenApiPath(path) {
84
87
  return path.replace(/:([A-Za-z_]+)/g, "{$1}");
85
88
  }
89
+ function toRelativeApiPath(path) {
90
+ const prefix = apiPrefix();
91
+ if (path === prefix) {
92
+ return "/";
93
+ }
94
+ if (path.startsWith(`${prefix}/`)) {
95
+ return path.slice(prefix.length);
96
+ }
97
+ return path;
98
+ }
86
99
  function requiresBearerAuth(path, method) {
87
- if (path.startsWith("/auth/login") || path.startsWith("/auth/oauth")) {
100
+ const relative = toRelativeApiPath(path);
101
+ if (relative.startsWith("/auth/login") || relative.startsWith("/auth/register") || relative.startsWith("/auth/forgot-password") || relative.startsWith("/auth/reset-password") || relative.startsWith("/auth/oauth")) {
88
102
  return false;
89
103
  }
90
- if (path.startsWith("/scim/") || path.startsWith("/billing/webhooks/")) {
104
+ if (relative.startsWith("/scim/") || relative.startsWith("/billing/webhooks/") || path.startsWith("/scim/") || path.startsWith("/billing/webhooks/")) {
91
105
  return false;
92
106
  }
93
- if (["/health", "/ready", "/metrics", "/"].includes(path)) {
107
+ if (["/health", "/ready", "/metrics", "/"].includes(relative) || ["/health", "/ready", "/metrics", "/"].includes(path)) {
94
108
  return false;
95
109
  }
96
- if (method === "GET" && ["/organizations", "/projects", "/tasks", "/search"].some((prefix) => path.startsWith(prefix))) {
110
+ if (method === "GET" && ["/organizations", "/projects", "/tasks", "/search"].some((prefix) => relative.startsWith(prefix) || path.startsWith(prefix))) {
97
111
  return false;
98
112
  }
99
- return path.startsWith("/auth/") || ["POST", "PATCH", "PUT", "DELETE"].includes(method);
113
+ return relative.startsWith("/auth/") || ["POST", "PATCH", "PUT", "DELETE"].includes(method);
100
114
  }
101
115
  function generateOpenApiSpec(routes) {
102
116
  const paths = {};
103
117
  for (const route of routes) {
104
118
  const openApiPath = toOpenApiPath(route.path);
105
119
  const method = route.method.toLowerCase();
106
- const description = PUBLIC_ROUTE_DESCRIPTIONS[`${route.method} ${route.path}`] ?? `${route.method} ${route.path}`;
120
+ const description = PUBLIC_ROUTE_DESCRIPTIONS[`${route.method} ${toRelativeApiPath(route.path)}`] ?? PUBLIC_ROUTE_DESCRIPTIONS[`${route.method} ${route.path}`] ?? `${route.method} ${route.path}`;
107
121
  paths[openApiPath] ??= {};
108
122
  paths[openApiPath][method] = {
109
123
  summary: description,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getstrata/core",
3
- "version": "0.5.70",
3
+ "version": "0.5.72",
4
4
  "description": "Strata — Laravel-inspired Bun framework public API",
5
5
  "type": "module",
6
6
  "license": "MIT",