@carlonicora/nextjs-jsonapi 1.141.3 → 1.142.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/{AssistantMessageInterface-DH1QwtC_.d.mts → AssistantMessageInterface-Ce8FcllX.d.mts} +1 -1
- package/dist/{AssistantMessageInterface-giWvsOrX.d.ts → AssistantMessageInterface-Dh0BpbP2.d.ts} +1 -1
- package/dist/{BlockNoteEditor-JTKEBS2W.mjs → BlockNoteEditor-35DDJH3M.mjs} +4 -4
- package/dist/{BlockNoteEditor-4OXY6BKF.js → BlockNoteEditor-XXTBZ7DD.js} +19 -19
- package/dist/{BlockNoteEditor-4OXY6BKF.js.map → BlockNoteEditor-XXTBZ7DD.js.map} +1 -1
- package/dist/{auth.interface-yivTb46w.d.ts → auth.interface-COmBjh89.d.ts} +1 -1
- package/dist/{auth.interface-r3XKYOrQ.d.mts → auth.interface-CkmZqat3.d.mts} +1 -1
- package/dist/billing/index.js +357 -357
- package/dist/billing/index.mjs +3 -3
- package/dist/{chunk-AGKZCRG2.js → chunk-5SFFHIEE.js} +18 -18
- package/dist/{chunk-AGKZCRG2.js.map → chunk-5SFFHIEE.js.map} +1 -1
- package/dist/{chunk-4TGGHNWL.js → chunk-7CR4YB7Y.js} +752 -752
- package/dist/chunk-7CR4YB7Y.js.map +1 -0
- package/dist/{chunk-SE2YSAER.js → chunk-C6UXEPNY.js} +7 -7
- package/dist/{chunk-SE2YSAER.js.map → chunk-C6UXEPNY.js.map} +1 -1
- package/dist/{chunk-K76QSQTC.mjs → chunk-FZ5SPJEU.mjs} +28 -28
- package/dist/chunk-FZ5SPJEU.mjs.map +1 -0
- package/dist/{chunk-5GVY2M5X.mjs → chunk-KZHHKPQZ.mjs} +18 -18
- package/dist/chunk-KZHHKPQZ.mjs.map +1 -0
- package/dist/{chunk-KXTTYXJ6.mjs → chunk-ZV2GZKFR.mjs} +2 -2
- package/dist/client/index.d.mts +2 -2
- package/dist/client/index.d.ts +2 -2
- package/dist/client/index.js +4 -4
- package/dist/client/index.mjs +3 -3
- package/dist/components/index.d.mts +3 -3
- package/dist/components/index.d.ts +3 -3
- package/dist/components/index.js +4 -4
- package/dist/components/index.mjs +3 -3
- package/dist/contexts/index.d.mts +3 -3
- package/dist/contexts/index.d.ts +3 -3
- package/dist/contexts/index.js +4 -4
- package/dist/contexts/index.mjs +3 -3
- package/dist/core/index.d.mts +13 -13
- package/dist/core/index.d.ts +13 -13
- package/dist/core/index.js +2 -2
- package/dist/core/index.mjs +1 -1
- package/dist/features/help/index.js +37 -37
- package/dist/features/help/index.mjs +3 -3
- package/dist/index.d.mts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +3 -3
- package/dist/index.mjs +2 -2
- package/dist/{notification.interface-LKFmZndR.d.ts → notification.interface--27exGde.d.ts} +6 -6
- package/dist/{notification.interface-B3kNUTZs.d.mts → notification.interface-CG1vqoxg.d.mts} +6 -6
- package/dist/{s3.service-CXKV_OT-.d.mts → s3.service-DYflLXCt.d.mts} +2 -2
- package/dist/{s3.service-BrmeMjtk.d.ts → s3.service-Dmfxpn-k.d.ts} +2 -2
- package/dist/server/index.d.mts +3 -3
- package/dist/server/index.d.ts +3 -3
- package/dist/server/index.js +3 -3
- package/dist/server/index.mjs +1 -1
- package/dist/{useSocket-BsbaGPqE.d.ts → useSocket-DgGAQW6h.d.ts} +1 -1
- package/dist/{useSocket-BSjn1Rlb.d.mts → useSocket-M3YY0aTS.d.mts} +1 -1
- package/package.json +1 -1
- package/src/features/company/components/details/TokenStatusIndicator.tsx +9 -9
- package/src/features/company/data/company.interface.ts +6 -6
- package/src/features/company/data/company.ts +17 -17
- package/src/features/user/contexts/CurrentUserContext.tsx +18 -18
- package/src/features/user/contexts/__tests__/CurrentUserContext.spec.tsx +21 -21
- package/dist/chunk-4TGGHNWL.js.map +0 -1
- package/dist/chunk-5GVY2M5X.mjs.map +0 -1
- package/dist/chunk-K76QSQTC.mjs.map +0 -1
- /package/dist/{BlockNoteEditor-JTKEBS2W.mjs.map → BlockNoteEditor-35DDJH3M.mjs.map} +0 -0
- /package/dist/{chunk-KXTTYXJ6.mjs.map → chunk-ZV2GZKFR.mjs.map} +0 -0
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 _chunk5SFFHIEEjs = require('../chunk-5SFFHIEE.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 _chunk5SFFHIEEjs.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 = _chunk5SFFHIEEjs.AuthService; exports.ServerCompanyService = _chunk5SFFHIEEjs.CompanyService; exports.ServerContentService = _chunk5SFFHIEEjs.ContentService; exports.ServerFeatureService = _chunk5SFFHIEEjs.FeatureService; exports.ServerJsonApiDelete = ServerJsonApiDelete; exports.ServerJsonApiGet = ServerJsonApiGet; exports.ServerJsonApiPatch = ServerJsonApiPatch; exports.ServerJsonApiPost = ServerJsonApiPost; exports.ServerJsonApiPut = ServerJsonApiPut; exports.ServerNotificationService = _chunk5SFFHIEEjs.NotificationService; exports.ServerPushService = _chunk5SFFHIEEjs.PushService; exports.ServerRoleService = _chunk5SFFHIEEjs.RoleService; exports.ServerS3Service = _chunk5SFFHIEEjs.S3Service; exports.ServerSession = ServerSession; exports.ServerUserService = _chunk5SFFHIEEjs.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
|
@@ -31,12 +31,12 @@ export function TokenStatusIndicator({ className, size = "md", showExtraPages =
|
|
|
31
31
|
// Don't render if no company data
|
|
32
32
|
if (!company) return null;
|
|
33
33
|
|
|
34
|
-
const
|
|
35
|
-
const
|
|
36
|
-
const
|
|
34
|
+
const monthlyCredits = company.monthlyCredits;
|
|
35
|
+
const availableMonthlyCredits = company.availableMonthlyCredits;
|
|
36
|
+
const availableExtraCredits = company.availableExtraCredits;
|
|
37
37
|
|
|
38
38
|
// Calculate percentage of available monthly pages
|
|
39
|
-
const percentage =
|
|
39
|
+
const percentage = monthlyCredits > 0 ? (availableMonthlyCredits / monthlyCredits) * 100 : 0;
|
|
40
40
|
|
|
41
41
|
const sizeClasses = {
|
|
42
42
|
sm: "h-4 w-4",
|
|
@@ -91,7 +91,7 @@ export function TokenStatusIndicator({ className, size = "md", showExtraPages =
|
|
|
91
91
|
{t("billing.tokens.monthly", { defaultValue: "Monthly Pages" })}:
|
|
92
92
|
</span>
|
|
93
93
|
<span className={cn("font-medium", getStatusColor())}>
|
|
94
|
-
{
|
|
94
|
+
{availableMonthlyCredits} / {monthlyCredits}
|
|
95
95
|
</span>
|
|
96
96
|
</div>
|
|
97
97
|
<div className="flex items-center justify-between gap-4">
|
|
@@ -108,7 +108,7 @@ export function TokenStatusIndicator({ className, size = "md", showExtraPages =
|
|
|
108
108
|
<span className="text-muted-foreground">
|
|
109
109
|
{t("billing.tokens.available_extra", { defaultValue: "Extra Pages" })}:
|
|
110
110
|
</span>
|
|
111
|
-
<span className="font-medium text-blue-500">{
|
|
111
|
+
<span className="font-medium text-blue-500">{availableExtraCredits}</span>
|
|
112
112
|
</div>
|
|
113
113
|
<Link href="/settings/billing?action=subscribe" className="w-full flex justify-end my-4">
|
|
114
114
|
<Button variant="outline" size="sm">
|
|
@@ -127,11 +127,11 @@ export function TokenStatusIndicator({ className, size = "md", showExtraPages =
|
|
|
127
127
|
aria-label={t("billing.tokens.status", { defaultValue: "Page Status" })}
|
|
128
128
|
>
|
|
129
129
|
{getBatteryIcon()}
|
|
130
|
-
<span className={cn(textSize, "text-muted-foreground font-medium")}>{
|
|
131
|
-
{showExtraPages &&
|
|
130
|
+
<span className={cn(textSize, "text-muted-foreground font-medium")}>{availableMonthlyCredits}</span>
|
|
131
|
+
{showExtraPages && availableExtraCredits > 0 && (
|
|
132
132
|
<div className="inline-flex items-center gap-0.5">
|
|
133
133
|
<PlusCircle className={cn(smallIconSize, "text-blue-500")} />
|
|
134
|
-
<span className={cn(textSize, "text-blue-500 font-medium")}>{
|
|
134
|
+
<span className={cn(textSize, "text-blue-500 font-medium")}>{availableExtraCredits}</span>
|
|
135
135
|
</div>
|
|
136
136
|
)}
|
|
137
137
|
</div>
|
|
@@ -8,9 +8,9 @@ export type CompanyInput = {
|
|
|
8
8
|
logo?: string;
|
|
9
9
|
configurations?: any;
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
monthlyCredits?: number;
|
|
12
|
+
availableMonthlyCredits?: number;
|
|
13
|
+
availableExtraCredits?: number;
|
|
14
14
|
|
|
15
15
|
featureIds?: string[];
|
|
16
16
|
moduleIds?: string[];
|
|
@@ -34,9 +34,9 @@ export interface CompanyInterface extends ApiDataInterface {
|
|
|
34
34
|
|
|
35
35
|
get isActiveSubscription(): boolean;
|
|
36
36
|
|
|
37
|
-
get
|
|
38
|
-
get
|
|
39
|
-
get
|
|
37
|
+
get monthlyCredits(): number;
|
|
38
|
+
get availableMonthlyCredits(): number;
|
|
39
|
+
get availableExtraCredits(): number;
|
|
40
40
|
|
|
41
41
|
get features(): FeatureInterface[];
|
|
42
42
|
get modules(): ModuleInterface[];
|
|
@@ -11,9 +11,9 @@ export class Company extends AbstractApiData implements CompanyInterface {
|
|
|
11
11
|
|
|
12
12
|
private _isActiveSubscription: boolean = false;
|
|
13
13
|
|
|
14
|
-
private
|
|
15
|
-
private
|
|
16
|
-
private
|
|
14
|
+
private _monthlyCredits: number = 0;
|
|
15
|
+
private _availableMonthlyCredits: number = 0;
|
|
16
|
+
private _availableExtraCredits: number = 0;
|
|
17
17
|
|
|
18
18
|
private _features?: FeatureInterface[];
|
|
19
19
|
private _modules?: ModuleInterface[];
|
|
@@ -46,16 +46,16 @@ export class Company extends AbstractApiData implements CompanyInterface {
|
|
|
46
46
|
return this._isActiveSubscription ?? false;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
get
|
|
50
|
-
return this.
|
|
49
|
+
get monthlyCredits(): number {
|
|
50
|
+
return this._monthlyCredits ?? 0;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
get
|
|
54
|
-
return this.
|
|
53
|
+
get availableMonthlyCredits(): number {
|
|
54
|
+
return this._availableMonthlyCredits ?? 0;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
get
|
|
58
|
-
return this.
|
|
57
|
+
get availableExtraCredits(): number {
|
|
58
|
+
return this._availableExtraCredits ?? 0;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
get features(): FeatureInterface[] {
|
|
@@ -120,9 +120,9 @@ export class Company extends AbstractApiData implements CompanyInterface {
|
|
|
120
120
|
this._logo = data.jsonApi.attributes.logo;
|
|
121
121
|
this._logoUrl = data.jsonApi.attributes.logoUrl;
|
|
122
122
|
this._isActiveSubscription = data.jsonApi.attributes.isActiveSubscription ?? false;
|
|
123
|
-
this.
|
|
124
|
-
this.
|
|
125
|
-
this.
|
|
123
|
+
this._monthlyCredits = data.jsonApi.attributes.monthlyCredits ?? 0;
|
|
124
|
+
this._availableMonthlyCredits = data.jsonApi.attributes.availableMonthlyCredits ?? 0;
|
|
125
|
+
this._availableExtraCredits = data.jsonApi.attributes.availableExtraCredits ?? 0;
|
|
126
126
|
|
|
127
127
|
this._legal_address = data.jsonApi.attributes.legal_address;
|
|
128
128
|
this._street_number = data.jsonApi.attributes.street_number;
|
|
@@ -156,11 +156,11 @@ export class Company extends AbstractApiData implements CompanyInterface {
|
|
|
156
156
|
if (data.name) response.data.attributes.name = data.name;
|
|
157
157
|
if (data.configurations) response.data.attributes.configurations = JSON.stringify(data.configurations);
|
|
158
158
|
if (data.logo) response.data.attributes.logo = data.logo;
|
|
159
|
-
if (data.
|
|
160
|
-
if (data.
|
|
161
|
-
response.data.attributes.
|
|
162
|
-
if (data.
|
|
163
|
-
response.data.attributes.
|
|
159
|
+
if (data.monthlyCredits !== undefined) response.data.attributes.monthlyCredits = data.monthlyCredits;
|
|
160
|
+
if (data.availableMonthlyCredits !== undefined)
|
|
161
|
+
response.data.attributes.availableMonthlyCredits = data.availableMonthlyCredits;
|
|
162
|
+
if (data.availableExtraCredits !== undefined)
|
|
163
|
+
response.data.attributes.availableExtraCredits = data.availableExtraCredits;
|
|
164
164
|
|
|
165
165
|
if (data.legal_address !== undefined) response.data.attributes.legal_address = data.legal_address;
|
|
166
166
|
if (data.street_number !== undefined) response.data.attributes.street_number = data.street_number;
|
|
@@ -71,26 +71,26 @@ export const CurrentUserProvider = ({ children }: { children: React.ReactNode })
|
|
|
71
71
|
[dehydratedUser],
|
|
72
72
|
);
|
|
73
73
|
|
|
74
|
-
// Balances pushed by company:
|
|
74
|
+
// Balances pushed by company:credits_updated. Transient: a real user refresh is
|
|
75
75
|
// authoritative and clears this.
|
|
76
|
-
const [
|
|
77
|
-
|
|
78
|
-
|
|
76
|
+
const [creditOverride, setCreditOverride] = useState<{
|
|
77
|
+
availableMonthlyCredits: number;
|
|
78
|
+
availableExtraCredits: number;
|
|
79
79
|
} | null>(null);
|
|
80
80
|
|
|
81
81
|
const company = useMemo<CompanyInterface | null>(() => {
|
|
82
82
|
const c = currentUser?.company ?? null;
|
|
83
|
-
if (!c || !
|
|
83
|
+
if (!c || !creditOverride) return c;
|
|
84
84
|
return Object.assign(Object.create(Object.getPrototypeOf(c)), c, {
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
_availableMonthlyCredits: creditOverride.availableMonthlyCredits,
|
|
86
|
+
_availableExtraCredits: creditOverride.availableExtraCredits,
|
|
87
87
|
});
|
|
88
|
-
}, [currentUser,
|
|
88
|
+
}, [currentUser, creditOverride]);
|
|
89
89
|
|
|
90
90
|
const setUser = (user?: UserInterface): void => {
|
|
91
91
|
if (user) setDehydratedUser(user.dehydrate() as any);
|
|
92
92
|
else setDehydratedUser(null);
|
|
93
|
-
|
|
93
|
+
setCreditOverride(null);
|
|
94
94
|
};
|
|
95
95
|
|
|
96
96
|
const hasRole = (roleId: string): boolean => {
|
|
@@ -177,7 +177,7 @@ export const CurrentUserProvider = ({ children }: { children: React.ReactNode })
|
|
|
177
177
|
}
|
|
178
178
|
|
|
179
179
|
setDehydratedUser(fullUser.dehydrate() as any);
|
|
180
|
-
|
|
180
|
+
setCreditOverride(null);
|
|
181
181
|
}
|
|
182
182
|
} catch (error) {
|
|
183
183
|
console.error("Failed to refresh user data:", error);
|
|
@@ -206,15 +206,15 @@ export const CurrentUserProvider = ({ children }: { children: React.ReactNode })
|
|
|
206
206
|
|
|
207
207
|
// Hot path: fires once per LLM call. Fully described by its payload — must
|
|
208
208
|
// never trigger an HTTP request.
|
|
209
|
-
const
|
|
209
|
+
const handleCreditsUpdated = (data: {
|
|
210
210
|
companyId: string;
|
|
211
|
-
|
|
212
|
-
|
|
211
|
+
availableMonthlyCredits: number;
|
|
212
|
+
availableExtraCredits: number;
|
|
213
213
|
}) => {
|
|
214
214
|
if (data.companyId !== currentUser.company?.id) return;
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
215
|
+
setCreditOverride({
|
|
216
|
+
availableMonthlyCredits: data.availableMonthlyCredits,
|
|
217
|
+
availableExtraCredits: data.availableExtraCredits,
|
|
218
218
|
});
|
|
219
219
|
};
|
|
220
220
|
|
|
@@ -230,11 +230,11 @@ export const CurrentUserProvider = ({ children }: { children: React.ReactNode })
|
|
|
230
230
|
}
|
|
231
231
|
};
|
|
232
232
|
|
|
233
|
-
socket.on("company:
|
|
233
|
+
socket.on("company:credits_updated", handleCreditsUpdated);
|
|
234
234
|
socket.on("company:subscription_updated", handleSubscriptionUpdated);
|
|
235
235
|
|
|
236
236
|
return () => {
|
|
237
|
-
socket.off("company:
|
|
237
|
+
socket.off("company:credits_updated", handleCreditsUpdated);
|
|
238
238
|
socket.off("company:subscription_updated", handleSubscriptionUpdated);
|
|
239
239
|
};
|
|
240
240
|
}, [socket, isConnected, currentUser?.company?.id]);
|
|
@@ -39,14 +39,14 @@ vi.mock("../../../../core", () => {
|
|
|
39
39
|
// exercise it.
|
|
40
40
|
class FakeCompany {
|
|
41
41
|
id = "";
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
get
|
|
46
|
-
return this.
|
|
42
|
+
monthlyCredits = 0;
|
|
43
|
+
_availableMonthlyCredits = 0;
|
|
44
|
+
_availableExtraCredits = 0;
|
|
45
|
+
get availableMonthlyCredits() {
|
|
46
|
+
return this._availableMonthlyCredits ?? 0;
|
|
47
47
|
}
|
|
48
|
-
get
|
|
49
|
-
return this.
|
|
48
|
+
get availableExtraCredits() {
|
|
49
|
+
return this._availableExtraCredits ?? 0;
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
return {
|
|
@@ -187,9 +187,9 @@ describe("CurrentUserProvider token updates", () => {
|
|
|
187
187
|
modules: [],
|
|
188
188
|
company: {
|
|
189
189
|
id: "company-1",
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
190
|
+
monthlyCredits: 1000,
|
|
191
|
+
_availableMonthlyCredits: 900,
|
|
192
|
+
_availableExtraCredits: 50,
|
|
193
193
|
},
|
|
194
194
|
};
|
|
195
195
|
|
|
@@ -197,7 +197,7 @@ describe("CurrentUserProvider token updates", () => {
|
|
|
197
197
|
const { company } = useCurrentUserContext();
|
|
198
198
|
return (
|
|
199
199
|
<div data-testid="balances">
|
|
200
|
-
{company ? `${(company as any).
|
|
200
|
+
{company ? `${(company as any).availableMonthlyCredits}/${(company as any).availableExtraCredits}` : "null"}
|
|
201
201
|
</div>
|
|
202
202
|
);
|
|
203
203
|
}
|
|
@@ -208,7 +208,7 @@ describe("CurrentUserProvider token updates", () => {
|
|
|
208
208
|
vi.clearAllMocks();
|
|
209
209
|
});
|
|
210
210
|
|
|
211
|
-
it("patches balances from company:
|
|
211
|
+
it("patches balances from company:credits_updated without refetching the user", async () => {
|
|
212
212
|
localStorage.setItem("user", JSON.stringify(STORED_USER));
|
|
213
213
|
|
|
214
214
|
const { getByTestId } = render(
|
|
@@ -221,11 +221,11 @@ describe("CurrentUserProvider token updates", () => {
|
|
|
221
221
|
expect(getByTestId("balances").textContent).toBe("900/50");
|
|
222
222
|
|
|
223
223
|
await act(async () => {
|
|
224
|
-
socketMock.emit("company:
|
|
225
|
-
type: "company:
|
|
224
|
+
socketMock.emit("company:credits_updated", {
|
|
225
|
+
type: "company:credits_updated",
|
|
226
226
|
companyId: "company-1",
|
|
227
|
-
|
|
228
|
-
|
|
227
|
+
availableMonthlyCredits: 750,
|
|
228
|
+
availableExtraCredits: 40,
|
|
229
229
|
});
|
|
230
230
|
});
|
|
231
231
|
|
|
@@ -233,7 +233,7 @@ describe("CurrentUserProvider token updates", () => {
|
|
|
233
233
|
expect(UserService.findFullUser).not.toHaveBeenCalled();
|
|
234
234
|
});
|
|
235
235
|
|
|
236
|
-
it("ignores company:
|
|
236
|
+
it("ignores company:credits_updated for a different company", async () => {
|
|
237
237
|
localStorage.setItem("user", JSON.stringify(STORED_USER));
|
|
238
238
|
|
|
239
239
|
const { getByTestId } = render(
|
|
@@ -245,11 +245,11 @@ describe("CurrentUserProvider token updates", () => {
|
|
|
245
245
|
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
246
246
|
|
|
247
247
|
await act(async () => {
|
|
248
|
-
socketMock.emit("company:
|
|
249
|
-
type: "company:
|
|
248
|
+
socketMock.emit("company:credits_updated", {
|
|
249
|
+
type: "company:credits_updated",
|
|
250
250
|
companyId: "someone-else",
|
|
251
|
-
|
|
252
|
-
|
|
251
|
+
availableMonthlyCredits: 1,
|
|
252
|
+
availableExtraCredits: 1,
|
|
253
253
|
});
|
|
254
254
|
});
|
|
255
255
|
|