@cranberry-money/shared-services 3.0.1 → 4.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.
- package/dist/index.d.ts +0 -27
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -115
- package/package.json +4 -3
- package/dist/api/functional-client.d.ts +0 -66
- package/dist/api/functional-client.d.ts.map +0 -1
- package/dist/api/functional-client.js +0 -165
- package/dist/auth/functional/auth-operations.d.ts +0 -116
- package/dist/auth/functional/auth-operations.d.ts.map +0 -1
- package/dist/auth/functional/auth-operations.js +0 -246
- package/dist/auth/functional/auth-state.d.ts +0 -38
- package/dist/auth/functional/auth-state.d.ts.map +0 -1
- package/dist/auth/functional/auth-state.js +0 -87
- package/dist/auth/functional/token-storage.d.ts +0 -44
- package/dist/auth/functional/token-storage.d.ts.map +0 -1
- package/dist/auth/functional/token-storage.js +0 -178
- package/dist/auth/react/AuthProvider.d.ts +0 -92
- package/dist/auth/react/AuthProvider.d.ts.map +0 -1
- package/dist/auth/react/AuthProvider.js +0 -207
- package/dist/integration/blueberry-integration.d.ts +0 -21
- package/dist/integration/blueberry-integration.d.ts.map +0 -1
- package/dist/integration/blueberry-integration.js +0 -109
- package/dist/integration/index.d.ts +0 -8
- package/dist/integration/index.d.ts.map +0 -1
- package/dist/integration/index.js +0 -18
- package/dist/services/accounts.d.ts +0 -220
- package/dist/services/accounts.d.ts.map +0 -1
- package/dist/services/accounts.js +0 -175
- package/dist/services/banks.d.ts +0 -123
- package/dist/services/banks.d.ts.map +0 -1
- package/dist/services/banks.js +0 -151
- package/dist/services/cash-accounts.d.ts +0 -112
- package/dist/services/cash-accounts.d.ts.map +0 -1
- package/dist/services/cash-accounts.js +0 -222
- package/dist/services/documents.d.ts +0 -143
- package/dist/services/documents.d.ts.map +0 -1
- package/dist/services/documents.js +0 -253
- package/dist/services/factories/account-factory.d.ts +0 -16
- package/dist/services/factories/account-factory.d.ts.map +0 -1
- package/dist/services/factories/account-factory.js +0 -79
- package/dist/services/factories/auth-factory.d.ts +0 -23
- package/dist/services/factories/auth-factory.d.ts.map +0 -1
- package/dist/services/factories/auth-factory.js +0 -75
- package/dist/services/factories/bank-factory.d.ts +0 -16
- package/dist/services/factories/bank-factory.d.ts.map +0 -1
- package/dist/services/factories/bank-factory.js +0 -72
- package/dist/services/factories/cash-account-factory.d.ts +0 -16
- package/dist/services/factories/cash-account-factory.d.ts.map +0 -1
- package/dist/services/factories/cash-account-factory.js +0 -74
- package/dist/services/factories/document-factory.d.ts +0 -16
- package/dist/services/factories/document-factory.d.ts.map +0 -1
- package/dist/services/factories/document-factory.js +0 -85
- package/dist/services/factories/index.d.ts +0 -21
- package/dist/services/factories/index.d.ts.map +0 -1
- package/dist/services/factories/index.js +0 -40
- package/dist/services/factories/instrument-factory.d.ts +0 -16
- package/dist/services/factories/instrument-factory.d.ts.map +0 -1
- package/dist/services/factories/instrument-factory.js +0 -68
- package/dist/services/factories/master-factory.d.ts +0 -74
- package/dist/services/factories/master-factory.d.ts.map +0 -1
- package/dist/services/factories/master-factory.js +0 -183
- package/dist/services/factories/portfolio-factory.d.ts +0 -16
- package/dist/services/factories/portfolio-factory.d.ts.map +0 -1
- package/dist/services/factories/portfolio-factory.js +0 -74
- package/dist/services/factories/portfolio-template-factory.d.ts +0 -16
- package/dist/services/factories/portfolio-template-factory.d.ts.map +0 -1
- package/dist/services/factories/portfolio-template-factory.js +0 -76
- package/dist/services/factories/reference-data-factory.d.ts +0 -16
- package/dist/services/factories/reference-data-factory.d.ts.map +0 -1
- package/dist/services/factories/reference-data-factory.js +0 -86
- package/dist/services/factories/tax-residency-factory.d.ts +0 -16
- package/dist/services/factories/tax-residency-factory.d.ts.map +0 -1
- package/dist/services/factories/tax-residency-factory.js +0 -73
- package/dist/services/factories/trade-factory.d.ts +0 -16
- package/dist/services/factories/trade-factory.d.ts.map +0 -1
- package/dist/services/factories/trade-factory.js +0 -79
- package/dist/services/factories/types.d.ts +0 -250
- package/dist/services/factories/types.d.ts.map +0 -1
- package/dist/services/factories/types.js +0 -32
- package/dist/services/factories/withdrawal-factory.d.ts +0 -16
- package/dist/services/factories/withdrawal-factory.d.ts.map +0 -1
- package/dist/services/factories/withdrawal-factory.js +0 -78
- package/dist/services/instruments.d.ts +0 -138
- package/dist/services/instruments.d.ts.map +0 -1
- package/dist/services/instruments.js +0 -178
- package/dist/services/portfolio-templates.d.ts +0 -142
- package/dist/services/portfolio-templates.d.ts.map +0 -1
- package/dist/services/portfolio-templates.js +0 -201
- package/dist/services/portfolios.d.ts +0 -157
- package/dist/services/portfolios.d.ts.map +0 -1
- package/dist/services/portfolios.js +0 -144
- package/dist/services/reference-data.d.ts +0 -185
- package/dist/services/reference-data.d.ts.map +0 -1
- package/dist/services/reference-data.js +0 -245
- package/dist/services/tax-residencies.d.ts +0 -83
- package/dist/services/tax-residencies.d.ts.map +0 -1
- package/dist/services/tax-residencies.js +0 -179
- package/dist/services/trades.d.ts +0 -190
- package/dist/services/trades.d.ts.map +0 -1
- package/dist/services/trades.js +0 -207
- package/dist/services/withdrawals.d.ts +0 -236
- package/dist/services/withdrawals.d.ts.map +0 -1
- package/dist/services/withdrawals.js +0 -345
package/dist/index.d.ts
CHANGED
|
@@ -1,28 +1 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Cranberry Shared Services v3.0.0 - Clean Functional Architecture
|
|
3
|
-
*
|
|
4
|
-
* Pure functional implementation with explicit dependency injection.
|
|
5
|
-
* No global state, no classes - just clean, composable functions.
|
|
6
|
-
*/
|
|
7
|
-
export { createServiceFactory, createWebServiceFactory, createMobileServiceFactory, } from './services/factories';
|
|
8
|
-
export type { ServiceFactory, ServiceFactoryConfig, PlatformConfig, CoreDependencies, AuthServiceFactory, PortfolioServiceFactory, AccountServiceFactory, TradeServiceFactory, WithdrawalServiceFactory, InstrumentServiceFactory, CashAccountServiceFactory, BankServiceFactory, DocumentServiceFactory, PortfolioTemplateServiceFactory, TaxResidencyServiceFactory, ReferenceDataServiceFactory, } from './services/factories';
|
|
9
|
-
export { type ApiClient, type ApiClientConfig, type RequestConfig, type ApiError, createApiClient, createWebApiClient, createMobileApiClient, isApiError, } from './api/functional-client';
|
|
10
|
-
export { type AuthState, type UserProfile, type TokenPair, createInitialAuthState, createLoadingAuthState, createAuthenticatedState, createUnauthenticatedState, createErrorState, updateTokens, clearError, isValidAuthState, hasValidTokens, getDisplayName, requiresVerification, requiresSignupCompletion, } from './auth/functional/auth-state';
|
|
11
|
-
export { type AuthDependencies, type SigninPayload, type SignupPayload, type TokenStorage, signin, signout, signup, refreshTokens, getUserProfile, verifyEmail, resendVerificationCode, initializeFromStorage, validateSigninCredentials, validateSignupData, } from './auth/functional/auth-operations';
|
|
12
|
-
export { createWebTokenStorage, createMobileTokenStorage, createMemoryTokenStorage, isSecureStorageAvailable, migrateTokensFromLegacyStorage, type SecureStoreInterface, } from './auth/functional/token-storage';
|
|
13
|
-
export { AuthProvider, useAuth, useAuthState, useAuthActions, withAuth, AuthGuard, } from './auth/react/AuthProvider';
|
|
14
|
-
export * as PortfolioServices from './services/portfolios';
|
|
15
|
-
export * as ReferenceDataServices from './services/reference-data';
|
|
16
|
-
export * as AccountServices from './services/accounts';
|
|
17
|
-
export * as TradeServices from './services/trades';
|
|
18
|
-
export * as WithdrawalServices from './services/withdrawals';
|
|
19
|
-
export * as InstrumentServices from './services/instruments';
|
|
20
|
-
export * as CashAccountServices from './services/cash-accounts';
|
|
21
|
-
export * as BankServices from './services/banks';
|
|
22
|
-
export * as DocumentServices from './services/documents';
|
|
23
|
-
export * as PortfolioTemplateServices from './services/portfolio-templates';
|
|
24
|
-
export * as TaxResidencyServices from './services/tax-residencies';
|
|
25
|
-
export { BlueberryApp, BlueberryAuthProvider, BlueberryDashboard, setupBlueberryServices, enableFunctionalPortfolios, getMigrationProgress, } from './integration/blueberry-integration';
|
|
26
|
-
export { type AuthState as LegacyAuthState, type UserProfile as LegacyUserProfile, type TokenPair as LegacyTokenPair, } from './auth/functional/auth-state';
|
|
27
|
-
export { type ApiClient as LegacyApiClient, type ApiClientConfig as LegacyApiClientConfig, createApiClient as createLegacyApiClient, } from './api/functional-client';
|
|
28
1
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
CHANGED
|
@@ -1,116 +1,2 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
* Cranberry Shared Services v3.0.0 - Clean Functional Architecture
|
|
4
|
-
*
|
|
5
|
-
* Pure functional implementation with explicit dependency injection.
|
|
6
|
-
* No global state, no classes - just clean, composable functions.
|
|
7
|
-
*/
|
|
8
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
-
if (k2 === undefined) k2 = k;
|
|
10
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
-
}
|
|
14
|
-
Object.defineProperty(o, k2, desc);
|
|
15
|
-
}) : (function(o, m, k, k2) {
|
|
16
|
-
if (k2 === undefined) k2 = k;
|
|
17
|
-
o[k2] = m[k];
|
|
18
|
-
}));
|
|
19
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
-
}) : function(o, v) {
|
|
22
|
-
o["default"] = v;
|
|
23
|
-
});
|
|
24
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
-
var ownKeys = function(o) {
|
|
26
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
-
var ar = [];
|
|
28
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
-
return ar;
|
|
30
|
-
};
|
|
31
|
-
return ownKeys(o);
|
|
32
|
-
};
|
|
33
|
-
return function (mod) {
|
|
34
|
-
if (mod && mod.__esModule) return mod;
|
|
35
|
-
var result = {};
|
|
36
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
-
__setModuleDefault(result, mod);
|
|
38
|
-
return result;
|
|
39
|
-
};
|
|
40
|
-
})();
|
|
41
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
-
exports.PortfolioTemplateServices = exports.DocumentServices = exports.BankServices = exports.CashAccountServices = exports.InstrumentServices = exports.WithdrawalServices = exports.TradeServices = exports.AccountServices = exports.ReferenceDataServices = exports.PortfolioServices = exports.AuthGuard = exports.withAuth = exports.useAuthActions = exports.useAuthState = exports.useAuth = exports.AuthProvider = exports.migrateTokensFromLegacyStorage = exports.isSecureStorageAvailable = exports.createMemoryTokenStorage = exports.createMobileTokenStorage = exports.createWebTokenStorage = exports.validateSignupData = exports.validateSigninCredentials = exports.initializeFromStorage = exports.resendVerificationCode = exports.verifyEmail = exports.getUserProfile = exports.refreshTokens = exports.signup = exports.signout = exports.signin = exports.requiresSignupCompletion = exports.requiresVerification = exports.getDisplayName = exports.hasValidTokens = exports.isValidAuthState = exports.clearError = exports.updateTokens = exports.createErrorState = exports.createUnauthenticatedState = exports.createAuthenticatedState = exports.createLoadingAuthState = exports.createInitialAuthState = exports.isApiError = exports.createMobileApiClient = exports.createWebApiClient = exports.createApiClient = exports.createMobileServiceFactory = exports.createWebServiceFactory = exports.createServiceFactory = void 0;
|
|
43
|
-
exports.createLegacyApiClient = exports.getMigrationProgress = exports.enableFunctionalPortfolios = exports.setupBlueberryServices = exports.BlueberryDashboard = exports.BlueberryAuthProvider = exports.BlueberryApp = exports.TaxResidencyServices = void 0;
|
|
44
|
-
// Core Service Factory Pattern - Main entry point
|
|
45
|
-
var factories_1 = require("./services/factories");
|
|
46
|
-
Object.defineProperty(exports, "createServiceFactory", { enumerable: true, get: function () { return factories_1.createServiceFactory; } });
|
|
47
|
-
Object.defineProperty(exports, "createWebServiceFactory", { enumerable: true, get: function () { return factories_1.createWebServiceFactory; } });
|
|
48
|
-
Object.defineProperty(exports, "createMobileServiceFactory", { enumerable: true, get: function () { return factories_1.createMobileServiceFactory; } });
|
|
49
|
-
// Functional API Client
|
|
50
|
-
var functional_client_1 = require("./api/functional-client");
|
|
51
|
-
Object.defineProperty(exports, "createApiClient", { enumerable: true, get: function () { return functional_client_1.createApiClient; } });
|
|
52
|
-
Object.defineProperty(exports, "createWebApiClient", { enumerable: true, get: function () { return functional_client_1.createWebApiClient; } });
|
|
53
|
-
Object.defineProperty(exports, "createMobileApiClient", { enumerable: true, get: function () { return functional_client_1.createMobileApiClient; } });
|
|
54
|
-
Object.defineProperty(exports, "isApiError", { enumerable: true, get: function () { return functional_client_1.isApiError; } });
|
|
55
|
-
// Functional Authentication System
|
|
56
|
-
var auth_state_1 = require("./auth/functional/auth-state");
|
|
57
|
-
Object.defineProperty(exports, "createInitialAuthState", { enumerable: true, get: function () { return auth_state_1.createInitialAuthState; } });
|
|
58
|
-
Object.defineProperty(exports, "createLoadingAuthState", { enumerable: true, get: function () { return auth_state_1.createLoadingAuthState; } });
|
|
59
|
-
Object.defineProperty(exports, "createAuthenticatedState", { enumerable: true, get: function () { return auth_state_1.createAuthenticatedState; } });
|
|
60
|
-
Object.defineProperty(exports, "createUnauthenticatedState", { enumerable: true, get: function () { return auth_state_1.createUnauthenticatedState; } });
|
|
61
|
-
Object.defineProperty(exports, "createErrorState", { enumerable: true, get: function () { return auth_state_1.createErrorState; } });
|
|
62
|
-
Object.defineProperty(exports, "updateTokens", { enumerable: true, get: function () { return auth_state_1.updateTokens; } });
|
|
63
|
-
Object.defineProperty(exports, "clearError", { enumerable: true, get: function () { return auth_state_1.clearError; } });
|
|
64
|
-
Object.defineProperty(exports, "isValidAuthState", { enumerable: true, get: function () { return auth_state_1.isValidAuthState; } });
|
|
65
|
-
Object.defineProperty(exports, "hasValidTokens", { enumerable: true, get: function () { return auth_state_1.hasValidTokens; } });
|
|
66
|
-
Object.defineProperty(exports, "getDisplayName", { enumerable: true, get: function () { return auth_state_1.getDisplayName; } });
|
|
67
|
-
Object.defineProperty(exports, "requiresVerification", { enumerable: true, get: function () { return auth_state_1.requiresVerification; } });
|
|
68
|
-
Object.defineProperty(exports, "requiresSignupCompletion", { enumerable: true, get: function () { return auth_state_1.requiresSignupCompletion; } });
|
|
69
|
-
var auth_operations_1 = require("./auth/functional/auth-operations");
|
|
70
|
-
Object.defineProperty(exports, "signin", { enumerable: true, get: function () { return auth_operations_1.signin; } });
|
|
71
|
-
Object.defineProperty(exports, "signout", { enumerable: true, get: function () { return auth_operations_1.signout; } });
|
|
72
|
-
Object.defineProperty(exports, "signup", { enumerable: true, get: function () { return auth_operations_1.signup; } });
|
|
73
|
-
Object.defineProperty(exports, "refreshTokens", { enumerable: true, get: function () { return auth_operations_1.refreshTokens; } });
|
|
74
|
-
Object.defineProperty(exports, "getUserProfile", { enumerable: true, get: function () { return auth_operations_1.getUserProfile; } });
|
|
75
|
-
Object.defineProperty(exports, "verifyEmail", { enumerable: true, get: function () { return auth_operations_1.verifyEmail; } });
|
|
76
|
-
Object.defineProperty(exports, "resendVerificationCode", { enumerable: true, get: function () { return auth_operations_1.resendVerificationCode; } });
|
|
77
|
-
Object.defineProperty(exports, "initializeFromStorage", { enumerable: true, get: function () { return auth_operations_1.initializeFromStorage; } });
|
|
78
|
-
Object.defineProperty(exports, "validateSigninCredentials", { enumerable: true, get: function () { return auth_operations_1.validateSigninCredentials; } });
|
|
79
|
-
Object.defineProperty(exports, "validateSignupData", { enumerable: true, get: function () { return auth_operations_1.validateSignupData; } });
|
|
80
|
-
var token_storage_1 = require("./auth/functional/token-storage");
|
|
81
|
-
// Token storage implementations
|
|
82
|
-
Object.defineProperty(exports, "createWebTokenStorage", { enumerable: true, get: function () { return token_storage_1.createWebTokenStorage; } });
|
|
83
|
-
Object.defineProperty(exports, "createMobileTokenStorage", { enumerable: true, get: function () { return token_storage_1.createMobileTokenStorage; } });
|
|
84
|
-
Object.defineProperty(exports, "createMemoryTokenStorage", { enumerable: true, get: function () { return token_storage_1.createMemoryTokenStorage; } });
|
|
85
|
-
Object.defineProperty(exports, "isSecureStorageAvailable", { enumerable: true, get: function () { return token_storage_1.isSecureStorageAvailable; } });
|
|
86
|
-
Object.defineProperty(exports, "migrateTokensFromLegacyStorage", { enumerable: true, get: function () { return token_storage_1.migrateTokensFromLegacyStorage; } });
|
|
87
|
-
var AuthProvider_1 = require("./auth/react/AuthProvider");
|
|
88
|
-
// React integration
|
|
89
|
-
Object.defineProperty(exports, "AuthProvider", { enumerable: true, get: function () { return AuthProvider_1.AuthProvider; } });
|
|
90
|
-
Object.defineProperty(exports, "useAuth", { enumerable: true, get: function () { return AuthProvider_1.useAuth; } });
|
|
91
|
-
Object.defineProperty(exports, "useAuthState", { enumerable: true, get: function () { return AuthProvider_1.useAuthState; } });
|
|
92
|
-
Object.defineProperty(exports, "useAuthActions", { enumerable: true, get: function () { return AuthProvider_1.useAuthActions; } });
|
|
93
|
-
Object.defineProperty(exports, "withAuth", { enumerable: true, get: function () { return AuthProvider_1.withAuth; } });
|
|
94
|
-
Object.defineProperty(exports, "AuthGuard", { enumerable: true, get: function () { return AuthProvider_1.AuthGuard; } });
|
|
95
|
-
// Domain Services - Pure Functional Implementations
|
|
96
|
-
exports.PortfolioServices = __importStar(require("./services/portfolios"));
|
|
97
|
-
exports.ReferenceDataServices = __importStar(require("./services/reference-data"));
|
|
98
|
-
exports.AccountServices = __importStar(require("./services/accounts"));
|
|
99
|
-
exports.TradeServices = __importStar(require("./services/trades"));
|
|
100
|
-
exports.WithdrawalServices = __importStar(require("./services/withdrawals"));
|
|
101
|
-
exports.InstrumentServices = __importStar(require("./services/instruments"));
|
|
102
|
-
exports.CashAccountServices = __importStar(require("./services/cash-accounts"));
|
|
103
|
-
exports.BankServices = __importStar(require("./services/banks"));
|
|
104
|
-
exports.DocumentServices = __importStar(require("./services/documents"));
|
|
105
|
-
exports.PortfolioTemplateServices = __importStar(require("./services/portfolio-templates"));
|
|
106
|
-
exports.TaxResidencyServices = __importStar(require("./services/tax-residencies"));
|
|
107
|
-
// Integration Examples and Usage Patterns
|
|
108
|
-
var blueberry_integration_1 = require("./integration/blueberry-integration");
|
|
109
|
-
Object.defineProperty(exports, "BlueberryApp", { enumerable: true, get: function () { return blueberry_integration_1.BlueberryApp; } });
|
|
110
|
-
Object.defineProperty(exports, "BlueberryAuthProvider", { enumerable: true, get: function () { return blueberry_integration_1.BlueberryAuthProvider; } });
|
|
111
|
-
Object.defineProperty(exports, "BlueberryDashboard", { enumerable: true, get: function () { return blueberry_integration_1.BlueberryDashboard; } });
|
|
112
|
-
Object.defineProperty(exports, "setupBlueberryServices", { enumerable: true, get: function () { return blueberry_integration_1.setupBlueberryServices; } });
|
|
113
|
-
Object.defineProperty(exports, "enableFunctionalPortfolios", { enumerable: true, get: function () { return blueberry_integration_1.enableFunctionalPortfolios; } });
|
|
114
|
-
Object.defineProperty(exports, "getMigrationProgress", { enumerable: true, get: function () { return blueberry_integration_1.getMigrationProgress; } });
|
|
115
|
-
var functional_client_2 = require("./api/functional-client");
|
|
116
|
-
Object.defineProperty(exports, "createLegacyApiClient", { enumerable: true, get: function () { return functional_client_2.createApiClient; } });
|
|
2
|
+
// Placeholder for package
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cranberry-money/shared-services",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.1.0",
|
|
4
4
|
"description": "Functional architecture shared services with pure functions, dependency injection, and comprehensive TypeScript support for the MyPortfolio platform",
|
|
5
|
+
"type": "module",
|
|
5
6
|
"main": "dist/index.js",
|
|
6
7
|
"types": "dist/index.d.ts",
|
|
7
8
|
"exports": {
|
|
@@ -22,8 +23,8 @@
|
|
|
22
23
|
"clean": "rm -rf dist",
|
|
23
24
|
"typecheck": "tsc --noEmit",
|
|
24
25
|
"dev": "tsc --watch",
|
|
25
|
-
"lint": "eslint src
|
|
26
|
-
"lint:fix": "eslint src --
|
|
26
|
+
"lint": "eslint src",
|
|
27
|
+
"lint:fix": "eslint src --fix"
|
|
27
28
|
},
|
|
28
29
|
"dependencies": {
|
|
29
30
|
"axios": "^1.7.0"
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Functional API Client - Pure functional approach
|
|
3
|
-
*
|
|
4
|
-
* Replaces the global singleton pattern with explicit dependency injection.
|
|
5
|
-
* All dependencies are passed explicitly, making testing and configuration clear.
|
|
6
|
-
*/
|
|
7
|
-
export interface ApiClient {
|
|
8
|
-
get<T>(url: string, config?: RequestConfig): Promise<T>;
|
|
9
|
-
post<T>(url: string, data?: unknown, config?: RequestConfig): Promise<T>;
|
|
10
|
-
patch<T>(url: string, data?: unknown, config?: RequestConfig): Promise<T>;
|
|
11
|
-
delete<T>(url: string, config?: RequestConfig): Promise<T>;
|
|
12
|
-
}
|
|
13
|
-
export interface RequestConfig {
|
|
14
|
-
params?: Record<string, string>;
|
|
15
|
-
headers?: Record<string, string>;
|
|
16
|
-
timeout?: number;
|
|
17
|
-
}
|
|
18
|
-
export interface ApiClientConfig {
|
|
19
|
-
baseURL: string;
|
|
20
|
-
timeout?: number;
|
|
21
|
-
defaultHeaders?: Record<string, string>;
|
|
22
|
-
withCredentials?: boolean;
|
|
23
|
-
}
|
|
24
|
-
export interface ApiError {
|
|
25
|
-
message: string;
|
|
26
|
-
status?: number;
|
|
27
|
-
code?: string;
|
|
28
|
-
details?: Record<string, unknown>;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Create a functional API client with explicit configuration
|
|
32
|
-
*
|
|
33
|
-
* @param config - API client configuration
|
|
34
|
-
* @returns Pure functional API client interface
|
|
35
|
-
*
|
|
36
|
-
* @example
|
|
37
|
-
* ```typescript
|
|
38
|
-
* const apiClient = createApiClient({
|
|
39
|
-
* baseURL: 'https://api.example.com',
|
|
40
|
-
* timeout: 30000,
|
|
41
|
-
* withCredentials: true,
|
|
42
|
-
* });
|
|
43
|
-
*
|
|
44
|
-
* const data = await apiClient.get<User[]>('/users');
|
|
45
|
-
* ```
|
|
46
|
-
*/
|
|
47
|
-
export declare const createApiClient: (config: ApiClientConfig) => ApiClient;
|
|
48
|
-
/**
|
|
49
|
-
* Create a web-optimized API client
|
|
50
|
-
*
|
|
51
|
-
* @param baseURL - API base URL
|
|
52
|
-
* @returns API client configured for web environments
|
|
53
|
-
*/
|
|
54
|
-
export declare const createWebApiClient: (baseURL: string) => ApiClient;
|
|
55
|
-
/**
|
|
56
|
-
* Create a mobile-optimized API client
|
|
57
|
-
*
|
|
58
|
-
* @param baseURL - API base URL
|
|
59
|
-
* @returns API client configured for mobile environments
|
|
60
|
-
*/
|
|
61
|
-
export declare const createMobileApiClient: (baseURL: string) => ApiClient;
|
|
62
|
-
/**
|
|
63
|
-
* Utility function to check if an error is an API error
|
|
64
|
-
*/
|
|
65
|
-
export declare const isApiError: (error: unknown) => error is ApiError;
|
|
66
|
-
//# sourceMappingURL=functional-client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"functional-client.d.ts","sourceRoot":"","sources":["../../src/api/functional-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACzE,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1E,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,eAAe,KAAG,SA+FzD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAI,SAAS,MAAM,KAAG,SAQpD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAAI,SAAS,MAAM,KAAG,SAQvD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,QAOpD,CAAC"}
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Functional API Client - Pure functional approach
|
|
4
|
-
*
|
|
5
|
-
* Replaces the global singleton pattern with explicit dependency injection.
|
|
6
|
-
* All dependencies are passed explicitly, making testing and configuration clear.
|
|
7
|
-
*/
|
|
8
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.isApiError = exports.createMobileApiClient = exports.createWebApiClient = exports.createApiClient = void 0;
|
|
13
|
-
const axios_1 = __importDefault(require("axios"));
|
|
14
|
-
/**
|
|
15
|
-
* Create a functional API client with explicit configuration
|
|
16
|
-
*
|
|
17
|
-
* @param config - API client configuration
|
|
18
|
-
* @returns Pure functional API client interface
|
|
19
|
-
*
|
|
20
|
-
* @example
|
|
21
|
-
* ```typescript
|
|
22
|
-
* const apiClient = createApiClient({
|
|
23
|
-
* baseURL: 'https://api.example.com',
|
|
24
|
-
* timeout: 30000,
|
|
25
|
-
* withCredentials: true,
|
|
26
|
-
* });
|
|
27
|
-
*
|
|
28
|
-
* const data = await apiClient.get<User[]>('/users');
|
|
29
|
-
* ```
|
|
30
|
-
*/
|
|
31
|
-
const createApiClient = (config) => {
|
|
32
|
-
// Validate configuration
|
|
33
|
-
if (!config.baseURL) {
|
|
34
|
-
throw new Error('API client baseURL is required');
|
|
35
|
-
}
|
|
36
|
-
if (!config.baseURL.startsWith('http://') && !config.baseURL.startsWith('https://')) {
|
|
37
|
-
throw new Error('API client baseURL must be a valid HTTP/HTTPS URL');
|
|
38
|
-
}
|
|
39
|
-
// Create axios instance with configuration
|
|
40
|
-
const axiosInstance = axios_1.default.create({
|
|
41
|
-
baseURL: config.baseURL,
|
|
42
|
-
timeout: config.timeout ?? 30000,
|
|
43
|
-
headers: {
|
|
44
|
-
'Content-Type': 'application/json',
|
|
45
|
-
...config.defaultHeaders,
|
|
46
|
-
},
|
|
47
|
-
withCredentials: config.withCredentials ?? true,
|
|
48
|
-
});
|
|
49
|
-
// Error handling helper
|
|
50
|
-
const handleError = (error) => {
|
|
51
|
-
if (axios_1.default.isAxiosError(error)) {
|
|
52
|
-
const axiosError = error;
|
|
53
|
-
const responseData = axiosError.response?.data;
|
|
54
|
-
const apiError = {
|
|
55
|
-
message: responseData?.message ||
|
|
56
|
-
responseData?.detail ||
|
|
57
|
-
axiosError.message,
|
|
58
|
-
status: axiosError.response?.status,
|
|
59
|
-
code: responseData?.code,
|
|
60
|
-
details: responseData?.details,
|
|
61
|
-
};
|
|
62
|
-
throw apiError;
|
|
63
|
-
}
|
|
64
|
-
// Re-throw non-axios errors
|
|
65
|
-
throw error;
|
|
66
|
-
};
|
|
67
|
-
// Return pure functional interface
|
|
68
|
-
return {
|
|
69
|
-
async get(url, config) {
|
|
70
|
-
try {
|
|
71
|
-
const response = await axiosInstance.get(url, {
|
|
72
|
-
params: config?.params,
|
|
73
|
-
headers: config?.headers,
|
|
74
|
-
timeout: config?.timeout,
|
|
75
|
-
});
|
|
76
|
-
return response.data;
|
|
77
|
-
}
|
|
78
|
-
catch (error) {
|
|
79
|
-
return handleError(error);
|
|
80
|
-
}
|
|
81
|
-
},
|
|
82
|
-
async post(url, data, config) {
|
|
83
|
-
try {
|
|
84
|
-
const response = await axiosInstance.post(url, data, {
|
|
85
|
-
params: config?.params,
|
|
86
|
-
headers: config?.headers,
|
|
87
|
-
timeout: config?.timeout,
|
|
88
|
-
});
|
|
89
|
-
return response.data;
|
|
90
|
-
}
|
|
91
|
-
catch (error) {
|
|
92
|
-
return handleError(error);
|
|
93
|
-
}
|
|
94
|
-
},
|
|
95
|
-
async patch(url, data, config) {
|
|
96
|
-
try {
|
|
97
|
-
const response = await axiosInstance.patch(url, data, {
|
|
98
|
-
params: config?.params,
|
|
99
|
-
headers: config?.headers,
|
|
100
|
-
timeout: config?.timeout,
|
|
101
|
-
});
|
|
102
|
-
return response.data;
|
|
103
|
-
}
|
|
104
|
-
catch (error) {
|
|
105
|
-
return handleError(error);
|
|
106
|
-
}
|
|
107
|
-
},
|
|
108
|
-
async delete(url, config) {
|
|
109
|
-
try {
|
|
110
|
-
const response = await axiosInstance.delete(url, {
|
|
111
|
-
params: config?.params,
|
|
112
|
-
headers: config?.headers,
|
|
113
|
-
timeout: config?.timeout,
|
|
114
|
-
});
|
|
115
|
-
return response.data;
|
|
116
|
-
}
|
|
117
|
-
catch (error) {
|
|
118
|
-
return handleError(error);
|
|
119
|
-
}
|
|
120
|
-
},
|
|
121
|
-
};
|
|
122
|
-
};
|
|
123
|
-
exports.createApiClient = createApiClient;
|
|
124
|
-
/**
|
|
125
|
-
* Create a web-optimized API client
|
|
126
|
-
*
|
|
127
|
-
* @param baseURL - API base URL
|
|
128
|
-
* @returns API client configured for web environments
|
|
129
|
-
*/
|
|
130
|
-
const createWebApiClient = (baseURL) => {
|
|
131
|
-
return (0, exports.createApiClient)({
|
|
132
|
-
baseURL,
|
|
133
|
-
withCredentials: true,
|
|
134
|
-
defaultHeaders: {
|
|
135
|
-
'X-Requested-With': 'XMLHttpRequest',
|
|
136
|
-
},
|
|
137
|
-
});
|
|
138
|
-
};
|
|
139
|
-
exports.createWebApiClient = createWebApiClient;
|
|
140
|
-
/**
|
|
141
|
-
* Create a mobile-optimized API client
|
|
142
|
-
*
|
|
143
|
-
* @param baseURL - API base URL
|
|
144
|
-
* @returns API client configured for mobile environments
|
|
145
|
-
*/
|
|
146
|
-
const createMobileApiClient = (baseURL) => {
|
|
147
|
-
return (0, exports.createApiClient)({
|
|
148
|
-
baseURL,
|
|
149
|
-
withCredentials: false, // Mobile doesn't use cookies
|
|
150
|
-
defaultHeaders: {
|
|
151
|
-
'X-Platform': 'mobile',
|
|
152
|
-
},
|
|
153
|
-
});
|
|
154
|
-
};
|
|
155
|
-
exports.createMobileApiClient = createMobileApiClient;
|
|
156
|
-
/**
|
|
157
|
-
* Utility function to check if an error is an API error
|
|
158
|
-
*/
|
|
159
|
-
const isApiError = (error) => {
|
|
160
|
-
return (typeof error === 'object' &&
|
|
161
|
-
error !== null &&
|
|
162
|
-
'message' in error &&
|
|
163
|
-
typeof error.message === 'string');
|
|
164
|
-
};
|
|
165
|
-
exports.isApiError = isApiError;
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pure Authentication Operations
|
|
3
|
-
*
|
|
4
|
-
* All authentication operations as pure functions with explicit dependencies.
|
|
5
|
-
* No side effects, no global state - everything is explicit and testable.
|
|
6
|
-
*/
|
|
7
|
-
import type { ApiClient } from '../../api/functional-client';
|
|
8
|
-
import type { UserProfile, TokenPair } from './auth-state';
|
|
9
|
-
export type { TokenPair } from './auth-state';
|
|
10
|
-
export interface TokenStorage {
|
|
11
|
-
storeTokens(tokens: TokenPair): Promise<void>;
|
|
12
|
-
retrieveTokens(): Promise<TokenPair | null>;
|
|
13
|
-
clearTokens(): Promise<void>;
|
|
14
|
-
}
|
|
15
|
-
export interface AuthDependencies {
|
|
16
|
-
apiClient: ApiClient;
|
|
17
|
-
tokenStorage: TokenStorage;
|
|
18
|
-
}
|
|
19
|
-
export interface SigninPayload {
|
|
20
|
-
email: string;
|
|
21
|
-
password: string;
|
|
22
|
-
}
|
|
23
|
-
export interface SignupPayload {
|
|
24
|
-
email: string;
|
|
25
|
-
password: string;
|
|
26
|
-
passwordConfirm: string;
|
|
27
|
-
firstName?: string;
|
|
28
|
-
lastName?: string;
|
|
29
|
-
}
|
|
30
|
-
export interface EmailVerificationPayload {
|
|
31
|
-
token: string;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Sign in with credentials
|
|
35
|
-
*
|
|
36
|
-
* @param credentials - User login credentials
|
|
37
|
-
* @param deps - Required dependencies (API client and token storage)
|
|
38
|
-
* @returns Promise resolving to user profile and tokens
|
|
39
|
-
*/
|
|
40
|
-
export declare const signin: (credentials: SigninPayload, deps: AuthDependencies) => Promise<{
|
|
41
|
-
user: UserProfile;
|
|
42
|
-
tokens: TokenPair;
|
|
43
|
-
}>;
|
|
44
|
-
/**
|
|
45
|
-
* Sign out user
|
|
46
|
-
*
|
|
47
|
-
* @param deps - Required dependencies
|
|
48
|
-
* @returns Promise resolving when signout is complete
|
|
49
|
-
*/
|
|
50
|
-
export declare const signout: (deps: AuthDependencies) => Promise<void>;
|
|
51
|
-
/**
|
|
52
|
-
* Sign up new user
|
|
53
|
-
*
|
|
54
|
-
* @param userData - User registration data
|
|
55
|
-
* @param deps - Required dependencies
|
|
56
|
-
* @returns Promise resolving to success status and optional message
|
|
57
|
-
*/
|
|
58
|
-
export declare const signup: (userData: SignupPayload, deps: AuthDependencies) => Promise<{
|
|
59
|
-
success: boolean;
|
|
60
|
-
message?: string;
|
|
61
|
-
}>;
|
|
62
|
-
/**
|
|
63
|
-
* Refresh authentication tokens
|
|
64
|
-
*
|
|
65
|
-
* @param currentTokens - Current token pair
|
|
66
|
-
* @param deps - Required dependencies
|
|
67
|
-
* @returns Promise resolving to new token pair
|
|
68
|
-
*/
|
|
69
|
-
export declare const refreshTokens: (currentTokens: TokenPair, deps: AuthDependencies) => Promise<TokenPair>;
|
|
70
|
-
/**
|
|
71
|
-
* Get user profile from API
|
|
72
|
-
*
|
|
73
|
-
* @param apiClient - API client instance
|
|
74
|
-
* @returns Promise resolving to user profile
|
|
75
|
-
*/
|
|
76
|
-
export declare const getUserProfile: (apiClient: ApiClient) => Promise<UserProfile>;
|
|
77
|
-
/**
|
|
78
|
-
* Verify email address
|
|
79
|
-
*
|
|
80
|
-
* @param verificationData - Email verification data
|
|
81
|
-
* @param deps - Required dependencies
|
|
82
|
-
* @returns Promise resolving to success status
|
|
83
|
-
*/
|
|
84
|
-
export declare const verifyEmail: (verificationData: EmailVerificationPayload, deps: AuthDependencies) => Promise<{
|
|
85
|
-
success: boolean;
|
|
86
|
-
message?: string;
|
|
87
|
-
}>;
|
|
88
|
-
/**
|
|
89
|
-
* Resend verification code
|
|
90
|
-
*
|
|
91
|
-
* @param deps - Required dependencies
|
|
92
|
-
* @returns Promise resolving to success status
|
|
93
|
-
*/
|
|
94
|
-
export declare const resendVerificationCode: (deps: AuthDependencies) => Promise<{
|
|
95
|
-
success: boolean;
|
|
96
|
-
message?: string;
|
|
97
|
-
}>;
|
|
98
|
-
/**
|
|
99
|
-
* Initialize authentication from stored tokens
|
|
100
|
-
*
|
|
101
|
-
* @param deps - Required dependencies
|
|
102
|
-
* @returns Promise resolving to user and tokens if valid, null otherwise
|
|
103
|
-
*/
|
|
104
|
-
export declare const initializeFromStorage: (deps: AuthDependencies) => Promise<{
|
|
105
|
-
user: UserProfile;
|
|
106
|
-
tokens: TokenPair;
|
|
107
|
-
} | null>;
|
|
108
|
-
/**
|
|
109
|
-
* Validate signin credentials
|
|
110
|
-
*/
|
|
111
|
-
export declare const validateSigninCredentials: (credentials: SigninPayload) => string[];
|
|
112
|
-
/**
|
|
113
|
-
* Validate signup data
|
|
114
|
-
*/
|
|
115
|
-
export declare const validateSignupData: (userData: SignupPayload) => string[];
|
|
116
|
-
//# sourceMappingURL=auth-operations.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth-operations.d.ts","sourceRoot":"","sources":["../../../src/auth/functional/auth-operations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG3D,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,cAAc,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAC5C,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAGD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAGD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;CACf;AAoBD;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,GACjB,aAAa,aAAa,EAC1B,MAAM,gBAAgB,KACrB,OAAO,CAAC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,CAqBlD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAU,MAAM,gBAAgB,KAAG,OAAO,CAAC,IAAI,CAUlE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,GACjB,UAAU,aAAa,EACvB,MAAM,gBAAgB,KACrB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAahD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GACxB,eAAe,SAAS,EACxB,MAAM,gBAAgB,KACrB,OAAO,CAAC,SAAS,CAqBnB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAU,WAAW,SAAS,KAAG,OAAO,CAAC,WAAW,CAM9E,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GACtB,kBAAkB,wBAAwB,EAC1C,MAAM,gBAAgB,KACrB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAOhD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,gBAAgB,KACrB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAOhD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,MAAM,gBAAgB,KACrB,OAAO,CAAC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GAAG,IAAI,CAiBzD,CAAC;AAkCF;;GAEG;AACH,eAAO,MAAM,yBAAyB,GAAI,aAAa,aAAa,KAAG,MAAM,EAc5E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,UAAU,aAAa,KAAG,MAAM,EAkBlE,CAAC"}
|