@dreamkit/app 0.0.7-next.3 → 0.0.7-next.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.
Files changed (45) hide show
  1. package/lib/App.d.ts +2 -0
  2. package/lib/App.d.ts.map +1 -1
  3. package/lib/App.js +34 -18
  4. package/lib/Response.d.ts +6 -0
  5. package/lib/Response.d.ts.map +1 -0
  6. package/lib/Response.js +9 -0
  7. package/lib/ResponseHeaders.d.ts +3 -0
  8. package/lib/ResponseHeaders.d.ts.map +1 -0
  9. package/lib/ResponseHeaders.js +6 -0
  10. package/lib/builders/SessionBuilder.d.ts +56 -0
  11. package/lib/builders/SessionBuilder.d.ts.map +1 -0
  12. package/lib/builders/SessionBuilder.js +79 -0
  13. package/lib/builders/SettingsBuilder.d.ts.map +1 -1
  14. package/lib/builders/SettingsBuilder.js +2 -7
  15. package/lib/handlers/SessionHandler.d.ts +15 -0
  16. package/lib/handlers/SessionHandler.d.ts.map +1 -0
  17. package/lib/handlers/SessionHandler.js +18 -0
  18. package/lib/handlers/SettingsHandler.d.ts +1 -1
  19. package/lib/handlers/SettingsHandler.d.ts.map +1 -1
  20. package/lib/handlers/SettingsHandler.js +5 -2
  21. package/lib/index.d.ts +8 -1
  22. package/lib/index.d.ts.map +1 -1
  23. package/lib/index.js +8 -0
  24. package/lib/objects/$schema.d.ts +2 -0
  25. package/lib/objects/$schema.d.ts.map +1 -0
  26. package/lib/objects/$schema.js +2 -0
  27. package/lib/objects/$session.d.ts +6 -0
  28. package/lib/objects/$session.d.ts.map +1 -0
  29. package/lib/objects/$session.js +2 -0
  30. package/lib/presets/ClientSessionHandler.d.ts +30 -0
  31. package/lib/presets/ClientSessionHandler.d.ts.map +1 -0
  32. package/lib/presets/ClientSessionHandler.js +80 -0
  33. package/lib/presets/ClientSessionSettings.d.ts +17 -0
  34. package/lib/presets/ClientSessionSettings.d.ts.map +1 -0
  35. package/lib/presets/ClientSessionSettings.js +21 -0
  36. package/lib/utils/buffer.d.ts +3 -0
  37. package/lib/utils/buffer.d.ts.map +1 -0
  38. package/lib/utils/buffer.js +6 -0
  39. package/lib/utils/cookies.d.ts +18 -0
  40. package/lib/utils/cookies.d.ts.map +1 -0
  41. package/lib/utils/cookies.js +40 -0
  42. package/lib/utils/crypto.d.ts +11 -0
  43. package/lib/utils/crypto.d.ts.map +1 -0
  44. package/lib/utils/crypto.js +31 -0
  45. package/package.json +3 -3
package/lib/App.d.ts CHANGED
@@ -4,6 +4,7 @@ import { AppService, ServiceConstructor } from "./builders/ServiceBuilder.js";
4
4
  import { SettingsConstructor } from "./builders/SettingsBuilder.js";
5
5
  import { AppContext } from "./contexts/AppContext.js";
6
6
  import { RequestContext } from "./contexts/RequestContext.js";
7
+ import { SessionHandlerConstructor } from "./handlers/SessionHandler.js";
7
8
  import { SettingsHandler, SettingsHandlerConstructor } from "./handlers/SettingsHandler.js";
