@arcote.tech/arc-host 0.4.10 → 0.5.1

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 +1 @@
1
- {"version":3,"file":"create-server.d.ts","sourceRoot":"","sources":["../../src/create-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAElC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAOjD,OAAO,KAAK,EACV,cAAc,EAGd,YAAY,EACb,MAAM,oBAAoB,CAAC;AAG5B,KAAK,aAAa,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,aAAa,CAAC;IACvB,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IACzD,YAAY,CAAC,EAAE,cAAc,EAAE,CAAC;IAChC,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oFAAoF;IACpF,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAC9B,cAAc,EAAE,cAAc,CAAC;IAC/B,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,aAAa,EAAE,aAAa,CAAC;IAC7B,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,SAAS,CAAC,CAkKpB"}
1
+ {"version":3,"file":"create-server.d.ts","sourceRoot":"","sources":["../../src/create-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAElC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAOjD,OAAO,KAAK,EACV,cAAc,EAGd,YAAY,EACb,MAAM,oBAAoB,CAAC;AAG5B,KAAK,aAAa,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,aAAa,CAAC;IACvB,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IACzD,YAAY,CAAC,EAAE,cAAc,EAAE,CAAC;IAChC,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oFAAoF;IACpF,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAC9B,cAAc,EAAE,cAAc,CAAC;IAC/B,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,aAAa,EAAE,aAAa,CAAC;IAC7B,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,SAAS,CAAC,CAmLpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../../src/middleware/ws.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAgB,YAAY,EAAE,MAAM,SAAS,CAAC;AAQ1D,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAMxD;AAMD,wBAAgB,gBAAgB,IAAI,YAAY,CAc/C;AAMD,wBAAgB,iBAAiB,IAAI,YAAY,CAuChD;AAMD,wBAAgB,kBAAkB,IAAI,YAAY,CA+BjD;AAMD,wBAAgB,qBAAqB,IAAI,YAAY,CA6BpD;AAMD,wBAAgB,wBAAwB,IAAI,YAAY,CA2FvD;AAMD,wBAAgB,aAAa,IAAI,YAAY,EAAE,CAQ9C"}
1
+ {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../../src/middleware/ws.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAgB,YAAY,EAAE,MAAM,SAAS,CAAC;AAQ1D,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAMxD;AAMD,wBAAgB,gBAAgB,IAAI,YAAY,CAc/C;AAMD,wBAAgB,iBAAiB,IAAI,YAAY,CAuChD;AAMD,wBAAgB,kBAAkB,IAAI,YAAY,CA+BjD;AAMD,wBAAgB,qBAAqB,IAAI,YAAY,CA6BpD;AAMD,wBAAgB,wBAAwB,IAAI,YAAY,CA4FvD;AAMD,wBAAgB,aAAa,IAAI,YAAY,EAAE,CAQ9C"}
package/package.json CHANGED
@@ -4,18 +4,18 @@
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",
7
- "version": "0.4.10",
7
+ "version": "0.5.1",
8
8
  "private": false,
9
9
  "author": "Przemysław Krasiński [arcote.tech]",
10
10
  "dependencies": {
11
- "@arcote.tech/arc-adapter-db-sqlite": "^0.4.10",
11
+ "@arcote.tech/arc-adapter-db-sqlite": "^0.5.1",
12
12
  "croner": "^9.0.0",
13
13
  "jsonwebtoken": "^9.0.2"
14
14
  },
15
15
  "scripts": {
16
16
  "build": "rm -rf dist && bun build ./index.ts --target=bun --outdir=dist --sourcemap --external @arcote.tech/arc && bun run build:declaration",
17
17
  "build:declaration": "tsc --emitDeclarationOnly --declarationMap --project tsconfig.types.json",
18
- "postbuild": "rimraf tsconfig.types.tsbuildinfo",
18
+ "postbuild": "rm -f tsconfig.types.tsbuildinfo",
19
19
  "type-check": "tsc",
20
20
  "dev": "nodemon --ignore dist -e ts,tsx --exec 'bun run build'"
21
21
  },
@@ -24,6 +24,6 @@
24
24
  "@types/bun": "^1.2.0"
25
25
  },
26
26
  "peerDependencies": {
27
- "@arcote.tech/arc": "^0.4.10"
27
+ "@arcote.tech/arc": "^0.5.1"
28
28
  }
29
29
  }
@@ -66,12 +66,17 @@ export async function createArcServer(
66
66
 
67
67
  const connectionManager = new ConnectionManager();
68
68
 
69
- const corsHeaders = {
70
- "Access-Control-Allow-Origin": "*",
71
- "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS",
72
- "Access-Control-Allow-Headers":
73
- "Content-Type, Authorization, X-Arc-Scope, X-Arc-Tokens",
74
- };
69
+ function buildCorsHeaders(req?: Request) {
70
+ const origin = req?.headers.get("Origin") || "*";
71
+ return {
72
+ "Access-Control-Allow-Origin": origin,
73
+ "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS",
74
+ "Access-Control-Allow-Headers":
75
+ "Content-Type, Authorization, X-Arc-Scope, X-Arc-Tokens",
76
+ "Access-Control-Allow-Credentials": "true",
77
+ };
78
+ }
79
+ const corsHeaders = buildCorsHeaders();
75
80
 
76
81
  function verifyToken(token: string): TokenPayload | null {
77
82
  try {
@@ -127,16 +132,28 @@ export async function createArcServer(
127
132
  async fetch(req, server) {
128
133
  const url = new URL(req.url);
129
134
 
135
+ // Build CORS headers with request origin
136
+ const corsHeaders = buildCorsHeaders(req);
137
+
130
138
  // CORS preflight
131
139
  if (req.method === "OPTIONS") {
132
140
  return new Response(null, { headers: corsHeaders });
133
141
  }
134
142
 
135
- // Token extraction
143
+ // Token extraction: Authorization header > query param > cookie
136
144
  const authHeader = req.headers.get("Authorization");
137
- const rawToken =
145
+ let rawToken =
138
146
  authHeader?.replace("Bearer ", "") ||
139
147
  url.searchParams.get("token");
148
+
149
+ if (!rawToken) {
150
+ const cookieHeader = req.headers.get("Cookie");
151
+ if (cookieHeader) {
152
+ const match = cookieHeader.match(/arc_token=([^;]+)/);
153
+ if (match) rawToken = decodeURIComponent(match[1]);
154
+ }
155
+ }
156
+
140
157
  const tokenPayload = rawToken ? verifyToken(rawToken) : null;
141
158
 
142
159
  // WebSocket upgrade
@@ -198,9 +198,10 @@ export function querySubscriptionHandler(): ArcWsHandler {
198
198
  // Initial data
199
199
  sendData();
200
200
 
201
- // Subscribe to SPECIFIC event types this element handles (not wildcard)
201
+ // Subscribe to SPECIFIC event types this element handles (namespaced keys)
202
202
  const element = ctx.contextHandler.getModel().context.get(descriptor.element);
203
- const eventTypes = (element as any)?.getElements?.()?.map((e: any) => e.name) ?? [];
203
+ const handlers = (element as any)?.getHandlers?.();
204
+ const eventTypes: string[] = handlers ? Object.keys(handlers) : [];
204
205
 
205
206
  let debounceTimer: ReturnType<typeof setTimeout> | undefined;
206
207
  const debouncedSend = () => {