@pluv/types 0.16.2 → 0.17.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.
@@ -1,5 +1,5 @@
1
1
 
2
- > @pluv/types@0.16.2 build /home/runner/work/pluv/pluv/packages/types
2
+ > @pluv/types@0.17.0 build /home/runner/work/pluv/pluv/packages/types
3
3
  > tsup src/index.ts --format esm,cjs --dts
4
4
 
5
5
  CLI Building entry: src/index.ts
@@ -9,10 +9,10 @@
9
9
  ESM Build start
10
10
  CJS Build start
11
11
  CJS dist/index.js 754.00 B
12
- CJS ⚡️ Build success in 41ms
12
+ CJS ⚡️ Build success in 31ms
13
13
  ESM dist/index.mjs 0 B
14
- ESM ⚡️ Build success in 42ms
14
+ ESM ⚡️ Build success in 31ms
15
15
  DTS Build start
16
- DTS ⚡️ Build success in 916ms
17
- DTS dist/index.d.mts 7.18 KB
18
- DTS dist/index.d.ts 7.18 KB
16
+ DTS ⚡️ Build success in 927ms
17
+ DTS dist/index.d.mts 7.36 KB
18
+ DTS dist/index.d.ts 7.36 KB
package/CHANGELOG.md CHANGED
@@ -1,5 +1,57 @@
1
1
  # @pluv/types
2
2
 
3
+ ## 0.17.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 507bc00: _BREAKING_: The `authorize` config when calling `createIO` can now also be a function that exposes the platform context.
8
+ This allows accessing the `env` in Cloudflare workers.
9
+
10
+ ```ts
11
+ import { createIO } from "@pluv/io";
12
+ import { platformCloudflare } from "@pluv/platform-cloudflare";
13
+ import { z } from "zod";
14
+
15
+ const io = createIO({
16
+ authorize: ({ env }) => ({
17
+ required: true,
18
+ secret: env.PLUV_AUTHORIZE_SECRET,
19
+ user: z.object({
20
+ id: z.string(),
21
+ name: z.string(),
22
+ }),
23
+ }),
24
+ platform: platformCloudflare<{ PLUV_AUTHORIZE_SECRET: string }>(),
25
+ // ...
26
+ });
27
+ ```
28
+
29
+ This also requires that the platform contexts are passed to `io.createToken`.
30
+
31
+ ```ts
32
+ // If using `platformNode`
33
+ await io.createToken({
34
+ req, // This `IncomingMessage` is now required
35
+ room,
36
+ user: {
37
+ id: "user_123",
38
+ name: "john doe",
39
+ },
40
+ });
41
+
42
+ // If using `platformCloudflare`
43
+ await io.createToken({
44
+ env, // This env is now required from the handler's fetch function
45
+ room,
46
+ user: {
47
+ id: "user_123",
48
+ name: "john doe",
49
+ },
50
+ });
51
+ ```
52
+
53
+ ## 0.16.3
54
+
3
55
  ## 0.16.2
4
56
 
5
57
  ## 0.16.1
package/dist/index.d.mts CHANGED
@@ -60,7 +60,7 @@ interface BaseIOAuthorize {
60
60
  secret: string;
61
61
  user: InputZodLike<BaseUser>;
62
62
  }
