@carlonicora/nextjs-jsonapi 2.4.0 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{BlockNoteEditor-7WGCH2KB.js → BlockNoteEditor-TIMGYKAA.js} +19 -19
- package/dist/{BlockNoteEditor-7WGCH2KB.js.map → BlockNoteEditor-TIMGYKAA.js.map} +1 -1
- package/dist/{BlockNoteEditor-GWAV5ESO.mjs → BlockNoteEditor-YFJMXJEU.mjs} +4 -4
- package/dist/billing/index.js +362 -362
- package/dist/billing/index.mjs +3 -3
- package/dist/{chunk-GYGMEDVS.js → chunk-7HKJNUW7.js} +755 -746
- package/dist/chunk-7HKJNUW7.js.map +1 -0
- package/dist/{chunk-3LVSA7IM.mjs → chunk-DJWNNV52.mjs} +2 -2
- package/dist/{chunk-LCCRUWWY.mjs → chunk-FS4RVV3K.mjs} +241 -1
- package/dist/chunk-FS4RVV3K.mjs.map +1 -0
- package/dist/{chunk-M2EGUO2F.mjs → chunk-G4YS52SO.mjs} +16 -7
- package/dist/chunk-G4YS52SO.mjs.map +1 -0
- package/dist/{chunk-TOKHHZSP.js → chunk-OTEDZ6YW.js} +7 -7
- package/dist/{chunk-TOKHHZSP.js.map → chunk-OTEDZ6YW.js.map} +1 -1
- package/dist/{chunk-V66AZWPG.js → chunk-RTOC53EZ.js} +246 -6
- package/dist/chunk-RTOC53EZ.js.map +1 -0
- package/dist/client/index.js +4 -4
- package/dist/client/index.mjs +3 -3
- package/dist/components/index.d.mts +16 -1
- package/dist/components/index.d.ts +16 -1
- package/dist/components/index.js +4 -4
- package/dist/components/index.mjs +3 -3
- package/dist/{tokenusage-admin.module-5wJ_tZTj.d.ts → config-BIjrg5wd.d.ts} +39 -1
- package/dist/{tokenusage-admin.module-DQVT4O4j.d.mts → config-BRUjtCd1.d.mts} +39 -1
- package/dist/contexts/index.js +4 -4
- package/dist/contexts/index.mjs +3 -3
- package/dist/core/index.d.mts +5 -2
- package/dist/core/index.d.ts +5 -2
- package/dist/core/index.js +8 -2
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.mjs +7 -1
- package/dist/features/help/index.js +37 -37
- package/dist/features/help/index.mjs +3 -3
- package/dist/features/tokenusage/index.d.mts +413 -14
- package/dist/features/tokenusage/index.d.ts +413 -14
- package/dist/features/tokenusage/index.js +481 -120
- package/dist/features/tokenusage/index.js.map +1 -1
- package/dist/features/tokenusage/index.mjs +431 -70
- package/dist/features/tokenusage/index.mjs.map +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +9 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +8 -2
- package/dist/server/index.js +3 -3
- package/dist/server/index.mjs +1 -1
- package/package.json +1 -1
- package/src/core/index.ts +10 -0
- package/src/core/registry/ModuleRegistry.ts +4 -0
- package/src/features/tokenusage/components/TokenUsageAdminContainer.tsx +20 -4
- package/src/features/tokenusage/components/TokenUsageAdminTiles.tsx +31 -18
- package/src/features/tokenusage/components/TokenUsageBreakdownTable.tsx +13 -13
- package/src/features/tokenusage/components/TokenUsageRankedBar.tsx +24 -7
- package/src/features/tokenusage/components/TokenUsageReportContainer.tsx +102 -0
- package/src/features/tokenusage/components/TokenUsageReportFilterBar.tsx +34 -0
- package/src/features/tokenusage/components/TokenUsageReportTiles.tsx +161 -0
- package/src/features/tokenusage/components/TokenUsageTimelineChart.tsx +15 -13
- package/src/features/tokenusage/components/__tests__/TokenUsageAdminTiles.spec.tsx +4 -2
- package/src/features/tokenusage/components/__tests__/TokenUsageRankedBar.spec.tsx +3 -1
- package/src/features/tokenusage/contexts/TokenUsageAdminContext.tsx +6 -3
- package/src/features/tokenusage/contexts/TokenUsageReportContext.tsx +199 -0
- package/src/features/tokenusage/data/TokenUsageReportService.ts +65 -0
- package/src/features/tokenusage/data/index.ts +9 -0
- package/src/features/tokenusage/data/tokenusage-report-breakdown.interface.ts +12 -0
- package/src/features/tokenusage/data/tokenusage-report-breakdown.ts +94 -0
- package/src/features/tokenusage/data/tokenusage-report-summary.interface.ts +12 -0
- package/src/features/tokenusage/data/tokenusage-report-summary.ts +87 -0
- package/src/features/tokenusage/data/tokenusage-report-timeline.interface.ts +13 -0
- package/src/features/tokenusage/data/tokenusage-report-timeline.ts +94 -0
- package/src/features/tokenusage/data/tokenusage-report.types.ts +51 -0
- package/src/features/tokenusage/i18n-keys.ts +28 -0
- package/src/features/tokenusage/index.ts +18 -0
- package/src/features/tokenusage/lib/config.ts +22 -0
- package/src/features/tokenusage/lib/formatters.ts +100 -0
- package/src/features/tokenusage/lib/metrics.ts +8 -26
- package/src/features/tokenusage/lib/palette.ts +41 -14
- package/src/features/tokenusage/tokenusage-admin.module.ts +4 -0
- package/src/features/tokenusage/tokenusage.modules.ts +40 -0
- package/src/shadcnui/ui/chart.tsx +30 -3
- package/dist/chunk-GYGMEDVS.js.map +0 -1
- package/dist/chunk-LCCRUWWY.mjs.map +0 -1
- package/dist/chunk-M2EGUO2F.mjs.map +0 -1
- package/dist/chunk-V66AZWPG.js.map +0 -1
- /package/dist/{BlockNoteEditor-GWAV5ESO.mjs.map → BlockNoteEditor-YFJMXJEU.mjs.map} +0 -0
- /package/dist/{chunk-3LVSA7IM.mjs.map → chunk-DJWNNV52.mjs.map} +0 -0
package/dist/index.d.ts
CHANGED
|
@@ -2,8 +2,8 @@ export { A as ApiData } from './ApiData-DPKNfY-9.js';
|
|
|
2
2
|
import { A as ApiDataInterface, J as JsonApiHydratedDataInterface } from './ApiDataInterface-BcZeXy5X.js';
|
|
3
3
|
export { A as ApiRequestDataTypeInterface, F as FieldSelector, G as GetterKeys, c as createJsonApiInclusion } from './ApiRequestDataTypeInterface-CYEcRUrh.js';
|
|
4
4
|
export { A as ApiResponseInterface } from './ApiResponseInterface-CWLvSCvS.js';
|
|
5
|
-
import { A as AbstractApiData } from './
|
|
6
|
-
export { b as TokenUsageAdminBreakdownModule, T as TokenUsageAdminSummaryModule, a as TokenUsageAdminTimelineModule } from './
|
|
5
|
+
import { A as AbstractApiData } from './config-BIjrg5wd.js';
|
|
6
|
+
export { b as TokenUsageAdminBreakdownModule, T as TokenUsageAdminSummaryModule, a as TokenUsageAdminTimelineModule, c as configureTokenUsage, g as getTokenUsageCurrency, t as tokenUsageModules } from './config-BIjrg5wd.js';
|
|
7
7
|
import { A as AbstractService } from './AbstractService-Cew0PD0L.js';
|
|
8
8
|
export { H as HttpMethod, N as NextRef, P as PreviousRef, S as SelfRef, T as TotalRef, b as clearLastApiMeta, c as clearLastApiTotal, d as getGlobalErrorHandler, a as getLastApiMeta, g as getLastApiTotal, s as setGlobalErrorHandler } from './AbstractService-Cew0PD0L.js';
|
|
9
9
|
export { AppModuleDefinitions, Assistant, AssistantAction, AssistantActionInput, AssistantActionInterface, AssistantActionModule, AssistantActionService, AssistantActionStatus, AssistantMessage, AssistantMessageModule, AssistantMessageService, AssistantModule, AssistantService, AuditLog, AuditLogInterface, AuditLogModule, AuditLogService, Auth, AuthModule, AuthorModule, BackupCodeVerify, BackupCodeVerifyInput, BackupCodeVerifyModule, Billing, BillingModule, BillingService, BlockDiffOptions, BlockNoteDiffUtil, BlockNoteWordDiffRendererUtil, Chunk, ChunkInput, ChunkModule, ClientAbstractService, ClientHttpMethod, ClientNextRef, ClientPreviousRef, ClientSelfRef, ClientTotalRef, CodiceFiscaleValidationOptions, Company, CompanyFields, CompanyModule, Content, ContentModule, DataClass, DataClass as DataClassRegistry, DiffBlock, DiffResult, EndpointCreator, EndpointQuery, EntityAiStatus, EntityObject, Feature, FeatureModule, FormatOption, FoundationModuleDefinitions, HowTo, HowToFields, HowToModule, HowToService, InviteValidation, JsonApiDataFactory, MOBILE_BREAKPOINT, Module, ModuleDefinitions, ModuleModule, ModulePathsModule, ModuleRegistrar, ModuleRegistry, Modules, Notification, NotificationFields, NotificationModule, OAuthClient, OAuthModule, OAuthService, Passkey, PasskeyAuthenticationOptions, PasskeyAuthenticationOptionsInput, PasskeyAuthenticationOptionsInterface, PasskeyAuthenticationOptionsModule, PasskeyModule, PasskeyRegistrationOptions, PasskeyRegistrationOptionsInput, PasskeyRegistrationOptionsInterface, PasskeyRegistrationOptionsModule, PasskeyRegistrationVerify, PasskeyRegistrationVerifyInput, PasskeyRegistrationVerifyModule, PasskeyRename, PasskeyRenameInput, PasskeyRenameModule, PasskeyVerifyLogin, PasskeyVerifyLoginInput, PasskeyVerifyLoginModule, PaymentMethod, PermissionMappingModule, Push, PushInput, PushInterface, PushModule, RbacMatrixModule, ReferralModule, ReferralService, ReferralStats, ReferralStatsModule, RehydrationFactory, Role, RoleModule, S3, S3Module, SearchResultInterface, StripeCustomer, StripeCustomerModule, StripeCustomerService, StripeInvoice, StripeInvoiceModule, StripeInvoiceService, StripePaymentMethodModule, StripePrice, StripePriceModule, StripePriceService, StripeProduct, StripeProductModule, StripeProductService, StripePromotionCode, StripePromotionCodeModule, StripePromotionCodeService, StripeSubscription, StripeSubscriptionModule, StripeSubscriptionService, StripeUsage, StripeUsageModule, StripeUsageService, TableOptions, ToastOptions, TotpAuthenticator, TotpAuthenticatorModule, TotpSetup, TotpSetupInput, TotpSetupInterface, TotpSetupModule, TotpVerify, TotpVerifyInput, TotpVerifyLogin, TotpVerifyLoginInput, TotpVerifyLoginModule, TotpVerifyModule, TwoFactorChallenge, TwoFactorChallengeInput, TwoFactorChallengeModule, TwoFactorEnable, TwoFactorEnableInput, TwoFactorEnableModule, TwoFactorService, TwoFactorStatus, TwoFactorStatusInterface, TwoFactorStatusModule, User, UserModule, UserObject, VIEWPORT_COOKIE_NAME, Waitlist, WaitlistInput, WaitlistInterface, WaitlistModule, WaitlistService, WaitlistStats, WaitlistStatsInterface, WaitlistStatsModule, WaitlistStatus, WordDiff, checkPermissions, checkPermissionsFromServer, cn, composeRefs, dismissToast, entityObjectSchema, exists, formatCodiceFiscale, formatDate, formatLocalDate, formatPartitaIva, getBootstrapper, getClientGlobalErrorHandler, getTableComponents, getTableOptions, getValueFromPath, hasBootstrapper, isRemoteImageSrc, rehydrate, rehydrateList, resetBootstrapStore, setBootstrapper, setClientGlobalErrorHandler, showCustomToast, showError, showToast, translateData, translateResponse, tryBootstrap, useComposedRefs, useIsMobile, userObjectSchema, validateCodiceFiscale, validateItalianTaxCode, validatePartitaIva } from './core/index.js';
|
package/dist/index.js
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
var
|
|
21
|
+
var _chunkOTEDZ6YWjs = require('./chunk-OTEDZ6YW.js');
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
|
|
@@ -216,7 +216,10 @@ var _chunkTOKHHZSPjs = require('./chunk-TOKHHZSP.js');
|
|
|
216
216
|
|
|
217
217
|
|
|
218
218
|
|
|
219
|
-
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
var _chunkRTOC53EZjs = require('./chunk-RTOC53EZ.js');
|
|
220
223
|
require('./chunk-LXKSUWAV.js');
|
|
221
224
|
require('./chunk-IBS6NI7D.js');
|
|
222
225
|
|
|
@@ -457,5 +460,8 @@ require('./chunk-7QVYU63E.js');
|
|
|
457
460
|
|
|
458
461
|
|
|
459
462
|
|
|
460
|
-
exports.ACTION_TYPES = _chunkTOKHHZSPjs.ACTION_TYPES; exports.AVAILABLE_OAUTH_SCOPES = _chunkV66AZWPGjs.AVAILABLE_OAUTH_SCOPES; exports.AbstractApiData = _chunkV66AZWPGjs.AbstractApiData; exports.AbstractService = _chunkV66AZWPGjs.AbstractService; exports.Action = _chunkV66AZWPGjs.Action; exports.Assistant = _chunkV66AZWPGjs.Assistant; exports.AssistantAction = _chunkV66AZWPGjs.AssistantAction; exports.AssistantActionModule = _chunkV66AZWPGjs.AssistantActionModule; exports.AssistantActionService = _chunkV66AZWPGjs.AssistantActionService; exports.AssistantMessage = _chunkV66AZWPGjs.AssistantMessage; exports.AssistantMessageModule = _chunkV66AZWPGjs.AssistantMessageModule; exports.AssistantMessageService = _chunkV66AZWPGjs.AssistantMessageService; exports.AssistantModule = _chunkV66AZWPGjs.AssistantModule; exports.AssistantService = _chunkV66AZWPGjs.AssistantService; exports.AuditLog = _chunkV66AZWPGjs.AuditLog; exports.AuditLogModule = _chunkV66AZWPGjs.AuditLogModule; exports.AuditLogService = _chunkV66AZWPGjs.AuditLogService; exports.Auth = _chunkV66AZWPGjs.Auth; exports.AuthComponent = _chunkV66AZWPGjs.AuthComponent; exports.AuthModule = _chunkV66AZWPGjs.AuthModule; exports.AuthService = _chunkV66AZWPGjs.AuthService; exports.AuthorModule = _chunkV66AZWPGjs.AuthorModule; exports.BackupCodeVerify = _chunkV66AZWPGjs.BackupCodeVerify; exports.BackupCodeVerifyModule = _chunkV66AZWPGjs.BackupCodeVerifyModule; exports.Billing = _chunkV66AZWPGjs.Billing; exports.BillingModule = _chunkV66AZWPGjs.BillingModule; exports.BillingService = _chunkV66AZWPGjs.BillingService; exports.BlockNoteDiffUtil = _chunkV66AZWPGjs.BlockNoteDiffUtil; exports.BlockNoteWordDiffRendererUtil = _chunkV66AZWPGjs.BlockNoteWordDiffRendererUtil; exports.COMPANY_ADMINISTRATOR_ROLE_ID = _chunkTOKHHZSPjs.COMPANY_ADMINISTRATOR_ROLE_ID; exports.Chunk = _chunkV66AZWPGjs.Chunk; exports.ChunkModule = _chunkV66AZWPGjs.ChunkModule; exports.ClientAbstractService = _chunkV66AZWPGjs.ClientAbstractService; exports.ClientHttpMethod = _chunkV66AZWPGjs.ClientHttpMethod; exports.Company = _chunkV66AZWPGjs.Company; exports.CompanyFields = _chunkV66AZWPGjs.CompanyFields; exports.CompanyModule = _chunkV66AZWPGjs.CompanyModule; exports.CompanyService = _chunkV66AZWPGjs.CompanyService; exports.Content = _chunkV66AZWPGjs.Content; exports.ContentFields = _chunkV66AZWPGjs.ContentFields; exports.ContentModule = _chunkV66AZWPGjs.ContentModule; exports.ContentService = _chunkV66AZWPGjs.ContentService; exports.DEFAULT_GRANT_TYPES = _chunkV66AZWPGjs.DEFAULT_GRANT_TYPES; exports.DataClass = _chunkFPO4DLZNjs.DataClassRegistry; exports.DataClassRegistry = _chunkFPO4DLZNjs.DataClassRegistry; exports.EndpointCreator = _chunkV66AZWPGjs.EndpointCreator; exports.EntityAiStatus = _chunkV66AZWPGjs.EntityAiStatus; exports.Feature = _chunkV66AZWPGjs.Feature; exports.FeatureModule = _chunkV66AZWPGjs.FeatureModule; exports.FeatureService = _chunkV66AZWPGjs.FeatureService; exports.HowTo = _chunkV66AZWPGjs.HowTo; exports.HowToFields = _chunkV66AZWPGjs.HowToFields; exports.HowToModule = _chunkV66AZWPGjs.HowToModule; exports.HowToService = _chunkV66AZWPGjs.HowToService; exports.HttpMethod = _chunkV66AZWPGjs.HttpMethod; exports.InvoiceStatus = _chunkV66AZWPGjs.InvoiceStatus; exports.JsonApiDataFactory = _chunkFPO4DLZNjs.JsonApiDataFactory; exports.MOBILE_BREAKPOINT = _chunkV66AZWPGjs.MOBILE_BREAKPOINT; exports.Module = _chunkV66AZWPGjs.Module; exports.ModuleModule = _chunkV66AZWPGjs.ModuleModule; exports.ModulePaths = _chunkV66AZWPGjs.ModulePaths; exports.ModulePathsModule = _chunkV66AZWPGjs.ModulePathsModule; exports.ModuleRegistrar = _chunkV66AZWPGjs.ModuleRegistrar; exports.ModuleRegistry = _chunkV66AZWPGjs.ModuleRegistry; exports.Modules = _chunkV66AZWPGjs.Modules; exports.Notification = _chunkV66AZWPGjs.Notification; exports.NotificationFields = _chunkV66AZWPGjs.NotificationFields; exports.NotificationModule = _chunkV66AZWPGjs.NotificationModule; exports.NotificationService = _chunkV66AZWPGjs.NotificationService; exports.OAUTH_SCOPE_DISPLAY = _chunkV66AZWPGjs.OAUTH_SCOPE_DISPLAY; exports.OAuthClient = _chunkV66AZWPGjs.OAuthClient; exports.OAuthModule = _chunkV66AZWPGjs.OAuthModule; exports.OAuthService = _chunkV66AZWPGjs.OAuthService; exports.Passkey = _chunkV66AZWPGjs.Passkey; exports.PasskeyAuthenticationOptions = _chunkV66AZWPGjs.PasskeyAuthenticationOptions; exports.PasskeyAuthenticationOptionsModule = _chunkV66AZWPGjs.PasskeyAuthenticationOptionsModule; exports.PasskeyModule = _chunkV66AZWPGjs.PasskeyModule; exports.PasskeyRegistrationOptions = _chunkV66AZWPGjs.PasskeyRegistrationOptions; exports.PasskeyRegistrationOptionsModule = _chunkV66AZWPGjs.PasskeyRegistrationOptionsModule; exports.PasskeyRegistrationVerify = _chunkV66AZWPGjs.PasskeyRegistrationVerify; exports.PasskeyRegistrationVerifyModule = _chunkV66AZWPGjs.PasskeyRegistrationVerifyModule; exports.PasskeyRename = _chunkV66AZWPGjs.PasskeyRename; exports.PasskeyRenameModule = _chunkV66AZWPGjs.PasskeyRenameModule; exports.PasskeyVerifyLogin = _chunkV66AZWPGjs.PasskeyVerifyLogin; exports.PasskeyVerifyLoginModule = _chunkV66AZWPGjs.PasskeyVerifyLoginModule; exports.PaymentMethod = _chunkV66AZWPGjs.PaymentMethod; exports.PermissionMapping = _chunkV66AZWPGjs.PermissionMapping; exports.PermissionMappingModule = _chunkV66AZWPGjs.PermissionMappingModule; exports.Push = _chunkV66AZWPGjs.Push; exports.PushModule = _chunkV66AZWPGjs.PushModule; exports.PushService = _chunkV66AZWPGjs.PushService; exports.RbacMatrixModel = _chunkV66AZWPGjs.RbacMatrixModel; exports.RbacMatrixModule = _chunkV66AZWPGjs.RbacMatrixModule; exports.RbacService = _chunkTOKHHZSPjs.RbacService; exports.ReferralModule = _chunkV66AZWPGjs.ReferralModule; exports.ReferralService = _chunkV66AZWPGjs.ReferralService; exports.ReferralStats = _chunkV66AZWPGjs.ReferralStats; exports.ReferralStatsModule = _chunkV66AZWPGjs.ReferralStatsModule; exports.RehydrationFactory = _chunkV66AZWPGjs.RehydrationFactory; exports.Role = _chunkV66AZWPGjs.Role; exports.RoleFields = _chunkV66AZWPGjs.RoleFields; exports.RoleModule = _chunkV66AZWPGjs.RoleModule; exports.RoleService = _chunkV66AZWPGjs.RoleService; exports.S3 = _chunkV66AZWPGjs.S3; exports.S3Module = _chunkV66AZWPGjs.S3Module; exports.S3Service = _chunkV66AZWPGjs.S3Service; exports.StripeCustomer = _chunkV66AZWPGjs.StripeCustomer; exports.StripeCustomerModule = _chunkV66AZWPGjs.StripeCustomerModule; exports.StripeCustomerService = _chunkV66AZWPGjs.StripeCustomerService; exports.StripeInvoice = _chunkV66AZWPGjs.StripeInvoice; exports.StripeInvoiceModule = _chunkV66AZWPGjs.StripeInvoiceModule; exports.StripeInvoiceService = _chunkV66AZWPGjs.StripeInvoiceService; exports.StripePaymentMethodModule = _chunkV66AZWPGjs.StripePaymentMethodModule; exports.StripePrice = _chunkV66AZWPGjs.StripePrice; exports.StripePriceModule = _chunkV66AZWPGjs.StripePriceModule; exports.StripePriceService = _chunkV66AZWPGjs.StripePriceService; exports.StripeProduct = _chunkV66AZWPGjs.StripeProduct; exports.StripeProductModule = _chunkV66AZWPGjs.StripeProductModule; exports.StripeProductService = _chunkV66AZWPGjs.StripeProductService; exports.StripePromotionCode = _chunkV66AZWPGjs.StripePromotionCode; exports.StripePromotionCodeModule = _chunkV66AZWPGjs.StripePromotionCodeModule; exports.StripePromotionCodeService = _chunkV66AZWPGjs.StripePromotionCodeService; exports.StripeSubscription = _chunkV66AZWPGjs.StripeSubscription; exports.StripeSubscriptionModule = _chunkV66AZWPGjs.StripeSubscriptionModule; exports.StripeSubscriptionService = _chunkV66AZWPGjs.StripeSubscriptionService; exports.StripeUsage = _chunkV66AZWPGjs.StripeUsage; exports.StripeUsageModule = _chunkV66AZWPGjs.StripeUsageModule; exports.StripeUsageService = _chunkV66AZWPGjs.StripeUsageService; exports.SubscriptionStatus = _chunkV66AZWPGjs.SubscriptionStatus; exports.TableOptions = _chunkV66AZWPGjs.TableOptions; exports.TokenUsageAdminBreakdownModule = _chunkV66AZWPGjs.TokenUsageAdminBreakdownModule; exports.TokenUsageAdminSummaryModule = _chunkV66AZWPGjs.TokenUsageAdminSummaryModule; exports.TokenUsageAdminTimelineModule = _chunkV66AZWPGjs.TokenUsageAdminTimelineModule; exports.TotpAuthenticator = _chunkV66AZWPGjs.TotpAuthenticator; exports.TotpAuthenticatorModule = _chunkV66AZWPGjs.TotpAuthenticatorModule; exports.TotpSetup = _chunkV66AZWPGjs.TotpSetup; exports.TotpSetupModule = _chunkV66AZWPGjs.TotpSetupModule; exports.TotpVerify = _chunkV66AZWPGjs.TotpVerify; exports.TotpVerifyLogin = _chunkV66AZWPGjs.TotpVerifyLogin; exports.TotpVerifyLoginModule = _chunkV66AZWPGjs.TotpVerifyLoginModule; exports.TotpVerifyModule = _chunkV66AZWPGjs.TotpVerifyModule; exports.TwoFactorChallenge = _chunkV66AZWPGjs.TwoFactorChallenge; exports.TwoFactorChallengeModule = _chunkV66AZWPGjs.TwoFactorChallengeModule; exports.TwoFactorEnable = _chunkV66AZWPGjs.TwoFactorEnable; exports.TwoFactorEnableModule = _chunkV66AZWPGjs.TwoFactorEnableModule; exports.TwoFactorService = _chunkV66AZWPGjs.TwoFactorService; exports.TwoFactorStatus = _chunkV66AZWPGjs.TwoFactorStatus; exports.TwoFactorStatusModule = _chunkV66AZWPGjs.TwoFactorStatusModule; exports.User = _chunkV66AZWPGjs.User; exports.UserFields = _chunkV66AZWPGjs.UserFields; exports.UserModule = _chunkV66AZWPGjs.UserModule; exports.UserService = _chunkV66AZWPGjs.UserService; exports.VIEWPORT_COOKIE_NAME = _chunkV66AZWPGjs.VIEWPORT_COOKIE_NAME; exports.Waitlist = _chunkV66AZWPGjs.Waitlist; exports.WaitlistModule = _chunkV66AZWPGjs.WaitlistModule; exports.WaitlistService = _chunkV66AZWPGjs.WaitlistService; exports.WaitlistStats = _chunkV66AZWPGjs.WaitlistStats; exports.WaitlistStatsModule = _chunkV66AZWPGjs.WaitlistStatsModule; exports.checkPermissions = _chunkV66AZWPGjs.checkPermissions; exports.checkPermissionsFromServer = _chunkV66AZWPGjs.checkPermissionsFromServer; exports.clearLastApiMeta = _chunkV66AZWPGjs.clearLastApiMeta; exports.clearLastApiTotal = _chunkV66AZWPGjs.clearLastApiTotal; exports.cn = _chunkV66AZWPGjs.cn; exports.composeRefs = _chunkV66AZWPGjs.composeRefs; exports.configureAuth = _chunkV66AZWPGjs.configureAuth; exports.configureI18n = _chunkTOKHHZSPjs.configureI18n; exports.configureJsonApi = _chunkTOKHHZSPjs.configureJsonApi; exports.configureLogin = _chunkTOKHHZSPjs.configureLogin; exports.configureReferral = _chunkTOKHHZSPjs.configureReferral; exports.configureRoles = _chunkTOKHHZSPjs.configureRoles; exports.configureWaitlist = _chunkTOKHHZSPjs.configureWaitlist; exports.createJsonApiInclusion = _chunkV66AZWPGjs.createJsonApiInclusion; exports.dismissToast = _chunkV66AZWPGjs.dismissToast; exports.entityObjectSchema = _chunkV66AZWPGjs.entityObjectSchema; exports.exists = _chunkV66AZWPGjs.exists; exports.formatCodiceFiscale = _chunkV66AZWPGjs.formatCodiceFiscale; exports.formatDate = _chunkV66AZWPGjs.formatDate; exports.formatLocalDate = _chunkV66AZWPGjs.formatLocalDate; exports.formatPartitaIva = _chunkV66AZWPGjs.formatPartitaIva; exports.getApiUrl = _chunkTOKHHZSPjs.getApiUrl; exports.getAppUrl = _chunkTOKHHZSPjs.getAppUrl; exports.getBootstrapper = _chunkFPO4DLZNjs.getBootstrapper; exports.getClientGlobalErrorHandler = _chunkV66AZWPGjs.getClientGlobalErrorHandler; exports.getGlobalErrorHandler = _chunkV66AZWPGjs.getGlobalErrorHandler; exports.getIcon = _chunkV66AZWPGjs.getIcon; exports.getIconByModule = _chunkV66AZWPGjs.getIconByModule; exports.getIconByModuleName = _chunkV66AZWPGjs.getIconByModuleName; exports.getInitials = _chunkV66AZWPGjs.getInitials; exports.getLastApiMeta = _chunkV66AZWPGjs.getLastApiMeta; exports.getLastApiTotal = _chunkV66AZWPGjs.getLastApiTotal; exports.getLucideIcon = _chunkV66AZWPGjs.getLucideIcon; exports.getLucideIconByModule = _chunkV66AZWPGjs.getLucideIconByModule; exports.getLucideIconByModuleName = _chunkV66AZWPGjs.getLucideIconByModuleName; exports.getPublicApiUrl = _chunkTOKHHZSPjs.getPublicApiUrl; exports.getReferralConfig = _chunkTOKHHZSPjs.getReferralConfig; exports.getRoleId = _chunkTOKHHZSPjs.getRoleId; exports.getStripePublishableKey = _chunkTOKHHZSPjs.getStripePublishableKey; exports.getTableComponents = _chunkV66AZWPGjs.getTableComponents; exports.getTableOptions = _chunkV66AZWPGjs.getTableOptions; exports.getTokenHandler = _chunkV66AZWPGjs.getTokenHandler; exports.getTrackablePages = _chunkTOKHHZSPjs.getTrackablePages; exports.getValueFromPath = _chunkV66AZWPGjs.getValueFromPath; exports.getWaitlistConfig = _chunkTOKHHZSPjs.getWaitlistConfig; exports.hasBootstrapper = _chunkFPO4DLZNjs.hasBootstrapper; exports.isReferralEnabled = _chunkTOKHHZSPjs.isReferralEnabled; exports.isRemoteImageSrc = _chunkV66AZWPGjs.isRemoteImageSrc; exports.isRolesConfigured = _chunkTOKHHZSPjs.isRolesConfigured; exports.rehydrate = _chunkV66AZWPGjs.rehydrate; exports.rehydrateList = _chunkV66AZWPGjs.rehydrateList; exports.resetBootstrapStore = _chunkFPO4DLZNjs.resetBootstrapStore; exports.setBootstrapper = _chunkFPO4DLZNjs.setBootstrapper; exports.setClientGlobalErrorHandler = _chunkV66AZWPGjs.setClientGlobalErrorHandler; exports.setGlobalErrorHandler = _chunkV66AZWPGjs.setGlobalErrorHandler; exports.showCustomToast = _chunkV66AZWPGjs.showCustomToast; exports.showError = _chunkV66AZWPGjs.showError; exports.showToast = _chunkV66AZWPGjs.showToast; exports.translateData = _chunkFPO4DLZNjs.translateData; exports.translateResponse = _chunkFPO4DLZNjs.translateResponse; exports.tryBootstrap = _chunkFPO4DLZNjs.tryBootstrap; exports.useComposedRefs = _chunkV66AZWPGjs.useComposedRefs; exports.useIsMobile = _chunkV66AZWPGjs.useIsMobile; exports.userObjectSchema = _chunkV66AZWPGjs.userObjectSchema; exports.validateCodiceFiscale = _chunkV66AZWPGjs.validateCodiceFiscale; exports.validateItalianTaxCode = _chunkV66AZWPGjs.validateItalianTaxCode; exports.validatePartitaIva = _chunkV66AZWPGjs.validatePartitaIva;
|
|
463
|
+
|
|
464
|
+
|
|
465
|
+
|
|
466
|
+
exports.ACTION_TYPES = _chunkOTEDZ6YWjs.ACTION_TYPES; exports.AVAILABLE_OAUTH_SCOPES = _chunkRTOC53EZjs.AVAILABLE_OAUTH_SCOPES; exports.AbstractApiData = _chunkRTOC53EZjs.AbstractApiData; exports.AbstractService = _chunkRTOC53EZjs.AbstractService; exports.Action = _chunkRTOC53EZjs.Action; exports.Assistant = _chunkRTOC53EZjs.Assistant; exports.AssistantAction = _chunkRTOC53EZjs.AssistantAction; exports.AssistantActionModule = _chunkRTOC53EZjs.AssistantActionModule; exports.AssistantActionService = _chunkRTOC53EZjs.AssistantActionService; exports.AssistantMessage = _chunkRTOC53EZjs.AssistantMessage; exports.AssistantMessageModule = _chunkRTOC53EZjs.AssistantMessageModule; exports.AssistantMessageService = _chunkRTOC53EZjs.AssistantMessageService; exports.AssistantModule = _chunkRTOC53EZjs.AssistantModule; exports.AssistantService = _chunkRTOC53EZjs.AssistantService; exports.AuditLog = _chunkRTOC53EZjs.AuditLog; exports.AuditLogModule = _chunkRTOC53EZjs.AuditLogModule; exports.AuditLogService = _chunkRTOC53EZjs.AuditLogService; exports.Auth = _chunkRTOC53EZjs.Auth; exports.AuthComponent = _chunkRTOC53EZjs.AuthComponent; exports.AuthModule = _chunkRTOC53EZjs.AuthModule; exports.AuthService = _chunkRTOC53EZjs.AuthService; exports.AuthorModule = _chunkRTOC53EZjs.AuthorModule; exports.BackupCodeVerify = _chunkRTOC53EZjs.BackupCodeVerify; exports.BackupCodeVerifyModule = _chunkRTOC53EZjs.BackupCodeVerifyModule; exports.Billing = _chunkRTOC53EZjs.Billing; exports.BillingModule = _chunkRTOC53EZjs.BillingModule; exports.BillingService = _chunkRTOC53EZjs.BillingService; exports.BlockNoteDiffUtil = _chunkRTOC53EZjs.BlockNoteDiffUtil; exports.BlockNoteWordDiffRendererUtil = _chunkRTOC53EZjs.BlockNoteWordDiffRendererUtil; exports.COMPANY_ADMINISTRATOR_ROLE_ID = _chunkOTEDZ6YWjs.COMPANY_ADMINISTRATOR_ROLE_ID; exports.Chunk = _chunkRTOC53EZjs.Chunk; exports.ChunkModule = _chunkRTOC53EZjs.ChunkModule; exports.ClientAbstractService = _chunkRTOC53EZjs.ClientAbstractService; exports.ClientHttpMethod = _chunkRTOC53EZjs.ClientHttpMethod; exports.Company = _chunkRTOC53EZjs.Company; exports.CompanyFields = _chunkRTOC53EZjs.CompanyFields; exports.CompanyModule = _chunkRTOC53EZjs.CompanyModule; exports.CompanyService = _chunkRTOC53EZjs.CompanyService; exports.Content = _chunkRTOC53EZjs.Content; exports.ContentFields = _chunkRTOC53EZjs.ContentFields; exports.ContentModule = _chunkRTOC53EZjs.ContentModule; exports.ContentService = _chunkRTOC53EZjs.ContentService; exports.DEFAULT_GRANT_TYPES = _chunkRTOC53EZjs.DEFAULT_GRANT_TYPES; exports.DataClass = _chunkFPO4DLZNjs.DataClassRegistry; exports.DataClassRegistry = _chunkFPO4DLZNjs.DataClassRegistry; exports.EndpointCreator = _chunkRTOC53EZjs.EndpointCreator; exports.EntityAiStatus = _chunkRTOC53EZjs.EntityAiStatus; exports.Feature = _chunkRTOC53EZjs.Feature; exports.FeatureModule = _chunkRTOC53EZjs.FeatureModule; exports.FeatureService = _chunkRTOC53EZjs.FeatureService; exports.HowTo = _chunkRTOC53EZjs.HowTo; exports.HowToFields = _chunkRTOC53EZjs.HowToFields; exports.HowToModule = _chunkRTOC53EZjs.HowToModule; exports.HowToService = _chunkRTOC53EZjs.HowToService; exports.HttpMethod = _chunkRTOC53EZjs.HttpMethod; exports.InvoiceStatus = _chunkRTOC53EZjs.InvoiceStatus; exports.JsonApiDataFactory = _chunkFPO4DLZNjs.JsonApiDataFactory; exports.MOBILE_BREAKPOINT = _chunkRTOC53EZjs.MOBILE_BREAKPOINT; exports.Module = _chunkRTOC53EZjs.Module; exports.ModuleModule = _chunkRTOC53EZjs.ModuleModule; exports.ModulePaths = _chunkRTOC53EZjs.ModulePaths; exports.ModulePathsModule = _chunkRTOC53EZjs.ModulePathsModule; exports.ModuleRegistrar = _chunkRTOC53EZjs.ModuleRegistrar; exports.ModuleRegistry = _chunkRTOC53EZjs.ModuleRegistry; exports.Modules = _chunkRTOC53EZjs.Modules; exports.Notification = _chunkRTOC53EZjs.Notification; exports.NotificationFields = _chunkRTOC53EZjs.NotificationFields; exports.NotificationModule = _chunkRTOC53EZjs.NotificationModule; exports.NotificationService = _chunkRTOC53EZjs.NotificationService; exports.OAUTH_SCOPE_DISPLAY = _chunkRTOC53EZjs.OAUTH_SCOPE_DISPLAY; exports.OAuthClient = _chunkRTOC53EZjs.OAuthClient; exports.OAuthModule = _chunkRTOC53EZjs.OAuthModule; exports.OAuthService = _chunkRTOC53EZjs.OAuthService; exports.Passkey = _chunkRTOC53EZjs.Passkey; exports.PasskeyAuthenticationOptions = _chunkRTOC53EZjs.PasskeyAuthenticationOptions; exports.PasskeyAuthenticationOptionsModule = _chunkRTOC53EZjs.PasskeyAuthenticationOptionsModule; exports.PasskeyModule = _chunkRTOC53EZjs.PasskeyModule; exports.PasskeyRegistrationOptions = _chunkRTOC53EZjs.PasskeyRegistrationOptions; exports.PasskeyRegistrationOptionsModule = _chunkRTOC53EZjs.PasskeyRegistrationOptionsModule; exports.PasskeyRegistrationVerify = _chunkRTOC53EZjs.PasskeyRegistrationVerify; exports.PasskeyRegistrationVerifyModule = _chunkRTOC53EZjs.PasskeyRegistrationVerifyModule; exports.PasskeyRename = _chunkRTOC53EZjs.PasskeyRename; exports.PasskeyRenameModule = _chunkRTOC53EZjs.PasskeyRenameModule; exports.PasskeyVerifyLogin = _chunkRTOC53EZjs.PasskeyVerifyLogin; exports.PasskeyVerifyLoginModule = _chunkRTOC53EZjs.PasskeyVerifyLoginModule; exports.PaymentMethod = _chunkRTOC53EZjs.PaymentMethod; exports.PermissionMapping = _chunkRTOC53EZjs.PermissionMapping; exports.PermissionMappingModule = _chunkRTOC53EZjs.PermissionMappingModule; exports.Push = _chunkRTOC53EZjs.Push; exports.PushModule = _chunkRTOC53EZjs.PushModule; exports.PushService = _chunkRTOC53EZjs.PushService; exports.RbacMatrixModel = _chunkRTOC53EZjs.RbacMatrixModel; exports.RbacMatrixModule = _chunkRTOC53EZjs.RbacMatrixModule; exports.RbacService = _chunkOTEDZ6YWjs.RbacService; exports.ReferralModule = _chunkRTOC53EZjs.ReferralModule; exports.ReferralService = _chunkRTOC53EZjs.ReferralService; exports.ReferralStats = _chunkRTOC53EZjs.ReferralStats; exports.ReferralStatsModule = _chunkRTOC53EZjs.ReferralStatsModule; exports.RehydrationFactory = _chunkRTOC53EZjs.RehydrationFactory; exports.Role = _chunkRTOC53EZjs.Role; exports.RoleFields = _chunkRTOC53EZjs.RoleFields; exports.RoleModule = _chunkRTOC53EZjs.RoleModule; exports.RoleService = _chunkRTOC53EZjs.RoleService; exports.S3 = _chunkRTOC53EZjs.S3; exports.S3Module = _chunkRTOC53EZjs.S3Module; exports.S3Service = _chunkRTOC53EZjs.S3Service; exports.StripeCustomer = _chunkRTOC53EZjs.StripeCustomer; exports.StripeCustomerModule = _chunkRTOC53EZjs.StripeCustomerModule; exports.StripeCustomerService = _chunkRTOC53EZjs.StripeCustomerService; exports.StripeInvoice = _chunkRTOC53EZjs.StripeInvoice; exports.StripeInvoiceModule = _chunkRTOC53EZjs.StripeInvoiceModule; exports.StripeInvoiceService = _chunkRTOC53EZjs.StripeInvoiceService; exports.StripePaymentMethodModule = _chunkRTOC53EZjs.StripePaymentMethodModule; exports.StripePrice = _chunkRTOC53EZjs.StripePrice; exports.StripePriceModule = _chunkRTOC53EZjs.StripePriceModule; exports.StripePriceService = _chunkRTOC53EZjs.StripePriceService; exports.StripeProduct = _chunkRTOC53EZjs.StripeProduct; exports.StripeProductModule = _chunkRTOC53EZjs.StripeProductModule; exports.StripeProductService = _chunkRTOC53EZjs.StripeProductService; exports.StripePromotionCode = _chunkRTOC53EZjs.StripePromotionCode; exports.StripePromotionCodeModule = _chunkRTOC53EZjs.StripePromotionCodeModule; exports.StripePromotionCodeService = _chunkRTOC53EZjs.StripePromotionCodeService; exports.StripeSubscription = _chunkRTOC53EZjs.StripeSubscription; exports.StripeSubscriptionModule = _chunkRTOC53EZjs.StripeSubscriptionModule; exports.StripeSubscriptionService = _chunkRTOC53EZjs.StripeSubscriptionService; exports.StripeUsage = _chunkRTOC53EZjs.StripeUsage; exports.StripeUsageModule = _chunkRTOC53EZjs.StripeUsageModule; exports.StripeUsageService = _chunkRTOC53EZjs.StripeUsageService; exports.SubscriptionStatus = _chunkRTOC53EZjs.SubscriptionStatus; exports.TableOptions = _chunkRTOC53EZjs.TableOptions; exports.TokenUsageAdminBreakdownModule = _chunkRTOC53EZjs.TokenUsageAdminBreakdownModule; exports.TokenUsageAdminSummaryModule = _chunkRTOC53EZjs.TokenUsageAdminSummaryModule; exports.TokenUsageAdminTimelineModule = _chunkRTOC53EZjs.TokenUsageAdminTimelineModule; exports.TotpAuthenticator = _chunkRTOC53EZjs.TotpAuthenticator; exports.TotpAuthenticatorModule = _chunkRTOC53EZjs.TotpAuthenticatorModule; exports.TotpSetup = _chunkRTOC53EZjs.TotpSetup; exports.TotpSetupModule = _chunkRTOC53EZjs.TotpSetupModule; exports.TotpVerify = _chunkRTOC53EZjs.TotpVerify; exports.TotpVerifyLogin = _chunkRTOC53EZjs.TotpVerifyLogin; exports.TotpVerifyLoginModule = _chunkRTOC53EZjs.TotpVerifyLoginModule; exports.TotpVerifyModule = _chunkRTOC53EZjs.TotpVerifyModule; exports.TwoFactorChallenge = _chunkRTOC53EZjs.TwoFactorChallenge; exports.TwoFactorChallengeModule = _chunkRTOC53EZjs.TwoFactorChallengeModule; exports.TwoFactorEnable = _chunkRTOC53EZjs.TwoFactorEnable; exports.TwoFactorEnableModule = _chunkRTOC53EZjs.TwoFactorEnableModule; exports.TwoFactorService = _chunkRTOC53EZjs.TwoFactorService; exports.TwoFactorStatus = _chunkRTOC53EZjs.TwoFactorStatus; exports.TwoFactorStatusModule = _chunkRTOC53EZjs.TwoFactorStatusModule; exports.User = _chunkRTOC53EZjs.User; exports.UserFields = _chunkRTOC53EZjs.UserFields; exports.UserModule = _chunkRTOC53EZjs.UserModule; exports.UserService = _chunkRTOC53EZjs.UserService; exports.VIEWPORT_COOKIE_NAME = _chunkRTOC53EZjs.VIEWPORT_COOKIE_NAME; exports.Waitlist = _chunkRTOC53EZjs.Waitlist; exports.WaitlistModule = _chunkRTOC53EZjs.WaitlistModule; exports.WaitlistService = _chunkRTOC53EZjs.WaitlistService; exports.WaitlistStats = _chunkRTOC53EZjs.WaitlistStats; exports.WaitlistStatsModule = _chunkRTOC53EZjs.WaitlistStatsModule; exports.checkPermissions = _chunkRTOC53EZjs.checkPermissions; exports.checkPermissionsFromServer = _chunkRTOC53EZjs.checkPermissionsFromServer; exports.clearLastApiMeta = _chunkRTOC53EZjs.clearLastApiMeta; exports.clearLastApiTotal = _chunkRTOC53EZjs.clearLastApiTotal; exports.cn = _chunkRTOC53EZjs.cn; exports.composeRefs = _chunkRTOC53EZjs.composeRefs; exports.configureAuth = _chunkRTOC53EZjs.configureAuth; exports.configureI18n = _chunkOTEDZ6YWjs.configureI18n; exports.configureJsonApi = _chunkOTEDZ6YWjs.configureJsonApi; exports.configureLogin = _chunkOTEDZ6YWjs.configureLogin; exports.configureReferral = _chunkOTEDZ6YWjs.configureReferral; exports.configureRoles = _chunkOTEDZ6YWjs.configureRoles; exports.configureTokenUsage = _chunkRTOC53EZjs.configureTokenUsage; exports.configureWaitlist = _chunkOTEDZ6YWjs.configureWaitlist; exports.createJsonApiInclusion = _chunkRTOC53EZjs.createJsonApiInclusion; exports.dismissToast = _chunkRTOC53EZjs.dismissToast; exports.entityObjectSchema = _chunkRTOC53EZjs.entityObjectSchema; exports.exists = _chunkRTOC53EZjs.exists; exports.formatCodiceFiscale = _chunkRTOC53EZjs.formatCodiceFiscale; exports.formatDate = _chunkRTOC53EZjs.formatDate; exports.formatLocalDate = _chunkRTOC53EZjs.formatLocalDate; exports.formatPartitaIva = _chunkRTOC53EZjs.formatPartitaIva; exports.getApiUrl = _chunkOTEDZ6YWjs.getApiUrl; exports.getAppUrl = _chunkOTEDZ6YWjs.getAppUrl; exports.getBootstrapper = _chunkFPO4DLZNjs.getBootstrapper; exports.getClientGlobalErrorHandler = _chunkRTOC53EZjs.getClientGlobalErrorHandler; exports.getGlobalErrorHandler = _chunkRTOC53EZjs.getGlobalErrorHandler; exports.getIcon = _chunkRTOC53EZjs.getIcon; exports.getIconByModule = _chunkRTOC53EZjs.getIconByModule; exports.getIconByModuleName = _chunkRTOC53EZjs.getIconByModuleName; exports.getInitials = _chunkRTOC53EZjs.getInitials; exports.getLastApiMeta = _chunkRTOC53EZjs.getLastApiMeta; exports.getLastApiTotal = _chunkRTOC53EZjs.getLastApiTotal; exports.getLucideIcon = _chunkRTOC53EZjs.getLucideIcon; exports.getLucideIconByModule = _chunkRTOC53EZjs.getLucideIconByModule; exports.getLucideIconByModuleName = _chunkRTOC53EZjs.getLucideIconByModuleName; exports.getPublicApiUrl = _chunkOTEDZ6YWjs.getPublicApiUrl; exports.getReferralConfig = _chunkOTEDZ6YWjs.getReferralConfig; exports.getRoleId = _chunkOTEDZ6YWjs.getRoleId; exports.getStripePublishableKey = _chunkOTEDZ6YWjs.getStripePublishableKey; exports.getTableComponents = _chunkRTOC53EZjs.getTableComponents; exports.getTableOptions = _chunkRTOC53EZjs.getTableOptions; exports.getTokenHandler = _chunkRTOC53EZjs.getTokenHandler; exports.getTokenUsageCurrency = _chunkRTOC53EZjs.getTokenUsageCurrency; exports.getTrackablePages = _chunkOTEDZ6YWjs.getTrackablePages; exports.getValueFromPath = _chunkRTOC53EZjs.getValueFromPath; exports.getWaitlistConfig = _chunkOTEDZ6YWjs.getWaitlistConfig; exports.hasBootstrapper = _chunkFPO4DLZNjs.hasBootstrapper; exports.isReferralEnabled = _chunkOTEDZ6YWjs.isReferralEnabled; exports.isRemoteImageSrc = _chunkRTOC53EZjs.isRemoteImageSrc; exports.isRolesConfigured = _chunkOTEDZ6YWjs.isRolesConfigured; exports.rehydrate = _chunkRTOC53EZjs.rehydrate; exports.rehydrateList = _chunkRTOC53EZjs.rehydrateList; exports.resetBootstrapStore = _chunkFPO4DLZNjs.resetBootstrapStore; exports.setBootstrapper = _chunkFPO4DLZNjs.setBootstrapper; exports.setClientGlobalErrorHandler = _chunkRTOC53EZjs.setClientGlobalErrorHandler; exports.setGlobalErrorHandler = _chunkRTOC53EZjs.setGlobalErrorHandler; exports.showCustomToast = _chunkRTOC53EZjs.showCustomToast; exports.showError = _chunkRTOC53EZjs.showError; exports.showToast = _chunkRTOC53EZjs.showToast; exports.tokenUsageModules = _chunkRTOC53EZjs.tokenUsageModules; exports.translateData = _chunkFPO4DLZNjs.translateData; exports.translateResponse = _chunkFPO4DLZNjs.translateResponse; exports.tryBootstrap = _chunkFPO4DLZNjs.tryBootstrap; exports.useComposedRefs = _chunkRTOC53EZjs.useComposedRefs; exports.useIsMobile = _chunkRTOC53EZjs.useIsMobile; exports.userObjectSchema = _chunkRTOC53EZjs.userObjectSchema; exports.validateCodiceFiscale = _chunkRTOC53EZjs.validateCodiceFiscale; exports.validateItalianTaxCode = _chunkRTOC53EZjs.validateItalianTaxCode; exports.validatePartitaIva = _chunkRTOC53EZjs.validatePartitaIva;
|
|
461
467
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/index.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/index.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,qnbAAC","file":"/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/index.js"}
|
package/dist/index.mjs
CHANGED
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
getWaitlistConfig,
|
|
19
19
|
isReferralEnabled,
|
|
20
20
|
isRolesConfigured
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-DJWNNV52.mjs";
|
|
22
22
|
import {
|
|
23
23
|
AVAILABLE_OAUTH_SCOPES,
|
|
24
24
|
AbstractApiData,
|
|
@@ -179,6 +179,7 @@ import {
|
|
|
179
179
|
cn,
|
|
180
180
|
composeRefs,
|
|
181
181
|
configureAuth,
|
|
182
|
+
configureTokenUsage,
|
|
182
183
|
createJsonApiInclusion,
|
|
183
184
|
dismissToast,
|
|
184
185
|
entityObjectSchema,
|
|
@@ -201,6 +202,7 @@ import {
|
|
|
201
202
|
getTableComponents,
|
|
202
203
|
getTableOptions,
|
|
203
204
|
getTokenHandler,
|
|
205
|
+
getTokenUsageCurrency,
|
|
204
206
|
getValueFromPath,
|
|
205
207
|
isRemoteImageSrc,
|
|
206
208
|
rehydrate,
|
|
@@ -210,13 +212,14 @@ import {
|
|
|
210
212
|
showCustomToast,
|
|
211
213
|
showError,
|
|
212
214
|
showToast,
|
|
215
|
+
tokenUsageModules,
|
|
213
216
|
useComposedRefs,
|
|
214
217
|
useIsMobile,
|
|
215
218
|
userObjectSchema,
|
|
216
219
|
validateCodiceFiscale,
|
|
217
220
|
validateItalianTaxCode,
|
|
218
221
|
validatePartitaIva
|
|
219
|
-
} from "./chunk-
|
|
222
|
+
} from "./chunk-FS4RVV3K.mjs";
|
|
220
223
|
import "./chunk-AUXK7QSA.mjs";
|
|
221
224
|
import "./chunk-C7C7VY4F.mjs";
|
|
222
225
|
import {
|
|
@@ -402,6 +405,7 @@ export {
|
|
|
402
405
|
configureLogin,
|
|
403
406
|
configureReferral,
|
|
404
407
|
configureRoles,
|
|
408
|
+
configureTokenUsage,
|
|
405
409
|
configureWaitlist,
|
|
406
410
|
createJsonApiInclusion,
|
|
407
411
|
dismissToast,
|
|
@@ -432,6 +436,7 @@ export {
|
|
|
432
436
|
getTableComponents,
|
|
433
437
|
getTableOptions,
|
|
434
438
|
getTokenHandler,
|
|
439
|
+
getTokenUsageCurrency,
|
|
435
440
|
getTrackablePages,
|
|
436
441
|
getValueFromPath,
|
|
437
442
|
getWaitlistConfig,
|
|
@@ -448,6 +453,7 @@ export {
|
|
|
448
453
|
showCustomToast,
|
|
449
454
|
showError,
|
|
450
455
|
showToast,
|
|
456
|
+
tokenUsageModules,
|
|
451
457
|
translateData,
|
|
452
458
|
translateResponse,
|
|
453
459
|
tryBootstrap,
|
package/dist/server/index.js
CHANGED
|
@@ -15,7 +15,7 @@ var _chunkIOLU4ASDjs = require('../chunk-IOLU4ASD.js');
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
var
|
|
18
|
+
var _chunkRTOC53EZjs = require('../chunk-RTOC53EZ.js');
|
|
19
19
|
require('../chunk-LXKSUWAV.js');
|
|
20
20
|
require('../chunk-IBS6NI7D.js');
|
|
21
21
|
|
|
@@ -86,7 +86,7 @@ var ServerSession = class {
|
|
|
86
86
|
if (!rawModules) return false;
|
|
87
87
|
const modules = JSON.parse(_pako.ungzip.call(void 0, Buffer.from(rawModules, "base64"), { toText: true }));
|
|
88
88
|
const selectedModule = modules.find((module) => module.id === params.module.moduleId);
|
|
89
|
-
return
|
|
89
|
+
return _chunkRTOC53EZjs.checkPermissionsFromServer.call(void 0, {
|
|
90
90
|
module: params.module,
|
|
91
91
|
action: params.action,
|
|
92
92
|
data: params.data,
|
|
@@ -296,5 +296,5 @@ _chunk7QVYU63Ejs.__name.call(void 0, ServerJsonApiDelete, "ServerJsonApiDelete")
|
|
|
296
296
|
|
|
297
297
|
|
|
298
298
|
|
|
299
|
-
exports.ServerAuthService =
|
|
299
|
+
exports.ServerAuthService = _chunkRTOC53EZjs.AuthService; exports.ServerCompanyService = _chunkRTOC53EZjs.CompanyService; exports.ServerContentService = _chunkRTOC53EZjs.ContentService; exports.ServerFeatureService = _chunkRTOC53EZjs.FeatureService; exports.ServerJsonApiDelete = ServerJsonApiDelete; exports.ServerJsonApiGet = ServerJsonApiGet; exports.ServerJsonApiPatch = ServerJsonApiPatch; exports.ServerJsonApiPost = ServerJsonApiPost; exports.ServerJsonApiPut = ServerJsonApiPut; exports.ServerNotificationService = _chunkRTOC53EZjs.NotificationService; exports.ServerPushService = _chunkRTOC53EZjs.PushService; exports.ServerRoleService = _chunkRTOC53EZjs.RoleService; exports.ServerS3Service = _chunkRTOC53EZjs.S3Service; exports.ServerSession = ServerSession; exports.ServerUserService = _chunkRTOC53EZjs.UserService; exports.configureServerJsonApi = configureServerJsonApi; exports.getServerApiUrl = getServerApiUrl; exports.getServerAppUrl = getServerAppUrl; exports.getServerToken = _chunkYUO55Q5Ajs.getServerToken; exports.getServerTrackablePages = getServerTrackablePages; exports.invalidateCacheTag = invalidateCacheTag; exports.invalidateCacheTags = invalidateCacheTags; exports.serverRequest = _chunkIOLU4ASDjs.serverRequest;
|
|
300
300
|
//# sourceMappingURL=index.js.map
|
package/dist/server/index.mjs
CHANGED
package/package.json
CHANGED
package/src/core/index.ts
CHANGED
|
@@ -98,4 +98,14 @@ export * from "../features/referral/referral-stats.module";
|
|
|
98
98
|
// them in its bootstrapper without pulling the feature's client bundle —
|
|
99
99
|
// same placement as waitlist-stats and referral-stats above.
|
|
100
100
|
export * from "../features/tokenusage/tokenusage-admin.module";
|
|
101
|
+
// The full six-module bundle (administrative + self-service). Same placement
|
|
102
|
+
// rationale as the line above: a bootstrapper needs it, and it must not drag
|
|
103
|
+
// the feature's recharts client bundle in.
|
|
104
|
+
export * from "../features/tokenusage/tokenusage.modules";
|
|
105
|
+
// configureTokenUsage() is called from the app's bootstrap file, which is
|
|
106
|
+
// evaluated on the server as well as the client. Reaching it through the
|
|
107
|
+
// client-marked ./tokenusage barrel makes it a client function, and calling one
|
|
108
|
+
// from the server throws at module evaluation — so it is exported here, exactly
|
|
109
|
+
// like configureJsonApi. lib/config holds no React and no charting code.
|
|
110
|
+
export * from "../features/tokenusage/lib/config";
|
|
101
111
|
export * from "../features/audit-log";
|
|
@@ -63,6 +63,10 @@ export interface FoundationModuleDefinitions {
|
|
|
63
63
|
TokenUsageAdminSummary: ModuleWithPermissions;
|
|
64
64
|
TokenUsageAdminTimeline: ModuleWithPermissions;
|
|
65
65
|
TokenUsageAdminBreakdown: ModuleWithPermissions;
|
|
66
|
+
// Self-service token-usage reporting modules
|
|
67
|
+
TokenUsageReportSummary: ModuleWithPermissions;
|
|
68
|
+
TokenUsageReportTimeline: ModuleWithPermissions;
|
|
69
|
+
TokenUsageReportBreakdown: ModuleWithPermissions;
|
|
66
70
|
}
|
|
67
71
|
|
|
68
72
|
// App-specific modules - apps will augment this interface ONLY
|
|
@@ -49,6 +49,21 @@ export function TokenUsageAdminContainer() {
|
|
|
49
49
|
error,
|
|
50
50
|
} = useTokenUsageAdmin();
|
|
51
51
|
|
|
52
|
+
// narr8-shaped deployments record essentially no platform spend (usage with no
|
|
53
|
+
// owning company), which would leave the platform tile and the
|
|
54
|
+
// platform-by-operation panel as permanent zeros. Treat "nothing to show" the
|
|
55
|
+
// same way a company filter is treated — the customer half then takes full
|
|
56
|
+
// width. a360ai is unaffected: it has real platform spend.
|
|
57
|
+
const platformIsEmpty = useMemo(
|
|
58
|
+
() =>
|
|
59
|
+
summary
|
|
60
|
+
.filter((row) => row.scope === "platform")
|
|
61
|
+
.every((row) => row.cost === 0 && row.credits === 0 && row.tokensIn === 0 && row.tokensOut === 0),
|
|
62
|
+
[summary],
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
const hidePlatform = singleCustomerMode || platformIsEmpty;
|
|
66
|
+
|
|
52
67
|
const stackByItems = useMemo(
|
|
53
68
|
() => ({
|
|
54
69
|
scope: t("token_usage.admin.stack.scope"),
|
|
@@ -81,7 +96,7 @@ export function TokenUsageAdminContainer() {
|
|
|
81
96
|
return (
|
|
82
97
|
<RoundPageContainer fullWidth forceHeader>
|
|
83
98
|
<div className="flex w-full flex-col gap-4 p-4">
|
|
84
|
-
<TokenUsageAdminTiles summary={summary} metric={filters.metric} singleCustomerMode={
|
|
99
|
+
<TokenUsageAdminTiles summary={summary} metric={filters.metric} singleCustomerMode={hidePlatform} />
|
|
85
100
|
|
|
86
101
|
<Card>
|
|
87
102
|
<CardHeader>
|
|
@@ -142,8 +157,9 @@ export function TokenUsageAdminContainer() {
|
|
|
142
157
|
Platform spend has no owning company, so a company filter makes that
|
|
143
158
|
half meaningless: the provider skips the request and the card is
|
|
144
159
|
hidden rather than rendered empty, leaving the customer half full
|
|
145
|
-
width.
|
|
146
|
-
|
|
160
|
+
width. The same holds when the window records no platform spend at
|
|
161
|
+
all — see `hidePlatform` above. */}
|
|
162
|
+
<div className={cn("grid gap-4", !hidePlatform && "md:grid-cols-2")}>
|
|
147
163
|
<Card>
|
|
148
164
|
<CardHeader>
|
|
149
165
|
<CardTitle>{t("token_usage.admin.customer_by_operation")}</CardTitle>
|
|
@@ -158,7 +174,7 @@ export function TokenUsageAdminContainer() {
|
|
|
158
174
|
</CardContent>
|
|
159
175
|
</Card>
|
|
160
176
|
|
|
161
|
-
{!
|
|
177
|
+
{!hidePlatform && (
|
|
162
178
|
<Card>
|
|
163
179
|
<CardHeader>
|
|
164
180
|
<CardTitle>{t("token_usage.admin.platform_by_operation")}</CardTitle>
|
|
@@ -6,15 +6,8 @@ import { Card, CardContent } from "../../../shadcnui";
|
|
|
6
6
|
import { cn } from "../../../utils";
|
|
7
7
|
import type { TokenUsageAdminSummaryInterface } from "../data/tokenusage-admin-summary.interface";
|
|
8
8
|
import type { Metric } from "../data/tokenusage-admin.types";
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
formatDecimal,
|
|
12
|
-
formatMetricValue,
|
|
13
|
-
formatPercent,
|
|
14
|
-
metricValue,
|
|
15
|
-
percentageDelta,
|
|
16
|
-
type TokenUsageMetrics,
|
|
17
|
-
} from "../lib/metrics";
|
|
9
|
+
import { useUsageFormatters } from "../lib/formatters";
|
|
10
|
+
import { cacheHitPercentage, metricValue, percentageDelta, type TokenUsageMetrics } from "../lib/metrics";
|
|
18
11
|
|
|
19
12
|
type Props = {
|
|
20
13
|
/** The six summary rows: {customer, platform, total} × {current, previous}. */
|
|
@@ -38,6 +31,7 @@ const ZERO: TokenUsageMetrics = { cost: 0, credits: 0, tokensIn: 0, tokensOut: 0
|
|
|
38
31
|
*/
|
|
39
32
|
export function TokenUsageAdminTiles({ summary, metric, singleCustomerMode }: Props) {
|
|
40
33
|
const t = useTranslations();
|
|
34
|
+
const { decimal, metricValue: formatValue, currency, percent } = useUsageFormatters();
|
|
41
35
|
|
|
42
36
|
const rowFor = (scope: string, window: string): TokenUsageMetrics =>
|
|
43
37
|
summary.find((r) => r.scope === scope && r.window === window) ?? ZERO;
|
|
@@ -58,17 +52,19 @@ export function TokenUsageAdminTiles({ summary, metric, singleCustomerMode }: Pr
|
|
|
58
52
|
<LeadTile
|
|
59
53
|
testId="tile-customer"
|
|
60
54
|
label={t("token_usage.admin.customer_spend")}
|
|
61
|
-
value={
|
|
55
|
+
value={formatValue(metricValue(customerCurrent, metric), metric)}
|
|
62
56
|
delta={percentageDelta(metricValue(customerCurrent, metric), metricValue(customerPrevious, metric))}
|
|
63
57
|
previousLabel={t("token_usage.admin.vs_previous")}
|
|
58
|
+
decimal={decimal}
|
|
64
59
|
/>
|
|
65
60
|
{!singleCustomerMode && (
|
|
66
61
|
<LeadTile
|
|
67
62
|
testId="tile-platform"
|
|
68
63
|
label={t("token_usage.admin.platform_spend")}
|
|
69
|
-
value={
|
|
64
|
+
value={formatValue(metricValue(platformCurrent, metric), metric)}
|
|
70
65
|
delta={percentageDelta(metricValue(platformCurrent, metric), metricValue(platformPrevious, metric))}
|
|
71
66
|
previousLabel={t("token_usage.admin.vs_previous")}
|
|
67
|
+
decimal={decimal}
|
|
72
68
|
/>
|
|
73
69
|
)}
|
|
74
70
|
</div>
|
|
@@ -77,18 +73,21 @@ export function TokenUsageAdminTiles({ summary, metric, singleCustomerMode }: Pr
|
|
|
77
73
|
<SupportingTile
|
|
78
74
|
testId="tile-total"
|
|
79
75
|
label={t("token_usage.admin.total_cost")}
|
|
80
|
-
value={
|
|
76
|
+
value={formatValue(metricValue(totalCurrent, metric), metric)}
|
|
81
77
|
delta={percentageDelta(metricValue(totalCurrent, metric), metricValue(totalPrevious, metric))}
|
|
78
|
+
decimal={decimal}
|
|
82
79
|
/>
|
|
83
80
|
<SupportingTile
|
|
84
81
|
testId="tile-avg-per-call"
|
|
85
82
|
label={t("token_usage.admin.avg_per_call")}
|
|
86
|
-
value={
|
|
83
|
+
value={currency(averagePerCall, 4)}
|
|
84
|
+
decimal={decimal}
|
|
87
85
|
/>
|
|
88
86
|
<SupportingTile
|
|
89
87
|
testId="tile-cache-hit"
|
|
90
88
|
label={t("token_usage.admin.cache_hit")}
|
|
91
|
-
value={
|
|
89
|
+
value={percent(cacheHit)}
|
|
90
|
+
decimal={decimal}
|
|
92
91
|
/>
|
|
93
92
|
</div>
|
|
94
93
|
</div>
|
|
@@ -101,12 +100,15 @@ function LeadTile({
|
|
|
101
100
|
value,
|
|
102
101
|
delta,
|
|
103
102
|
previousLabel,
|
|
103
|
+
decimal,
|
|
104
104
|
}: {
|
|
105
105
|
testId: string;
|
|
106
106
|
label: string;
|
|
107
107
|
value: string;
|
|
108
108
|
delta: number | undefined;
|
|
109
109
|
previousLabel: string;
|
|
110
|
+
/** Passed down because `Delta` is a plain function, not a component: it cannot call the hook itself. */
|
|
111
|
+
decimal: (value: number, decimals: number) => string;
|
|
110
112
|
}) {
|
|
111
113
|
return (
|
|
112
114
|
<Card data-testid={testId}>
|
|
@@ -114,7 +116,7 @@ function LeadTile({
|
|
|
114
116
|
<span className="text-muted-foreground text-xs">{label}</span>
|
|
115
117
|
<span className="text-primary text-xl font-semibold tabular-nums">{value}</span>
|
|
116
118
|
<span className="flex items-center gap-1">
|
|
117
|
-
<Delta testId={`${testId}-delta`} delta={delta} />
|
|
119
|
+
<Delta testId={`${testId}-delta`} delta={delta} decimal={decimal} />
|
|
118
120
|
<span className="text-muted-foreground text-xs">{previousLabel}</span>
|
|
119
121
|
</span>
|
|
120
122
|
</CardContent>
|
|
@@ -127,11 +129,14 @@ function SupportingTile({
|
|
|
127
129
|
label,
|
|
128
130
|
value,
|
|
129
131
|
delta,
|
|
132
|
+
decimal,
|
|
130
133
|
}: {
|
|
131
134
|
testId: string;
|
|
132
135
|
label: string;
|
|
133
136
|
value: string;
|
|
134
137
|
delta?: number | undefined;
|
|
138
|
+
/** Passed down because `Delta` is a plain function, not a component: it cannot call the hook itself. */
|
|
139
|
+
decimal: (value: number, decimals: number) => string;
|
|
135
140
|
}) {
|
|
136
141
|
return (
|
|
137
142
|
<Card data-testid={testId} size="sm">
|
|
@@ -139,7 +144,7 @@ function SupportingTile({
|
|
|
139
144
|
<span className="text-muted-foreground text-xs">{label}</span>
|
|
140
145
|
<span className="flex items-center gap-2">
|
|
141
146
|
<span className="text-sm font-medium tabular-nums">{value}</span>
|
|
142
|
-
{delta !== undefined && <Delta testId={`${testId}-delta`} delta={delta} />}
|
|
147
|
+
{delta !== undefined && <Delta testId={`${testId}-delta`} delta={delta} decimal={decimal} />}
|
|
143
148
|
</span>
|
|
144
149
|
</CardContent>
|
|
145
150
|
</Card>
|
|
@@ -150,7 +155,15 @@ function SupportingTile({
|
|
|
150
155
|
* The delta slot. An undefined delta means the previous window was zero: an
|
|
151
156
|
* em dash says "not comparable" where a percentage would say "infinite growth".
|
|
152
157
|
*/
|
|
153
|
-
function Delta({
|
|
158
|
+
function Delta({
|
|
159
|
+
testId,
|
|
160
|
+
delta,
|
|
161
|
+
decimal,
|
|
162
|
+
}: {
|
|
163
|
+
testId: string;
|
|
164
|
+
delta: number | undefined;
|
|
165
|
+
decimal: (value: number, decimals: number) => string;
|
|
166
|
+
}) {
|
|
154
167
|
if (delta === undefined) {
|
|
155
168
|
return (
|
|
156
169
|
<span data-testid={testId} className="text-muted-foreground text-xs">
|
|
@@ -171,7 +184,7 @@ function Delta({ testId, delta }: { testId: string; delta: number | undefined })
|
|
|
171
184
|
)}
|
|
172
185
|
>
|
|
173
186
|
<Icon aria-hidden className="size-3" />
|
|
174
|
-
{
|
|
187
|
+
{decimal(Math.abs(delta), 0)} %
|
|
175
188
|
</span>
|
|
176
189
|
);
|
|
177
190
|
}
|
|
@@ -7,7 +7,8 @@ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from ".
|
|
|
7
7
|
import { cn } from "../../../utils";
|
|
8
8
|
import type { TokenUsageAdminBreakdownInterface } from "../data/tokenusage-admin-breakdown.interface";
|
|
9
9
|
import type { Metric } from "../data/tokenusage-admin.types";
|
|
10
|
-
import {
|
|
10
|
+
import { useUsageFormatters } from "../lib/formatters";
|
|
11
|
+
import { cacheHitPercentage, metricValue } from "../lib/metrics";
|
|
11
12
|
|
|
12
13
|
type Props = {
|
|
13
14
|
rows: TokenUsageAdminBreakdownInterface[];
|
|
@@ -28,6 +29,7 @@ type SortState = { key: SortKey; direction: "asc" | "desc" };
|
|
|
28
29
|
*/
|
|
29
30
|
export function TokenUsageBreakdownTable({ rows, metric }: Props) {
|
|
30
31
|
const t = useTranslations();
|
|
32
|
+
const { decimal, metricValue: formatValue, percent, compare } = useUsageFormatters();
|
|
31
33
|
const [sort, setSort] = useState<SortState | undefined>(undefined);
|
|
32
34
|
|
|
33
35
|
// The company dimension is the only one that reports active users. Rather than
|
|
@@ -61,11 +63,11 @@ export function TokenUsageBreakdownTable({ rows, metric }: Props) {
|
|
|
61
63
|
const left = sortValue(a, sort.key);
|
|
62
64
|
const right = sortValue(b, sort.key);
|
|
63
65
|
if (typeof left === "string" || typeof right === "string") {
|
|
64
|
-
return String(left)
|
|
66
|
+
return compare(String(left), String(right)) * factor;
|
|
65
67
|
}
|
|
66
68
|
return (left - right) * factor;
|
|
67
69
|
});
|
|
68
|
-
}, [rows, sort, metric]);
|
|
70
|
+
}, [rows, sort, metric, compare]);
|
|
69
71
|
|
|
70
72
|
// First click on a column sorts descending: on a spend table the interesting
|
|
71
73
|
// end of every numeric column is the top one.
|
|
@@ -136,20 +138,18 @@ export function TokenUsageBreakdownTable({ rows, metric }: Props) {
|
|
|
136
138
|
<TableCell className="text-muted-foreground text-xs">{row.sublabel ?? ""}</TableCell>
|
|
137
139
|
{showActiveUsers && (
|
|
138
140
|
<TableCell className="text-right text-xs tabular-nums">
|
|
139
|
-
{row.activeUsers === undefined ? "" :
|
|
141
|
+
{row.activeUsers === undefined ? "" : decimal(row.activeUsers, 0)}
|
|
140
142
|
</TableCell>
|
|
141
143
|
)}
|
|
142
|
-
<TableCell className="text-right text-xs tabular-nums">{
|
|
143
|
-
<TableCell className="text-right text-xs tabular-nums">{
|
|
144
|
-
<TableCell className="text-right text-xs tabular-nums">{
|
|
144
|
+
<TableCell className="text-right text-xs tabular-nums">{decimal(row.calls, 0)}</TableCell>
|
|
145
|
+
<TableCell className="text-right text-xs tabular-nums">{decimal(row.tokensIn, 0)}</TableCell>
|
|
146
|
+
<TableCell className="text-right text-xs tabular-nums">{decimal(row.tokensOut, 0)}</TableCell>
|
|
145
147
|
<TableCell className="text-right text-xs tabular-nums">
|
|
146
|
-
{
|
|
148
|
+
{percent(cacheHitPercentage(row.cached, row.tokensIn))}
|
|
147
149
|
</TableCell>
|
|
148
|
-
<TableCell className="text-right text-xs tabular-nums">{
|
|
149
|
-
<TableCell className="text-right text-xs tabular-nums">
|
|
150
|
-
|
|
151
|
-
</TableCell>
|
|
152
|
-
<TableCell className="text-right text-xs tabular-nums">{formatPercent(share)}</TableCell>
|
|
150
|
+
<TableCell className="text-right text-xs tabular-nums">{formatValue(row.cost, "cost")}</TableCell>
|
|
151
|
+
<TableCell className="text-right text-xs tabular-nums">{formatValue(row.credits, "credits")}</TableCell>
|
|
152
|
+
<TableCell className="text-right text-xs tabular-nums">{percent(share)}</TableCell>
|
|
153
153
|
</TableRow>
|
|
154
154
|
);
|
|
155
155
|
})}
|
|
@@ -1,17 +1,33 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import { useTranslations } from "next-intl";
|
|
4
|
-
import type { TokenUsageAdminBreakdownInterface } from "../data/tokenusage-admin-breakdown.interface";
|
|
5
4
|
import type { Metric } from "../data/tokenusage-admin.types";
|
|
6
|
-
import {
|
|
5
|
+
import { useUsageFormatters } from "../lib/formatters";
|
|
6
|
+
import { metricValue, type TokenUsageMetrics } from "../lib/metrics";
|
|
7
7
|
import { operationLabel } from "../lib/operation-label";
|
|
8
8
|
import { SEQUENTIAL_RAMP } from "../lib/palette";
|
|
9
9
|
|
|
10
|
+
/**
|
|
11
|
+
* Everything this component actually reads from a row.
|
|
12
|
+
*
|
|
13
|
+
* Declared STRUCTURALLY rather than as one of the breakdown interfaces on
|
|
14
|
+
* purpose: the same list ranks administrative rows (which additionally carry
|
|
15
|
+
* activeUsers / monthlyCredits / availableMonthlyCredits) and self-service
|
|
16
|
+
* report rows (which do not). Narrowing this to the administrative interface
|
|
17
|
+
* would force every self-service caller into a cast, and duplicating the
|
|
18
|
+
* component would fork the ramp and the share arithmetic.
|
|
19
|
+
*/
|
|
20
|
+
export type TokenUsageRankedRow = TokenUsageMetrics & {
|
|
21
|
+
/** Row identity; the literal "other" marks the folded tail. */
|
|
22
|
+
id: string;
|
|
23
|
+
label: string;
|
|
24
|
+
};
|
|
25
|
+
|
|
10
26
|
type Props = {
|
|
11
27
|
/** Ranked rows, already ordered descending by the backend, "other" last. */
|
|
12
|
-
rows:
|
|
28
|
+
rows: TokenUsageRankedRow[];
|
|
13
29
|
metric: Metric;
|
|
14
|
-
/**
|
|
30
|
+
/** Copy shown when there is nothing to rank, already translated by the caller. */
|
|
15
31
|
emptyLabel: string;
|
|
16
32
|
/**
|
|
17
33
|
* Whether `row.label` is an operation TYPE (vocabulary the consuming app
|
|
@@ -37,8 +53,9 @@ type Props = {
|
|
|
37
53
|
*/
|
|
38
54
|
export function TokenUsageRankedBar({ rows, metric, emptyLabel, labelsAreOperationTypes = false }: Props) {
|
|
39
55
|
const t = useTranslations();
|
|
56
|
+
const { metricValue: formatValue, percent } = useUsageFormatters();
|
|
40
57
|
|
|
41
|
-
const renderLabel = (row:
|
|
58
|
+
const renderLabel = (row: TokenUsageRankedRow): string => {
|
|
42
59
|
if (row.id === "other") return t("token_usage.admin.other");
|
|
43
60
|
if (!labelsAreOperationTypes) return row.label;
|
|
44
61
|
return operationLabel(
|
|
@@ -83,13 +100,13 @@ export function TokenUsageRankedBar({ rows, metric, emptyLabel, labelsAreOperati
|
|
|
83
100
|
</div>
|
|
84
101
|
</div>
|
|
85
102
|
<span data-testid={`ranked-value-${row.id}`} className="text-right text-xs tabular-nums">
|
|
86
|
-
{
|
|
103
|
+
{formatValue(value, metric)}
|
|
87
104
|
</span>
|
|
88
105
|
<span
|
|
89
106
|
data-testid={`ranked-share-${row.id}`}
|
|
90
107
|
className="text-muted-foreground w-16 text-right text-xs tabular-nums"
|
|
91
108
|
>
|
|
92
|
-
{
|
|
109
|
+
{percent(share)}
|
|
93
110
|
</span>
|
|
94
111
|
</div>
|
|
95
112
|
);
|