@rajeev02/app-shell 0.1.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 (41) hide show
  1. package/lib/analytics/index.d.ts +42 -0
  2. package/lib/analytics/index.d.ts.map +1 -0
  3. package/lib/analytics/index.js +69 -0
  4. package/lib/analytics/index.js.map +1 -0
  5. package/lib/api/index.d.ts +84 -0
  6. package/lib/api/index.d.ts.map +1 -0
  7. package/lib/api/index.js +219 -0
  8. package/lib/api/index.js.map +1 -0
  9. package/lib/cart/index.d.ts +97 -0
  10. package/lib/cart/index.d.ts.map +1 -0
  11. package/lib/cart/index.js +134 -0
  12. package/lib/cart/index.js.map +1 -0
  13. package/lib/chat/index.d.ts +111 -0
  14. package/lib/chat/index.d.ts.map +1 -0
  15. package/lib/chat/index.js +169 -0
  16. package/lib/chat/index.js.map +1 -0
  17. package/lib/config/index.d.ts +33 -0
  18. package/lib/config/index.d.ts.map +1 -0
  19. package/lib/config/index.js +62 -0
  20. package/lib/config/index.js.map +1 -0
  21. package/lib/forms/index.d.ts +78 -0
  22. package/lib/forms/index.d.ts.map +1 -0
  23. package/lib/forms/index.js +292 -0
  24. package/lib/forms/index.js.map +1 -0
  25. package/lib/index.d.ts +23 -0
  26. package/lib/index.d.ts.map +1 -0
  27. package/lib/index.js +35 -0
  28. package/lib/index.js.map +1 -0
  29. package/lib/onboarding/index.d.ts +62 -0
  30. package/lib/onboarding/index.d.ts.map +1 -0
  31. package/lib/onboarding/index.js +117 -0
  32. package/lib/onboarding/index.js.map +1 -0
  33. package/package.json +51 -0
  34. package/src/analytics/index.ts +92 -0
  35. package/src/api/index.ts +322 -0
  36. package/src/cart/index.ts +213 -0
  37. package/src/chat/index.ts +260 -0
  38. package/src/config/index.ts +69 -0
  39. package/src/forms/index.ts +376 -0
  40. package/src/index.ts +68 -0
  41. package/src/onboarding/index.ts +159 -0
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @rajeev02/app-shell — Analytics Pipeline
3
+ * Event tracking, user properties, funnel analysis, offline buffer
4
+ */
5
+ export interface AnalyticsEvent {
6
+ name: string;
7
+ properties?: Record<string, unknown>;
8
+ timestamp: number;
9
+ sessionId: string;
10
+ }
11
+ export interface AnalyticsConfig {
12
+ /** Flush events to server handler */
13
+ onFlush: (events: AnalyticsEvent[]) => Promise<void>;
14
+ /** Flush interval in ms (default: 30000) */
15
+ flushIntervalMs?: number;
16
+ /** Max batch size (default: 50) */
17
+ maxBatchSize?: number;
18
+ /** Whether to track automatically (screen views, etc.) */
19
+ autoTrack?: boolean;
20
+ }
21
+ export declare class AnalyticsEngine {
22
+ private config;
23
+ private buffer;
24
+ private userProperties;
25
+ private sessionId;
26
+ private flushTimer;
27
+ constructor(config: AnalyticsConfig);
28
+ /** Track an event */
29
+ track(name: string, properties?: Record<string, unknown>): void;
30
+ /** Set user properties (included in all future events) */
31
+ setUserProperties(props: Record<string, unknown>): void;
32
+ /** Track screen view */
33
+ trackScreen(screenName: string, properties?: Record<string, unknown>): void;
34
+ /** Flush events to server */
35
+ flush(): Promise<void>;
36
+ /** Get buffer size */
37
+ getBufferSize(): number;
38
+ /** Destroy — flush and stop timer */
39
+ destroy(): Promise<void>;
40
+ private startFlushTimer;
41
+ }
42
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,OAAO,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,4CAA4C;IAC5C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mCAAmC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAA+C;gBAErD,MAAM,EAAE,eAAe;IAWnC,qBAAqB;IACrB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAU/D,0DAA0D;IAC1D,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAIvD,wBAAwB;IACxB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3E,6BAA6B;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAW5B,sBAAsB;IACtB,aAAa,IAAI,MAAM;IAIvB,qCAAqC;IAC/B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B,OAAO,CAAC,eAAe;CAMxB"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ /**
3
+ * @rajeev02/app-shell — Analytics Pipeline
4
+ * Event tracking, user properties, funnel analysis, offline buffer
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.AnalyticsEngine = void 0;
8
+ class AnalyticsEngine {
9
+ constructor(config) {
10
+ this.buffer = [];
11
+ this.userProperties = {};
12
+ this.flushTimer = null;
13
+ this.config = {
14
+ flushIntervalMs: 30000,
15
+ maxBatchSize: 50,
16
+ autoTrack: true,
17
+ ...config,
18
+ };
19
+ this.sessionId = `sess_${Date.now()}_${Math.random().toString(36).substr(2, 6)}`;
20
+ this.startFlushTimer();
21
+ }
22
+ /** Track an event */
23
+ track(name, properties) {
24
+ this.buffer.push({
25
+ name,
26
+ properties: { ...this.userProperties, ...properties },
27
+ timestamp: Date.now(),
28
+ sessionId: this.sessionId,
29
+ });
30
+ if (this.buffer.length >= (this.config.maxBatchSize ?? 50))
31
+ this.flush();
32
+ }
33
+ /** Set user properties (included in all future events) */
34
+ setUserProperties(props) {
35
+ Object.assign(this.userProperties, props);
36
+ }
37
+ /** Track screen view */
38
+ trackScreen(screenName, properties) {
39
+ this.track("screen_view", { screen_name: screenName, ...properties });
40
+ }
41
+ /** Flush events to server */
42
+ async flush() {
43
+ if (this.buffer.length === 0)
44
+ return;
45
+ const batch = [...this.buffer];
46
+ this.buffer = [];
47
+ try {
48
+ await this.config.onFlush(batch);
49
+ }
50
+ catch {
51
+ this.buffer = [...batch, ...this.buffer];
52
+ }
53
+ }
54
+ /** Get buffer size */
55
+ getBufferSize() {
56
+ return this.buffer.length;
57
+ }
58
+ /** Destroy — flush and stop timer */
59
+ async destroy() {
60
+ if (this.flushTimer)
61
+ clearInterval(this.flushTimer);
62
+ await this.flush();
63
+ }
64
+ startFlushTimer() {
65
+ this.flushTimer = setInterval(() => this.flush(), this.config.flushIntervalMs ?? 30000);
66
+ }
67
+ }
68
+ exports.AnalyticsEngine = AnalyticsEngine;
69
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAoBH,MAAa,eAAe;IAO1B,YAAY,MAAuB;QAL3B,WAAM,GAAqB,EAAE,CAAC;QAC9B,mBAAc,GAA4B,EAAE,CAAC;QAE7C,eAAU,GAA0C,IAAI,CAAC;QAG/D,IAAI,CAAC,MAAM,GAAG;YACZ,eAAe,EAAE,KAAK;YACtB,YAAY,EAAE,EAAE;YAChB,SAAS,EAAE,IAAI;YACf,GAAG,MAAM;SACV,CAAC;QACF,IAAI,CAAC,SAAS,GAAG,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACjF,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,qBAAqB;IACrB,KAAK,CAAC,IAAY,EAAE,UAAoC;QACtD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,IAAI;YACJ,UAAU,EAAE,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,UAAU,EAAE;YACrD,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;YAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAC3E,CAAC;IAED,0DAA0D;IAC1D,iBAAiB,CAAC,KAA8B;QAC9C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,wBAAwB;IACxB,WAAW,CAAC,UAAkB,EAAE,UAAoC;QAClE,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,6BAA6B;IAC7B,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACrC,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,aAAa;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,UAAU;YAAE,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,UAAU,GAAG,WAAW,CAC3B,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAClB,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,KAAK,CACrC,CAAC;IACJ,CAAC;CACF;AApED,0CAoEC"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * @rajeev02/app-shell — API Client
3
+ * Offline-first API layer with interceptors, token refresh, retry, cache-first strategy
4
+ */
5
+ export type HttpMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
6
+ export type CacheStrategy = "network_first" | "cache_first" | "network_only" | "cache_only" | "stale_while_revalidate";
7
+ export interface ApiConfig {
8
+ baseUrl: string;
9
+ timeout?: number;
10
+ defaultHeaders?: Record<string, string>;
11
+ /** Get current access token */
12
+ getToken?: () => Promise<string | null>;
13
+ /** Refresh token when 401 received */
14
+ onRefreshToken?: () => Promise<string | null>;
15
+ /** Called on network error (for queueing) */
16
+ onNetworkError?: (request: ApiRequest) => void;
17
+ /** Default cache strategy */
18
+ defaultCacheStrategy?: CacheStrategy;
19
+ /** Default cache TTL in seconds */
20
+ defaultCacheTtl?: number;
21
+ }
22
+ export interface ApiRequest {
23
+ method: HttpMethod;
24
+ path: string;
25
+ body?: unknown;
26
+ headers?: Record<string, string>;
27
+ query?: Record<string, string>;
28
+ cacheStrategy?: CacheStrategy;
29
+ cacheTtl?: number;
30
+ retryCount?: number;
31
+ maxRetries?: number;
32
+ tag?: string;
33
+ }
34
+ export interface ApiResponse<T = unknown> {
35
+ data: T;
36
+ status: number;
37
+ headers: Record<string, string>;
38
+ fromCache: boolean;
39
+ duration: number;
40
+ }
41
+ export interface RequestInterceptor {
42
+ name: string;
43
+ onRequest: (request: ApiRequest) => ApiRequest | Promise<ApiRequest>;
44
+ }
45
+ export interface ResponseInterceptor {
46
+ name: string;
47
+ onResponse: (response: ApiResponse) => ApiResponse | Promise<ApiResponse>;
48
+ onError?: (error: unknown, request: ApiRequest) => unknown;
49
+ }
50
+ /**
51
+ * Offline-First API Client
52
+ */
53
+ export declare class ApiClient {
54
+ private config;
55
+ private requestInterceptors;
56
+ private responseInterceptors;
57
+ private pendingRequests;
58
+ private cache;
59
+ private isRefreshing;
60
+ private refreshQueue;
61
+ constructor(config: ApiConfig);
62
+ /** Add request interceptor */
63
+ addRequestInterceptor(interceptor: RequestInterceptor): void;
64
+ /** Add response interceptor */
65
+ addResponseInterceptor(interceptor: ResponseInterceptor): void;
66
+ /** Main request method */
67
+ request<T = unknown>(req: ApiRequest): Promise<ApiResponse<T>>;
68
+ get<T = unknown>(path: string, query?: Record<string, string>, options?: Partial<ApiRequest>): Promise<ApiResponse<T>>;
69
+ post<T = unknown>(path: string, body?: unknown, options?: Partial<ApiRequest>): Promise<ApiResponse<T>>;
70
+ put<T = unknown>(path: string, body?: unknown, options?: Partial<ApiRequest>): Promise<ApiResponse<T>>;
71
+ patch<T = unknown>(path: string, body?: unknown, options?: Partial<ApiRequest>): Promise<ApiResponse<T>>;
72
+ delete<T = unknown>(path: string, options?: Partial<ApiRequest>): Promise<ApiResponse<T>>;
73
+ /** Clear API cache */
74
+ clearCache(): void;
75
+ /** Get pending (queued) requests count */
76
+ getPendingCount(): number;
77
+ private fetchFromNetwork;
78
+ private processResponse;
79
+ private handleTokenRefresh;
80
+ private getFromCache;
81
+ private getCacheKey;
82
+ private buildUrl;
83
+ }
84
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,219 @@
1
+ "use strict";
2
+ /**
3
+ * @rajeev02/app-shell — API Client
4
+ * Offline-first API layer with interceptors, token refresh, retry, cache-first strategy
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.ApiClient = void 0;
8
+ /**
9
+ * Offline-First API Client
10
+ */
11
+ class ApiClient {
12
+ constructor(config) {
13
+ this.requestInterceptors = [];
14
+ this.responseInterceptors = [];
15
+ this.pendingRequests = new Map();
16
+ this.cache = new Map();
17
+ this.isRefreshing = false;
18
+ this.refreshQueue = [];
19
+ this.config = {
20
+ timeout: 15000,
21
+ defaultCacheStrategy: "network_first",
22
+ defaultCacheTtl: 300,
23
+ ...config,
24
+ };
25
+ }
26
+ /** Add request interceptor */
27
+ addRequestInterceptor(interceptor) {
28
+ this.requestInterceptors.push(interceptor);
29
+ }
30
+ /** Add response interceptor */
31
+ addResponseInterceptor(interceptor) {
32
+ this.responseInterceptors.push(interceptor);
33
+ }
34
+ /** Main request method */
35
+ async request(req) {
36
+ let request = {
37
+ ...req,
38
+ retryCount: req.retryCount ?? 0,
39
+ maxRetries: req.maxRetries ?? 2,
40
+ };
41
+ const strategy = request.cacheStrategy ??
42
+ this.config.defaultCacheStrategy ??
43
+ "network_first";
44
+ const cacheKey = this.getCacheKey(request);
45
+ // Run request interceptors
46
+ for (const interceptor of this.requestInterceptors) {
47
+ const intercepted = await interceptor.onRequest(request);
48
+ request = {
49
+ ...intercepted,
50
+ retryCount: intercepted.retryCount ?? request.retryCount,
51
+ maxRetries: intercepted.maxRetries ?? request.maxRetries,
52
+ };
53
+ }
54
+ // Cache strategies
55
+ if (strategy === "cache_only" || strategy === "cache_first") {
56
+ const cached = this.getFromCache(cacheKey);
57
+ if (cached)
58
+ return cached;
59
+ if (strategy === "cache_only") {
60
+ throw new Error("No cached response available");
61
+ }
62
+ }
63
+ if (strategy === "stale_while_revalidate") {
64
+ const cached = this.getFromCache(cacheKey);
65
+ // Return stale cache immediately, revalidate in background
66
+ if (cached) {
67
+ this.fetchFromNetwork(request, cacheKey).catch(() => { });
68
+ return cached;
69
+ }
70
+ }
71
+ try {
72
+ const response = await this.fetchFromNetwork(request, cacheKey);
73
+ return response;
74
+ }
75
+ catch (error) {
76
+ // On network error, try cache as fallback
77
+ if (strategy === "network_first") {
78
+ const cached = this.getFromCache(cacheKey);
79
+ if (cached)
80
+ return cached;
81
+ }
82
+ // Queue for later if offline
83
+ if (this.config.onNetworkError && request.method !== "GET") {
84
+ this.config.onNetworkError(request);
85
+ }
86
+ throw error;
87
+ }
88
+ }
89
+ // Convenience methods
90
+ async get(path, query, options) {
91
+ return this.request({ method: "GET", path, query, ...options });
92
+ }
93
+ async post(path, body, options) {
94
+ return this.request({ method: "POST", path, body, ...options });
95
+ }
96
+ async put(path, body, options) {
97
+ return this.request({ method: "PUT", path, body, ...options });
98
+ }
99
+ async patch(path, body, options) {
100
+ return this.request({ method: "PATCH", path, body, ...options });
101
+ }
102
+ async delete(path, options) {
103
+ return this.request({ method: "DELETE", path, ...options });
104
+ }
105
+ /** Clear API cache */
106
+ clearCache() {
107
+ this.cache.clear();
108
+ }
109
+ /** Get pending (queued) requests count */
110
+ getPendingCount() {
111
+ return this.pendingRequests.size;
112
+ }
113
+ async fetchFromNetwork(request, cacheKey) {
114
+ const start = Date.now();
115
+ const url = this.buildUrl(request);
116
+ const headers = {
117
+ "Content-Type": "application/json",
118
+ ...this.config.defaultHeaders,
119
+ ...request.headers,
120
+ };
121
+ // Add auth token
122
+ if (this.config.getToken) {
123
+ const token = await this.config.getToken();
124
+ if (token)
125
+ headers["Authorization"] = `Bearer ${token}`;
126
+ }
127
+ const fetchOptions = { method: request.method, headers };
128
+ if (request.body && request.method !== "GET") {
129
+ fetchOptions.body = JSON.stringify(request.body);
130
+ }
131
+ const httpResponse = await fetch(url, fetchOptions);
132
+ // Handle 401 — token expired
133
+ if (httpResponse.status === 401 && this.config.onRefreshToken) {
134
+ const newToken = await this.handleTokenRefresh();
135
+ if (newToken) {
136
+ headers["Authorization"] = `Bearer ${newToken}`;
137
+ const retryResponse = await fetch(url, { ...fetchOptions, headers });
138
+ return this.processResponse(retryResponse, cacheKey, start);
139
+ }
140
+ }
141
+ return this.processResponse(httpResponse, cacheKey, start);
142
+ }
143
+ async processResponse(httpResponse, cacheKey, start) {
144
+ const data = (await httpResponse.json());
145
+ const responseHeaders = {};
146
+ httpResponse.headers.forEach((v, k) => {
147
+ responseHeaders[k] = v;
148
+ });
149
+ let response = {
150
+ data,
151
+ status: httpResponse.status,
152
+ headers: responseHeaders,
153
+ fromCache: false,
154
+ duration: Date.now() - start,
155
+ };
156
+ // Run response interceptors
157
+ for (const interceptor of this.responseInterceptors) {
158
+ response = (await interceptor.onResponse(response));
159
+ }
160
+ // Cache successful GET responses
161
+ if (httpResponse.ok) {
162
+ const ttl = this.config.defaultCacheTtl ?? 300;
163
+ this.cache.set(cacheKey, {
164
+ response: response,
165
+ expiresAt: Date.now() + ttl * 1000,
166
+ });
167
+ }
168
+ if (!httpResponse.ok) {
169
+ throw {
170
+ status: httpResponse.status,
171
+ data,
172
+ message: `HTTP ${httpResponse.status}`,
173
+ };
174
+ }
175
+ return response;
176
+ }
177
+ async handleTokenRefresh() {
178
+ if (this.isRefreshing) {
179
+ return new Promise((resolve) => {
180
+ this.refreshQueue.push(resolve);
181
+ });
182
+ }
183
+ this.isRefreshing = true;
184
+ try {
185
+ const token = await this.config.onRefreshToken();
186
+ this.refreshQueue.forEach((cb) => cb(token));
187
+ this.refreshQueue = [];
188
+ return token;
189
+ }
190
+ finally {
191
+ this.isRefreshing = false;
192
+ }
193
+ }
194
+ getFromCache(key) {
195
+ const entry = this.cache.get(key);
196
+ if (!entry)
197
+ return null;
198
+ if (entry.expiresAt < Date.now()) {
199
+ this.cache.delete(key);
200
+ return null;
201
+ }
202
+ return { ...entry.response, fromCache: true };
203
+ }
204
+ getCacheKey(req) {
205
+ const queryStr = req.query ? JSON.stringify(req.query) : "";
206
+ return `${req.method}:${req.path}:${queryStr}`;
207
+ }
208
+ buildUrl(req) {
209
+ let url = `${this.config.baseUrl}${req.path}`;
210
+ if (req.query) {
211
+ const params = new URLSearchParams(req.query).toString();
212
+ if (params)
213
+ url += `?${params}`;
214
+ }
215
+ return url;
216
+ }
217
+ }
218
+ exports.ApiClient = ApiClient;
219
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * @rajeev02/app-shell — Cart & Checkout
3
+ * Cart management, address, coupons, order tracking
4
+ */
5
+ export interface CartItem {
6
+ id: string;
7
+ productId: string;
8
+ name: string;
9
+ imageUrl?: string;
10
+ price: number;
11
+ quantity: number;
12
+ maxQuantity?: number;
13
+ variant?: string;
14
+ metadata?: Record<string, unknown>;
15
+ }
16
+ export interface CartSummary {
17
+ items: CartItem[];
18
+ subtotal: number;
19
+ discount: number;
20
+ tax: number;
21
+ deliveryFee: number;
22
+ total: number;
23
+ couponCode?: string;
24
+ itemCount: number;
25
+ }
26
+ export interface Address {
27
+ id: string;
28
+ label?: string;
29
+ fullName: string;
30
+ phone: string;
31
+ line1: string;
32
+ line2?: string;
33
+ city: string;
34
+ state: string;
35
+ pincode: string;
36
+ isDefault: boolean;
37
+ latitude?: number;
38
+ longitude?: number;
39
+ }
40
+ export type OrderStatus = "created" | "confirmed" | "processing" | "shipped" | "out_for_delivery" | "delivered" | "cancelled" | "returned" | "refunded";
41
+ export interface Order {
42
+ id: string;
43
+ items: CartItem[];
44
+ address: Address;
45
+ status: OrderStatus;
46
+ paymentMethod: string;
47
+ paymentStatus: "pending" | "paid" | "failed" | "refunded";
48
+ subtotal: number;
49
+ discount: number;
50
+ tax: number;
51
+ deliveryFee: number;
52
+ total: number;
53
+ couponCode?: string;
54
+ trackingId?: string;
55
+ createdAt: number;
56
+ updatedAt: number;
57
+ estimatedDelivery?: string;
58
+ }
59
+ /**
60
+ * Cart Manager
61
+ */
62
+ export declare class CartManager {
63
+ private items;
64
+ private couponCode;
65
+ private couponDiscount;
66
+ private taxRate;
67
+ private deliveryFee;
68
+ private listeners;
69
+ /** Add item to cart */
70
+ add(item: Omit<CartItem, "quantity">, quantity?: number): void;
71
+ /** Update quantity */
72
+ updateQuantity(itemId: string, quantity: number): void;
73
+ /** Remove item */
74
+ remove(itemId: string): void;
75
+ /** Clear cart */
76
+ clear(): void;
77
+ /** Apply coupon */
78
+ applyCoupon(code: string, discountAmount: number): void;
79
+ /** Remove coupon */
80
+ removeCoupon(): void;
81
+ /** Set delivery fee */
82
+ setDeliveryFee(fee: number): void;
83
+ /** Get cart summary */
84
+ getSummary(): CartSummary;
85
+ /** Check if cart is empty */
86
+ isEmpty(): boolean;
87
+ /** Get item count */
88
+ getItemCount(): number;
89
+ /** Subscribe to cart changes */
90
+ onChange(listener: () => void): () => void;
91
+ /** Export cart for persistence */
92
+ export(): Record<string, unknown>;
93
+ /** Import cart from persistence */
94
+ import(data: Record<string, unknown>): void;
95
+ private notify;
96
+ }
97
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cart/index.ts"],"names":[],"mappings":"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"}