63
- interface BaseIOAuthorizeEventRecord<TAuthorize extends IOAuthorize<any, any>> {
63
+ interface BaseIOAuthorizeEventRecord<TAuthorize extends IOAuthorize<any, any, any>> {
64
64
  $OTHERS_RECEIVED: {
65
65
  others: {
66
66
  [connectionId: string]: {
@@ -77,7 +77,7 @@ interface BaseIOAuthorizeEventRecord<TAuthorize extends IOAuthorize<any, any>> {
77
77
  presence: JsonObject;
78
78
  };
79
79
  }
80
- type BaseIOEventRecord<TAuthorize extends IOAuthorize<any, any>> = BaseIOAuthorizeEventRecord<TAuthorize> & {
80
+ type BaseIOEventRecord<TAuthorize extends IOAuthorize<any, any, any>> = BaseIOAuthorizeEventRecord<TAuthorize> & {
81
81
  $ERROR: {
82
82
  message: string;
83
83
  stack?: string | null;
@@ -111,8 +111,8 @@ type InferEventMessage<TEvents extends EventRecord<string, any> = EventRecord<st
111
111
  [P in TEvent]: P extends string ? Id<EventMessage<P, TEvents[P]>> : never;
112
112
  }[TEvent];
113
113
  type InferIOAuthorize<TIO extends IOLike> = TIO extends IOLike<infer IAuthorize> ? IAuthorize : never;
114
- type InferIOAuthorizeRequired<TAuthorize extends IOAuthorize<any, any>> = TAuthorize extends IOAuthorize<any, infer IRequired> ? IRequired : never;
115
- type InferIOAuthorizeUser<TAuthorize extends IOAuthorize<any, any>> = TAuthorize extends IOAuthorize<infer IUser, infer IRequired> ? IRequired extends true ? IUser : IUser | null : never;
114
+ type InferIOAuthorizeRequired<TAuthorize extends IOAuthorize<any, any, any>> = TAuthorize extends IOAuthorize<any, infer IRequired> ? IRequired : never;
115
+ type InferIOAuthorizeUser<TAuthorize extends IOAuthorize<any, any, any>> = TAuthorize extends IOAuthorize<infer IUser, infer IRequired> ? IRequired extends true ? IUser : IUser | null : never;
116
116
  type InferIOInput<TIO extends IOLike> = TIO extends IOLike<any, infer IInput> ? IInput : never;
117
117
  type InferIOOutput<TIO extends IOLike> = TIO extends IOLike<any, any, infer IOutputBroadcast, infer IOutputSelf, infer IOutputSync> ? Spread<[IOutputBroadcast, IOutputSelf, IOutputSync]> : never;
118
118
  type InferIOOutputBroadcast<TIO extends IOLike> = TIO extends IOLike<any, any, infer IOutput> ? IOutput : never;
@@ -122,11 +122,15 @@ type InputZodLike<TData extends JsonObject> = {
122
122
  _input: TData;
123
123
  parse: (data: unknown) => TData;
124
124
  };
125
- interface IOAuthorize<TUser extends BaseUser = any, TRequired extends boolean = false> {
125
+ type IOAuthorize<TUser extends BaseUser = any, TRequired extends boolean = false, TContext extends Record<string, unknown> = {}> = {
126
126
  required: TRequired;
127
127
  secret: string;
128
128
  user: InputZodLike<TUser>;
129
- }
129
+ } | ((context: TContext) => {
130
+ required: TRequired;
131
+ secret: string;
132
+ user: InputZodLike<TUser>;
133
+ });
130
134
  type IOAuthorizeEventMessage<TIO extends IOLike> = InferIOAuthorizeRequired<InferIOAuthorize<TIO>> extends false ? IOAuthorizeOptionalEventMessage<TIO> : IOAuthorizeRequiredEventMessage<TIO>;
131
135
  interface IOAuthorizeOptionalEventMessage<TIO extends IOLike> {
132
136
  connectionId: string | null;
@@ -136,7 +140,7 @@ type IOAuthorizeRequiredEventMessage<TIO extends IOLike> = NonNilProps<IOAuthori
136
140
  type IOEventMessage<TIO extends IOLike, TEvent extends keyof InferIOOutput<TIO> = keyof InferIOOutput<TIO>> = Id<{
137
141
  room: string;
138
142
  } & InferEventMessage<InferIOOutput<TIO>, TEvent> & (InferEventMessage<InferIOOutput<TIO>, TEvent>["type"] extends "$ERROR" ? IOAuthorizeOptionalEventMessage<TIO> : IOAuthorizeEventMessage<TIO>)>;
139
- interface IOLike<TAuthorize extends IOAuthorize<any, any> = IOAuthorize<any, any>, TInput extends EventRecord<string, any> = {}, TOutputBroadcast extends EventRecord<string, any> = {}, TOutputSelf extends EventRecord<string, any> = {}, TOutputSync extends EventRecord<string, any> = {}> {
143
+ interface IOLike<TAuthorize extends IOAuthorize<any, any, any> = IOAuthorize<any, any, any>, TInput extends EventRecord<string, any> = {}, TOutputBroadcast extends EventRecord<string, any> = {}, TOutputSelf extends EventRecord<string, any> = {}, TOutputSync extends EventRecord<string, any> = {}> {
140
144
  _authorize: TAuthorize | null;
141
145
  _events: {
142
146
  [P in keyof TInput]: P extends string ? {
package/dist/index.d.ts CHANGED
@@ -60,7 +60,7 @@ interface BaseIOAuthorize {
60
60
  secret: string;
61
61
  user: InputZodLike<BaseUser>;
62
62
  }
63
- interface BaseIOAuthorizeEventRecord<TAuthorize extends IOAuthorize<any, any>> {
63
+ interface BaseIOAuthorizeEventRecord<TAuthorize extends IOAuthorize<any, any, any>> {
64
64
  $OTHERS_RECEIVED: {
65
65
  others: {
66
66
  [connectionId: string]: {
@@ -77,7 +77,7 @@ interface BaseIOAuthorizeEventRecord<TAuthorize extends IOAuthorize<any, any>> {
77
77
  presence: JsonObject;
78
78
  };
79
79
  }
80
- type BaseIOEventRecord<TAuthorize extends IOAuthorize<any, any>> = BaseIOAuthorizeEventRecord<TAuthorize> & {
80
+ type BaseIOEventRecord<TAuthorize extends IOAuthorize<any, any, any>> = BaseIOAuthorizeEventRecord<TAuthorize> & {
81
81
  $ERROR: {
82
82
  message: string;
83
83
  stack?: string | null;
@@ -111,8 +111,8 @@ type InferEventMessage<TEvents extends EventRecord<string, any> = EventRecord<st
111
111
  [P in TEvent]: P extends string ? Id<EventMessage<P, TEvents[P]>> : never;
112
112
  }[TEvent];
113
113
  type InferIOAuthorize<TIO extends IOLike> = TIO extends IOLike<infer IAuthorize> ? IAuthorize : never;
114
- type InferIOAuthorizeRequired<TAuthorize extends IOAuthorize<any, any>> = TAuthorize extends IOAuthorize<any, infer IRequired> ? IRequired : never;
115
- type InferIOAuthorizeUser<TAuthorize extends IOAuthorize<any, any>> = TAuthorize extends IOAuthorize<infer IUser, infer IRequired> ? IRequired extends true ? IUser : IUser | null : never;
114
+ type InferIOAuthorizeRequired<TAuthorize extends IOAuthorize<any, any, any>> = TAuthorize extends IOAuthorize<any, infer IRequired> ? IRequired : never;
115
+ type InferIOAuthorizeUser<TAuthorize extends IOAuthorize<any, any, any>> = TAuthorize extends IOAuthorize<infer IUser, infer IRequired> ? IRequired extends true ? IUser : IUser | null : never;
116
116
  type InferIOInput<TIO extends IOLike> = TIO extends IOLike<any, infer IInput> ? IInput : never;
117
117
  type InferIOOutput<TIO extends IOLike> = TIO extends IOLike<any, any, infer IOutputBroadcast, infer IOutputSelf, infer IOutputSync> ? Spread<[IOutputBroadcast, IOutputSelf, IOutputSync]> : never;
118
118
  type InferIOOutputBroadcast<TIO extends IOLike> = TIO extends IOLike<any, any, infer IOutput> ? IOutput : never;
@@ -122,11 +122,15 @@ type InputZodLike<TData extends JsonObject> = {
122
122
  _input: TData;
123
123
  parse: (data: unknown) => TData;
124
124
  };
125
- interface IOAuthorize<TUser extends BaseUser = any, TRequired extends boolean = false> {
125
+ type IOAuthorize<TUser extends BaseUser = any, TRequired extends boolean = false, TContext extends Record<string, unknown> = {}> = {
126
126
  required: TRequired;
127
127
  secret: string;
128
128
  user: InputZodLike<TUser>;
129
- }
129
+ } | ((context: TContext) => {
130
+ required: TRequired;
131
+ secret: string;
132
+ user: InputZodLike<TUser>;
133
+ });
130
134
  type IOAuthorizeEventMessage<TIO extends IOLike> = InferIOAuthorizeRequired<InferIOAuthorize<TIO>> extends false ? IOAuthorizeOptionalEventMessage<TIO> : IOAuthorizeRequiredEventMessage<TIO>;
131
135
  interface IOAuthorizeOptionalEventMessage<TIO extends IOLike> {
132
136
  connectionId: string | null;
@@ -136,7 +140,7 @@ type IOAuthorizeRequiredEventMessage<TIO extends IOLike> = NonNilProps<IOAuthori
136
140
  type IOEventMessage<TIO extends IOLike, TEvent extends keyof InferIOOutput<TIO> = keyof InferIOOutput<TIO>> = Id<{
137
141
  room: string;
138
142
  } & InferEventMessage<InferIOOutput<TIO>, TEvent> & (InferEventMessage<InferIOOutput<TIO>, TEvent>["type"] extends "$ERROR" ? IOAuthorizeOptionalEventMessage<TIO> : IOAuthorizeEventMessage<TIO>)>;
139
- interface IOLike<TAuthorize extends IOAuthorize<any, any> = IOAuthorize<any, any>, TInput extends EventRecord<string, any> = {}, TOutputBroadcast extends EventRecord<string, any> = {}, TOutputSelf extends EventRecord<string, any> = {}, TOutputSync extends EventRecord<string, any> = {}> {
143
+ interface IOLike<TAuthorize extends IOAuthorize<any, any, any> = IOAuthorize<any, any, any>, TInput extends EventRecord<string, any> = {}, TOutputBroadcast extends EventRecord<string, any> = {}, TOutputSelf extends EventRecord<string, any> = {}, TOutputSync extends EventRecord<string, any> = {}> {
140
144
  _authorize: TAuthorize | null;
141
145
  _events: {
142
146
  [P in keyof TInput]: P extends string ? {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pluv/types",
3
- "version": "0.16.2",
3
+ "version": "0.17.0",
4
4
  "description": "@pluv/io shared types",
5
5
  "author": "leedavidcs",
6
6
  "license": "MIT",
@@ -18,8 +18,8 @@
18
18
  "devDependencies": {
19
19
  "tsup": "^8.0.2",
20
20
  "typescript": "^5.3.3",
21
- "@pluv/tsconfig": "^0.16.2",
22
- "eslint-config-pluv": "^0.16.2"
21
+ "@pluv/tsconfig": "^0.17.0",
22
+ "eslint-config-pluv": "^0.17.0"
23
23
  },
24
24
  "scripts": {
25
25
  "build": "tsup src/index.ts --format esm,cjs --dts",
package/src/pluv.ts CHANGED
@@ -29,7 +29,7 @@ export interface BaseIOAuthorize {
29
29
  }
30
30
 
31
31
  export interface BaseIOAuthorizeEventRecord<
32
- TAuthorize extends IOAuthorize<any, any>,
32
+ TAuthorize extends IOAuthorize<any, any, any>,
33
33
  > {
34
34
  $OTHERS_RECEIVED: {
35
35
  others: {
@@ -48,7 +48,7 @@ export interface BaseIOAuthorizeEventRecord<
48
48
  };
49
49
  }
50
50
 
51
- export type BaseIOEventRecord<TAuthorize extends IOAuthorize<any, any>> =
51
+ export type BaseIOEventRecord<TAuthorize extends IOAuthorize<any, any, any>> =
52
52
  BaseIOAuthorizeEventRecord<TAuthorize> & {
53
53
  $ERROR: {
54
54
  message: string;
@@ -99,10 +99,13 @@ export type InferEventMessage<
99
99
  export type InferIOAuthorize<TIO extends IOLike> =
100
100
  TIO extends IOLike<infer IAuthorize> ? IAuthorize : never;
101
101
 
102
- export type InferIOAuthorizeRequired<TAuthorize extends IOAuthorize<any, any>> =
103
- TAuthorize extends IOAuthorize<any, infer IRequired> ? IRequired : never;
102
+ export type InferIOAuthorizeRequired<
103
+ TAuthorize extends IOAuthorize<any, any, any>,
104
+ > = TAuthorize extends IOAuthorize<any, infer IRequired> ? IRequired : never;
104
105
 
105
- export type InferIOAuthorizeUser<TAuthorize extends IOAuthorize<any, any>> =
106
+ export type InferIOAuthorizeUser<
107
+ TAuthorize extends IOAuthorize<any, any, any>,
108
+ > =
106
109
  TAuthorize extends IOAuthorize<infer IUser, infer IRequired>
107
110
  ? IRequired extends true
108
111
  ? IUser
@@ -137,14 +140,21 @@ export type InputZodLike<TData extends JsonObject> = {
137
140
  parse: (data: unknown) => TData;
138
141
  };
139
142
 
140
- export interface IOAuthorize<
143
+ export type IOAuthorize<
141
144
  TUser extends BaseUser = any,
142
145
  TRequired extends boolean = false,
143
- > {
144
- required: TRequired;
145
- secret: string;
146
- user: InputZodLike<TUser>;
147
- }
146
+ TContext extends Record<string, unknown> = {},
147
+ > =
148
+ | {
149
+ required: TRequired;
150
+ secret: string;
151
+ user: InputZodLike<TUser>;
152
+ }
153
+ | ((context: TContext) => {
154
+ required: TRequired;
155
+ secret: string;
156
+ user: InputZodLike<TUser>;
157
+ });
148
158
 
149
159
  export type IOAuthorizeEventMessage<TIO extends IOLike> =
150
160
  InferIOAuthorizeRequired<InferIOAuthorize<TIO>> extends false
@@ -172,7 +182,7 @@ export type IOEventMessage<
172
182
  >;
173
183
 
174
184
  export interface IOLike<
175
- TAuthorize extends IOAuthorize<any, any> = IOAuthorize<any, any>,
185
+ TAuthorize extends IOAuthorize<any, any, any> = IOAuthorize<any, any, any>,
176
186
  TInput extends EventRecord<string, any> = {},
177
187
  TOutputBroadcast extends EventRecord<string, any> = {},
178
188
  TOutputSelf extends EventRecord<string, any> = {},