@od-oneapp/security 2026.1.1301

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.
@@ -0,0 +1,2 @@
1
+ import { getSecurityHeaders } from "./client.mjs";
2
+ export { getSecurityHeaders };
@@ -0,0 +1,17 @@
1
+ 'use client';
2
+
3
+ import { getSecurityHeaders } from "./client.mjs";
4
+
5
+ //#region src/client-next.ts
6
+ /**
7
+ * @fileoverview Client-side security exports for Next.js
8
+ *
9
+ * This file provides client-side security functionality specifically for Next.js applications.
10
+ * Re-exports client security utilities for Next.js client components.
11
+ *
12
+ * @module @od-oneapp/security/client/next
13
+ */
14
+
15
+ //#endregion
16
+ export { getSecurityHeaders };
17
+ //# sourceMappingURL=client-next.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-next.mjs","names":[],"sources":["../src/client-next.ts"],"sourcesContent":["/**\n * @fileoverview Client-side security exports for Next.js\n *\n * This file provides client-side security functionality specifically for Next.js applications.\n * Re-exports client security utilities for Next.js client components.\n *\n * @module @repo/security/client/next\n */\n\n'use client';\n\n// Re-export client functionality (explicit exports to avoid circular dependencies)\nexport { getSecurityHeaders } from './client';\n"],"mappings":""}
@@ -0,0 +1,5 @@
1
+ //#region src/client.d.ts
2
+ declare function getSecurityHeaders(): {};
3
+ //#endregion
4
+ export { getSecurityHeaders };
5
+ //# sourceMappingURL=client.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.mts","names":[],"sources":["../src/client.ts"],"mappings":";iBAyCgB,kBAAA,CAAA"}
@@ -0,0 +1,48 @@
1
+ //#region src/client.ts
2
+ /**
3
+ * @fileoverview Client-side security exports (non-Next.js)
4
+ *
5
+ * This file provides client-side security functionality for non-Next.js environments.
6
+ * For Next.js applications, use '@od-oneapp/security/client/next' instead.
7
+ *
8
+ * Note: Security headers must be set server-side for actual protection.
9
+ * This module provides placeholder functions for client-side compatibility.
10
+ *
11
+ * @module @od-oneapp/security/client
12
+ */
13
+ /**
14
+ * Get security headers (client-side placeholder).
15
+ *
16
+ * @remarks
17
+ * This is a client-side placeholder function. Security headers must be set server-side
18
+ * for actual protection. Use '@od-oneapp/security/server' instead for real security headers.
19
+ *
20
+ * **Why client-side can't set security headers**:
21
+ * - Security headers (CSP, HSTS, etc.) must be set in HTTP responses
22
+ * - Client-side JavaScript cannot modify HTTP response headers
23
+ * - Headers set client-side are ignored by browsers for security reasons
24
+ *
25
+ * **Use server-side instead**:
26
+ * - Next.js: Use middleware or API routes with `@od-oneapp/security/server/next`
27
+ * - Express: Use middleware with `@od-oneapp/security/server`
28
+ * - Other frameworks: Set headers in response handlers
29
+ *
30
+ * @returns Empty object (security headers must be set server-side)
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * import { getSecurityHeaders } from '@od-oneapp/security/client';
35
+ *
36
+ * // Returns empty object - headers must be set server-side
37
+ * const headers = getSecurityHeaders();
38
+ * ```
39
+ *
40
+ * @see Use '@od-oneapp/security/server' for actual security headers
41
+ */
42
+ function getSecurityHeaders() {
43
+ return {};
44
+ }
45
+
46
+ //#endregion
47
+ export { getSecurityHeaders };
48
+ //# sourceMappingURL=client.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.mjs","names":[],"sources":["../src/client.ts"],"sourcesContent":["/**\n * @fileoverview Client-side security exports (non-Next.js)\n *\n * This file provides client-side security functionality for non-Next.js environments.\n * For Next.js applications, use '@repo/security/client/next' instead.\n *\n * Note: Security headers must be set server-side for actual protection.\n * This module provides placeholder functions for client-side compatibility.\n *\n * @module @repo/security/client\n */\n\n/**\n * Get security headers (client-side placeholder).\n *\n * @remarks\n * This is a client-side placeholder function. Security headers must be set server-side\n * for actual protection. Use '@repo/security/server' instead for real security headers.\n *\n * **Why client-side can't set security headers**:\n * - Security headers (CSP, HSTS, etc.) must be set in HTTP responses\n * - Client-side JavaScript cannot modify HTTP response headers\n * - Headers set client-side are ignored by browsers for security reasons\n *\n * **Use server-side instead**:\n * - Next.js: Use middleware or API routes with `@repo/security/server/next`\n * - Express: Use middleware with `@repo/security/server`\n * - Other frameworks: Set headers in response handlers\n *\n * @returns Empty object (security headers must be set server-side)\n *\n * @example\n * ```typescript\n * import { getSecurityHeaders } from '@repo/security/client';\n *\n * // Returns empty object - headers must be set server-side\n * const headers = getSecurityHeaders();\n * ```\n *\n * @see Use '@repo/security/server' for actual security headers\n */\nexport function getSecurityHeaders() {\n // This is a client-side placeholder\n // Real security headers must be set server-side\n // Use @repo/security/server instead for actual security headers\n return {};\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA,SAAgB,qBAAqB;AAInC,QAAO,EAAE"}
@@ -0,0 +1,163 @@
1
+ import "server-only";
2
+ import * as _integrations_upstash_redis_client0 from "@integrations/upstash/redis-client";
3
+ import { Ratelimit, RatelimitConfig } from "@integrations/upstash/redis-client";
4
+ import * as _upstash_redis0 from "@upstash/redis";
5
+
6
+ //#region rate-limit.d.ts
7
+ declare const slidingWindow: typeof Ratelimit.slidingWindow;
8
+ declare const fixedWindow: typeof Ratelimit.fixedWindow;
9
+ declare const tokenBucket: typeof Ratelimit.tokenBucket;
10
+ type RateLimiterInstance = {
11
+ limit: Ratelimit['limit'];
12
+ getRemaining: Ratelimit['getRemaining'];
13
+ resetUsedTokens: Ratelimit['resetUsedTokens'];
14
+ };
15
+ declare function hashIdentifier(identifier: string): string;
16
+ declare const createRateLimiter: (props: Omit<RatelimitConfig, "redis">) => RateLimiterInstance;
17
+ declare const rateLimitConfigs: {
18
+ readonly api: {
19
+ readonly limiter: _integrations_upstash_redis_client0.Algorithm<{
20
+ redis: _upstash_redis0.Redis;
21
+ cache?: {
22
+ isBlocked: (identifier: string) => {
23
+ blocked: boolean;
24
+ reset: number;
25
+ };
26
+ blockUntil: (identifier: string, reset: number) => void;
27
+ set: (key: string, value: number) => void;
28
+ get: (key: string) => number | null;
29
+ incr: (key: string, incrementAmount?: number) => number;
30
+ pop: (key: string) => void;
31
+ empty: () => void;
32
+ size: () => number;
33
+ };
34
+ dynamicLimits?: boolean;
35
+ prefix: string;
36
+ }>;
37
+ readonly prefix: "ratelimit:api";
38
+ };
39
+ readonly auth: {
40
+ readonly limiter: _integrations_upstash_redis_client0.Algorithm<{
41
+ redis: _upstash_redis0.Redis;
42
+ cache?: {
43
+ isBlocked: (identifier: string) => {
44
+ blocked: boolean;
45
+ reset: number;
46
+ };
47
+ blockUntil: (identifier: string, reset: number) => void;
48
+ set: (key: string, value: number) => void;
49
+ get: (key: string) => number | null;
50
+ incr: (key: string, incrementAmount?: number) => number;
51
+ pop: (key: string) => void;
52
+ empty: () => void;
53
+ size: () => number;
54
+ };
55
+ dynamicLimits?: boolean;
56
+ prefix: string;
57
+ }>;
58
+ readonly prefix: "ratelimit:auth";
59
+ };
60
+ readonly upload: {
61
+ readonly limiter: _integrations_upstash_redis_client0.Algorithm<{
62
+ redis: _upstash_redis0.Redis;
63
+ cache?: {
64
+ isBlocked: (identifier: string) => {
65
+ blocked: boolean;
66
+ reset: number;
67
+ };
68
+ blockUntil: (identifier: string, reset: number) => void;
69
+ set: (key: string, value: number) => void;
70
+ get: (key: string) => number | null;
71
+ incr: (key: string, incrementAmount?: number) => number;
72
+ pop: (key: string) => void;
73
+ empty: () => void;
74
+ size: () => number;
75
+ };
76
+ dynamicLimits?: boolean;
77
+ prefix: string;
78
+ }>;
79
+ readonly prefix: "ratelimit:upload";
80
+ };
81
+ readonly webhook: {
82
+ readonly limiter: _integrations_upstash_redis_client0.Algorithm<{
83
+ redis: _upstash_redis0.Redis;
84
+ cache?: {
85
+ isBlocked: (identifier: string) => {
86
+ blocked: boolean;
87
+ reset: number;
88
+ };
89
+ blockUntil: (identifier: string, reset: number) => void;
90
+ set: (key: string, value: number) => void;
91
+ get: (key: string) => number | null;
92
+ incr: (key: string, incrementAmount?: number) => number;
93
+ pop: (key: string) => void;
94
+ empty: () => void;
95
+ size: () => number;
96
+ };
97
+ dynamicLimits?: boolean;
98
+ prefix: string;
99
+ }>;
100
+ readonly prefix: "ratelimit:webhook";
101
+ };
102
+ readonly search: {
103
+ readonly limiter: _integrations_upstash_redis_client0.Algorithm<{
104
+ redis: _upstash_redis0.Redis;
105
+ cache?: {
106
+ isBlocked: (identifier: string) => {
107
+ blocked: boolean;
108
+ reset: number;
109
+ };
110
+ blockUntil: (identifier: string, reset: number) => void;
111
+ set: (key: string, value: number) => void;
112
+ get: (key: string) => number | null;
113
+ incr: (key: string, incrementAmount?: number) => number;
114
+ pop: (key: string) => void;
115
+ empty: () => void;
116
+ size: () => number;
117
+ };
118
+ dynamicLimits?: boolean;
119
+ prefix: string;
120
+ }>;
121
+ readonly prefix: "ratelimit:search";
122
+ };
123
+ };
124
+ declare const rateLimiters: {
125
+ api: RateLimiterInstance;
126
+ auth: RateLimiterInstance;
127
+ upload: RateLimiterInstance;
128
+ webhook: RateLimiterInstance;
129
+ search: RateLimiterInstance;
130
+ };
131
+ type RateLimitResult = {
132
+ success: boolean;
133
+ limit: number;
134
+ remaining: number;
135
+ reset: number;
136
+ retryAfter?: number;
137
+ disabled?: boolean;
138
+ };
139
+ declare const applyRateLimit: (identifier: string, type?: keyof typeof rateLimiters) => Promise<RateLimitResult>;
140
+ declare const isRateLimited: (identifier: string, type?: keyof typeof rateLimiters) => Promise<boolean>;
141
+ declare const getRateLimitInfo: (identifier: string, type?: keyof typeof rateLimiters) => Promise<Omit<RateLimitResult, "success">>;
142
+ //#endregion
143
+ //#region env.d.ts
144
+ interface Logger {
145
+ warn(message: string, context?: Record<string, unknown>): void;
146
+ error(message: string, context?: Record<string, unknown>): void;
147
+ }
148
+ declare function setLogger(customLogger: Logger): void;
149
+ declare function getLogger(): Logger;
150
+ declare const env: {
151
+ ARCJET_KEY?: string;
152
+ UPSTASH_REDIS_REST_TOKEN?: string;
153
+ UPSTASH_REDIS_REST_URL?: string;
154
+ NODE_ENV: 'development' | 'test' | 'production';
155
+ };
156
+ declare function safeEnv(): SecurityEnv;
157
+ declare function isProduction(): boolean;
158
+ declare function hasArcjetConfig(): boolean;
159
+ declare function hasUpstashConfig(): boolean;
160
+ type SecurityEnv = typeof env;
161
+ //#endregion
162
+ export { slidingWindow as _, isProduction as a, RateLimitResult as c, fixedWindow as d, getRateLimitInfo as f, rateLimiters as g, rateLimitConfigs as h, hasUpstashConfig as i, applyRateLimit as l, isRateLimited as m, getLogger as n, safeEnv as o, hashIdentifier as p, hasArcjetConfig as r, setLogger as s, env as t, createRateLimiter as u, tokenBucket as v };
163
+ //# sourceMappingURL=env-DvTVXAjh.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-DvTVXAjh.d.mts","names":[],"sources":["../rate-limit.ts","../env.ts"],"mappings":";;;;;;cAkCe,aAAA,SAAa,SAAA,CAAA,aAAA;AAAA,cAmBb,WAAA,SAAW,SAAA,CAAA,WAAA;AAAA,cAmBX,WAAA,SAAW,SAAA,CAAA,WAAA;AAAA,KAOrB,mBAAA;EACH,KAAA,EAAO,SAAA;EACP,YAAA,EAAc,SAAA;EACd,eAAA,EAAiB,SAAA;AAAA;AAAA,iBA2EH,cAAA,CAAe,UAAA;AAAA,cAiHlB,iBAAA,GAAqB,KAAA,EAAO,IAAA,CAAK,eAAA,eAA4B,mBAAA;AAAA,cAwD7D,gBAAA;EAAA;;aA8B4D,eAAA,CAAA,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAwB5D,YAAA;OAcI,mBAAA;QAMC,mBAAA;UAME,mBAAA;WAMC,mBAAA;UAMD,mBAAA;AAAA;AAAA,KAqBR,eAAA;EACV,OAAA;EACA,KAAA;EACA,SAAA;EACA,KAAA;EACA,UAAA;EAEA,QAAA;AAAA;AAAA,cA6EW,cAAA,GACX,UAAA,UACA,IAAA,gBAAmB,YAAA,KAClB,OAAA,CAAQ,eAAA;AAAA,cA+DE,aAAA,GACX,UAAA,UACA,IAAA,gBAAmB,YAAA,KAClB,OAAA;AAAA,cA8BU,gBAAA,GACX,UAAA,UACA,IAAA,gBAAmB,YAAA,KAClB,OAAA,CAAQ,IAAA,CAAK,eAAA;;;UCzlBC,MAAA;EACf,IAAA,CAAK,OAAA,UAAiB,OAAA,GAAU,MAAA;EAChC,KAAA,CAAM,OAAA,UAAiB,OAAA,GAAU,MAAA;AAAA;AAAA,iBA4DnB,SAAA,CAAU,YAAA,EAAc,MAAA;AAAA,iBAqBxB,SAAA,CAAA,GAAa,MAAA;AAAA,cAsBhB,GAAA;EACX,UAAA;EACA,wBAAA;EACA,sBAAA;EACA,QAAA;AAAA;AAAA,iBA2Ec,OAAA,CAAA,GAAW,WAAA;AAAA,iBAyBX,YAAA,CAAA;AAAA,iBA2BA,eAAA,CAAA;AAAA,iBAkCA,gBAAA,CAAA;AAAA,KAsBJ,WAAA,UAAqB,GAAA"}