@chatarmin/os 1.30.0 → 1.32.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/companies/activity-types.d.ts +56 -2
- package/dist/companies/activity-types.d.ts.map +1 -1
- package/dist/companies/client-signals-types.d.ts +31 -0
- package/dist/companies/client-signals-types.d.ts.map +1 -1
- package/dist/companies/client.d.ts.map +1 -1
- package/dist/companies/client.js +1 -0
- package/dist/csm/client.d.ts +8 -0
- package/dist/csm/client.d.ts.map +1 -0
- package/dist/csm/client.js +7 -0
- package/dist/csm/index.d.ts +3 -0
- package/dist/csm/index.d.ts.map +1 -0
- package/dist/csm/index.js +1 -0
- package/dist/csm/types.d.ts +202 -0
- package/dist/csm/types.d.ts.map +1 -0
- package/dist/csm/types.js +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -2
- package/package.json +1 -1
|
@@ -3,6 +3,45 @@ import type { IntegrityCsm, IntegritySlackThread } from './integrity-types.js';
|
|
|
3
3
|
* Client activity: each client's contact and usage facts from OS, for questions like "no contact
|
|
4
4
|
* for 30 days" or "usage down 30% in 7 days". Mirrors `packages/api/src/services/company-activity`.
|
|
5
5
|
*/
|
|
6
|
+
/**
|
|
7
|
+
* How OS judges usage per feature: continuous features (utility / service messages, AI credits)
|
|
8
|
+
* by typical daily usage and stops; campaign features (marketing messages) by the client's own
|
|
9
|
+
* campaign rhythm; counts like contacts are not usage.
|
|
10
|
+
*/
|
|
11
|
+
export type UsageSignalKind = 'stopped' | 'drop' | 'campaign_lapsed' | 'campaign_volume_drop';
|
|
12
|
+
interface UsageSignalFeature {
|
|
13
|
+
featureCode: string;
|
|
14
|
+
featureName: string;
|
|
15
|
+
}
|
|
16
|
+
export type UsageSignal =
|
|
17
|
+
/** A feature used on most days (5 of 7) has been at 0 since `sinceDay` (UTC day, YYYY-MM-DD). */
|
|
18
|
+
(UsageSignalFeature & {
|
|
19
|
+
kind: 'stopped';
|
|
20
|
+
sinceDay: string;
|
|
21
|
+
daysStopped: number;
|
|
22
|
+
typicalDaily: number;
|
|
23
|
+
})
|
|
24
|
+
/** Typical usage of a continuous feature, last 7 days vs the 7 before. */
|
|
25
|
+
| (UsageSignalFeature & {
|
|
26
|
+
kind: 'drop';
|
|
27
|
+
previous7d: number;
|
|
28
|
+
current7d: number;
|
|
29
|
+
changePct: number;
|
|
30
|
+
})
|
|
31
|
+
/** No campaign for at least 21 days and twice the client's usual gap. */
|
|
32
|
+
| (UsageSignalFeature & {
|
|
33
|
+
kind: 'campaign_lapsed';
|
|
34
|
+
lastCampaignDay: string;
|
|
35
|
+
daysSinceLastCampaign: number;
|
|
36
|
+
typicalGapDays: number;
|
|
37
|
+
})
|
|
38
|
+
/** Campaign volume, last 30 days vs the average 30 days of the 60 before. */
|
|
39
|
+
| (UsageSignalFeature & {
|
|
40
|
+
kind: 'campaign_volume_drop';
|
|
41
|
+
last30d: number;
|
|
42
|
+
previous30dAverage: number;
|
|
43
|
+
changePct: number;
|
|
44
|
+
});
|
|
6
45
|
export type CompanyActivitySort = 'mrr' | 'usage_change_7d' | 'usage_change_30d' | 'days_since_contact' | 'days_since_client_message';
|
|
7
46
|
/**
|
|
8
47
|
* A client activity question, composed freely: every filter narrows. A never-happened event counts
|
|
@@ -19,10 +58,12 @@ export interface ListCompanyActivityInput {
|
|
|
19
58
|
/** No message from your team for at least this many days. */
|
|
20
59
|
noTeamMessageForDays?: number;
|
|
21
60
|
noUsageForDays?: number;
|
|
22
|
-
/** Last 7 days vs the 7 before, percent, at most this (e.g. -30); needs
|
|
61
|
+
/** Last 7 days vs the 7 before, like for like, percent, at most this (e.g. -30); needs a baseline. */
|
|
23
62
|
usageChange7dPctAtMost?: number;
|
|
24
63
|
/** Last 30 days vs the 30 before, percent, at most this. */
|
|
25
64
|
usageChange30dPctAtMost?: number;
|
|
65
|
+
/** Has at least one usage signal of these kinds. */
|
|
66
|
+
usageSignals?: UsageSignalKind[];
|
|
26
67
|
unrepliedOnly?: boolean;
|
|
27
68
|
/** mrr: highest first; usage_change_*: biggest drop first; days_since_*: longest silence first. */
|
|
28
69
|
sort?: CompanyActivitySort;
|
|
@@ -58,11 +99,23 @@ export interface CompanyActivity {
|
|
|
58
99
|
daysSinceLast: number | null;
|
|
59
100
|
total7d: number;
|
|
60
101
|
previous7d: number;
|
|
61
|
-
/**
|
|
102
|
+
/**
|
|
103
|
+
* Like-for-like change (see `comparable`); null without a baseline of at least 100 units of
|
|
104
|
+
* the same features in the previous window.
|
|
105
|
+
*/
|
|
62
106
|
change7dPct: number | null;
|
|
63
107
|
total30d: number;
|
|
64
108
|
previous30d: number;
|
|
65
109
|
change30dPct: number | null;
|
|
110
|
+
/** Typical usage of continuous features tracked through both whole windows: what the changes compare. */
|
|
111
|
+
comparable: {
|
|
112
|
+
current7d: number;
|
|
113
|
+
previous7d: number;
|
|
114
|
+
current30d: number;
|
|
115
|
+
previous30d: number;
|
|
116
|
+
};
|
|
117
|
+
/** Per-feature changes worth a look. */
|
|
118
|
+
signals: UsageSignal[];
|
|
66
119
|
};
|
|
67
120
|
engagement: {
|
|
68
121
|
lastLoginAt: Date | null;
|
|
@@ -89,4 +142,5 @@ export interface CompaniesActivityClient {
|
|
|
89
142
|
/** Client contact and usage facts across the organization, filtered and sorted as asked. */
|
|
90
143
|
listActivity: (input?: ListCompanyActivityInput) => Promise<ListCompanyActivityResult>;
|
|
91
144
|
}
|
|
145
|
+
export {};
|
|
92
146
|
//# sourceMappingURL=activity-types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activity-types.d.ts","sourceRoot":"","sources":["../../src/companies/activity-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAE9E;;;GAGG;AAEH,MAAM,MAAM,mBAAmB,GAC3B,KAAK,GACL,iBAAiB,GACjB,kBAAkB,GAClB,oBAAoB,GACpB,2BAA2B,CAAA;AAE/B;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,kBAAkB,CAAC,EAAE,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAA;IAChD,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,8DAA8D;IAC9D,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,6DAA6D;IAC7D,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,
|
|
1
|
+
{"version":3,"file":"activity-types.d.ts","sourceRoot":"","sources":["../../src/companies/activity-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -74,5 +74,36 @@ export interface CompaniesClientSignalsClient {
|
|
|
74
74
|
resolveClientSignals: (input: ResolveClientSignalsInput) => Promise<{
|
|
75
75
|
updated: number;
|
|
76
76
|
}>;
|
|
77
|
+
/** Records a client's sentiment (staff routines). 404 = company not found, 403 = non-member. */
|
|
78
|
+
reportClientSentiment: (input: ReportClientSentimentInput) => Promise<ClientSentimentReport>;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Client sentiment: how a client feels, as a staff routine read it from the client's Slack and
|
|
82
|
+
* email. The latest report per company (last 14 days) is the current one and shows on the CSM's
|
|
83
|
+
* portfolio; `ok` clears an earlier `critical`. Mirrors `packages/api/src/services/client-sentiment`.
|
|
84
|
+
*/
|
|
85
|
+
export type ClientSentimentLevel = 'critical' | 'at_risk' | 'ok';
|
|
86
|
+
export interface ReportClientSentimentInput {
|
|
87
|
+
companyId?: string;
|
|
88
|
+
/** A product's org id for the company (e.g. the CX org id). */
|
|
89
|
+
externalOrgId?: string;
|
|
90
|
+
level: ClientSentimentLevel;
|
|
91
|
+
/** Why, in a sentence or two (max 1000 characters); shown to staff verbatim. */
|
|
92
|
+
reason: string;
|
|
93
|
+
/** The message or thread the judgement rests on. */
|
|
94
|
+
permalink?: string;
|
|
95
|
+
/** When the routine judged it; default now. */
|
|
96
|
+
reportedAt?: Date;
|
|
97
|
+
/** Login email of the OS member the report is recorded for (403 otherwise). */
|
|
98
|
+
actorEmail: string;
|
|
99
|
+
}
|
|
100
|
+
export interface ClientSentimentReport {
|
|
101
|
+
id: string;
|
|
102
|
+
companyId: string;
|
|
103
|
+
level: ClientSentimentLevel;
|
|
104
|
+
reason: string;
|
|
105
|
+
permalink: string | null;
|
|
106
|
+
reportedByEmail: string;
|
|
107
|
+
reportedAt: Date;
|
|
77
108
|
}
|
|
78
109
|
//# sourceMappingURL=client-signals-types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-signals-types.d.ts","sourceRoot":"","sources":["../../src/companies/client-signals-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAE9E;;;;GAIG;AAEH,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAA;AAC3C,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,QAAQ,CAAA;AAChD,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW,CAAA;AAEnE,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,IAAI,CAAC,EAAE,gBAAgB,CAAA;IACvB,0EAA0E;IAC1E,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,wEAAwE;IACxE,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,IAAI,EAAE,gBAAgB,CAAA;IACtB,IAAI,EAAE,gBAAgB,CAAA;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAA;IACb,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAA;IACb,6FAA6F;IAC7F,SAAS,EAAE,UAAU,GAAG,SAAS,CAAA;IACjC,8DAA8D;IAC9D,WAAW,EAAE,MAAM,CAAA;IACnB,oEAAoE;IACpE,UAAU,EAAE,MAAM,CAAA;IAClB,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,qDAAqD;IACrD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,MAAM,EAAE,IAAI,CAAA;IACZ,MAAM,EAAE,kBAAkB,CAAA;IAC1B,UAAU,EAAE,IAAI,GAAG,IAAI,CAAA;IACvB,UAAU,EAAE,IAAI,GAAG,IAAI,CAAA;IACvB,kFAAkF;IAClF,WAAW,EAAE,oBAAoB,GAAG,IAAI,CAAA;IACxC,qDAAqD;IACrD,GAAG,EAAE,YAAY,GAAG,IAAI,CAAA;CACzB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,uFAAuF;IACvF,MAAM,EAAE,WAAW,GAAG,WAAW,CAAA;IACjC,+EAA+E;IAC/E,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,4BAA4B;IAC3C,qFAAqF;IACrF,iBAAiB,EAAE,CAAC,KAAK,CAAC,EAAE,sBAAsB,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAA;IACvF,+EAA+E;IAC/E,yBAAyB,EAAE,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC3F,kFAAkF;IAClF,oBAAoB,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"client-signals-types.d.ts","sourceRoot":"","sources":["../../src/companies/client-signals-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/companies/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,KAAK,EACV,eAAe,EAkBhB,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/companies/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,KAAK,EACV,eAAe,EAkBhB,MAAM,YAAY,CAAA;AAoDnB,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAA;AAC/D,KAAK,OAAO,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;AAE7E,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,OAAO,GACZ,eAAe,CAoLjB"}
|
package/dist/companies/client.js
CHANGED
|
@@ -17,6 +17,7 @@ export function createCompaniesClient(client, call) {
|
|
|
17
17
|
listClientSignals: (input = {}) => call('companies.listClientSignals', () => client.companies.listClientSignalsForProduct.query(input)),
|
|
18
18
|
markClientSignalsNotified: (input) => call('companies.markClientSignalsNotified', () => client.companies.markClientSignalsNotifiedForProduct.mutate(input)),
|
|
19
19
|
resolveClientSignals: (input) => call('companies.resolveClientSignals', () => client.companies.resolveClientSignalsForStaff.mutate(input)),
|
|
20
|
+
reportClientSentiment: (input) => call('companies.reportClientSentiment', () => client.companies.reportClientSentimentForStaff.mutate(input)),
|
|
20
21
|
attachUsagePrice: (input) => call('companies.attachUsagePrice', () => client.companies.attachUsagePriceForStaff.mutate(input)),
|
|
21
22
|
recordIntegrityDecision: (input) => call('companies.recordIntegrityDecision', () => client.companies.recordIntegrityDecisionForStaff.mutate(input)),
|
|
22
23
|
listIntegrityDecisions: (input) => call('companies.listIntegrityDecisions', () => client.companies.listIntegrityDecisionsForProduct.query(input)),
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AppRouter } from '@chatarmin/api/trpc-types';
|
|
2
|
+
import type { createTRPCClient } from '@trpc/client';
|
|
3
|
+
import type { CsmClient } from './types.js';
|
|
4
|
+
type SdkClient = ReturnType<typeof createTRPCClient<AppRouter>>;
|
|
5
|
+
type SdkCall = <T>(operation: string, action: () => Promise<T>) => Promise<T>;
|
|
6
|
+
export declare function createCsmClient(client: SdkClient, call: SdkCall): CsmClient;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/csm/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,KAAK,EAAE,SAAS,EAAyD,MAAM,YAAY,CAAA;AAElG,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAA;AAC/D,KAAK,OAAO,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;AAE7E,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,GAAG,SAAS,CAe3E"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export function createCsmClient(client, call) {
|
|
2
|
+
return {
|
|
3
|
+
getPortfolio: (input) => call('csm.getPortfolio', () => client.csmPortfolio.summaryForStaff.query(input)),
|
|
4
|
+
listAttention: (input) => call('csm.listAttention', () => client.csmPortfolio.attentionForStaff.query(input)),
|
|
5
|
+
listClients: (input) => call('csm.listClients', () => client.csmPortfolio.clientsForStaff.query(input)),
|
|
6
|
+
};
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/csm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,mBAAmB,YAAY,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { createCsmClient } from './client.js';
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import type { UsageSignal } from '../companies/activity-types.js';
|
|
2
|
+
/**
|
|
3
|
+
* A CSM's portfolio: the numbers and the clients that need action, the same as the "My portfolio"
|
|
4
|
+
* page in OS. Mirrors `packages/api/src/services/csm-portfolio`. Money in minor units (cents);
|
|
5
|
+
* rates as ratios (1 = 100 %), null without an opening base.
|
|
6
|
+
*/
|
|
7
|
+
export type PortfolioPeriod = 'mtd' | 'qtd' | 'last_30d' | 'last_12m';
|
|
8
|
+
export interface PortfolioCsm {
|
|
9
|
+
memberId: string;
|
|
10
|
+
userId: string;
|
|
11
|
+
name: string | null;
|
|
12
|
+
email: string;
|
|
13
|
+
}
|
|
14
|
+
export interface PortfolioMrr {
|
|
15
|
+
totalCents: number;
|
|
16
|
+
/** Fixed: committed subscription MRR. */
|
|
17
|
+
committedCents: number;
|
|
18
|
+
/** Variable: usage-based MRR. */
|
|
19
|
+
usageCents: number;
|
|
20
|
+
}
|
|
21
|
+
export interface PortfolioRetention {
|
|
22
|
+
nrrPct: number | null;
|
|
23
|
+
grrPct: number | null;
|
|
24
|
+
churnRatePct: number | null;
|
|
25
|
+
}
|
|
26
|
+
export interface PortfolioSummary {
|
|
27
|
+
csm: PortfolioCsm;
|
|
28
|
+
period: {
|
|
29
|
+
key: PortfolioPeriod;
|
|
30
|
+
from: Date;
|
|
31
|
+
to: Date;
|
|
32
|
+
};
|
|
33
|
+
/** Live: the CSM's active clients today. */
|
|
34
|
+
clients: number;
|
|
35
|
+
mrr: PortfolioMrr;
|
|
36
|
+
/** Attributed: clients the CSM owned during the period (daily snapshots). */
|
|
37
|
+
retention: PortfolioRetention;
|
|
38
|
+
/** Committed MRR movements over the period. */
|
|
39
|
+
waterfall: {
|
|
40
|
+
openingMrrCents: number;
|
|
41
|
+
newBusinessCents: number;
|
|
42
|
+
expansionCents: number;
|
|
43
|
+
reactivationCents: number;
|
|
44
|
+
contractionCents: number;
|
|
45
|
+
churnCents: number;
|
|
46
|
+
closingMrrCents: number;
|
|
47
|
+
};
|
|
48
|
+
/** Clients with a message waiting for our reply for more than an hour (tracked waits). */
|
|
49
|
+
unanswered: {
|
|
50
|
+
clients: number;
|
|
51
|
+
oldestSince: Date | null;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Tracked from new messages on (no backfill), in calendar time. A wait is a client message a
|
|
55
|
+
* person wrote that expects our reply (auto-replies, newsletters and bulk mail never count);
|
|
56
|
+
* our team's next human message in the conversation answers it.
|
|
57
|
+
*/
|
|
58
|
+
responsiveness: {
|
|
59
|
+
/** The organization's first tracked wait; null before any. */
|
|
60
|
+
trackingSince: Date | null;
|
|
61
|
+
waitsAnswered: number;
|
|
62
|
+
waitsOpen: number;
|
|
63
|
+
firstResponseSeconds: {
|
|
64
|
+
median: number | null;
|
|
65
|
+
avg: number | null;
|
|
66
|
+
p90: number | null;
|
|
67
|
+
};
|
|
68
|
+
/** Conversations waiting for our reply for more than an hour. */
|
|
69
|
+
waitingConversations: number;
|
|
70
|
+
};
|
|
71
|
+
/** By the client's primary product (its oldest product link); productId null = no product. */
|
|
72
|
+
byProduct: Array<PortfolioRetention & {
|
|
73
|
+
productId: string | null;
|
|
74
|
+
productName: string | null;
|
|
75
|
+
clients: number;
|
|
76
|
+
mrr: PortfolioMrr;
|
|
77
|
+
}>;
|
|
78
|
+
renewals: {
|
|
79
|
+
windowDays: number;
|
|
80
|
+
totalMrrCents: number;
|
|
81
|
+
companies: Array<{
|
|
82
|
+
companyId: string;
|
|
83
|
+
companyName: string;
|
|
84
|
+
contractEndAt: Date;
|
|
85
|
+
/** The contract end's calendar day (YYYY-MM-DD). */
|
|
86
|
+
contractEndOn: string;
|
|
87
|
+
daysLeft: number;
|
|
88
|
+
mrrCents: number;
|
|
89
|
+
}>;
|
|
90
|
+
};
|
|
91
|
+
asOf: Date;
|
|
92
|
+
}
|
|
93
|
+
/** Most urgent first; the order ranks clients. */
|
|
94
|
+
export type AttentionReasonKind = 'unanswered' | 'sentiment' | 'promise_due' | 'billing_finding' | 'usage_drop' | 'payment_overdue' | 'renewal_due';
|
|
95
|
+
export type AttentionReason =
|
|
96
|
+
/** Client messages waiting for our reply for more than an hour (tracked waits). */
|
|
97
|
+
{
|
|
98
|
+
kind: 'unanswered';
|
|
99
|
+
since: Date;
|
|
100
|
+
conversations: number;
|
|
101
|
+
}
|
|
102
|
+
/** The latest sentiment report (last 14 days) says critical or at risk. */
|
|
103
|
+
| {
|
|
104
|
+
kind: 'sentiment';
|
|
105
|
+
since: Date;
|
|
106
|
+
level: 'critical' | 'at_risk';
|
|
107
|
+
reason: string;
|
|
108
|
+
permalink: string | null;
|
|
109
|
+
}
|
|
110
|
+
/** Commitments our team made that are due today or earlier. */
|
|
111
|
+
| {
|
|
112
|
+
kind: 'promise_due';
|
|
113
|
+
since: Date;
|
|
114
|
+
/** All due commitments; `commitments` holds the oldest (up to 10). */
|
|
115
|
+
total: number;
|
|
116
|
+
commitments: Array<{
|
|
117
|
+
id: string;
|
|
118
|
+
quote: string;
|
|
119
|
+
dueOn: Date;
|
|
120
|
+
permalink: string | null;
|
|
121
|
+
}>;
|
|
122
|
+
}
|
|
123
|
+
/** Open high/medium billing integrity findings. */
|
|
124
|
+
| {
|
|
125
|
+
kind: 'billing_finding';
|
|
126
|
+
since: Date;
|
|
127
|
+
/** All open findings; `findings` holds the oldest (up to 10). */
|
|
128
|
+
total: number;
|
|
129
|
+
findings: Array<{
|
|
130
|
+
id: string;
|
|
131
|
+
code: string;
|
|
132
|
+
severity: string;
|
|
133
|
+
message: string;
|
|
134
|
+
}>;
|
|
135
|
+
} | {
|
|
136
|
+
kind: 'usage_drop';
|
|
137
|
+
since: null;
|
|
138
|
+
signals: UsageSignal[];
|
|
139
|
+
} | {
|
|
140
|
+
kind: 'payment_overdue';
|
|
141
|
+
since: null;
|
|
142
|
+
overdueInvoices: number;
|
|
143
|
+
overdueAmountCents: number;
|
|
144
|
+
maxDaysOverdue: number;
|
|
145
|
+
}
|
|
146
|
+
/** The contract ends within 60 days. */
|
|
147
|
+
| {
|
|
148
|
+
kind: 'renewal_due';
|
|
149
|
+
since: null;
|
|
150
|
+
contractEndAt: Date;
|
|
151
|
+
contractEndOn: string;
|
|
152
|
+
daysLeft: number;
|
|
153
|
+
};
|
|
154
|
+
export interface AttentionItem {
|
|
155
|
+
companyId: string;
|
|
156
|
+
companyName: string;
|
|
157
|
+
mrrCents: number;
|
|
158
|
+
reasons: AttentionReason[];
|
|
159
|
+
/** The oldest dated reason. */
|
|
160
|
+
oldestSince: Date | null;
|
|
161
|
+
}
|
|
162
|
+
export interface PortfolioAttention {
|
|
163
|
+
/** Ranked: most urgent reason, then MRR at stake. */
|
|
164
|
+
items: AttentionItem[];
|
|
165
|
+
counts: Record<AttentionReasonKind, number>;
|
|
166
|
+
asOf: Date;
|
|
167
|
+
}
|
|
168
|
+
export interface PortfolioClient {
|
|
169
|
+
companyId: string;
|
|
170
|
+
companyName: string;
|
|
171
|
+
/** Linked products, by name. */
|
|
172
|
+
products: string[];
|
|
173
|
+
mrrCents: number;
|
|
174
|
+
/** Last message in either direction. */
|
|
175
|
+
lastContactAt: Date | null;
|
|
176
|
+
/** The client is waiting for our reply since then; null = nothing unanswered. */
|
|
177
|
+
unrepliedSinceAt: Date | null;
|
|
178
|
+
contractEndAt: Date | null;
|
|
179
|
+
/** The contract end's calendar day (YYYY-MM-DD). */
|
|
180
|
+
contractEndOn: string | null;
|
|
181
|
+
}
|
|
182
|
+
export interface GetPortfolioInput {
|
|
183
|
+
/** The CSM's OS login email (404 when no member has it). */
|
|
184
|
+
csmEmail: string;
|
|
185
|
+
/** Default `mtd` (month to date, in the organization's timezone). */
|
|
186
|
+
period?: PortfolioPeriod;
|
|
187
|
+
}
|
|
188
|
+
export interface CsmClient {
|
|
189
|
+
/** The CSM's numbers: clients, MRR, NRR/GRR/churn, response times, per product, renewals. */
|
|
190
|
+
getPortfolio: (input: GetPortfolioInput) => Promise<PortfolioSummary>;
|
|
191
|
+
/** The CSM's clients that need action now, ranked, with the facts behind each reason. */
|
|
192
|
+
listAttention: (input: {
|
|
193
|
+
csmEmail: string;
|
|
194
|
+
}) => Promise<PortfolioAttention>;
|
|
195
|
+
/** The CSM's active clients, highest MRR first. */
|
|
196
|
+
listClients: (input: {
|
|
197
|
+
csmEmail: string;
|
|
198
|
+
}) => Promise<{
|
|
199
|
+
clients: PortfolioClient[];
|
|
200
|
+
}>;
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/csm/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAEjE;;;;GAIG;AAEH,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,KAAK,GAAG,UAAU,GAAG,UAAU,CAAA;AAErE,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,yCAAyC;IACzC,cAAc,EAAE,MAAM,CAAA;IACtB,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,YAAY,CAAA;IACjB,MAAM,EAAE;QAAE,GAAG,EAAE,eAAe,CAAC;QAAC,IAAI,EAAE,IAAI,CAAC;QAAC,EAAE,EAAE,IAAI,CAAA;KAAE,CAAA;IACtD,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,YAAY,CAAA;IACjB,6EAA6E;IAC7E,SAAS,EAAE,kBAAkB,CAAA;IAC7B,+CAA+C;IAC/C,SAAS,EAAE;QACT,eAAe,EAAE,MAAM,CAAA;QACvB,gBAAgB,EAAE,MAAM,CAAA;QACxB,cAAc,EAAE,MAAM,CAAA;QACtB,iBAAiB,EAAE,MAAM,CAAA;QACzB,gBAAgB,EAAE,MAAM,CAAA;QACxB,UAAU,EAAE,MAAM,CAAA;QAClB,eAAe,EAAE,MAAM,CAAA;KACxB,CAAA;IACD,0FAA0F;IAC1F,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,IAAI,GAAG,IAAI,CAAA;KAAE,CAAA;IACzD;;;;OAIG;IACH,cAAc,EAAE;QACd,8DAA8D;QAC9D,aAAa,EAAE,IAAI,GAAG,IAAI,CAAA;QAC1B,aAAa,EAAE,MAAM,CAAA;QACrB,SAAS,EAAE,MAAM,CAAA;QACjB,oBAAoB,EAAE;YAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,CAAA;QACvF,iEAAiE;QACjE,oBAAoB,EAAE,MAAM,CAAA;KAC7B,CAAA;IACD,8FAA8F;IAC9F,SAAS,EAAE,KAAK,CACd,kBAAkB,GAAG;QACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;QACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;QAC1B,OAAO,EAAE,MAAM,CAAA;QACf,GAAG,EAAE,YAAY,CAAA;KAClB,CACF,CAAA;IACD,QAAQ,EAAE;QACR,UAAU,EAAE,MAAM,CAAA;QAClB,aAAa,EAAE,MAAM,CAAA;QACrB,SAAS,EAAE,KAAK,CAAC;YACf,SAAS,EAAE,MAAM,CAAA;YACjB,WAAW,EAAE,MAAM,CAAA;YACnB,aAAa,EAAE,IAAI,CAAA;YACnB,oDAAoD;YACpD,aAAa,EAAE,MAAM,CAAA;YACrB,QAAQ,EAAE,MAAM,CAAA;YAChB,QAAQ,EAAE,MAAM,CAAA;SACjB,CAAC,CAAA;KACH,CAAA;IACD,IAAI,EAAE,IAAI,CAAA;CACX;AAED,kDAAkD;AAClD,MAAM,MAAM,mBAAmB,GAC3B,YAAY,GACZ,WAAW,GACX,aAAa,GACb,iBAAiB,GACjB,YAAY,GACZ,iBAAiB,GACjB,aAAa,CAAA;AAEjB,MAAM,MAAM,eAAe;AACzB,mFAAmF;AACjF;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,IAAI,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE;AAC5D,2EAA2E;GACzE;IACE,IAAI,EAAE,WAAW,CAAA;IACjB,KAAK,EAAE,IAAI,CAAA;IACX,KAAK,EAAE,UAAU,GAAG,SAAS,CAAA;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AACH,+DAA+D;GAC7D;IACE,IAAI,EAAE,aAAa,CAAA;IACnB,KAAK,EAAE,IAAI,CAAA;IACX,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,IAAI,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAA;CACzF;AACH,mDAAmD;GACjD;IACE,IAAI,EAAE,iBAAiB,CAAA;IACvB,KAAK,EAAE,IAAI,CAAA;IACX,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACjF,GACD;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,WAAW,EAAE,CAAA;CAAE,GAC3D;IACE,IAAI,EAAE,iBAAiB,CAAA;IACvB,KAAK,EAAE,IAAI,CAAA;IACX,eAAe,EAAE,MAAM,CAAA;IACvB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,cAAc,EAAE,MAAM,CAAA;CACvB;AACH,wCAAwC;GACtC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,IAAI,CAAC;IAAC,aAAa,EAAE,IAAI,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAA;AAEtG,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,eAAe,EAAE,CAAA;IAC1B,+BAA+B;IAC/B,WAAW,EAAE,IAAI,GAAG,IAAI,CAAA;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,qDAAqD;IACrD,KAAK,EAAE,aAAa,EAAE,CAAA;IACtB,MAAM,EAAE,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAA;IAC3C,IAAI,EAAE,IAAI,CAAA;CACX;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,gCAAgC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,wCAAwC;IACxC,aAAa,EAAE,IAAI,GAAG,IAAI,CAAA;IAC1B,iFAAiF;IACjF,gBAAgB,EAAE,IAAI,GAAG,IAAI,CAAA;IAC7B,aAAa,EAAE,IAAI,GAAG,IAAI,CAAA;IAC1B,oDAAoD;IACpD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAA;IAChB,qEAAqE;IACrE,MAAM,CAAC,EAAE,eAAe,CAAA;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,6FAA6F;IAC7F,YAAY,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACrE,yFAAyF;IACzF,aAAa,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAC3E,mDAAmD;IACnD,WAAW,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,eAAe,EAAE,CAAA;KAAE,CAAC,CAAA;CACtF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ import { type BillingClient } from "./billing/index.js";
|
|
|
7
7
|
import { type DealsClient } from "./deals/index.js";
|
|
8
8
|
import { type FeaturesClient } from "./features/index.js";
|
|
9
9
|
import { type OnboardingClient } from "./onboarding/index.js";
|
|
10
|
+
import { type CsmClient } from "./csm/index.js";
|
|
10
11
|
import type { OnboardInput, OnboardResult } from "./onboard-types.js";
|
|
11
12
|
export { webhooks, constructProductWebhookEvent, generateTestWebhookHeaders, OsWebhookSignatureVerificationError, WEBHOOK_ID_HEADER, WEBHOOK_SIGNATURE_HEADER, WEBHOOK_TIMESTAMP_HEADER, } from "./webhooks/index.js";
|
|
12
13
|
export type { ConstructProductWebhookEventOptions, ProductWebhookEventPayload, ProductWebhookHeaders, VerifiedProductWebhookEvent, } from "./webhooks/index.js";
|
|
@@ -14,6 +15,7 @@ export type { CompaniesClient, CompanyAssignee, CompanyAssignees, CreateCompanyI
|
|
|
14
15
|
export type * from "./companies/integrity-types.js";
|
|
15
16
|
export type * from "./companies/client-signals-types.js";
|
|
16
17
|
export type * from "./companies/activity-types.js";
|
|
18
|
+
export type * from "./csm/types.js";
|
|
17
19
|
export type { ChannelLinkType, ChannelsClient, LinkChannelInput, LinkChannelResult, LinkThreadInput, LinkThreadResult, UpdateChannelLinkInput, UpdateChannelLinkResult, } from "./channels/index.js";
|
|
18
20
|
export type * from "./deals/index.js";
|
|
19
21
|
export type * from "./billing/client-revenue-types.js";
|
|
@@ -186,6 +188,8 @@ export declare class ChatarminOS {
|
|
|
186
188
|
get companies(): CompaniesClient;
|
|
187
189
|
/** Won-deal onboarding: redeem a client's signup token (`os_invite`) for your product. */
|
|
188
190
|
get onboarding(): OnboardingClient;
|
|
191
|
+
/** A CSM's portfolio by OS login email: the numbers and the clients that need action now. */
|
|
192
|
+
get csm(): CsmClient;
|
|
189
193
|
get channels(): ChannelsClient;
|
|
190
194
|
/**
|
|
191
195
|
* Contact management operations.
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAG1D,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { TRPCClientError, createTRPCClient, httpBatchLink } from "@trpc/client";
|
|
2
2
|
import superjson from "superjson";
|
|
3
|
-
import { createCompaniesClient
|
|
3
|
+
import { createCompaniesClient } from "./companies/index.js";
|
|
4
4
|
import { createLinksClient } from "./links/client.js";
|
|
5
|
-
import { createChannelsClient
|
|
5
|
+
import { createChannelsClient } from "./channels/index.js";
|
|
6
6
|
import { createBillingClient } from "./billing/index.js";
|
|
7
7
|
import { createDealsClient } from "./deals/index.js";
|
|
8
8
|
import { createFeaturesClient } from "./features/index.js";
|
|
@@ -10,6 +10,7 @@ import { webhooks } from "./webhooks/index.js";
|
|
|
10
10
|
import { toChatarminOSError } from "./errors.js";
|
|
11
11
|
import { runOnboardFlow } from "./onboard-flow.js";
|
|
12
12
|
import { createOnboardingClient } from "./onboarding/index.js";
|
|
13
|
+
import { createCsmClient } from "./csm/index.js";
|
|
13
14
|
export { webhooks, constructProductWebhookEvent, generateTestWebhookHeaders, OsWebhookSignatureVerificationError, WEBHOOK_ID_HEADER, WEBHOOK_SIGNATURE_HEADER, WEBHOOK_TIMESTAMP_HEADER, } from "./webhooks/index.js";
|
|
14
15
|
export { ChatarminOSError } from "./errors.js";
|
|
15
16
|
// ============================================================================
|
|
@@ -137,6 +138,10 @@ export class ChatarminOS {
|
|
|
137
138
|
get onboarding() {
|
|
138
139
|
return createOnboardingClient(this.client, this.call.bind(this));
|
|
139
140
|
}
|
|
141
|
+
/** A CSM's portfolio by OS login email: the numbers and the clients that need action now. */
|
|
142
|
+
get csm() {
|
|
143
|
+
return createCsmClient(this.client, this.call.bind(this));
|
|
144
|
+
}
|
|
140
145
|
get channels() {
|
|
141
146
|
return createChannelsClient(this.client, this.call.bind(this));
|
|
142
147
|
}
|