@nimee/api-clients 1.1.115 → 1.1.119
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/src/crm.d.ts +52 -0
- package/dist/src/crm.js +65 -1
- package/dist/src/crm.js.map +1 -1
- package/package.json +2 -2
- package/src/crm.ts +103 -1
package/dist/src/crm.d.ts
CHANGED
|
@@ -45,10 +45,62 @@ export declare class CrmClient {
|
|
|
45
45
|
endUserPhone?: string;
|
|
46
46
|
customer?: Record<string, unknown>;
|
|
47
47
|
}): Promise<IDiningCommitCreateResult>;
|
|
48
|
+
/**
|
|
49
|
+
* Settles exactly the given commits against a charge the caller already created (e.g. via
|
|
50
|
+
* `chargeEndUser`). Forwards the caller's `jwt` header — CRM derives `settledBy`/`settledByName`
|
|
51
|
+
* from that JWT itself, same as `settle-selected`'s other callers.
|
|
52
|
+
*/
|
|
53
|
+
settleSelectedDining(params: {
|
|
54
|
+
jwt: string;
|
|
55
|
+
marketplaceId: string;
|
|
56
|
+
sellerId: string;
|
|
57
|
+
endUserId: string;
|
|
58
|
+
commitIds: string[];
|
|
59
|
+
chargeId: string;
|
|
60
|
+
}): Promise<{
|
|
61
|
+
settledCount: number;
|
|
62
|
+
total: number;
|
|
63
|
+
balance: number;
|
|
64
|
+
}>;
|
|
65
|
+
/**
|
|
66
|
+
* INTERNAL. Stamps the refund state of a charge onto the meals that charge collected, so the
|
|
67
|
+
* guest's own dining page can show the money came back. `jwt` must be JWT_ADMIN — the CRM route
|
|
68
|
+
* compares it literally before verifying anything, because a seller token proves identity, not
|
|
69
|
+
* the right to rewrite a member's meal history. No marketplaceId in the path: that route has no
|
|
70
|
+
* `checkRole` to key on one, and a manual charge never carries a marketplace to supply it.
|
|
71
|
+
*
|
|
72
|
+
* "full" is per-meal truthful (each meal's own effectiveAmount is what came back); "partial" is
|
|
73
|
+
* charge-level and deliberately carries no per-meal figure — one charge covers several meals, and
|
|
74
|
+
* splitting a partial refund across them would invent numbers nobody agreed to.
|
|
75
|
+
*/
|
|
76
|
+
markDiningChargeRefunded(params: {
|
|
77
|
+
jwt: string;
|
|
78
|
+
sellerId: string;
|
|
79
|
+
endUserId: string;
|
|
80
|
+
chargeId: string;
|
|
81
|
+
refundState: "partial" | "full";
|
|
82
|
+
/** Everything returned against this charge so far, in SHEKELS — CRM apportions it across the meals. */
|
|
83
|
+
refundedTotal?: number;
|
|
84
|
+
}): Promise<{
|
|
85
|
+
updatedCommits: number;
|
|
86
|
+
}>;
|
|
48
87
|
getDiningBalance(params: {
|
|
49
88
|
jwt: string;
|
|
50
89
|
marketplaceId: string;
|
|
51
90
|
sellerId: string;
|
|
52
91
|
endUserId: string;
|
|
53
92
|
}): Promise<IDiningBalanceResponse>;
|
|
93
|
+
/**
|
|
94
|
+
* The bootstrap's variant: resolves to `null` when the end user is not an active dining member,
|
|
95
|
+
* instead of rejecting with a 403. The public seller page asks for every guest on every seller,
|
|
96
|
+
* so non-membership is the common answer — and a 403 there is logged and metered as an error by
|
|
97
|
+
* every service it passes through. Use `getDiningBalance` where non-membership really is a
|
|
98
|
+
* rejected request (the POS, the admin dashboard).
|
|
99
|
+
*/
|
|
100
|
+
getDiningBalanceOrNull(params: {
|
|
101
|
+
jwt: string;
|
|
102
|
+
marketplaceId: string;
|
|
103
|
+
sellerId: string;
|
|
104
|
+
endUserId: string;
|
|
105
|
+
}): Promise<IDiningBalanceResponse | null>;
|
|
54
106
|
}
|
package/dist/src/crm.js
CHANGED
|
@@ -55,7 +55,14 @@ class CrmClient {
|
|
|
55
55
|
createAutoExitVisit(params) {
|
|
56
56
|
return __awaiter(this, void 0, void 0, function* () {
|
|
57
57
|
const { jwt, marketplaceId, sellerId, endUserId, guests, endUserSeasonTicketId, seasonTicketId, scannerSessionId } = params;
|
|
58
|
-
if (!jwt ||
|
|
58
|
+
if (!jwt ||
|
|
59
|
+
!marketplaceId ||
|
|
60
|
+
!sellerId ||
|
|
61
|
+
!endUserId ||
|
|
62
|
+
!endUserSeasonTicketId ||
|
|
63
|
+
!seasonTicketId ||
|
|
64
|
+
!scannerSessionId ||
|
|
65
|
+
guests === undefined) {
|
|
59
66
|
throw new error_handler_1.CustomError("param_are_missing_in_createAutoExitVisit", 400, `params are: ${JSON.stringify(params)}`);
|
|
60
67
|
}
|
|
61
68
|
const response = yield axios_1.default.post(`${crmUrl}/visit/${marketplaceId}/${sellerId}/${endUserId}`, { guests, autoExit: true, endUserSeasonTicketId, seasonTicketId, scannerSessionId }, { headers: { jwt } });
|
|
@@ -72,6 +79,42 @@ class CrmClient {
|
|
|
72
79
|
return response === null || response === void 0 ? void 0 : response.data;
|
|
73
80
|
});
|
|
74
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Settles exactly the given commits against a charge the caller already created (e.g. via
|
|
84
|
+
* `chargeEndUser`). Forwards the caller's `jwt` header — CRM derives `settledBy`/`settledByName`
|
|
85
|
+
* from that JWT itself, same as `settle-selected`'s other callers.
|
|
86
|
+
*/
|
|
87
|
+
settleSelectedDining(params) {
|
|
88
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
89
|
+
const { jwt, marketplaceId, sellerId, endUserId, commitIds, chargeId } = params;
|
|
90
|
+
if (!jwt || !marketplaceId || !sellerId || !endUserId || !(commitIds === null || commitIds === void 0 ? void 0 : commitIds.length) || !chargeId) {
|
|
91
|
+
throw new error_handler_1.CustomError("param_are_missing_in_settleSelectedDining", 400, `params are: ${JSON.stringify({ marketplaceId, sellerId, endUserId, commitIds, chargeId })}`);
|
|
92
|
+
}
|
|
93
|
+
const response = yield axios_1.default.post(`${crmUrl}/dining/commits/settle-selected/${marketplaceId}/${sellerId}/${endUserId}`, { commitIds, chargeId }, { headers: { jwt } });
|
|
94
|
+
return response === null || response === void 0 ? void 0 : response.data;
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* INTERNAL. Stamps the refund state of a charge onto the meals that charge collected, so the
|
|
99
|
+
* guest's own dining page can show the money came back. `jwt` must be JWT_ADMIN — the CRM route
|
|
100
|
+
* compares it literally before verifying anything, because a seller token proves identity, not
|
|
101
|
+
* the right to rewrite a member's meal history. No marketplaceId in the path: that route has no
|
|
102
|
+
* `checkRole` to key on one, and a manual charge never carries a marketplace to supply it.
|
|
103
|
+
*
|
|
104
|
+
* "full" is per-meal truthful (each meal's own effectiveAmount is what came back); "partial" is
|
|
105
|
+
* charge-level and deliberately carries no per-meal figure — one charge covers several meals, and
|
|
106
|
+
* splitting a partial refund across them would invent numbers nobody agreed to.
|
|
107
|
+
*/
|
|
108
|
+
markDiningChargeRefunded(params) {
|
|
109
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
110
|
+
const { jwt, sellerId, endUserId, chargeId, refundState, refundedTotal } = params;
|
|
111
|
+
if (!jwt || !sellerId || !endUserId || !chargeId || !refundState) {
|
|
112
|
+
throw new error_handler_1.CustomError("param_are_missing_in_markDiningChargeRefunded", 400, `params are: ${JSON.stringify({ sellerId, endUserId, chargeId, refundState })}`);
|
|
113
|
+
}
|
|
114
|
+
const response = yield axios_1.default.post(`${crmUrl}/dining/charges/refunded/${sellerId}/${endUserId}`, Object.assign({ chargeId, refundState }, (refundedTotal === undefined ? {} : { refundedTotal })), { headers: { jwt } });
|
|
115
|
+
return response === null || response === void 0 ? void 0 : response.data;
|
|
116
|
+
});
|
|
117
|
+
}
|
|
75
118
|
getDiningBalance(params) {
|
|
76
119
|
return __awaiter(this, void 0, void 0, function* () {
|
|
77
120
|
const { jwt, marketplaceId, sellerId, endUserId } = params;
|
|
@@ -84,6 +127,27 @@ class CrmClient {
|
|
|
84
127
|
return response === null || response === void 0 ? void 0 : response.data;
|
|
85
128
|
});
|
|
86
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* The bootstrap's variant: resolves to `null` when the end user is not an active dining member,
|
|
132
|
+
* instead of rejecting with a 403. The public seller page asks for every guest on every seller,
|
|
133
|
+
* so non-membership is the common answer — and a 403 there is logged and metered as an error by
|
|
134
|
+
* every service it passes through. Use `getDiningBalance` where non-membership really is a
|
|
135
|
+
* rejected request (the POS, the admin dashboard).
|
|
136
|
+
*/
|
|
137
|
+
getDiningBalanceOrNull(params) {
|
|
138
|
+
var _a;
|
|
139
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
140
|
+
const { jwt, marketplaceId, sellerId, endUserId } = params;
|
|
141
|
+
if (!jwt || !marketplaceId || !sellerId || !endUserId) {
|
|
142
|
+
throw new error_handler_1.CustomError("param_are_missing_in_getDiningBalanceOrNull", 400, `params are: ${JSON.stringify({ marketplaceId, sellerId, endUserId })}`);
|
|
143
|
+
}
|
|
144
|
+
const response = yield axios_1.default.get(`${crmUrl}/dining/balance-or-null/${marketplaceId}/${sellerId}/${endUserId}`, {
|
|
145
|
+
headers: { jwt },
|
|
146
|
+
});
|
|
147
|
+
// eslint-disable-next-line no-null/no-null
|
|
148
|
+
return (_a = response === null || response === void 0 ? void 0 : response.data) !== null && _a !== void 0 ? _a : null;
|
|
149
|
+
});
|
|
150
|
+
}
|
|
87
151
|
}
|
|
88
152
|
exports.CrmClient = CrmClient;
|
|
89
153
|
//# sourceMappingURL=crm.js.map
|
package/dist/src/crm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crm.js","sourceRoot":"","sources":["../../src/crm.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,wDAAmD;AAGnD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;AAC7F,MAAM,MAAM,GAAG,GAAG,QAAQ,MAAM,CAAC;AAEjC,MAAa,SAAS;IACd,yBAAyB,CAAC,MAAsF;;YACpH,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;YAC9D,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;gBACzD,MAAM,IAAI,2BAAW,CAAC,gDAAgD,EAAE,GAAG,EAAE,eAAe,MAAM,EAAE,CAAC,CAAC;YACxG,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,GAAG,MAAM,8BAA8B,aAAa,IAAI,QAAQ,IAAI,YAAY,EAAE,EAAE;gBACnH,OAAO,EAAE,EAAE,GAAG,EAAE;aACjB,CAAC,CAAC;YACH,OAAO,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC;QACxB,CAAC;KAAA;IAEK,WAAW,CAAC,MASjB;;YACC,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,qBAAqB,EAAE,cAAc,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC;YAC5H,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9E,MAAM,IAAI,2BAAW,CAAC,kCAAkC,EAAE,GAAG,EAAE,eAAe,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC1G,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,GAAG,MAAM,UAAU,aAAa,IAAI,QAAQ,IAAI,SAAS,EAAE,EAC3D,EAAE,MAAM,EAAE,qBAAqB,EAAE,cAAc,EAAE,gBAAgB,EAAE,EACnE,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,CACrB,CAAC;YACF,OAAO,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC;QACxB,CAAC;KAAA;IAEK,mBAAmB,CAAC,MASzB;;YACC,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,qBAAqB,EAAE,cAAc,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC;YAC5H,
|
|
1
|
+
{"version":3,"file":"crm.js","sourceRoot":"","sources":["../../src/crm.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nimee/api-clients",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.119",
|
|
4
4
|
"description": "communication http for each ms",
|
|
5
5
|
"main": "dist/src/index.js",
|
|
6
6
|
"author": "dan goldberg",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@nimee/error-handler": "0.0.14",
|
|
40
40
|
"@nimee/logger": "^1.0.27",
|
|
41
|
-
"@nimee/shared-types": "^1.0.
|
|
41
|
+
"@nimee/shared-types": "^1.0.336",
|
|
42
42
|
"axios": "1.2.1"
|
|
43
43
|
}
|
|
44
44
|
}
|
package/src/crm.ts
CHANGED
|
@@ -51,7 +51,16 @@ export class CrmClient {
|
|
|
51
51
|
scannerSessionId: string;
|
|
52
52
|
}): Promise<{ visit: any; todayVisits: any[] }> {
|
|
53
53
|
const { jwt, marketplaceId, sellerId, endUserId, guests, endUserSeasonTicketId, seasonTicketId, scannerSessionId } = params;
|
|
54
|
-
if (
|
|
54
|
+
if (
|
|
55
|
+
!jwt ||
|
|
56
|
+
!marketplaceId ||
|
|
57
|
+
!sellerId ||
|
|
58
|
+
!endUserId ||
|
|
59
|
+
!endUserSeasonTicketId ||
|
|
60
|
+
!seasonTicketId ||
|
|
61
|
+
!scannerSessionId ||
|
|
62
|
+
guests === undefined
|
|
63
|
+
) {
|
|
55
64
|
throw new CustomError("param_are_missing_in_createAutoExitVisit", 400, `params are: ${JSON.stringify(params)}`);
|
|
56
65
|
}
|
|
57
66
|
const response = await axios.post(
|
|
@@ -94,6 +103,71 @@ export class CrmClient {
|
|
|
94
103
|
return response?.data;
|
|
95
104
|
}
|
|
96
105
|
|
|
106
|
+
/**
|
|
107
|
+
* Settles exactly the given commits against a charge the caller already created (e.g. via
|
|
108
|
+
* `chargeEndUser`). Forwards the caller's `jwt` header — CRM derives `settledBy`/`settledByName`
|
|
109
|
+
* from that JWT itself, same as `settle-selected`'s other callers.
|
|
110
|
+
*/
|
|
111
|
+
async settleSelectedDining(params: {
|
|
112
|
+
jwt: string;
|
|
113
|
+
marketplaceId: string;
|
|
114
|
+
sellerId: string;
|
|
115
|
+
endUserId: string;
|
|
116
|
+
commitIds: string[];
|
|
117
|
+
chargeId: string;
|
|
118
|
+
}): Promise<{ settledCount: number; total: number; balance: number }> {
|
|
119
|
+
const { jwt, marketplaceId, sellerId, endUserId, commitIds, chargeId } = params;
|
|
120
|
+
if (!jwt || !marketplaceId || !sellerId || !endUserId || !commitIds?.length || !chargeId) {
|
|
121
|
+
throw new CustomError(
|
|
122
|
+
"param_are_missing_in_settleSelectedDining",
|
|
123
|
+
400,
|
|
124
|
+
`params are: ${JSON.stringify({ marketplaceId, sellerId, endUserId, commitIds, chargeId })}`
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
const response = await axios.post(
|
|
128
|
+
`${crmUrl}/dining/commits/settle-selected/${marketplaceId}/${sellerId}/${endUserId}`,
|
|
129
|
+
{ commitIds, chargeId },
|
|
130
|
+
{ headers: { jwt } }
|
|
131
|
+
);
|
|
132
|
+
return response?.data;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* INTERNAL. Stamps the refund state of a charge onto the meals that charge collected, so the
|
|
137
|
+
* guest's own dining page can show the money came back. `jwt` must be JWT_ADMIN — the CRM route
|
|
138
|
+
* compares it literally before verifying anything, because a seller token proves identity, not
|
|
139
|
+
* the right to rewrite a member's meal history. No marketplaceId in the path: that route has no
|
|
140
|
+
* `checkRole` to key on one, and a manual charge never carries a marketplace to supply it.
|
|
141
|
+
*
|
|
142
|
+
* "full" is per-meal truthful (each meal's own effectiveAmount is what came back); "partial" is
|
|
143
|
+
* charge-level and deliberately carries no per-meal figure — one charge covers several meals, and
|
|
144
|
+
* splitting a partial refund across them would invent numbers nobody agreed to.
|
|
145
|
+
*/
|
|
146
|
+
async markDiningChargeRefunded(params: {
|
|
147
|
+
jwt: string;
|
|
148
|
+
sellerId: string;
|
|
149
|
+
endUserId: string;
|
|
150
|
+
chargeId: string;
|
|
151
|
+
refundState: "partial" | "full";
|
|
152
|
+
/** Everything returned against this charge so far, in SHEKELS — CRM apportions it across the meals. */
|
|
153
|
+
refundedTotal?: number;
|
|
154
|
+
}): Promise<{ updatedCommits: number }> {
|
|
155
|
+
const { jwt, sellerId, endUserId, chargeId, refundState, refundedTotal } = params;
|
|
156
|
+
if (!jwt || !sellerId || !endUserId || !chargeId || !refundState) {
|
|
157
|
+
throw new CustomError(
|
|
158
|
+
"param_are_missing_in_markDiningChargeRefunded",
|
|
159
|
+
400,
|
|
160
|
+
`params are: ${JSON.stringify({ sellerId, endUserId, chargeId, refundState })}`
|
|
161
|
+
);
|
|
162
|
+
}
|
|
163
|
+
const response = await axios.post(
|
|
164
|
+
`${crmUrl}/dining/charges/refunded/${sellerId}/${endUserId}`,
|
|
165
|
+
{ chargeId, refundState, ...(refundedTotal === undefined ? {} : { refundedTotal }) },
|
|
166
|
+
{ headers: { jwt } }
|
|
167
|
+
);
|
|
168
|
+
return response?.data;
|
|
169
|
+
}
|
|
170
|
+
|
|
97
171
|
async getDiningBalance(params: {
|
|
98
172
|
jwt: string;
|
|
99
173
|
marketplaceId: string;
|
|
@@ -113,4 +187,32 @@ export class CrmClient {
|
|
|
113
187
|
});
|
|
114
188
|
return response?.data;
|
|
115
189
|
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* The bootstrap's variant: resolves to `null` when the end user is not an active dining member,
|
|
193
|
+
* instead of rejecting with a 403. The public seller page asks for every guest on every seller,
|
|
194
|
+
* so non-membership is the common answer — and a 403 there is logged and metered as an error by
|
|
195
|
+
* every service it passes through. Use `getDiningBalance` where non-membership really is a
|
|
196
|
+
* rejected request (the POS, the admin dashboard).
|
|
197
|
+
*/
|
|
198
|
+
async getDiningBalanceOrNull(params: {
|
|
199
|
+
jwt: string;
|
|
200
|
+
marketplaceId: string;
|
|
201
|
+
sellerId: string;
|
|
202
|
+
endUserId: string;
|
|
203
|
+
}): Promise<IDiningBalanceResponse | null> {
|
|
204
|
+
const { jwt, marketplaceId, sellerId, endUserId } = params;
|
|
205
|
+
if (!jwt || !marketplaceId || !sellerId || !endUserId) {
|
|
206
|
+
throw new CustomError(
|
|
207
|
+
"param_are_missing_in_getDiningBalanceOrNull",
|
|
208
|
+
400,
|
|
209
|
+
`params are: ${JSON.stringify({ marketplaceId, sellerId, endUserId })}`
|
|
210
|
+
);
|
|
211
|
+
}
|
|
212
|
+
const response = await axios.get(`${crmUrl}/dining/balance-or-null/${marketplaceId}/${sellerId}/${endUserId}`, {
|
|
213
|
+
headers: { jwt },
|
|
214
|
+
});
|
|
215
|
+
// eslint-disable-next-line no-null/no-null
|
|
216
|
+
return response?.data ?? null;
|
|
217
|
+
}
|
|
116
218
|
}
|