@shivaedev/platform 0.3.7 → 0.4.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.
- package/CHANGELOG.md +29 -1
- package/README.md +46 -0
- package/dist/better-auth/adapter.d.ts +2 -2
- package/dist/better-auth/adapter.d.ts.map +1 -1
- package/dist/better-auth/adapter.js +39 -95
- package/dist/better-auth/adapter.js.map +1 -1
- package/dist/better-auth/relation.d.ts +7 -27
- package/dist/better-auth/relation.d.ts.map +1 -1
- package/dist/better-auth/relation.js +2 -84
- package/dist/better-auth/relation.js.map +1 -1
- package/dist/better-auth/row-adapter.d.ts +8 -0
- package/dist/better-auth/row-adapter.d.ts.map +1 -0
- package/dist/better-auth/row-adapter.js +45 -0
- package/dist/better-auth/row-adapter.js.map +1 -0
- package/dist/better-auth/where.d.ts +22 -0
- package/dist/better-auth/where.d.ts.map +1 -0
- package/dist/better-auth/where.js +93 -0
- package/dist/better-auth/where.js.map +1 -0
- package/dist/better-auth.d.ts +1 -1
- package/dist/errors/rejected-field.d.ts +7 -0
- package/dist/errors/rejected-field.d.ts.map +1 -0
- package/dist/errors/rejected-field.js +5 -0
- package/dist/errors/rejected-field.js.map +1 -0
- package/dist/errors/taxonomy.d.ts +40 -0
- package/dist/errors/taxonomy.d.ts.map +1 -0
- package/dist/errors/taxonomy.js +18 -0
- package/dist/errors/taxonomy.js.map +1 -0
- package/dist/errors.d.ts +3 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +3 -0
- package/dist/errors.js.map +1 -0
- package/dist/node-http/subscription-signal.d.ts.map +1 -1
- package/dist/node-http/subscription-signal.js +6 -1
- package/dist/node-http/subscription-signal.js.map +1 -1
- package/dist/node-http.d.ts +1 -1
- package/dist/rpc/identity.d.ts +15 -0
- package/dist/rpc/identity.d.ts.map +1 -0
- package/dist/rpc/identity.js +8 -0
- package/dist/rpc/identity.js.map +1 -0
- package/dist/rpc/middleware.d.ts +15 -0
- package/dist/rpc/middleware.d.ts.map +1 -0
- package/dist/rpc/middleware.js +12 -0
- package/dist/rpc/middleware.js.map +1 -0
- package/dist/rpc-server/adapters/better-auth-sessions.d.ts +4 -0
- package/dist/rpc-server/adapters/better-auth-sessions.d.ts.map +1 -0
- package/dist/rpc-server/adapters/better-auth-sessions.js +11 -0
- package/dist/rpc-server/adapters/better-auth-sessions.js.map +1 -0
- package/dist/rpc-server/origin.d.ts +15 -0
- package/dist/rpc-server/origin.d.ts.map +1 -0
- package/dist/rpc-server/origin.js +12 -0
- package/dist/rpc-server/origin.js.map +1 -0
- package/dist/rpc-server/redact-cause.d.ts +6 -0
- package/dist/rpc-server/redact-cause.d.ts.map +1 -0
- package/dist/rpc-server/redact-cause.js +28 -0
- package/dist/rpc-server/redact-cause.js.map +1 -0
- package/dist/rpc-server/redact.d.ts +3 -0
- package/dist/rpc-server/redact.d.ts.map +1 -0
- package/dist/rpc-server/redact.js +46 -0
- package/dist/rpc-server/redact.js.map +1 -0
- package/dist/rpc-server/sensitive.d.ts +5 -0
- package/dist/rpc-server/sensitive.d.ts.map +1 -0
- package/dist/rpc-server/sensitive.js +49 -0
- package/dist/rpc-server/sensitive.js.map +1 -0
- package/dist/rpc-server/session.d.ts +21 -0
- package/dist/rpc-server/session.d.ts.map +1 -0
- package/dist/rpc-server/session.js +28 -0
- package/dist/rpc-server/session.js.map +1 -0
- package/dist/rpc-server/tracing.d.ts +9 -0
- package/dist/rpc-server/tracing.d.ts.map +1 -0
- package/dist/rpc-server/tracing.js +32 -0
- package/dist/rpc-server/tracing.js.map +1 -0
- package/dist/rpc-server/transport.d.ts +4 -0
- package/dist/rpc-server/transport.d.ts.map +1 -0
- package/dist/rpc-server/transport.js +4 -0
- package/dist/rpc-server/transport.js.map +1 -0
- package/dist/rpc-server.d.ts +9 -0
- package/dist/rpc-server.d.ts.map +1 -0
- package/dist/rpc-server.js +9 -0
- package/dist/rpc-server.js.map +1 -0
- package/dist/rpc.d.ts +3 -0
- package/dist/rpc.d.ts.map +1 -0
- package/dist/rpc.js +3 -0
- package/dist/rpc.js.map +1 -0
- package/dist/runtime/make.d.ts +1 -1
- package/dist/runtime/make.d.ts.map +1 -1
- package/dist/runtime/make.js +10 -9
- package/dist/runtime/make.js.map +1 -1
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime.d.ts +2 -2
- package/dist/testing/types.d.ts.map +1 -1
- package/dist/testing/vitest.d.ts +1 -1
- package/dist/testing/vitest.d.ts.map +1 -1
- package/dist/testing/vitest.js +7 -9
- package/dist/testing/vitest.js.map +1 -1
- package/dist/testing.d.ts +2 -2
- package/package.json +38 -6
- package/src/better-auth/adapter.ts +50 -190
- package/src/better-auth/relation.ts +21 -163
- package/src/better-auth/row-adapter.ts +78 -0
- package/src/better-auth/where.ts +118 -0
- package/src/better-auth.ts +1 -1
- package/src/errors/rejected-field.ts +13 -0
- package/src/errors/taxonomy.ts +18 -0
- package/src/errors.ts +2 -0
- package/src/node-http/subscription-signal.ts +10 -15
- package/src/node-http.ts +1 -1
- package/src/rpc/identity.ts +11 -0
- package/src/rpc/middleware.ts +15 -0
- package/src/rpc-server/adapters/better-auth-sessions.ts +22 -0
- package/src/rpc-server/origin.ts +29 -0
- package/src/rpc-server/redact-cause.ts +41 -0
- package/src/rpc-server/redact.ts +42 -0
- package/src/rpc-server/sensitive.ts +60 -0
- package/src/rpc-server/session.ts +54 -0
- package/src/rpc-server/tracing.ts +56 -0
- package/src/rpc-server/transport.ts +8 -0
- package/src/rpc-server.ts +15 -0
- package/src/rpc.ts +2 -0
- package/src/runtime/make.ts +20 -27
- package/src/runtime/types.ts +3 -12
- package/src/runtime.ts +2 -2
- package/src/testing/types.ts +7 -32
- package/src/testing/vitest.ts +59 -89
- package/src/testing.ts +2 -2
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { all, and, not, or } from "@shivaedev/effect-prisma";
|
|
2
|
+
const escapeLike = (value) => value.replaceAll("\\", "\\\\").replaceAll("%", "\\%").replaceAll("_", "\\_");
|
|
3
|
+
const nonNullValues = (value) => (Array.isArray(value) ? value : [value]).filter((item) => item !== null);
|
|
4
|
+
const insensitiveStrings = (field, where, values) => {
|
|
5
|
+
const ilike = field.ilike;
|
|
6
|
+
if (where.mode !== "insensitive" || ilike === undefined || !values.every((item) => typeof item === "string")) {
|
|
7
|
+
return undefined;
|
|
8
|
+
}
|
|
9
|
+
return values.map((item) => ilike(escapeLike(String(item))));
|
|
10
|
+
};
|
|
11
|
+
const membership = (field, where) => {
|
|
12
|
+
const values = nonNullValues(where.value);
|
|
13
|
+
if (values.length === 0) {
|
|
14
|
+
return and(field.isNull(), field.isNotNull());
|
|
15
|
+
}
|
|
16
|
+
const matches = insensitiveStrings(field, where, values);
|
|
17
|
+
return matches === undefined ? field.in(values) : or(...matches);
|
|
18
|
+
};
|
|
19
|
+
const exclusion = (field, where) => {
|
|
20
|
+
const values = nonNullValues(where.value);
|
|
21
|
+
if (values.length === 0) {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
const matches = insensitiveStrings(field, where, values);
|
|
25
|
+
return matches === undefined ? field.notIn(values) : and(...matches.map((match) => not(match)));
|
|
26
|
+
};
|
|
27
|
+
const likePattern = (operator, escaped) => {
|
|
28
|
+
if (operator === "contains")
|
|
29
|
+
return `%${escaped}%`;
|
|
30
|
+
return operator === "starts_with" ? `${escaped}%` : `%${escaped}`;
|
|
31
|
+
};
|
|
32
|
+
const pattern = (field, where) => {
|
|
33
|
+
if (typeof where.value !== "string") {
|
|
34
|
+
throw new TypeError(`${where.operator} requires a string value`);
|
|
35
|
+
}
|
|
36
|
+
const text = likePattern(where.operator, escapeLike(where.value));
|
|
37
|
+
return where.mode === "insensitive" && field.ilike !== undefined ? field.ilike(text) : field.like(text);
|
|
38
|
+
};
|
|
39
|
+
const insensitiveEquality = (field, where) => {
|
|
40
|
+
const value = where.value;
|
|
41
|
+
if (where.mode !== "insensitive" || typeof value !== "string" || field.ilike === undefined)
|
|
42
|
+
return undefined;
|
|
43
|
+
if (where.operator === "eq")
|
|
44
|
+
return field.ilike(escapeLike(value));
|
|
45
|
+
if (where.operator === "ne")
|
|
46
|
+
return not(field.ilike(escapeLike(value)));
|
|
47
|
+
return undefined;
|
|
48
|
+
};
|
|
49
|
+
const comparison = (field, where) => {
|
|
50
|
+
const value = where.value;
|
|
51
|
+
switch (where.operator) {
|
|
52
|
+
case "eq":
|
|
53
|
+
return value === null ? field.isNull() : field.eq(value);
|
|
54
|
+
case "ne":
|
|
55
|
+
return value === null ? field.isNotNull() : field.neq(value);
|
|
56
|
+
case "lt":
|
|
57
|
+
return field.lt(value);
|
|
58
|
+
case "lte":
|
|
59
|
+
return field.lte(value);
|
|
60
|
+
case "gt":
|
|
61
|
+
return field.gt(value);
|
|
62
|
+
case "gte":
|
|
63
|
+
return field.gte(value);
|
|
64
|
+
case "in":
|
|
65
|
+
return membership(field, where);
|
|
66
|
+
case "not_in":
|
|
67
|
+
return exclusion(field, where);
|
|
68
|
+
case "contains":
|
|
69
|
+
case "starts_with":
|
|
70
|
+
case "ends_with":
|
|
71
|
+
return pattern(field, where);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
export const whereExpression = (fields, where) => {
|
|
75
|
+
const conjunctions = [];
|
|
76
|
+
const disjunctions = [];
|
|
77
|
+
for (const condition of where) {
|
|
78
|
+
const field = fields[condition.field];
|
|
79
|
+
if (field === undefined) {
|
|
80
|
+
throw new TypeError(`Unknown database field: ${condition.field}`);
|
|
81
|
+
}
|
|
82
|
+
const expression = insensitiveEquality(field, condition) ?? comparison(field, condition);
|
|
83
|
+
if (expression === undefined)
|
|
84
|
+
continue;
|
|
85
|
+
(condition.connector === "OR" ? disjunctions : conjunctions).push(expression);
|
|
86
|
+
}
|
|
87
|
+
if (disjunctions.length > 0)
|
|
88
|
+
conjunctions.push(or(...disjunctions));
|
|
89
|
+
if (conjunctions.length === 0)
|
|
90
|
+
return all();
|
|
91
|
+
return conjunctions.length === 1 ? conjunctions[0] : and(...conjunctions);
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=where.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"where.js","sourceRoot":"","sources":["../../src/better-auth/where.ts"],"names":[],"mappings":"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"}
|
package/dist/better-auth.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { type EffectPrismaAdapterOptions, effectPrismaAdapter, } from "./better-auth/adapter.
|
|
1
|
+
export { type EffectPrismaAdapterOptions, effectPrismaAdapter, } from "./better-auth/adapter.ts";
|
|
2
2
|
//# sourceMappingURL=better-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rejected-field.d.ts","sourceRoot":"","sources":["../../src/errors/rejected-field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AAExC,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB;AAMD,eAAO,MAAM,aAAa,GAAI,OAAO,OAAO,KAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CACF,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Option, Schema } from "effect";
|
|
2
|
+
const Rejected = Schema.Struct({ _tag: Schema.String, field: Schema.String, message: Schema.String });
|
|
3
|
+
const decode = Schema.decodeUnknownOption(Rejected);
|
|
4
|
+
export const rejectedField = (error) => Option.map(decode(error), ({ field, message }) => ({ field, message }));
|
|
5
|
+
//# sourceMappingURL=rejected-field.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rejected-field.js","sourceRoot":"","sources":["../../src/errors/rejected-field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAOxC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAEtG,MAAM,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AAEpD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAc,EAAgC,EAAE,CAC7E,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
declare const NotFound_base: Schema.Class<NotFound, Schema.TaggedStruct<"NotFound", {
|
|
3
|
+
message: Schema.String;
|
|
4
|
+
}>, import("effect/Cause").YieldableError>;
|
|
5
|
+
export declare class NotFound extends NotFound_base {
|
|
6
|
+
}
|
|
7
|
+
declare const Unauthorized_base: Schema.Class<Unauthorized, Schema.TaggedStruct<"Unauthorized", {
|
|
8
|
+
message: Schema.String;
|
|
9
|
+
}>, import("effect/Cause").YieldableError>;
|
|
10
|
+
export declare class Unauthorized extends Unauthorized_base {
|
|
11
|
+
}
|
|
12
|
+
declare const Forbidden_base: Schema.Class<Forbidden, Schema.TaggedStruct<"Forbidden", {
|
|
13
|
+
message: Schema.String;
|
|
14
|
+
}>, import("effect/Cause").YieldableError>;
|
|
15
|
+
export declare class Forbidden extends Forbidden_base {
|
|
16
|
+
}
|
|
17
|
+
declare const BadRequest_base: Schema.Class<BadRequest, Schema.TaggedStruct<"BadRequest", {
|
|
18
|
+
message: Schema.String;
|
|
19
|
+
field: Schema.optionalKey<Schema.String>;
|
|
20
|
+
}>, import("effect/Cause").YieldableError>;
|
|
21
|
+
export declare class BadRequest extends BadRequest_base {
|
|
22
|
+
}
|
|
23
|
+
declare const Conflict_base: Schema.Class<Conflict, Schema.TaggedStruct<"Conflict", {
|
|
24
|
+
message: Schema.String;
|
|
25
|
+
field: Schema.optionalKey<Schema.String>;
|
|
26
|
+
}>, import("effect/Cause").YieldableError>;
|
|
27
|
+
export declare class Conflict extends Conflict_base {
|
|
28
|
+
}
|
|
29
|
+
declare const PreconditionFailed_base: Schema.Class<PreconditionFailed, Schema.TaggedStruct<"PreconditionFailed", {
|
|
30
|
+
message: Schema.String;
|
|
31
|
+
}>, import("effect/Cause").YieldableError>;
|
|
32
|
+
export declare class PreconditionFailed extends PreconditionFailed_base {
|
|
33
|
+
}
|
|
34
|
+
declare const AuthUnavailable_base: Schema.Class<AuthUnavailable, Schema.TaggedStruct<"AuthUnavailable", {
|
|
35
|
+
message: Schema.String;
|
|
36
|
+
}>, import("effect/Cause").YieldableError>;
|
|
37
|
+
export declare class AuthUnavailable extends AuthUnavailable_base {
|
|
38
|
+
}
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=taxonomy.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
const described = { message: Schema.String };
|
|
3
|
+
const perField = { message: Schema.String, field: Schema.optionalKey(Schema.String) };
|
|
4
|
+
export class NotFound extends Schema.TaggedError()("NotFound", described) {
|
|
5
|
+
}
|
|
6
|
+
export class Unauthorized extends Schema.TaggedError()("Unauthorized", described) {
|
|
7
|
+
}
|
|
8
|
+
export class Forbidden extends Schema.TaggedError()("Forbidden", described) {
|
|
9
|
+
}
|
|
10
|
+
export class BadRequest extends Schema.TaggedError()("BadRequest", perField) {
|
|
11
|
+
}
|
|
12
|
+
export class Conflict extends Schema.TaggedError()("Conflict", perField) {
|
|
13
|
+
}
|
|
14
|
+
export class PreconditionFailed extends Schema.TaggedError()("PreconditionFailed", described) {
|
|
15
|
+
}
|
|
16
|
+
export class AuthUnavailable extends Schema.TaggedError()("AuthUnavailable", described) {
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=taxonomy.js.map
|
|
@@ -0,0 +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"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +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"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscription-signal.d.ts","sourceRoot":"","sources":["../../src/node-http/subscription-signal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"subscription-signal.d.ts","sourceRoot":"","sources":["../../src/node-http/subscription-signal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,WAAW,6BAA6B;IAC7C,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,+DAA+D;IAC/D,QAAQ,CAAC,WAAW,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IACnD,4DAA4D;IAC5D,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,sBAAsB;IACtC,wDAAwD;IACxD,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;IAC7B,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC7B;AAYD;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,SAAS,6BAA6B,KAAG,sBAgC/E,CAAC"}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
const
|
|
1
|
+
const property = (value, key) => (typeof value === "object" && value !== null ? Reflect.get(value, key) : undefined);
|
|
2
|
+
const isIncomingMessage = (value) => typeof property(value, "socket") === "object" && typeof property(value, "once") === "function";
|
|
3
|
+
const nodeRequestFrom = (request) => {
|
|
4
|
+
const req = property(property(property(request, "runtime"), "node"), "req");
|
|
5
|
+
return isIncomingMessage(req) ? req : undefined;
|
|
6
|
+
};
|
|
2
7
|
/**
|
|
3
8
|
* Combine Web/procedure abort signals with node request and socket close events.
|
|
4
9
|
* The node events cover long-lived responses under Bun's node:http compatibility
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscription-signal.js","sourceRoot":"","sources":["../../src/node-http/subscription-signal.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"subscription-signal.js","sourceRoot":"","sources":["../../src/node-http/subscription-signal.ts"],"names":[],"mappings":"AAkBA,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAE,GAAW,EAAW,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAE/I,MAAM,iBAAiB,GAAG,CAAC,KAAc,EAA4B,EAAE,CACtE,OAAO,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,QAAQ,IAAI,OAAO,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,UAAU,CAAC;AAEhG,MAAM,eAAe,GAAG,CAAC,OAA4B,EAA+B,EAAE;IACrF,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5E,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACjD,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAAsC,EAA0B,EAAE;IACxG,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxE,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;QAC5C,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5E,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;IAChE,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;IAClC,MAAM,cAAc,GAAG,GAAG,EAAE;QAC3B,IAAI,CAAC,WAAW,CAAC,QAAQ;YAAE,UAAU,CAAC,KAAK,EAAE,CAAC;IAC/C,CAAC,CAAC;IACF,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC/C,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAC1C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACpC,IAAI,WAAW,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS;QAAE,UAAU,CAAC,KAAK,EAAE,CAAC;IAElE,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,OAAO;QACN,OAAO,EAAE,GAAG,EAAE;YACb,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,WAAW,CAAC,cAAc,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YACpD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;KAChC,CAAC;AACH,CAAC,CAAC"}
|
package/dist/node-http.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { type NodeSubscriptionSignal, type NodeSubscriptionSignalOptions, nodeSubscriptionSignal, } from "./node-http/subscription-signal.
|
|
1
|
+
export { type NodeSubscriptionSignal, type NodeSubscriptionSignalOptions, nodeSubscriptionSignal, } from "./node-http/subscription-signal.ts";
|
|
2
2
|
//# sourceMappingURL=node-http.d.ts.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Context, type Option } from "effect";
|
|
2
|
+
declare const RequestId_base: Context.ServiceClass<RequestId, "@shivaedev/platform/rpc/RequestId", string>;
|
|
3
|
+
export declare class RequestId extends RequestId_base {
|
|
4
|
+
}
|
|
5
|
+
export interface IdentityValue {
|
|
6
|
+
readonly id: string;
|
|
7
|
+
}
|
|
8
|
+
declare const Identity_base: Context.ServiceClass<Identity, "@shivaedev/platform/rpc/Identity", IdentityValue>;
|
|
9
|
+
export declare class Identity extends Identity_base {
|
|
10
|
+
}
|
|
11
|
+
declare const OptionalIdentity_base: Context.ServiceClass<OptionalIdentity, "@shivaedev/platform/rpc/OptionalIdentity", Option.Option<IdentityValue>>;
|
|
12
|
+
export declare class OptionalIdentity extends OptionalIdentity_base {
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/rpc/identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC;;AAE9C,qBAAa,SAAU,SAAQ,cAAyE;CAAG;AAE3G,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACpB;;AAED,qBAAa,QAAS,SAAQ,aAA8E;CAAG;;AAE/G,qBAAa,gBAAiB,SAAQ,qBAA6G;CAAG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Context } from "effect";
|
|
2
|
+
export class RequestId extends Context.Service()("@shivaedev/platform/rpc/RequestId") {
|
|
3
|
+
}
|
|
4
|
+
export class Identity extends Context.Service()("@shivaedev/platform/rpc/Identity") {
|
|
5
|
+
}
|
|
6
|
+
export class OptionalIdentity extends Context.Service()("@shivaedev/platform/rpc/OptionalIdentity") {
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/rpc/identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,QAAQ,CAAC;AAE9C,MAAM,OAAO,SAAU,SAAQ,OAAO,CAAC,OAAO,EAAqB,CAAC,mCAAmC,CAAC;CAAG;AAM3G,MAAM,OAAO,QAAS,SAAQ,OAAO,CAAC,OAAO,EAA2B,CAAC,kCAAkC,CAAC;CAAG;AAE/G,MAAM,OAAO,gBAAiB,SAAQ,OAAO,CAAC,OAAO,EAAkD,CAAC,0CAA0C,CAAC;CAAG"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
import { RpcMiddleware } from "effect/unstable/rpc";
|
|
3
|
+
import { AuthUnavailable, Forbidden, Unauthorized } from "../errors/taxonomy.ts";
|
|
4
|
+
import type { Identity, OptionalIdentity, RequestId } from "./identity.ts";
|
|
5
|
+
declare const RequestTracing_base: RpcMiddleware.ServiceClass<RequestTracing, "@shivaedev/platform/rpc/RequestTracing", RequestId, Schema.Never, never, never, false>;
|
|
6
|
+
export declare class RequestTracing extends RequestTracing_base {
|
|
7
|
+
}
|
|
8
|
+
declare const Authenticated_base: RpcMiddleware.ServiceClass<Authenticated, "@shivaedev/platform/rpc/Authenticated", Identity, Schema.Union<readonly [typeof Unauthorized, typeof AuthUnavailable, typeof Forbidden]>, never, never, false>;
|
|
9
|
+
export declare class Authenticated extends Authenticated_base {
|
|
10
|
+
}
|
|
11
|
+
declare const MaybeAuthenticated_base: RpcMiddleware.ServiceClass<MaybeAuthenticated, "@shivaedev/platform/rpc/MaybeAuthenticated", OptionalIdentity, Schema.Union<readonly [typeof AuthUnavailable, typeof Forbidden]>, never, never, false>;
|
|
12
|
+
export declare class MaybeAuthenticated extends MaybeAuthenticated_base {
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/rpc/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;;AAE3E,qBAAa,cAAe,SAAQ,mBAA0G;CAAG;;AAEjJ,qBAAa,aAAc,SAAQ,kBAEjC;CAAG;;AAEL,qBAAa,kBAAmB,SAAQ,uBAGvC;CAAG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
import { RpcMiddleware } from "effect/unstable/rpc";
|
|
3
|
+
import { AuthUnavailable, Forbidden, Unauthorized } from "../errors/taxonomy.js";
|
|
4
|
+
export class RequestTracing extends RpcMiddleware.Service()("@shivaedev/platform/rpc/RequestTracing") {
|
|
5
|
+
}
|
|
6
|
+
export class Authenticated extends RpcMiddleware.Service()("@shivaedev/platform/rpc/Authenticated", {
|
|
7
|
+
error: Schema.Union([Unauthorized, AuthUnavailable, Forbidden]),
|
|
8
|
+
}) {
|
|
9
|
+
}
|
|
10
|
+
export class MaybeAuthenticated extends RpcMiddleware.Service()("@shivaedev/platform/rpc/MaybeAuthenticated", { error: Schema.Union([AuthUnavailable, Forbidden]) }) {
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/rpc/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGjF,MAAM,OAAO,cAAe,SAAQ,aAAa,CAAC,OAAO,EAA2C,CAAC,wCAAwC,CAAC;CAAG;AAEjJ,MAAM,OAAO,aAAc,SAAQ,aAAa,CAAC,OAAO,EAAyC,CAAC,uCAAuC,EAAE;IAC1I,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;CAC/D,CAAC;CAAG;AAEL,MAAM,OAAO,kBAAmB,SAAQ,aAAa,CAAC,OAAO,EAAsD,CAClH,4CAA4C,EAC5C,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,EAAE,CACrD;CAAG"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { SessionProvider, SessionShape } from "../session.ts";
|
|
2
|
+
export type GetSession<Session extends SessionShape> = (headers: globalThis.Headers) => Promise<Session | null>;
|
|
3
|
+
export declare const betterAuthSessions: <Session extends SessionShape>(getSession: GetSession<Session>) => SessionProvider<Session>;
|
|
4
|
+
//# sourceMappingURL=better-auth-sessions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"better-auth-sessions.d.ts","sourceRoot":"","sources":["../../../src/rpc-server/adapters/better-auth-sessions.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEnE,MAAM,MAAM,UAAU,CAAC,OAAO,SAAS,YAAY,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AAQhH,eAAO,MAAM,kBAAkB,GAAI,OAAO,SAAS,YAAY,EAAE,YAAY,UAAU,CAAC,OAAO,CAAC,KAAG,eAAe,CAAC,OAAO,CAOxH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Effect, Option } from "effect";
|
|
2
|
+
import { AuthUnavailable } from "../../errors/taxonomy.js";
|
|
3
|
+
import { redact } from "../redact.js";
|
|
4
|
+
const unavailable = (cause) => Effect.andThen(Effect.logError("Authentication provider failed", redact(cause)), Effect.fail(new AuthUnavailable({ message: "Authentication is temporarily unavailable" })));
|
|
5
|
+
export const betterAuthSessions = (getSession) => ({
|
|
6
|
+
get: Effect.fn("PlatformRpc.betterAuthSession")(function* (headers) {
|
|
7
|
+
const session = yield* Effect.tryPromise(() => getSession(new globalThis.Headers(headers))).pipe(Effect.catch((error) => unavailable(error.cause)));
|
|
8
|
+
return Option.fromNullishOr(session);
|
|
9
|
+
}),
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=better-auth-sessions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"better-auth-sessions.js","sourceRoot":"","sources":["../../../src/rpc-server/adapters/better-auth-sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAKtC,MAAM,WAAW,GAAG,CAAC,KAAc,EAAE,EAAE,CACtC,MAAM,CAAC,OAAO,CACb,MAAM,CAAC,QAAQ,CAAC,gCAAgC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAChE,MAAM,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAC,CAAC,CAC1F,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAA+B,UAA+B,EAA4B,EAAE,CAAC,CAAC;IAC/H,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,+BAA+B,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAwB;QAClF,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAC/F,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CACjD,CAAC;QACF,OAAO,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Option } from "effect";
|
|
2
|
+
import { Headers } from "effect/unstable/http";
|
|
3
|
+
export interface OriginRequest {
|
|
4
|
+
readonly origin: Option.Option<string>;
|
|
5
|
+
readonly rpc: string;
|
|
6
|
+
readonly headers: Headers.Headers;
|
|
7
|
+
}
|
|
8
|
+
export type OriginPolicy = (request: OriginRequest) => boolean;
|
|
9
|
+
export interface TrustedOriginsOptions {
|
|
10
|
+
readonly allow: ReadonlyArray<string>;
|
|
11
|
+
readonly missing: "allow" | "reject";
|
|
12
|
+
}
|
|
13
|
+
export declare const trustedOrigins: (options: TrustedOriginsOptions) => OriginPolicy;
|
|
14
|
+
export declare const originRequest: (headers: Headers.Headers, rpc: string) => OriginRequest;
|
|
15
|
+
//# sourceMappingURL=origin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"origin.d.ts","sourceRoot":"","sources":["../../src/rpc-server/origin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;CAClC;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC;AAE/D,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC;CACrC;AAED,eAAO,MAAM,cAAc,GACzB,SAAS,qBAAqB,KAAG,YAK/B,CAAC;AAEL,eAAO,MAAM,aAAa,GAAI,SAAS,OAAO,CAAC,OAAO,EAAE,KAAK,MAAM,KAAG,aAIpE,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Option } from "effect";
|
|
2
|
+
import { Headers } from "effect/unstable/http";
|
|
3
|
+
export const trustedOrigins = (options) => ({ origin }) => Option.match(origin, {
|
|
4
|
+
onNone: () => options.missing === "allow",
|
|
5
|
+
onSome: (value) => options.allow.includes(value),
|
|
6
|
+
});
|
|
7
|
+
export const originRequest = (headers, rpc) => ({
|
|
8
|
+
origin: Headers.get(headers, "origin"),
|
|
9
|
+
rpc,
|
|
10
|
+
headers,
|
|
11
|
+
});
|
|
12
|
+
//# sourceMappingURL=origin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"origin.js","sourceRoot":"","sources":["../../src/rpc-server/origin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAe/C,MAAM,CAAC,MAAM,cAAc,GAC1B,CAAC,OAA8B,EAAgB,EAAE,CACjD,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CACd,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE;IACpB,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,KAAK,OAAO;IACzC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;CAChD,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAwB,EAAE,GAAW,EAAiB,EAAE,CAAC,CAAC;IACvF,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC;IACtC,GAAG;IACH,OAAO;CACP,CAAC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Cause, ErrorReporter } from "effect";
|
|
2
|
+
import { type SensitiveKey } from "./sensitive.ts";
|
|
3
|
+
export declare const redactDefect: (defect: unknown, sensitive?: SensitiveKey) => unknown;
|
|
4
|
+
export declare const redactCause: <E>(cause: Cause.Cause<E>, sensitive?: SensitiveKey) => Cause.Cause<E>;
|
|
5
|
+
export declare const redactingErrorReporter: (reporter: ErrorReporter.ErrorReporter, sensitive?: SensitiveKey) => ErrorReporter.ErrorReporter;
|
|
6
|
+
//# sourceMappingURL=redact-cause.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact-cause.d.ts","sourceRoot":"","sources":["../../src/rpc-server/redact-cause.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAW,aAAa,EAAa,MAAM,QAAQ,CAAC;AAElE,OAAO,EAA8B,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAoB/E,eAAO,MAAM,YAAY,GAAI,QAAQ,OAAO,EAAE,YAAW,YAA6B,KAAG,OACF,CAAC;AAExF,eAAO,MAAM,WAAW,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,YAAW,YAA6B,KAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAO5G,CAAC;AAEH,eAAO,MAAM,sBAAsB,GAClC,UAAU,aAAa,CAAC,aAAa,EACrC,YAAW,YAA6B,KACtC,aAAa,CAAC,aAGf,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Cause, Context, ErrorReporter, Predicate } from "effect";
|
|
2
|
+
import { redact } from "./redact.js";
|
|
3
|
+
import { isSensitiveKey, redactText } from "./sensitive.js";
|
|
4
|
+
const reporterHints = (error, sensitive) => ({
|
|
5
|
+
...(ErrorReporter.isIgnored(error) ? { [ErrorReporter.ignore]: true } : {}),
|
|
6
|
+
...(ErrorReporter.severity in error ? { [ErrorReporter.severity]: ErrorReporter.getSeverity(error) } : {}),
|
|
7
|
+
...(ErrorReporter.attributes in error ? { [ErrorReporter.attributes]: redact(ErrorReporter.getAttributes(error), sensitive) } : {}),
|
|
8
|
+
});
|
|
9
|
+
const redactError = (error, sensitive) => {
|
|
10
|
+
const options = error.cause === undefined ? undefined : { cause: redact(error.cause, sensitive) };
|
|
11
|
+
const copy = new Error(redactText(error.message, sensitive), options);
|
|
12
|
+
Object.defineProperty(copy, "name", { value: error.name, writable: true, configurable: true });
|
|
13
|
+
Object.defineProperty(copy, "stack", {
|
|
14
|
+
value: error.stack === undefined ? undefined : redactText(error.stack, sensitive),
|
|
15
|
+
writable: true,
|
|
16
|
+
configurable: true,
|
|
17
|
+
});
|
|
18
|
+
return Object.assign(copy, redact(Object.fromEntries(Object.entries(error)), sensitive), reporterHints(error, sensitive));
|
|
19
|
+
};
|
|
20
|
+
export const redactDefect = (defect, sensitive = isSensitiveKey) => Predicate.isError(defect) ? redactError(defect, sensitive) : redact(defect, sensitive);
|
|
21
|
+
export const redactCause = (cause, sensitive = isSensitiveKey) => Cause.fromReasons(cause.reasons.flatMap((reason) => Cause.isDieReason(reason)
|
|
22
|
+
? Cause.annotate(Cause.die(redactDefect(reason.defect, sensitive)), Context.makeUnsafe(reason.annotations)).reasons
|
|
23
|
+
: [reason]));
|
|
24
|
+
export const redactingErrorReporter = (reporter, sensitive = isSensitiveKey) => ({
|
|
25
|
+
[ErrorReporter.TypeId]: ErrorReporter.TypeId,
|
|
26
|
+
report: (options) => reporter.report({ ...options, cause: redactCause(options.cause, sensitive) }),
|
|
27
|
+
});
|
|
28
|
+
//# sourceMappingURL=redact-cause.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact-cause.js","sourceRoot":"","sources":["../../src/rpc-server/redact-cause.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/rpc-server/redact.ts"],"names":[],"mappings":"AACA,OAAO,EAAwC,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAwCzF,eAAO,MAAM,MAAM,GAAI,OAAO,OAAO,EAAE,YAAW,YAA6B,KAAG,OAAoC,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Predicate, Redacted } from "effect";
|
|
2
|
+
import { isSensitiveKey, REDACTED, redactText } from "./sensitive.js";
|
|
3
|
+
const MAX_DEPTH = 8;
|
|
4
|
+
const MAX_ENTRIES = 50;
|
|
5
|
+
const binary = (value) => {
|
|
6
|
+
if (ArrayBuffer.isView(value))
|
|
7
|
+
return `<${value.constructor.name} ${value.byteLength} bytes>`;
|
|
8
|
+
if (value instanceof ArrayBuffer)
|
|
9
|
+
return `<ArrayBuffer ${value.byteLength} bytes>`;
|
|
10
|
+
return undefined;
|
|
11
|
+
};
|
|
12
|
+
const entriesOf = (value) => {
|
|
13
|
+
const entries = Object.entries(value);
|
|
14
|
+
if (!Predicate.isError(value))
|
|
15
|
+
return entries;
|
|
16
|
+
const shape = [
|
|
17
|
+
["name", value.name],
|
|
18
|
+
["message", value.message],
|
|
19
|
+
["stack", value.stack],
|
|
20
|
+
];
|
|
21
|
+
return value.cause === undefined ? [...shape, ...entries] : [...shape, ...entries, ["cause", value.cause]];
|
|
22
|
+
};
|
|
23
|
+
const walk = (value, sensitive, depth) => {
|
|
24
|
+
if (Redacted.isRedacted(value))
|
|
25
|
+
return REDACTED;
|
|
26
|
+
if (Predicate.isString(value))
|
|
27
|
+
return redactText(value, sensitive);
|
|
28
|
+
if (!Predicate.isObjectOrArray(value))
|
|
29
|
+
return value;
|
|
30
|
+
const summary = binary(value);
|
|
31
|
+
if (summary !== undefined)
|
|
32
|
+
return summary;
|
|
33
|
+
if (depth >= MAX_DEPTH)
|
|
34
|
+
return "<truncated>";
|
|
35
|
+
if (Array.isArray(value)) {
|
|
36
|
+
const items = value.slice(0, MAX_ENTRIES).map((item) => walk(item, sensitive, depth + 1));
|
|
37
|
+
return value.length > MAX_ENTRIES ? [...items, `<${value.length - MAX_ENTRIES} more items>`] : items;
|
|
38
|
+
}
|
|
39
|
+
const entries = entriesOf(value);
|
|
40
|
+
const kept = entries
|
|
41
|
+
.slice(0, MAX_ENTRIES)
|
|
42
|
+
.map(([key, nested]) => [key, sensitive(key) ? REDACTED : walk(nested, sensitive, depth + 1)]);
|
|
43
|
+
return Object.fromEntries(entries.length > MAX_ENTRIES ? [...kept, ["<truncated>", `${entries.length - MAX_ENTRIES} more keys`]] : kept);
|
|
44
|
+
};
|
|
45
|
+
export const redact = (value, sensitive = isSensitiveKey) => walk(value, sensitive, 0);
|
|
46
|
+
//# sourceMappingURL=redact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/rpc-server/redact.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const REDACTED = "<redacted>";
|
|
2
|
+
export type SensitiveKey = (key: string) => boolean;
|
|
3
|
+
export declare const isSensitiveKey: SensitiveKey;
|
|
4
|
+
export declare const redactText: (text: string, sensitive: SensitiveKey) => string;
|
|
5
|
+
//# sourceMappingURL=sensitive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sensitive.d.ts","sourceRoot":"","sources":["../../src/rpc-server/sensitive.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,eAAe,CAAC;AA0BrC,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;AASpD,eAAO,MAAM,cAAc,EAAE,YAO5B,CAAC;AAcF,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,EAAE,WAAW,YAAY,KAAG,MAGlE,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export const REDACTED = "<redacted>";
|
|
2
|
+
const MAX_STRING = 2048;
|
|
3
|
+
const SENSITIVE_PARTS = [
|
|
4
|
+
"password",
|
|
5
|
+
"passphrase",
|
|
6
|
+
"secret",
|
|
7
|
+
"token",
|
|
8
|
+
"authorization",
|
|
9
|
+
"cookie",
|
|
10
|
+
"apikey",
|
|
11
|
+
"accesskey",
|
|
12
|
+
"credential",
|
|
13
|
+
"privatekey",
|
|
14
|
+
"jwt",
|
|
15
|
+
"bearer",
|
|
16
|
+
"signature",
|
|
17
|
+
"sessionid",
|
|
18
|
+
"cardnumber",
|
|
19
|
+
"accountnumber",
|
|
20
|
+
"csrf",
|
|
21
|
+
"xsrf",
|
|
22
|
+
];
|
|
23
|
+
const SENSITIVE_WORDS = ["otp", "pin", "cvv", "cvc", "ssn", "iban"];
|
|
24
|
+
const SENSITIVE_NAMES = ["session", "pan"];
|
|
25
|
+
const wordsOf = (key) => key
|
|
26
|
+
.replaceAll(/([a-z0-9])([A-Z])/g, "$1 $2")
|
|
27
|
+
.replaceAll(/([A-Z])([A-Z][a-z])/g, "$1 $2")
|
|
28
|
+
.toLowerCase()
|
|
29
|
+
.split(/[\s_-]+/);
|
|
30
|
+
export const isSensitiveKey = (key) => {
|
|
31
|
+
const normalized = key.toLowerCase().replaceAll(/[-_]/g, "");
|
|
32
|
+
return (SENSITIVE_NAMES.includes(normalized) ||
|
|
33
|
+
SENSITIVE_PARTS.some((part) => normalized.includes(part)) ||
|
|
34
|
+
wordsOf(key).some((word) => SENSITIVE_WORDS.includes(word)));
|
|
35
|
+
};
|
|
36
|
+
const AUTH_SCHEME = /\b(Bearer|Basic)\s+[A-Za-z0-9._~+/-]+=*/gi;
|
|
37
|
+
const JWT = /\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]*/g;
|
|
38
|
+
const URL_PASSWORD = /(\/\/[^:/\s@]+:)[^@/\s]+@/g;
|
|
39
|
+
const ASSIGNMENT = /([A-Za-z][\w.-]*)(["']?\s*[=:]\s*["']?)([^\s"'&,;]+)/g;
|
|
40
|
+
const scrub = (text, sensitive) => text
|
|
41
|
+
.replaceAll(AUTH_SCHEME, `$1 ${REDACTED}`)
|
|
42
|
+
.replaceAll(JWT, REDACTED)
|
|
43
|
+
.replaceAll(URL_PASSWORD, `$1${REDACTED}@`)
|
|
44
|
+
.replaceAll(ASSIGNMENT, (match, key, separator) => (sensitive(key) ? `${key}${separator}${REDACTED}` : match));
|
|
45
|
+
export const redactText = (text, sensitive) => {
|
|
46
|
+
const scrubbed = scrub(text, sensitive);
|
|
47
|
+
return scrubbed.length > MAX_STRING ? `${scrubbed.slice(0, MAX_STRING)}…<${scrubbed.length - MAX_STRING} more chars>` : scrubbed;
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=sensitive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sensitive.js","sourceRoot":"","sources":["../../src/rpc-server/sensitive.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,YAAY,CAAC;AAErC,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB,MAAM,eAAe,GAAG;IACvB,UAAU;IACV,YAAY;IACZ,QAAQ;IACR,OAAO;IACP,eAAe;IACf,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,KAAK;IACL,QAAQ;IACR,WAAW;IACX,WAAW;IACX,YAAY;IACZ,eAAe;IACf,MAAM;IACN,MAAM;CACN,CAAC;AACF,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AACpE,MAAM,eAAe,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAI3C,MAAM,OAAO,GAAG,CAAC,GAAW,EAAiB,EAAE,CAC9C,GAAG;KACD,UAAU,CAAC,oBAAoB,EAAE,OAAO,CAAC;KACzC,UAAU,CAAC,sBAAsB,EAAE,OAAO,CAAC;KAC3C,WAAW,EAAE;KACb,KAAK,CAAC,SAAS,CAAC,CAAC;AAEpB,MAAM,CAAC,MAAM,cAAc,GAAiB,CAAC,GAAG,EAAE,EAAE;IACnD,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC7D,OAAO,CACN,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC;QACpC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAC3D,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,2CAA2C,CAAC;AAChE,MAAM,GAAG,GAAG,sDAAsD,CAAC;AACnE,MAAM,YAAY,GAAG,4BAA4B,CAAC;AAClD,MAAM,UAAU,GAAG,uDAAuD,CAAC;AAE3E,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,SAAuB,EAAU,EAAE,CAC/D,IAAI;KACF,UAAU,CAAC,WAAW,EAAE,MAAM,QAAQ,EAAE,CAAC;KACzC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC;KACzB,UAAU,CAAC,YAAY,EAAE,KAAK,QAAQ,GAAG,CAAC;KAC1C,UAAU,CAAC,UAAU,EAAE,CAAC,KAAa,EAAE,GAAW,EAAE,SAAiB,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,SAAS,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAEzI,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,SAAuB,EAAU,EAAE;IAC3E,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACxC,OAAO,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,QAAQ,CAAC,MAAM,GAAG,UAAU,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC;AAClI,CAAC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Effect, Layer, Option } from "effect";
|
|
2
|
+
import type { Headers } from "effect/unstable/http";
|
|
3
|
+
import { type AuthUnavailable, Forbidden } from "../errors/taxonomy.ts";
|
|
4
|
+
import { Authenticated, MaybeAuthenticated } from "../rpc/middleware.ts";
|
|
5
|
+
import { type OriginPolicy } from "./origin.ts";
|
|
6
|
+
export interface SessionShape {
|
|
7
|
+
readonly user: {
|
|
8
|
+
readonly id: string;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export interface SessionProvider<Session extends SessionShape> {
|
|
12
|
+
readonly get: (headers: Headers.Headers) => Effect.Effect<Option.Option<Session>, AuthUnavailable>;
|
|
13
|
+
}
|
|
14
|
+
export interface SessionPolicy<Session extends SessionShape> {
|
|
15
|
+
readonly provider: SessionProvider<Session>;
|
|
16
|
+
readonly origin: OriginPolicy;
|
|
17
|
+
}
|
|
18
|
+
export declare const resolveSession: <Session extends SessionShape>(policy: SessionPolicy<Session>, headers: Headers.Headers, rpc: string) => Effect.Effect<Option.Option<Session>, AuthUnavailable | Forbidden>;
|
|
19
|
+
export declare const authenticatedLayer: <Session extends SessionShape>(policy: SessionPolicy<Session>) => Layer.Layer<Authenticated>;
|
|
20
|
+
export declare const maybeAuthenticatedLayer: <Session extends SessionShape>(policy: SessionPolicy<Session>) => Layer.Layer<MaybeAuthenticated>;
|
|
21
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/rpc-server/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,KAAK,eAAe,EAAE,SAAS,EAAgB,MAAM,uBAAuB,CAAC;AAEtF,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,KAAK,YAAY,EAAiB,MAAM,aAAa,CAAC;AAG/D,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC;AAED,MAAM,WAAW,eAAe,CAAC,OAAO,SAAS,YAAY;IAC5D,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC;CACnG;AAED,MAAM,WAAW,aAAa,CAAC,OAAO,SAAS,YAAY;IAC1D,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;CAC9B;AAED,eAAO,MAAM,cAAc,EAAE,CAAC,OAAO,SAAS,YAAY,EACzD,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,EAC9B,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,GAAG,EAAE,MAAM,KACP,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,SAAS,CAMpE,CAAC;AAIH,eAAO,MAAM,kBAAkB,GAAI,OAAO,SAAS,YAAY,EAAE,QAAQ,aAAa,CAAC,OAAO,CAAC,KAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAQzH,CAAC;AAEH,eAAO,MAAM,uBAAuB,GAAI,OAAO,SAAS,YAAY,EAAE,QAAQ,aAAa,CAAC,OAAO,CAAC,KAAG,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAQnI,CAAC"}
|