@thewhateverapp/platform 0.9.26 → 0.9.27
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/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/tile-context/index.d.ts +64 -0
- package/dist/tile-context/index.d.ts.map +1 -0
- package/dist/tile-context/index.js +212 -0
- package/dist/tile-context/index.js.map +1 -0
- package/dist/tile-context/types.d.ts +69 -0
- package/dist/tile-context/types.d.ts.map +1 -0
- package/dist/tile-context/types.js +5 -0
- package/dist/tile-context/types.js.map +1 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -40,6 +40,8 @@ export { getAI, createAI } from './ai';
|
|
|
40
40
|
export type { AIServiceProvider, AIProvider, AICapability, AskOptions, PromptRequest, PromptResponse, ImageInput, } from './ai/types';
|
|
41
41
|
export { getTileState } from './tile-state';
|
|
42
42
|
export type { TileStateProvider, Comment, Report, } from './tile-state/types';
|
|
43
|
+
export { getTileContext, clearTileContextCache } from './tile-context';
|
|
44
|
+
export type { TileContext, TileContextOptions, TokenValidationResponse, } from './tile-context/types';
|
|
43
45
|
export { getRealtime, createRealtime, createRealtimeHttp, getRealtimeWebSocketUrl } from './realtime';
|
|
44
46
|
export type { RealtimeProvider, RealtimeEnv, RealtimeHttpConfig, RealtimeMessage, RealtimeMessageType, RealtimeStats, PublishOptions, PublishResult, RealtimeConnectionOptions, RealtimeConnectionState, RealtimeConnection, } from './realtime/types';
|
|
45
47
|
export { getKeyspace, createKeyspace, createKeyspaceHttp } from './keyspace';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -43,6 +43,8 @@ export { getPublicStorage, createPublicStorage, resetPublicStorage, } from './pu
|
|
|
43
43
|
export { getAI, createAI } from './ai';
|
|
44
44
|
// Tile State - Durable Objects for real-time state
|
|
45
45
|
export { getTileState } from './tile-state';
|
|
46
|
+
// Tile Context - Server-side authentication for tile API routes
|
|
47
|
+
export { getTileContext, clearTileContextCache } from './tile-context';
|
|
46
48
|
// Realtime - WebSocket pub/sub via Durable Objects
|
|
47
49
|
export { getRealtime, createRealtime, createRealtimeHttp, getRealtimeWebSocketUrl } from './realtime';
|
|
48
50
|
// Keyspace - Redis-inspired shared state (counters, kv, queues, sets, leaderboards, etc.)
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,0EAA0E;AAC1E,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,OAAO,CAAC;AAGf,eAAe;AACf,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAK9D,gFAAgF;AAChF,mEAAmE;AACnE,gFAAgF;AAEhF,mDAAmD;AACnD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAazD,yCAAyC;AACzC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAWvC,gCAAgC;AAChC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAYjD,qEAAqE;AACrE,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAO1B,6DAA6D;AAC7D,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAWvC,mDAAmD;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAO5C,mDAAmD;AACnD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAetG,0FAA0F;AAC1F,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAsB7E,gFAAgF;AAChF,mDAAmD;AACnD,gFAAgF;AAEhF,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,0EAA0E;AAC1E,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,OAAO,CAAC;AAGf,eAAe;AACf,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAK9D,gFAAgF;AAChF,mEAAmE;AACnE,gFAAgF;AAEhF,mDAAmD;AACnD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAazD,yCAAyC;AACzC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAWvC,gCAAgC;AAChC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAYjD,qEAAqE;AACrE,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAO1B,6DAA6D;AAC7D,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAWvC,mDAAmD;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAO5C,gEAAgE;AAChE,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAOvE,mDAAmD;AACnD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAetG,0FAA0F;AAC1F,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAsB7E,gFAAgF;AAChF,mDAAmD;AACnD,gFAAgF;AAEhF,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tile Context - Server-side authentication for tile API routes
|
|
3
|
+
*
|
|
4
|
+
* Provides secure user context without manual JWT decoding.
|
|
5
|
+
* Tiles should NEVER decode tokens themselves - use this instead.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { getTileContext } from '@thewhateverapp/platform';
|
|
10
|
+
*
|
|
11
|
+
* export async function POST(req: NextRequest) {
|
|
12
|
+
* const ctx = await getTileContext(req);
|
|
13
|
+
*
|
|
14
|
+
* if (!ctx.authenticated) {
|
|
15
|
+
* // Use ctx.userId as anonymous identifier
|
|
16
|
+
* await kv.put(`vote:anon:${ctx.userId}`, 'yes');
|
|
17
|
+
* } else {
|
|
18
|
+
* // Authenticated user
|
|
19
|
+
* await kv.put(`vote:user:${ctx.userId}`, 'yes');
|
|
20
|
+
* }
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
import type { TileContext, TileContextOptions } from './types';
|
|
25
|
+
export type * from './types';
|
|
26
|
+
/**
|
|
27
|
+
* Get tile context from an incoming request
|
|
28
|
+
*
|
|
29
|
+
* This is the recommended way to get user context in tile API routes.
|
|
30
|
+
* Never manually decode JWTs - use this function instead.
|
|
31
|
+
*
|
|
32
|
+
* @param request - The incoming request (NextRequest, Request, or object with headers)
|
|
33
|
+
* @param options - Configuration options
|
|
34
|
+
* @returns TileContext with user info (authenticated or anonymous)
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* import { getTileContext } from '@thewhateverapp/platform';
|
|
39
|
+
*
|
|
40
|
+
* export async function POST(req: NextRequest) {
|
|
41
|
+
* const ctx = await getTileContext(req);
|
|
42
|
+
*
|
|
43
|
+
* if (ctx.authenticated) {
|
|
44
|
+
* // User is logged in, ctx.userId is their real user ID
|
|
45
|
+
* console.log('Authenticated user:', ctx.userId);
|
|
46
|
+
* } else {
|
|
47
|
+
* // Anonymous user, ctx.userId is a consistent anonymous ID
|
|
48
|
+
* console.log('Anonymous user:', ctx.userId);
|
|
49
|
+
* }
|
|
50
|
+
*
|
|
51
|
+
* // Both cases: userId is safe to use for per-user tracking
|
|
52
|
+
* await kv.put(`vote:${ctx.userId}`, 'yes');
|
|
53
|
+
* }
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export declare function getTileContext(request: Request | {
|
|
57
|
+
headers: Headers;
|
|
58
|
+
}, options?: TileContextOptions): Promise<TileContext>;
|
|
59
|
+
/**
|
|
60
|
+
* Clear the token validation cache
|
|
61
|
+
* Useful for testing or when you need to force re-validation
|
|
62
|
+
*/
|
|
63
|
+
export declare function clearTileContextCache(): void;
|
|
64
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tile-context/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAEnB,MAAM,SAAS,CAAC;AAEjB,mBAAmB,SAAS,CAAC;AAgG7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,GAAG;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,EACvC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,CAAC,CAoFtB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tile Context - Server-side authentication for tile API routes
|
|
3
|
+
*
|
|
4
|
+
* Provides secure user context without manual JWT decoding.
|
|
5
|
+
* Tiles should NEVER decode tokens themselves - use this instead.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { getTileContext } from '@thewhateverapp/platform';
|
|
10
|
+
*
|
|
11
|
+
* export async function POST(req: NextRequest) {
|
|
12
|
+
* const ctx = await getTileContext(req);
|
|
13
|
+
*
|
|
14
|
+
* if (!ctx.authenticated) {
|
|
15
|
+
* // Use ctx.userId as anonymous identifier
|
|
16
|
+
* await kv.put(`vote:anon:${ctx.userId}`, 'yes');
|
|
17
|
+
* } else {
|
|
18
|
+
* // Authenticated user
|
|
19
|
+
* await kv.put(`vote:user:${ctx.userId}`, 'yes');
|
|
20
|
+
* }
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
// In-memory cache for validated tokens
|
|
25
|
+
// Key: token, Value: { context, expiresAt }
|
|
26
|
+
const tokenCache = new Map();
|
|
27
|
+
// Default options
|
|
28
|
+
const DEFAULT_OPTIONS = {
|
|
29
|
+
tokenHeader: 'x-tile-token',
|
|
30
|
+
apiUrl: 'https://api.thewhatever.app',
|
|
31
|
+
cache: true,
|
|
32
|
+
cacheTtl: 60000, // 1 minute
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Generate a consistent anonymous user ID from request characteristics
|
|
36
|
+
* Uses IP + User-Agent hash for anonymous tracking
|
|
37
|
+
*/
|
|
38
|
+
function generateAnonymousId(request) {
|
|
39
|
+
const ip = request.headers.get('cf-connecting-ip') ||
|
|
40
|
+
request.headers.get('x-forwarded-for')?.split(',')[0]?.trim() ||
|
|
41
|
+
request.headers.get('x-real-ip') ||
|
|
42
|
+
'unknown';
|
|
43
|
+
const ua = request.headers.get('user-agent') || 'unknown';
|
|
44
|
+
// Simple hash function for anonymous ID
|
|
45
|
+
const str = `${ip}:${ua}`;
|
|
46
|
+
let hash = 0;
|
|
47
|
+
for (let i = 0; i < str.length; i++) {
|
|
48
|
+
const char = str.charCodeAt(i);
|
|
49
|
+
hash = ((hash << 5) - hash) + char;
|
|
50
|
+
hash = hash & hash; // Convert to 32bit integer
|
|
51
|
+
}
|
|
52
|
+
return `anon_${Math.abs(hash).toString(36)}`;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Extract tile ID from request URL or headers
|
|
56
|
+
*/
|
|
57
|
+
function extractTileId(request) {
|
|
58
|
+
// Try to get from header first (set by platform router)
|
|
59
|
+
const headerTileId = request.headers.get('x-tile-id');
|
|
60
|
+
if (headerTileId)
|
|
61
|
+
return headerTileId;
|
|
62
|
+
// Try to extract from URL (e.g., app-<tileId>.pages.dev)
|
|
63
|
+
try {
|
|
64
|
+
const url = new URL(request.url);
|
|
65
|
+
const hostname = url.hostname;
|
|
66
|
+
// Match app-<tileId> pattern
|
|
67
|
+
const match = hostname.match(/^app-([a-z0-9]+)/i);
|
|
68
|
+
if (match)
|
|
69
|
+
return match[1];
|
|
70
|
+
// Match <tileId>.thewhatever.app pattern
|
|
71
|
+
const subdomainMatch = hostname.match(/^([a-z0-9-]+)\.thewhatever\.app$/i);
|
|
72
|
+
if (subdomainMatch && subdomainMatch[1] !== 'api') {
|
|
73
|
+
return subdomainMatch[1];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// URL parsing failed
|
|
78
|
+
}
|
|
79
|
+
return 'unknown';
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Validate a tile token via platform-api
|
|
83
|
+
*/
|
|
84
|
+
async function validateToken(token, apiUrl) {
|
|
85
|
+
try {
|
|
86
|
+
const response = await fetch(`${apiUrl}/platform/tiles/validate-token`, {
|
|
87
|
+
method: 'POST',
|
|
88
|
+
headers: {
|
|
89
|
+
'Content-Type': 'application/json',
|
|
90
|
+
},
|
|
91
|
+
body: JSON.stringify({ token }),
|
|
92
|
+
});
|
|
93
|
+
if (!response.ok) {
|
|
94
|
+
return { valid: false, error: `HTTP ${response.status}` };
|
|
95
|
+
}
|
|
96
|
+
return await response.json();
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
return {
|
|
100
|
+
valid: false,
|
|
101
|
+
error: error instanceof Error ? error.message : 'Validation failed',
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get tile context from an incoming request
|
|
107
|
+
*
|
|
108
|
+
* This is the recommended way to get user context in tile API routes.
|
|
109
|
+
* Never manually decode JWTs - use this function instead.
|
|
110
|
+
*
|
|
111
|
+
* @param request - The incoming request (NextRequest, Request, or object with headers)
|
|
112
|
+
* @param options - Configuration options
|
|
113
|
+
* @returns TileContext with user info (authenticated or anonymous)
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* ```typescript
|
|
117
|
+
* import { getTileContext } from '@thewhateverapp/platform';
|
|
118
|
+
*
|
|
119
|
+
* export async function POST(req: NextRequest) {
|
|
120
|
+
* const ctx = await getTileContext(req);
|
|
121
|
+
*
|
|
122
|
+
* if (ctx.authenticated) {
|
|
123
|
+
* // User is logged in, ctx.userId is their real user ID
|
|
124
|
+
* console.log('Authenticated user:', ctx.userId);
|
|
125
|
+
* } else {
|
|
126
|
+
* // Anonymous user, ctx.userId is a consistent anonymous ID
|
|
127
|
+
* console.log('Anonymous user:', ctx.userId);
|
|
128
|
+
* }
|
|
129
|
+
*
|
|
130
|
+
* // Both cases: userId is safe to use for per-user tracking
|
|
131
|
+
* await kv.put(`vote:${ctx.userId}`, 'yes');
|
|
132
|
+
* }
|
|
133
|
+
* ```
|
|
134
|
+
*/
|
|
135
|
+
export async function getTileContext(request, options) {
|
|
136
|
+
const opts = { ...DEFAULT_OPTIONS, ...options };
|
|
137
|
+
// Extract token from headers
|
|
138
|
+
const headers = 'headers' in request ? request.headers : new Headers();
|
|
139
|
+
const token = headers.get(opts.tokenHeader);
|
|
140
|
+
// Get tile ID
|
|
141
|
+
const tileId = request instanceof Request
|
|
142
|
+
? extractTileId(request)
|
|
143
|
+
: headers.get('x-tile-id') || 'unknown';
|
|
144
|
+
// No token = anonymous context
|
|
145
|
+
if (!token) {
|
|
146
|
+
const anonymousId = request instanceof Request
|
|
147
|
+
? generateAnonymousId(request)
|
|
148
|
+
: `anon_${Date.now().toString(36)}`;
|
|
149
|
+
return {
|
|
150
|
+
authenticated: false,
|
|
151
|
+
userId: anonymousId,
|
|
152
|
+
tileId,
|
|
153
|
+
scopes: [],
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
// Check cache first
|
|
157
|
+
if (opts.cache) {
|
|
158
|
+
const cached = tokenCache.get(token);
|
|
159
|
+
if (cached && cached.expiresAt > Date.now()) {
|
|
160
|
+
return cached.context;
|
|
161
|
+
}
|
|
162
|
+
// Remove expired entry
|
|
163
|
+
if (cached) {
|
|
164
|
+
tokenCache.delete(token);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// Validate token via platform-api
|
|
168
|
+
const validation = await validateToken(token, opts.apiUrl);
|
|
169
|
+
if (!validation.valid || !validation.userId) {
|
|
170
|
+
// Invalid token - return anonymous context
|
|
171
|
+
const anonymousId = request instanceof Request
|
|
172
|
+
? generateAnonymousId(request)
|
|
173
|
+
: `anon_${Date.now().toString(36)}`;
|
|
174
|
+
return {
|
|
175
|
+
authenticated: false,
|
|
176
|
+
userId: anonymousId,
|
|
177
|
+
tileId,
|
|
178
|
+
scopes: [],
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
// Build authenticated context
|
|
182
|
+
const context = {
|
|
183
|
+
authenticated: true,
|
|
184
|
+
userId: validation.userId,
|
|
185
|
+
tileId: validation.tileId || tileId,
|
|
186
|
+
scopes: validation.scopes || [],
|
|
187
|
+
expiresAt: validation.expiresAt ? new Date(validation.expiresAt) : undefined,
|
|
188
|
+
};
|
|
189
|
+
// Cache the validated context
|
|
190
|
+
if (opts.cache) {
|
|
191
|
+
const cacheExpiry = Math.min(Date.now() + opts.cacheTtl, context.expiresAt?.getTime() || Date.now() + opts.cacheTtl);
|
|
192
|
+
tokenCache.set(token, { context, expiresAt: cacheExpiry });
|
|
193
|
+
// Clean up old cache entries periodically
|
|
194
|
+
if (tokenCache.size > 1000) {
|
|
195
|
+
const now = Date.now();
|
|
196
|
+
for (const [key, value] of tokenCache) {
|
|
197
|
+
if (value.expiresAt < now) {
|
|
198
|
+
tokenCache.delete(key);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return context;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Clear the token validation cache
|
|
207
|
+
* Useful for testing or when you need to force re-validation
|
|
208
|
+
*/
|
|
209
|
+
export function clearTileContextCache() {
|
|
210
|
+
tokenCache.clear();
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tile-context/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tile context types for server-side authentication
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Tile context returned from getTileContext()
|
|
6
|
+
* Provides validated user info without manual JWT decoding
|
|
7
|
+
*/
|
|
8
|
+
export interface TileContext {
|
|
9
|
+
/**
|
|
10
|
+
* Whether the user is authenticated
|
|
11
|
+
* If false, userId will be a unique anonymous identifier
|
|
12
|
+
*/
|
|
13
|
+
authenticated: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* User ID - either authenticated user ID or anonymous session ID
|
|
16
|
+
* Safe to use for per-user operations like voting, tracking, etc.
|
|
17
|
+
*/
|
|
18
|
+
userId: string;
|
|
19
|
+
/**
|
|
20
|
+
* Tile ID this context belongs to
|
|
21
|
+
*/
|
|
22
|
+
tileId: string;
|
|
23
|
+
/**
|
|
24
|
+
* Permission scopes granted to this tile for this user
|
|
25
|
+
* Only populated if authenticated
|
|
26
|
+
*/
|
|
27
|
+
scopes: string[];
|
|
28
|
+
/**
|
|
29
|
+
* Token expiration time (if authenticated)
|
|
30
|
+
*/
|
|
31
|
+
expiresAt?: Date;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Options for getTileContext()
|
|
35
|
+
*/
|
|
36
|
+
export interface TileContextOptions {
|
|
37
|
+
/**
|
|
38
|
+
* Header name to extract the token from
|
|
39
|
+
* @default 'x-tile-token'
|
|
40
|
+
*/
|
|
41
|
+
tokenHeader?: string;
|
|
42
|
+
/**
|
|
43
|
+
* Platform API URL for token validation
|
|
44
|
+
* @default 'https://api.thewhatever.app'
|
|
45
|
+
*/
|
|
46
|
+
apiUrl?: string;
|
|
47
|
+
/**
|
|
48
|
+
* Whether to cache validated tokens in memory
|
|
49
|
+
* @default true
|
|
50
|
+
*/
|
|
51
|
+
cache?: boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Cache TTL in milliseconds
|
|
54
|
+
* @default 60000 (1 minute)
|
|
55
|
+
*/
|
|
56
|
+
cacheTtl?: number;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Token validation response from platform-api
|
|
60
|
+
*/
|
|
61
|
+
export interface TokenValidationResponse {
|
|
62
|
+
valid: boolean;
|
|
63
|
+
userId?: string;
|
|
64
|
+
tileId?: string;
|
|
65
|
+
scopes?: string[];
|
|
66
|
+
expiresAt?: string;
|
|
67
|
+
error?: string;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tile-context/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,aAAa,EAAE,OAAO,CAAC;IAEvB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB;;OAEG;IACH,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tile-context/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|