@thewhateverapp/platform 0.0.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.
Files changed (122) hide show
  1. package/README.md +223 -0
  2. package/dist/ai/mock.d.ts +14 -0
  3. package/dist/ai/mock.d.ts.map +1 -0
  4. package/dist/ai/mock.js +38 -0
  5. package/dist/ai/mock.js.map +1 -0
  6. package/dist/ai/production.d.ts +17 -0
  7. package/dist/ai/production.d.ts.map +1 -0
  8. package/dist/ai/production.js +41 -0
  9. package/dist/ai/production.js.map +1 -0
  10. package/dist/analytics/client.d.ts +21 -0
  11. package/dist/analytics/client.d.ts.map +1 -0
  12. package/dist/analytics/client.js +60 -0
  13. package/dist/analytics/client.js.map +1 -0
  14. package/dist/assets/client.d.ts +23 -0
  15. package/dist/assets/client.d.ts.map +1 -0
  16. package/dist/assets/client.js +105 -0
  17. package/dist/assets/client.js.map +1 -0
  18. package/dist/auth/client.d.ts +20 -0
  19. package/dist/auth/client.d.ts.map +1 -0
  20. package/dist/auth/client.js +53 -0
  21. package/dist/auth/client.js.map +1 -0
  22. package/dist/auth/types.d.ts +50 -0
  23. package/dist/auth/types.d.ts.map +1 -0
  24. package/dist/auth/types.js +5 -0
  25. package/dist/auth/types.js.map +1 -0
  26. package/dist/db/mock.d.ts +43 -0
  27. package/dist/db/mock.d.ts.map +1 -0
  28. package/dist/db/mock.js +343 -0
  29. package/dist/db/mock.js.map +1 -0
  30. package/dist/db/production.d.ts +16 -0
  31. package/dist/db/production.d.ts.map +1 -0
  32. package/dist/db/production.js +77 -0
  33. package/dist/db/production.js.map +1 -0
  34. package/dist/edge/database/index.d.ts +46 -0
  35. package/dist/edge/database/index.d.ts.map +1 -0
  36. package/dist/edge/database/index.js +82 -0
  37. package/dist/edge/database/index.js.map +1 -0
  38. package/dist/edge/database/providers/flex-db.d.ts +22 -0
  39. package/dist/edge/database/providers/flex-db.d.ts.map +1 -0
  40. package/dist/edge/database/providers/flex-db.js +351 -0
  41. package/dist/edge/database/providers/flex-db.js.map +1 -0
  42. package/dist/edge/database/providers/index.d.ts +7 -0
  43. package/dist/edge/database/providers/index.d.ts.map +1 -0
  44. package/dist/edge/database/providers/index.js +11 -0
  45. package/dist/edge/database/providers/index.js.map +1 -0
  46. package/dist/edge/database/types.d.ts +148 -0
  47. package/dist/edge/database/types.d.ts.map +1 -0
  48. package/dist/edge/database/types.js +8 -0
  49. package/dist/edge/database/types.js.map +1 -0
  50. package/dist/edge/index.d.ts +12 -0
  51. package/dist/edge/index.d.ts.map +1 -0
  52. package/dist/edge/index.js +12 -0
  53. package/dist/edge/index.js.map +1 -0
  54. package/dist/edge/kv/index.d.ts +50 -0
  55. package/dist/edge/kv/index.d.ts.map +1 -0
  56. package/dist/edge/kv/index.js +83 -0
  57. package/dist/edge/kv/index.js.map +1 -0
  58. package/dist/edge/kv/providers/cloudflare-kv.d.ts +31 -0
  59. package/dist/edge/kv/providers/cloudflare-kv.d.ts.map +1 -0
  60. package/dist/edge/kv/providers/cloudflare-kv.js +115 -0
  61. package/dist/edge/kv/providers/cloudflare-kv.js.map +1 -0
  62. package/dist/edge/kv/providers/index.d.ts +7 -0
  63. package/dist/edge/kv/providers/index.d.ts.map +1 -0
  64. package/dist/edge/kv/providers/index.js +10 -0
  65. package/dist/edge/kv/providers/index.js.map +1 -0
  66. package/dist/edge/kv/types.d.ts +155 -0
  67. package/dist/edge/kv/types.d.ts.map +1 -0
  68. package/dist/edge/kv/types.js +8 -0
  69. package/dist/edge/kv/types.js.map +1 -0
  70. package/dist/edge/storage/index.d.ts +50 -0
  71. package/dist/edge/storage/index.d.ts.map +1 -0
  72. package/dist/edge/storage/index.js +83 -0
  73. package/dist/edge/storage/index.js.map +1 -0
  74. package/dist/edge/storage/providers/cloudflare-r2.d.ts +28 -0
  75. package/dist/edge/storage/providers/cloudflare-r2.d.ts.map +1 -0
  76. package/dist/edge/storage/providers/cloudflare-r2.js +178 -0
  77. package/dist/edge/storage/providers/cloudflare-r2.js.map +1 -0
  78. package/dist/edge/storage/providers/index.d.ts +7 -0
  79. package/dist/edge/storage/providers/index.d.ts.map +1 -0
  80. package/dist/edge/storage/providers/index.js +10 -0
  81. package/dist/edge/storage/providers/index.js.map +1 -0
  82. package/dist/edge/storage/types.d.ts +305 -0
  83. package/dist/edge/storage/types.d.ts.map +1 -0
  84. package/dist/edge/storage/types.js +8 -0
  85. package/dist/edge/storage/types.js.map +1 -0
  86. package/dist/identity/client.d.ts +20 -0
  87. package/dist/identity/client.d.ts.map +1 -0
  88. package/dist/identity/client.js +40 -0
  89. package/dist/identity/client.js.map +1 -0
  90. package/dist/index.d.ts +21 -0
  91. package/dist/index.d.ts.map +1 -0
  92. package/dist/index.js +25 -0
  93. package/dist/index.js.map +1 -0
  94. package/dist/notifications/client.d.ts +20 -0
  95. package/dist/notifications/client.d.ts.map +1 -0
  96. package/dist/notifications/client.js +38 -0
  97. package/dist/notifications/client.js.map +1 -0
  98. package/dist/payments/client.d.ts +21 -0
  99. package/dist/payments/client.d.ts.map +1 -0
  100. package/dist/payments/client.js +52 -0
  101. package/dist/payments/client.js.map +1 -0
  102. package/dist/platform.d.ts +65 -0
  103. package/dist/platform.d.ts.map +1 -0
  104. package/dist/platform.js +254 -0
  105. package/dist/platform.js.map +1 -0
  106. package/dist/social/client.d.ts +29 -0
  107. package/dist/social/client.d.ts.map +1 -0
  108. package/dist/social/client.js +83 -0
  109. package/dist/social/client.js.map +1 -0
  110. package/dist/storage/mock.d.ts +27 -0
  111. package/dist/storage/mock.d.ts.map +1 -0
  112. package/dist/storage/mock.js +102 -0
  113. package/dist/storage/mock.js.map +1 -0
  114. package/dist/storage/production.d.ts +28 -0
  115. package/dist/storage/production.d.ts.map +1 -0
  116. package/dist/storage/production.js +75 -0
  117. package/dist/storage/production.js.map +1 -0
  118. package/dist/types.d.ts +399 -0
  119. package/dist/types.d.ts.map +1 -0
  120. package/dist/types.js +5 -0
  121. package/dist/types.js.map +1 -0
  122. package/package.json +51 -0
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Database abstraction types for edge runtime
3
+ *
4
+ * Provides a MongoDB-like interface that can be implemented by various providers
5
+ * (FlexDB/D1, Turso, MongoDB Atlas, etc.) allowing seamless upgrades as apps scale.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/edge/database/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Edge runtime exports
3
+ *
4
+ * Services and utilities designed specifically for Cloudflare Workers / Pages edge runtime
5
+ */
6
+ export { getDatabase, createDatabase } from './database';
7
+ export type * from './database/types';
8
+ export { getKV, createKV } from './kv';
9
+ export type * from './kv/types';
10
+ export { getStorage, createStorage } from './storage';
11
+ export type * from './storage/types';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/edge/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACzD,mBAAmB,kBAAkB,CAAC;AAGtC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AACvC,mBAAmB,YAAY,CAAC;AAGhC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACtD,mBAAmB,iBAAiB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Edge runtime exports
3
+ *
4
+ * Services and utilities designed specifically for Cloudflare Workers / Pages edge runtime
5
+ */
6
+ // Database exports
7
+ export { getDatabase, createDatabase } from './database';
8
+ // KV (Key-Value) exports
9
+ export { getKV, createKV } from './kv';
10
+ // Storage (Object Storage / R2) exports
11
+ export { getStorage, createStorage } from './storage';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/edge/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,mBAAmB;AACnB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGzD,yBAAyB;AACzB,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGvC,wCAAwC;AACxC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Edge KV (Key-Value) Storage API
3
+ *
4
+ * Provides a simple key-value store interface for user-generated apps.
5
+ * Automatically selects the appropriate provider based on environment configuration.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { getKV } from '@thewhateverapp/platform/edge';
10
+ *
11
+ * export async function GET(req: NextRequest) {
12
+ * const kv = await getKV(req);
13
+ *
14
+ * // Store data
15
+ * await kv.set('user:123', { name: 'Alice', score: 100 });
16
+ *
17
+ * // Retrieve data
18
+ * const user = await kv.get('user:123', 'json');
19
+ *
20
+ * return NextResponse.json(user);
21
+ * }
22
+ * ```
23
+ */
24
+ import type { KVProvider, CloudflareKVEnv, KVRequest } from './types';
25
+ export type * from './types';
26
+ /**
27
+ * Get a KV instance for the current request
28
+ *
29
+ * Automatically selects the appropriate provider based on environment:
30
+ * - 'cloudflare' (default): Cloudflare KV
31
+ * - 'upstash': Upstash Redis
32
+ * - 'vercel': Vercel KV
33
+ *
34
+ * @param req - NextRequest or object with env property
35
+ * @returns KV provider instance
36
+ */
37
+ export declare function getKV(req: KVRequest | {
38
+ env: CloudflareKVEnv;
39
+ }): Promise<KVProvider>;
40
+ /**
41
+ * Create a KV instance directly (for advanced usage)
42
+ *
43
+ * @example
44
+ * ```typescript
45
+ * const kv = createKV({ KV: env.KV });
46
+ * await kv.set('key', 'value');
47
+ * ```
48
+ */
49
+ export declare function createKV(env: CloudflareKVEnv): KVProvider;
50
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/edge/kv/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAItE,mBAAmB,SAAS,CAAC;AAE7B;;;;;;;;;;GAUG;AACH,wBAAsB,KAAK,CAAC,GAAG,EAAE,SAAS,GAAG;IAAE,GAAG,EAAE,eAAe,CAAA;CAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAqC1F;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,eAAe,GAAG,UAAU,CAezD"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Edge KV (Key-Value) Storage API
3
+ *
4
+ * Provides a simple key-value store interface for user-generated apps.
5
+ * Automatically selects the appropriate provider based on environment configuration.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { getKV } from '@thewhateverapp/platform/edge';
10
+ *
11
+ * export async function GET(req: NextRequest) {
12
+ * const kv = await getKV(req);
13
+ *
14
+ * // Store data
15
+ * await kv.set('user:123', { name: 'Alice', score: 100 });
16
+ *
17
+ * // Retrieve data
18
+ * const user = await kv.get('user:123', 'json');
19
+ *
20
+ * return NextResponse.json(user);
21
+ * }
22
+ * ```
23
+ */
24
+ import { CloudflareKV } from './providers';
25
+ /**
26
+ * Get a KV instance for the current request
27
+ *
28
+ * Automatically selects the appropriate provider based on environment:
29
+ * - 'cloudflare' (default): Cloudflare KV
30
+ * - 'upstash': Upstash Redis
31
+ * - 'vercel': Vercel KV
32
+ *
33
+ * @param req - NextRequest or object with env property
34
+ * @returns KV provider instance
35
+ */
36
+ export async function getKV(req) {
37
+ const env = 'env' in req ? req.env : req.env;
38
+ if (!env) {
39
+ throw new Error('No environment found in request. Ensure you are running in edge runtime.');
40
+ }
41
+ // Check for KV binding
42
+ if (!env.KV) {
43
+ throw new Error('No KV namespace binding found. Add a KV namespace binding named "KV" to your wrangler.jsonc');
44
+ }
45
+ // Get provider from environment (defaults to 'cloudflare')
46
+ const provider = env.KV_PROVIDER || 'cloudflare';
47
+ switch (provider) {
48
+ case 'cloudflare':
49
+ return new CloudflareKV(env.KV);
50
+ case 'upstash':
51
+ // Future: Upstash Redis implementation
52
+ throw new Error('Upstash KV provider not yet implemented. Use KV_PROVIDER=cloudflare or remove KV_PROVIDER.');
53
+ case 'vercel':
54
+ // Future: Vercel KV implementation
55
+ throw new Error('Vercel KV provider not yet implemented. Use KV_PROVIDER=cloudflare or remove KV_PROVIDER.');
56
+ default:
57
+ console.warn(`Unknown KV_PROVIDER: ${provider}. Falling back to Cloudflare KV.`);
58
+ return new CloudflareKV(env.KV);
59
+ }
60
+ }
61
+ /**
62
+ * Create a KV instance directly (for advanced usage)
63
+ *
64
+ * @example
65
+ * ```typescript
66
+ * const kv = createKV({ KV: env.KV });
67
+ * await kv.set('key', 'value');
68
+ * ```
69
+ */
70
+ export function createKV(env) {
71
+ if (!env.KV) {
72
+ throw new Error('No KV namespace binding found.');
73
+ }
74
+ const provider = env.KV_PROVIDER || 'cloudflare';
75
+ switch (provider) {
76
+ case 'cloudflare':
77
+ return new CloudflareKV(env.KV);
78
+ default:
79
+ console.warn(`Unknown KV_PROVIDER: ${provider}. Falling back to Cloudflare KV.`);
80
+ return new CloudflareKV(env.KV);
81
+ }
82
+ }
83
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/edge/kv/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAK3C;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,GAAyC;IACnE,MAAM,GAAG,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,GAAW,CAAC,GAAG,CAAC;IAEtD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAC9F,CAAC;IAED,uBAAuB;IACvB,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,6FAA6F,CAC9F,CAAC;IACJ,CAAC;IAED,2DAA2D;IAC3D,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,IAAI,YAAY,CAAC;IAEjD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,YAAY;YACf,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAElC,KAAK,SAAS;YACZ,uCAAuC;YACvC,MAAM,IAAI,KAAK,CACb,4FAA4F,CAC7F,CAAC;QAEJ,KAAK,QAAQ;YACX,mCAAmC;YACnC,MAAM,IAAI,KAAK,CACb,2FAA2F,CAC5F,CAAC;QAEJ;YACE,OAAO,CAAC,IAAI,CAAC,wBAAwB,QAAQ,kCAAkC,CAAC,CAAC;YACjF,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAoB;IAC3C,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,IAAI,YAAY,CAAC;IAEjD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,YAAY;YACf,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAElC;YACE,OAAO,CAAC,IAAI,CAAC,wBAAwB,QAAQ,kCAAkC,CAAC,CAAC;YACjF,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;AACH,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Cloudflare KV provider implementation
3
+ *
4
+ * Direct wrapper around Cloudflare KV with consistent API
5
+ */
6
+ import type { KVProvider, KVValue, KVValueType, KVSetOptions, KVListOptions, KVListResult, KVMetadata } from '../types';
7
+ /**
8
+ * Cloudflare KV implementation
9
+ */
10
+ export declare class CloudflareKV implements KVProvider {
11
+ private kv;
12
+ constructor(kv: KVNamespace);
13
+ get<T = string>(key: string, type?: KVValueType): Promise<T | null>;
14
+ set(key: string, value: KVValue, options?: KVSetOptions): Promise<void>;
15
+ delete(key: string): Promise<void>;
16
+ deleteMany(keys: string[]): Promise<void>;
17
+ has(key: string): Promise<boolean>;
18
+ list(options?: KVListOptions): Promise<KVListResult>;
19
+ getMetadata(key: string): Promise<KVMetadata | null>;
20
+ /**
21
+ * Increment a numeric value atomically
22
+ * Note: KV doesn't support atomic operations, so this is best-effort
23
+ */
24
+ increment(key: string, amount?: number): Promise<number>;
25
+ /**
26
+ * Decrement a numeric value atomically
27
+ * Note: KV doesn't support atomic operations, so this is best-effort
28
+ */
29
+ decrement(key: string, amount?: number): Promise<number>;
30
+ }
31
+ //# sourceMappingURL=cloudflare-kv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare-kv.d.ts","sourceRoot":"","sources":["../../../../src/edge/kv/providers/cloudflare-kv.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,OAAO,EACP,WAAW,EACX,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,UAAU,EACX,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,qBAAa,YAAa,YAAW,UAAU;IACjC,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,WAAW;IAE7B,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,WAAoB,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAmB3E,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BvE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKlC,IAAI,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA4BpD,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAY1D;;;OAGG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAQjE;;;OAGG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC;CAGlE"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Cloudflare KV provider implementation
3
+ *
4
+ * Direct wrapper around Cloudflare KV with consistent API
5
+ */
6
+ /**
7
+ * Cloudflare KV implementation
8
+ */
9
+ export class CloudflareKV {
10
+ kv;
11
+ constructor(kv) {
12
+ this.kv = kv;
13
+ }
14
+ async get(key, type = 'text') {
15
+ switch (type) {
16
+ case 'text':
17
+ return (await this.kv.get(key, 'text'));
18
+ case 'json':
19
+ return (await this.kv.get(key, 'json'));
20
+ case 'arrayBuffer':
21
+ return (await this.kv.get(key, 'arrayBuffer'));
22
+ case 'stream':
23
+ return (await this.kv.get(key, 'stream'));
24
+ default:
25
+ return (await this.kv.get(key, 'text'));
26
+ }
27
+ }
28
+ async set(key, value, options) {
29
+ const kvOptions = {};
30
+ if (options?.ttl) {
31
+ kvOptions.expirationTtl = options.ttl;
32
+ }
33
+ if (options?.expirationTtl) {
34
+ kvOptions.expiration = options.expirationTtl;
35
+ }
36
+ if (options?.metadata) {
37
+ kvOptions.metadata = options.metadata;
38
+ }
39
+ // Handle different value types
40
+ if (typeof value === 'string') {
41
+ await this.kv.put(key, value, kvOptions);
42
+ }
43
+ else if (value instanceof ReadableStream) {
44
+ await this.kv.put(key, value, kvOptions);
45
+ }
46
+ else if (value instanceof ArrayBuffer) {
47
+ await this.kv.put(key, value, kvOptions);
48
+ }
49
+ else {
50
+ // Object - serialize to JSON
51
+ await this.kv.put(key, JSON.stringify(value), kvOptions);
52
+ }
53
+ }
54
+ async delete(key) {
55
+ await this.kv.delete(key);
56
+ }
57
+ async deleteMany(keys) {
58
+ // Cloudflare KV doesn't have batch delete, so delete one by one
59
+ await Promise.all(keys.map((key) => this.kv.delete(key)));
60
+ }
61
+ async has(key) {
62
+ const value = await this.kv.get(key, 'text');
63
+ return value !== null;
64
+ }
65
+ async list(options) {
66
+ const listOptions = {};
67
+ if (options?.prefix) {
68
+ listOptions.prefix = options.prefix;
69
+ }
70
+ if (options?.limit) {
71
+ listOptions.limit = options.limit;
72
+ }
73
+ if (options?.cursor) {
74
+ listOptions.cursor = options.cursor;
75
+ }
76
+ const result = await this.kv.list(listOptions);
77
+ return {
78
+ keys: result.keys.map((key) => ({
79
+ name: key.name,
80
+ expiration: key.expiration,
81
+ metadata: key.metadata,
82
+ })),
83
+ complete: result.list_complete,
84
+ cursor: !result.list_complete && result.keys.length > 0 ? undefined : undefined,
85
+ };
86
+ }
87
+ async getMetadata(key) {
88
+ const result = await this.kv.getWithMetadata(key, 'text');
89
+ if (result.value === null) {
90
+ return null;
91
+ }
92
+ return {
93
+ metadata: result.metadata,
94
+ };
95
+ }
96
+ /**
97
+ * Increment a numeric value atomically
98
+ * Note: KV doesn't support atomic operations, so this is best-effort
99
+ */
100
+ async increment(key, amount = 1) {
101
+ const current = await this.get(key, 'text');
102
+ const currentValue = current ? parseInt(current, 10) : 0;
103
+ const newValue = currentValue + amount;
104
+ await this.set(key, String(newValue));
105
+ return newValue;
106
+ }
107
+ /**
108
+ * Decrement a numeric value atomically
109
+ * Note: KV doesn't support atomic operations, so this is best-effort
110
+ */
111
+ async decrement(key, amount = 1) {
112
+ return this.increment(key, -amount);
113
+ }
114
+ }
115
+ //# sourceMappingURL=cloudflare-kv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare-kv.js","sourceRoot":"","sources":["../../../../src/edge/kv/providers/cloudflare-kv.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * KV provider registry
3
+ *
4
+ * Export all available KV providers
5
+ */
6
+ export { CloudflareKV } from './cloudflare-kv';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/edge/kv/providers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * KV provider registry
3
+ *
4
+ * Export all available KV providers
5
+ */
6
+ export { CloudflareKV } from './cloudflare-kv';
7
+ // Future providers:
8
+ // export { UpstashKV } from './upstash-kv';
9
+ // export { VercelKV } from './vercel-kv';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/edge/kv/providers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,oBAAoB;AACpB,4CAA4C;AAC5C,0CAA0C"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * KV (Key-Value) storage abstraction types for edge runtime
3
+ *
4
+ * Provides a simple key-value store interface that can be implemented by various providers
5
+ * (Cloudflare KV, Upstash Redis, Vercel KV, etc.) allowing seamless upgrades as apps scale.
6
+ */
7
+ /**
8
+ * Main KV provider interface
9
+ */
10
+ export interface KVProvider {
11
+ /**
12
+ * Get a value by key
13
+ * @param key - The key to retrieve
14
+ * @param type - Optional type hint ('text', 'json', 'arrayBuffer', 'stream')
15
+ */
16
+ get<T = string>(key: string, type?: KVValueType): Promise<T | null>;
17
+ /**
18
+ * Set a value by key
19
+ * @param key - The key to set
20
+ * @param value - The value to store
21
+ * @param options - Optional storage options (TTL, metadata)
22
+ */
23
+ set(key: string, value: KVValue, options?: KVSetOptions): Promise<void>;
24
+ /**
25
+ * Delete a value by key
26
+ * @param key - The key to delete
27
+ */
28
+ delete(key: string): Promise<void>;
29
+ /**
30
+ * Delete multiple values by keys
31
+ * @param keys - Array of keys to delete
32
+ */
33
+ deleteMany(keys: string[]): Promise<void>;
34
+ /**
35
+ * Check if a key exists
36
+ * @param key - The key to check
37
+ */
38
+ has(key: string): Promise<boolean>;
39
+ /**
40
+ * List keys matching a prefix
41
+ * @param options - List options (prefix, limit, cursor)
42
+ */
43
+ list(options?: KVListOptions): Promise<KVListResult>;
44
+ /**
45
+ * Get metadata for a key without retrieving the value
46
+ * @param key - The key to get metadata for
47
+ */
48
+ getMetadata(key: string): Promise<KVMetadata | null>;
49
+ /**
50
+ * Increment a numeric value atomically
51
+ * @param key - The key to increment
52
+ * @param amount - Amount to increment by (default: 1)
53
+ */
54
+ increment?(key: string, amount?: number): Promise<number>;
55
+ /**
56
+ * Decrement a numeric value atomically
57
+ * @param key - The key to decrement
58
+ * @param amount - Amount to decrement by (default: 1)
59
+ */
60
+ decrement?(key: string, amount?: number): Promise<number>;
61
+ }
62
+ /**
63
+ * Value types supported by KV
64
+ */
65
+ export type KVValueType = 'text' | 'json' | 'arrayBuffer' | 'stream';
66
+ /**
67
+ * Values that can be stored in KV
68
+ */
69
+ export type KVValue = string | ReadableStream | ArrayBuffer | object;
70
+ /**
71
+ * Options for setting values
72
+ */
73
+ export interface KVSetOptions {
74
+ /**
75
+ * Time-to-live in seconds (0 = never expire)
76
+ */
77
+ ttl?: number;
78
+ /**
79
+ * Expiration timestamp (Unix seconds)
80
+ */
81
+ expirationTtl?: number;
82
+ /**
83
+ * Metadata to attach to the key-value pair
84
+ */
85
+ metadata?: Record<string, any>;
86
+ }
87
+ /**
88
+ * Options for listing keys
89
+ */
90
+ export interface KVListOptions {
91
+ /**
92
+ * Filter keys by prefix
93
+ */
94
+ prefix?: string;
95
+ /**
96
+ * Maximum number of keys to return
97
+ */
98
+ limit?: number;
99
+ /**
100
+ * Cursor for pagination
101
+ */
102
+ cursor?: string;
103
+ }
104
+ /**
105
+ * Result from listing keys
106
+ */
107
+ export interface KVListResult {
108
+ /**
109
+ * Array of keys with optional metadata
110
+ */
111
+ keys: Array<{
112
+ name: string;
113
+ expiration?: number;
114
+ metadata?: Record<string, any>;
115
+ }>;
116
+ /**
117
+ * Whether the list is complete
118
+ */
119
+ complete: boolean;
120
+ /**
121
+ * Cursor for next page (if not complete)
122
+ */
123
+ cursor?: string;
124
+ }
125
+ /**
126
+ * Metadata associated with a key
127
+ */
128
+ export interface KVMetadata {
129
+ /**
130
+ * Expiration timestamp (Unix seconds)
131
+ */
132
+ expiration?: number;
133
+ /**
134
+ * Custom metadata
135
+ */
136
+ metadata?: Record<string, any>;
137
+ }
138
+ /**
139
+ * Cloudflare environment interface for KV
140
+ */
141
+ export interface CloudflareKVEnv {
142
+ KV: KVNamespace;
143
+ KV_PROVIDER?: 'cloudflare' | 'upstash' | 'vercel';
144
+ UPSTASH_REDIS_REST_URL?: string;
145
+ UPSTASH_REDIS_REST_TOKEN?: string;
146
+ VERCEL_KV_REST_URL?: string;
147
+ VERCEL_KV_REST_TOKEN?: string;
148
+ }
149
+ /**
150
+ * Request wrapper for NextRequest compatibility
151
+ */
152
+ export interface KVRequest {
153
+ env: CloudflareKVEnv;
154
+ }
155
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/edge/kv/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * KV (Key-Value) storage abstraction types for edge runtime
3
+ *
4
+ * Provides a simple key-value store interface that can be implemented by various providers
5
+ * (Cloudflare KV, Upstash Redis, Vercel KV, etc.) allowing seamless upgrades as apps scale.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/edge/kv/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Edge Object Storage API
3
+ *
4
+ * Provides an S3-like object storage interface for user-generated apps.
5
+ * Automatically selects the appropriate provider based on environment configuration.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { getStorage } from '@thewhateverapp/platform/edge';
10
+ *
11
+ * export async function POST(req: NextRequest) {
12
+ * const storage = await getStorage(req);
13
+ *
14
+ * // Upload a file
15
+ * const file = await req.formData().get('file') as File;
16
+ * const result = await storage.put(`uploads/${file.name}`, file, {
17
+ * contentType: file.type
18
+ * });
19
+ *
20
+ * return NextResponse.json({ url: result.url });
21
+ * }
22
+ * ```
23
+ */
24
+ import type { StorageProvider, CloudflareStorageEnv, StorageRequest } from './types';
25
+ export type * from './types';
26
+ /**
27
+ * Get a storage instance for the current request
28
+ *
29
+ * Automatically selects the appropriate provider based on environment:
30
+ * - 'r2' (default): Cloudflare R2
31
+ * - 's3': AWS S3
32
+ * - 'backblaze': Backblaze B2
33
+ *
34
+ * @param req - NextRequest or object with env property
35
+ * @returns Storage provider instance
36
+ */
37
+ export declare function getStorage(req: StorageRequest | {
38
+ env: CloudflareStorageEnv;
39
+ }): Promise<StorageProvider>;
40
+ /**
41
+ * Create a storage instance directly (for advanced usage)
42
+ *
43
+ * @example
44
+ * ```typescript
45
+ * const storage = createStorage({ STORAGE: env.STORAGE });
46
+ * await storage.put('file.txt', 'Hello World');
47
+ * ```
48
+ */
49
+ export declare function createStorage(env: CloudflareStorageEnv): StorageProvider;
50
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/edge/storage/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAIrF,mBAAmB,SAAS,CAAC;AAE7B;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,cAAc,GAAG;IAAE,GAAG,EAAE,oBAAoB,CAAA;CAAE,GAClD,OAAO,CAAC,eAAe,CAAC,CAqC1B;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,oBAAoB,GAAG,eAAe,CAexE"}