8
9
  export declare class App {
9
10
  static instanceKey: string;
@@ -15,6 +16,7 @@ export declare class App {
15
16
  readonly middlewares: Set<MiddlewareConstructor>;
16
17
  readonly settings: Set<SettingsConstructor<import("./builders/SettingsBuilder.js").SettingsData<import("./builders/SettingsBuilder.js").SettingsName, import("./builders/SettingsBuilder.js").SettingsParams, import("./builders/SettingsBuilder.js").SettingsDefaults<import("./builders/SettingsBuilder.js").SettingsParams>>>>;
17
18
  settingsHandler: SettingsHandlerConstructor | undefined;
19
+ sessionHandler: SessionHandlerConstructor | undefined;
18
20
  protected listeners: {
19
21
  add: Set<(data: {
20
22
  id: string;
package/lib/App.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../src/App.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../src/App.ts"],"names":[],"mappings":"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"}
package/lib/App.js CHANGED
@@ -1,15 +1,16 @@
1
1
  import { RequestUrl } from "./RequestUrl.js";
2
+ import { ResponseHeaders } from "./ResponseHeaders.js";
2
3
  import { isApi } from "./builders/ApiBuilder.js";
3
4
  import { isMiddleware, } from "./builders/MiddlewareBuilder.js";
4
5
  import { isService, } from "./builders/ServiceBuilder.js";
5
6
  import { isSettings } from "./builders/SettingsBuilder.js";
6
7
  import { AppContext } from "./contexts/AppContext.js";
7
8
  import { RequestContext } from "./contexts/RequestContext.js";
9
+ import { isSessionHandler, SessionHandler, } from "./handlers/SessionHandler.js";
8
10
  import { isSettingsHandler, SettingsHandler, } from "./handlers/SettingsHandler.js";
9
11
  import { isRoute, kindApp } from "./utils/kind.js";
10
12
  import { log } from "./utils/log.js";
11
- import { IocBaseClass, normalizeIocParams, } from "@dreamkit/ioc";
12
- import { getKinds, is } from "@dreamkit/kind";
13
+ import { getKinds } from "@dreamkit/kind";
13
14
  import { merge } from "@dreamkit/utils/object.js";
14
15
  export class App {
15
16
  static {
@@ -24,6 +25,7 @@ export class App {
24
25
  middlewares = new Set();
25
26
  settings = new Set();
26
27
  settingsHandler;
28
+ sessionHandler;
27
29
  listeners = {
28
30
  add: new Set(),
29
31
  remove: new Set(),
@@ -88,6 +90,9 @@ export class App {
88
90
  this.context.unregister(SettingsHandler);
89
91
  this.settingsHandler = undefined;
90
92
  }
93
+ else if (isSessionHandler(value)) {
94
+ this.sessionHandler = undefined;
95
+ }
91
96
  for (const cb of this.listeners.remove)
92
97
  await cb({ id, value });
93
98
  for (const cb of this.listeners.change)
@@ -101,14 +106,6 @@ export class App {
101
106
  service,
102
107
  started: false,
103
108
  };
104
- if (is(service, IocBaseClass)) {
105
- const params = normalizeIocParams(service.$ioc.params);
106
- for (const key in params) {
107
- const { value } = params[key].options;
108
- if (isSettings(value))
109
- this.settings.add(value);
110
- }
111
- }
112
109
  this.services.add(item);
113
110
  return item;
114
111
  }
@@ -167,6 +164,9 @@ export class App {
167
164
  },
168
165
  });
169
166
  }
167
+ else if (isSessionHandler(value)) {
168
+ this.sessionHandler = value;
169
+ }
170
170
  else if (isApi(value)) {
171
171
  // Not implemented (using solid start actions)
172
172
  continue;
@@ -174,6 +174,19 @@ export class App {
174
174
  else {
175
175
  console.warn("Unknown object", { id, value, kinds: getKinds(value) });
176
176
  }
177
+ /*
178
+ // [review] require create a dependency for removing
179
+
180
+ if (is(value, IocBaseClass)) {
181
+ const params = normalizeIocParams(value.$ioc.params);
182
+ for (const key in params) {
183
+ const { value } = params[key].options;
184
+ if (isSettings(value)) {
185
+ this.settings.add(value);
186
+ settings.push(value);
187
+ }
188
+ }
189
+ }*/
177
190
  this.objects.set(id, value);
178
191
  for (const cb of this.listeners.add)
179
192
  await cb({ id, value });
@@ -193,13 +206,20 @@ export class App {
193
206
  const context = new RequestContext({
194
207
  parentContainer: this.context,
195
208
  });
196
- return context
209
+ const requestContext = context
197
210
  .register(RequestContext, { value: context })
198
211
  .register(Request, { value: request })
199
212
  .register(Headers, { value: request.headers })
213
+ .register(ResponseHeaders, { value: new ResponseHeaders() })
200
214
  .register(RequestUrl, {
201
215
  value: new RequestUrl(request.url, "http://localhost"),
202
216
  });
217
+ if (this.sessionHandler)
218
+ requestContext.register(SessionHandler, {
219
+ singleton: true,
220
+ useClass: this.sessionHandler,
221
+ });
222
+ return requestContext;
203
223
  }
204
224
  async request(request) {
205
225
  const context = this.createRequestContext(request);
@@ -234,13 +254,9 @@ export class App {
234
254
  settingsHandler.autoSave = false;
235
255
  await settingsHandler.load();
236
256
  }
237
- try {
238
- for (const st of this.settings)
239
- await this.registerSettings(st);
240
- }
241
- finally {
242
- return await settingsHandler?.save();
243
- }
257
+ for (const st of this.settings)
258
+ await this.registerSettings(st);
259
+ return await settingsHandler?.save();
244
260
  }
245
261
  async registerSettings(constructor) {
246
262
  const options = constructor.options;
@@ -0,0 +1,6 @@
1
+ export declare class Response {
2
+ status?: number;
3
+ statusText?: string;
4
+ headers: Headers;
5
+ }
6
+ //# sourceMappingURL=Response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Response.d.ts","sourceRoot":"","sources":["../src/Response.ts"],"names":[],"mappings":"AAEA,qBAAa,QAAQ;IAInB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAiB;CAClC"}
@@ -0,0 +1,9 @@
1
+ import { kindApp } from "./utils/kind.js";
2
+ export class Response {
3
+ static {
4
+ kindApp(this, "Response");
5
+ }
6
+ status;
7
+ statusText;
8
+ headers = new Headers();
9
+ }
@@ -0,0 +1,3 @@
1
+ export declare class ResponseHeaders extends Headers {
2
+ }
3
+ //# sourceMappingURL=ResponseHeaders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResponseHeaders.d.ts","sourceRoot":"","sources":["../src/ResponseHeaders.ts"],"names":[],"mappings":"AAEA,qBAAa,eAAgB,SAAQ,OAAO;CAI3C"}
@@ -0,0 +1,6 @@
1
+ import { kindApp } from "./utils/kind.js";
2
+ export class ResponseHeaders extends Headers {
3
+ static {
4
+ kindApp(this, "ResponseHeaders");
5
+ }
6
+ }
@@ -0,0 +1,56 @@
1
+ import { InferType, MinimalObjectType, ObjectType, ObjectTypeProps } from "@dreamkit/schema";
2
+ import type { Merge, throwError } from "@dreamkit/utils/ts.js";
3
+ export declare const kindSession: (input: object, name?: string) => void, isSession: (input: unknown) => input is SessionConstructor<SessionData<SessionName, SessionParams>>;
4
+ export type SessionName = string | undefined;
5
+ export type SessionParams = MinimalObjectType | undefined;
6
+ export type InferSessionParams<T extends {
7
+ params?: SessionParams;
8
+ }> = InferType<T["params"] & {}>;
9
+ export type SessionData<TName extends SessionName = SessionName, TParams extends SessionParams = SessionParams> = {
10
+ name?: TName;
11
+ params?: TParams;
12
+ };
13
+ export type SessionTimeLife = {
14
+ seconds?: number;
15
+ minutes?: number;
16
+ hours?: number;
17
+ days?: number;
18
+ };
19
+ export type SessionOptions<T extends SessionData = SessionData> = T & {
20
+ timelife?: SessionTimeLife;
21
+ };
22
+ export type MergeSessionData<D1 extends SessionData, D2 extends Partial<SessionData>> = Merge<SessionData, D1, D2>;
23
+ export declare abstract class Session<T extends SessionData = SessionData> {
24
+ static get options(): SessionOptions;
25
+ static get params(): void;
26
+ readonly options: SessionOptions<T>;
27
+ readonly params: InferSessionParams<T>;
28
+ constructor(params: InferSessionParams<T>);
29
+ update(params: InferSessionParams<T>): void;
30
+ }
31
+ export interface SessionConstructor<T extends SessionData = SessionData> {
32
+ options: SessionOptions<T>;
33
+ params: T["params"];
34
+ new (params: InferSessionParams<T>): Session<T>;
35
+ }
36
+ export declare class SessionBuilder<T extends SessionData = {
37
+ name: undefined;
38
+ params: undefined;
39
+ }> {
40
+ readonly data: T;
41
+ readonly options: SessionOptions<T>;
42
+ constructor(options?: SessionOptions<T>);
43
+ protected clone(next: Partial<SessionOptions>): this;
44
+ name<TName extends SessionName>(value: TName): SessionBuilder<MergeSessionData<T, {
45
+ name: TName;
46
+ }>>;
47
+ params<TParams extends SessionParams>(type: TParams): SessionBuilder<MergeSessionData<T, {
48
+ params: TParams;
49
+ }>>;
50
+ params<TProps extends ObjectTypeProps>(props: TProps): SessionBuilder<MergeSessionData<T, {
51
+ params: ObjectType<TProps>;
52
+ }>>;
53
+ timelife(input: SessionTimeLife): this;
54
+ create: [undefined] extends [T["name"]] ? throwError<"Name is required"> : [undefined] extends [T["params"]] ? throwError<"Params is required"> : () => SessionConstructor<T>;
55
+ }
56
+ //# sourceMappingURL=SessionBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionBuilder.d.ts","sourceRoot":"","sources":["../../src/builders/SessionBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import { createKind, kindOf } from "@dreamkit/kind";
2
+ import { ObjectType, s, } from "@dreamkit/schema";
3
+ export const [kindSession, isSession] = createKind("@dreamkit/app/session");
4
+ export class Session {
5
+ static get options() {
6
+ throw new Error("Not implemented");
7
+ }
8
+ static get params() {
9
+ throw new Error("Not implemented");
10
+ }
11
+ static {
12
+ kindSession(this);
13
+ }
14
+ options = this.constructor.options;
15
+ params;
16
+ constructor(params) {
17
+ this.update(params);
18
+ }
19
+ update(params) {
20
+ const options = this.constructor.options;
21
+ const errors = options.params.validate(params);
22
+ if (errors.length)
23
+ throw new Error(`Invalid '${options.name}' session: ${JSON.stringify(errors, null, 2)}`);
24
+ this.params = params;
25
+ }
26
+ }
27
+ export class SessionBuilder {
28
+ data;
29
+ options;
30
+ constructor(options = {}) {
31
+ this.options = options;
32
+ this.data = {
33
+ params: options.params,
34
+ };
35
+ }
36
+ clone(next) {
37
+ const prev = this.options;
38
+ return new SessionBuilder({
39
+ ...prev,
40
+ ...next,
41
+ params: "params" in next
42
+ ? next.params === undefined || kindOf(next.params, ObjectType)
43
+ ? next.params
44
+ : s.object(next.params)
45
+ : prev.params,
46
+ });
47
+ }
48
+ name(value) {
49
+ return this.clone({ name: value });
50
+ }
51
+ params(params) {
52
+ return this.clone({ params });
53
+ }
54
+ timelife(input) {
55
+ return this.clone({ timelife: input });
56
+ }
57
+ create = function () {
58
+ if (!this.options.name)
59
+ throw new Error("Name is required");
60
+ if (!this.options.params)
61
+ throw new Error("Params is required");
62
+ const self = this;
63
+ class CustomSession extends Session {
64
+ static {
65
+ kindSession(this, self.options.name);
66
+ }
67
+ static get options() {
68
+ return self.options;
69
+ }
70
+ static get params() {
71
+ return self.options.params;
72
+ }
73
+ constructor(params) {
74
+ super(params);
75
+ }
76
+ }
77
+ return CustomSession;
78
+ };
79
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsBuilder.d.ts","sourceRoot":"","sources":["../../src/builders/SettingsBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SettingsBuilder.d.ts","sourceRoot":"","sources":["../../src/builders/SettingsBuilder.ts"],"names":[],"mappings":"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"}
@@ -19,13 +19,8 @@ export class Settings {
19
19
  update(params) {
20
20
  const options = this.constructor.options;
21
21
  const errors = options.params.validate(params);
22
- if (errors.length) {
23
- const error = new Error(`Invalid '${options.name}' settings`, {
24
- cause: errors,
25
- });
26
- console.error(error);
27
- throw error;
28
- }
22
+ if (errors.length)
23
+ throw new Error(`Invalid '${options.name}' settings: ${JSON.stringify(errors, null, 2)}`);
29
24
  this.params = options.defaults
30
25
  ? options.defaults(params)
31
26
  : params;
@@ -0,0 +1,15 @@
1
+ import { InferSessionParams, SessionConstructor, SessionData } from "../builders/SessionBuilder.js";
2
+ import { Constructor } from "@dreamkit/utils/ts.js";
3
+ export declare const kindSessionHandler: (input: object, name?: string) => void, isSessionHandler: (input: unknown) => input is SessionHandlerConstructor;
4
+ export type SessionHandlerConstructor = Constructor<SessionHandler> & {
5
+ $ioc: any;
6
+ };
7
+ export declare abstract class SessionHandler {
8
+ get<T extends SessionData>(constructor: SessionConstructor<T>): Promise<InferSessionParams<T> | undefined>;
9
+ unset(constructor: SessionConstructor<any>): Promise<void>;
10
+ set<T extends SessionData>(constructor: SessionConstructor<T>, value: InferSessionParams<T> | null | undefined): Promise<void>;
11
+ protected abstract onGet(constructor: SessionConstructor<any>): Promise<any>;
12
+ protected abstract onSet(constructor: SessionConstructor<any>, params: any): Promise<unknown>;
13
+ }
14
+ export declare const SessionHandlerClass: <P extends import("@dreamkit/ioc").IocParamsUserConfig = {}>(params: P) => import("@dreamkit/ioc").IocClass<P & {}, SessionHandler, never, import("@dreamkit/ioc").IocParams<P & {}>>;
15
+ //# sourceMappingURL=SessionHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/SessionHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACZ,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,eAAO,MAAO,kBAAkB,0CAAE,gBAAgB,wDACqB,CAAC;AAExE,MAAM,MAAM,yBAAyB,GAAG,WAAW,CAAC,cAAc,CAAC,GAAG;IACpE,IAAI,EAAE,GAAG,CAAC;CACX,CAAC;AAEF,8BAAsB,cAAc;IAI5B,GAAG,CAAC,CAAC,SAAS,WAAW,EAC7B,WAAW,EAAE,kBAAkB,CAAC,CAAC,CAAC,GACjC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAGvC,KAAK,CAAC,WAAW,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAG1D,GAAG,CAAC,CAAC,SAAS,WAAW,EAC7B,WAAW,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAClC,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,GAC9C,OAAO,CAAC,IAAI,CAAC;IAGhB,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAC5E,SAAS,CAAC,QAAQ,CAAC,KAAK,CACtB,WAAW,EAAE,kBAAkB,CAAC,GAAG,CAAC,EACpC,MAAM,EAAE,GAAG,GACV,OAAO,CAAC,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,mBAAmB,uLAAiC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { createIocClass } from "@dreamkit/ioc";
2
+ import { createKind } from "@dreamkit/kind";
3
+ export const [kindSessionHandler, isSessionHandler] = createKind("@dreamkit/app/SessionHandler");
4
+ export class SessionHandler {
5
+ static {
6
+ kindSessionHandler(this);
7
+ }
8
+ async get(constructor) {
9
+ return await this.onGet(constructor);
10
+ }
11
+ async unset(constructor) {
12
+ await this.onSet(constructor, undefined);
13
+ }
14
+ async set(constructor, value) {
15
+ await this.onSet(constructor, value);
16
+ }
17
+ }
18
+ export const SessionHandlerClass = createIocClass(SessionHandler);
@@ -23,7 +23,7 @@ export declare abstract class SettingsHandler extends SettingsHandler_base {
23
23
  protected abstract onLoad(): Promise<Record<string, any>>;
24
24
  protected abstract onSave(): Promise<SettingsHandlerSaveResult>;
25
25
  load(): Promise<void>;
26
- get<T extends SettingsData>(constructor: SettingsConstructor<T>): Promise<InferSettingsParams<T>>;
26
+ get<T extends SettingsData>(constructor: SettingsConstructor<T>): InferSettingsParams<T> | undefined;
27
27
  set<T extends SettingsData>(constructor: SettingsConstructor<T>, data: InferSettingsParams<T>): Promise<void>;
28
28
  save(): Promise<SettingsHandlerSaveResult>;
29
29
  protected getData(): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/SettingsHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACb,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAkB,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,eAAO,MAAO,mBAAmB,0CAAE,iBAAiB,yDACqB,CAAC;AAE1E,MAAM,MAAM,0BAA0B,GAAG,WAAW,CAAC,eAAe,CAAC,GAAG;IACtE,IAAI,EAAE,GAAG,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,MAAM,CAC5C,MAAM,EACN;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CACnC,CAAC;;;;;;AAEF,8BAAsB,eAAgB,SAAQ,oBAAwB;IAIpE,QAAQ,UAAQ;IAChB,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAM;IACzC,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAa;IACzD,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,CAAM;IACjC,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzD,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,yBAAyB,CAAC;IACzD,IAAI;IAOJ,GAAG,CAAC,CAAC,SAAS,YAAY,EAC9B,WAAW,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAClC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAG5B,GAAG,CAAC,CAAC,SAAS,YAAY,EAC9B,WAAW,EAAE,mBAAmB,CAAC,CAAC,CAAC,EACnC,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAC3B,OAAO,CAAC,IAAI,CAAC;IAgBV,IAAI,IAAI,OAAO,CAAC,yBAAyB,CAAC;cAMhC,OAAO,IAAI,OAAO,CAAC;QACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;QACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;KACvC,CAAC;CAYH;AAED,eAAO,MAAM,oBAAoB,gKAAkC,CAAC"}
1
+ {"version":3,"file":"SettingsHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/SettingsHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACb,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAkB,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,eAAO,MAAO,mBAAmB,0CAAE,iBAAiB,yDACqB,CAAC;AAE1E,MAAM,MAAM,0BAA0B,GAAG,WAAW,CAAC,eAAe,CAAC,GAAG;IACtE,IAAI,EAAE,GAAG,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,MAAM,CAC5C,MAAM,EACN;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CACnC,CAAC;;;;;;AAEF,8BAAsB,eAAgB,SAAQ,oBAAwB;IAIpE,QAAQ,UAAQ;IAChB,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAM;IACzC,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAa;IACzD,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,CAAM;IACjC,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzD,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,yBAAyB,CAAC;IACzD,IAAI;IASV,GAAG,CAAC,CAAC,SAAS,YAAY,EACxB,WAAW,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAClC,mBAAmB,CAAC,CAAC,CAAC,GAAG,SAAS;IAG/B,GAAG,CAAC,CAAC,SAAS,YAAY,EAC9B,WAAW,EAAE,mBAAmB,CAAC,CAAC,CAAC,EACnC,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAC3B,OAAO,CAAC,IAAI,CAAC;IAgBV,IAAI,IAAI,OAAO,CAAC,yBAAyB,CAAC;cAMhC,OAAO,IAAI,OAAO,CAAC;QACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;QACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;KACvC,CAAC;CAYH;AAED,eAAO,MAAM,oBAAoB,gKAAkC,CAAC"}
@@ -14,10 +14,13 @@ export class SettingsHandler extends IocClass({ AppContext }) {
14
14
  this.data = await this.onLoad();
15
15
  for (const settings of this.settings) {
16
16
  const data = this.data[settings.options.name];
17
- this.appContext.resolve(settings, { optional: true })?.update(data);
17
+ try {
18
+ this.appContext.resolve(settings, { optional: true })?.update(data);
19
+ }
20
+ catch (_) { }
18
21
  }
19
22
  }
20
- async get(constructor) {
23
+ get(constructor) {
21
24
  return this.data[constructor.options.name];
22
25
  }
23
26
  async set(constructor, data) {
package/lib/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export { RequestUrl } from "./RequestUrl.js";
2
+ export { ResponseHeaders } from "./ResponseHeaders.js";
2
3
  export { isRoute, isApp } from "./utils/kind.js";
3
4
  export { isApi } from "./builders/ApiBuilder.js";
4
5
  export { App } from "./App.js";
@@ -9,10 +10,16 @@ export { $api } from "./objects/$api.js";
9
10
  export { $route } from "./objects/$route.js";
10
11
  export { $middleware } from "./objects/$middleware.js";
11
12
  export { $service } from "./objects/$service.js";
13
+ export { $session } from "./objects/$session.js";
14
+ export { $schema } from "./objects/$schema.js";
12
15
  export { RouteBuilder, type RouteOptions, type Route, type RouteData, type RouteProps, } from "./builders/RouteBuilder.js";
13
16
  export { $settings } from "./objects/$settings.js";
14
17
  export { Settings, SettingsBuilder, type SettingsConstructor, type SettingsData, isSettings, } from "./builders/SettingsBuilder.js";
15
18
  export { Middleware, isMiddleware, type MiddlewareConstructor, type MiddlewareOptions, type MiddlewareData, } from "./builders/MiddlewareBuilder.js";
16
19
  export { Service, type ServiceConstructor, type ServiceOptions, type ServiceData, isService, } from "./builders/ServiceBuilder.js";
17
- export { SettingsHandler, SettingsHandlerClass, type SettingsHandlerSaveResult, } from "./handlers/SettingsHandler.js";
20
+ export { Session, type SessionConstructor, type SessionOptions, type SessionData, isSession, } from "./builders/SessionBuilder.js";
21
+ export { SettingsHandler, SettingsHandlerClass, type SettingsHandlerConstructor, type SettingsHandlerSaveResult, } from "./handlers/SettingsHandler.js";
22
+ export { SessionHandler, SessionHandlerClass, type SessionHandlerConstructor, } from "./handlers/SessionHandler.js";
23
+ export { ClientSessionHandler } from "./presets/ClientSessionHandler.js";
24
+ export { ClientSessionSettings } from "./presets/ClientSessionSettings.js";
18
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EACL,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,KAAK,EACV,KAAK,SAAS,EACd,KAAK,UAAU,GAChB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EACL,QAAQ,EACR,eAAe,EACf,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,UAAU,GACX,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,UAAU,EACV,YAAY,EACZ,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,OAAO,EACP,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,SAAS,GACV,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,KAAK,yBAAyB,GAC/B,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EACL,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,KAAK,EACV,KAAK,SAAS,EACd,KAAK,UAAU,GAChB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EACL,QAAQ,EACR,eAAe,EACf,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,UAAU,GACX,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,UAAU,EACV,YAAY,EACZ,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,OAAO,EACP,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,SAAS,GACV,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,OAAO,EACP,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,SAAS,GACV,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,GAC/B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,KAAK,yBAAyB,GAC/B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC"}
package/lib/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export { RequestUrl } from "./RequestUrl.js";
2
+ export { ResponseHeaders } from "./ResponseHeaders.js";
2
3
  export { isRoute, isApp } from "./utils/kind.js";
3
4
  export { isApi } from "./builders/ApiBuilder.js";
4
5
  export { App } from "./App.js";
@@ -11,10 +12,17 @@ export { $api } from "./objects/$api.js";
11
12
  export { $route } from "./objects/$route.js";
12
13
  export { $middleware } from "./objects/$middleware.js";
13
14
  export { $service } from "./objects/$service.js";
15
+ export { $session } from "./objects/$session.js";
16
+ export { $schema } from "./objects/$schema.js";
14
17
  export { RouteBuilder, } from "./builders/RouteBuilder.js";
15
18
  export { $settings } from "./objects/$settings.js";
16
19
  export { Settings, SettingsBuilder, isSettings, } from "./builders/SettingsBuilder.js";
17
20
  export { Middleware, isMiddleware, } from "./builders/MiddlewareBuilder.js";
18
21
  export { Service, isService, } from "./builders/ServiceBuilder.js";
22
+ export { Session, isSession, } from "./builders/SessionBuilder.js";
19
23
  // handlers
20
24
  export { SettingsHandler, SettingsHandlerClass, } from "./handlers/SettingsHandler.js";
25
+ export { SessionHandler, SessionHandlerClass, } from "./handlers/SessionHandler.js";
26
+ // presets
27
+ export { ClientSessionHandler } from "./presets/ClientSessionHandler.js";
28
+ export { ClientSessionSettings } from "./presets/ClientSessionSettings.js";
@@ -0,0 +1,2 @@
1
+ export declare const $schema: import("@dreamkit/schema/schema.js").Schema;
2
+ //# sourceMappingURL=$schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"$schema.d.ts","sourceRoot":"","sources":["../../src/objects/$schema.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO,6CAAI,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { s } from "@dreamkit/schema";
2
+ export const $schema = s;
@@ -0,0 +1,6 @@
1
+ import { SessionBuilder } from "../builders/SessionBuilder.js";
2
+ export declare const $session: SessionBuilder<{
3
+ name: undefined;
4
+ params: undefined;
5
+ }>;
6
+ //# sourceMappingURL=$session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"$session.d.ts","sourceRoot":"","sources":["../../src/objects/$session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,eAAO,MAAM,QAAQ;;;EAAqC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { SessionBuilder } from "../builders/SessionBuilder.js";
2
+ export const $session = /*#__PURE__*/ new SessionBuilder();
@@ -0,0 +1,30 @@
1
+ import { ResponseHeaders } from "../ResponseHeaders.js";
2
+ import type { InferSessionParams, SessionConstructor } from "../builders/SessionBuilder.js";
3
+ import { InferSettingsParams } from "../builders/SettingsBuilder.js";
4
+ import { SettingsHandler } from "../handlers/SettingsHandler.js";
5
+ import { ClientSessionSettings } from "./ClientSessionSettings.js";
6
+ declare const ClientSessionHandler_base: import("@dreamkit/ioc").IocClass<{
7
+ Headers: {
8
+ new (init?: HeadersInit): Headers;
9
+ prototype: Headers;
10
+ };
11
+ ResponseHeaders: typeof ResponseHeaders;
12
+ SettingsHandler: typeof SettingsHandler;
13
+ }, import("../handlers/SessionHandler.js").SessionHandler, never, import("@dreamkit/ioc").IocParams<{
14
+ Headers: {
15
+ new (init?: HeadersInit): Headers;
16
+ prototype: Headers;
17
+ };
18
+ ResponseHeaders: typeof ResponseHeaders;
19
+ SettingsHandler: typeof SettingsHandler;
20
+ }>>;
21
+ export declare class ClientSessionHandler extends ClientSessionHandler_base {
22
+ protected cookies: Map<string, string> | undefined;
23
+ protected decryptedCookies: Map<string, any>;
24
+ protected nextCookies: Map<string, any>;
25
+ settings(): Promise<InferSettingsParams<typeof ClientSessionSettings>>;
26
+ protected onGet<T extends SessionConstructor>(input: SessionConstructor): Promise<InferSessionParams<T> | undefined>;
27
+ protected onSet(input: SessionConstructor, value: any): Promise<void>;
28
+ }
29
+ export {};
30
+ //# sourceMappingURL=ClientSessionHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClientSessionHandler.d.ts","sourceRoot":"","sources":["../../src/presets/ClientSessionHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAGjE,OAAO,EAAE,qBAAqB,EAAY,MAAM,4BAA4B,CAAC;;;;;;;;;;;;;;;;AAE7E,qBAAa,oBAAqB,SAAQ,yBAIxC;IACA,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IACnD,SAAS,CAAC,gBAAgB,mBAA0B;IACpD,SAAS,CAAC,WAAW,mBAA0B;IACzC,QAAQ,IAAI,OAAO,CAAC,mBAAmB,CAAC,OAAO,qBAAqB,CAAC,CAAC;cAO5D,KAAK,CAAC,CAAC,SAAS,kBAAkB,EAChD,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;cAsB7B,KAAK,CAAC,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,GAAG;CA+B5D"}
@@ -0,0 +1,80 @@
1
+ import { ResponseHeaders } from "../ResponseHeaders.js";
2
+ import { SessionHandlerClass } from "../handlers/SessionHandler.js";
3
+ import { SettingsHandler } from "../handlers/SettingsHandler.js";
4
+ import { decodeCookies, encodeCookie } from "../utils/cookies.js";
5
+ import { decrypt, encrypt } from "../utils/crypto.js";
6
+ import { ClientSessionSettings, generate } from "./ClientSessionSettings.js";
7
+ export class ClientSessionHandler extends SessionHandlerClass({
8
+ Headers,
9
+ ResponseHeaders,
10
+ SettingsHandler,
11
+ }) {
12
+ cookies;
13
+ decryptedCookies = new Map();
14
+ nextCookies = new Map();
15
+ async settings() {
16
+ const settings = this.settingsHandler.get(ClientSessionSettings);
17
+ if (settings)
18
+ return settings;
19
+ const params = generate();
20
+ await this.settingsHandler.set(ClientSessionSettings, params);
21
+ return params;
22
+ }
23
+ async onGet(input) {
24
+ const name = input.options.name;
25
+ if (this.nextCookies.has(name))
26
+ return this.nextCookies.get(name);
27
+ if (this.decryptedCookies.has(name))
28
+ return this.decryptedCookies.get(name);
29
+ if (!this.cookies) {
30
+ const cookie = this.headers.get("cookie");
31
+ this.cookies = decodeCookies(cookie ?? "");
32
+ }
33
+ const value = this.cookies.get(name);
34
+ if (!value)
35
+ return;
36
+ try {
37
+ const settings = await this.settings();
38
+ const { iv, key } = settings;
39
+ const decryptedJson = await decrypt(value, iv, key);
40
+ const decryptedValue = JSON.parse(decryptedJson);
41
+ this.decryptedCookies.set(name, decryptedValue);
42
+ return decryptedValue;
43
+ }
44
+ catch (error) {
45
+ console.warn(error);
46
+ return;
47
+ }
48
+ }
49
+ async onSet(input, value) {
50
+ const name = input.options.name;
51
+ if (value === undefined || value === null) {
52
+ const cookie = encodeCookie({
53
+ name,
54
+ value: "",
55
+ path: "/",
56
+ expires: new Date("Thu Jan 01 1970 00:00:00 UTC"),
57
+ });
58
+ this.nextCookies.set(name, undefined);
59
+ this.responseHeaders.set("Set-Cookie", cookie);
60
+ }
61
+ else {
62
+ const settings = await this.settings();
63
+ const { iv, key } = settings;
64
+ const jsonValue = JSON.stringify(value);
65
+ const cookie = encodeCookie({
66
+ name,
67
+ path: "/",
68
+ ...(input.options.timelife && {
69
+ maxAge: (input.options.timelife.days || 0 * 24 * 60 * 60) +
70
+ (input.options.timelife.hours || 0 * 60 * 60) +
71
+ (input.options.timelife.minutes || 0 * 60) +
72
+ (input.options.timelife.seconds || 0),
73
+ }),
74
+ value: await encrypt(jsonValue, iv, key),
75
+ });
76
+ this.nextCookies.set(name, value);
77
+ this.responseHeaders.set("Set-Cookie", cookie);
78
+ }
79
+ }
80
+ }
@@ -0,0 +1,17 @@
1
+ import { InferObjectProps } from "@dreamkit/schema";
2
+ declare const params: {
3
+ key: import("@dreamkit/schema").StringType<{}>;
4
+ iv: import("@dreamkit/schema").StringType<{}>;
5
+ };
6
+ declare const ClientSessionSettings_base: import("../index.js").SettingsConstructor<{
7
+ name: "clientSession";
8
+ params: import("@dreamkit/schema").ObjectType<{
9
+ key: import("@dreamkit/schema").StringType<{}>;
10
+ iv: import("@dreamkit/schema").StringType<{}>;
11
+ }, {}>;
12
+ }>;
13
+ export declare class ClientSessionSettings extends ClientSessionSettings_base {
14
+ }
15
+ export declare function generate(): InferObjectProps<typeof params>;
16
+ export {};
17
+ //# sourceMappingURL=ClientSessionSettings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClientSessionSettings.d.ts","sourceRoot":"","sources":["../../src/presets/ClientSessionSettings.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAK,MAAM,kBAAkB,CAAC;AAEvD,QAAA,MAAM,MAAM;;;CAGX,CAAC;;;;;;;;AAEF,qBAAa,qBAAsB,SAAQ,0BAMhC;CAAG;AAEd,wBAAgB,QAAQ,IAAI,gBAAgB,CAAC,OAAO,MAAM,CAAC,CAK1D"}
@@ -0,0 +1,21 @@
1
+ import { $settings } from "../objects/$settings.js";
2
+ import { generateIv, generateKey } from "../utils/crypto.js";
3
+ import { s } from "@dreamkit/schema";
4
+ const params = {
5
+ key: s.string(),
6
+ iv: s.string(),
7
+ };
8
+ export class ClientSessionSettings extends $settings
9
+ .name("clientSession")
10
+ .params(params)
11
+ .optional()
12
+ // generated on demand in ClientSessionHandler
13
+ //.generate(generate)
14
+ .create() {
15
+ }
16
+ export function generate() {
17
+ return {
18
+ iv: generateIv(),
19
+ key: generateKey(),
20
+ };
21
+ }
@@ -0,0 +1,3 @@
1
+ export declare function toBase64(input: ArrayBuffer): string;
2
+ export declare function fromBase64(input: string): Uint8Array;
3
+ //# sourceMappingURL=buffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffer.d.ts","sourceRoot":"","sources":["../../src/utils/buffer.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAEnD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAEpD"}
@@ -0,0 +1,6 @@
1
+ export function toBase64(input) {
2
+ return btoa(String.fromCharCode(...new Uint8Array(input)));
3
+ }
4
+ export function fromBase64(input) {
5
+ return Uint8Array.from(atob(input), (c) => c.charCodeAt(0));
6
+ }
@@ -0,0 +1,18 @@
1
+ export type Cookie = {
2
+ name: string;
3
+ value?: string;
4
+ expires?: Date;
5
+ maxAge?: number;
6
+ domain?: string;
7
+ path?: string;
8
+ secure?: boolean;
9
+ httpOnly?: boolean;
10
+ sameSite?: string;
11
+ };
12
+ export declare function encodeCookie(cookie: Cookie): string;
13
+ export declare function decodeCookie(cookie: string): {
14
+ name: string;
15
+ value: string;
16
+ };
17
+ export declare function decodeCookies(cookies: string): Map<string, string>;
18
+ //# sourceMappingURL=cookies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../../src/utils/cookies.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,UAa1C;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM;;;EAiB1C;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,uBAO5C"}
@@ -0,0 +1,40 @@
1
+ export function encodeCookie(cookie) {
2
+ return (`${cookie.name || ""}=${cookie.value || ""}` +
3
+ (cookie.expires != null
4
+ ? `; Expires=${cookie.expires.toUTCString()}`
5
+ : "") +
6
+ ((cookie.maxAge ?? null != null) ? `; Max-Age=${cookie.maxAge}` : "") +
7
+ ((cookie.domain ?? null != null) ? `; Domain=${cookie.domain}` : "") +
8
+ ((cookie.path ?? null != null) ? `; Path=${cookie.path}` : "") +
9
+ (cookie.secure ? "; Secure" : "") +
10
+ (cookie.httpOnly ? "; HttpOnly" : "") +
11
+ ((cookie.sameSite ?? null != null) ? `; SameSite=${cookie.sameSite}` : ""));
12
+ }
13
+ export function decodeCookie(cookie) {
14
+ const indexOfEquals = cookie.indexOf("=");
15
+ let name;
16
+ let value;
17
+ if (indexOfEquals === -1) {
18
+ name = "";
19
+ value = cookie.trim();
20
+ }
21
+ else {
22
+ name = cookie.slice(0, indexOfEquals).trim();
23
+ value = cookie.slice(indexOfEquals + 1).trim();
24
+ }
25
+ const firstQuote = value.indexOf('"');
26
+ const lastQuote = value.lastIndexOf('"');
27
+ if (firstQuote !== -1 && lastQuote !== -1) {
28
+ value = value.substring(firstQuote + 1, lastQuote);
29
+ }
30
+ return { name, value };
31
+ }
32
+ export function decodeCookies(cookies) {
33
+ const object = new Map();
34
+ for (const cookie of cookies.split(";")) {
35
+ const { name, value } = decodeCookie(cookie);
36
+ if (name.length)
37
+ object.set(name, value);
38
+ }
39
+ return object;
40
+ }
@@ -0,0 +1,11 @@
1
+ export declare const algorithm: {
2
+ name: string;
3
+ length: number;
4
+ };
5
+ export declare function random(length: number): string;
6
+ export declare function generateIv(): string;
7
+ export declare function generateKey(): string;
8
+ export declare function parseSecrets(...input: (string | ArrayBuffer)[]): ArrayBuffer[];
9
+ export declare function encrypt(input: string, iv: string | ArrayBuffer, key: string | ArrayBuffer): Promise<string>;
10
+ export declare function decrypt(input: string | ArrayBuffer, iv: string | ArrayBuffer, key: string | ArrayBuffer): Promise<string>;
11
+ //# sourceMappingURL=crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS;;;CAGrB,CAAC;AAEF,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,wBAAgB,YAAY,CAC1B,GAAG,KAAK,EAAE,CAAC,MAAM,GAAG,WAAW,CAAC,EAAE,GACjC,WAAW,EAAE,CAEf;AAED,wBAAsB,OAAO,CAC3B,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,GAAG,WAAW,EACxB,GAAG,EAAE,MAAM,GAAG,WAAW,mBAmB1B;AAED,wBAAsB,OAAO,CAC3B,KAAK,EAAE,MAAM,GAAG,WAAW,EAC3B,EAAE,EAAE,MAAM,GAAG,WAAW,EACxB,GAAG,EAAE,MAAM,GAAG,WAAW,mBAiB1B"}
@@ -0,0 +1,31 @@
1
+ // https://medium.com/@tony.infisical/guide-to-web-crypto-api-for-encryption-decryption-1a2c698ebc25
2
+ import { fromBase64, toBase64 } from "./buffer.js";
3
+ export const algorithm = {
4
+ name: "AES-GCM",
5
+ length: 256,
6
+ };
7
+ export function random(length) {
8
+ return toBase64(crypto.getRandomValues(new Uint8Array(length)));
9
+ }
10
+ export function generateIv() {
11
+ return random(16);
12
+ }
13
+ export function generateKey() {
14
+ return random(32);
15
+ }
16
+ export function parseSecrets(...input) {
17
+ return input.map((v) => (typeof v === "string" ? fromBase64(v) : v));
18
+ }
19
+ export async function encrypt(input, iv, key) {
20
+ const [ivBuffer, keyBuffer] = parseSecrets(iv, key);
21
+ const encodedPlaintext = new TextEncoder().encode(input);
22
+ const secretKey = await crypto.subtle.importKey("raw", keyBuffer, { name: algorithm.name, length: algorithm.length }, true, ["encrypt", "decrypt"]);
23
+ const result = await crypto.subtle.encrypt({ name: algorithm.name, iv: ivBuffer }, secretKey, encodedPlaintext);
24
+ return toBase64(result);
25
+ }
26
+ export async function decrypt(input, iv, key) {
27
+ const [inputBuffer, ivBuffer, keyBuffer] = parseSecrets(input, iv, key);
28
+ const secretKey = await crypto.subtle.importKey("raw", keyBuffer, { name: algorithm.name, length: algorithm.length }, true, ["encrypt", "decrypt"]);
29
+ const textBuffer = await crypto.subtle.decrypt({ name: algorithm.name, iv: ivBuffer }, secretKey, inputBuffer);
30
+ return new TextDecoder().decode(textBuffer);
31
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dreamkit/app",
3
- "version": "0.0.7-next.3",
3
+ "version": "0.0.7-next.4",
4
4
  "description": "Set of utils to create applications.",
5
5
  "homepage": "https://dreamkit.dev",
6
6
  "repository": {
@@ -27,10 +27,10 @@
27
27
  ],
28
28
  "dependencies": {
29
29
  "debug": "^4.3.7",
30
- "@dreamkit/func": "0.0.3-next.3",
30
+ "@dreamkit/func": "0.0.3-next.4",
31
31
  "@dreamkit/ioc": "0.0.2-next.2",
32
32
  "@dreamkit/kind": "0.0.2",
33
- "@dreamkit/schema": "0.0.5-next.1",
33
+ "@dreamkit/schema": "0.0.5-next.2",
34
34
  "@dreamkit/utils": "0.0.5-next.0"
35
35
  },
36
36
  "devDependencies": {