@shivaedev/platform 0.4.1 → 0.4.3

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,25 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.4.3 - 2026-09-26
4
+
5
+ ### Changed
6
+
7
+ - Pin the optional `better-auth` peer dependency to 1.6.30, the current 1.6
8
+ release, up from 1.6.25.
9
+
10
+ ## 0.4.2 - 2026-09-26
11
+
12
+ ### Added
13
+
14
+ - `TooManyRequests` in `@shivaedev/platform/errors`, a rejection with a
15
+ `message` for a caller that exceeded a rate limit. Effect tRPC sends it as
16
+ `TOO_MANY_REQUESTS`, HTTP 429.
17
+
18
+ ### Changed
19
+
20
+ - Require Effect tRPC 0.4.1, which maps `TooManyRequests` to HTTP 429 and
21
+ marks input-validation rejections with `invalidInput: true`.
22
+
3
23
  ## 0.4.1 - 2026-09-26
4
24
 
5
25
  ### Changed
package/README.md CHANGED
@@ -80,9 +80,10 @@ fallback remains available.
80
80
 
81
81
  `@shivaedev/platform/errors` exports browser-safe `Schema.TaggedError` classes:
82
82
  `NotFound`, `Unauthorized`, `Forbidden`, `BadRequest` and `Conflict` (both with an
83
- optional `field`), `PreconditionFailed` and `AuthUnavailable`. Use them as native
84
- RPC error schemas or effect-contract rejections. `rejectedField(error)` extracts
85
- `{ field, message }` from any field rejection so a form can show it.
83
+ optional `field`), `PreconditionFailed`, `TooManyRequests` and `AuthUnavailable`.
84
+ Use them as native RPC error schemas or effect-contract rejections.
85
+ `rejectedField(error)` extracts `{ field, message }` from any field rejection so a
86
+ form can show it.
86
87
 
87
88
  `@shivaedev/platform/rpc` declares the `RequestTracing`, `Authenticated` and
88
89
  `MaybeAuthenticated` middleware and the `RequestId`, `Identity` and
@@ -31,6 +31,11 @@ declare const PreconditionFailed_base: Schema.Class<PreconditionFailed, Schema.T
31
31
  }>, import("effect/Cause").YieldableError>;
32
32
  export declare class PreconditionFailed extends PreconditionFailed_base {
33
33
  }
34
+ declare const TooManyRequests_base: Schema.Class<TooManyRequests, Schema.TaggedStruct<"TooManyRequests", {
35
+ message: Schema.String;
36
+ }>, import("effect/Cause").YieldableError>;
37
+ export declare class TooManyRequests extends TooManyRequests_base {
38
+ }
34
39
  declare const AuthUnavailable_base: Schema.Class<AuthUnavailable, Schema.TaggedStruct<"AuthUnavailable", {
35
40
  message: Schema.String;
36
41
  }>, import("effect/Cause").YieldableError>;
