@nxuss/lemma 1.43.0 → 1.45.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/README.md +26 -8
- package/bin/brain-ingest.js +48 -13
- package/bin/cloud.js +228 -0
- package/dist/cjs/cli/hostHooks.d.ts +44 -7
- package/dist/cjs/cli/hostHooks.d.ts.map +1 -1
- package/dist/cjs/cli/hostHooks.js +201 -11
- package/dist/cjs/cli/hostHooks.js.map +1 -1
- package/dist/cjs/cli/lemma-proxy.d.ts.map +1 -1
- package/dist/cjs/cli/lemma-proxy.js +13 -16
- package/dist/cjs/cli/lemma-proxy.js.map +1 -1
- package/dist/cjs/cloud/CloudBrainClient.d.ts +52 -0
- package/dist/cjs/cloud/CloudBrainClient.d.ts.map +1 -0
- package/dist/cjs/cloud/CloudBrainClient.js +161 -0
- package/dist/cjs/cloud/CloudBrainClient.js.map +1 -0
- package/dist/cjs/cloud/CloudConfig.d.ts +41 -0
- package/dist/cjs/cloud/CloudConfig.d.ts.map +1 -0
- package/dist/cjs/cloud/CloudConfig.js +133 -0
- package/dist/cjs/cloud/CloudConfig.js.map +1 -0
- package/dist/cjs/cloud/CloudEntitlement.d.ts +55 -0
- package/dist/cjs/cloud/CloudEntitlement.d.ts.map +1 -0
- package/dist/cjs/cloud/CloudEntitlement.js +174 -0
- package/dist/cjs/cloud/CloudEntitlement.js.map +1 -0
- package/dist/cjs/cloud/billing/stripeApi.d.ts +43 -0
- package/dist/cjs/cloud/billing/stripeApi.d.ts.map +1 -0
- package/dist/cjs/cloud/billing/stripeApi.js +116 -0
- package/dist/cjs/cloud/billing/stripeApi.js.map +1 -0
- package/dist/cjs/cloud/billing/stripeWebhook.d.ts +35 -0
- package/dist/cjs/cloud/billing/stripeWebhook.d.ts.map +1 -0
- package/dist/cjs/cloud/billing/stripeWebhook.js +190 -0
- package/dist/cjs/cloud/billing/stripeWebhook.js.map +1 -0
- package/dist/cjs/cloud/console/ConsoleStore.d.ts +111 -0
- package/dist/cjs/cloud/console/ConsoleStore.d.ts.map +1 -0
- package/dist/cjs/cloud/console/ConsoleStore.js +172 -0
- package/dist/cjs/cloud/console/ConsoleStore.js.map +1 -0
- package/dist/cjs/cloud/console/consoleRouter.d.ts +68 -0
- package/dist/cjs/cloud/console/consoleRouter.d.ts.map +1 -0
- package/dist/cjs/cloud/console/consoleRouter.js +301 -0
- package/dist/cjs/cloud/console/consoleRouter.js.map +1 -0
- package/dist/cjs/cloud/console/mailer.d.ts +22 -0
- package/dist/cjs/cloud/console/mailer.d.ts.map +1 -0
- package/dist/cjs/cloud/console/mailer.js +35 -0
- package/dist/cjs/cloud/console/mailer.js.map +1 -0
- package/dist/cjs/cloud/identity/PlanPolicy.d.ts +42 -6
- package/dist/cjs/cloud/identity/PlanPolicy.d.ts.map +1 -1
- package/dist/cjs/cloud/identity/PlanPolicy.js +102 -22
- package/dist/cjs/cloud/identity/PlanPolicy.js.map +1 -1
- package/dist/cjs/cloud/identity/RateLimiter.d.ts +21 -1
- package/dist/cjs/cloud/identity/RateLimiter.d.ts.map +1 -1
- package/dist/cjs/cloud/identity/RateLimiter.js +59 -2
- package/dist/cjs/cloud/identity/RateLimiter.js.map +1 -1
- package/dist/cjs/cloud/identity/TenantResolver.d.ts +6 -1
- package/dist/cjs/cloud/identity/TenantResolver.d.ts.map +1 -1
- package/dist/cjs/cloud/identity/TenantResolver.js +1 -1
- package/dist/cjs/cloud/identity/TenantResolver.js.map +1 -1
- package/dist/cjs/cloud/identity/authenticateV2.d.ts.map +1 -1
- package/dist/cjs/cloud/identity/authenticateV2.js +7 -4
- package/dist/cjs/cloud/identity/authenticateV2.js.map +1 -1
- package/dist/cjs/cloud/identity/identityStore.d.ts +96 -10
- package/dist/cjs/cloud/identity/identityStore.d.ts.map +1 -1
- package/dist/cjs/cloud/identity/identityStore.js +203 -4
- package/dist/cjs/cloud/identity/identityStore.js.map +1 -1
- package/dist/cjs/cloud/metering/PostgresLedgerStore.d.ts +18 -0
- package/dist/cjs/cloud/metering/PostgresLedgerStore.d.ts.map +1 -0
- package/dist/cjs/cloud/metering/PostgresLedgerStore.js +56 -0
- package/dist/cjs/cloud/metering/PostgresLedgerStore.js.map +1 -0
- package/dist/cjs/cloud/metering/UsageLedger.d.ts +74 -0
- package/dist/cjs/cloud/metering/UsageLedger.d.ts.map +1 -1
- package/dist/cjs/cloud/metering/UsageLedger.js +122 -17
- package/dist/cjs/cloud/metering/UsageLedger.js.map +1 -1
- package/dist/cjs/cloud/metering/index.d.ts +1 -0
- package/dist/cjs/cloud/metering/index.d.ts.map +1 -1
- package/dist/cjs/cloud/metering/index.js +1 -0
- package/dist/cjs/cloud/metering/index.js.map +1 -1
- package/dist/cjs/cloud/store/FileBrainStore.d.ts +6 -1
- package/dist/cjs/cloud/store/FileBrainStore.d.ts.map +1 -1
- package/dist/cjs/cloud/store/FileBrainStore.js +8 -0
- package/dist/cjs/cloud/store/FileBrainStore.js.map +1 -1
- package/dist/cjs/cloud/store/PostgresBrainStore.d.ts +11 -1
- package/dist/cjs/cloud/store/PostgresBrainStore.d.ts.map +1 -1
- package/dist/cjs/cloud/store/PostgresBrainStore.js +32 -0
- package/dist/cjs/cloud/store/PostgresBrainStore.js.map +1 -1
- package/dist/cjs/cloud/store/memorySummary.d.ts +29 -0
- package/dist/cjs/cloud/store/memorySummary.d.ts.map +1 -0
- package/dist/cjs/cloud/store/memorySummary.js +66 -0
- package/dist/cjs/cloud/store/memorySummary.js.map +1 -0
- package/dist/cjs/cloud/v2/app.d.ts.map +1 -1
- package/dist/cjs/cloud/v2/app.js +6 -0
- package/dist/cjs/cloud/v2/app.js.map +1 -1
- package/dist/cjs/cloud/v2/inputGuard.d.ts +23 -0
- package/dist/cjs/cloud/v2/inputGuard.d.ts.map +1 -0
- package/dist/cjs/cloud/v2/inputGuard.js +71 -0
- package/dist/cjs/cloud/v2/inputGuard.js.map +1 -0
- package/dist/cjs/cloud/v2/routes/admin.d.ts +24 -0
- package/dist/cjs/cloud/v2/routes/admin.d.ts.map +1 -0
- package/dist/cjs/cloud/v2/routes/admin.js +344 -0
- package/dist/cjs/cloud/v2/routes/admin.js.map +1 -0
- package/dist/cjs/cloud/v2/routes/entitlement.d.ts +13 -0
- package/dist/cjs/cloud/v2/routes/entitlement.d.ts.map +1 -0
- package/dist/cjs/cloud/v2/routes/entitlement.js +24 -0
- package/dist/cjs/cloud/v2/routes/entitlement.js.map +1 -0
- package/dist/cjs/cloud/v2/routes/index.d.ts +14 -1
- package/dist/cjs/cloud/v2/routes/index.d.ts.map +1 -1
- package/dist/cjs/cloud/v2/routes/index.js +36 -0
- package/dist/cjs/cloud/v2/routes/index.js.map +1 -1
- package/dist/cjs/cloud/v2/routes/memories.d.ts +21 -2
- package/dist/cjs/cloud/v2/routes/memories.d.ts.map +1 -1
- package/dist/cjs/cloud/v2/routes/memories.js +77 -0
- package/dist/cjs/cloud/v2/routes/memories.js.map +1 -1
- package/dist/cjs/cloud/v2/routes/recall.d.ts +1 -0
- package/dist/cjs/cloud/v2/routes/recall.d.ts.map +1 -1
- package/dist/cjs/cloud/v2/routes/recall.js +4 -0
- package/dist/cjs/cloud/v2/routes/recall.js.map +1 -1
- package/dist/cjs/cloud/v2/routes/tenant.d.ts +36 -0
- package/dist/cjs/cloud/v2/routes/tenant.d.ts.map +1 -0
- package/dist/cjs/cloud/v2/routes/tenant.js +65 -0
- package/dist/cjs/cloud/v2/routes/tenant.js.map +1 -0
- package/dist/cjs/cloud/v2/routes/usage.d.ts +1 -1
- package/dist/cjs/cloud/v2/routes/usage.d.ts.map +1 -1
- package/dist/cjs/cloud/v2/routes/verify.d.ts +1 -0
- package/dist/cjs/cloud/v2/routes/verify.d.ts.map +1 -1
- package/dist/cjs/cloud/v2/routes/verify.js +4 -0
- package/dist/cjs/cloud/v2/routes/verify.js.map +1 -1
- package/dist/cjs/cloud/v2/server.d.ts +9 -3
- package/dist/cjs/cloud/v2/server.d.ts.map +1 -1
- package/dist/cjs/cloud/v2/server.js +36 -2
- package/dist/cjs/cloud/v2/server.js.map +1 -1
- package/dist/cjs/cloud/v2/usageRecorder.d.ts +19 -0
- package/dist/cjs/cloud/v2/usageRecorder.d.ts.map +1 -0
- package/dist/cjs/cloud/v2/usageRecorder.js +42 -0
- package/dist/cjs/cloud/v2/usageRecorder.js.map +1 -0
- package/dist/cjs/contracts/api-v2.types.d.ts +92 -2
- package/dist/cjs/contracts/api-v2.types.d.ts.map +1 -1
- package/dist/cjs/contracts/store.d.ts +37 -0
- package/dist/cjs/contracts/store.d.ts.map +1 -1
- package/dist/cjs/mcp/index.js +7 -1
- package/dist/cjs/mcp/index.js.map +1 -1
- package/dist/cjs/mcp/tools/memory.d.ts.map +1 -1
- package/dist/cjs/mcp/tools/memory.js +74 -4
- package/dist/cjs/mcp/tools/memory.js.map +1 -1
- package/dist/cjs/mcp/tools/misc.d.ts.map +1 -1
- package/dist/cjs/mcp/tools/misc.js +2 -1
- package/dist/cjs/mcp/tools/misc.js.map +1 -1
- package/dist/cjs/mcp/tools/workspace.d.ts.map +1 -1
- package/dist/cjs/mcp/tools/workspace.js +4 -1
- package/dist/cjs/mcp/tools/workspace.js.map +1 -1
- package/dist/cjs/mcp/tools.d.ts +10 -0
- package/dist/cjs/mcp/tools.d.ts.map +1 -1
- package/dist/cjs/mcp/tools.js +47 -12
- package/dist/cjs/mcp/tools.js.map +1 -1
- package/dist/cjs/proxy/KeyManager.d.ts.map +1 -1
- package/dist/cjs/proxy/KeyManager.js +5 -0
- package/dist/cjs/proxy/KeyManager.js.map +1 -1
- package/dist/cjs/subconscious/CloudBrain.d.ts +77 -0
- package/dist/cjs/subconscious/CloudBrain.d.ts.map +1 -0
- package/dist/cjs/subconscious/CloudBrain.js +347 -0
- package/dist/cjs/subconscious/CloudBrain.js.map +1 -0
- package/dist/cjs/subconscious/HostRecall.d.ts.map +1 -1
- package/dist/cjs/subconscious/HostRecall.js +11 -4
- package/dist/cjs/subconscious/HostRecall.js.map +1 -1
- package/dist/cjs/subconscious/ProjectIdentity.d.ts +9 -0
- package/dist/cjs/subconscious/ProjectIdentity.d.ts.map +1 -0
- package/dist/cjs/subconscious/ProjectIdentity.js +63 -0
- package/dist/cjs/subconscious/ProjectIdentity.js.map +1 -0
- package/dist/cjs/subconscious/TeamBrain.d.ts +9 -3
- package/dist/cjs/subconscious/TeamBrain.d.ts.map +1 -1
- package/dist/cjs/subconscious/TeamBrain.js +39 -5
- package/dist/cjs/subconscious/TeamBrain.js.map +1 -1
- package/dist/cjs/utils/FixCapture.d.ts +7 -5
- package/dist/cjs/utils/FixCapture.d.ts.map +1 -1
- package/dist/cjs/utils/FixCapture.js +64 -32
- package/dist/cjs/utils/FixCapture.js.map +1 -1
- package/dist/cjs/utils/NoTerminal.d.ts +27 -0
- package/dist/cjs/utils/NoTerminal.d.ts.map +1 -0
- package/dist/cjs/utils/NoTerminal.js +37 -0
- package/dist/cjs/utils/NoTerminal.js.map +1 -0
- package/dist/cjs/utils/OpenCodeSession.d.ts +70 -0
- package/dist/cjs/utils/OpenCodeSession.d.ts.map +1 -0
- package/dist/cjs/utils/OpenCodeSession.js +154 -0
- package/dist/cjs/utils/OpenCodeSession.js.map +1 -0
- package/dist/cjs/utils/ProLicense.d.ts.map +1 -1
- package/dist/cjs/utils/ProLicense.js +11 -3
- package/dist/cjs/utils/ProLicense.js.map +1 -1
- package/dist/cjs/utils/SessionCapture.d.ts +31 -7
- package/dist/cjs/utils/SessionCapture.d.ts.map +1 -1
- package/dist/cjs/utils/SessionCapture.js +185 -32
- package/dist/cjs/utils/SessionCapture.js.map +1 -1
- package/dist/cjs/utils/StopNudge.d.ts +8 -0
- package/dist/cjs/utils/StopNudge.d.ts.map +1 -0
- package/dist/cjs/utils/StopNudge.js +93 -0
- package/dist/cjs/utils/StopNudge.js.map +1 -0
- package/dist/cjs/utils/TestAutofixInterceptor.d.ts.map +1 -1
- package/dist/cjs/utils/TestAutofixInterceptor.js +2 -0
- package/dist/cjs/utils/TestAutofixInterceptor.js.map +1 -1
- package/dist/esm/cli/hostHooks.d.ts +44 -7
- package/dist/esm/cli/hostHooks.d.ts.map +1 -1
- package/dist/esm/cli/hostHooks.js +199 -10
- package/dist/esm/cli/hostHooks.js.map +1 -1
- package/dist/esm/cli/lemma-proxy.d.ts.map +1 -1
- package/dist/esm/cli/lemma-proxy.js +14 -17
- package/dist/esm/cli/lemma-proxy.js.map +1 -1
- package/dist/esm/cloud/CloudBrainClient.d.ts +52 -0
- package/dist/esm/cloud/CloudBrainClient.d.ts.map +1 -0
- package/dist/esm/cloud/CloudBrainClient.js +153 -0
- package/dist/esm/cloud/CloudBrainClient.js.map +1 -0
- package/dist/esm/cloud/CloudConfig.d.ts +41 -0
- package/dist/esm/cloud/CloudConfig.d.ts.map +1 -0
- package/dist/esm/cloud/CloudConfig.js +118 -0
- package/dist/esm/cloud/CloudConfig.js.map +1 -0
- package/dist/esm/cloud/CloudEntitlement.d.ts +55 -0
- package/dist/esm/cloud/CloudEntitlement.d.ts.map +1 -0
- package/dist/esm/cloud/CloudEntitlement.js +159 -0
- package/dist/esm/cloud/CloudEntitlement.js.map +1 -0
- package/dist/esm/cloud/billing/stripeApi.d.ts +43 -0
- package/dist/esm/cloud/billing/stripeApi.d.ts.map +1 -0
- package/dist/esm/cloud/billing/stripeApi.js +108 -0
- package/dist/esm/cloud/billing/stripeApi.js.map +1 -0
- package/dist/esm/cloud/billing/stripeWebhook.d.ts +35 -0
- package/dist/esm/cloud/billing/stripeWebhook.d.ts.map +1 -0
- package/dist/esm/cloud/billing/stripeWebhook.js +181 -0
- package/dist/esm/cloud/billing/stripeWebhook.js.map +1 -0
- package/dist/esm/cloud/console/ConsoleStore.d.ts +111 -0
- package/dist/esm/cloud/console/ConsoleStore.d.ts.map +1 -0
- package/dist/esm/cloud/console/ConsoleStore.js +161 -0
- package/dist/esm/cloud/console/ConsoleStore.js.map +1 -0
- package/dist/esm/cloud/console/consoleRouter.d.ts +68 -0
- package/dist/esm/cloud/console/consoleRouter.d.ts.map +1 -0
- package/dist/esm/cloud/console/consoleRouter.js +290 -0
- package/dist/esm/cloud/console/consoleRouter.js.map +1 -0
- package/dist/esm/cloud/console/mailer.d.ts +22 -0
- package/dist/esm/cloud/console/mailer.d.ts.map +1 -0
- package/dist/esm/cloud/console/mailer.js +30 -0
- package/dist/esm/cloud/console/mailer.js.map +1 -0
- package/dist/esm/cloud/identity/PlanPolicy.d.ts +42 -6
- package/dist/esm/cloud/identity/PlanPolicy.d.ts.map +1 -1
- package/dist/esm/cloud/identity/PlanPolicy.js +100 -21
- package/dist/esm/cloud/identity/PlanPolicy.js.map +1 -1
- package/dist/esm/cloud/identity/RateLimiter.d.ts +21 -1
- package/dist/esm/cloud/identity/RateLimiter.d.ts.map +1 -1
- package/dist/esm/cloud/identity/RateLimiter.js +57 -2
- package/dist/esm/cloud/identity/RateLimiter.js.map +1 -1
- package/dist/esm/cloud/identity/TenantResolver.d.ts +6 -1
- package/dist/esm/cloud/identity/TenantResolver.d.ts.map +1 -1
- package/dist/esm/cloud/identity/TenantResolver.js +1 -1
- package/dist/esm/cloud/identity/TenantResolver.js.map +1 -1
- package/dist/esm/cloud/identity/authenticateV2.d.ts.map +1 -1
- package/dist/esm/cloud/identity/authenticateV2.js +7 -4
- package/dist/esm/cloud/identity/authenticateV2.js.map +1 -1
- package/dist/esm/cloud/identity/identityStore.d.ts +96 -10
- package/dist/esm/cloud/identity/identityStore.d.ts.map +1 -1
- package/dist/esm/cloud/identity/identityStore.js +199 -3
- package/dist/esm/cloud/identity/identityStore.js.map +1 -1
- package/dist/esm/cloud/metering/PostgresLedgerStore.d.ts +18 -0
- package/dist/esm/cloud/metering/PostgresLedgerStore.d.ts.map +1 -0
- package/dist/esm/cloud/metering/PostgresLedgerStore.js +52 -0
- package/dist/esm/cloud/metering/PostgresLedgerStore.js.map +1 -0
- package/dist/esm/cloud/metering/UsageLedger.d.ts +74 -0
- package/dist/esm/cloud/metering/UsageLedger.d.ts.map +1 -1
- package/dist/esm/cloud/metering/UsageLedger.js +119 -16
- package/dist/esm/cloud/metering/UsageLedger.js.map +1 -1
- package/dist/esm/cloud/metering/index.d.ts +1 -0
- package/dist/esm/cloud/metering/index.d.ts.map +1 -1
- package/dist/esm/cloud/metering/index.js +1 -0
- package/dist/esm/cloud/metering/index.js.map +1 -1
- package/dist/esm/cloud/store/FileBrainStore.d.ts +6 -1
- package/dist/esm/cloud/store/FileBrainStore.d.ts.map +1 -1
- package/dist/esm/cloud/store/FileBrainStore.js +8 -0
- package/dist/esm/cloud/store/FileBrainStore.js.map +1 -1
- package/dist/esm/cloud/store/PostgresBrainStore.d.ts +11 -1
- package/dist/esm/cloud/store/PostgresBrainStore.d.ts.map +1 -1
- package/dist/esm/cloud/store/PostgresBrainStore.js +32 -0
- package/dist/esm/cloud/store/PostgresBrainStore.js.map +1 -1
- package/dist/esm/cloud/store/memorySummary.d.ts +29 -0
- package/dist/esm/cloud/store/memorySummary.d.ts.map +1 -0
- package/dist/esm/cloud/store/memorySummary.js +60 -0
- package/dist/esm/cloud/store/memorySummary.js.map +1 -0
- package/dist/esm/cloud/v2/app.d.ts.map +1 -1
- package/dist/esm/cloud/v2/app.js +6 -0
- package/dist/esm/cloud/v2/app.js.map +1 -1
- package/dist/esm/cloud/v2/inputGuard.d.ts +23 -0
- package/dist/esm/cloud/v2/inputGuard.d.ts.map +1 -0
- package/dist/esm/cloud/v2/inputGuard.js +63 -0
- package/dist/esm/cloud/v2/inputGuard.js.map +1 -0
- package/dist/esm/cloud/v2/routes/admin.d.ts +24 -0
- package/dist/esm/cloud/v2/routes/admin.d.ts.map +1 -0
- package/dist/esm/cloud/v2/routes/admin.js +337 -0
- package/dist/esm/cloud/v2/routes/admin.js.map +1 -0
- package/dist/esm/cloud/v2/routes/entitlement.d.ts +13 -0
- package/dist/esm/cloud/v2/routes/entitlement.d.ts.map +1 -0
- package/dist/esm/cloud/v2/routes/entitlement.js +21 -0
- package/dist/esm/cloud/v2/routes/entitlement.js.map +1 -0
- package/dist/esm/cloud/v2/routes/index.d.ts +14 -1
- package/dist/esm/cloud/v2/routes/index.d.ts.map +1 -1
- package/dist/esm/cloud/v2/routes/index.js +37 -1
- package/dist/esm/cloud/v2/routes/index.js.map +1 -1
- package/dist/esm/cloud/v2/routes/memories.d.ts +21 -2
- package/dist/esm/cloud/v2/routes/memories.d.ts.map +1 -1
- package/dist/esm/cloud/v2/routes/memories.js +75 -0
- package/dist/esm/cloud/v2/routes/memories.js.map +1 -1
- package/dist/esm/cloud/v2/routes/recall.d.ts +1 -0
- package/dist/esm/cloud/v2/routes/recall.d.ts.map +1 -1
- package/dist/esm/cloud/v2/routes/recall.js +5 -1
- package/dist/esm/cloud/v2/routes/recall.js.map +1 -1
- package/dist/esm/cloud/v2/routes/tenant.d.ts +36 -0
- package/dist/esm/cloud/v2/routes/tenant.d.ts.map +1 -0
- package/dist/esm/cloud/v2/routes/tenant.js +61 -0
- package/dist/esm/cloud/v2/routes/tenant.js.map +1 -0
- package/dist/esm/cloud/v2/routes/usage.d.ts +1 -1
- package/dist/esm/cloud/v2/routes/usage.d.ts.map +1 -1
- package/dist/esm/cloud/v2/routes/verify.d.ts +1 -0
- package/dist/esm/cloud/v2/routes/verify.d.ts.map +1 -1
- package/dist/esm/cloud/v2/routes/verify.js +5 -1
- package/dist/esm/cloud/v2/routes/verify.js.map +1 -1
- package/dist/esm/cloud/v2/server.d.ts +9 -3
- package/dist/esm/cloud/v2/server.d.ts.map +1 -1
- package/dist/esm/cloud/v2/server.js +36 -3
- package/dist/esm/cloud/v2/server.js.map +1 -1
- package/dist/esm/cloud/v2/usageRecorder.d.ts +19 -0
- package/dist/esm/cloud/v2/usageRecorder.d.ts.map +1 -0
- package/dist/esm/cloud/v2/usageRecorder.js +37 -0
- package/dist/esm/cloud/v2/usageRecorder.js.map +1 -0
- package/dist/esm/contracts/api-v2.types.d.ts +92 -2
- package/dist/esm/contracts/api-v2.types.d.ts.map +1 -1
- package/dist/esm/contracts/store.d.ts +37 -0
- package/dist/esm/contracts/store.d.ts.map +1 -1
- package/dist/esm/mcp/index.js +8 -2
- package/dist/esm/mcp/index.js.map +1 -1
- package/dist/esm/mcp/tools/memory.d.ts.map +1 -1
- package/dist/esm/mcp/tools/memory.js +74 -4
- package/dist/esm/mcp/tools/memory.js.map +1 -1
- package/dist/esm/mcp/tools/misc.d.ts.map +1 -1
- package/dist/esm/mcp/tools/misc.js +2 -1
- package/dist/esm/mcp/tools/misc.js.map +1 -1
- package/dist/esm/mcp/tools/workspace.d.ts.map +1 -1
- package/dist/esm/mcp/tools/workspace.js +4 -1
- package/dist/esm/mcp/tools/workspace.js.map +1 -1
- package/dist/esm/mcp/tools.d.ts +10 -0
- package/dist/esm/mcp/tools.d.ts.map +1 -1
- package/dist/esm/mcp/tools.js +46 -12
- package/dist/esm/mcp/tools.js.map +1 -1
- package/dist/esm/proxy/KeyManager.d.ts.map +1 -1
- package/dist/esm/proxy/KeyManager.js +5 -0
- package/dist/esm/proxy/KeyManager.js.map +1 -1
- package/dist/esm/subconscious/CloudBrain.d.ts +77 -0
- package/dist/esm/subconscious/CloudBrain.d.ts.map +1 -0
- package/dist/esm/subconscious/CloudBrain.js +330 -0
- package/dist/esm/subconscious/CloudBrain.js.map +1 -0
- package/dist/esm/subconscious/HostRecall.d.ts.map +1 -1
- package/dist/esm/subconscious/HostRecall.js +11 -4
- package/dist/esm/subconscious/HostRecall.js.map +1 -1
- package/dist/esm/subconscious/ProjectIdentity.d.ts +9 -0
- package/dist/esm/subconscious/ProjectIdentity.d.ts.map +1 -0
- package/dist/esm/subconscious/ProjectIdentity.js +56 -0
- package/dist/esm/subconscious/ProjectIdentity.js.map +1 -0
- package/dist/esm/subconscious/TeamBrain.d.ts +9 -3
- package/dist/esm/subconscious/TeamBrain.d.ts.map +1 -1
- package/dist/esm/subconscious/TeamBrain.js +39 -7
- package/dist/esm/subconscious/TeamBrain.js.map +1 -1
- package/dist/esm/utils/FixCapture.d.ts +7 -5
- package/dist/esm/utils/FixCapture.d.ts.map +1 -1
- package/dist/esm/utils/FixCapture.js +64 -33
- package/dist/esm/utils/FixCapture.js.map +1 -1
- package/dist/esm/utils/NoTerminal.d.ts +27 -0
- package/dist/esm/utils/NoTerminal.d.ts.map +1 -0
- package/dist/esm/utils/NoTerminal.js +33 -0
- package/dist/esm/utils/NoTerminal.js.map +1 -0
- package/dist/esm/utils/OpenCodeSession.d.ts +70 -0
- package/dist/esm/utils/OpenCodeSession.d.ts.map +1 -0
- package/dist/esm/utils/OpenCodeSession.js +146 -0
- package/dist/esm/utils/OpenCodeSession.js.map +1 -0
- package/dist/esm/utils/ProLicense.d.ts.map +1 -1
- package/dist/esm/utils/ProLicense.js +11 -3
- package/dist/esm/utils/ProLicense.js.map +1 -1
- package/dist/esm/utils/SessionCapture.d.ts +31 -7
- package/dist/esm/utils/SessionCapture.d.ts.map +1 -1
- package/dist/esm/utils/SessionCapture.js +185 -32
- package/dist/esm/utils/SessionCapture.js.map +1 -1
- package/dist/esm/utils/StopNudge.d.ts +8 -0
- package/dist/esm/utils/StopNudge.d.ts.map +1 -0
- package/dist/esm/utils/StopNudge.js +86 -0
- package/dist/esm/utils/StopNudge.js.map +1 -0
- package/dist/esm/utils/TestAutofixInterceptor.d.ts.map +1 -1
- package/dist/esm/utils/TestAutofixInterceptor.js +2 -0
- package/dist/esm/utils/TestAutofixInterceptor.js.map +1 -1
- package/lemma-proxy.cjs +5 -0
- package/package.json +2 -1
- package/sdks/crewai/dist/ts/src/client.d.ts +5 -1
- package/sdks/crewai/dist/ts/src/client.js +8 -0
- package/sdks/crewai/dist/ts/src/types.d.ts +32 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authenticateV2.js","sourceRoot":"","sources":["../../../../src/cloud/identity/authenticateV2.ts"],"names":[],"mappings":";;;AA+DA,
|
|
1
|
+
{"version":3,"file":"authenticateV2.js","sourceRoot":"","sources":["../../../../src/cloud/identity/authenticateV2.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Lemma API v2 — identity store (Lane D)
|
|
3
|
-
*
|
|
4
|
-
* Persistence behind TenantResolver. Keys are stored as SHA-256 hashes only:
|
|
5
|
-
* `key_hash` is the sole column that ever touches key material, and every write
|
|
6
|
-
* is a parameterized insert that receives the hash, never the plaintext value.
|
|
7
|
-
*
|
|
8
|
-
* `InMemoryIdentityStore` powers unit tests and local/dev defaults.
|
|
9
|
-
* `PostgresIdentityStore` is the production implementation over `pg`.
|
|
10
|
-
*/
|
|
11
1
|
import type { Pool } from 'pg';
|
|
12
2
|
import type { KeyPrefix } from './ApiKey';
|
|
13
3
|
import type { PlanId } from './PlanPolicy';
|
|
@@ -29,7 +19,50 @@ export interface KeyRecord {
|
|
|
29
19
|
createdAt: number;
|
|
30
20
|
expiresAt: number | null;
|
|
31
21
|
revokedAt: number | null;
|
|
22
|
+
/** The key's tenant is a founder (read with the key, like the plan; never stored on the key). */
|
|
23
|
+
founder?: boolean;
|
|
32
24
|
}
|
|
25
|
+
/** What Stripe last told us about the tenant's subscription. Display and webhook bookkeeping only: quota code reads `plan`. */
|
|
26
|
+
export interface TenantBilling {
|
|
27
|
+
customerId: string | null;
|
|
28
|
+
subscriptionId: string | null;
|
|
29
|
+
/** Stripe's subscription status verbatim (active, past_due, canceled, ...). */
|
|
30
|
+
status: string | null;
|
|
31
|
+
/** Epoch ms of the end of the paid period: the next charge, or the last day of service when cancelling. */
|
|
32
|
+
currentPeriodEnd: number | null;
|
|
33
|
+
/** Epoch ms of the first failed payment of the current late streak; null while paid up. */
|
|
34
|
+
pastDueSince: number | null;
|
|
35
|
+
/** Epoch ms `created` of the last Stripe event applied; older events are dropped (delivery is unordered). */
|
|
36
|
+
eventAt: number | null;
|
|
37
|
+
}
|
|
38
|
+
export declare const NO_BILLING: Readonly<TenantBilling>;
|
|
39
|
+
export interface TenantRecord {
|
|
40
|
+
id: string;
|
|
41
|
+
name: string;
|
|
42
|
+
plan: PlanId;
|
|
43
|
+
createdAt: number;
|
|
44
|
+
billing: TenantBilling;
|
|
45
|
+
/** Signed up as a founder: keeps the founder limits whatever the public plans become (migration 009). */
|
|
46
|
+
founder: boolean;
|
|
47
|
+
}
|
|
48
|
+
/** Outcome of applying a Stripe event to a tenant. */
|
|
49
|
+
export type BillingApplyResult = {
|
|
50
|
+
ok: true;
|
|
51
|
+
tenant: TenantRecord;
|
|
52
|
+
} | {
|
|
53
|
+
ok: false;
|
|
54
|
+
reason: 'no_tenant' | 'stale';
|
|
55
|
+
};
|
|
56
|
+
/** Outcome of an atomic "issue a key if the tenant still has a free seat". */
|
|
57
|
+
export type SeatedKeyResult = {
|
|
58
|
+
ok: true;
|
|
59
|
+
key: KeyRecord;
|
|
60
|
+
} | {
|
|
61
|
+
ok: false;
|
|
62
|
+
reason: 'no_tenant' | 'seats_full' | 'duplicate_name';
|
|
63
|
+
seats: number;
|
|
64
|
+
used: number;
|
|
65
|
+
};
|
|
33
66
|
export interface IdentityStore {
|
|
34
67
|
/** Look up a key by its hash. The ONLY read path — plaintext never enters a query. */
|
|
35
68
|
findKeyByHash(hash: string): Promise<KeyRecord | null>;
|
|
@@ -37,12 +70,52 @@ export interface IdentityStore {
|
|
|
37
70
|
createKey(input: NewKeyInput): Promise<KeyRecord>;
|
|
38
71
|
/** Soft-revoke: the key dies on the NEXT lookup. No 24h cache can survive this. */
|
|
39
72
|
revokeKey(keyId: string): Promise<boolean>;
|
|
73
|
+
/** Create a tenant; resolves null when the id is already taken. */
|
|
74
|
+
createTenant(input: {
|
|
75
|
+
id: string;
|
|
76
|
+
name: string;
|
|
77
|
+
plan: PlanId;
|
|
78
|
+
founder?: boolean;
|
|
79
|
+
}): Promise<TenantRecord | null>;
|
|
80
|
+
getTenant(id: string): Promise<TenantRecord | null>;
|
|
81
|
+
setTenantPlan(id: string, plan: PlanId): Promise<TenantRecord | null>;
|
|
82
|
+
/** Mark or unmark a founder. Billing never calls this with false: cancelling drops the plan, not the status. */
|
|
83
|
+
setTenantFounder(id: string, founder: boolean): Promise<TenantRecord | null>;
|
|
84
|
+
findTenantByStripeCustomer(customerId: string): Promise<TenantRecord | null>;
|
|
85
|
+
/**
|
|
86
|
+
* Write the plan and the full billing state in one statement, unless a NEWER Stripe event was
|
|
87
|
+
* already applied (`billing.eventAt` older than the stored one): then nothing changes and the
|
|
88
|
+
* result says `stale`. The caller passes the complete state, so a field is cleared by sending null.
|
|
89
|
+
*/
|
|
90
|
+
applyBilling(id: string, plan: PlanId, billing: TenantBilling): Promise<BillingApplyResult>;
|
|
91
|
+
/** Every key the tenant ever had, newest first (hashes are never returned). */
|
|
92
|
+
listKeys(tenantId: string): Promise<KeyRecord[]>;
|
|
93
|
+
/**
|
|
94
|
+
* Issue a key only if the tenant has a free seat (active, unexpired keys < `seats`) and
|
|
95
|
+
* no active key already carries `input.name`. The check and the insert are atomic: two
|
|
96
|
+
* concurrent calls can never take the last seat twice.
|
|
97
|
+
*/
|
|
98
|
+
createKeyWithinSeats(input: NewKeyInput, seats: number): Promise<SeatedKeyResult>;
|
|
40
99
|
}
|
|
41
100
|
/** In-memory store. Records carry the hash only — same invariant as Postgres. */
|
|
42
101
|
export declare class InMemoryIdentityStore implements IdentityStore {
|
|
43
102
|
readonly records: Map<string, KeyRecord>;
|
|
44
103
|
findKeyByHash(hash: string): Promise<KeyRecord | null>;
|
|
45
104
|
createKey(input: NewKeyInput): Promise<KeyRecord>;
|
|
105
|
+
readonly tenants: Map<string, TenantRecord>;
|
|
106
|
+
createTenant(input: {
|
|
107
|
+
id: string;
|
|
108
|
+
name: string;
|
|
109
|
+
plan: PlanId;
|
|
110
|
+
founder?: boolean;
|
|
111
|
+
}): Promise<TenantRecord | null>;
|
|
112
|
+
getTenant(id: string): Promise<TenantRecord | null>;
|
|
113
|
+
setTenantPlan(id: string, plan: PlanId): Promise<TenantRecord | null>;
|
|
114
|
+
setTenantFounder(id: string, founder: boolean): Promise<TenantRecord | null>;
|
|
115
|
+
findTenantByStripeCustomer(customerId: string): Promise<TenantRecord | null>;
|
|
116
|
+
applyBilling(id: string, plan: PlanId, billing: TenantBilling): Promise<BillingApplyResult>;
|
|
117
|
+
listKeys(tenantId: string): Promise<KeyRecord[]>;
|
|
118
|
+
createKeyWithinSeats(input: NewKeyInput, seats: number): Promise<SeatedKeyResult>;
|
|
46
119
|
revokeKey(keyId: string): Promise<boolean>;
|
|
47
120
|
}
|
|
48
121
|
/** Production store. All queries parameterized; key material appears only as hashed params. */
|
|
@@ -51,6 +124,19 @@ export declare class PostgresIdentityStore implements IdentityStore {
|
|
|
51
124
|
constructor(pool: Pool);
|
|
52
125
|
findKeyByHash(hash: string): Promise<KeyRecord | null>;
|
|
53
126
|
createKey(input: NewKeyInput): Promise<KeyRecord>;
|
|
127
|
+
createTenant(input: {
|
|
128
|
+
id: string;
|
|
129
|
+
name: string;
|
|
130
|
+
plan: PlanId;
|
|
131
|
+
founder?: boolean;
|
|
132
|
+
}): Promise<TenantRecord | null>;
|
|
133
|
+
getTenant(id: string): Promise<TenantRecord | null>;
|
|
134
|
+
setTenantFounder(id: string, founder: boolean): Promise<TenantRecord | null>;
|
|
135
|
+
setTenantPlan(id: string, plan: PlanId): Promise<TenantRecord | null>;
|
|
136
|
+
findTenantByStripeCustomer(customerId: string): Promise<TenantRecord | null>;
|
|
137
|
+
applyBilling(id: string, plan: PlanId, b: TenantBilling): Promise<BillingApplyResult>;
|
|
138
|
+
listKeys(tenantId: string): Promise<KeyRecord[]>;
|
|
139
|
+
createKeyWithinSeats(input: NewKeyInput, seats: number): Promise<SeatedKeyResult>;
|
|
54
140
|
revokeKey(keyId: string): Promise<boolean>;
|
|
55
141
|
}
|
|
56
142
|
//# sourceMappingURL=identityStore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identityStore.d.ts","sourceRoot":"","sources":["../../../../src/cloud/identity/identityStore.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"identityStore.d.ts","sourceRoot":"","sources":["../../../../src/cloud/identity/identityStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,47 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PostgresIdentityStore = exports.InMemoryIdentityStore = void 0;
|
|
6
|
+
exports.PostgresIdentityStore = exports.InMemoryIdentityStore = exports.NO_BILLING = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Lemma API v2 — identity store (Lane D)
|
|
9
|
+
*
|
|
10
|
+
* Persistence behind TenantResolver. Keys are stored as SHA-256 hashes only:
|
|
11
|
+
* `key_hash` is the sole column that ever touches key material, and every write
|
|
12
|
+
* is a parameterized insert that receives the hash, never the plaintext value.
|
|
13
|
+
*
|
|
14
|
+
* `InMemoryIdentityStore` powers unit tests and local/dev defaults.
|
|
15
|
+
* `PostgresIdentityStore` is the production implementation over `pg`.
|
|
16
|
+
*/
|
|
17
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
18
|
+
exports.NO_BILLING = Object.freeze({
|
|
19
|
+
customerId: null,
|
|
20
|
+
subscriptionId: null,
|
|
21
|
+
status: null,
|
|
22
|
+
currentPeriodEnd: null,
|
|
23
|
+
pastDueSince: null,
|
|
24
|
+
eventAt: null,
|
|
25
|
+
});
|
|
26
|
+
const isLive = (r, now) => r.active && (r.expiresAt === null || r.expiresAt > now);
|
|
4
27
|
/** In-memory store. Records carry the hash only — same invariant as Postgres. */
|
|
5
28
|
class InMemoryIdentityStore {
|
|
6
29
|
constructor() {
|
|
7
30
|
this.records = new Map();
|
|
31
|
+
this.tenants = new Map();
|
|
8
32
|
}
|
|
9
33
|
async findKeyByHash(hash) {
|
|
10
|
-
|
|
34
|
+
const r = this.records.get(hash);
|
|
35
|
+
if (!r)
|
|
36
|
+
return null;
|
|
37
|
+
// Read with the key, as the Postgres join does: a founder flag set later reaches the next request.
|
|
38
|
+
return this.tenants.get(r.tenantId)?.founder ? { ...r, founder: true } : r;
|
|
11
39
|
}
|
|
12
40
|
async createKey(input) {
|
|
13
41
|
const record = {
|
|
14
|
-
|
|
42
|
+
// Always 12 hex chars, like the Postgres ids. Math.random().toString(16) drops trailing zeros,
|
|
43
|
+
// so slicing it yielded an 11-char id now and then: a key that /v2/admin could not address.
|
|
44
|
+
id: 'key_' + crypto_1.default.randomBytes(6).toString('hex'),
|
|
15
45
|
tenantId: input.tenantId,
|
|
16
46
|
name: input.name,
|
|
17
47
|
plan: input.plan,
|
|
@@ -24,6 +54,63 @@ class InMemoryIdentityStore {
|
|
|
24
54
|
this.records.set(input.hash, record);
|
|
25
55
|
return record;
|
|
26
56
|
}
|
|
57
|
+
async createTenant(input) {
|
|
58
|
+
if (this.tenants.has(input.id))
|
|
59
|
+
return null;
|
|
60
|
+
const t = { id: input.id, name: input.name, plan: input.plan, createdAt: Date.now(), billing: { ...exports.NO_BILLING }, founder: input.founder === true };
|
|
61
|
+
this.tenants.set(input.id, t);
|
|
62
|
+
return { ...t };
|
|
63
|
+
}
|
|
64
|
+
async getTenant(id) {
|
|
65
|
+
const t = this.tenants.get(id);
|
|
66
|
+
return t ? { ...t } : null;
|
|
67
|
+
}
|
|
68
|
+
async setTenantPlan(id, plan) {
|
|
69
|
+
const t = this.tenants.get(id);
|
|
70
|
+
if (!t)
|
|
71
|
+
return null;
|
|
72
|
+
t.plan = plan;
|
|
73
|
+
return { ...t };
|
|
74
|
+
}
|
|
75
|
+
async setTenantFounder(id, founder) {
|
|
76
|
+
const t = this.tenants.get(id);
|
|
77
|
+
if (!t)
|
|
78
|
+
return null;
|
|
79
|
+
t.founder = founder;
|
|
80
|
+
return { ...t };
|
|
81
|
+
}
|
|
82
|
+
async findTenantByStripeCustomer(customerId) {
|
|
83
|
+
for (const t of this.tenants.values())
|
|
84
|
+
if (t.billing.customerId === customerId)
|
|
85
|
+
return { ...t, billing: { ...t.billing } };
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
async applyBilling(id, plan, billing) {
|
|
89
|
+
const t = this.tenants.get(id);
|
|
90
|
+
if (!t)
|
|
91
|
+
return { ok: false, reason: 'no_tenant' };
|
|
92
|
+
if (t.billing.eventAt !== null && billing.eventAt !== null && billing.eventAt < t.billing.eventAt)
|
|
93
|
+
return { ok: false, reason: 'stale' };
|
|
94
|
+
t.plan = plan;
|
|
95
|
+
t.billing = { ...billing };
|
|
96
|
+
return { ok: true, tenant: { ...t, billing: { ...t.billing } } };
|
|
97
|
+
}
|
|
98
|
+
async listKeys(tenantId) {
|
|
99
|
+
return [...this.records.values()].filter((r) => r.tenantId === tenantId).sort((a, b) => b.createdAt - a.createdAt).map((r) => ({ ...r }));
|
|
100
|
+
}
|
|
101
|
+
async createKeyWithinSeats(input, seats) {
|
|
102
|
+
// Synchronous between the check and the insert, so it is atomic on a single event loop.
|
|
103
|
+
const tenant = this.tenants.get(input.tenantId);
|
|
104
|
+
if (!tenant)
|
|
105
|
+
return { ok: false, reason: 'no_tenant', seats, used: 0 };
|
|
106
|
+
const now = Date.now();
|
|
107
|
+
const live = [...this.records.values()].filter((r) => r.tenantId === input.tenantId && isLive(r, now));
|
|
108
|
+
if (live.some((r) => r.name === input.name))
|
|
109
|
+
return { ok: false, reason: 'duplicate_name', seats, used: live.length };
|
|
110
|
+
if (live.length >= seats)
|
|
111
|
+
return { ok: false, reason: 'seats_full', seats, used: live.length };
|
|
112
|
+
return { ok: true, key: await this.createKey({ ...input, plan: tenant.plan }) };
|
|
113
|
+
}
|
|
27
114
|
async revokeKey(keyId) {
|
|
28
115
|
let found = false;
|
|
29
116
|
for (const record of this.records.values()) {
|
|
@@ -43,7 +130,7 @@ class PostgresIdentityStore {
|
|
|
43
130
|
this.pool = pool;
|
|
44
131
|
}
|
|
45
132
|
async findKeyByHash(hash) {
|
|
46
|
-
const { rows } = await this.pool.query(`SELECT k.id, k.tenant_id, t.plan, k.name, k.prefix, k.active,
|
|
133
|
+
const { rows } = await this.pool.query(`SELECT k.id, k.tenant_id, t.plan, t.founder, k.name, k.prefix, k.active,
|
|
47
134
|
k.created_at, k.expires_at, k.revoked_at
|
|
48
135
|
FROM api_keys k
|
|
49
136
|
JOIN tenants t ON t.id = k.tenant_id
|
|
@@ -61,6 +148,7 @@ class PostgresIdentityStore {
|
|
|
61
148
|
createdAt: new Date(r.created_at).getTime(),
|
|
62
149
|
expiresAt: r.expires_at ? new Date(r.expires_at).getTime() : null,
|
|
63
150
|
revokedAt: r.revoked_at ? new Date(r.revoked_at).getTime() : null,
|
|
151
|
+
...(r.founder === true ? { founder: true } : {}),
|
|
64
152
|
};
|
|
65
153
|
}
|
|
66
154
|
async createKey(input) {
|
|
@@ -88,6 +176,86 @@ class PostgresIdentityStore {
|
|
|
88
176
|
revokedAt: null,
|
|
89
177
|
};
|
|
90
178
|
}
|
|
179
|
+
async createTenant(input) {
|
|
180
|
+
const { rows } = await this.pool.query(`INSERT INTO tenants (id, name, plan, founder) VALUES ($1, $2, $3, $4)
|
|
181
|
+
ON CONFLICT (id) DO NOTHING
|
|
182
|
+
RETURNING id, name, plan, created_at, stripe_customer_id, stripe_subscription_id, subscription_status, current_period_end, past_due_since, billing_event_at, founder`, [input.id, input.name, input.plan, input.founder === true]);
|
|
183
|
+
return rows.length ? toTenant(rows[0]) : null;
|
|
184
|
+
}
|
|
185
|
+
async getTenant(id) {
|
|
186
|
+
const { rows } = await this.pool.query(`SELECT id, name, plan, created_at, stripe_customer_id, stripe_subscription_id, subscription_status,
|
|
187
|
+
current_period_end, past_due_since, billing_event_at, founder
|
|
188
|
+
FROM tenants WHERE id = $1`, [id]);
|
|
189
|
+
return rows.length ? toTenant(rows[0]) : null;
|
|
190
|
+
}
|
|
191
|
+
async setTenantFounder(id, founder) {
|
|
192
|
+
const { rows } = await this.pool.query(`UPDATE tenants SET founder = $2, updated_at = now() WHERE id = $1 RETURNING id, name, plan, created_at, stripe_customer_id, stripe_subscription_id, subscription_status, current_period_end, past_due_since, billing_event_at, founder`, [id, founder]);
|
|
193
|
+
return rows.length ? toTenant(rows[0]) : null;
|
|
194
|
+
}
|
|
195
|
+
async setTenantPlan(id, plan) {
|
|
196
|
+
const { rows } = await this.pool.query(`UPDATE tenants SET plan = $2, updated_at = now() WHERE id = $1 RETURNING id, name, plan, created_at, stripe_customer_id, stripe_subscription_id, subscription_status, current_period_end, past_due_since, billing_event_at, founder`, [id, plan]);
|
|
197
|
+
return rows.length ? toTenant(rows[0]) : null;
|
|
198
|
+
}
|
|
199
|
+
async findTenantByStripeCustomer(customerId) {
|
|
200
|
+
const { rows } = await this.pool.query(`SELECT id, name, plan, created_at, stripe_customer_id, stripe_subscription_id, subscription_status,
|
|
201
|
+
current_period_end, past_due_since, billing_event_at, founder
|
|
202
|
+
FROM tenants WHERE stripe_customer_id = $1`, [customerId]);
|
|
203
|
+
return rows.length ? toTenant(rows[0]) : null;
|
|
204
|
+
}
|
|
205
|
+
async applyBilling(id, plan, b) {
|
|
206
|
+
const at = (ms) => (ms === null ? null : new Date(ms));
|
|
207
|
+
const { rows } = await this.pool.query(`UPDATE tenants
|
|
208
|
+
SET plan = $2, stripe_customer_id = $3, stripe_subscription_id = $4, subscription_status = $5,
|
|
209
|
+
current_period_end = $6, past_due_since = $7, billing_event_at = $8, updated_at = now()
|
|
210
|
+
WHERE id = $1 AND (billing_event_at IS NULL OR $8::timestamptz IS NULL OR billing_event_at <= $8::timestamptz)
|
|
211
|
+
RETURNING id, name, plan, created_at, stripe_customer_id, stripe_subscription_id, subscription_status, current_period_end, past_due_since, billing_event_at, founder`, [id, plan, b.customerId, b.subscriptionId, b.status, at(b.currentPeriodEnd), at(b.pastDueSince), at(b.eventAt)]);
|
|
212
|
+
if (rows.length)
|
|
213
|
+
return { ok: true, tenant: toTenant(rows[0]) };
|
|
214
|
+
// No row updated: either the tenant does not exist or a newer event already won.
|
|
215
|
+
return { ok: false, reason: (await this.getTenant(id)) ? 'stale' : 'no_tenant' };
|
|
216
|
+
}
|
|
217
|
+
async listKeys(tenantId) {
|
|
218
|
+
const { rows } = await this.pool.query(`SELECT k.id, k.tenant_id, t.plan, k.name, k.prefix, k.active, k.created_at, k.expires_at, k.revoked_at
|
|
219
|
+
FROM api_keys k JOIN tenants t ON t.id = k.tenant_id
|
|
220
|
+
WHERE k.tenant_id = $1 ORDER BY k.created_at DESC, k.id`, [tenantId]);
|
|
221
|
+
return rows.map(toKey);
|
|
222
|
+
}
|
|
223
|
+
async createKeyWithinSeats(input, seats) {
|
|
224
|
+
const client = await this.pool.connect();
|
|
225
|
+
try {
|
|
226
|
+
await client.query('BEGIN');
|
|
227
|
+
// The tenant row is the lock: concurrent issuers for one tenant queue here, so the
|
|
228
|
+
// count below cannot go stale before the insert.
|
|
229
|
+
const t = await client.query('SELECT plan FROM tenants WHERE id = $1 FOR UPDATE', [input.tenantId]);
|
|
230
|
+
if (!t.rows.length) {
|
|
231
|
+
await client.query('ROLLBACK');
|
|
232
|
+
return { ok: false, reason: 'no_tenant', seats, used: 0 };
|
|
233
|
+
}
|
|
234
|
+
const live = await client.query(`SELECT name FROM api_keys
|
|
235
|
+
WHERE tenant_id = $1 AND active = TRUE AND (expires_at IS NULL OR expires_at > now())`, [input.tenantId]);
|
|
236
|
+
if (live.rows.some((r) => r.name === input.name)) {
|
|
237
|
+
await client.query('ROLLBACK');
|
|
238
|
+
return { ok: false, reason: 'duplicate_name', seats, used: live.rows.length };
|
|
239
|
+
}
|
|
240
|
+
if (live.rows.length >= seats) {
|
|
241
|
+
await client.query('ROLLBACK');
|
|
242
|
+
return { ok: false, reason: 'seats_full', seats, used: live.rows.length };
|
|
243
|
+
}
|
|
244
|
+
const plan = t.rows[0].plan;
|
|
245
|
+
const ins = await client.query(`INSERT INTO api_keys (id, tenant_id, name, key_hash, prefix, plan, active)
|
|
246
|
+
VALUES ($1, $2, $3, $4, $5, $6, TRUE)
|
|
247
|
+
RETURNING id, tenant_id, name, prefix, active, created_at, expires_at, revoked_at`, ['key_' + input.hash.slice(0, 12), input.tenantId, input.name, input.hash, input.prefix, plan]);
|
|
248
|
+
await client.query('COMMIT');
|
|
249
|
+
return { ok: true, key: toKey({ ...ins.rows[0], plan }) };
|
|
250
|
+
}
|
|
251
|
+
catch (err) {
|
|
252
|
+
await client.query('ROLLBACK').catch(() => undefined);
|
|
253
|
+
throw err;
|
|
254
|
+
}
|
|
255
|
+
finally {
|
|
256
|
+
client.release();
|
|
257
|
+
}
|
|
258
|
+
}
|
|
91
259
|
async revokeKey(keyId) {
|
|
92
260
|
const { rowCount } = await this.pool.query(`UPDATE api_keys
|
|
93
261
|
SET active = FALSE, revoked_at = CURRENT_TIMESTAMP
|
|
@@ -96,4 +264,35 @@ class PostgresIdentityStore {
|
|
|
96
264
|
}
|
|
97
265
|
}
|
|
98
266
|
exports.PostgresIdentityStore = PostgresIdentityStore;
|
|
267
|
+
function toTenant(r) {
|
|
268
|
+
const ms = (v) => (v ? new Date(v).getTime() : null);
|
|
269
|
+
return {
|
|
270
|
+
id: r.id,
|
|
271
|
+
name: r.name ?? '',
|
|
272
|
+
plan: r.plan,
|
|
273
|
+
createdAt: new Date(r.created_at).getTime(),
|
|
274
|
+
billing: {
|
|
275
|
+
customerId: r.stripe_customer_id ?? null,
|
|
276
|
+
subscriptionId: r.stripe_subscription_id ?? null,
|
|
277
|
+
status: r.subscription_status ?? null,
|
|
278
|
+
currentPeriodEnd: ms(r.current_period_end),
|
|
279
|
+
pastDueSince: ms(r.past_due_since),
|
|
280
|
+
eventAt: ms(r.billing_event_at),
|
|
281
|
+
},
|
|
282
|
+
founder: r.founder === true,
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
function toKey(r) {
|
|
286
|
+
return {
|
|
287
|
+
id: r.id,
|
|
288
|
+
tenantId: r.tenant_id,
|
|
289
|
+
plan: r.plan,
|
|
290
|
+
name: r.name ?? '',
|
|
291
|
+
prefix: r.prefix,
|
|
292
|
+
active: r.active,
|
|
293
|
+
createdAt: new Date(r.created_at).getTime(),
|
|
294
|
+
expiresAt: r.expires_at ? new Date(r.expires_at).getTime() : null,
|
|
295
|
+
revokedAt: r.revoked_at ? new Date(r.revoked_at).getTime() : null,
|
|
296
|
+
};
|
|
297
|
+
}
|
|
99
298
|
//# sourceMappingURL=identityStore.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identityStore.js","sourceRoot":"","sources":["../../../../src/cloud/identity/identityStore.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"identityStore.js","sourceRoot":"","sources":["../../../../src/cloud/identity/identityStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lemma API v2 — durable usage ledger on Postgres (migration 003_usage.sql).
|
|
3
|
+
*
|
|
4
|
+
* Append-only by construction: the only write is INSERT. Reads are aggregated in SQL so
|
|
5
|
+
* /v2/usage costs one grouped query however many events a tenant has accumulated.
|
|
6
|
+
*/
|
|
7
|
+
import type { Pool } from 'pg';
|
|
8
|
+
import type { AggregateRow, AppendOnlyStore, DailyQuery, DailyRow, LedgerEvent, UsageQuery } from './UsageLedger';
|
|
9
|
+
export declare class PostgresLedgerStore implements AppendOnlyStore {
|
|
10
|
+
private readonly pool;
|
|
11
|
+
constructor(pool: Pool);
|
|
12
|
+
append(row: LedgerEvent): Promise<void>;
|
|
13
|
+
rows(): Promise<LedgerEvent[]>;
|
|
14
|
+
/** One grouped query over idx_usage_events_tenant_at; the day is the UTC calendar day of `at`. */
|
|
15
|
+
daily(query: DailyQuery): Promise<DailyRow[]>;
|
|
16
|
+
aggregate(query: UsageQuery): Promise<AggregateRow[]>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=PostgresLedgerStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PostgresLedgerStore.d.ts","sourceRoot":"","sources":["../../../../src/cloud/metering/PostgresLedgerStore.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAElH,qBAAa,mBAAoB,YAAW,eAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,IAAI;IAEjC,MAAM,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvC,IAAI,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAKpC,kGAAkG;IAC5F,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAe7C,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CAoB5D"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PostgresLedgerStore = void 0;
|
|
4
|
+
class PostgresLedgerStore {
|
|
5
|
+
constructor(pool) {
|
|
6
|
+
this.pool = pool;
|
|
7
|
+
}
|
|
8
|
+
async append(row) {
|
|
9
|
+
await this.pool.query('INSERT INTO usage_events (id, tenant_id, key_id, kind, tokens, at) VALUES ($1, $2, $3, $4, $5, $6)', [row.id, row.tenantId, row.keyId ?? null, row.kind, row.tokens, row.at]);
|
|
10
|
+
}
|
|
11
|
+
async rows() {
|
|
12
|
+
const { rows } = await this.pool.query('SELECT id, tenant_id, key_id, kind, tokens, at FROM usage_events ORDER BY at, id');
|
|
13
|
+
return rows.map(toEvent);
|
|
14
|
+
}
|
|
15
|
+
/** One grouped query over idx_usage_events_tenant_at; the day is the UTC calendar day of `at`. */
|
|
16
|
+
async daily(query) {
|
|
17
|
+
const { rows } = await this.pool.query(`SELECT to_char(to_timestamp(at / 1000.0) AT TIME ZONE 'UTC', 'YYYY-MM-DD') AS day,
|
|
18
|
+
key_id,
|
|
19
|
+
count(*)::int AS events,
|
|
20
|
+
COALESCE(sum(tokens), 0)::bigint AS tokens,
|
|
21
|
+
max(at)::bigint AS last_at
|
|
22
|
+
FROM usage_events
|
|
23
|
+
WHERE tenant_id = $1 AND at >= $2 AND ($3::bigint IS NULL OR at <= $3) AND kind LIKE 'api.%'
|
|
24
|
+
GROUP BY 1, 2`, [query.tenantId, query.since, query.until ?? null]);
|
|
25
|
+
return rows.map((r) => ({ day: r.day, keyId: r.key_id ?? null, events: Number(r.events), tokens: Number(r.tokens), lastAt: Number(r.last_at) }));
|
|
26
|
+
}
|
|
27
|
+
async aggregate(query) {
|
|
28
|
+
const { rows } = await this.pool.query(`SELECT kind, key_id,
|
|
29
|
+
count(*)::int AS events,
|
|
30
|
+
COALESCE(sum(tokens), 0)::bigint AS tokens,
|
|
31
|
+
count(*) FILTER (WHERE tokens IS NULL)::int AS excluded
|
|
32
|
+
FROM usage_events
|
|
33
|
+
WHERE ($1::text IS NULL OR tenant_id = $1)
|
|
34
|
+
AND ($2::bigint IS NULL OR at >= $2)
|
|
35
|
+
GROUP BY kind, key_id`, [query.tenantId ?? null, query.since ?? null]);
|
|
36
|
+
return rows.map((r) => ({
|
|
37
|
+
kind: r.kind,
|
|
38
|
+
keyId: r.key_id ?? null,
|
|
39
|
+
events: Number(r.events),
|
|
40
|
+
tokens: Number(r.tokens),
|
|
41
|
+
excluded: Number(r.excluded),
|
|
42
|
+
}));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.PostgresLedgerStore = PostgresLedgerStore;
|
|
46
|
+
function toEvent(r) {
|
|
47
|
+
return {
|
|
48
|
+
id: r.id,
|
|
49
|
+
tenantId: r.tenant_id,
|
|
50
|
+
keyId: r.key_id ?? null,
|
|
51
|
+
kind: r.kind,
|
|
52
|
+
tokens: r.tokens === null ? null : Number(r.tokens),
|
|
53
|
+
at: Number(r.at),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=PostgresLedgerStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PostgresLedgerStore.js","sourceRoot":"","sources":["../../../../src/cloud/metering/PostgresLedgerStore.ts"],"names":[],"mappings":";;;AASA,MAAa,mBAAmB;IAC9B,YAA6B,IAAU;QAAV,SAAI,GAAJ,IAAI,CAAM;IAAG,CAAC;IAE3C,KAAK,CAAC,MAAM,CAAC,GAAgB;QAC3B,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACnB,oGAAoG,EACpG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,IAAI,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CACxE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,kFAAkF,CAAC,CAAC;QAC3H,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,kGAAkG;IAClG,KAAK,CAAC,KAAK,CAAC,KAAiB;QAC3B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC;;;;;;;sBAOgB,EAChB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,CACnD,CAAC;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAa,EAAE,KAAK,EAAG,CAAC,CAAC,MAAwB,IAAI,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IAChL,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAiB;QAC/B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC;;;;;;;8BAOwB,EACxB,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,CAC9C,CAAC;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtB,IAAI,EAAE,CAAC,CAAC,IAAc;YACtB,KAAK,EAAG,CAAC,CAAC,MAAwB,IAAI,IAAI;YAC1C,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;YACxB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;YACxB,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;SAC7B,CAAC,CAAC,CAAC;IACN,CAAC;CACF;AAnDD,kDAmDC;AAED,SAAS,OAAO,CAAC,CAAsB;IACrC,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,QAAQ,EAAE,CAAC,CAAC,SAAS;QACrB,KAAK,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI;QACvB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,MAAM,EAAE,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QACnD,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;KACjB,CAAC;AACJ,CAAC"}
|
|
@@ -4,18 +4,72 @@ import type { UsageResponse } from '../../contracts/api-v2.types';
|
|
|
4
4
|
export interface AppendOnlyStore {
|
|
5
5
|
append(row: LedgerEvent): Promise<void> | void;
|
|
6
6
|
rows(): LedgerEvent[] | Promise<LedgerEvent[]>;
|
|
7
|
+
/**
|
|
8
|
+
* Optional pushdown of the usage math. A durable store that holds millions of rows
|
|
9
|
+
* should answer from the database instead of shipping every row to the process.
|
|
10
|
+
* Must produce exactly what `aggregateRows(await rows(), query)` would.
|
|
11
|
+
*/
|
|
12
|
+
aggregate?(query: UsageQuery): Promise<AggregateRow[]>;
|
|
13
|
+
/**
|
|
14
|
+
* Optional pushdown of the daily API activity (api.* rows only), grouped by UTC day and key.
|
|
15
|
+
* Must produce exactly what `dailyRows(await rows(), query)` would.
|
|
16
|
+
*/
|
|
17
|
+
daily?(query: DailyQuery): Promise<DailyRow[]>;
|
|
18
|
+
}
|
|
19
|
+
export interface DailyQuery {
|
|
20
|
+
tenantId: string;
|
|
21
|
+
since: number;
|
|
22
|
+
/** Last moment of the window (ms epoch); defaults to the ledger's clock. Days are listed through its UTC day. */
|
|
23
|
+
until?: number;
|
|
24
|
+
}
|
|
25
|
+
/** API activity of one key on one UTC day. */
|
|
26
|
+
export interface DailyRow {
|
|
27
|
+
/** YYYY-MM-DD, UTC. */
|
|
28
|
+
day: string;
|
|
29
|
+
keyId: string | null;
|
|
30
|
+
events: number;
|
|
31
|
+
tokens: number;
|
|
32
|
+
/** Latest event of that key that day (ms epoch). */
|
|
33
|
+
lastAt: number;
|
|
34
|
+
}
|
|
35
|
+
export declare function dailyRows(rows: LedgerEvent[], query: DailyQuery): DailyRow[];
|
|
36
|
+
/** Daily API activity of a tenant: every day of the window (zero-filled) and when each key was last seen. */
|
|
37
|
+
export interface DailyActivity {
|
|
38
|
+
since: number;
|
|
39
|
+
days: Array<{
|
|
40
|
+
day: string;
|
|
41
|
+
requests: number;
|
|
42
|
+
tokens: number;
|
|
43
|
+
}>;
|
|
44
|
+
lastSeen: Record<string, number>;
|
|
7
45
|
}
|
|
46
|
+
/** One group of ledger rows: same kind, same key. */
|
|
47
|
+
export interface AggregateRow {
|
|
48
|
+
kind: string;
|
|
49
|
+
keyId: string | null;
|
|
50
|
+
/** Rows in the group, measured or not. */
|
|
51
|
+
events: number;
|
|
52
|
+
/** Sum of the measured (non-null) token counts. */
|
|
53
|
+
tokens: number;
|
|
54
|
+
/** Rows whose count could not be measured. */
|
|
55
|
+
excluded: number;
|
|
56
|
+
}
|
|
57
|
+
/** Reference implementation of the grouping; the in-memory store and the tests use it. */
|
|
58
|
+
export declare function aggregateRows(rows: LedgerEvent[], query?: UsageQuery): AggregateRow[];
|
|
8
59
|
/** In-memory append-only store (the default backing). Only ever grows. */
|
|
9
60
|
export declare class InMemoryLedgerStore implements AppendOnlyStore {
|
|
10
61
|
private readonly ledger;
|
|
11
62
|
append(row: LedgerEvent): void;
|
|
12
63
|
rows(): LedgerEvent[];
|
|
64
|
+
aggregate(query: UsageQuery): Promise<AggregateRow[]>;
|
|
13
65
|
/** Test seam: reset the ledger. Never used by production paths. */
|
|
14
66
|
clear(): void;
|
|
15
67
|
}
|
|
16
68
|
export interface LedgerEvent {
|
|
17
69
|
id: string;
|
|
18
70
|
tenantId: string;
|
|
71
|
+
/** The API key (the dev) that made the call, when the event comes from an API request. */
|
|
72
|
+
keyId?: string | null;
|
|
19
73
|
kind: string;
|
|
20
74
|
/** Measured token count, or `null` when no reliable count could be produced. */
|
|
21
75
|
tokens: number | null;
|
|
@@ -24,6 +78,7 @@ export interface LedgerEvent {
|
|
|
24
78
|
}
|
|
25
79
|
export interface AppendEvent {
|
|
26
80
|
tenantId: string;
|
|
81
|
+
keyId?: string | null;
|
|
27
82
|
kind: string;
|
|
28
83
|
/** Measured tokens, or `null` when the count was unreliable. */
|
|
29
84
|
tokens: number | null;
|
|
@@ -63,6 +118,25 @@ export declare class UsageLedger {
|
|
|
63
118
|
* `excludedEvents`.
|
|
64
119
|
*/
|
|
65
120
|
computeUsage(query?: UsageQuery): Promise<UsageResponse>;
|
|
121
|
+
/**
|
|
122
|
+
* Per-key breakdown of API activity (who made how many calls and moved how many tokens).
|
|
123
|
+
* Operator-facing: it is what billing per seat and a usage dashboard are built on.
|
|
124
|
+
*/
|
|
125
|
+
computeKeyActivity(query?: UsageQuery): Promise<KeyActivity[]>;
|
|
126
|
+
/**
|
|
127
|
+
* Requests per UTC day over the window starting at `since` (the console's activity chart), every day
|
|
128
|
+
* present even when idle, plus the latest request of each key in that window.
|
|
129
|
+
*/
|
|
130
|
+
computeDailyActivity(query: DailyQuery): Promise<DailyActivity>;
|
|
131
|
+
private groups;
|
|
132
|
+
}
|
|
133
|
+
/** Ledger kinds that start with this are API requests the server itself observed. */
|
|
134
|
+
export declare const API_KIND_PREFIX = "api.";
|
|
135
|
+
export interface KeyActivity {
|
|
136
|
+
keyId: string;
|
|
137
|
+
requests: number;
|
|
138
|
+
tokens: number;
|
|
139
|
+
byOperation: Record<string, number>;
|
|
66
140
|
}
|
|
67
141
|
export default UsageLedger;
|
|
68
142
|
//# sourceMappingURL=UsageLedger.d.ts.map
|