@xivdyetools/test-utils 1.0.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.
Files changed (131) hide show
  1. package/LICENSE +37 -0
  2. package/README.md +144 -0
  3. package/dist/assertions/index.d.ts +7 -0
  4. package/dist/assertions/index.d.ts.map +1 -0
  5. package/dist/assertions/index.js +7 -0
  6. package/dist/assertions/index.js.map +1 -0
  7. package/dist/assertions/response.d.ts +84 -0
  8. package/dist/assertions/response.d.ts.map +1 -0
  9. package/dist/assertions/response.js +125 -0
  10. package/dist/assertions/response.js.map +1 -0
  11. package/dist/auth/context.d.ts +55 -0
  12. package/dist/auth/context.d.ts.map +1 -0
  13. package/dist/auth/context.js +95 -0
  14. package/dist/auth/context.js.map +1 -0
  15. package/dist/auth/headers.d.ts +64 -0
  16. package/dist/auth/headers.d.ts.map +1 -0
  17. package/dist/auth/headers.js +101 -0
  18. package/dist/auth/headers.js.map +1 -0
  19. package/dist/auth/index.d.ts +10 -0
  20. package/dist/auth/index.d.ts.map +1 -0
  21. package/dist/auth/index.js +10 -0
  22. package/dist/auth/index.js.map +1 -0
  23. package/dist/auth/jwt.d.ts +76 -0
  24. package/dist/auth/jwt.d.ts.map +1 -0
  25. package/dist/auth/jwt.js +77 -0
  26. package/dist/auth/jwt.js.map +1 -0
  27. package/dist/auth/signature.d.ts +64 -0
  28. package/dist/auth/signature.d.ts.map +1 -0
  29. package/dist/auth/signature.js +75 -0
  30. package/dist/auth/signature.js.map +1 -0
  31. package/dist/cloudflare/analytics.d.ts +55 -0
  32. package/dist/cloudflare/analytics.d.ts.map +1 -0
  33. package/dist/cloudflare/analytics.js +44 -0
  34. package/dist/cloudflare/analytics.js.map +1 -0
  35. package/dist/cloudflare/d1.d.ts +101 -0
  36. package/dist/cloudflare/d1.d.ts.map +1 -0
  37. package/dist/cloudflare/d1.js +148 -0
  38. package/dist/cloudflare/d1.js.map +1 -0
  39. package/dist/cloudflare/fetcher.d.ts +72 -0
  40. package/dist/cloudflare/fetcher.d.ts.map +1 -0
  41. package/dist/cloudflare/fetcher.js +136 -0
  42. package/dist/cloudflare/fetcher.js.map +1 -0
  43. package/dist/cloudflare/index.d.ts +12 -0
  44. package/dist/cloudflare/index.d.ts.map +1 -0
  45. package/dist/cloudflare/index.js +12 -0
  46. package/dist/cloudflare/index.js.map +1 -0
  47. package/dist/cloudflare/kv.d.ts +85 -0
  48. package/dist/cloudflare/kv.d.ts.map +1 -0
  49. package/dist/cloudflare/kv.js +138 -0
  50. package/dist/cloudflare/kv.js.map +1 -0
  51. package/dist/cloudflare/r2.d.ts +88 -0
  52. package/dist/cloudflare/r2.d.ts.map +1 -0
  53. package/dist/cloudflare/r2.js +127 -0
  54. package/dist/cloudflare/r2.js.map +1 -0
  55. package/dist/constants/index.d.ts +8 -0
  56. package/dist/constants/index.d.ts.map +1 -0
  57. package/dist/constants/index.js +8 -0
  58. package/dist/constants/index.js.map +1 -0
  59. package/dist/constants/pkce.d.ts +89 -0
  60. package/dist/constants/pkce.d.ts.map +1 -0
  61. package/dist/constants/pkce.js +107 -0
  62. package/dist/constants/pkce.js.map +1 -0
  63. package/dist/constants/secrets.d.ts +72 -0
  64. package/dist/constants/secrets.d.ts.map +1 -0
  65. package/dist/constants/secrets.js +73 -0
  66. package/dist/constants/secrets.js.map +1 -0
  67. package/dist/dom/canvas.d.ts +108 -0
  68. package/dist/dom/canvas.d.ts.map +1 -0
  69. package/dist/dom/canvas.js +125 -0
  70. package/dist/dom/canvas.js.map +1 -0
  71. package/dist/dom/fetch.d.ts +69 -0
  72. package/dist/dom/fetch.d.ts.map +1 -0
  73. package/dist/dom/fetch.js +107 -0
  74. package/dist/dom/fetch.js.map +1 -0
  75. package/dist/dom/index.d.ts +12 -0
  76. package/dist/dom/index.d.ts.map +1 -0
  77. package/dist/dom/index.js +12 -0
  78. package/dist/dom/index.js.map +1 -0
  79. package/dist/dom/localStorage.d.ts +80 -0
  80. package/dist/dom/localStorage.d.ts.map +1 -0
  81. package/dist/dom/localStorage.js +124 -0
  82. package/dist/dom/localStorage.js.map +1 -0
  83. package/dist/dom/matchMedia.d.ts +51 -0
  84. package/dist/dom/matchMedia.d.ts.map +1 -0
  85. package/dist/dom/matchMedia.js +120 -0
  86. package/dist/dom/matchMedia.js.map +1 -0
  87. package/dist/dom/resizeObserver.d.ts +68 -0
  88. package/dist/dom/resizeObserver.d.ts.map +1 -0
  89. package/dist/dom/resizeObserver.js +99 -0
  90. package/dist/dom/resizeObserver.js.map +1 -0
  91. package/dist/factories/category.d.ts +74 -0
  92. package/dist/factories/category.d.ts.map +1 -0
  93. package/dist/factories/category.js +99 -0
  94. package/dist/factories/category.js.map +1 -0
  95. package/dist/factories/dye.d.ts +76 -0
  96. package/dist/factories/dye.d.ts.map +1 -0
  97. package/dist/factories/dye.js +211 -0
  98. package/dist/factories/dye.js.map +1 -0
  99. package/dist/factories/index.d.ts +13 -0
  100. package/dist/factories/index.d.ts.map +1 -0
  101. package/dist/factories/index.js +14 -0
  102. package/dist/factories/index.js.map +1 -0
  103. package/dist/factories/preset.d.ts +105 -0
  104. package/dist/factories/preset.d.ts.map +1 -0
  105. package/dist/factories/preset.js +170 -0
  106. package/dist/factories/preset.js.map +1 -0
  107. package/dist/factories/user.d.ts +74 -0
  108. package/dist/factories/user.d.ts.map +1 -0
  109. package/dist/factories/user.js +115 -0
  110. package/dist/factories/user.js.map +1 -0
  111. package/dist/factories/vote.d.ts +55 -0
  112. package/dist/factories/vote.d.ts.map +1 -0
  113. package/dist/factories/vote.js +68 -0
  114. package/dist/factories/vote.js.map +1 -0
  115. package/dist/index.d.ts +17 -0
  116. package/dist/index.d.ts.map +1 -0
  117. package/dist/index.js +24 -0
  118. package/dist/index.js.map +1 -0
  119. package/dist/utils/counters.d.ts +35 -0
  120. package/dist/utils/counters.d.ts.map +1 -0
  121. package/dist/utils/counters.js +53 -0
  122. package/dist/utils/counters.js.map +1 -0
  123. package/dist/utils/crypto.d.ts +42 -0
  124. package/dist/utils/crypto.d.ts.map +1 -0
  125. package/dist/utils/crypto.js +72 -0
  126. package/dist/utils/crypto.js.map +1 -0
  127. package/dist/utils/index.d.ts +6 -0
  128. package/dist/utils/index.d.ts.map +1 -0
  129. package/dist/utils/index.js +6 -0
  130. package/dist/utils/index.js.map +1 -0
  131. package/package.json +88 -0
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Mock R2 Bucket for testing Cloudflare Workers
3
+ *
4
+ * Provides a minimal implementation of R2Bucket for testing
5
+ * image storage and asset retrieval.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * const bucket = createMockR2Bucket();
10
+ *
11
+ * // Pre-populate data
12
+ * await bucket.put('image.png', new ArrayBuffer(100));
13
+ *
14
+ * // Use in tests
15
+ * const env = { IMAGES: bucket as unknown as R2Bucket };
16
+ *
17
+ * // Check stored objects
18
+ * expect(bucket._store.has('image.png')).toBe(true);
19
+ *
20
+ * // Reset between tests
21
+ * bucket._reset();
22
+ * ```
23
+ */
24
+ /**
25
+ * R2 object metadata
26
+ */
27
+ interface R2ObjectMeta {
28
+ key: string;
29
+ size: number;
30
+ uploaded: Date;
31
+ httpEtag: string;
32
+ etag: string;
33
+ customMetadata?: Record<string, string>;
34
+ }
35
+ /**
36
+ * Stored R2 object
37
+ */
38
+ interface StoredR2Object {
39
+ body: ArrayBuffer;
40
+ meta: R2ObjectMeta;
41
+ }
42
+ /**
43
+ * Mock R2 object returned from get()
44
+ */
45
+ export interface MockR2Object {
46
+ key: string;
47
+ size: number;
48
+ uploaded: Date;
49
+ httpEtag: string;
50
+ etag: string;
51
+ customMetadata?: Record<string, string>;
52
+ arrayBuffer: () => Promise<ArrayBuffer>;
53
+ text: () => Promise<string>;
54
+ json: <T = unknown>() => Promise<T>;
55
+ blob: () => Promise<Blob>;
56
+ }
57
+ /**
58
+ * Extended mock R2 bucket with test helpers
59
+ */
60
+ export interface MockR2Bucket {
61
+ get: (key: string) => Promise<MockR2Object | null>;
62
+ put: (key: string, value: ArrayBuffer | string | ReadableStream | Blob, options?: {
63
+ customMetadata?: Record<string, string>;
64
+ }) => Promise<R2ObjectMeta>;
65
+ delete: (key: string | string[]) => Promise<void>;
66
+ list: (options?: {
67
+ prefix?: string;
68
+ limit?: number;
69
+ cursor?: string;
70
+ }) => Promise<{
71
+ objects: R2ObjectMeta[];
72
+ truncated: boolean;
73
+ cursor?: string;
74
+ }>;
75
+ head: (key: string) => Promise<R2ObjectMeta | null>;
76
+ /** Internal storage map (for assertions) */
77
+ _store: Map<string, StoredR2Object>;
78
+ /** Reset all storage */
79
+ _reset: () => void;
80
+ }
81
+ /**
82
+ * Creates a mock R2 bucket for testing
83
+ *
84
+ * @returns A mock R2 bucket that can be cast to R2Bucket
85
+ */
86
+ export declare function createMockR2Bucket(): MockR2Bucket;
87
+ export {};
88
+ //# sourceMappingURL=r2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"r2.d.ts","sourceRoot":"","sources":["../../src/cloudflare/r2.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;GAEG;AACH,UAAU,YAAY;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,IAAI,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,UAAU,cAAc;IACtB,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,YAAY,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,IAAI,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,WAAW,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;IACxC,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5B,IAAI,EAAE,CAAC,CAAC,GAAG,OAAO,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;IACpC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IACnD,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,cAAc,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IACxJ,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC;QAChF,OAAO,EAAE,YAAY,EAAE,CAAC;QACxB,SAAS,EAAE,OAAO,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAEpD,4CAA4C;IAC5C,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAEpC,wBAAwB;IACxB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CA+GjD"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Mock R2 Bucket for testing Cloudflare Workers
3
+ *
4
+ * Provides a minimal implementation of R2Bucket for testing
5
+ * image storage and asset retrieval.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * const bucket = createMockR2Bucket();
10
+ *
11
+ * // Pre-populate data
12
+ * await bucket.put('image.png', new ArrayBuffer(100));
13
+ *
14
+ * // Use in tests
15
+ * const env = { IMAGES: bucket as unknown as R2Bucket };
16
+ *
17
+ * // Check stored objects
18
+ * expect(bucket._store.has('image.png')).toBe(true);
19
+ *
20
+ * // Reset between tests
21
+ * bucket._reset();
22
+ * ```
23
+ */
24
+ /**
25
+ * Creates a mock R2 bucket for testing
26
+ *
27
+ * @returns A mock R2 bucket that can be cast to R2Bucket
28
+ */
29
+ export function createMockR2Bucket() {
30
+ const store = new Map();
31
+ const generateEtag = () => {
32
+ return Math.random().toString(36).substring(2, 15);
33
+ };
34
+ const toArrayBuffer = async (value) => {
35
+ if (value instanceof ArrayBuffer) {
36
+ return value;
37
+ }
38
+ if (typeof value === 'string') {
39
+ const encoded = new TextEncoder().encode(value);
40
+ return encoded.buffer.slice(encoded.byteOffset, encoded.byteOffset + encoded.byteLength);
41
+ }
42
+ if (value instanceof Blob) {
43
+ return value.arrayBuffer();
44
+ }
45
+ // ReadableStream
46
+ const chunks = [];
47
+ const reader = value.getReader();
48
+ let done = false;
49
+ while (!done) {
50
+ const result = await reader.read();
51
+ done = result.done;
52
+ if (result.value) {
53
+ chunks.push(result.value);
54
+ }
55
+ }
56
+ const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0);
57
+ const combined = new Uint8Array(totalLength);
58
+ let offset = 0;
59
+ for (const chunk of chunks) {
60
+ combined.set(chunk, offset);
61
+ offset += chunk.length;
62
+ }
63
+ return combined.buffer;
64
+ };
65
+ return {
66
+ get: async (key) => {
67
+ const stored = store.get(key);
68
+ if (!stored)
69
+ return null;
70
+ const { body, meta } = stored;
71
+ return {
72
+ ...meta,
73
+ arrayBuffer: async () => body.slice(0),
74
+ text: async () => new TextDecoder().decode(body),
75
+ json: async () => JSON.parse(new TextDecoder().decode(body)),
76
+ blob: async () => new Blob([body]),
77
+ };
78
+ },
79
+ put: async (key, value, options) => {
80
+ const body = await toArrayBuffer(value);
81
+ const etag = generateEtag();
82
+ const meta = {
83
+ key,
84
+ size: body.byteLength,
85
+ uploaded: new Date(),
86
+ httpEtag: `"${etag}"`,
87
+ etag,
88
+ customMetadata: options?.customMetadata,
89
+ };
90
+ store.set(key, { body, meta });
91
+ return meta;
92
+ },
93
+ delete: async (key) => {
94
+ const keys = Array.isArray(key) ? key : [key];
95
+ for (const k of keys) {
96
+ store.delete(k);
97
+ }
98
+ },
99
+ list: async (options) => {
100
+ const prefix = options?.prefix ?? '';
101
+ const limit = options?.limit ?? 1000;
102
+ const objects = [];
103
+ for (const [key, { meta }] of store.entries()) {
104
+ if (key.startsWith(prefix)) {
105
+ objects.push(meta);
106
+ if (objects.length >= limit) {
107
+ break;
108
+ }
109
+ }
110
+ }
111
+ return {
112
+ objects,
113
+ truncated: objects.length >= limit,
114
+ cursor: undefined,
115
+ };
116
+ },
117
+ head: async (key) => {
118
+ const stored = store.get(key);
119
+ return stored?.meta ?? null;
120
+ },
121
+ _store: store,
122
+ _reset: () => {
123
+ store.clear();
124
+ },
125
+ };
126
+ }
127
+ //# sourceMappingURL=r2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"r2.js","sourceRoot":"","sources":["../../src/cloudflare/r2.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Test constants
3
+ *
4
+ * Provides constants for testing including PKCE values, test secrets, etc.
5
+ */
6
+ export * from './pkce.js';
7
+ export * from './secrets.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Test constants
3
+ *
4
+ * Provides constants for testing including PKCE values, test secrets, etc.
5
+ */
6
+ export * from './pkce.js';
7
+ export * from './secrets.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * PKCE (Proof Key for Code Exchange) test constants
3
+ *
4
+ * Provides RFC 7636 compliant test values for OAuth PKCE flow testing.
5
+ *
6
+ * Note: These are format-valid test values but are NOT cryptographically
7
+ * linked (the challenge is not the SHA256 hash of the verifier).
8
+ * Use them for format validation testing, not crypto verification testing.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * import { VALID_CODE_VERIFIER, VALID_CODE_CHALLENGE } from '@xivdyetools/test-utils/constants';
13
+ *
14
+ * const params = new URLSearchParams({
15
+ * code_verifier: VALID_CODE_VERIFIER,
16
+ * code_challenge: VALID_CODE_CHALLENGE,
17
+ * code_challenge_method: 'S256',
18
+ * });
19
+ * ```
20
+ */
21
+ /**
22
+ * Valid PKCE code_verifier for testing
23
+ *
24
+ * Per RFC 7636:
25
+ * - 43-128 characters
26
+ * - Unreserved URI characters: [A-Za-z0-9-._~]
27
+ */
28
+ export declare const VALID_CODE_VERIFIER = "dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk~test123456789012345";
29
+ /**
30
+ * Valid PKCE code_challenge for testing
31
+ *
32
+ * Per RFC 7636:
33
+ * - BASE64URL(SHA256(verifier)) = 43 characters for S256 method
34
+ * - Unreserved URI characters: [A-Za-z0-9-._~]
35
+ *
36
+ * Note: This is a format-valid challenge but is NOT the actual
37
+ * SHA256 hash of VALID_CODE_VERIFIER.
38
+ */
39
+ export declare const VALID_CODE_CHALLENGE = "E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM_test12345678";
40
+ /**
41
+ * Invalid code_verifier (too short - less than 43 chars)
42
+ */
43
+ export declare const INVALID_SHORT_VERIFIER = "tooshort";
44
+ /**
45
+ * Invalid code_verifier (contains invalid characters)
46
+ */
47
+ export declare const INVALID_CHARS_VERIFIER = "invalid@verifier#with$special%chars&that!are*not+allowed";
48
+ /**
49
+ * Invalid code_challenge (too short)
50
+ */
51
+ export declare const INVALID_SHORT_CHALLENGE = "tooshort";
52
+ /**
53
+ * Minimum length for code_verifier (RFC 7636)
54
+ */
55
+ export declare const MIN_VERIFIER_LENGTH = 43;
56
+ /**
57
+ * Maximum length for code_verifier (RFC 7636)
58
+ */
59
+ export declare const MAX_VERIFIER_LENGTH = 128;
60
+ /**
61
+ * Expected length for S256 code_challenge
62
+ */
63
+ export declare const S256_CHALLENGE_LENGTH = 43;
64
+ /**
65
+ * Regex pattern for valid code_verifier characters (RFC 7636)
66
+ */
67
+ export declare const VERIFIER_PATTERN: RegExp;
68
+ /**
69
+ * Validates a code_verifier format
70
+ *
71
+ * @param verifier - The code_verifier to validate
72
+ * @returns True if format is valid
73
+ */
74
+ export declare function isValidVerifierFormat(verifier: string): boolean;
75
+ /**
76
+ * Validates a code_challenge format
77
+ *
78
+ * @param challenge - The code_challenge to validate
79
+ * @returns True if format is valid
80
+ */
81
+ export declare function isValidChallengeFormat(challenge: string): boolean;
82
+ /**
83
+ * Generates a cryptographically valid code_challenge from a verifier
84
+ *
85
+ * @param verifier - The code_verifier
86
+ * @returns Base64URL encoded SHA256 hash
87
+ */
88
+ export declare function generateCodeChallenge(verifier: string): Promise<string>;
89
+ //# sourceMappingURL=pkce.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pkce.d.ts","sourceRoot":"","sources":["../../src/constants/pkce.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,oEACmC,CAAC;AAEpE;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,6DAC2B,CAAC;AAE7D;;GAEG;AACH,eAAO,MAAM,sBAAsB,aAAa,CAAC;AAEjD;;GAEG;AACH,eAAO,MAAM,sBAAsB,6DACyB,CAAC;AAE7D;;GAEG;AACH,eAAO,MAAM,uBAAuB,aAAa,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC;;GAEG;AACH,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC;;GAEG;AACH,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC;;GAEG;AACH,eAAO,MAAM,gBAAgB,QAAwB,CAAC;AAEtD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAI/D;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAIjE;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ7E"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * PKCE (Proof Key for Code Exchange) test constants
3
+ *
4
+ * Provides RFC 7636 compliant test values for OAuth PKCE flow testing.
5
+ *
6
+ * Note: These are format-valid test values but are NOT cryptographically
7
+ * linked (the challenge is not the SHA256 hash of the verifier).
8
+ * Use them for format validation testing, not crypto verification testing.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * import { VALID_CODE_VERIFIER, VALID_CODE_CHALLENGE } from '@xivdyetools/test-utils/constants';
13
+ *
14
+ * const params = new URLSearchParams({
15
+ * code_verifier: VALID_CODE_VERIFIER,
16
+ * code_challenge: VALID_CODE_CHALLENGE,
17
+ * code_challenge_method: 'S256',
18
+ * });
19
+ * ```
20
+ */
21
+ /**
22
+ * Valid PKCE code_verifier for testing
23
+ *
24
+ * Per RFC 7636:
25
+ * - 43-128 characters
26
+ * - Unreserved URI characters: [A-Za-z0-9-._~]
27
+ */
28
+ export const VALID_CODE_VERIFIER = 'dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk~test123456789012345';
29
+ /**
30
+ * Valid PKCE code_challenge for testing
31
+ *
32
+ * Per RFC 7636:
33
+ * - BASE64URL(SHA256(verifier)) = 43 characters for S256 method
34
+ * - Unreserved URI characters: [A-Za-z0-9-._~]
35
+ *
36
+ * Note: This is a format-valid challenge but is NOT the actual
37
+ * SHA256 hash of VALID_CODE_VERIFIER.
38
+ */
39
+ export const VALID_CODE_CHALLENGE = 'E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM_test12345678';
40
+ /**
41
+ * Invalid code_verifier (too short - less than 43 chars)
42
+ */
43
+ export const INVALID_SHORT_VERIFIER = 'tooshort';
44
+ /**
45
+ * Invalid code_verifier (contains invalid characters)
46
+ */
47
+ export const INVALID_CHARS_VERIFIER = 'invalid@verifier#with$special%chars&that!are*not+allowed';
48
+ /**
49
+ * Invalid code_challenge (too short)
50
+ */
51
+ export const INVALID_SHORT_CHALLENGE = 'tooshort';
52
+ /**
53
+ * Minimum length for code_verifier (RFC 7636)
54
+ */
55
+ export const MIN_VERIFIER_LENGTH = 43;
56
+ /**
57
+ * Maximum length for code_verifier (RFC 7636)
58
+ */
59
+ export const MAX_VERIFIER_LENGTH = 128;
60
+ /**
61
+ * Expected length for S256 code_challenge
62
+ */
63
+ export const S256_CHALLENGE_LENGTH = 43;
64
+ /**
65
+ * Regex pattern for valid code_verifier characters (RFC 7636)
66
+ */
67
+ export const VERIFIER_PATTERN = /^[A-Za-z0-9\-._~]+$/;
68
+ /**
69
+ * Validates a code_verifier format
70
+ *
71
+ * @param verifier - The code_verifier to validate
72
+ * @returns True if format is valid
73
+ */
74
+ export function isValidVerifierFormat(verifier) {
75
+ if (verifier.length < MIN_VERIFIER_LENGTH)
76
+ return false;
77
+ if (verifier.length > MAX_VERIFIER_LENGTH)
78
+ return false;
79
+ return VERIFIER_PATTERN.test(verifier);
80
+ }
81
+ /**
82
+ * Validates a code_challenge format
83
+ *
84
+ * @param challenge - The code_challenge to validate
85
+ * @returns True if format is valid
86
+ */
87
+ export function isValidChallengeFormat(challenge) {
88
+ // S256 challenges should be exactly 43 characters (base64url encoded SHA256)
89
+ if (challenge.length < S256_CHALLENGE_LENGTH)
90
+ return false;
91
+ return VERIFIER_PATTERN.test(challenge);
92
+ }
93
+ /**
94
+ * Generates a cryptographically valid code_challenge from a verifier
95
+ *
96
+ * @param verifier - The code_verifier
97
+ * @returns Base64URL encoded SHA256 hash
98
+ */
99
+ export async function generateCodeChallenge(verifier) {
100
+ const encoder = new TextEncoder();
101
+ const data = encoder.encode(verifier);
102
+ const digest = await crypto.subtle.digest('SHA-256', data);
103
+ // Base64URL encode
104
+ const base64 = btoa(String.fromCharCode(...new Uint8Array(digest)));
105
+ return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
106
+ }
107
+ //# sourceMappingURL=pkce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pkce.js","sourceRoot":"","sources":["../../src/constants/pkce.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAC9B,iEAAiE,CAAC;AAEpE;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAC/B,0DAA0D,CAAC;AAE7D;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GACjC,0DAA0D,CAAC;AAE7D;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAU,CAAC;AAElD;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAEtC;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEvC;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAExC;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,IAAI,QAAQ,CAAC,MAAM,GAAG,mBAAmB;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,QAAQ,CAAC,MAAM,GAAG,mBAAmB;QAAE,OAAO,KAAK,CAAC;IACxD,OAAO,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAiB;IACtD,6EAA6E;IAC7E,IAAI,SAAS,CAAC,MAAM,GAAG,qBAAqB;QAAE,OAAO,KAAK,CAAC;IAC3D,OAAO,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,QAAgB;IAC1D,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAE3D,mBAAmB;IACnB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACpE,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC3E,CAAC"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Test secret constants
3
+ *
4
+ * Provides default secret values for testing authentication flows.
5
+ *
6
+ * WARNING: These are for TESTING ONLY. Never use these values in production.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { TEST_JWT_SECRET, TEST_BOT_SECRET } from '@xivdyetools/test-utils/constants';
11
+ *
12
+ * const env = {
13
+ * JWT_SECRET: TEST_JWT_SECRET,
14
+ * BOT_API_SECRET: TEST_BOT_SECRET,
15
+ * };
16
+ * ```
17
+ */
18
+ /**
19
+ * Default JWT secret for testing
20
+ *
21
+ * Use this to create test JWTs that can be verified by test environments.
22
+ */
23
+ export declare const TEST_JWT_SECRET = "test-jwt-secret-key-for-testing-32chars";
24
+ /**
25
+ * Default bot API secret for testing
26
+ */
27
+ export declare const TEST_BOT_SECRET = "test-bot-secret";
28
+ /**
29
+ * Default Discord client ID for testing
30
+ */
31
+ export declare const TEST_DISCORD_CLIENT_ID = "test-discord-client-id";
32
+ /**
33
+ * Default Discord client secret for testing
34
+ */
35
+ export declare const TEST_DISCORD_CLIENT_SECRET = "test-discord-client-secret";
36
+ /**
37
+ * Default XIVAuth client ID for testing
38
+ */
39
+ export declare const TEST_XIVAUTH_CLIENT_ID = "test-xivauth-client-id";
40
+ /**
41
+ * Default moderator Discord IDs for testing
42
+ */
43
+ export declare const TEST_MODERATOR_IDS = "123456789,987654321";
44
+ /**
45
+ * Default test user Discord ID
46
+ */
47
+ export declare const TEST_USER_DISCORD_ID = "123456789";
48
+ /**
49
+ * Default test moderator Discord ID
50
+ */
51
+ export declare const TEST_MODERATOR_DISCORD_ID = "987654321";
52
+ /**
53
+ * Default frontend URL for testing
54
+ */
55
+ export declare const TEST_FRONTEND_URL = "http://localhost:5173";
56
+ /**
57
+ * Default worker URL for testing
58
+ */
59
+ export declare const TEST_WORKER_URL = "http://localhost:8788";
60
+ /**
61
+ * Default CORS origin for testing
62
+ */
63
+ export declare const TEST_CORS_ORIGIN = "http://localhost:3000";
64
+ /**
65
+ * JWT expiry in seconds for testing (1 hour)
66
+ */
67
+ export declare const TEST_JWT_EXPIRY = 3600;
68
+ /**
69
+ * JWT expiry string for testing
70
+ */
71
+ export declare const TEST_JWT_EXPIRY_STRING = "3600";
72
+ //# sourceMappingURL=secrets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/constants/secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;GAIG;AACH,eAAO,MAAM,eAAe,4CAA4C,CAAC;AAEzE;;GAEG;AACH,eAAO,MAAM,eAAe,oBAAoB,CAAC;AAIjD;;GAEG;AACH,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAE/D;;GAEG;AACH,eAAO,MAAM,0BAA0B,+BAA+B,CAAC;AAEvE;;GAEG;AACH,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAE/D;;GAEG;AACH,eAAO,MAAM,kBAAkB,wBAAwB,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,oBAAoB,cAAc,CAAC;AAEhD;;GAEG;AACH,eAAO,MAAM,yBAAyB,cAAc,CAAC;AAErD;;GAEG;AACH,eAAO,MAAM,iBAAiB,0BAA0B,CAAC;AAEzD;;GAEG;AACH,eAAO,MAAM,eAAe,0BAA0B,CAAC;AAEvD;;GAEG;AACH,eAAO,MAAM,gBAAgB,0BAA0B,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC;;GAEG;AACH,eAAO,MAAM,sBAAsB,SAAS,CAAC"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Test secret constants
3
+ *
4
+ * Provides default secret values for testing authentication flows.
5
+ *
6
+ * WARNING: These are for TESTING ONLY. Never use these values in production.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { TEST_JWT_SECRET, TEST_BOT_SECRET } from '@xivdyetools/test-utils/constants';
11
+ *
12
+ * const env = {
13
+ * JWT_SECRET: TEST_JWT_SECRET,
14
+ * BOT_API_SECRET: TEST_BOT_SECRET,
15
+ * };
16
+ * ```
17
+ */
18
+ /**
19
+ * Default JWT secret for testing
20
+ *
21
+ * Use this to create test JWTs that can be verified by test environments.
22
+ */
23
+ export const TEST_JWT_SECRET = 'test-jwt-secret-key-for-testing-32chars';
24
+ /**
25
+ * Default bot API secret for testing
26
+ */
27
+ export const TEST_BOT_SECRET = 'test-bot-secret';
28
+ // Note: TEST_SIGNING_SECRET is available from '@xivdyetools/test-utils/auth'
29
+ /**
30
+ * Default Discord client ID for testing
31
+ */
32
+ export const TEST_DISCORD_CLIENT_ID = 'test-discord-client-id';
33
+ /**
34
+ * Default Discord client secret for testing
35
+ */
36
+ export const TEST_DISCORD_CLIENT_SECRET = 'test-discord-client-secret';
37
+ /**
38
+ * Default XIVAuth client ID for testing
39
+ */
40
+ export const TEST_XIVAUTH_CLIENT_ID = 'test-xivauth-client-id';
41
+ /**
42
+ * Default moderator Discord IDs for testing
43
+ */
44
+ export const TEST_MODERATOR_IDS = '123456789,987654321';
45
+ /**
46
+ * Default test user Discord ID
47
+ */
48
+ export const TEST_USER_DISCORD_ID = '123456789';
49
+ /**
50
+ * Default test moderator Discord ID
51
+ */
52
+ export const TEST_MODERATOR_DISCORD_ID = '987654321';
53
+ /**
54
+ * Default frontend URL for testing
55
+ */
56
+ export const TEST_FRONTEND_URL = 'http://localhost:5173';
57
+ /**
58
+ * Default worker URL for testing
59
+ */
60
+ export const TEST_WORKER_URL = 'http://localhost:8788';
61
+ /**
62
+ * Default CORS origin for testing
63
+ */
64
+ export const TEST_CORS_ORIGIN = 'http://localhost:3000';
65
+ /**
66
+ * JWT expiry in seconds for testing (1 hour)
67
+ */
68
+ export const TEST_JWT_EXPIRY = 3600;
69
+ /**
70
+ * JWT expiry string for testing
71
+ */
72
+ export const TEST_JWT_EXPIRY_STRING = '3600';
73
+ //# sourceMappingURL=secrets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/constants/secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,yCAAyC,CAAC;AAEzE;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAEjD,6EAA6E;AAE7E;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,wBAAwB,CAAC;AAE/D;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,4BAA4B,CAAC;AAEvE;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,wBAAwB,CAAC;AAE/D;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AAExD;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,WAAW,CAAC;AAEhD;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,WAAW,CAAC;AAErD;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAEzD;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAEvD;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AAExD;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AAEpC;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC"}