@@ -1 +1 @@
1
- {"version":3,"file":"taxonomy.d.ts","sourceRoot":"","sources":["../../src/errors/taxonomy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;;;;AAKhC,qBAAa,QAAS,SAAQ,aAAqD;CAAG;;;;AAEtF,qBAAa,YAAa,SAAQ,iBAA6D;CAAG;;;;AAElG,qBAAa,SAAU,SAAQ,cAAuD;CAAG;;;;;AAEzF,qBAAa,UAAW,SAAQ,eAAwD;CAAG;;;;;AAE3F,qBAAa,QAAS,SAAQ,aAAoD;CAAG;;;;AAErF,qBAAa,kBAAmB,SAAQ,uBAAyE;CAAG;;;;AAEpH,qBAAa,eAAgB,SAAQ,oBAAmE;CAAG"}
1
+ {"version":3,"file":"taxonomy.d.ts","sourceRoot":"","sources":["../../src/errors/taxonomy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;;;;AAKhC,qBAAa,QAAS,SAAQ,aAAqD;CAAG;;;;AAEtF,qBAAa,YAAa,SAAQ,iBAA6D;CAAG;;;;AAElG,qBAAa,SAAU,SAAQ,cAAuD;CAAG;;;;;AAEzF,qBAAa,UAAW,SAAQ,eAAwD;CAAG;;;;;AAE3F,qBAAa,QAAS,SAAQ,aAAoD;CAAG;;;;AAErF,qBAAa,kBAAmB,SAAQ,uBAAyE;CAAG;;;;AAEpH,qBAAa,eAAgB,SAAQ,oBAAmE;CAAG;;;;AAE3G,qBAAa,eAAgB,SAAQ,oBAAmE;CAAG"}
@@ -13,6 +13,8 @@ export class Conflict extends Schema.TaggedError()("Conflict", perField) {
13
13
  }
14
14
  export class PreconditionFailed extends Schema.TaggedError()("PreconditionFailed", described) {
15
15
  }
16
+ export class TooManyRequests extends Schema.TaggedError()("TooManyRequests", described) {
17
+ }
16
18
  export class AuthUnavailable extends Schema.TaggedError()("AuthUnavailable", described) {
17
19
  }
18
20
  //# sourceMappingURL=taxonomy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"taxonomy.js","sourceRoot":"","sources":["../../src/errors/taxonomy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,SAAS,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AAC7C,MAAM,QAAQ,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AAEtF,MAAM,OAAO,QAAS,SAAQ,MAAM,CAAC,WAAW,EAAY,CAAC,UAAU,EAAE,SAAS,CAAC;CAAG;AAEtF,MAAM,OAAO,YAAa,SAAQ,MAAM,CAAC,WAAW,EAAgB,CAAC,cAAc,EAAE,SAAS,CAAC;CAAG;AAElG,MAAM,OAAO,SAAU,SAAQ,MAAM,CAAC,WAAW,EAAa,CAAC,WAAW,EAAE,SAAS,CAAC;CAAG;AAEzF,MAAM,OAAO,UAAW,SAAQ,MAAM,CAAC,WAAW,EAAc,CAAC,YAAY,EAAE,QAAQ,CAAC;CAAG;AAE3F,MAAM,OAAO,QAAS,SAAQ,MAAM,CAAC,WAAW,EAAY,CAAC,UAAU,EAAE,QAAQ,CAAC;CAAG;AAErF,MAAM,OAAO,kBAAmB,SAAQ,MAAM,CAAC,WAAW,EAAsB,CAAC,oBAAoB,EAAE,SAAS,CAAC;CAAG;AAEpH,MAAM,OAAO,eAAgB,SAAQ,MAAM,CAAC,WAAW,EAAmB,CAAC,iBAAiB,EAAE,SAAS,CAAC;CAAG"}
1
+ {"version":3,"file":"taxonomy.js","sourceRoot":"","sources":["../../src/errors/taxonomy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,SAAS,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AAC7C,MAAM,QAAQ,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AAEtF,MAAM,OAAO,QAAS,SAAQ,MAAM,CAAC,WAAW,EAAY,CAAC,UAAU,EAAE,SAAS,CAAC;CAAG;AAEtF,MAAM,OAAO,YAAa,SAAQ,MAAM,CAAC,WAAW,EAAgB,CAAC,cAAc,EAAE,SAAS,CAAC;CAAG;AAElG,MAAM,OAAO,SAAU,SAAQ,MAAM,CAAC,WAAW,EAAa,CAAC,WAAW,EAAE,SAAS,CAAC;CAAG;AAEzF,MAAM,OAAO,UAAW,SAAQ,MAAM,CAAC,WAAW,EAAc,CAAC,YAAY,EAAE,QAAQ,CAAC;CAAG;AAE3F,MAAM,OAAO,QAAS,SAAQ,MAAM,CAAC,WAAW,EAAY,CAAC,UAAU,EAAE,QAAQ,CAAC;CAAG;AAErF,MAAM,OAAO,kBAAmB,SAAQ,MAAM,CAAC,WAAW,EAAsB,CAAC,oBAAoB,EAAE,SAAS,CAAC;CAAG;AAEpH,MAAM,OAAO,eAAgB,SAAQ,MAAM,CAAC,WAAW,EAAmB,CAAC,iBAAiB,EAAE,SAAS,CAAC;CAAG;AAE3G,MAAM,OAAO,eAAgB,SAAQ,MAAM,CAAC,WAAW,EAAmB,CAAC,iBAAiB,EAAE,SAAS,CAAC;CAAG"}
package/dist/errors.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  export { type RejectedField, rejectedField } from "./errors/rejected-field.ts";
2
- export { AuthUnavailable, BadRequest, Conflict, Forbidden, NotFound, PreconditionFailed, Unauthorized } from "./errors/taxonomy.ts";
2
+ export { AuthUnavailable, BadRequest, Conflict, Forbidden, NotFound, PreconditionFailed, TooManyRequests, Unauthorized } from "./errors/taxonomy.ts";
3
3
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,kBAAkB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/errors.js CHANGED
@@ -1,3 +1,3 @@
1
1
  export { rejectedField } from "./errors/rejected-field.js";
2
- export { AuthUnavailable, BadRequest, Conflict, Forbidden, NotFound, PreconditionFailed, Unauthorized } from "./errors/taxonomy.js";
2
+ export { AuthUnavailable, BadRequest, Conflict, Forbidden, NotFound, PreconditionFailed, TooManyRequests, Unauthorized } from "./errors/taxonomy.js";
3
3
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,kBAAkB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shivaedev/platform",
3
- "version": "0.4.1",
3
+ "version": "0.4.3",
4
4
  "description": "Opinionated Effect application infrastructure for ShivaeDev services",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -75,10 +75,10 @@
75
75
  "peerDependencies": {
76
76
  "@effect/vitest": "4.0.0-rc.112",
77
77
  "@trpc/server": "11.18.0",
78
- "better-auth": "1.6.25",
78
+ "better-auth": "1.6.30",
79
79
  "effect": "4.0.0-rc.112",
80
80
  "@shivaedev/effect-prisma": "0.6.4",
81
- "@shivaedev/effect-trpc": "0.4.0"
81
+ "@shivaedev/effect-trpc": "0.4.1"
82
82
  },
83
83
  "peerDependenciesMeta": {
84
84
  "@effect/vitest": {
@@ -108,13 +108,13 @@
108
108
  "@trpc/server": "11.18.0",
109
109
  "@types/node": "24.10.1",
110
110
  "@typescript/native": "npm:typescript@7.0.2",
111
- "better-auth": "1.6.25",
111
+ "better-auth": "1.6.30",
112
112
  "effect": "4.0.0-rc.112",
113
113
  "superjson": "2.2.6",
114
114
  "typescript": "npm:@typescript/typescript6@6.0.2",
115
115
  "vitest": "4.1.9",
116
116
  "@shivaedev/effect-prisma": "0.6.4",
117
- "@shivaedev/effect-trpc": "0.4.0"
117
+ "@shivaedev/effect-trpc": "0.4.1"
118
118
  },
119
119
  "scripts": {
120
120
  "build": "node --eval \"import('node:fs').then(({ rmSync }) => rmSync('dist', { force: true, recursive: true }))\" && tsc6 --project tsconfig.build.json",
@@ -15,4 +15,6 @@ export class Conflict extends Schema.TaggedError<Conflict>()("Conflict", perFiel
15
15
 
16
16
  export class PreconditionFailed extends Schema.TaggedError<PreconditionFailed>()("PreconditionFailed", described) {}
17
17
 
18
+ export class TooManyRequests extends Schema.TaggedError<TooManyRequests>()("TooManyRequests", described) {}
19
+
18
20
  export class AuthUnavailable extends Schema.TaggedError<AuthUnavailable>()("AuthUnavailable", described) {}
package/src/errors.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export { type RejectedField, rejectedField } from "./errors/rejected-field.ts";
2
- export { AuthUnavailable, BadRequest, Conflict, Forbidden, NotFound, PreconditionFailed, Unauthorized } from "./errors/taxonomy.ts";
2
+ export { AuthUnavailable, BadRequest, Conflict, Forbidden, NotFound, PreconditionFailed, TooManyRequests, Unauthorized } from "./errors/taxonomy.ts";