beddel 0.2.2 → 0.3.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/CHANGELOG.md +50 -0
- package/README.md +117 -14
- package/dist/agents/chat/chat.handler.d.ts +12 -0
- package/dist/agents/chat/chat.handler.d.ts.map +1 -0
- package/dist/agents/chat/chat.handler.js +145 -0
- package/dist/agents/chat/chat.handler.js.map +1 -0
- package/dist/agents/chat/chat.schema.d.ts +38 -0
- package/dist/agents/chat/chat.schema.d.ts.map +1 -0
- package/dist/agents/chat/chat.schema.js +31 -0
- package/dist/agents/chat/chat.schema.js.map +1 -0
- package/dist/agents/chat/chat.types.d.ts +42 -0
- package/dist/agents/chat/chat.types.d.ts.map +1 -0
- package/dist/agents/chat/chat.types.js +6 -0
- package/dist/agents/chat/chat.types.js.map +1 -0
- package/dist/agents/chat/chat.yaml +148 -0
- package/dist/agents/chat/index.d.ts +16 -0
- package/dist/agents/chat/index.d.ts.map +1 -0
- package/dist/agents/chat/index.js +21 -0
- package/dist/agents/chat/index.js.map +1 -0
- package/dist/agents/chromadb/chromadb.handler.d.ts +12 -0
- package/dist/agents/chromadb/chromadb.handler.d.ts.map +1 -0
- package/dist/agents/chromadb/chromadb.handler.js +139 -0
- package/dist/agents/chromadb/chromadb.handler.js.map +1 -0
- package/dist/agents/chromadb/chromadb.schema.d.ts +36 -0
- package/dist/agents/chromadb/chromadb.schema.d.ts.map +1 -0
- package/dist/agents/chromadb/chromadb.schema.js +33 -0
- package/dist/agents/chromadb/chromadb.schema.js.map +1 -0
- package/dist/agents/chromadb/chromadb.types.d.ts +49 -0
- package/dist/agents/chromadb/chromadb.types.d.ts.map +1 -0
- package/dist/agents/chromadb/chromadb.types.js +6 -0
- package/dist/agents/chromadb/chromadb.types.js.map +1 -0
- package/dist/agents/chromadb/chromadb.yaml +128 -0
- package/dist/agents/chromadb/index.d.ts +15 -0
- package/dist/agents/chromadb/index.d.ts.map +1 -0
- package/dist/agents/chromadb/index.js +20 -0
- package/dist/agents/chromadb/index.js.map +1 -0
- package/dist/agents/gemini-vectorize/gemini-vectorize.handler.d.ts +8 -0
- package/dist/agents/gemini-vectorize/gemini-vectorize.handler.d.ts.map +1 -0
- package/dist/agents/gemini-vectorize/gemini-vectorize.handler.js +61 -0
- package/dist/agents/gemini-vectorize/gemini-vectorize.handler.js.map +1 -0
- package/dist/agents/gemini-vectorize/gemini-vectorize.schema.d.ts +22 -0
- package/dist/agents/gemini-vectorize/gemini-vectorize.schema.d.ts.map +1 -0
- package/dist/agents/gemini-vectorize/gemini-vectorize.schema.js +20 -0
- package/dist/agents/gemini-vectorize/gemini-vectorize.schema.js.map +1 -0
- package/dist/agents/gemini-vectorize/gemini-vectorize.types.d.ts +32 -0
- package/dist/agents/gemini-vectorize/gemini-vectorize.types.d.ts.map +1 -0
- package/dist/agents/gemini-vectorize/gemini-vectorize.types.js +6 -0
- package/dist/agents/gemini-vectorize/gemini-vectorize.types.js.map +1 -0
- package/dist/agents/gemini-vectorize/gemini-vectorize.yaml +84 -0
- package/dist/agents/gemini-vectorize/index.d.ts +15 -0
- package/dist/agents/gemini-vectorize/index.d.ts.map +1 -0
- package/dist/agents/gemini-vectorize/index.js +20 -0
- package/dist/agents/gemini-vectorize/index.js.map +1 -0
- package/dist/agents/gitmcp/gitmcp.handler.d.ts +12 -0
- package/dist/agents/gitmcp/gitmcp.handler.d.ts.map +1 -0
- package/dist/agents/gitmcp/gitmcp.handler.js +95 -0
- package/dist/agents/gitmcp/gitmcp.handler.js.map +1 -0
- package/dist/agents/gitmcp/gitmcp.schema.d.ts +17 -0
- package/dist/agents/gitmcp/gitmcp.schema.d.ts.map +1 -0
- package/dist/agents/gitmcp/gitmcp.schema.js +18 -0
- package/dist/agents/gitmcp/gitmcp.schema.js.map +1 -0
- package/dist/agents/gitmcp/gitmcp.types.d.ts +31 -0
- package/dist/agents/gitmcp/gitmcp.types.d.ts.map +1 -0
- package/dist/agents/gitmcp/gitmcp.types.js +6 -0
- package/dist/agents/gitmcp/gitmcp.types.js.map +1 -0
- package/dist/agents/gitmcp/gitmcp.yaml +71 -0
- package/dist/agents/gitmcp/index.d.ts +16 -0
- package/dist/agents/gitmcp/index.d.ts.map +1 -0
- package/dist/agents/gitmcp/index.js +21 -0
- package/dist/agents/gitmcp/index.js.map +1 -0
- package/dist/agents/image/image.handler.d.ts +8 -0
- package/dist/agents/image/image.handler.d.ts.map +1 -0
- package/dist/agents/image/image.handler.js +69 -0
- package/dist/agents/image/image.handler.js.map +1 -0
- package/dist/agents/image/image.schema.d.ts +29 -0
- package/dist/agents/image/image.schema.d.ts.map +1 -0
- package/dist/agents/image/image.schema.js +26 -0
- package/dist/agents/image/image.schema.js.map +1 -0
- package/dist/agents/image/image.types.d.ts +43 -0
- package/dist/agents/image/image.types.d.ts.map +1 -0
- package/dist/agents/image/image.types.js +6 -0
- package/dist/agents/image/image.types.js.map +1 -0
- package/{src/agents/image-agent.yaml → dist/agents/image/image.yaml} +21 -21
- package/dist/agents/image/index.d.ts +14 -0
- package/dist/agents/image/index.d.ts.map +1 -0
- package/dist/agents/image/index.js +19 -0
- package/dist/agents/image/index.js.map +1 -0
- package/dist/agents/index.d.ts +104 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +82 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/joker/index.d.ts +14 -0
- package/dist/agents/joker/index.d.ts.map +1 -0
- package/dist/agents/joker/index.js +19 -0
- package/dist/agents/joker/index.js.map +1 -0
- package/dist/agents/joker/joker.handler.d.ts +8 -0
- package/dist/agents/joker/joker.handler.d.ts.map +1 -0
- package/dist/agents/joker/joker.handler.js +44 -0
- package/dist/agents/joker/joker.handler.js.map +1 -0
- package/dist/agents/joker/joker.schema.d.ts +12 -0
- package/dist/agents/joker/joker.schema.d.ts.map +1 -0
- package/dist/agents/joker/joker.schema.js +13 -0
- package/dist/agents/joker/joker.schema.js.map +1 -0
- package/dist/agents/joker/joker.types.d.ts +36 -0
- package/dist/agents/joker/joker.types.d.ts.map +1 -0
- package/dist/agents/joker/joker.types.js +6 -0
- package/dist/agents/joker/joker.types.js.map +1 -0
- package/{src/agents/joker-agent.yaml → dist/agents/joker/joker.yaml} +4 -4
- package/dist/agents/llm/index.d.ts +15 -0
- package/dist/agents/llm/index.d.ts.map +1 -0
- package/dist/agents/llm/index.js +20 -0
- package/dist/agents/llm/index.js.map +1 -0
- package/dist/agents/llm/llm.handler.d.ts +8 -0
- package/dist/agents/llm/llm.handler.d.ts.map +1 -0
- package/dist/agents/llm/llm.handler.js +64 -0
- package/dist/agents/llm/llm.handler.js.map +1 -0
- package/dist/agents/llm/llm.schema.d.ts +26 -0
- package/dist/agents/llm/llm.schema.d.ts.map +1 -0
- package/dist/agents/llm/llm.schema.js +23 -0
- package/dist/agents/llm/llm.schema.js.map +1 -0
- package/dist/agents/llm/llm.types.d.ts +34 -0
- package/dist/agents/llm/llm.types.d.ts.map +1 -0
- package/dist/agents/llm/llm.types.js +7 -0
- package/dist/agents/llm/llm.types.js.map +1 -0
- package/dist/agents/llm/llm.yaml +87 -0
- package/dist/agents/mcp-tool/index.d.ts +14 -0
- package/dist/agents/mcp-tool/index.d.ts.map +1 -0
- package/dist/agents/mcp-tool/index.js +19 -0
- package/dist/agents/mcp-tool/index.js.map +1 -0
- package/dist/agents/mcp-tool/mcp-tool.handler.d.ts +12 -0
- package/dist/agents/mcp-tool/mcp-tool.handler.d.ts.map +1 -0
- package/dist/agents/mcp-tool/mcp-tool.handler.js +116 -0
- package/dist/agents/mcp-tool/mcp-tool.handler.js.map +1 -0
- package/dist/agents/mcp-tool/mcp-tool.schema.d.ts +19 -0
- package/dist/agents/mcp-tool/mcp-tool.schema.d.ts.map +1 -0
- package/dist/agents/mcp-tool/mcp-tool.schema.js +20 -0
- package/dist/agents/mcp-tool/mcp-tool.schema.js.map +1 -0
- package/dist/agents/mcp-tool/mcp-tool.types.d.ts +31 -0
- package/dist/agents/mcp-tool/mcp-tool.types.d.ts.map +1 -0
- package/dist/agents/mcp-tool/mcp-tool.types.js +6 -0
- package/dist/agents/mcp-tool/mcp-tool.types.js.map +1 -0
- package/dist/agents/mcp-tool/mcp-tool.yaml +71 -0
- package/dist/agents/rag/index.d.ts +15 -0
- package/dist/agents/rag/index.d.ts.map +1 -0
- package/dist/agents/rag/index.js +20 -0
- package/dist/agents/rag/index.js.map +1 -0
- package/dist/agents/rag/rag.handler.d.ts +9 -0
- package/dist/agents/rag/rag.handler.d.ts.map +1 -0
- package/dist/agents/rag/rag.handler.js +78 -0
- package/dist/agents/rag/rag.handler.js.map +1 -0
- package/dist/agents/rag/rag.schema.d.ts +27 -0
- package/dist/agents/rag/rag.schema.d.ts.map +1 -0
- package/dist/agents/rag/rag.schema.js +24 -0
- package/dist/agents/rag/rag.schema.js.map +1 -0
- package/dist/agents/rag/rag.types.d.ts +42 -0
- package/dist/agents/rag/rag.types.d.ts.map +1 -0
- package/dist/agents/rag/rag.types.js +7 -0
- package/dist/agents/rag/rag.types.js.map +1 -0
- package/dist/agents/rag/rag.yaml +89 -0
- package/dist/agents/{agentRegistry.d.ts → registry/agentRegistry.d.ts} +30 -1
- package/dist/agents/registry/agentRegistry.d.ts.map +1 -0
- package/dist/agents/{agentRegistry.js → registry/agentRegistry.js} +187 -5
- package/dist/agents/registry/agentRegistry.js.map +1 -0
- package/dist/agents/registry/index.d.ts +6 -0
- package/dist/agents/registry/index.d.ts.map +1 -0
- package/dist/agents/registry/index.js +10 -0
- package/dist/agents/registry/index.js.map +1 -0
- package/dist/agents/translator/index.d.ts +14 -0
- package/dist/agents/translator/index.d.ts.map +1 -0
- package/dist/agents/translator/index.js +19 -0
- package/dist/agents/translator/index.js.map +1 -0
- package/dist/agents/translator/translator.handler.d.ts +8 -0
- package/dist/agents/translator/translator.handler.d.ts.map +1 -0
- package/dist/agents/translator/translator.handler.js +81 -0
- package/dist/agents/translator/translator.handler.js.map +1 -0
- package/dist/agents/translator/translator.schema.d.ts +27 -0
- package/dist/agents/translator/translator.schema.d.ts.map +1 -0
- package/dist/agents/translator/translator.schema.js +28 -0
- package/dist/agents/translator/translator.schema.js.map +1 -0
- package/dist/agents/translator/translator.types.d.ts +41 -0
- package/dist/agents/translator/translator.types.d.ts.map +1 -0
- package/dist/agents/translator/translator.types.js +6 -0
- package/dist/agents/translator/translator.types.js.map +1 -0
- package/{src/agents/translator-agent.yaml → dist/agents/translator/translator.yaml} +27 -27
- package/dist/client/index.d.ts +89 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +93 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/types.d.ts +17 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +7 -0
- package/dist/client/types.js.map +1 -0
- package/dist/firebase/tenantManager.d.ts +34 -2
- package/dist/firebase/tenantManager.d.ts.map +1 -1
- package/dist/firebase/tenantManager.js +67 -1
- package/dist/firebase/tenantManager.js.map +1 -1
- package/dist/index.d.ts +10 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -7
- package/dist/index.js.map +1 -1
- package/dist/runtime/declarativeAgentRuntime.d.ts +17 -52
- package/dist/runtime/declarativeAgentRuntime.d.ts.map +1 -1
- package/dist/runtime/declarativeAgentRuntime.js +259 -361
- package/dist/runtime/declarativeAgentRuntime.js.map +1 -1
- package/dist/runtime/index.d.ts +14 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +38 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/llmProviderFactory.d.ts +47 -0
- package/dist/runtime/llmProviderFactory.d.ts.map +1 -0
- package/dist/runtime/llmProviderFactory.js +119 -0
- package/dist/runtime/llmProviderFactory.js.map +1 -0
- package/dist/runtime/workflowExecutor.d.ts +31 -0
- package/dist/runtime/workflowExecutor.d.ts.map +1 -0
- package/dist/runtime/workflowExecutor.js +80 -0
- package/dist/runtime/workflowExecutor.js.map +1 -0
- package/dist/server/api/graphql.js +3 -3
- package/dist/server/api/graphql.js.map +1 -1
- package/dist/server/index.d.ts +2 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -2
- package/dist/server/index.js.map +1 -1
- package/dist/shared/index.d.ts +7 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +23 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/types/agent.types.d.ts +63 -0
- package/dist/shared/types/agent.types.d.ts.map +1 -0
- package/dist/shared/types/agent.types.js +18 -0
- package/dist/shared/types/agent.types.js.map +1 -0
- package/dist/shared/types/execution.types.d.ts +42 -0
- package/dist/shared/types/execution.types.d.ts.map +1 -0
- package/dist/shared/types/execution.types.js +7 -0
- package/dist/shared/types/execution.types.js.map +1 -0
- package/dist/shared/types/index.d.ts +7 -0
- package/dist/shared/types/index.d.ts.map +1 -0
- package/dist/shared/types/index.js +23 -0
- package/dist/shared/types/index.js.map +1 -0
- package/dist/shared/types/schema.types.d.ts +52 -0
- package/dist/shared/types/schema.types.d.ts.map +1 -0
- package/dist/shared/types/schema.types.js +7 -0
- package/dist/shared/types/schema.types.js.map +1 -0
- package/dist/shared/utils/index.d.ts +5 -0
- package/dist/shared/utils/index.d.ts.map +1 -0
- package/dist/shared/utils/index.js +21 -0
- package/dist/shared/utils/index.js.map +1 -0
- package/dist/shared/utils/validation.d.ts +42 -0
- package/dist/shared/utils/validation.d.ts.map +1 -0
- package/dist/shared/utils/validation.js +93 -0
- package/dist/shared/utils/validation.js.map +1 -0
- package/dist/tenant/TenantManager.d.ts +152 -0
- package/dist/tenant/TenantManager.d.ts.map +1 -0
- package/dist/tenant/TenantManager.js +392 -0
- package/dist/tenant/TenantManager.js.map +1 -0
- package/dist/tenant/index.d.ts +47 -0
- package/dist/tenant/index.d.ts.map +1 -0
- package/dist/tenant/index.js +74 -0
- package/dist/tenant/index.js.map +1 -0
- package/dist/tenant/interfaces.d.ts +170 -0
- package/dist/tenant/interfaces.d.ts.map +1 -0
- package/dist/tenant/interfaces.js +67 -0
- package/dist/tenant/interfaces.js.map +1 -0
- package/dist/tenant/providerFactory.d.ts +43 -0
- package/dist/tenant/providerFactory.d.ts.map +1 -0
- package/dist/tenant/providerFactory.js +70 -0
- package/dist/tenant/providerFactory.js.map +1 -0
- package/dist/tenant/providerRegistry.d.ts +47 -0
- package/dist/tenant/providerRegistry.d.ts.map +1 -0
- package/dist/tenant/providerRegistry.js +79 -0
- package/dist/tenant/providerRegistry.js.map +1 -0
- package/dist/tenant/providers/FirebaseTenantProvider.d.ts +41 -0
- package/dist/tenant/providers/FirebaseTenantProvider.d.ts.map +1 -0
- package/dist/tenant/providers/FirebaseTenantProvider.js +290 -0
- package/dist/tenant/providers/FirebaseTenantProvider.js.map +1 -0
- package/dist/tenant/providers/InMemoryTenantProvider.d.ts +18 -0
- package/dist/tenant/providers/InMemoryTenantProvider.d.ts.map +1 -0
- package/dist/tenant/providers/InMemoryTenantProvider.js +137 -0
- package/dist/tenant/providers/InMemoryTenantProvider.js.map +1 -0
- package/package.json +46 -10
- package/src/agents/chat/chat.handler.ts +211 -0
- package/src/agents/chat/chat.schema.ts +33 -0
- package/src/agents/chat/chat.types.ts +46 -0
- package/src/agents/chat/chat.yaml +148 -0
- package/src/agents/chat/index.ts +21 -0
- package/src/agents/chromadb/chromadb.handler.ts +130 -0
- package/src/agents/chromadb/chromadb.schema.ts +35 -0
- package/src/agents/chromadb/chromadb.types.ts +52 -0
- package/src/agents/chromadb/chromadb.yaml +128 -0
- package/src/agents/chromadb/index.ts +20 -0
- package/src/agents/gemini-vectorize/gemini-vectorize.handler.ts +75 -0
- package/src/agents/gemini-vectorize/gemini-vectorize.schema.ts +22 -0
- package/src/agents/gemini-vectorize/gemini-vectorize.types.ts +34 -0
- package/src/agents/gemini-vectorize/gemini-vectorize.yaml +84 -0
- package/src/agents/gemini-vectorize/index.ts +20 -0
- package/src/agents/gitmcp/gitmcp.handler.ts +122 -0
- package/src/agents/gitmcp/gitmcp.schema.ts +20 -0
- package/src/agents/gitmcp/gitmcp.types.ts +33 -0
- package/src/agents/gitmcp/gitmcp.yaml +71 -0
- package/src/agents/gitmcp/index.ts +21 -0
- package/src/agents/image/image.handler.ts +86 -0
- package/src/agents/image/image.schema.ts +28 -0
- package/src/agents/image/image.types.ts +46 -0
- package/src/agents/image/image.yaml +86 -0
- package/src/agents/image/index.ts +19 -0
- package/src/agents/index.ts +63 -0
- package/src/agents/joker/index.ts +19 -0
- package/src/agents/joker/joker.handler.ts +55 -0
- package/src/agents/joker/joker.schema.ts +15 -0
- package/src/agents/joker/joker.types.ts +38 -0
- package/src/agents/joker/joker.yaml +47 -0
- package/src/agents/llm/index.ts +20 -0
- package/src/agents/llm/llm.handler.ts +82 -0
- package/src/agents/llm/llm.schema.ts +25 -0
- package/src/agents/llm/llm.types.ts +37 -0
- package/src/agents/llm/llm.yaml +87 -0
- package/src/agents/mcp-tool/index.ts +19 -0
- package/src/agents/mcp-tool/mcp-tool.handler.ts +112 -0
- package/src/agents/mcp-tool/mcp-tool.schema.ts +22 -0
- package/src/agents/mcp-tool/mcp-tool.types.ts +33 -0
- package/src/agents/mcp-tool/mcp-tool.yaml +71 -0
- package/src/agents/rag/index.ts +20 -0
- package/src/agents/rag/rag.handler.ts +95 -0
- package/src/agents/rag/rag.schema.ts +26 -0
- package/src/agents/rag/rag.types.ts +45 -0
- package/src/agents/rag/rag.yaml +89 -0
- package/src/agents/{agentRegistry.ts → registry/agentRegistry.ts} +195 -6
- package/src/agents/registry/index.ts +6 -0
- package/src/agents/translator/index.ts +19 -0
- package/src/agents/translator/translator.handler.ts +97 -0
- package/src/agents/translator/translator.schema.ts +30 -0
- package/src/agents/translator/translator.types.ts +43 -0
- package/src/agents/translator/translator.yaml +80 -0
- package/src/client/index.ts +53 -0
- package/src/client/types.ts +38 -0
- package/src/index.ts +56 -5
- package/src/runtime/declarativeAgentRuntime.ts +378 -495
- package/src/runtime/index.ts +36 -0
- package/src/runtime/llmProviderFactory.ts +145 -0
- package/src/runtime/workflowExecutor.ts +107 -0
- package/src/server/api/graphql.ts +1 -1
- package/src/server/index.ts +2 -2
- package/src/shared/index.ts +7 -0
- package/src/shared/types/agent.types.ts +100 -0
- package/src/shared/types/execution.types.ts +45 -0
- package/src/shared/types/index.ts +7 -0
- package/src/shared/types/schema.types.ts +55 -0
- package/src/shared/utils/index.ts +5 -0
- package/src/shared/utils/validation.ts +100 -0
- package/src/tenant/TenantManager.ts +488 -0
- package/src/tenant/index.ts +101 -0
- package/src/tenant/interfaces.ts +231 -0
- package/src/tenant/providerFactory.ts +75 -0
- package/src/tenant/providerRegistry.ts +86 -0
- package/src/tenant/providers/InMemoryTenantProvider.ts +168 -0
- package/dist/agents/agentRegistry.d.ts.map +0 -1
- package/dist/agents/agentRegistry.js.map +0 -1
- package/src/firebase/tenantManager.ts +0 -443
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agnostic Multi-Tenant Interfaces
|
|
3
|
+
* Provider-independent abstractions for multi-tenant operations
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Built-in provider type
|
|
7
|
+
*/
|
|
8
|
+
export type BuiltInProviderType = 'memory';
|
|
9
|
+
/**
|
|
10
|
+
* Provider type accepts built-in or any registered external type
|
|
11
|
+
*/
|
|
12
|
+
export type ProviderType = BuiltInProviderType | string;
|
|
13
|
+
/**
|
|
14
|
+
* Firebase-specific provider configuration
|
|
15
|
+
*/
|
|
16
|
+
export interface FirebaseProviderConfig {
|
|
17
|
+
projectId: string;
|
|
18
|
+
databaseURL: string;
|
|
19
|
+
storageBucket: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* In-memory provider configuration (for testing)
|
|
23
|
+
*/
|
|
24
|
+
export interface MemoryProviderConfig {
|
|
25
|
+
persistToDisk?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Provider-agnostic tenant configuration
|
|
29
|
+
*/
|
|
30
|
+
export interface TenantConfig {
|
|
31
|
+
tenantId: string;
|
|
32
|
+
securityProfile: 'ultra-secure' | 'tenant-isolated';
|
|
33
|
+
dataRetentionDays: number;
|
|
34
|
+
lgpdEnabled: boolean;
|
|
35
|
+
gdprEnabled: boolean;
|
|
36
|
+
provider: ProviderType;
|
|
37
|
+
providerConfig: FirebaseProviderConfig | MemoryProviderConfig;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Abstract provider interface for tenant management
|
|
41
|
+
* Implements Strategy pattern for swappable backends
|
|
42
|
+
*/
|
|
43
|
+
export interface ITenantProvider {
|
|
44
|
+
/**
|
|
45
|
+
* Initialize a new tenant with the given configuration
|
|
46
|
+
* @throws TenantAlreadyExistsError if tenant already exists
|
|
47
|
+
* @throws ValidationError if configuration is invalid
|
|
48
|
+
*/
|
|
49
|
+
initialize(config: TenantConfig): Promise<ITenantApp>;
|
|
50
|
+
/**
|
|
51
|
+
* Get an existing tenant app by ID
|
|
52
|
+
* @throws NotFoundError if tenant does not exist
|
|
53
|
+
*/
|
|
54
|
+
get(tenantId: string): ITenantApp;
|
|
55
|
+
/**
|
|
56
|
+
* Remove a tenant and release all associated resources
|
|
57
|
+
* @throws NotFoundError if tenant does not exist
|
|
58
|
+
*/
|
|
59
|
+
remove(tenantId: string): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* List all active tenant IDs
|
|
62
|
+
*/
|
|
63
|
+
list(): string[];
|
|
64
|
+
/**
|
|
65
|
+
* The type of this provider
|
|
66
|
+
*/
|
|
67
|
+
readonly type: ProviderType;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Abstract tenant app representing an isolated tenant instance
|
|
71
|
+
*/
|
|
72
|
+
export interface ITenantApp {
|
|
73
|
+
/**
|
|
74
|
+
* Unique identifier for this tenant
|
|
75
|
+
*/
|
|
76
|
+
readonly tenantId: string;
|
|
77
|
+
/**
|
|
78
|
+
* Get the database interface for this tenant
|
|
79
|
+
*/
|
|
80
|
+
getDatabase(): ITenantDatabase;
|
|
81
|
+
/**
|
|
82
|
+
* Destroy this tenant app and release resources
|
|
83
|
+
*/
|
|
84
|
+
destroy(): Promise<void>;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Abstract database interface for tenant data operations
|
|
88
|
+
*/
|
|
89
|
+
export interface ITenantDatabase {
|
|
90
|
+
/**
|
|
91
|
+
* Get a collection by name
|
|
92
|
+
*/
|
|
93
|
+
collection(name: string): ITenantCollection;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Abstract collection interface for document operations
|
|
97
|
+
*/
|
|
98
|
+
export interface ITenantCollection {
|
|
99
|
+
/**
|
|
100
|
+
* Get a document reference by ID
|
|
101
|
+
*/
|
|
102
|
+
doc(id: string): ITenantDocument;
|
|
103
|
+
/**
|
|
104
|
+
* Add a new document with auto-generated ID
|
|
105
|
+
* @returns The generated document ID
|
|
106
|
+
*/
|
|
107
|
+
add(data: Record<string, unknown>): Promise<string>;
|
|
108
|
+
/**
|
|
109
|
+
* Get all documents in this collection
|
|
110
|
+
*/
|
|
111
|
+
get(): Promise<Array<{
|
|
112
|
+
id: string;
|
|
113
|
+
data: Record<string, unknown>;
|
|
114
|
+
}>>;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Abstract document interface for CRUD operations
|
|
118
|
+
*/
|
|
119
|
+
export interface ITenantDocument {
|
|
120
|
+
/**
|
|
121
|
+
* Get the document data
|
|
122
|
+
* @returns Document data or null if not found
|
|
123
|
+
*/
|
|
124
|
+
get(): Promise<Record<string, unknown> | null>;
|
|
125
|
+
/**
|
|
126
|
+
* Set the document data (creates or overwrites)
|
|
127
|
+
*/
|
|
128
|
+
set(data: Record<string, unknown>): Promise<void>;
|
|
129
|
+
/**
|
|
130
|
+
* Update specific fields in the document
|
|
131
|
+
* @throws NotFoundError if document does not exist
|
|
132
|
+
*/
|
|
133
|
+
update(data: Record<string, unknown>): Promise<void>;
|
|
134
|
+
/**
|
|
135
|
+
* Delete the document
|
|
136
|
+
*/
|
|
137
|
+
delete(): Promise<void>;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Base error for tenant operations
|
|
141
|
+
*/
|
|
142
|
+
export declare class TenantError extends Error {
|
|
143
|
+
code?: string | undefined;
|
|
144
|
+
constructor(message: string, code?: string | undefined);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Thrown when configuration validation fails
|
|
148
|
+
*/
|
|
149
|
+
export declare class ValidationError extends TenantError {
|
|
150
|
+
constructor(message: string);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Thrown when a requested resource is not found
|
|
154
|
+
*/
|
|
155
|
+
export declare class NotFoundError extends TenantError {
|
|
156
|
+
constructor(message: string);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Thrown when an operation is not supported by the provider
|
|
160
|
+
*/
|
|
161
|
+
export declare class NotSupportedError extends TenantError {
|
|
162
|
+
constructor(message: string);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Thrown when attempting to create a tenant that already exists
|
|
166
|
+
*/
|
|
167
|
+
export declare class TenantAlreadyExistsError extends TenantError {
|
|
168
|
+
constructor(tenantId: string);
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/tenant/interfaces.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Agnostic Multi-Tenant Interfaces
|
|
4
|
+
* Provider-independent abstractions for multi-tenant operations
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.TenantAlreadyExistsError = exports.NotSupportedError = exports.NotFoundError = exports.ValidationError = exports.TenantError = void 0;
|
|
8
|
+
// =============================================================================
|
|
9
|
+
// Error Types
|
|
10
|
+
// =============================================================================
|
|
11
|
+
/**
|
|
12
|
+
* Base error for tenant operations
|
|
13
|
+
*/
|
|
14
|
+
class TenantError extends Error {
|
|
15
|
+
constructor(message, code) {
|
|
16
|
+
super(message);
|
|
17
|
+
this.code = code;
|
|
18
|
+
this.name = 'TenantError';
|
|
19
|
+
Object.setPrototypeOf(this, TenantError.prototype);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.TenantError = TenantError;
|
|
23
|
+
/**
|
|
24
|
+
* Thrown when configuration validation fails
|
|
25
|
+
*/
|
|
26
|
+
class ValidationError extends TenantError {
|
|
27
|
+
constructor(message) {
|
|
28
|
+
super(message, 'VALIDATION_ERROR');
|
|
29
|
+
this.name = 'ValidationError';
|
|
30
|
+
Object.setPrototypeOf(this, ValidationError.prototype);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.ValidationError = ValidationError;
|
|
34
|
+
/**
|
|
35
|
+
* Thrown when a requested resource is not found
|
|
36
|
+
*/
|
|
37
|
+
class NotFoundError extends TenantError {
|
|
38
|
+
constructor(message) {
|
|
39
|
+
super(message, 'NOT_FOUND');
|
|
40
|
+
this.name = 'NotFoundError';
|
|
41
|
+
Object.setPrototypeOf(this, NotFoundError.prototype);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.NotFoundError = NotFoundError;
|
|
45
|
+
/**
|
|
46
|
+
* Thrown when an operation is not supported by the provider
|
|
47
|
+
*/
|
|
48
|
+
class NotSupportedError extends TenantError {
|
|
49
|
+
constructor(message) {
|
|
50
|
+
super(message, 'NOT_SUPPORTED');
|
|
51
|
+
this.name = 'NotSupportedError';
|
|
52
|
+
Object.setPrototypeOf(this, NotSupportedError.prototype);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.NotSupportedError = NotSupportedError;
|
|
56
|
+
/**
|
|
57
|
+
* Thrown when attempting to create a tenant that already exists
|
|
58
|
+
*/
|
|
59
|
+
class TenantAlreadyExistsError extends TenantError {
|
|
60
|
+
constructor(tenantId) {
|
|
61
|
+
super(`Tenant '${tenantId}' already exists`, 'TENANT_EXISTS');
|
|
62
|
+
this.name = 'TenantAlreadyExistsError';
|
|
63
|
+
Object.setPrototypeOf(this, TenantAlreadyExistsError.prototype);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.TenantAlreadyExistsError = TenantAlreadyExistsError;
|
|
67
|
+
//# sourceMappingURL=interfaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/tenant/interfaces.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AA0KH,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF;;GAEG;AACH,MAAa,WAAY,SAAQ,KAAK;IACpC,YAAY,OAAe,EAAS,IAAa;QAC/C,KAAK,CAAC,OAAO,CAAC,CAAC;QADmB,SAAI,GAAJ,IAAI,CAAS;QAE/C,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IACrD,CAAC;CACF;AAND,kCAMC;AAED;;GAEG;AACH,MAAa,eAAgB,SAAQ,WAAW;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC;CACF;AAND,0CAMC;AAED;;GAEG;AACH,MAAa,aAAc,SAAQ,WAAW;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACvD,CAAC;CACF;AAND,sCAMC;AAED;;GAEG;AACH,MAAa,iBAAkB,SAAQ,WAAW;IAChD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC3D,CAAC;CACF;AAND,8CAMC;AAED;;GAEG;AACH,MAAa,wBAAyB,SAAQ,WAAW;IACvD,YAAY,QAAgB;QAC1B,KAAK,CAAC,WAAW,QAAQ,kBAAkB,EAAE,eAAe,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;QACvC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,wBAAwB,CAAC,SAAS,CAAC,CAAC;IAClE,CAAC;CACF;AAND,4DAMC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider Factory
|
|
3
|
+
* Factory function for creating tenant providers based on configuration
|
|
4
|
+
* Uses ProviderRegistry for dynamic provider registration
|
|
5
|
+
*/
|
|
6
|
+
import { ProviderType, ITenantProvider, BuiltInProviderType } from './interfaces';
|
|
7
|
+
/**
|
|
8
|
+
* Check if a value is a valid built-in ProviderType
|
|
9
|
+
*/
|
|
10
|
+
export declare function isBuiltInProviderType(type: unknown): type is BuiltInProviderType;
|
|
11
|
+
/**
|
|
12
|
+
* Check if a value is a valid ProviderType (built-in or registered)
|
|
13
|
+
*/
|
|
14
|
+
export declare function isValidProviderType(type: unknown): type is ProviderType;
|
|
15
|
+
/**
|
|
16
|
+
* Create a tenant provider instance based on the specified type
|
|
17
|
+
*
|
|
18
|
+
* @param type - The provider type to create (built-in or registered)
|
|
19
|
+
* @returns An instance of ITenantProvider for the specified type
|
|
20
|
+
* @throws ValidationError if the provider type is not registered
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* // Create an in-memory provider for testing (built-in)
|
|
25
|
+
* const memoryProvider = createProvider('memory');
|
|
26
|
+
*
|
|
27
|
+
* // Create a Firebase provider (must be registered by application first)
|
|
28
|
+
* // In your app: ProviderRegistry.register('firebase', () => new FirebaseTenantProvider());
|
|
29
|
+
* const firebaseProvider = createProvider('firebase');
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare function createProvider(type: ProviderType): ITenantProvider;
|
|
33
|
+
/**
|
|
34
|
+
* Get the list of supported provider types (built-in + registered)
|
|
35
|
+
* @returns Array of supported provider type strings
|
|
36
|
+
*/
|
|
37
|
+
export declare function getSupportedProviders(): string[];
|
|
38
|
+
/**
|
|
39
|
+
* Get the list of built-in provider types
|
|
40
|
+
* @returns Array of built-in provider type strings
|
|
41
|
+
*/
|
|
42
|
+
export declare function getBuiltInProviders(): readonly BuiltInProviderType[];
|
|
43
|
+
//# sourceMappingURL=providerFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerFactory.d.ts","sourceRoot":"","sources":["../../src/tenant/providerFactory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,YAAY,EACZ,eAAe,EACf,mBAAmB,EACpB,MAAM,cAAc,CAAC;AAYtB;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,mBAAmB,CAEhF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,YAAY,CAKvE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,eAAe,CAElE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,SAAS,mBAAmB,EAAE,CAEpE"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Provider Factory
|
|
4
|
+
* Factory function for creating tenant providers based on configuration
|
|
5
|
+
* Uses ProviderRegistry for dynamic provider registration
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.isBuiltInProviderType = isBuiltInProviderType;
|
|
9
|
+
exports.isValidProviderType = isValidProviderType;
|
|
10
|
+
exports.createProvider = createProvider;
|
|
11
|
+
exports.getSupportedProviders = getSupportedProviders;
|
|
12
|
+
exports.getBuiltInProviders = getBuiltInProviders;
|
|
13
|
+
const providerRegistry_1 = require("./providerRegistry");
|
|
14
|
+
const InMemoryTenantProvider_1 = require("./providers/InMemoryTenantProvider");
|
|
15
|
+
/**
|
|
16
|
+
* Built-in provider types
|
|
17
|
+
*/
|
|
18
|
+
const BUILTIN_PROVIDERS = ['memory'];
|
|
19
|
+
// Register built-in provider on module load
|
|
20
|
+
providerRegistry_1.ProviderRegistry.register('memory', () => new InMemoryTenantProvider_1.InMemoryTenantProvider());
|
|
21
|
+
/**
|
|
22
|
+
* Check if a value is a valid built-in ProviderType
|
|
23
|
+
*/
|
|
24
|
+
function isBuiltInProviderType(type) {
|
|
25
|
+
return typeof type === 'string' && BUILTIN_PROVIDERS.includes(type);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Check if a value is a valid ProviderType (built-in or registered)
|
|
29
|
+
*/
|
|
30
|
+
function isValidProviderType(type) {
|
|
31
|
+
if (typeof type !== 'string') {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
return isBuiltInProviderType(type) || providerRegistry_1.ProviderRegistry.isRegistered(type);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Create a tenant provider instance based on the specified type
|
|
38
|
+
*
|
|
39
|
+
* @param type - The provider type to create (built-in or registered)
|
|
40
|
+
* @returns An instance of ITenantProvider for the specified type
|
|
41
|
+
* @throws ValidationError if the provider type is not registered
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* // Create an in-memory provider for testing (built-in)
|
|
46
|
+
* const memoryProvider = createProvider('memory');
|
|
47
|
+
*
|
|
48
|
+
* // Create a Firebase provider (must be registered by application first)
|
|
49
|
+
* // In your app: ProviderRegistry.register('firebase', () => new FirebaseTenantProvider());
|
|
50
|
+
* const firebaseProvider = createProvider('firebase');
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
function createProvider(type) {
|
|
54
|
+
return providerRegistry_1.ProviderRegistry.create(type);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get the list of supported provider types (built-in + registered)
|
|
58
|
+
* @returns Array of supported provider type strings
|
|
59
|
+
*/
|
|
60
|
+
function getSupportedProviders() {
|
|
61
|
+
return providerRegistry_1.ProviderRegistry.getRegisteredTypes();
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get the list of built-in provider types
|
|
65
|
+
* @returns Array of built-in provider type strings
|
|
66
|
+
*/
|
|
67
|
+
function getBuiltInProviders() {
|
|
68
|
+
return BUILTIN_PROVIDERS;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=providerFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerFactory.js","sourceRoot":"","sources":["../../src/tenant/providerFactory.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAqBH,sDAEC;AAKD,kDAKC;AAmBD,wCAEC;AAMD,sDAEC;AAMD,kDAEC;AA/DD,yDAAsD;AACtD,+EAA4E;AAE5E;;GAEG;AACH,MAAM,iBAAiB,GAAmC,CAAC,QAAQ,CAAU,CAAC;AAE9E,4CAA4C;AAC5C,mCAAgB,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,+CAAsB,EAAE,CAAC,CAAC;AAExE;;GAEG;AACH,SAAgB,qBAAqB,CAAC,IAAa;IACjD,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,iBAAiB,CAAC,QAAQ,CAAC,IAA2B,CAAC,CAAC;AAC7F,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,IAAa;IAC/C,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,qBAAqB,CAAC,IAAI,CAAC,IAAI,mCAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAC5E,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,cAAc,CAAC,IAAkB;IAC/C,OAAO,mCAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,SAAgB,qBAAqB;IACnC,OAAO,mCAAgB,CAAC,kBAAkB,EAAE,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,SAAgB,mBAAmB;IACjC,OAAO,iBAAiB,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider Registry
|
|
3
|
+
* Dynamic registration system for external tenant providers
|
|
4
|
+
* Allows applications to register custom providers at runtime
|
|
5
|
+
*/
|
|
6
|
+
import { ITenantProvider } from './interfaces';
|
|
7
|
+
type ProviderFactory = () => ITenantProvider;
|
|
8
|
+
/**
|
|
9
|
+
* Registry for tenant providers
|
|
10
|
+
* Applications register their providers here before using TenantManager
|
|
11
|
+
*/
|
|
12
|
+
declare class ProviderRegistryClass {
|
|
13
|
+
private providers;
|
|
14
|
+
/**
|
|
15
|
+
* Register a provider factory
|
|
16
|
+
* @param type - Unique provider type identifier
|
|
17
|
+
* @param factory - Factory function that creates the provider instance
|
|
18
|
+
* @throws ValidationError if type is already registered
|
|
19
|
+
*/
|
|
20
|
+
register(type: string, factory: ProviderFactory): void;
|
|
21
|
+
/**
|
|
22
|
+
* Unregister a provider
|
|
23
|
+
* @param type - Provider type to remove
|
|
24
|
+
*/
|
|
25
|
+
unregister(type: string): void;
|
|
26
|
+
/**
|
|
27
|
+
* Create a provider instance
|
|
28
|
+
* @param type - Provider type to create
|
|
29
|
+
* @throws ValidationError if provider type is not registered
|
|
30
|
+
*/
|
|
31
|
+
create(type: string): ITenantProvider;
|
|
32
|
+
/**
|
|
33
|
+
* Check if a provider type is registered
|
|
34
|
+
*/
|
|
35
|
+
isRegistered(type: string): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Get all registered provider types
|
|
38
|
+
*/
|
|
39
|
+
getRegisteredTypes(): string[];
|
|
40
|
+
/**
|
|
41
|
+
* Clear all registered providers (useful for testing)
|
|
42
|
+
*/
|
|
43
|
+
clear(): void;
|
|
44
|
+
}
|
|
45
|
+
export declare const ProviderRegistry: ProviderRegistryClass;
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=providerRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerRegistry.d.ts","sourceRoot":"","sources":["../../src/tenant/providerRegistry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAmB,MAAM,cAAc,CAAC;AAEhE,KAAK,eAAe,GAAG,MAAM,eAAe,CAAC;AAE7C;;;GAGG;AACH,cAAM,qBAAqB;IACzB,OAAO,CAAC,SAAS,CAA2C;IAE5D;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI;IAatD;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9B;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;IAcrC;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAInC;;OAEG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAI9B;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd;AAED,eAAO,MAAM,gBAAgB,uBAA8B,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Provider Registry
|
|
4
|
+
* Dynamic registration system for external tenant providers
|
|
5
|
+
* Allows applications to register custom providers at runtime
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.ProviderRegistry = void 0;
|
|
9
|
+
const interfaces_1 = require("./interfaces");
|
|
10
|
+
/**
|
|
11
|
+
* Registry for tenant providers
|
|
12
|
+
* Applications register their providers here before using TenantManager
|
|
13
|
+
*/
|
|
14
|
+
class ProviderRegistryClass {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.providers = new Map();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Register a provider factory
|
|
20
|
+
* @param type - Unique provider type identifier
|
|
21
|
+
* @param factory - Factory function that creates the provider instance
|
|
22
|
+
* @throws ValidationError if type is already registered
|
|
23
|
+
*/
|
|
24
|
+
register(type, factory) {
|
|
25
|
+
if (!type || typeof type !== 'string') {
|
|
26
|
+
throw new interfaces_1.ValidationError('Provider type must be a non-empty string');
|
|
27
|
+
}
|
|
28
|
+
if (typeof factory !== 'function') {
|
|
29
|
+
throw new interfaces_1.ValidationError('Provider factory must be a function');
|
|
30
|
+
}
|
|
31
|
+
if (this.providers.has(type)) {
|
|
32
|
+
throw new interfaces_1.ValidationError(`Provider type '${type}' is already registered`);
|
|
33
|
+
}
|
|
34
|
+
this.providers.set(type, factory);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Unregister a provider
|
|
38
|
+
* @param type - Provider type to remove
|
|
39
|
+
*/
|
|
40
|
+
unregister(type) {
|
|
41
|
+
this.providers.delete(type);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Create a provider instance
|
|
45
|
+
* @param type - Provider type to create
|
|
46
|
+
* @throws ValidationError if provider type is not registered
|
|
47
|
+
*/
|
|
48
|
+
create(type) {
|
|
49
|
+
const factory = this.providers.get(type);
|
|
50
|
+
if (!factory) {
|
|
51
|
+
const registered = this.getRegisteredTypes();
|
|
52
|
+
const available = registered.length > 0
|
|
53
|
+
? `Available types: ${registered.join(', ')}`
|
|
54
|
+
: 'No providers registered';
|
|
55
|
+
throw new interfaces_1.ValidationError(`Unknown provider type: '${type}'. ${available}`);
|
|
56
|
+
}
|
|
57
|
+
return factory();
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Check if a provider type is registered
|
|
61
|
+
*/
|
|
62
|
+
isRegistered(type) {
|
|
63
|
+
return this.providers.has(type);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get all registered provider types
|
|
67
|
+
*/
|
|
68
|
+
getRegisteredTypes() {
|
|
69
|
+
return Array.from(this.providers.keys());
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Clear all registered providers (useful for testing)
|
|
73
|
+
*/
|
|
74
|
+
clear() {
|
|
75
|
+
this.providers.clear();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.ProviderRegistry = new ProviderRegistryClass();
|
|
79
|
+
//# sourceMappingURL=providerRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerRegistry.js","sourceRoot":"","sources":["../../src/tenant/providerRegistry.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,6CAAgE;AAIhE;;;GAGG;AACH,MAAM,qBAAqB;IAA3B;QACU,cAAS,GAAiC,IAAI,GAAG,EAAE,CAAC;IAoE9D,CAAC;IAlEC;;;;;OAKG;IACH,QAAQ,CAAC,IAAY,EAAE,OAAwB;QAC7C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtC,MAAM,IAAI,4BAAe,CAAC,0CAA0C,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;YAClC,MAAM,IAAI,4BAAe,CAAC,qCAAqC,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,4BAAe,CAAC,kBAAkB,IAAI,yBAAyB,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,IAAY;QACrB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,IAAY;QACjB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7C,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC;gBACrC,CAAC,CAAC,oBAAoB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAC7C,CAAC,CAAC,yBAAyB,CAAC;YAC9B,MAAM,IAAI,4BAAe,CACvB,2BAA2B,IAAI,MAAM,SAAS,EAAE,CACjD,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,EAAE,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,IAAY;QACvB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACF;AAEY,QAAA,gBAAgB,GAAG,IAAI,qBAAqB,EAAE,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Firebase Tenant Provider
|
|
3
|
+
* Implements ITenantProvider using Firebase Admin SDK
|
|
4
|
+
* Extracted from MultiTenantFirebaseManager for provider-agnostic architecture
|
|
5
|
+
*
|
|
6
|
+
* NOTE: firebase-admin is an optional peer dependency.
|
|
7
|
+
* Install it separately if you want to use Firebase as a tenant provider:
|
|
8
|
+
*
|
|
9
|
+
* ```bash
|
|
10
|
+
* pnpm add firebase-admin
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
import { ITenantProvider, ITenantApp, TenantConfig, ProviderType } from '../interfaces';
|
|
14
|
+
/**
|
|
15
|
+
* Firebase implementation of ITenantProvider
|
|
16
|
+
* Provides multi-tenant isolation using Firebase Admin SDK
|
|
17
|
+
*
|
|
18
|
+
* NOTE: firebase-admin must be installed separately as a peer dependency.
|
|
19
|
+
*/
|
|
20
|
+
export declare class FirebaseTenantProvider implements ITenantProvider {
|
|
21
|
+
readonly type: ProviderType;
|
|
22
|
+
private tenants;
|
|
23
|
+
private initialized;
|
|
24
|
+
/**
|
|
25
|
+
* Ensure firebase-admin is loaded before use
|
|
26
|
+
*/
|
|
27
|
+
private ensureFirebaseLoaded;
|
|
28
|
+
/**
|
|
29
|
+
* Validate Firebase-specific provider configuration
|
|
30
|
+
*/
|
|
31
|
+
private validateFirebaseConfig;
|
|
32
|
+
/**
|
|
33
|
+
* Validate tenant configuration
|
|
34
|
+
*/
|
|
35
|
+
private validateTenantConfig;
|
|
36
|
+
initialize(config: TenantConfig): Promise<ITenantApp>;
|
|
37
|
+
get(tenantId: string): ITenantApp;
|
|
38
|
+
remove(tenantId: string): Promise<void>;
|
|
39
|
+
list(): string[];
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=FirebaseTenantProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FirebaseTenantProvider.d.ts","sourceRoot":"","sources":["../../../src/tenant/providers/FirebaseTenantProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,eAAe,EACf,UAAU,EAIV,YAAY,EACZ,YAAY,EAKb,MAAM,eAAe,CAAC;AAkLvB;;;;;GAKG;AACH,qBAAa,sBAAuB,YAAW,eAAe;IAC5D,SAAgB,IAAI,EAAE,YAAY,CAAc;IAChD,OAAO,CAAC,OAAO,CAA6C;IAC5D,OAAO,CAAC,WAAW,CAAS;IAE5B;;OAEG;YACW,oBAAoB;IAOlC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAsB9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkBtB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC;IAiC3D,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU;IAQ3B,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS7C,IAAI,IAAI,MAAM,EAAE;CAGjB"}
|