@archlast/server 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +32 -0
- package/dist/admin/auth.d.ts +79 -0
- package/dist/admin/auth.d.ts.map +1 -0
- package/dist/admin/auth.js +487 -0
- package/dist/admin/auth.js.map +1 -0
- package/dist/admin/schema.d.ts +240 -0
- package/dist/admin/schema.d.ts.map +1 -0
- package/dist/admin/schema.js +521 -0
- package/dist/admin/schema.js.map +1 -0
- package/dist/admin/seed.d.ts +9 -0
- package/dist/admin/seed.d.ts.map +1 -0
- package/dist/admin/seed.js +276 -0
- package/dist/admin/seed.js.map +1 -0
- package/dist/auth/api-key-resolver.d.ts +12 -0
- package/dist/auth/api-key-resolver.d.ts.map +1 -0
- package/dist/auth/api-key-resolver.js +24 -0
- package/dist/auth/api-key-resolver.js.map +1 -0
- package/dist/auth/archlast-auth-adapter.d.ts +22 -0
- package/dist/auth/archlast-auth-adapter.d.ts.map +1 -0
- package/dist/auth/archlast-auth-adapter.js +32 -0
- package/dist/auth/archlast-auth-adapter.js.map +1 -0
- package/dist/auth/audit.d.ts +65 -0
- package/dist/auth/audit.d.ts.map +1 -0
- package/dist/auth/audit.js +138 -0
- package/dist/auth/audit.js.map +1 -0
- package/dist/auth/better-auth-adapter.d.ts +35 -0
- package/dist/auth/better-auth-adapter.d.ts.map +1 -0
- package/dist/auth/better-auth-adapter.js +460 -0
- package/dist/auth/better-auth-adapter.js.map +1 -0
- package/dist/auth/better-auth-admin.d.ts +40 -0
- package/dist/auth/better-auth-admin.d.ts.map +1 -0
- package/dist/auth/better-auth-admin.js +80 -0
- package/dist/auth/better-auth-admin.js.map +1 -0
- package/dist/auth/better-auth-api-key-resolver.d.ts +39 -0
- package/dist/auth/better-auth-api-key-resolver.d.ts.map +1 -0
- package/dist/auth/better-auth-api-key-resolver.js +184 -0
- package/dist/auth/better-auth-api-key-resolver.js.map +1 -0
- package/dist/auth/better-auth-instance.d.ts +2464 -0
- package/dist/auth/better-auth-instance.d.ts.map +1 -0
- package/dist/auth/better-auth-instance.js +251 -0
- package/dist/auth/better-auth-instance.js.map +1 -0
- package/dist/auth/better-auth-seed.d.ts +23 -0
- package/dist/auth/better-auth-seed.d.ts.map +1 -0
- package/dist/auth/better-auth-seed.js +316 -0
- package/dist/auth/better-auth-seed.js.map +1 -0
- package/dist/auth/better-auth-session-adapter.d.ts +49 -0
- package/dist/auth/better-auth-session-adapter.d.ts.map +1 -0
- package/dist/auth/better-auth-session-adapter.js +254 -0
- package/dist/auth/better-auth-session-adapter.js.map +1 -0
- package/dist/auth/errors.d.ts +18 -0
- package/dist/auth/errors.d.ts.map +1 -0
- package/dist/auth/errors.js +27 -0
- package/dist/auth/errors.js.map +1 -0
- package/dist/auth/http/handlers.d.ts +17 -0
- package/dist/auth/http/handlers.d.ts.map +1 -0
- package/dist/auth/http/handlers.js +19 -0
- package/dist/auth/http/handlers.js.map +1 -0
- package/dist/auth/interfaces.d.ts +138 -0
- package/dist/auth/interfaces.d.ts.map +1 -0
- package/dist/auth/interfaces.js +105 -0
- package/dist/auth/interfaces.js.map +1 -0
- package/dist/auth/mfa/index.d.ts +6 -0
- package/dist/auth/mfa/index.d.ts.map +1 -0
- package/dist/auth/mfa/index.js +13 -0
- package/dist/auth/mfa/index.js.map +1 -0
- package/dist/auth/mfa/schema.d.ts +32 -0
- package/dist/auth/mfa/schema.d.ts.map +1 -0
- package/dist/auth/mfa/schema.js +35 -0
- package/dist/auth/mfa/schema.js.map +1 -0
- package/dist/auth/mfa/service.d.ts +65 -0
- package/dist/auth/mfa/service.d.ts.map +1 -0
- package/dist/auth/mfa/service.js +255 -0
- package/dist/auth/mfa/service.js.map +1 -0
- package/dist/auth/oauth-proxy.d.ts +58 -0
- package/dist/auth/oauth-proxy.d.ts.map +1 -0
- package/dist/auth/oauth-proxy.js +298 -0
- package/dist/auth/oauth-proxy.js.map +1 -0
- package/dist/auth/otp/index.d.ts +6 -0
- package/dist/auth/otp/index.d.ts.map +1 -0
- package/dist/auth/otp/index.js +13 -0
- package/dist/auth/otp/index.js.map +1 -0
- package/dist/auth/otp/schema.d.ts +32 -0
- package/dist/auth/otp/schema.d.ts.map +1 -0
- package/dist/auth/otp/schema.js +38 -0
- package/dist/auth/otp/schema.js.map +1 -0
- package/dist/auth/otp/service.d.ts +59 -0
- package/dist/auth/otp/service.d.ts.map +1 -0
- package/dist/auth/otp/service.js +183 -0
- package/dist/auth/otp/service.js.map +1 -0
- package/dist/auth/password-recovery.d.ts +61 -0
- package/dist/auth/password-recovery.d.ts.map +1 -0
- package/dist/auth/password-recovery.js +173 -0
- package/dist/auth/password-recovery.js.map +1 -0
- package/dist/auth/resolver.d.ts +29 -0
- package/dist/auth/resolver.d.ts.map +1 -0
- package/dist/auth/resolver.js +78 -0
- package/dist/auth/resolver.js.map +1 -0
- package/dist/auth/role-helpers.d.ts +56 -0
- package/dist/auth/role-helpers.d.ts.map +1 -0
- package/dist/auth/role-helpers.js +103 -0
- package/dist/auth/role-helpers.js.map +1 -0
- package/dist/auth/session-manager.d.ts +21 -0
- package/dist/auth/session-manager.d.ts.map +1 -0
- package/dist/auth/session-manager.js +30 -0
- package/dist/auth/session-manager.js.map +1 -0
- package/dist/auth/session-security.d.ts +14 -0
- package/dist/auth/session-security.d.ts.map +1 -0
- package/dist/auth/session-security.js +26 -0
- package/dist/auth/session-security.js.map +1 -0
- package/dist/auth/system/better-auth-schema.d.ts +144 -0
- package/dist/auth/system/better-auth-schema.d.ts.map +1 -0
- package/dist/auth/system/better-auth-schema.js +250 -0
- package/dist/auth/system/better-auth-schema.js.map +1 -0
- package/dist/auth/system/constants.d.ts +114 -0
- package/dist/auth/system/constants.d.ts.map +1 -0
- package/dist/auth/system/constants.js +205 -0
- package/dist/auth/system/constants.js.map +1 -0
- package/dist/auth/system/cookies.d.ts +83 -0
- package/dist/auth/system/cookies.d.ts.map +1 -0
- package/dist/auth/system/cookies.js +148 -0
- package/dist/auth/system/cookies.js.map +1 -0
- package/dist/auth/system/crypto.d.ts +53 -0
- package/dist/auth/system/crypto.d.ts.map +1 -0
- package/dist/auth/system/crypto.js +188 -0
- package/dist/auth/system/crypto.js.map +1 -0
- package/dist/auth/system/extended-schema.d.ts +145 -0
- package/dist/auth/system/extended-schema.d.ts.map +1 -0
- package/dist/auth/system/extended-schema.js +86 -0
- package/dist/auth/system/extended-schema.js.map +1 -0
- package/dist/auth/system/schema.d.ts +538 -0
- package/dist/auth/system/schema.d.ts.map +1 -0
- package/dist/auth/system/schema.js +306 -0
- package/dist/auth/system/schema.js.map +1 -0
- package/dist/cache/client.d.ts +77 -0
- package/dist/cache/client.d.ts.map +1 -0
- package/dist/cache/client.js +279 -0
- package/dist/cache/client.js.map +1 -0
- package/dist/cache/index.d.ts +9 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +14 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/layers.d.ts +125 -0
- package/dist/cache/layers.d.ts.map +1 -0
- package/dist/cache/layers.js +354 -0
- package/dist/cache/layers.js.map +1 -0
- package/dist/cache/manager.d.ts +101 -0
- package/dist/cache/manager.d.ts.map +1 -0
- package/dist/cache/manager.js +423 -0
- package/dist/cache/manager.js.map +1 -0
- package/dist/cache/protocol.d.ts +115 -0
- package/dist/cache/protocol.d.ts.map +1 -0
- package/dist/cache/protocol.js +36 -0
- package/dist/cache/protocol.js.map +1 -0
- package/dist/cache/run-sidecar.d.ts +8 -0
- package/dist/cache/run-sidecar.d.ts.map +1 -0
- package/dist/cache/run-sidecar.js +71 -0
- package/dist/cache/run-sidecar.js.map +1 -0
- package/dist/cache/sidecar-client.d.ts +90 -0
- package/dist/cache/sidecar-client.d.ts.map +1 -0
- package/dist/cache/sidecar-client.js +437 -0
- package/dist/cache/sidecar-client.js.map +1 -0
- package/dist/cache/sidecar-server.d.ts +18 -0
- package/dist/cache/sidecar-server.d.ts.map +1 -0
- package/dist/cache/sidecar-server.js +90 -0
- package/dist/cache/sidecar-server.js.map +1 -0
- package/dist/cache/store.d.ts +90 -0
- package/dist/cache/store.d.ts.map +1 -0
- package/dist/cache/store.js +357 -0
- package/dist/cache/store.js.map +1 -0
- package/dist/cache/strategies.d.ts +52 -0
- package/dist/cache/strategies.d.ts.map +1 -0
- package/dist/cache/strategies.js +13 -0
- package/dist/cache/strategies.js.map +1 -0
- package/dist/cache/utils.d.ts +16 -0
- package/dist/cache/utils.d.ts.map +1 -0
- package/dist/cache/utils.js +101 -0
- package/dist/cache/utils.js.map +1 -0
- package/dist/config/index.d.ts +4 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +20 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/paths.d.ts +16 -0
- package/dist/config/paths.d.ts.map +1 -0
- package/dist/config/paths.js +29 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/schema.d.ts +42 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +62 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/service.d.ts +56 -0
- package/dist/config/service.d.ts.map +1 -0
- package/dist/config/service.js +108 -0
- package/dist/config/service.js.map +1 -0
- package/dist/context.d.ts +48 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +6 -0
- package/dist/context.js.map +1 -0
- package/dist/controllers/admin/admin-tokens.controller.d.ts +159 -0
- package/dist/controllers/admin/admin-tokens.controller.d.ts.map +1 -0
- package/dist/controllers/admin/admin-tokens.controller.js +138 -0
- package/dist/controllers/admin/admin-tokens.controller.js.map +1 -0
- package/dist/controllers/admin/api-keys.controller.d.ts +187 -0
- package/dist/controllers/admin/api-keys.controller.d.ts.map +1 -0
- package/dist/controllers/admin/api-keys.controller.js +124 -0
- package/dist/controllers/admin/api-keys.controller.js.map +1 -0
- package/dist/controllers/admin/app-users.controller.d.ts +376 -0
- package/dist/controllers/admin/app-users.controller.d.ts.map +1 -0
- package/dist/controllers/admin/app-users.controller.js +348 -0
- package/dist/controllers/admin/app-users.controller.js.map +1 -0
- package/dist/controllers/admin/auth.controller.d.ts +285 -0
- package/dist/controllers/admin/auth.controller.d.ts.map +1 -0
- package/dist/controllers/admin/auth.controller.js +221 -0
- package/dist/controllers/admin/auth.controller.js.map +1 -0
- package/dist/controllers/admin/backup.controller.d.ts +250 -0
- package/dist/controllers/admin/backup.controller.d.ts.map +1 -0
- package/dist/controllers/admin/backup.controller.js +316 -0
- package/dist/controllers/admin/backup.controller.js.map +1 -0
- package/dist/controllers/admin/data.controller.d.ts +250 -0
- package/dist/controllers/admin/data.controller.d.ts.map +1 -0
- package/dist/controllers/admin/data.controller.js +240 -0
- package/dist/controllers/admin/data.controller.js.map +1 -0
- package/dist/controllers/admin/provisioning.controller.d.ts +77 -0
- package/dist/controllers/admin/provisioning.controller.d.ts.map +1 -0
- package/dist/controllers/admin/provisioning.controller.js +141 -0
- package/dist/controllers/admin/provisioning.controller.js.map +1 -0
- package/dist/controllers/admin/settings.controller.d.ts +153 -0
- package/dist/controllers/admin/settings.controller.d.ts.map +1 -0
- package/dist/controllers/admin/settings.controller.js +120 -0
- package/dist/controllers/admin/settings.controller.js.map +1 -0
- package/dist/controllers/admin/setup.controller.d.ts +104 -0
- package/dist/controllers/admin/setup.controller.d.ts.map +1 -0
- package/dist/controllers/admin/setup.controller.js +113 -0
- package/dist/controllers/admin/setup.controller.js.map +1 -0
- package/dist/controllers/admin/tenants.controller.d.ts +275 -0
- package/dist/controllers/admin/tenants.controller.d.ts.map +1 -0
- package/dist/controllers/admin/tenants.controller.js +206 -0
- package/dist/controllers/admin/tenants.controller.js.map +1 -0
- package/dist/controllers/admin/users.controller.d.ts +253 -0
- package/dist/controllers/admin/users.controller.d.ts.map +1 -0
- package/dist/controllers/admin/users.controller.js +186 -0
- package/dist/controllers/admin/users.controller.js.map +1 -0
- package/dist/controllers/auth.controller.d.ts +308 -0
- package/dist/controllers/auth.controller.d.ts.map +1 -0
- package/dist/controllers/auth.controller.js +305 -0
- package/dist/controllers/auth.controller.js.map +1 -0
- package/dist/controllers/crud-generator.controller.d.ts +83 -0
- package/dist/controllers/crud-generator.controller.d.ts.map +1 -0
- package/dist/controllers/crud-generator.controller.js +201 -0
- package/dist/controllers/crud-generator.controller.js.map +1 -0
- package/dist/controllers/deployment-events.controller.d.ts +74 -0
- package/dist/controllers/deployment-events.controller.d.ts.map +1 -0
- package/dist/controllers/deployment-events.controller.js +143 -0
- package/dist/controllers/deployment-events.controller.js.map +1 -0
- package/dist/controllers/index.d.ts +18 -0
- package/dist/controllers/index.d.ts.map +1 -0
- package/dist/controllers/index.js +42 -0
- package/dist/controllers/index.js.map +1 -0
- package/dist/controllers/introspection.controller.d.ts +430 -0
- package/dist/controllers/introspection.controller.d.ts.map +1 -0
- package/dist/controllers/introspection.controller.js +358 -0
- package/dist/controllers/introspection.controller.js.map +1 -0
- package/dist/controllers/invite.controller.d.ts +218 -0
- package/dist/controllers/invite.controller.d.ts.map +1 -0
- package/dist/controllers/invite.controller.js +218 -0
- package/dist/controllers/invite.controller.js.map +1 -0
- package/dist/controllers/mfa.controller.d.ts +211 -0
- package/dist/controllers/mfa.controller.d.ts.map +1 -0
- package/dist/controllers/mfa.controller.js +155 -0
- package/dist/controllers/mfa.controller.js.map +1 -0
- package/dist/controllers/otp.controller.d.ts +220 -0
- package/dist/controllers/otp.controller.d.ts.map +1 -0
- package/dist/controllers/otp.controller.js +223 -0
- package/dist/controllers/otp.controller.js.map +1 -0
- package/dist/controllers/storage.controller.d.ts +297 -0
- package/dist/controllers/storage.controller.d.ts.map +1 -0
- package/dist/controllers/storage.controller.js +304 -0
- package/dist/controllers/storage.controller.js.map +1 -0
- package/dist/controllers/system.controller.d.ts +176 -0
- package/dist/controllers/system.controller.d.ts.map +1 -0
- package/dist/controllers/system.controller.js +222 -0
- package/dist/controllers/system.controller.js.map +1 -0
- package/dist/controllers/tenant.controller.d.ts +316 -0
- package/dist/controllers/tenant.controller.d.ts.map +1 -0
- package/dist/controllers/tenant.controller.js +269 -0
- package/dist/controllers/tenant.controller.js.map +1 -0
- package/dist/db/cachedclient.d.ts +69 -0
- package/dist/db/cachedclient.d.ts.map +1 -0
- package/dist/db/cachedclient.js +331 -0
- package/dist/db/cachedclient.js.map +1 -0
- package/dist/db/distributed-client.d.ts +82 -0
- package/dist/db/distributed-client.d.ts.map +1 -0
- package/dist/db/distributed-client.js +477 -0
- package/dist/db/distributed-client.js.map +1 -0
- package/dist/db/factory.d.ts +19 -0
- package/dist/db/factory.d.ts.map +1 -0
- package/dist/db/factory.js +44 -0
- package/dist/db/factory.js.map +1 -0
- package/dist/db/interfaces.d.ts +67 -0
- package/dist/db/interfaces.d.ts.map +1 -0
- package/dist/db/interfaces.js +3 -0
- package/dist/db/interfaces.js.map +1 -0
- package/dist/db/socket-client.d.ts +122 -0
- package/dist/db/socket-client.d.ts.map +1 -0
- package/dist/db/socket-client.js +1092 -0
- package/dist/db/socket-client.js.map +1 -0
- package/dist/db/store-config.d.ts +19 -0
- package/dist/db/store-config.d.ts.map +1 -0
- package/dist/db/store-config.js +65 -0
- package/dist/db/store-config.js.map +1 -0
- package/dist/deployment/function-extractor.d.ts +11 -0
- package/dist/deployment/function-extractor.d.ts.map +1 -0
- package/dist/deployment/function-extractor.js +101 -0
- package/dist/deployment/function-extractor.js.map +1 -0
- package/dist/deployment/handler.d.ts +174 -0
- package/dist/deployment/handler.d.ts.map +1 -0
- package/dist/deployment/handler.js +1437 -0
- package/dist/deployment/handler.js.map +1 -0
- package/dist/deployment/persistence.d.ts +97 -0
- package/dist/deployment/persistence.d.ts.map +1 -0
- package/dist/deployment/persistence.js +238 -0
- package/dist/deployment/persistence.js.map +1 -0
- package/dist/deployment/protocol.d.ts +34 -0
- package/dist/deployment/protocol.d.ts.map +1 -0
- package/dist/deployment/protocol.js +7 -0
- package/dist/deployment/protocol.js.map +1 -0
- package/dist/di/container.d.ts +58 -0
- package/dist/di/container.d.ts.map +1 -0
- package/dist/di/container.js +121 -0
- package/dist/di/container.js.map +1 -0
- package/dist/di/decorators.d.ts +57 -0
- package/dist/di/decorators.d.ts.map +1 -0
- package/dist/di/decorators.js +80 -0
- package/dist/di/decorators.js.map +1 -0
- package/dist/di/index.d.ts +10 -0
- package/dist/di/index.d.ts.map +1 -0
- package/dist/di/index.js +21 -0
- package/dist/di/index.js.map +1 -0
- package/dist/di/resolver.d.ts +26 -0
- package/dist/di/resolver.d.ts.map +1 -0
- package/dist/di/resolver.js +32 -0
- package/dist/di/resolver.js.map +1 -0
- package/dist/docker/compose.d.ts +3 -0
- package/dist/docker/compose.d.ts.map +1 -0
- package/dist/docker/compose.js +106 -0
- package/dist/docker/compose.js.map +1 -0
- package/dist/docker/index.d.ts +4 -0
- package/dist/docker/index.d.ts.map +1 -0
- package/dist/docker/index.js +8 -0
- package/dist/docker/index.js.map +1 -0
- package/dist/docker/manager.d.ts +14 -0
- package/dist/docker/manager.d.ts.map +1 -0
- package/dist/docker/manager.js +76 -0
- package/dist/docker/manager.js.map +1 -0
- package/dist/docker/types.d.ts +18 -0
- package/dist/docker/types.d.ts.map +1 -0
- package/dist/docker/types.js +3 -0
- package/dist/docker/types.js.map +1 -0
- package/dist/email/index.d.ts +6 -0
- package/dist/email/index.d.ts.map +1 -0
- package/dist/email/index.js +25 -0
- package/dist/email/index.js.map +1 -0
- package/dist/email/service.d.ts +89 -0
- package/dist/email/service.d.ts.map +1 -0
- package/dist/email/service.js +215 -0
- package/dist/email/service.js.map +1 -0
- package/dist/email/templates/MagicLinkEmail.d.ts +8 -0
- package/dist/email/templates/MagicLinkEmail.d.ts.map +1 -0
- package/dist/email/templates/MagicLinkEmail.js +84 -0
- package/dist/email/templates/MagicLinkEmail.js.map +1 -0
- package/dist/email/templates/OtpEmail.d.ts +8 -0
- package/dist/email/templates/OtpEmail.d.ts.map +1 -0
- package/dist/email/templates/OtpEmail.js +72 -0
- package/dist/email/templates/OtpEmail.js.map +1 -0
- package/dist/email/templates/PasswordResetEmail.d.ts +9 -0
- package/dist/email/templates/PasswordResetEmail.d.ts.map +1 -0
- package/dist/email/templates/PasswordResetEmail.js +103 -0
- package/dist/email/templates/PasswordResetEmail.js.map +1 -0
- package/dist/email/templates/WelcomeEmail.d.ts +8 -0
- package/dist/email/templates/WelcomeEmail.d.ts.map +1 -0
- package/dist/email/templates/WelcomeEmail.js +94 -0
- package/dist/email/templates/WelcomeEmail.js.map +1 -0
- package/dist/email/templates/index.d.ts +9 -0
- package/dist/email/templates/index.d.ts.map +1 -0
- package/dist/email/templates/index.js +16 -0
- package/dist/email/templates/index.js.map +1 -0
- package/dist/engine/context.d.ts +9 -0
- package/dist/engine/context.d.ts.map +1 -0
- package/dist/engine/context.js +9 -0
- package/dist/engine/context.js.map +1 -0
- package/dist/engine/runner.d.ts +115 -0
- package/dist/engine/runner.d.ts.map +1 -0
- package/dist/engine/runner.js +617 -0
- package/dist/engine/runner.js.map +1 -0
- package/dist/functions/built-in/auth-apikey.d.ts +21 -0
- package/dist/functions/built-in/auth-apikey.d.ts.map +1 -0
- package/dist/functions/built-in/auth-apikey.js +344 -0
- package/dist/functions/built-in/auth-apikey.js.map +1 -0
- package/dist/functions/built-in/auth-email.d.ts +3 -0
- package/dist/functions/built-in/auth-email.d.ts.map +1 -0
- package/dist/functions/built-in/auth-email.js +63 -0
- package/dist/functions/built-in/auth-email.js.map +1 -0
- package/dist/functions/built-in/auth-invite.d.ts +5 -0
- package/dist/functions/built-in/auth-invite.d.ts.map +1 -0
- package/dist/functions/built-in/auth-invite.js +105 -0
- package/dist/functions/built-in/auth-invite.js.map +1 -0
- package/dist/functions/built-in/auth-password.d.ts +4 -0
- package/dist/functions/built-in/auth-password.d.ts.map +1 -0
- package/dist/functions/built-in/auth-password.js +107 -0
- package/dist/functions/built-in/auth-password.js.map +1 -0
- package/dist/functions/built-in/auth-session.d.ts +18 -0
- package/dist/functions/built-in/auth-session.d.ts.map +1 -0
- package/dist/functions/built-in/auth-session.js +221 -0
- package/dist/functions/built-in/auth-session.js.map +1 -0
- package/dist/functions/built-in/auth-signin.d.ts +20 -0
- package/dist/functions/built-in/auth-signin.d.ts.map +1 -0
- package/dist/functions/built-in/auth-signin.js +198 -0
- package/dist/functions/built-in/auth-signin.js.map +1 -0
- package/dist/functions/built-in/auth-signout.d.ts +18 -0
- package/dist/functions/built-in/auth-signout.d.ts.map +1 -0
- package/dist/functions/built-in/auth-signout.js +78 -0
- package/dist/functions/built-in/auth-signout.js.map +1 -0
- package/dist/functions/built-in/auth-signup.d.ts +21 -0
- package/dist/functions/built-in/auth-signup.d.ts.map +1 -0
- package/dist/functions/built-in/auth-signup.js +147 -0
- package/dist/functions/built-in/auth-signup.js.map +1 -0
- package/dist/functions/built-in/auth-tenant.d.ts +3 -0
- package/dist/functions/built-in/auth-tenant.d.ts.map +1 -0
- package/dist/functions/built-in/auth-tenant.js +86 -0
- package/dist/functions/built-in/auth-tenant.js.map +1 -0
- package/dist/functions/built-in/index.d.ts +55 -0
- package/dist/functions/built-in/index.d.ts.map +1 -0
- package/dist/functions/built-in/index.js +181 -0
- package/dist/functions/built-in/index.js.map +1 -0
- package/dist/functions/built-in/system-cache.d.ts +10 -0
- package/dist/functions/built-in/system-cache.d.ts.map +1 -0
- package/dist/functions/built-in/system-cache.js +98 -0
- package/dist/functions/built-in/system-cache.js.map +1 -0
- package/dist/functions/built-in/system-data.d.ts +13 -0
- package/dist/functions/built-in/system-data.d.ts.map +1 -0
- package/dist/functions/built-in/system-data.js +133 -0
- package/dist/functions/built-in/system-data.js.map +1 -0
- package/dist/functions/built-in/system-jobs.d.ts +22 -0
- package/dist/functions/built-in/system-jobs.d.ts.map +1 -0
- package/dist/functions/built-in/system-jobs.js +82 -0
- package/dist/functions/built-in/system-jobs.js.map +1 -0
- package/dist/functions/built-in/system-notifications.d.ts +41 -0
- package/dist/functions/built-in/system-notifications.d.ts.map +1 -0
- package/dist/functions/built-in/system-notifications.js +72 -0
- package/dist/functions/built-in/system-notifications.js.map +1 -0
- package/dist/functions/built-in/system-performance.d.ts +25 -0
- package/dist/functions/built-in/system-performance.d.ts.map +1 -0
- package/dist/functions/built-in/system-performance.js +83 -0
- package/dist/functions/built-in/system-performance.js.map +1 -0
- package/dist/functions/built-in-registry.d.ts +101 -0
- package/dist/functions/built-in-registry.d.ts.map +1 -0
- package/dist/functions/built-in-registry.js +165 -0
- package/dist/functions/built-in-registry.js.map +1 -0
- package/dist/functions/definition.d.ts +206 -0
- package/dist/functions/definition.d.ts.map +1 -0
- package/dist/functions/definition.js +178 -0
- package/dist/functions/definition.js.map +1 -0
- package/dist/functions/types.d.ts +151 -0
- package/dist/functions/types.d.ts.map +1 -0
- package/dist/functions/types.js +3 -0
- package/dist/functions/types.js.map +1 -0
- package/dist/http/context-helper.d.ts +60 -0
- package/dist/http/context-helper.d.ts.map +1 -0
- package/dist/http/context-helper.js +161 -0
- package/dist/http/context-helper.js.map +1 -0
- package/dist/http/definition.d.ts +76 -0
- package/dist/http/definition.d.ts.map +1 -0
- package/dist/http/definition.js +46 -0
- package/dist/http/definition.js.map +1 -0
- package/dist/http/index.d.ts +7 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +12 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/plugins/auth.d.ts +71 -0
- package/dist/http/plugins/auth.d.ts.map +1 -0
- package/dist/http/plugins/auth.js +67 -0
- package/dist/http/plugins/auth.js.map +1 -0
- package/dist/http/plugins/better-auth.d.ts +67 -0
- package/dist/http/plugins/better-auth.d.ts.map +1 -0
- package/dist/http/plugins/better-auth.js +48 -0
- package/dist/http/plugins/better-auth.js.map +1 -0
- package/dist/http/router.d.ts +59 -0
- package/dist/http/router.d.ts.map +1 -0
- package/dist/http/router.js +371 -0
- package/dist/http/router.js.map +1 -0
- package/dist/http/server.d.ts +15 -0
- package/dist/http/server.d.ts.map +1 -0
- package/dist/http/server.js +217 -0
- package/dist/http/server.js.map +1 -0
- package/dist/http/types.d.ts +142 -0
- package/dist/http/types.d.ts.map +1 -0
- package/dist/http/types.js +7 -0
- package/dist/http/types.js.map +1 -0
- package/dist/index.d.mts +2 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +116 -0
- package/dist/index.mjs.map +1 -0
- package/dist/ipc/run-sidecar.d.ts +8 -0
- package/dist/ipc/run-sidecar.d.ts.map +1 -0
- package/dist/ipc/run-sidecar.js +127 -0
- package/dist/ipc/run-sidecar.js.map +1 -0
- package/dist/ipc/socket-bridge.d.ts +114 -0
- package/dist/ipc/socket-bridge.d.ts.map +1 -0
- package/dist/ipc/socket-bridge.js +724 -0
- package/dist/ipc/socket-bridge.js.map +1 -0
- package/dist/jobs/index.d.ts +7 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/index.js +10 -0
- package/dist/jobs/index.js.map +1 -0
- package/dist/jobs/queue.d.ts +62 -0
- package/dist/jobs/queue.d.ts.map +1 -0
- package/dist/jobs/queue.js +192 -0
- package/dist/jobs/queue.js.map +1 -0
- package/dist/jobs/run-scheduler.d.ts +2 -0
- package/dist/jobs/run-scheduler.d.ts.map +1 -0
- package/dist/jobs/run-scheduler.js +245 -0
- package/dist/jobs/run-scheduler.js.map +1 -0
- package/dist/jobs/run-worker.d.ts +2 -0
- package/dist/jobs/run-worker.d.ts.map +1 -0
- package/dist/jobs/run-worker.js +123 -0
- package/dist/jobs/run-worker.js.map +1 -0
- package/dist/jobs/runtime-loader.d.ts +14 -0
- package/dist/jobs/runtime-loader.d.ts.map +1 -0
- package/dist/jobs/runtime-loader.js +122 -0
- package/dist/jobs/runtime-loader.js.map +1 -0
- package/dist/jobs/scheduler-client.d.ts +33 -0
- package/dist/jobs/scheduler-client.d.ts.map +1 -0
- package/dist/jobs/scheduler-client.js +69 -0
- package/dist/jobs/scheduler-client.js.map +1 -0
- package/dist/jobs/scheduler.d.ts +73 -0
- package/dist/jobs/scheduler.d.ts.map +1 -0
- package/dist/jobs/scheduler.js +297 -0
- package/dist/jobs/scheduler.js.map +1 -0
- package/dist/jobs/worker-thread.d.ts +27 -0
- package/dist/jobs/worker-thread.d.ts.map +1 -0
- package/dist/jobs/worker-thread.js +173 -0
- package/dist/jobs/worker-thread.js.map +1 -0
- package/dist/jobs/worker.d.ts +30 -0
- package/dist/jobs/worker.d.ts.map +1 -0
- package/dist/jobs/worker.js +262 -0
- package/dist/jobs/worker.js.map +1 -0
- package/dist/jobs/ws-client.d.ts +23 -0
- package/dist/jobs/ws-client.d.ts.map +1 -0
- package/dist/jobs/ws-client.js +105 -0
- package/dist/jobs/ws-client.js.map +1 -0
- package/dist/linq/async-enumerable.d.ts +91 -0
- package/dist/linq/async-enumerable.d.ts.map +1 -0
- package/dist/linq/async-enumerable.js +176 -0
- package/dist/linq/async-enumerable.js.map +1 -0
- package/dist/linq/enumerable.d.ts +94 -0
- package/dist/linq/enumerable.d.ts.map +1 -0
- package/dist/linq/enumerable.js +210 -0
- package/dist/linq/enumerable.js.map +1 -0
- package/dist/linq/index.d.ts +25 -0
- package/dist/linq/index.d.ts.map +1 -0
- package/dist/linq/index.js +27 -0
- package/dist/linq/index.js.map +1 -0
- package/dist/linq/interfaces.d.ts +23 -0
- package/dist/linq/interfaces.d.ts.map +1 -0
- package/dist/linq/interfaces.js +3 -0
- package/dist/linq/interfaces.js.map +1 -0
- package/dist/logging/logger.d.ts +85 -0
- package/dist/logging/logger.d.ts.map +1 -0
- package/dist/logging/logger.js +217 -0
- package/dist/logging/logger.js.map +1 -0
- package/dist/query/builder.d.ts +91 -0
- package/dist/query/builder.d.ts.map +1 -0
- package/dist/query/builder.js +103 -0
- package/dist/query/builder.js.map +1 -0
- package/dist/query/types.d.ts +112 -0
- package/dist/query/types.d.ts.map +1 -0
- package/dist/query/types.js +3 -0
- package/dist/query/types.js.map +1 -0
- package/dist/reactivity/graph.d.ts +8 -0
- package/dist/reactivity/graph.d.ts.map +1 -0
- package/dist/reactivity/graph.js +51 -0
- package/dist/reactivity/graph.js.map +1 -0
- package/dist/repository/db-set.d.ts +220 -0
- package/dist/repository/db-set.d.ts.map +1 -0
- package/dist/repository/db-set.js +515 -0
- package/dist/repository/db-set.js.map +1 -0
- package/dist/repository/ef-core.d.ts +177 -0
- package/dist/repository/ef-core.d.ts.map +1 -0
- package/dist/repository/ef-core.js +404 -0
- package/dist/repository/ef-core.js.map +1 -0
- package/dist/repository/factory.d.ts +117 -0
- package/dist/repository/factory.d.ts.map +1 -0
- package/dist/repository/factory.js +183 -0
- package/dist/repository/factory.js.map +1 -0
- package/dist/repository/interfaces.d.ts +449 -0
- package/dist/repository/interfaces.d.ts.map +1 -0
- package/dist/repository/interfaces.js +21 -0
- package/dist/repository/interfaces.js.map +1 -0
- package/dist/repository/provider.d.ts +16 -0
- package/dist/repository/provider.d.ts.map +1 -0
- package/dist/repository/provider.js +674 -0
- package/dist/repository/provider.js.map +1 -0
- package/dist/repository/queryable.d.ts +111 -0
- package/dist/repository/queryable.d.ts.map +1 -0
- package/dist/repository/queryable.js +566 -0
- package/dist/repository/queryable.js.map +1 -0
- package/dist/rpc/adapter.d.ts +18 -0
- package/dist/rpc/adapter.d.ts.map +1 -0
- package/dist/rpc/adapter.js +101 -0
- package/dist/rpc/adapter.js.map +1 -0
- package/dist/rpc/router.d.ts +82 -0
- package/dist/rpc/router.d.ts.map +1 -0
- package/dist/rpc/router.js +177 -0
- package/dist/rpc/router.js.map +1 -0
- package/dist/schema/definition.d.ts +51 -0
- package/dist/schema/definition.d.ts.map +1 -0
- package/dist/schema/definition.js +79 -0
- package/dist/schema/definition.js.map +1 -0
- package/dist/schema/input-types.d.ts +88 -0
- package/dist/schema/input-types.d.ts.map +1 -0
- package/dist/schema/input-types.js +81 -0
- package/dist/schema/input-types.js.map +1 -0
- package/dist/schema/modifiers.d.ts +173 -0
- package/dist/schema/modifiers.d.ts.map +1 -0
- package/dist/schema/modifiers.js +218 -0
- package/dist/schema/modifiers.js.map +1 -0
- package/dist/schema/relationship-types.d.ts +109 -0
- package/dist/schema/relationship-types.d.ts.map +1 -0
- package/dist/schema/relationship-types.js +11 -0
- package/dist/schema/relationship-types.js.map +1 -0
- package/dist/schema/type-helpers.d.ts +105 -0
- package/dist/schema/type-helpers.d.ts.map +1 -0
- package/dist/schema/type-helpers.js +215 -0
- package/dist/schema/type-helpers.js.map +1 -0
- package/dist/schema/types.d.ts +144 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +12 -0
- package/dist/schema/types.js.map +1 -0
- package/dist/schema/validators.d.ts +127 -0
- package/dist/schema/validators.d.ts.map +1 -0
- package/dist/schema/validators.js +164 -0
- package/dist/schema/validators.js.map +1 -0
- package/dist/services/admin/app-users.service.d.ts +138 -0
- package/dist/services/admin/app-users.service.d.ts.map +1 -0
- package/dist/services/admin/app-users.service.js +435 -0
- package/dist/services/admin/app-users.service.js.map +1 -0
- package/dist/services/admin/auth.service.d.ts +104 -0
- package/dist/services/admin/auth.service.d.ts.map +1 -0
- package/dist/services/admin/auth.service.js +208 -0
- package/dist/services/admin/auth.service.js.map +1 -0
- package/dist/services/admin/backup/BackupOrchestrator.d.ts +38 -0
- package/dist/services/admin/backup/BackupOrchestrator.d.ts.map +1 -0
- package/dist/services/admin/backup/BackupOrchestrator.js +350 -0
- package/dist/services/admin/backup/BackupOrchestrator.js.map +1 -0
- package/dist/services/admin/backup/DataStreamer.d.ts +11 -0
- package/dist/services/admin/backup/DataStreamer.d.ts.map +1 -0
- package/dist/services/admin/backup/DataStreamer.js +85 -0
- package/dist/services/admin/backup/DataStreamer.js.map +1 -0
- package/dist/services/admin/backup/LegacyAdapter.d.ts +28 -0
- package/dist/services/admin/backup/LegacyAdapter.d.ts.map +1 -0
- package/dist/services/admin/backup/LegacyAdapter.js +35 -0
- package/dist/services/admin/backup/LegacyAdapter.js.map +1 -0
- package/dist/services/admin/backup/SqliteGenerator.d.ts +15 -0
- package/dist/services/admin/backup/SqliteGenerator.d.ts.map +1 -0
- package/dist/services/admin/backup/SqliteGenerator.js +152 -0
- package/dist/services/admin/backup/SqliteGenerator.js.map +1 -0
- package/dist/services/admin/backup/StorageStreamer.d.ts +17 -0
- package/dist/services/admin/backup/StorageStreamer.d.ts.map +1 -0
- package/dist/services/admin/backup/StorageStreamer.js +117 -0
- package/dist/services/admin/backup/StorageStreamer.js.map +1 -0
- package/dist/services/admin/backup/ZipComposer.d.ts +17 -0
- package/dist/services/admin/backup/ZipComposer.d.ts.map +1 -0
- package/dist/services/admin/backup/ZipComposer.js +95 -0
- package/dist/services/admin/backup/ZipComposer.js.map +1 -0
- package/dist/services/admin/backup/ZipExtractor.d.ts +24 -0
- package/dist/services/admin/backup/ZipExtractor.d.ts.map +1 -0
- package/dist/services/admin/backup/ZipExtractor.js +135 -0
- package/dist/services/admin/backup/ZipExtractor.js.map +1 -0
- package/dist/services/admin/backup/index.d.ts +9 -0
- package/dist/services/admin/backup/index.d.ts.map +1 -0
- package/dist/services/admin/backup/index.js +18 -0
- package/dist/services/admin/backup/index.js.map +1 -0
- package/dist/services/admin/backup/types.d.ts +48 -0
- package/dist/services/admin/backup/types.d.ts.map +1 -0
- package/dist/services/admin/backup/types.js +3 -0
- package/dist/services/admin/backup/types.js.map +1 -0
- package/dist/services/admin/backup.service.d.ts +117 -0
- package/dist/services/admin/backup.service.d.ts.map +1 -0
- package/dist/services/admin/backup.service.js +709 -0
- package/dist/services/admin/backup.service.js.map +1 -0
- package/dist/services/admin/data.service.d.ts +109 -0
- package/dist/services/admin/data.service.d.ts.map +1 -0
- package/dist/services/admin/data.service.js +734 -0
- package/dist/services/admin/data.service.js.map +1 -0
- package/dist/services/admin/tenants.service.d.ts +99 -0
- package/dist/services/admin/tenants.service.d.ts.map +1 -0
- package/dist/services/admin/tenants.service.js +173 -0
- package/dist/services/admin/tenants.service.js.map +1 -0
- package/dist/services/auth.service.d.ts +155 -0
- package/dist/services/auth.service.d.ts.map +1 -0
- package/dist/services/auth.service.js +401 -0
- package/dist/services/auth.service.js.map +1 -0
- package/dist/services/introspection.service.d.ts +262 -0
- package/dist/services/introspection.service.d.ts.map +1 -0
- package/dist/services/introspection.service.js +400 -0
- package/dist/services/introspection.service.js.map +1 -0
- package/dist/services/invite.service.d.ts +87 -0
- package/dist/services/invite.service.d.ts.map +1 -0
- package/dist/services/invite.service.js +216 -0
- package/dist/services/invite.service.js.map +1 -0
- package/dist/services/storage.service.d.ts +79 -0
- package/dist/services/storage.service.d.ts.map +1 -0
- package/dist/services/storage.service.js +209 -0
- package/dist/services/storage.service.js.map +1 -0
- package/dist/services/system.service.d.ts +60 -0
- package/dist/services/system.service.d.ts.map +1 -0
- package/dist/services/system.service.js +176 -0
- package/dist/services/system.service.js.map +1 -0
- package/dist/services/tenant.service.d.ts +112 -0
- package/dist/services/tenant.service.d.ts.map +1 -0
- package/dist/services/tenant.service.js +359 -0
- package/dist/services/tenant.service.js.map +1 -0
- package/dist/settings/index.d.ts +6 -0
- package/dist/settings/index.d.ts.map +1 -0
- package/dist/settings/index.js +13 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/settings/schema.d.ts +39 -0
- package/dist/settings/schema.d.ts.map +1 -0
- package/dist/settings/schema.js +41 -0
- package/dist/settings/schema.js.map +1 -0
- package/dist/settings/service.d.ts +28 -0
- package/dist/settings/service.d.ts.map +1 -0
- package/dist/settings/service.js +133 -0
- package/dist/settings/service.js.map +1 -0
- package/dist/startup/bootstrap.d.ts +13 -0
- package/dist/startup/bootstrap.d.ts.map +1 -0
- package/dist/startup/bootstrap.js +262 -0
- package/dist/startup/bootstrap.js.map +1 -0
- package/dist/startup/cluster-manager.d.ts +59 -0
- package/dist/startup/cluster-manager.d.ts.map +1 -0
- package/dist/startup/cluster-manager.js +238 -0
- package/dist/startup/cluster-manager.js.map +1 -0
- package/dist/startup/process-manager.d.ts +46 -0
- package/dist/startup/process-manager.d.ts.map +1 -0
- package/dist/startup/process-manager.js +288 -0
- package/dist/startup/process-manager.js.map +1 -0
- package/dist/startup/processes.d.mts +15 -0
- package/dist/startup/processes.d.mts.map +1 -0
- package/dist/startup/processes.mjs +162 -0
- package/dist/startup/processes.mjs.map +1 -0
- package/dist/startup.js +42 -0
- package/dist/storage/fs-backend.d.ts +38 -0
- package/dist/storage/fs-backend.d.ts.map +1 -0
- package/dist/storage/fs-backend.js +129 -0
- package/dist/storage/fs-backend.js.map +1 -0
- package/dist/storage/manager.d.ts +88 -0
- package/dist/storage/manager.d.ts.map +1 -0
- package/dist/storage/manager.js +416 -0
- package/dist/storage/manager.js.map +1 -0
- package/dist/storage/s3-backend.d.ts +30 -0
- package/dist/storage/s3-backend.d.ts.map +1 -0
- package/dist/storage/s3-backend.js +65 -0
- package/dist/storage/s3-backend.js.map +1 -0
- package/dist/storage/types.d.ts +56 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +3 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/utils/http.d.ts +16 -0
- package/dist/utils/http.d.ts.map +1 -0
- package/dist/utils/http.js +61 -0
- package/dist/utils/http.js.map +1 -0
- package/dist/utils/introspection-helpers.d.ts +35 -0
- package/dist/utils/introspection-helpers.d.ts.map +1 -0
- package/dist/utils/introspection-helpers.js +246 -0
- package/dist/utils/introspection-helpers.js.map +1 -0
- package/dist/webhook/definition.d.ts +79 -0
- package/dist/webhook/definition.d.ts.map +1 -0
- package/dist/webhook/definition.js +33 -0
- package/dist/webhook/definition.js.map +1 -0
- package/dist/webhook/guard.d.ts +34 -0
- package/dist/webhook/guard.d.ts.map +1 -0
- package/dist/webhook/guard.js +86 -0
- package/dist/webhook/guard.js.map +1 -0
- package/dist/webhook/index.d.ts +9 -0
- package/dist/webhook/index.d.ts.map +1 -0
- package/dist/webhook/index.js +19 -0
- package/dist/webhook/index.js.map +1 -0
- package/dist/webhook/verifier.d.ts +24 -0
- package/dist/webhook/verifier.d.ts.map +1 -0
- package/dist/webhook/verifier.js +107 -0
- package/dist/webhook/verifier.js.map +1 -0
- package/dist/websocket/server.d.ts +74 -0
- package/dist/websocket/server.d.ts.map +1 -0
- package/dist/websocket/server.js +693 -0
- package/dist/websocket/server.js.map +1 -0
- package/dist/websocket/types.d.ts +53 -0
- package/dist/websocket/types.d.ts.map +1 -0
- package/dist/websocket/types.js +3 -0
- package/dist/websocket/types.js.map +1 -0
- package/dist/websocket/ws-compat.d.ts +26 -0
- package/dist/websocket/ws-compat.d.ts.map +1 -0
- package/dist/websocket/ws-compat.js +35 -0
- package/dist/websocket/ws-compat.js.map +1 -0
- package/docker/README.md +5 -0
- package/package.json +210 -0
- package/scripts/postinstall.js +31 -0
- package/templates/.env.example +55 -0
- package/templates/archlast.config.js +36 -0
- package/templates/docker-compose.dev.yml +8 -0
- package/templates/docker-compose.prod.yml +15 -0
- package/templates/docker-compose.yml +33 -0
|
@@ -0,0 +1,1092 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.SocketDatabaseClient = void 0;
|
|
40
|
+
exports.loadSocketConfig = loadSocketConfig;
|
|
41
|
+
const net_1 = __importDefault(require("net"));
|
|
42
|
+
const tls_1 = __importDefault(require("tls"));
|
|
43
|
+
const logger_js_1 = require("../logging/logger.js");
|
|
44
|
+
const builder_js_1 = require("../query/builder.js");
|
|
45
|
+
const context_js_1 = require("../engine/context.js");
|
|
46
|
+
const fs = __importStar(require("fs"));
|
|
47
|
+
const path = __importStar(require("path"));
|
|
48
|
+
/**
|
|
49
|
+
* Loads configuration from environment variables
|
|
50
|
+
* Implements Secure Document Store Protocol (v4) with Dev Shim
|
|
51
|
+
*/
|
|
52
|
+
function loadSocketConfig() {
|
|
53
|
+
const config = {
|
|
54
|
+
useUnixSocket: process.env.ARCHLAST_STORE_UNIX_SOCKET === "true",
|
|
55
|
+
socketPath: process.env.ARCHLAST_STORE_SOCKET_PATH,
|
|
56
|
+
host: process.env.ARCHLAST_STORE_HOST || "127.0.0.1",
|
|
57
|
+
port: parseInt(process.env.ARCHLAST_STORE_PORT || "7001", 10),
|
|
58
|
+
secret: process.env.ARCHLAST_STORE_SECRET || "",
|
|
59
|
+
certFingerprint: process.env.ARCHLAST_STORE_FINGERPRINT,
|
|
60
|
+
caPath: process.env.ARCHLAST_STORE_CA_PATH,
|
|
61
|
+
useTls: process.env.ARCHLAST_STORE_NO_TLS !== "true",
|
|
62
|
+
authTimeoutMs: parseInt(process.env.ARCHLAST_STORE_AUTH_TIMEOUT || "2000", 10),
|
|
63
|
+
};
|
|
64
|
+
// Dev Shim: Fallback to lock file if secret is not provided
|
|
65
|
+
if (!config.secret && process.env.NODE_ENV === "development") {
|
|
66
|
+
// Try multiple potential lock file locations
|
|
67
|
+
const possiblePaths = [
|
|
68
|
+
// From packages/server -> packages/document-store
|
|
69
|
+
path.resolve(process.cwd(), "..", "document-store", ".archlast", "store.lock"),
|
|
70
|
+
// From monorepo root -> packages/document-store
|
|
71
|
+
path.resolve(process.cwd(), "packages", "document-store", ".archlast", "store.lock"),
|
|
72
|
+
// Direct CWD (if running from document-store)
|
|
73
|
+
path.resolve(process.cwd(), ".archlast", "store.lock"),
|
|
74
|
+
];
|
|
75
|
+
for (const lockFilePath of possiblePaths) {
|
|
76
|
+
if (fs.existsSync(lockFilePath)) {
|
|
77
|
+
logger_js_1.logger.log({
|
|
78
|
+
timestamp: Date.now(),
|
|
79
|
+
level: "info",
|
|
80
|
+
kind: "system",
|
|
81
|
+
message: `[SocketClient] Loading config from dev lock file: ${lockFilePath}`,
|
|
82
|
+
});
|
|
83
|
+
Object.assign(config, loadConfigFromLockFile(lockFilePath));
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return config;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Loads configuration from a lock file (dev mode only)
|
|
92
|
+
*/
|
|
93
|
+
function loadConfigFromLockFile(lockFilePath) {
|
|
94
|
+
const content = fs.readFileSync(lockFilePath, "utf-8");
|
|
95
|
+
const lines = content.split("\n");
|
|
96
|
+
const config = {};
|
|
97
|
+
for (const line of lines) {
|
|
98
|
+
const parts = line.split("=", 2);
|
|
99
|
+
if (parts.length !== 2)
|
|
100
|
+
continue;
|
|
101
|
+
const key = parts[0].trim();
|
|
102
|
+
const value = parts[1].trim();
|
|
103
|
+
switch (key) {
|
|
104
|
+
case "HOST":
|
|
105
|
+
config.host = value;
|
|
106
|
+
break;
|
|
107
|
+
case "PORT":
|
|
108
|
+
config.port = parseInt(value, 10);
|
|
109
|
+
break;
|
|
110
|
+
case "SECRET":
|
|
111
|
+
config.secret = value;
|
|
112
|
+
break;
|
|
113
|
+
case "CERT_FINGERPRINT":
|
|
114
|
+
config.certFingerprint = value;
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return config;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Database client that connects to Archlast.Store via socket
|
|
122
|
+
* Supports Unix sockets, TCP, and TLS with PSK authentication
|
|
123
|
+
*/
|
|
124
|
+
class SocketDatabaseClient {
|
|
125
|
+
socket = null;
|
|
126
|
+
requestId = 0;
|
|
127
|
+
pendingRequests = new Map();
|
|
128
|
+
buffer = Buffer.alloc(0);
|
|
129
|
+
options;
|
|
130
|
+
connected = false;
|
|
131
|
+
connecting = false;
|
|
132
|
+
connectPromise = null;
|
|
133
|
+
authenticated = false;
|
|
134
|
+
// Schema storage for relationship resolution
|
|
135
|
+
schemaRelationships = new Map();
|
|
136
|
+
constructor(options = {}) {
|
|
137
|
+
this.options = {
|
|
138
|
+
useUnixSocket: options.useUnixSocket ?? false,
|
|
139
|
+
socketPath: options.socketPath ?? "archlast-store.sock",
|
|
140
|
+
host: options.host ?? "127.0.0.1",
|
|
141
|
+
port: options.port ?? 7001,
|
|
142
|
+
secret: options.secret ?? "",
|
|
143
|
+
certFingerprint: options.certFingerprint,
|
|
144
|
+
caPath: options.caPath,
|
|
145
|
+
useTls: options.useTls ?? true,
|
|
146
|
+
authTimeoutMs: options.authTimeoutMs ?? 2000,
|
|
147
|
+
};
|
|
148
|
+
// Validate secret for TCP connections (required for authentication)
|
|
149
|
+
// Note: Unix socket mode (dev) does not require a secret
|
|
150
|
+
if (!this.options.useUnixSocket && !this.options.secret && this.options.useTls !== false) {
|
|
151
|
+
throw new Error("ARCHLAST_STORE_SECRET is required for TCP connections. " +
|
|
152
|
+
"In production, set via environment variable. " +
|
|
153
|
+
"In development, ensure .archlast/store.lock exists or set a secret.");
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Ensures socket connection is established with retry logic
|
|
158
|
+
*/
|
|
159
|
+
async ensureConnection() {
|
|
160
|
+
if (this.connected && (this.options.useUnixSocket || this.authenticated))
|
|
161
|
+
return;
|
|
162
|
+
if (this.connecting && this.connectPromise) {
|
|
163
|
+
return this.connectPromise;
|
|
164
|
+
}
|
|
165
|
+
this.connecting = true;
|
|
166
|
+
this.connectPromise = this.connectWithRetry();
|
|
167
|
+
try {
|
|
168
|
+
return await this.connectPromise;
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
172
|
+
const endpoint = this.options.useUnixSocket
|
|
173
|
+
? this.options.socketPath
|
|
174
|
+
: `${this.options.host}:${this.options.port}`;
|
|
175
|
+
throw new Error(`Document Store unavailable at ${endpoint}. ` +
|
|
176
|
+
`Ensure Archlast.Store (C# service) is running. Original error: ${message}`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Attempts to connect with exponential backoff retry
|
|
181
|
+
*/
|
|
182
|
+
async connectWithRetry() {
|
|
183
|
+
const maxRetries = 10;
|
|
184
|
+
const baseDelayMs = 500;
|
|
185
|
+
const maxDelayMs = 5000;
|
|
186
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
187
|
+
try {
|
|
188
|
+
await this.attemptConnection();
|
|
189
|
+
return; // Success!
|
|
190
|
+
}
|
|
191
|
+
catch (err) {
|
|
192
|
+
const isLastAttempt = attempt === maxRetries;
|
|
193
|
+
if (isLastAttempt) {
|
|
194
|
+
this.connecting = false;
|
|
195
|
+
throw err;
|
|
196
|
+
}
|
|
197
|
+
// Exponential backoff with jitter
|
|
198
|
+
const delayMs = Math.min(baseDelayMs * Math.pow(2, attempt - 1), maxDelayMs);
|
|
199
|
+
const jitter = Math.random() * 200;
|
|
200
|
+
logger_js_1.logger.log({
|
|
201
|
+
timestamp: Date.now(),
|
|
202
|
+
level: "info",
|
|
203
|
+
kind: "system",
|
|
204
|
+
message: `[SocketClient] Connection attempt ${attempt}/${maxRetries} failed, retrying in ${Math.round(delayMs)}ms...`,
|
|
205
|
+
});
|
|
206
|
+
await this.sleep(delayMs + jitter);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Single connection attempt
|
|
212
|
+
*/
|
|
213
|
+
attemptConnection() {
|
|
214
|
+
return new Promise((resolve, reject) => {
|
|
215
|
+
this.buffer = Buffer.alloc(0);
|
|
216
|
+
this.socket?.removeAllListeners("data");
|
|
217
|
+
const cleanup = () => {
|
|
218
|
+
this.socket?.removeListener("error", onError);
|
|
219
|
+
if (!this.options.useUnixSocket && this.options.useTls) {
|
|
220
|
+
this.socket?.removeListener("secureConnect", onSecureConnect);
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
const onError = (err) => {
|
|
224
|
+
logger_js_1.logger.log({
|
|
225
|
+
timestamp: Date.now(),
|
|
226
|
+
level: "error",
|
|
227
|
+
kind: "system",
|
|
228
|
+
message: `[SocketClient] Connection error: ${err.message}`,
|
|
229
|
+
});
|
|
230
|
+
cleanup();
|
|
231
|
+
this.connected = false;
|
|
232
|
+
this.authenticated = false;
|
|
233
|
+
this.socket = null;
|
|
234
|
+
reject(err);
|
|
235
|
+
};
|
|
236
|
+
// Unix socket connection (no TLS, no auth)
|
|
237
|
+
if (this.options.useUnixSocket) {
|
|
238
|
+
this.socket = net_1.default.createConnection({ path: this.options.socketPath }, () => {
|
|
239
|
+
cleanup();
|
|
240
|
+
this.connected = true;
|
|
241
|
+
this.connecting = false;
|
|
242
|
+
// CRITICAL: Clear the connection timeout
|
|
243
|
+
this.socket?.setTimeout(0);
|
|
244
|
+
logger_js_1.logger.log({
|
|
245
|
+
timestamp: Date.now(),
|
|
246
|
+
level: "info",
|
|
247
|
+
kind: "system",
|
|
248
|
+
message: "[SocketClient] Connected via Unix socket",
|
|
249
|
+
});
|
|
250
|
+
this.setupSocketHandlers();
|
|
251
|
+
resolve();
|
|
252
|
+
});
|
|
253
|
+
this.socket.once("error", onError);
|
|
254
|
+
this.socket.setTimeout(5000, () => {
|
|
255
|
+
cleanup();
|
|
256
|
+
this.socket?.destroy();
|
|
257
|
+
this.socket = null;
|
|
258
|
+
reject(new Error("Connection timeout"));
|
|
259
|
+
});
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
// TCP connection with optional TLS
|
|
263
|
+
const onSecureConnect = async () => {
|
|
264
|
+
cleanup();
|
|
265
|
+
this.connected = true;
|
|
266
|
+
// CRITICAL: Clear the connection timeout after successful handshake
|
|
267
|
+
// to prevent idle timeout from closing the connection
|
|
268
|
+
this.socket?.setTimeout(0);
|
|
269
|
+
// Enable TCP keepalive for long-lived connections
|
|
270
|
+
if (this.socket && 'setKeepAlive' in this.socket) {
|
|
271
|
+
this.socket.setKeepAlive(true, 30000);
|
|
272
|
+
}
|
|
273
|
+
logger_js_1.logger.log({
|
|
274
|
+
timestamp: Date.now(),
|
|
275
|
+
level: "info",
|
|
276
|
+
kind: "system",
|
|
277
|
+
message: `[SocketClient] TLS handshake complete: ${this.options.host}:${this.options.port}`,
|
|
278
|
+
});
|
|
279
|
+
// Send authentication packet immediately
|
|
280
|
+
try {
|
|
281
|
+
await this.authenticate();
|
|
282
|
+
this.connecting = false;
|
|
283
|
+
this.setupSocketHandlers();
|
|
284
|
+
resolve();
|
|
285
|
+
}
|
|
286
|
+
catch (authErr) {
|
|
287
|
+
const error = authErr instanceof Error ? authErr : new Error(String(authErr));
|
|
288
|
+
onError(error);
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
if (this.options.useTls) {
|
|
292
|
+
// TLS connection options - Strict validation per Secure Protocol
|
|
293
|
+
const tlsOptions = {
|
|
294
|
+
host: this.options.host,
|
|
295
|
+
port: this.options.port,
|
|
296
|
+
// For self-signed certs (dev mode with fingerprint), we must disable default CA validation
|
|
297
|
+
// and rely on fingerprint validation instead. For production with CA, we use strict validation.
|
|
298
|
+
rejectUnauthorized: !this.options.certFingerprint,
|
|
299
|
+
minVersion: "TLSv1.2", // Allow TLS 1.2+ (server supports both 1.2 and 1.3)
|
|
300
|
+
};
|
|
301
|
+
// Add CA if provided (Production mode)
|
|
302
|
+
if (this.options.caPath && fs.existsSync(this.options.caPath)) {
|
|
303
|
+
tlsOptions.ca = fs.readFileSync(this.options.caPath);
|
|
304
|
+
tlsOptions.rejectUnauthorized = true; // Enable strict validation with CA
|
|
305
|
+
}
|
|
306
|
+
// Add certificate fingerprint validation for self-signed certs (Dev mode)
|
|
307
|
+
if (this.options.certFingerprint) {
|
|
308
|
+
tlsOptions.checkServerIdentity = (host, cert) => {
|
|
309
|
+
// Node.js fingerprint format: XX:XX:XX:... (with colons, uppercase)
|
|
310
|
+
// Our lock file format: xxxx... (no colons, lowercase)
|
|
311
|
+
const normalizedCertFingerprint = cert.fingerprint256
|
|
312
|
+
.replace(/:/g, "")
|
|
313
|
+
.toLowerCase();
|
|
314
|
+
const expectedFingerprint = this.options.certFingerprint.toLowerCase();
|
|
315
|
+
if (normalizedCertFingerprint !== expectedFingerprint) {
|
|
316
|
+
return new Error(`Security Alert: Server Fingerprint Mismatch! ` +
|
|
317
|
+
`Expected: ${expectedFingerprint}, Got: ${normalizedCertFingerprint}`);
|
|
318
|
+
}
|
|
319
|
+
return undefined;
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
this.socket = tls_1.default.connect(tlsOptions, () => {
|
|
323
|
+
// Wait for secureConnect event
|
|
324
|
+
});
|
|
325
|
+
this.socket.once("secureConnect", onSecureConnect);
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
// Plain TCP connection (not recommended for production)
|
|
329
|
+
this.socket = net_1.default.createConnection({ host: this.options.host, port: this.options.port }, () => {
|
|
330
|
+
cleanup();
|
|
331
|
+
this.connected = true;
|
|
332
|
+
this.connecting = false;
|
|
333
|
+
// CRITICAL: Clear the connection timeout
|
|
334
|
+
this.socket?.setTimeout(0);
|
|
335
|
+
this.socket?.setKeepAlive(true, 30000);
|
|
336
|
+
logger_js_1.logger.log({
|
|
337
|
+
timestamp: Date.now(),
|
|
338
|
+
level: "warn",
|
|
339
|
+
kind: "system",
|
|
340
|
+
message: `[SocketClient] Connected via PLAIN TCP (insecure): ${this.options.host}:${this.options.port}`,
|
|
341
|
+
});
|
|
342
|
+
// Still authenticate even without TLS
|
|
343
|
+
this.authenticate()
|
|
344
|
+
.then(() => {
|
|
345
|
+
this.setupSocketHandlers();
|
|
346
|
+
resolve();
|
|
347
|
+
})
|
|
348
|
+
.catch(onError);
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
this.socket?.once("error", onError);
|
|
352
|
+
// Connection timeout
|
|
353
|
+
this.socket?.setTimeout(5000, () => {
|
|
354
|
+
cleanup();
|
|
355
|
+
this.socket?.destroy();
|
|
356
|
+
this.socket = null;
|
|
357
|
+
reject(new Error("Connection timeout"));
|
|
358
|
+
});
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Sends authentication packet (JSON with PSK) to server
|
|
363
|
+
* Implements Secure Protocol v4: JSON auth packet with length prefix
|
|
364
|
+
*/
|
|
365
|
+
async authenticate() {
|
|
366
|
+
if (!this.socket) {
|
|
367
|
+
throw new Error("Socket not connected");
|
|
368
|
+
}
|
|
369
|
+
// Build auth request: { "op": "auth", "token": "<secret>" }
|
|
370
|
+
const authRequest = {
|
|
371
|
+
op: "auth",
|
|
372
|
+
token: this.options.secret,
|
|
373
|
+
};
|
|
374
|
+
// Serialize to JSON
|
|
375
|
+
const authJson = JSON.stringify(authRequest);
|
|
376
|
+
const authBytes = Buffer.from(authJson, "utf8");
|
|
377
|
+
// Add 4-byte length prefix (little-endian)
|
|
378
|
+
const lengthPrefix = Buffer.alloc(4);
|
|
379
|
+
lengthPrefix.writeInt32LE(authBytes.length, 0);
|
|
380
|
+
const authPacket = Buffer.concat([lengthPrefix, authBytes]);
|
|
381
|
+
return new Promise((resolve, reject) => {
|
|
382
|
+
const timeout = setTimeout(() => {
|
|
383
|
+
reject(new Error("Authentication timeout"));
|
|
384
|
+
}, this.options.authTimeoutMs);
|
|
385
|
+
this.socket.write(authPacket, (err) => {
|
|
386
|
+
clearTimeout(timeout);
|
|
387
|
+
if (err) {
|
|
388
|
+
reject(err);
|
|
389
|
+
}
|
|
390
|
+
else {
|
|
391
|
+
// Wait for auth response before marking as authenticated
|
|
392
|
+
// The response will be handled by handleData()
|
|
393
|
+
this.waitForAuthResponse()
|
|
394
|
+
.then(() => {
|
|
395
|
+
this.authenticated = true;
|
|
396
|
+
logger_js_1.logger.log({
|
|
397
|
+
timestamp: Date.now(),
|
|
398
|
+
level: "info",
|
|
399
|
+
kind: "system",
|
|
400
|
+
message: "[SocketClient] TLS Authentication successful",
|
|
401
|
+
});
|
|
402
|
+
resolve();
|
|
403
|
+
})
|
|
404
|
+
.catch(reject);
|
|
405
|
+
}
|
|
406
|
+
});
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Waits for auth response from server
|
|
411
|
+
*/
|
|
412
|
+
async waitForAuthResponse() {
|
|
413
|
+
return new Promise((resolve, reject) => {
|
|
414
|
+
const timeout = setTimeout(() => {
|
|
415
|
+
this.socket?.removeListener("data", dataHandler);
|
|
416
|
+
reject(new Error("Auth response timeout"));
|
|
417
|
+
}, this.options.authTimeoutMs);
|
|
418
|
+
const dataHandler = (chunk) => {
|
|
419
|
+
this.buffer = Buffer.concat([this.buffer, chunk]);
|
|
420
|
+
// Need at least 4 bytes for length prefix
|
|
421
|
+
if (this.buffer.length >= 4) {
|
|
422
|
+
const length = this.buffer.readInt32LE(0);
|
|
423
|
+
// Validate length is reasonable (prevent memory issues)
|
|
424
|
+
if (length <= 0 || length > 10 * 1024 * 1024) {
|
|
425
|
+
this.socket?.removeListener("data", dataHandler);
|
|
426
|
+
clearTimeout(timeout);
|
|
427
|
+
reject(new Error(`Invalid auth response length: ${length}`));
|
|
428
|
+
return;
|
|
429
|
+
}
|
|
430
|
+
// Wait for complete message
|
|
431
|
+
if (this.buffer.length >= 4 + length) {
|
|
432
|
+
const messageBytes = this.buffer.slice(4, 4 + length);
|
|
433
|
+
let message;
|
|
434
|
+
try {
|
|
435
|
+
message = JSON.parse(messageBytes.toString("utf8"));
|
|
436
|
+
}
|
|
437
|
+
catch (e) {
|
|
438
|
+
this.socket?.removeListener("data", dataHandler);
|
|
439
|
+
clearTimeout(timeout);
|
|
440
|
+
reject(new Error(`Failed to parse auth response: ${e}`));
|
|
441
|
+
return;
|
|
442
|
+
}
|
|
443
|
+
this.buffer = this.buffer.slice(4 + length);
|
|
444
|
+
// Clean up handlers
|
|
445
|
+
this.socket?.removeListener("data", dataHandler);
|
|
446
|
+
clearTimeout(timeout);
|
|
447
|
+
if (message.success) {
|
|
448
|
+
resolve();
|
|
449
|
+
}
|
|
450
|
+
else {
|
|
451
|
+
reject(new Error(message.error || "Authentication failed"));
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
};
|
|
456
|
+
// Use .on() instead of .once() to handle fragmented responses
|
|
457
|
+
this.socket?.on("data", dataHandler);
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
/**
|
|
461
|
+
* Sets up socket event handlers after successful connection
|
|
462
|
+
*/
|
|
463
|
+
setupSocketHandlers() {
|
|
464
|
+
if (!this.socket)
|
|
465
|
+
return;
|
|
466
|
+
this.socket.on("data", (chunk) => this.handleData(chunk));
|
|
467
|
+
this.socket.on("error", (err) => {
|
|
468
|
+
logger_js_1.logger.log({
|
|
469
|
+
timestamp: Date.now(),
|
|
470
|
+
level: "error",
|
|
471
|
+
kind: "system",
|
|
472
|
+
message: "[SocketClient] Socket error:",
|
|
473
|
+
context: { data: [err.message] },
|
|
474
|
+
});
|
|
475
|
+
this.connected = false;
|
|
476
|
+
this.authenticated = false;
|
|
477
|
+
});
|
|
478
|
+
this.socket.on("close", () => {
|
|
479
|
+
logger_js_1.logger.log({
|
|
480
|
+
timestamp: Date.now(),
|
|
481
|
+
level: "info",
|
|
482
|
+
kind: "system",
|
|
483
|
+
message: "[SocketClient] Connection closed",
|
|
484
|
+
});
|
|
485
|
+
this.connected = false;
|
|
486
|
+
this.authenticated = false;
|
|
487
|
+
this.socket = null;
|
|
488
|
+
this.connectPromise = null;
|
|
489
|
+
});
|
|
490
|
+
}
|
|
491
|
+
sleep(ms) {
|
|
492
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
493
|
+
}
|
|
494
|
+
/**
|
|
495
|
+
* Handles incoming data from socket
|
|
496
|
+
*/
|
|
497
|
+
handleData(chunk) {
|
|
498
|
+
this.buffer = Buffer.concat([this.buffer, chunk]);
|
|
499
|
+
while (this.buffer.length >= 4) {
|
|
500
|
+
const length = this.buffer.readInt32LE(0);
|
|
501
|
+
if (this.buffer.length < 4 + length) {
|
|
502
|
+
break; // Wait for more data
|
|
503
|
+
}
|
|
504
|
+
const messageBytes = this.buffer.slice(4, 4 + length);
|
|
505
|
+
const message = JSON.parse(messageBytes.toString("utf8"));
|
|
506
|
+
const pending = this.pendingRequests.get(message.reqId);
|
|
507
|
+
if (pending) {
|
|
508
|
+
this.pendingRequests.delete(message.reqId);
|
|
509
|
+
if (message.success) {
|
|
510
|
+
pending.resolve(message.data);
|
|
511
|
+
}
|
|
512
|
+
else {
|
|
513
|
+
pending.reject(new Error(message.error || "Unknown error"));
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
this.buffer = this.buffer.slice(4 + length);
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
/**
|
|
520
|
+
* Sends a request to the store and waits for response
|
|
521
|
+
*/
|
|
522
|
+
async sendRequest(operation, spec) {
|
|
523
|
+
try {
|
|
524
|
+
await this.ensureConnection();
|
|
525
|
+
}
|
|
526
|
+
catch (err) {
|
|
527
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
528
|
+
logger_js_1.logger.log({
|
|
529
|
+
timestamp: Date.now(),
|
|
530
|
+
level: "error",
|
|
531
|
+
kind: "system",
|
|
532
|
+
message: "[SocketClient] Connection failed",
|
|
533
|
+
context: { error: message },
|
|
534
|
+
});
|
|
535
|
+
throw err;
|
|
536
|
+
}
|
|
537
|
+
return new Promise((resolve, reject) => {
|
|
538
|
+
const reqId = ++this.requestId;
|
|
539
|
+
const timeoutMs = 30000; // 30s timeout for requests
|
|
540
|
+
const timeout = setTimeout(() => {
|
|
541
|
+
this.pendingRequests.delete(reqId);
|
|
542
|
+
reject(new Error(`Request timeout for operation '${operation}'. ` +
|
|
543
|
+
`Document Store may be overloaded or unresponsive.`));
|
|
544
|
+
}, timeoutMs);
|
|
545
|
+
this.pendingRequests.set(reqId, {
|
|
546
|
+
resolve: (value) => {
|
|
547
|
+
clearTimeout(timeout);
|
|
548
|
+
resolve(value);
|
|
549
|
+
},
|
|
550
|
+
reject: (error) => {
|
|
551
|
+
clearTimeout(timeout);
|
|
552
|
+
reject(error);
|
|
553
|
+
},
|
|
554
|
+
});
|
|
555
|
+
const request = {
|
|
556
|
+
id: reqId,
|
|
557
|
+
op: operation,
|
|
558
|
+
spec: spec,
|
|
559
|
+
};
|
|
560
|
+
const json = JSON.stringify(request);
|
|
561
|
+
const bytes = Buffer.from(json, "utf8");
|
|
562
|
+
const lengthBuffer = Buffer.allocUnsafe(4);
|
|
563
|
+
lengthBuffer.writeInt32LE(bytes.length, 0);
|
|
564
|
+
this.socket.write(lengthBuffer);
|
|
565
|
+
this.socket.write(bytes);
|
|
566
|
+
});
|
|
567
|
+
}
|
|
568
|
+
/**
|
|
569
|
+
* Normalizes a where clause for the Document Store.
|
|
570
|
+
* The C# Store now supports operator-based conditions.
|
|
571
|
+
* This method flattens 'and' conditions and preserves operator objects.
|
|
572
|
+
*/
|
|
573
|
+
normalizeWhere(where) {
|
|
574
|
+
if (!where || typeof where !== "object")
|
|
575
|
+
return where;
|
|
576
|
+
const normalized = {};
|
|
577
|
+
for (const [key, value] of Object.entries(where)) {
|
|
578
|
+
// Handle 'and' operator - flatten conditions
|
|
579
|
+
if (key === "and" && Array.isArray(value)) {
|
|
580
|
+
for (const condition of value) {
|
|
581
|
+
const normalizedCondition = this.normalizeWhere(condition);
|
|
582
|
+
Object.assign(normalized, normalizedCondition);
|
|
583
|
+
}
|
|
584
|
+
continue;
|
|
585
|
+
}
|
|
586
|
+
// Handle 'or' operator - not fully supported, log warning
|
|
587
|
+
if (key === "or" && Array.isArray(value)) {
|
|
588
|
+
logger_js_1.logger.log({
|
|
589
|
+
timestamp: Date.now(),
|
|
590
|
+
level: "warn",
|
|
591
|
+
kind: "system",
|
|
592
|
+
message: "[SocketClient] 'or' operator not fully supported, using first condition only",
|
|
593
|
+
});
|
|
594
|
+
if (value.length > 0) {
|
|
595
|
+
const normalizedCondition = this.normalizeWhere(value[0]);
|
|
596
|
+
Object.assign(normalized, normalizedCondition);
|
|
597
|
+
}
|
|
598
|
+
continue;
|
|
599
|
+
}
|
|
600
|
+
// Handle 'not' operator - not fully supported
|
|
601
|
+
if (key === "not" && typeof value === "object") {
|
|
602
|
+
logger_js_1.logger.log({
|
|
603
|
+
timestamp: Date.now(),
|
|
604
|
+
level: "warn",
|
|
605
|
+
kind: "system",
|
|
606
|
+
message: "[SocketClient] 'not' operator not fully supported",
|
|
607
|
+
});
|
|
608
|
+
continue;
|
|
609
|
+
}
|
|
610
|
+
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
611
|
+
// Check if it's an operator object - pass through to C# Store
|
|
612
|
+
const supportedOperators = [
|
|
613
|
+
"eq",
|
|
614
|
+
"ne",
|
|
615
|
+
"gt",
|
|
616
|
+
"gte",
|
|
617
|
+
"lt",
|
|
618
|
+
"lte",
|
|
619
|
+
"in",
|
|
620
|
+
"notIn",
|
|
621
|
+
"contains",
|
|
622
|
+
"startsWith",
|
|
623
|
+
"endsWith",
|
|
624
|
+
"isNull",
|
|
625
|
+
"isNotNull",
|
|
626
|
+
];
|
|
627
|
+
const hasOperator = supportedOperators.some((op) => op in value);
|
|
628
|
+
if (hasOperator) {
|
|
629
|
+
// Pass operator object directly to C# Store
|
|
630
|
+
normalized[key] = value;
|
|
631
|
+
}
|
|
632
|
+
else {
|
|
633
|
+
// Nested object without operators - recurse
|
|
634
|
+
normalized[key] = this.normalizeWhere(value);
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
else {
|
|
638
|
+
// Simple value (converts to equality in C# Store)
|
|
639
|
+
normalized[key] = value;
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
return normalized;
|
|
643
|
+
}
|
|
644
|
+
// ========== GenericDatabaseReader Methods ==========
|
|
645
|
+
async get(tableName, id) {
|
|
646
|
+
const result = await this.sendRequest("get", {
|
|
647
|
+
collection: tableName,
|
|
648
|
+
id,
|
|
649
|
+
});
|
|
650
|
+
return result || null;
|
|
651
|
+
}
|
|
652
|
+
async list(tableName) {
|
|
653
|
+
const result = await this.sendRequest("query", {
|
|
654
|
+
collection: tableName,
|
|
655
|
+
});
|
|
656
|
+
return result || [];
|
|
657
|
+
}
|
|
658
|
+
query(tableName) {
|
|
659
|
+
// Return a query builder that will use this client as executor
|
|
660
|
+
return new builder_js_1.QueryBuilderImpl(tableName, this);
|
|
661
|
+
}
|
|
662
|
+
async findMany(tableName, options) {
|
|
663
|
+
const result = await this.sendRequest("query", {
|
|
664
|
+
collection: tableName,
|
|
665
|
+
where: this.normalizeWhere(options?.where),
|
|
666
|
+
orderBy: options?.orderBy,
|
|
667
|
+
take: options?.take,
|
|
668
|
+
skip: options?.skip,
|
|
669
|
+
select: options?.select,
|
|
670
|
+
});
|
|
671
|
+
// Reactivity: Track read dependency
|
|
672
|
+
const store = context_js_1.executionContext.getStore();
|
|
673
|
+
if (store) {
|
|
674
|
+
store.trackRead(`collection:${String(tableName)}`);
|
|
675
|
+
}
|
|
676
|
+
return result || [];
|
|
677
|
+
}
|
|
678
|
+
async findFirst(tableName, options) {
|
|
679
|
+
const results = await this.findMany(tableName, { ...options, take: 1 });
|
|
680
|
+
return results[0] || null;
|
|
681
|
+
}
|
|
682
|
+
async findUnique(tableName, where) {
|
|
683
|
+
const results = await this.findMany(tableName, { where, take: 1 });
|
|
684
|
+
return results[0] || null;
|
|
685
|
+
}
|
|
686
|
+
async count(tableName, where) {
|
|
687
|
+
const result = await this.sendRequest("count", {
|
|
688
|
+
collection: tableName,
|
|
689
|
+
where: this.normalizeWhere(where),
|
|
690
|
+
});
|
|
691
|
+
// Reactivity: Track read dependency
|
|
692
|
+
const store = context_js_1.executionContext.getStore();
|
|
693
|
+
if (store) {
|
|
694
|
+
store.trackRead(`collection:${String(tableName)}`);
|
|
695
|
+
}
|
|
696
|
+
return result?.count || 0;
|
|
697
|
+
}
|
|
698
|
+
async loadRelation(tableName, record, relationName) {
|
|
699
|
+
const relationships = this.schemaRelationships.get(tableName);
|
|
700
|
+
if (!relationships || !relationships[relationName]) {
|
|
701
|
+
logger_js_1.logger.log({
|
|
702
|
+
timestamp: Date.now(),
|
|
703
|
+
level: "warn",
|
|
704
|
+
kind: "system",
|
|
705
|
+
message: `[SocketClient] No relationship '${relationName}' defined for '${String(tableName)}'`,
|
|
706
|
+
});
|
|
707
|
+
return [];
|
|
708
|
+
}
|
|
709
|
+
const rel = relationships[relationName];
|
|
710
|
+
const recordId = record._id;
|
|
711
|
+
if (rel.type === "hasMany") {
|
|
712
|
+
// hasMany: Find all records in target table where foreignKey = this record's _id
|
|
713
|
+
const foreignKey = rel.foreignKey || `${String(tableName).slice(0, -1)}_id`; // e.g., "tasks" -> "task_id"
|
|
714
|
+
const result = await this.sendRequest("query", {
|
|
715
|
+
collection: rel.target,
|
|
716
|
+
where: { [foreignKey]: recordId },
|
|
717
|
+
});
|
|
718
|
+
return (result || []);
|
|
719
|
+
}
|
|
720
|
+
if (rel.type === "hasOne") {
|
|
721
|
+
// hasOne: Find single record in target table where foreignKey = this record's _id
|
|
722
|
+
const foreignKey = rel.foreignKey || `${String(tableName).slice(0, -1)}_id`;
|
|
723
|
+
const result = await this.sendRequest("query", {
|
|
724
|
+
collection: rel.target,
|
|
725
|
+
where: { [foreignKey]: recordId },
|
|
726
|
+
take: 1,
|
|
727
|
+
});
|
|
728
|
+
return (result?.[0] || null);
|
|
729
|
+
}
|
|
730
|
+
if (rel.type === "belongsTo") {
|
|
731
|
+
// belongsTo: Find single record in target table by this record's foreignKey value
|
|
732
|
+
const foreignKey = rel.foreignKey || `${rel.target.slice(0, -1)}_id`; // e.g., target "tasks" -> "task_id"
|
|
733
|
+
const foreignId = record[foreignKey];
|
|
734
|
+
if (!foreignId)
|
|
735
|
+
return null;
|
|
736
|
+
const result = await this.sendRequest("get", {
|
|
737
|
+
collection: rel.target,
|
|
738
|
+
id: foreignId,
|
|
739
|
+
});
|
|
740
|
+
return (result || null);
|
|
741
|
+
}
|
|
742
|
+
logger_js_1.logger.log({
|
|
743
|
+
timestamp: Date.now(),
|
|
744
|
+
level: "warn",
|
|
745
|
+
kind: "system",
|
|
746
|
+
message: `[SocketClient] Unsupported relationship type: ${rel.type}`,
|
|
747
|
+
});
|
|
748
|
+
return [];
|
|
749
|
+
}
|
|
750
|
+
async loadRelations(tableName, records, relationName) {
|
|
751
|
+
const resultMap = new Map();
|
|
752
|
+
if (records.length === 0) {
|
|
753
|
+
return resultMap;
|
|
754
|
+
}
|
|
755
|
+
const relationships = this.schemaRelationships.get(tableName);
|
|
756
|
+
if (!relationships || !relationships[relationName]) {
|
|
757
|
+
logger_js_1.logger.log({
|
|
758
|
+
timestamp: Date.now(),
|
|
759
|
+
level: "warn",
|
|
760
|
+
kind: "system",
|
|
761
|
+
message: `[SocketClient] No relationship '${relationName}' defined for '${String(tableName)}'`,
|
|
762
|
+
});
|
|
763
|
+
return resultMap;
|
|
764
|
+
}
|
|
765
|
+
const rel = relationships[relationName];
|
|
766
|
+
const recordIds = records.map((r) => r._id);
|
|
767
|
+
if (rel.type === "hasMany") {
|
|
768
|
+
// Batch query: Find all records where foreignKey IN [ids]
|
|
769
|
+
const foreignKey = rel.foreignKey || `${String(tableName).slice(0, -1)}_id`;
|
|
770
|
+
const result = await this.sendRequest("query", {
|
|
771
|
+
collection: rel.target,
|
|
772
|
+
where: { [foreignKey]: { in: recordIds } },
|
|
773
|
+
});
|
|
774
|
+
// Group results by foreign key
|
|
775
|
+
const allRelated = result || [];
|
|
776
|
+
for (const related of allRelated) {
|
|
777
|
+
const fkValue = related[foreignKey];
|
|
778
|
+
if (!resultMap.has(fkValue)) {
|
|
779
|
+
resultMap.set(fkValue, []);
|
|
780
|
+
}
|
|
781
|
+
resultMap.get(fkValue).push(related);
|
|
782
|
+
}
|
|
783
|
+
// Ensure all records have an entry (even if empty)
|
|
784
|
+
for (const id of recordIds) {
|
|
785
|
+
if (!resultMap.has(id)) {
|
|
786
|
+
resultMap.set(id, []);
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
}
|
|
790
|
+
else if (rel.type === "belongsTo") {
|
|
791
|
+
// Batch query: Get all target records by IDs
|
|
792
|
+
const foreignKey = rel.foreignKey || `${rel.target.slice(0, -1)}_id`;
|
|
793
|
+
const foreignIds = records
|
|
794
|
+
.map((r) => r[foreignKey])
|
|
795
|
+
.filter((id) => id != null);
|
|
796
|
+
if (foreignIds.length > 0) {
|
|
797
|
+
const result = await this.sendRequest("query", {
|
|
798
|
+
collection: rel.target,
|
|
799
|
+
where: { _id: { in: foreignIds } },
|
|
800
|
+
});
|
|
801
|
+
// Create lookup by _id
|
|
802
|
+
const lookup = new Map();
|
|
803
|
+
for (const item of result || []) {
|
|
804
|
+
lookup.set(item._id, item);
|
|
805
|
+
}
|
|
806
|
+
// Map back to original records
|
|
807
|
+
for (const record of records) {
|
|
808
|
+
const fkValue = record[foreignKey];
|
|
809
|
+
const recordId = record._id;
|
|
810
|
+
resultMap.set(recordId, lookup.get(fkValue) || null);
|
|
811
|
+
}
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
return resultMap;
|
|
815
|
+
}
|
|
816
|
+
// ========== GenericDatabaseWriter Methods ==========
|
|
817
|
+
// Add stored schema metadata
|
|
818
|
+
schemaMetadata = new Map();
|
|
819
|
+
/**
|
|
820
|
+
* Apply schema definitions for validation and type generation
|
|
821
|
+
*/
|
|
822
|
+
async applySchema(schema) {
|
|
823
|
+
if (!schema || !schema.tables) {
|
|
824
|
+
logger_js_1.logger.log({
|
|
825
|
+
timestamp: Date.now(),
|
|
826
|
+
level: "info",
|
|
827
|
+
kind: "system",
|
|
828
|
+
message: "[SocketClient] No schema to apply",
|
|
829
|
+
});
|
|
830
|
+
return;
|
|
831
|
+
}
|
|
832
|
+
// 1. Store field metadata for enforcement
|
|
833
|
+
for (const [tableName, tableDef] of Object.entries(schema.tables)) {
|
|
834
|
+
const fieldMap = new Map();
|
|
835
|
+
for (const [fieldName, fieldDef] of Object.entries(tableDef.schema)) {
|
|
836
|
+
fieldMap.set(fieldName, fieldDef.metadata || {});
|
|
837
|
+
}
|
|
838
|
+
this.schemaMetadata.set(tableName, fieldMap);
|
|
839
|
+
}
|
|
840
|
+
logger_js_1.logger.log({
|
|
841
|
+
timestamp: Date.now(),
|
|
842
|
+
level: "info",
|
|
843
|
+
kind: "system",
|
|
844
|
+
message: "[SocketClient] Applying schema with indexes and relationships...",
|
|
845
|
+
});
|
|
846
|
+
const schemaPromises = [];
|
|
847
|
+
for (const [tableName, tableDef] of Object.entries(schema.tables)) {
|
|
848
|
+
const table = tableDef;
|
|
849
|
+
// 2. Store relationships for runtime resolution
|
|
850
|
+
if (table.relationships) {
|
|
851
|
+
this.schemaRelationships.set(tableName, table.relationships);
|
|
852
|
+
logger_js_1.logger.log({
|
|
853
|
+
timestamp: Date.now(),
|
|
854
|
+
level: "info",
|
|
855
|
+
kind: "system",
|
|
856
|
+
message: `[SocketClient] Stored ${Object.keys(table.relationships).length} relationship(s) for ${tableName}`,
|
|
857
|
+
});
|
|
858
|
+
}
|
|
859
|
+
// 3. Extract indexes if defined
|
|
860
|
+
if (table.indexes && Array.isArray(table.indexes) && table.indexes.length > 0) {
|
|
861
|
+
const indexes = table.indexes.map((idx, i) => ({
|
|
862
|
+
name: idx.name || `idx_${tableName}_${idx.fields.join("_")}`,
|
|
863
|
+
fields: idx.fields,
|
|
864
|
+
unique: idx.unique || false,
|
|
865
|
+
}));
|
|
866
|
+
// Send setSchema request to document store
|
|
867
|
+
const promise = this.sendRequest("setSchema", {
|
|
868
|
+
collection: tableName,
|
|
869
|
+
indexes,
|
|
870
|
+
})
|
|
871
|
+
.then(() => {
|
|
872
|
+
logger_js_1.logger.log({
|
|
873
|
+
timestamp: Date.now(),
|
|
874
|
+
level: "info",
|
|
875
|
+
kind: "system",
|
|
876
|
+
message: `[SocketClient] Indexes applied for ${tableName}: ${indexes.length} index(es)`,
|
|
877
|
+
});
|
|
878
|
+
})
|
|
879
|
+
.catch((err) => {
|
|
880
|
+
logger_js_1.logger.log({
|
|
881
|
+
timestamp: Date.now(),
|
|
882
|
+
level: "error",
|
|
883
|
+
kind: "system",
|
|
884
|
+
message: `[SocketClient] Failed to apply indexes for ${tableName}:`,
|
|
885
|
+
context: { data: [err.message] },
|
|
886
|
+
});
|
|
887
|
+
});
|
|
888
|
+
schemaPromises.push(promise);
|
|
889
|
+
}
|
|
890
|
+
}
|
|
891
|
+
// Wait for all schema applications
|
|
892
|
+
if (schemaPromises.length > 0) {
|
|
893
|
+
await Promise.all(schemaPromises);
|
|
894
|
+
logger_js_1.logger.log({
|
|
895
|
+
timestamp: Date.now(),
|
|
896
|
+
level: "info",
|
|
897
|
+
kind: "system",
|
|
898
|
+
message: `[SocketClient] Schema applied successfully for ${schemaPromises.length} collection(s)`,
|
|
899
|
+
});
|
|
900
|
+
}
|
|
901
|
+
else {
|
|
902
|
+
logger_js_1.logger.log({
|
|
903
|
+
timestamp: Date.now(),
|
|
904
|
+
level: "info",
|
|
905
|
+
kind: "system",
|
|
906
|
+
message: "[SocketClient] Schema applied (no indexes defined)",
|
|
907
|
+
});
|
|
908
|
+
}
|
|
909
|
+
}
|
|
910
|
+
// Schema enforcement helper
|
|
911
|
+
applySchemaEnforcement(tableName, data, operation) {
|
|
912
|
+
const fieldMetadata = this.schemaMetadata.get(tableName);
|
|
913
|
+
if (!fieldMetadata)
|
|
914
|
+
return data;
|
|
915
|
+
const result = { ...data };
|
|
916
|
+
const now = new Date();
|
|
917
|
+
for (const [fieldName, metadata] of fieldMetadata.entries()) {
|
|
918
|
+
// createdNow: Set on insert only
|
|
919
|
+
if (operation === "insert" && metadata.modifiers && (metadata.modifiers & (1 << 0))) { // CreatedNow
|
|
920
|
+
result[fieldName] = now;
|
|
921
|
+
}
|
|
922
|
+
// updateNow: Set on insert AND update
|
|
923
|
+
if (metadata.modifiers && (metadata.modifiers & (1 << 1))) { // UpdateNow
|
|
924
|
+
result[fieldName] = now;
|
|
925
|
+
}
|
|
926
|
+
// Apply defaults on insert if value not provided
|
|
927
|
+
if (operation === "insert" && metadata.default !== undefined && (metadata.modifiers && (metadata.modifiers & (1 << 4)))) { // HasDefault
|
|
928
|
+
if (result[fieldName] === undefined) {
|
|
929
|
+
result[fieldName] = metadata.default;
|
|
930
|
+
}
|
|
931
|
+
}
|
|
932
|
+
}
|
|
933
|
+
return result;
|
|
934
|
+
}
|
|
935
|
+
async insert(tableName, data) {
|
|
936
|
+
const enrichedData = this.applySchemaEnforcement(tableName, data, "insert");
|
|
937
|
+
const result = await this.sendRequest("insert", {
|
|
938
|
+
collection: tableName,
|
|
939
|
+
data: enrichedData,
|
|
940
|
+
});
|
|
941
|
+
// Reactivity: Track write dependency (affects collection)
|
|
942
|
+
const store = context_js_1.executionContext.getStore();
|
|
943
|
+
if (store) {
|
|
944
|
+
store.trackWrite(`collection:${String(tableName)}`);
|
|
945
|
+
}
|
|
946
|
+
return result.id;
|
|
947
|
+
}
|
|
948
|
+
async insertMany(tableName, data) {
|
|
949
|
+
const enrichedData = data.map(d => this.applySchemaEnforcement(tableName, d, "insert"));
|
|
950
|
+
const result = await this.sendRequest("insertMany", {
|
|
951
|
+
collection: tableName,
|
|
952
|
+
data: enrichedData,
|
|
953
|
+
});
|
|
954
|
+
// Reactivity: Track write dependency
|
|
955
|
+
const store = context_js_1.executionContext.getStore();
|
|
956
|
+
if (store) {
|
|
957
|
+
store.trackWrite(`collection:${String(tableName)}`);
|
|
958
|
+
}
|
|
959
|
+
return result.ids || [];
|
|
960
|
+
}
|
|
961
|
+
async update(tableName, id, data) {
|
|
962
|
+
const enrichedData = this.applySchemaEnforcement(tableName, data, "update");
|
|
963
|
+
await this.sendRequest("update", {
|
|
964
|
+
collection: tableName,
|
|
965
|
+
id,
|
|
966
|
+
data: enrichedData,
|
|
967
|
+
});
|
|
968
|
+
// Reactivity: Track write dependency
|
|
969
|
+
const store = context_js_1.executionContext.getStore();
|
|
970
|
+
if (store) {
|
|
971
|
+
store.trackWrite(`collection:${String(tableName)}`);
|
|
972
|
+
store.trackWrite(`document:${String(tableName)}:${id}`);
|
|
973
|
+
}
|
|
974
|
+
}
|
|
975
|
+
async updateMany(tableName, where, data) {
|
|
976
|
+
const enrichedData = this.applySchemaEnforcement(tableName, data, "update");
|
|
977
|
+
const result = await this.sendRequest("updateMany", {
|
|
978
|
+
collection: tableName,
|
|
979
|
+
where: this.normalizeWhere(where),
|
|
980
|
+
data: enrichedData,
|
|
981
|
+
});
|
|
982
|
+
// Reactivity: Track write dependency
|
|
983
|
+
const store = context_js_1.executionContext.getStore();
|
|
984
|
+
if (store) {
|
|
985
|
+
store.trackWrite(`collection:${String(tableName)}`);
|
|
986
|
+
}
|
|
987
|
+
return result.count || 0;
|
|
988
|
+
}
|
|
989
|
+
async patch(tableName, id, data) {
|
|
990
|
+
// Patch is the same as update for document store
|
|
991
|
+
await this.update(tableName, id, data);
|
|
992
|
+
}
|
|
993
|
+
async delete(tableName, id) {
|
|
994
|
+
await this.sendRequest("delete", {
|
|
995
|
+
collection: tableName,
|
|
996
|
+
id,
|
|
997
|
+
});
|
|
998
|
+
// Reactivity: Track write dependency
|
|
999
|
+
const store = context_js_1.executionContext.getStore();
|
|
1000
|
+
if (store) {
|
|
1001
|
+
store.trackWrite(`collection:${String(tableName)}`);
|
|
1002
|
+
store.trackWrite(`document:${String(tableName)}:${id}`);
|
|
1003
|
+
}
|
|
1004
|
+
}
|
|
1005
|
+
async deleteMany(tableName, where) {
|
|
1006
|
+
const result = await this.sendRequest("deleteMany", {
|
|
1007
|
+
collection: tableName,
|
|
1008
|
+
where: this.normalizeWhere(where),
|
|
1009
|
+
});
|
|
1010
|
+
// Reactivity: Track write dependency
|
|
1011
|
+
const store = context_js_1.executionContext.getStore();
|
|
1012
|
+
if (store) {
|
|
1013
|
+
store.trackWrite(`collection:${String(tableName)}`);
|
|
1014
|
+
}
|
|
1015
|
+
return result.count || 0;
|
|
1016
|
+
}
|
|
1017
|
+
// ========== IDatabaseClient Methods ==========
|
|
1018
|
+
async runInTransaction(fn) {
|
|
1019
|
+
// TODO: Implement transaction support
|
|
1020
|
+
// For now, just execute without transaction
|
|
1021
|
+
logger_js_1.logger.log({
|
|
1022
|
+
timestamp: Date.now(),
|
|
1023
|
+
level: "warn",
|
|
1024
|
+
kind: "system",
|
|
1025
|
+
message: "[SocketClient] Transactions not yet implemented, executing without transaction",
|
|
1026
|
+
});
|
|
1027
|
+
return await fn(this);
|
|
1028
|
+
}
|
|
1029
|
+
// ========== QueryExecutor Methods ==========
|
|
1030
|
+
async executeQuery(spec) {
|
|
1031
|
+
const whereClause = spec.where && spec.where.length > 0 ? spec.where[0] : undefined;
|
|
1032
|
+
const result = await this.sendRequest("query", {
|
|
1033
|
+
collection: spec.table,
|
|
1034
|
+
where: this.normalizeWhere(whereClause),
|
|
1035
|
+
orderBy: spec.orderBy && spec.orderBy.length > 0 ? spec.orderBy[0] : undefined,
|
|
1036
|
+
select: spec.select,
|
|
1037
|
+
take: spec.take,
|
|
1038
|
+
skip: spec.skip,
|
|
1039
|
+
});
|
|
1040
|
+
// Reactivity: Track read dependency
|
|
1041
|
+
const store = context_js_1.executionContext.getStore();
|
|
1042
|
+
if (store) {
|
|
1043
|
+
store.trackRead(`collection:${String(spec.table)}`);
|
|
1044
|
+
}
|
|
1045
|
+
return result || [];
|
|
1046
|
+
}
|
|
1047
|
+
async executeCount(spec) {
|
|
1048
|
+
const whereClause = spec.where && spec.where.length > 0 ? spec.where[0] : undefined;
|
|
1049
|
+
const result = await this.sendRequest("count", {
|
|
1050
|
+
collection: spec.table,
|
|
1051
|
+
where: this.normalizeWhere(whereClause),
|
|
1052
|
+
});
|
|
1053
|
+
// Reactivity: Track read dependency
|
|
1054
|
+
const store = context_js_1.executionContext.getStore();
|
|
1055
|
+
if (store) {
|
|
1056
|
+
store.trackRead(`collection:${String(spec.table)}`);
|
|
1057
|
+
}
|
|
1058
|
+
return result?.count || 0;
|
|
1059
|
+
}
|
|
1060
|
+
async executeAggregate(spec) {
|
|
1061
|
+
// TODO: Implement aggregate support
|
|
1062
|
+
logger_js_1.logger.log({
|
|
1063
|
+
timestamp: Date.now(),
|
|
1064
|
+
level: "warn",
|
|
1065
|
+
kind: "system",
|
|
1066
|
+
message: "[SocketClient] Aggregate not yet implemented",
|
|
1067
|
+
});
|
|
1068
|
+
return { sum: 0, avg: 0, min: 0, max: 0 };
|
|
1069
|
+
}
|
|
1070
|
+
clearCache() {
|
|
1071
|
+
// Cache is managed by the C# store, no-op here
|
|
1072
|
+
logger_js_1.logger.log({
|
|
1073
|
+
timestamp: Date.now(),
|
|
1074
|
+
level: "info",
|
|
1075
|
+
kind: "cache",
|
|
1076
|
+
message: "[SocketClient] Cache cleared (managed by store)",
|
|
1077
|
+
});
|
|
1078
|
+
}
|
|
1079
|
+
/**
|
|
1080
|
+
* Closes the socket connection
|
|
1081
|
+
*/
|
|
1082
|
+
disconnect() {
|
|
1083
|
+
if (this.socket) {
|
|
1084
|
+
this.socket.end();
|
|
1085
|
+
this.socket = null;
|
|
1086
|
+
this.connected = false;
|
|
1087
|
+
this.authenticated = false;
|
|
1088
|
+
}
|
|
1089
|
+
}
|
|
1090
|
+
}
|
|
1091
|
+
exports.SocketDatabaseClient = SocketDatabaseClient;
|
|
1092
|
+
//# sourceMappingURL=socket-client.js.map
|