@tellescope/sdk 1.254.0 → 1.255.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.
Files changed (98) hide show
  1. package/lib/cjs/sdk.d.ts +4 -0
  2. package/lib/cjs/sdk.d.ts.map +1 -1
  3. package/lib/cjs/sdk.js +5 -0
  4. package/lib/cjs/sdk.js.map +1 -1
  5. package/lib/cjs/tests/api_tests/ai_decision_summary_config.test.d.ts +16 -0
  6. package/lib/cjs/tests/api_tests/ai_decision_summary_config.test.d.ts.map +1 -0
  7. package/lib/cjs/tests/api_tests/ai_decision_summary_config.test.js +187 -0
  8. package/lib/cjs/tests/api_tests/ai_decision_summary_config.test.js.map +1 -0
  9. package/lib/cjs/tests/api_tests/mdi_case_offerings.test.d.ts +6 -0
  10. package/lib/cjs/tests/api_tests/mdi_case_offerings.test.d.ts.map +1 -0
  11. package/lib/cjs/tests/api_tests/mdi_case_offerings.test.js +443 -0
  12. package/lib/cjs/tests/api_tests/mdi_case_offerings.test.js.map +1 -0
  13. package/lib/cjs/tests/api_tests/order_status_equals_frequency.test.d.ts +6 -0
  14. package/lib/cjs/tests/api_tests/order_status_equals_frequency.test.d.ts.map +1 -0
  15. package/lib/cjs/tests/api_tests/order_status_equals_frequency.test.js +254 -0
  16. package/lib/cjs/tests/api_tests/order_status_equals_frequency.test.js.map +1 -0
  17. package/lib/cjs/tests/api_tests/organization_api_keys.test.d.ts +6 -0
  18. package/lib/cjs/tests/api_tests/organization_api_keys.test.d.ts.map +1 -0
  19. package/lib/cjs/tests/api_tests/organization_api_keys.test.js +226 -0
  20. package/lib/cjs/tests/api_tests/organization_api_keys.test.js.map +1 -0
  21. package/lib/cjs/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.d.ts +21 -0
  22. package/lib/cjs/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.d.ts.map +1 -0
  23. package/lib/cjs/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.js +362 -0
  24. package/lib/cjs/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.js.map +1 -0
  25. package/lib/cjs/tests/api_tests/security/F-0145-globalunique-leak.test.d.ts +20 -0
  26. package/lib/cjs/tests/api_tests/security/F-0145-globalunique-leak.test.d.ts.map +1 -0
  27. package/lib/cjs/tests/api_tests/security/F-0145-globalunique-leak.test.js +139 -0
  28. package/lib/cjs/tests/api_tests/security/F-0145-globalunique-leak.test.js.map +1 -0
  29. package/lib/cjs/tests/api_tests/security/F-0151-load-inbox-redaction.test.d.ts +18 -0
  30. package/lib/cjs/tests/api_tests/security/F-0151-load-inbox-redaction.test.d.ts.map +1 -0
  31. package/lib/cjs/tests/api_tests/security/F-0151-load-inbox-redaction.test.js +156 -0
  32. package/lib/cjs/tests/api_tests/security/F-0151-load-inbox-redaction.test.js.map +1 -0
  33. package/lib/cjs/tests/api_tests/security/F-0155-webhook-timeout.test.d.ts +20 -0
  34. package/lib/cjs/tests/api_tests/security/F-0155-webhook-timeout.test.d.ts.map +1 -0
  35. package/lib/cjs/tests/api_tests/security/F-0155-webhook-timeout.test.js +157 -0
  36. package/lib/cjs/tests/api_tests/security/F-0155-webhook-timeout.test.js.map +1 -0
  37. package/lib/cjs/tests/setup.d.ts.map +1 -1
  38. package/lib/cjs/tests/setup.js +20 -1
  39. package/lib/cjs/tests/setup.js.map +1 -1
  40. package/lib/cjs/tests/tests.d.ts.map +1 -1
  41. package/lib/cjs/tests/tests.js +543 -282
  42. package/lib/cjs/tests/tests.js.map +1 -1
  43. package/lib/esm/sdk.d.ts +6 -2
  44. package/lib/esm/sdk.d.ts.map +1 -1
  45. package/lib/esm/sdk.js +5 -0
  46. package/lib/esm/sdk.js.map +1 -1
  47. package/lib/esm/session.d.ts +1 -0
  48. package/lib/esm/session.d.ts.map +1 -1
  49. package/lib/esm/tests/api_tests/ai_decision_summary_config.test.d.ts +16 -0
  50. package/lib/esm/tests/api_tests/ai_decision_summary_config.test.d.ts.map +1 -0
  51. package/lib/esm/tests/api_tests/ai_decision_summary_config.test.js +183 -0
  52. package/lib/esm/tests/api_tests/ai_decision_summary_config.test.js.map +1 -0
  53. package/lib/esm/tests/api_tests/mdi_case_offerings.test.d.ts +6 -0
  54. package/lib/esm/tests/api_tests/mdi_case_offerings.test.d.ts.map +1 -0
  55. package/lib/esm/tests/api_tests/mdi_case_offerings.test.js +439 -0
  56. package/lib/esm/tests/api_tests/mdi_case_offerings.test.js.map +1 -0
  57. package/lib/esm/tests/api_tests/order_status_equals_frequency.test.d.ts +6 -0
  58. package/lib/esm/tests/api_tests/order_status_equals_frequency.test.d.ts.map +1 -0
  59. package/lib/esm/tests/api_tests/order_status_equals_frequency.test.js +250 -0
  60. package/lib/esm/tests/api_tests/order_status_equals_frequency.test.js.map +1 -0
  61. package/lib/esm/tests/api_tests/organization_api_keys.test.d.ts +6 -0
  62. package/lib/esm/tests/api_tests/organization_api_keys.test.d.ts.map +1 -0
  63. package/lib/esm/tests/api_tests/organization_api_keys.test.js +222 -0
  64. package/lib/esm/tests/api_tests/organization_api_keys.test.js.map +1 -0
  65. package/lib/esm/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.d.ts +21 -0
  66. package/lib/esm/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.d.ts.map +1 -0
  67. package/lib/esm/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.js +358 -0
  68. package/lib/esm/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.js.map +1 -0
  69. package/lib/esm/tests/api_tests/security/F-0145-globalunique-leak.test.d.ts +20 -0
  70. package/lib/esm/tests/api_tests/security/F-0145-globalunique-leak.test.d.ts.map +1 -0
  71. package/lib/esm/tests/api_tests/security/F-0145-globalunique-leak.test.js +135 -0
  72. package/lib/esm/tests/api_tests/security/F-0145-globalunique-leak.test.js.map +1 -0
  73. package/lib/esm/tests/api_tests/security/F-0151-load-inbox-redaction.test.d.ts +18 -0
  74. package/lib/esm/tests/api_tests/security/F-0151-load-inbox-redaction.test.d.ts.map +1 -0
  75. package/lib/esm/tests/api_tests/security/F-0151-load-inbox-redaction.test.js +152 -0
  76. package/lib/esm/tests/api_tests/security/F-0151-load-inbox-redaction.test.js.map +1 -0
  77. package/lib/esm/tests/api_tests/security/F-0155-webhook-timeout.test.d.ts +20 -0
  78. package/lib/esm/tests/api_tests/security/F-0155-webhook-timeout.test.d.ts.map +1 -0
  79. package/lib/esm/tests/api_tests/security/F-0155-webhook-timeout.test.js +150 -0
  80. package/lib/esm/tests/api_tests/security/F-0155-webhook-timeout.test.js.map +1 -0
  81. package/lib/esm/tests/setup.d.ts.map +1 -1
  82. package/lib/esm/tests/setup.js +20 -1
  83. package/lib/esm/tests/setup.js.map +1 -1
  84. package/lib/esm/tests/tests.d.ts.map +1 -1
  85. package/lib/esm/tests/tests.js +543 -282
  86. package/lib/esm/tests/tests.js.map +1 -1
  87. package/lib/tsconfig.tsbuildinfo +1 -1
  88. package/package.json +10 -10
  89. package/src/sdk.ts +11 -0
  90. package/src/tests/api_tests/mdi_case_offerings.test.ts +414 -0
  91. package/src/tests/api_tests/organization_api_keys.test.ts +207 -0
  92. package/src/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.ts +221 -0
  93. package/src/tests/api_tests/security/F-0145-globalunique-leak.test.ts +78 -0
  94. package/src/tests/api_tests/security/F-0151-load-inbox-redaction.test.ts +81 -0
  95. package/src/tests/api_tests/security/F-0155-webhook-timeout.test.ts +85 -0
  96. package/src/tests/setup.ts +9 -0
  97. package/src/tests/tests.ts +199 -2
  98. package/test_generated.pdf +0 -0
@@ -0,0 +1,254 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.order_status_equals_frequency_tests = void 0;
40
+ require('source-map-support').install();
41
+ var sdk_1 = require("../../sdk");
42
+ var testing_1 = require("@tellescope/testing");
43
+ var setup_1 = require("../setup");
44
+ var host = process.env.API_URL || 'http://localhost:8080';
45
+ // Focused coverage for the optional `frequencies` exact-match filter on the
46
+ // "Order Status Equals" automation trigger. Mirrors the fills/skus/protocols
47
+ // array-filter pattern: blank/absent -> fires for all, otherwise the order's
48
+ // frequency must exactly match one of the listed values.
49
+ var order_status_equals_frequency_tests = function (_a) {
50
+ var sdk = _a.sdk, sdkNonAdmin = _a.sdkNonAdmin;
51
+ return __awaiter(void 0, void 0, void 0, function () {
52
+ var tf1, tf2, tf3, tf4, tf5, ef;
53
+ return __generator(this, function (_b) {
54
+ switch (_b.label) {
55
+ case 0:
56
+ (0, testing_1.log_header)("Order Status Equals - Frequency Filter Tests");
57
+ return [4 /*yield*/, sdk.api.automation_triggers.createOne({
58
+ event: { type: 'Order Status Equals', info: { source: 'FreqSource', status: "FreqStatus" } },
59
+ action: { type: 'Add Tags', info: { tags: ['Freq No Filter'] } },
60
+ status: 'Active',
61
+ title: "Frequency - no filter (backward compat)"
62
+ })];
63
+ case 1:
64
+ tf1 = _b.sent();
65
+ return [4 /*yield*/, sdk.api.automation_triggers.createOne({
66
+ event: { type: 'Order Status Equals', info: { source: 'FreqSource', status: "FreqStatus", frequencies: ['4', '12'] } },
67
+ action: { type: 'Add Tags', info: { tags: ['Freq Match'] } },
68
+ status: 'Active',
69
+ title: "Frequency - multi-value match"
70
+ })];
71
+ case 2:
72
+ tf2 = _b.sent();
73
+ return [4 /*yield*/, sdk.api.automation_triggers.createOne({
74
+ event: { type: 'Order Status Equals', info: { source: 'FreqSource', status: "FreqStatus", frequencies: [] } },
75
+ action: { type: 'Add Tags', info: { tags: ['Freq Empty All'] } },
76
+ status: 'Active',
77
+ title: "Frequency - empty array means all"
78
+ })];
79
+ case 3:
80
+ tf3 = _b.sent();
81
+ return [4 /*yield*/, sdk.api.automation_triggers.createOne({
82
+ event: { type: 'Order Status Equals', info: { source: 'FreqSource', status: "FreqShipped", frequencies: ['4'] } },
83
+ action: { type: 'Add Tags', info: { tags: ['Freq Status Combo'] } },
84
+ status: 'Active',
85
+ title: "Frequency + status combination (AND semantics)"
86
+ })];
87
+ case 4:
88
+ tf4 = _b.sent();
89
+ return [4 /*yield*/, sdk.api.automation_triggers.createOne({
90
+ event: { type: 'Order Status Equals', info: { source: 'FreqSource', status: "FreqStatus", frequencies: ['12'] } },
91
+ action: { type: 'Add Tags', info: { tags: ['Freq Match 12'] } },
92
+ status: 'Active',
93
+ title: "Frequency - second listed value"
94
+ })];
95
+ case 5:
96
+ tf5 = _b.sent();
97
+ return [4 /*yield*/, sdk.api.endusers.createOne({})];
98
+ case 6:
99
+ ef = _b.sent();
100
+ _b.label = 7;
101
+ case 7:
102
+ _b.trys.push([7, , 26, 28]);
103
+ // Order with NO frequency: no-filter trigger (tf1) and empty-array trigger (tf3) both fire;
104
+ // populated-filter trigger (tf2) does NOT (missing frequency must never match a populated filter).
105
+ return [4 /*yield*/, sdk.api.enduser_orders.createOne({ status: 'FreqStatus', source: 'FreqSource', externalId: 'f1', enduserId: ef.id, title: "Freq No Frequency" })];
106
+ case 8:
107
+ // Order with NO frequency: no-filter trigger (tf1) and empty-array trigger (tf3) both fire;
108
+ // populated-filter trigger (tf2) does NOT (missing frequency must never match a populated filter).
109
+ _b.sent();
110
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)]; // allow triggers to happen
111
+ case 9:
112
+ _b.sent(); // allow triggers to happen
113
+ return [4 /*yield*/, (0, testing_1.async_test)("Frequency: no-filter + empty-array fire for order with no frequency (backward compat)", function () { return sdk.api.endusers.getOne(ef.id); }, { onResult: function (e) {
114
+ var _a, _b, _c, _d;
115
+ return !!(((_a = e.tags) === null || _a === void 0 ? void 0 : _a.length) === 2
116
+ && ((_b = e.tags) === null || _b === void 0 ? void 0 : _b.includes('Freq No Filter'))
117
+ && ((_c = e.tags) === null || _c === void 0 ? void 0 : _c.includes('Freq Empty All'))
118
+ && !((_d = e.tags) === null || _d === void 0 ? void 0 : _d.includes('Freq Match')));
119
+ } })
120
+ // Order with a frequency NOT in ['4','12'] -> populated-filter trigger still does not fire.
121
+ ];
122
+ case 10:
123
+ _b.sent();
124
+ // Order with a frequency NOT in ['4','12'] -> populated-filter trigger still does not fire.
125
+ return [4 /*yield*/, sdk.api.enduser_orders.createOne({ status: 'FreqStatus', source: 'FreqSource', externalId: 'f2', enduserId: ef.id, title: "Freq 8", frequency: '8' })];
126
+ case 11:
127
+ // Order with a frequency NOT in ['4','12'] -> populated-filter trigger still does not fire.
128
+ _b.sent();
129
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)]; // allow triggers to happen
130
+ case 12:
131
+ _b.sent(); // allow triggers to happen
132
+ return [4 /*yield*/, (0, testing_1.async_test)("Frequency: no match (order frequency '8' not in ['4','12'])", function () { return sdk.api.endusers.getOne(ef.id); }, { onResult: function (e) {
133
+ var _a, _b;
134
+ return !!(((_a = e.tags) === null || _a === void 0 ? void 0 : _a.length) === 2
135
+ && !((_b = e.tags) === null || _b === void 0 ? void 0 : _b.includes('Freq Match')));
136
+ } })
137
+ // Order with frequency '4' -> ['4','12'] trigger fires.
138
+ ];
139
+ case 13:
140
+ _b.sent();
141
+ // Order with frequency '4' -> ['4','12'] trigger fires.
142
+ return [4 /*yield*/, sdk.api.enduser_orders.createOne({ status: 'FreqStatus', source: 'FreqSource', externalId: 'f3', enduserId: ef.id, title: "Freq 4", frequency: '4' })];
143
+ case 14:
144
+ // Order with frequency '4' -> ['4','12'] trigger fires.
145
+ _b.sent();
146
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)]; // allow triggers to happen
147
+ case 15:
148
+ _b.sent(); // allow triggers to happen
149
+ return [4 /*yield*/, (0, testing_1.async_test)("Frequency: match (order frequency '4' is in ['4','12'])", function () { return sdk.api.endusers.getOne(ef.id); }, { onResult: function (e) {
150
+ var _a, _b, _c;
151
+ return !!(((_a = e.tags) === null || _a === void 0 ? void 0 : _a.length) === 3
152
+ && ((_b = e.tags) === null || _b === void 0 ? void 0 : _b.includes('Freq Match'))
153
+ && !((_c = e.tags) === null || _c === void 0 ? void 0 : _c.includes('Freq Match 12')));
154
+ } })
155
+ // Order with frequency '12' -> the second listed value also matches (tf5 frequencies: ['12']).
156
+ ];
157
+ case 16:
158
+ _b.sent();
159
+ // Order with frequency '12' -> the second listed value also matches (tf5 frequencies: ['12']).
160
+ return [4 /*yield*/, sdk.api.enduser_orders.createOne({ status: 'FreqStatus', source: 'FreqSource', externalId: 'f4', enduserId: ef.id, title: "Freq 12", frequency: '12' })];
161
+ case 17:
162
+ // Order with frequency '12' -> the second listed value also matches (tf5 frequencies: ['12']).
163
+ _b.sent();
164
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)]; // allow triggers to happen
165
+ case 18:
166
+ _b.sent(); // allow triggers to happen
167
+ return [4 /*yield*/, (0, testing_1.async_test)("Frequency: second listed value '12' also matches", function () { return sdk.api.endusers.getOne(ef.id); }, { onResult: function (e) {
168
+ var _a, _b;
169
+ return !!(((_a = e.tags) === null || _a === void 0 ? void 0 : _a.length) === 4
170
+ && ((_b = e.tags) === null || _b === void 0 ? void 0 : _b.includes('Freq Match 12')));
171
+ } })
172
+ // AND semantics: frequency + status must BOTH match. Right status, wrong frequency -> no fire.
173
+ ];
174
+ case 19:
175
+ _b.sent();
176
+ // AND semantics: frequency + status must BOTH match. Right status, wrong frequency -> no fire.
177
+ return [4 /*yield*/, sdk.api.enduser_orders.createOne({ status: 'FreqShipped', source: 'FreqSource', externalId: 'f5', enduserId: ef.id, title: "Freq Combo Wrong Freq", frequency: '8' })];
178
+ case 20:
179
+ // AND semantics: frequency + status must BOTH match. Right status, wrong frequency -> no fire.
180
+ _b.sent();
181
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)]; // allow triggers to happen
182
+ case 21:
183
+ _b.sent(); // allow triggers to happen
184
+ return [4 /*yield*/, (0, testing_1.async_test)("Frequency + status combo: status matches but frequency does not -> no fire", function () { return sdk.api.endusers.getOne(ef.id); }, { onResult: function (e) {
185
+ var _a, _b;
186
+ return !!(((_a = e.tags) === null || _a === void 0 ? void 0 : _a.length) === 4
187
+ && !((_b = e.tags) === null || _b === void 0 ? void 0 : _b.includes('Freq Status Combo')));
188
+ } })
189
+ // AND semantics: right status AND right frequency -> fires.
190
+ ];
191
+ case 22:
192
+ _b.sent();
193
+ // AND semantics: right status AND right frequency -> fires.
194
+ return [4 /*yield*/, sdk.api.enduser_orders.createOne({ status: 'FreqShipped', source: 'FreqSource', externalId: 'f6', enduserId: ef.id, title: "Freq Combo Match", frequency: '4' })];
195
+ case 23:
196
+ // AND semantics: right status AND right frequency -> fires.
197
+ _b.sent();
198
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)]; // allow triggers to happen
199
+ case 24:
200
+ _b.sent(); // allow triggers to happen
201
+ return [4 /*yield*/, (0, testing_1.async_test)("Frequency + status combo: both match -> fires (AND semantics)", function () { return sdk.api.endusers.getOne(ef.id); }, { onResult: function (e) {
202
+ var _a, _b;
203
+ return !!(((_a = e.tags) === null || _a === void 0 ? void 0 : _a.length) === 5
204
+ && ((_b = e.tags) === null || _b === void 0 ? void 0 : _b.includes('Freq Status Combo')));
205
+ } })];
206
+ case 25:
207
+ _b.sent();
208
+ return [3 /*break*/, 28];
209
+ case 26: return [4 /*yield*/, Promise.all([
210
+ sdk.api.automation_triggers.deleteOne(tf1.id),
211
+ sdk.api.automation_triggers.deleteOne(tf2.id),
212
+ sdk.api.automation_triggers.deleteOne(tf3.id),
213
+ sdk.api.automation_triggers.deleteOne(tf4.id),
214
+ sdk.api.automation_triggers.deleteOne(tf5.id),
215
+ sdk.api.endusers.deleteOne(ef.id),
216
+ ])];
217
+ case 27:
218
+ _b.sent();
219
+ return [7 /*endfinally*/];
220
+ case 28: return [2 /*return*/];
221
+ }
222
+ });
223
+ });
224
+ };
225
+ exports.order_status_equals_frequency_tests = order_status_equals_frequency_tests;
226
+ // Allow running this test file independently
227
+ if (require.main === module) {
228
+ console.log("\uD83C\uDF10 Using API URL: ".concat(host));
229
+ var sdk_2 = new sdk_1.Session({ host: host });
230
+ var sdkNonAdmin_1 = new sdk_1.Session({ host: host });
231
+ var runTests = function () { return __awaiter(void 0, void 0, void 0, function () {
232
+ return __generator(this, function (_a) {
233
+ switch (_a.label) {
234
+ case 0: return [4 /*yield*/, (0, setup_1.setup_tests)(sdk_2, sdkNonAdmin_1)];
235
+ case 1:
236
+ _a.sent();
237
+ return [4 /*yield*/, (0, exports.order_status_equals_frequency_tests)({ sdk: sdk_2, sdkNonAdmin: sdkNonAdmin_1 })];
238
+ case 2:
239
+ _a.sent();
240
+ return [2 /*return*/];
241
+ }
242
+ });
243
+ }); };
244
+ runTests()
245
+ .then(function () {
246
+ console.log("✅ Order Status Equals frequency test suite completed successfully");
247
+ process.exit(0);
248
+ })
249
+ .catch(function (error) {
250
+ console.error("❌ Order Status Equals frequency test suite failed:", error);
251
+ process.exit(1);
252
+ });
253
+ }
254
+ //# sourceMappingURL=order_status_equals_frequency.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order_status_equals_frequency.test.js","sourceRoot":"","sources":["../../../../src/tests/api_tests/order_status_equals_frequency.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Session } from "../../sdk";
2
+ export declare const organization_api_keys_tests: ({ sdk, sdkNonAdmin }: {
3
+ sdk: Session;
4
+ sdkNonAdmin: Session;
5
+ }) => Promise<void>;
6
+ //# sourceMappingURL=organization_api_keys.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"organization_api_keys.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/organization_api_keys.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAcnC,eAAO,MAAM,2BAA2B;SACT,OAAO;iBAAe,OAAO;mBAwK3D,CAAA"}
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.organization_api_keys_tests = void 0;
40
+ require('source-map-support').install();
41
+ var sdk_1 = require("../../sdk");
42
+ var testing_1 = require("@tellescope/testing");
43
+ var setup_1 = require("../setup");
44
+ var host = process.env.API_URL || 'http://localhost:8080';
45
+ // fields that the admin org-wide list endpoint is allowed to return
46
+ var ALLOWED_FIELDS = ['id', 'creator', 'businessId', 'updatedAt'].sort();
47
+ var organization_api_keys_tests = function (_a) {
48
+ var sdk = _a.sdk, sdkNonAdmin = _a.sdkNonAdmin;
49
+ return __awaiter(void 0, void 0, void 0, function () {
50
+ var adminKeyIds, otherKeyId, otherUserId, apiKeysRoleId, apiKeysRole, otherUser_1, _b, otherSdk_1, _c, adminKey_1, otherKey, apiKeys, offending, afterGating, afterDelete, afterNoop, _i, adminKeyIds_1, id;
51
+ var _d;
52
+ return __generator(this, function (_e) {
53
+ switch (_e.label) {
54
+ case 0:
55
+ (0, testing_1.log_header)("Organization API Keys (admin org-wide management)");
56
+ adminKeyIds = [];
57
+ _e.label = 1;
58
+ case 1:
59
+ _e.trys.push([1, , 19, 30]);
60
+ return [4 /*yield*/, sdk.api.role_based_access_permissions.createOne({
61
+ role: 'api-keys-test-role',
62
+ permissions: { api_keys: { create: 'All', read: 'All', update: 'All', delete: 'All' } },
63
+ })];
64
+ case 2:
65
+ apiKeysRole = _e.sent();
66
+ apiKeysRoleId = apiKeysRole.id;
67
+ return [4 /*yield*/, sdk.api.users.getOne({ email: 'api.keys.other.user@tellescope.com' }).catch(function () { return null; })];
68
+ case 3:
69
+ _b = (_e.sent());
70
+ if (_b) return [3 /*break*/, 5];
71
+ return [4 /*yield*/, sdk.api.users.createOne({ email: 'api.keys.other.user@tellescope.com', notificationEmailsDisabled: true, verifiedEmail: true })];
72
+ case 4:
73
+ _b = (_e.sent());
74
+ _e.label = 5;
75
+ case 5:
76
+ otherUser_1 = _b;
77
+ otherUserId = otherUser_1.id;
78
+ return [4 /*yield*/, sdk.api.users.updateOne(otherUser_1.id, { roles: [apiKeysRole.role] }, { replaceObjectFields: true })];
79
+ case 6:
80
+ _e.sent();
81
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 2000)]; // wait for the role change to propagate before authenticating
82
+ case 7:
83
+ _e.sent(); // wait for the role change to propagate before authenticating
84
+ _c = sdk_1.Session.bind;
85
+ _d = {
86
+ host: host
87
+ };
88
+ return [4 /*yield*/, sdk.api.users.generate_auth_token({ id: otherUser_1.id })];
89
+ case 8:
90
+ otherSdk_1 = new (_c.apply(sdk_1.Session, [void 0, (_d.authToken = (_e.sent()).authToken,
91
+ _d)]))();
92
+ return [4 /*yield*/, sdk.api.api_keys.createOne({})];
93
+ case 9:
94
+ adminKey_1 = _e.sent();
95
+ adminKeyIds.push(adminKey_1.id);
96
+ return [4 /*yield*/, otherSdk_1.api.api_keys.createOne({})];
97
+ case 10:
98
+ otherKey = _e.sent();
99
+ otherKeyId = otherKey.id;
100
+ return [4 /*yield*/, sdk.api.api_keys.get_organization_api_keys()];
101
+ case 11:
102
+ apiKeys = (_e.sent()).apiKeys;
103
+ (0, testing_1.assert)(apiKeys.some(function (k) { return k.id === otherKeyId; }), "admin list did not include another user's key ".concat(otherKeyId), "admin get_organization_api_keys returns keys created by other users in the org");
104
+ (0, testing_1.assert)(apiKeys.some(function (k) { return k.id === adminKey_1.id; }), "admin list did not include the admin's own key", "admin get_organization_api_keys returns the admin's own keys");
105
+ (0, testing_1.assert)(!!apiKeys.find(function (k) { return k.id === otherKeyId && k.creator === otherUser_1.id; }), "creator on the other user's key did not match", "returned key reports the correct creator");
106
+ // =============================================
107
+ // SECRET REDACTION (server-side, allowlist)
108
+ // =============================================
109
+ (0, testing_1.assert)(apiKeys.every(function (k) { return k.key === undefined; }), "a returned record exposed a plaintext `key`", "no returned record exposes a plaintext key (legacy field)");
110
+ (0, testing_1.assert)(apiKeys.every(function (k) { return k.hashedKey === undefined; }), "a returned record exposed `hashedKey`", "no returned record exposes hashedKey");
111
+ offending = apiKeys
112
+ .map(function (k) { return Object.keys(k).filter(function (key) { return !ALLOWED_FIELDS.includes(key); }); })
113
+ .find(function (extra) { return extra.length > 0; });
114
+ (0, testing_1.assert)(offending === undefined, "a returned record exposed non-allowlisted fields: ".concat(JSON.stringify(offending)), "returned records contain only allowlisted fields (subset of id, creator, businessId, updatedAt)");
115
+ // =============================================
116
+ // CROSS-ORG ISOLATION (no leakage across businesses)
117
+ // =============================================
118
+ (0, testing_1.assert)(apiKeys.every(function (k) { return k.businessId === sdk.userInfo.businessId; }), "a returned key belonged to a different business", "all returned keys are scoped to the admin's businessId");
119
+ // =============================================
120
+ // ADMIN GATING (negative tests)
121
+ // =============================================
122
+ return [4 /*yield*/, (0, testing_1.async_test)("non-admin get_organization_api_keys is rejected (401)", function () { return otherSdk_1.api.api_keys.get_organization_api_keys(); }, { shouldError: true, onError: function (e) { return e.statusCode === 401 || /admin access only/i.test(e.message || ''); } })];
123
+ case 12:
124
+ // =============================================
125
+ // ADMIN GATING (negative tests)
126
+ // =============================================
127
+ _e.sent();
128
+ return [4 /*yield*/, (0, testing_1.async_test)("non-admin delete_organization_api_key is rejected (401)", function () { return otherSdk_1.api.api_keys.delete_organization_api_key({ id: adminKey_1.id }); }, { shouldError: true, onError: function (e) { return e.statusCode === 401 || /admin access only/i.test(e.message || ''); } })
129
+ // confirm the gating did not delete the key
130
+ ];
131
+ case 13:
132
+ _e.sent();
133
+ return [4 /*yield*/, sdk.api.api_keys.get_organization_api_keys()];
134
+ case 14:
135
+ afterGating = _e.sent();
136
+ (0, testing_1.assert)(afterGating.apiKeys.some(function (k) { return k.id === adminKey_1.id; }), "rejected non-admin delete still removed the key", "rejected non-admin delete left the key intact");
137
+ // =============================================
138
+ // ADMIN DELETE another user's key
139
+ // =============================================
140
+ return [4 /*yield*/, (0, testing_1.async_test)("admin delete_organization_api_key deletes another user's key", function () { return sdk.api.api_keys.delete_organization_api_key({ id: otherKeyId }); }, { shouldError: false, onResult: function () { return true; } })];
141
+ case 15:
142
+ // =============================================
143
+ // ADMIN DELETE another user's key
144
+ // =============================================
145
+ _e.sent();
146
+ return [4 /*yield*/, sdk.api.api_keys.get_organization_api_keys()];
147
+ case 16:
148
+ afterDelete = _e.sent();
149
+ (0, testing_1.assert)(!afterDelete.apiKeys.some(function (k) { return k.id === otherKeyId; }), "deleted key still present in org-wide list", "deleted key no longer appears in the org-wide list");
150
+ otherKeyId = undefined; // successfully deleted; nothing to clean up
151
+ // deleting a key in a different org (fabricated id) must be a no-op for our org
152
+ return [4 /*yield*/, (0, testing_1.async_test)("admin delete of a non-existent/cross-org key id is a safe no-op", function () { return sdk.api.api_keys.delete_organization_api_key({ id: '000000000000000000000000' }); }, { shouldError: false, onResult: function () { return true; } })];
153
+ case 17:
154
+ // deleting a key in a different org (fabricated id) must be a no-op for our org
155
+ _e.sent();
156
+ return [4 /*yield*/, sdk.api.api_keys.get_organization_api_keys()];
157
+ case 18:
158
+ afterNoop = _e.sent();
159
+ (0, testing_1.assert)(afterNoop.apiKeys.some(function (k) { return k.id === adminKey_1.id; }), "no-op delete removed an unrelated key", "no-op cross-org delete left our org's keys intact");
160
+ return [3 /*break*/, 30];
161
+ case 19:
162
+ _i = 0, adminKeyIds_1 = adminKeyIds;
163
+ _e.label = 20;
164
+ case 20:
165
+ if (!(_i < adminKeyIds_1.length)) return [3 /*break*/, 23];
166
+ id = adminKeyIds_1[_i];
167
+ return [4 /*yield*/, sdk.api.api_keys.deleteOne(id).catch(function () { })];
168
+ case 21:
169
+ _e.sent();
170
+ _e.label = 22;
171
+ case 22:
172
+ _i++;
173
+ return [3 /*break*/, 20];
174
+ case 23:
175
+ if (!otherKeyId) return [3 /*break*/, 25];
176
+ return [4 /*yield*/, sdk.api.api_keys.delete_organization_api_key({ id: otherKeyId }).catch(function () { })];
177
+ case 24:
178
+ _e.sent();
179
+ _e.label = 25;
180
+ case 25:
181
+ if (!otherUserId) return [3 /*break*/, 27];
182
+ return [4 /*yield*/, sdk.api.users.deleteOne(otherUserId).catch(function () { })];
183
+ case 26:
184
+ _e.sent();
185
+ _e.label = 27;
186
+ case 27:
187
+ if (!apiKeysRoleId) return [3 /*break*/, 29];
188
+ return [4 /*yield*/, sdk.api.role_based_access_permissions.deleteOne(apiKeysRoleId).catch(function () { })];
189
+ case 28:
190
+ _e.sent();
191
+ _e.label = 29;
192
+ case 29: return [7 /*endfinally*/];
193
+ case 30: return [2 /*return*/];
194
+ }
195
+ });
196
+ });
197
+ };
198
+ exports.organization_api_keys_tests = organization_api_keys_tests;
199
+ // Allow running this test file independently
200
+ if (require.main === module) {
201
+ var sdk_2 = new sdk_1.Session({ host: host });
202
+ var sdkNonAdmin_1 = new sdk_1.Session({ host: host });
203
+ var runTests = function () { return __awaiter(void 0, void 0, void 0, function () {
204
+ return __generator(this, function (_a) {
205
+ switch (_a.label) {
206
+ case 0: return [4 /*yield*/, (0, setup_1.setup_tests)(sdk_2, sdkNonAdmin_1)];
207
+ case 1:
208
+ _a.sent();
209
+ return [4 /*yield*/, (0, exports.organization_api_keys_tests)({ sdk: sdk_2, sdkNonAdmin: sdkNonAdmin_1 })];
210
+ case 2:
211
+ _a.sent();
212
+ return [2 /*return*/];
213
+ }
214
+ });
215
+ }); };
216
+ runTests()
217
+ .then(function () {
218
+ console.log("✅ Organization API keys test suite completed successfully");
219
+ process.exit(0);
220
+ })
221
+ .catch(function (error) {
222
+ console.error("❌ Organization API keys test suite failed:", error);
223
+ process.exit(1);
224
+ });
225
+ }
226
+ //# sourceMappingURL=organization_api_keys.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"organization_api_keys.test.js","sourceRoot":"","sources":["../../../../src/tests/api_tests/organization_api_keys.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,EAAE,CAAC;AAExC,iCAAmC;AACnC,+CAK4B;AAC5B,kCAAsC;AAEtC,IAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,uBAAgC,CAAA;AAEpE,oEAAoE;AACpE,IAAM,cAAc,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC,IAAI,EAAE,CAAA;AAEnE,IAAM,2BAA2B,GAAG,UACzC,EAA4D;QAA1D,GAAG,SAAA,EAAE,WAAW,iBAAA;;;;;;;oBAElB,IAAA,oBAAU,EAAC,mDAAmD,CAAC,CAAA;oBAQzD,WAAW,GAAa,EAAE,CAAA;;;;oBAOV,qBAAM,GAAG,CAAC,GAAG,CAAC,6BAA6B,CAAC,SAAS,CAAC;4BACxE,IAAI,EAAE,oBAAoB;4BAC1B,WAAW,EAAE,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;yBACxF,CAAC,EAAA;;oBAHI,WAAW,GAAG,SAGlB;oBACF,aAAa,GAAG,WAAW,CAAC,EAAE,CAAA;oBAI5B,qBAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC,CAAC,KAAK,CAAC,cAAM,OAAA,IAAI,EAAJ,CAAI,CAAC,EAAA;;oBAD7E,KAAA,CAChB,SAA6F,CAC9F,CAAA;4BAFiB,wBAEjB;oBACC,qBAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,oCAAoC,EAAE,0BAA0B,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAA;;oBADlI,KAAA,CACH,SAAqI,CACtI,CAAA;;;oBAJK,gBAIL;oBACD,WAAW,GAAG,WAAS,CAAC,EAAE,CAAA;oBAC1B,qBAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,WAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,EAAA;;oBAAzG,SAAyG,CAAA;oBACzG,qBAAM,IAAA,cAAI,EAAC,SAAS,EAAE,IAAI,CAAC,EAAA,CAAC,8DAA8D;;oBAA1F,SAA2B,CAAA,CAAC,8DAA8D;yBAErE,aAAO;;wBAC1B,IAAI,MAAA;;oBACQ,qBAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,EAAE,EAAE,WAAS,CAAC,EAAE,EAAE,CAAC,EAAA;;oBAFrE,aAAW,cAAI,aAAO,YAE1B,YAAS,GAAE,CAAC,SAA6D,CAAC,CAAC,SAAS;oCACpF;oBAGe,qBAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,EAAA;;oBAA/C,aAAW,SAAoC;oBACrD,WAAW,CAAC,IAAI,CAAC,UAAQ,CAAC,EAAE,CAAC,CAAA;oBAGZ,qBAAM,UAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,EAAA;;oBAApD,QAAQ,GAAG,SAAyC;oBAC1D,UAAU,GAAG,QAAQ,CAAC,EAAE,CAAA;oBAKJ,qBAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,yBAAyB,EAAE,EAAA;;oBAA9D,OAAO,GAAK,CAAA,SAAkD,CAAA,QAAvD;oBAEf,IAAA,gBAAM,EACJ,OAAO,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,EAAE,KAAK,UAAU,EAAnB,CAAmB,CAAC,EACtC,wDAAiD,UAAU,CAAE,EAC7D,gFAAgF,CACjF,CAAA;oBACD,IAAA,gBAAM,EACJ,OAAO,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,EAAE,KAAK,UAAQ,CAAC,EAAE,EAApB,CAAoB,CAAC,EACvC,gDAAgD,EAChD,8DAA8D,CAC/D,CAAA;oBACD,IAAA,gBAAM,EACJ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,EAAE,KAAK,UAAU,IAAI,CAAC,CAAC,OAAO,KAAK,WAAS,CAAC,EAAE,EAAjD,CAAiD,CAAC,EACtE,+CAA+C,EAC/C,0CAA0C,CAC3C,CAAA;oBAED,gDAAgD;oBAChD,4CAA4C;oBAC5C,gDAAgD;oBAChD,IAAA,gBAAM,EACJ,OAAO,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAC,CAAS,CAAC,GAAG,KAAK,SAAS,EAA5B,CAA4B,CAAC,EAChD,6CAA6C,EAC7C,2DAA2D,CAC5D,CAAA;oBACD,IAAA,gBAAM,EACJ,OAAO,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAC,CAAS,CAAC,SAAS,KAAK,SAAS,EAAlC,CAAkC,CAAC,EACtD,uCAAuC,EACvC,sCAAsC,CACvC,CAAA;oBAIK,SAAS,GAAG,OAAO;yBACtB,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAA,GAAG,IAAI,OAAA,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,EAA7B,CAA6B,CAAC,EAA3D,CAA2D,CAAC;yBACrE,IAAI,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,MAAM,GAAG,CAAC,EAAhB,CAAgB,CAAC,CAAA;oBAClC,IAAA,gBAAM,EACJ,SAAS,KAAK,SAAS,EACvB,4DAAqD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAE,EAChF,iGAAiG,CAClG,CAAA;oBAED,gDAAgD;oBAChD,qDAAqD;oBACrD,gDAAgD;oBAChD,IAAA,gBAAM,EACJ,OAAO,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,UAAU,KAAK,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAxC,CAAwC,CAAC,EAC5D,iDAAiD,EACjD,wDAAwD,CACzD,CAAA;oBAED,gDAAgD;oBAChD,gCAAgC;oBAChC,gDAAgD;oBAChD,qBAAM,IAAA,oBAAU,EACd,uDAAuD,EACvD,cAAM,OAAA,UAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,yBAAyB,EAAE,EAAjD,CAAiD,EACvD,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,UAAC,CAAM,IAAK,OAAA,CAAC,CAAC,UAAU,KAAK,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,EAAlE,CAAkE,EAAE,CAC/G,EAAA;;oBAPD,gDAAgD;oBAChD,gCAAgC;oBAChC,gDAAgD;oBAChD,SAIC,CAAA;oBACD,qBAAM,IAAA,oBAAU,EACd,yDAAyD,EACzD,cAAM,OAAA,UAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EAAE,EAAE,EAAE,UAAQ,CAAC,EAAE,EAAE,CAAC,EAAtE,CAAsE,EAC5E,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,UAAC,CAAM,IAAK,OAAA,CAAC,CAAC,UAAU,KAAK,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,EAAlE,CAAkE,EAAE,CAC/G;wBAED,4CAA4C;sBAF3C;;oBAJD,SAIC,CAAA;oBAGmB,qBAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,yBAAyB,EAAE,EAAA;;oBAAhE,WAAW,GAAG,SAAkD;oBACtE,IAAA,gBAAM,EACJ,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,EAAE,KAAK,UAAQ,CAAC,EAAE,EAApB,CAAoB,CAAC,EACnD,iDAAiD,EACjD,+CAA+C,CAChD,CAAA;oBAED,gDAAgD;oBAChD,kCAAkC;oBAClC,gDAAgD;oBAChD,qBAAM,IAAA,oBAAU,EACd,8DAA8D,EAC9D,cAAM,OAAA,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EAAE,EAAE,EAAE,UAAW,EAAE,CAAC,EAAjE,CAAiE,EACvE,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAM,OAAA,IAAI,EAAJ,CAAI,EAAE,CAC7C,EAAA;;oBAPD,gDAAgD;oBAChD,kCAAkC;oBAClC,gDAAgD;oBAChD,SAIC,CAAA;oBAEmB,qBAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,yBAAyB,EAAE,EAAA;;oBAAhE,WAAW,GAAG,SAAkD;oBACtE,IAAA,gBAAM,EACJ,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,EAAE,KAAK,UAAU,EAAnB,CAAmB,CAAC,EACnD,4CAA4C,EAC5C,oDAAoD,CACrD,CAAA;oBACD,UAAU,GAAG,SAAS,CAAA,CAAC,4CAA4C;oBAEnE,gFAAgF;oBAChF,qBAAM,IAAA,oBAAU,EACd,iEAAiE,EACjE,cAAM,OAAA,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EAAE,EAAE,EAAE,0BAA0B,EAAE,CAAC,EAAhF,CAAgF,EACtF,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAM,OAAA,IAAI,EAAJ,CAAI,EAAE,CAC7C,EAAA;;oBALD,gFAAgF;oBAChF,SAIC,CAAA;oBACiB,qBAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,yBAAyB,EAAE,EAAA;;oBAA9D,SAAS,GAAG,SAAkD;oBACpE,IAAA,gBAAM,EACJ,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,EAAE,KAAK,UAAQ,CAAC,EAAE,EAApB,CAAoB,CAAC,EACjD,uCAAuC,EACvC,mDAAmD,CACpD,CAAA;;;0BAG2B,EAAX,2BAAW;;;yBAAX,CAAA,yBAAW,CAAA;oBAAjB,EAAE;oBACX,qBAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,cAAO,CAAC,CAAC,EAAA;;oBAApD,SAAoD,CAAA;;;oBADrC,IAAW,CAAA;;;yBAIxB,UAAU,EAAV,yBAAU;oBACZ,qBAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,cAAO,CAAC,CAAC,EAAA;;oBAAtF,SAAsF,CAAA;;;yBAEpF,WAAW,EAAX,yBAAW;oBACb,qBAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,cAAO,CAAC,CAAC,EAAA;;oBAA1D,SAA0D,CAAA;;;yBAExD,aAAa,EAAb,yBAAa;oBACf,qBAAM,GAAG,CAAC,GAAG,CAAC,6BAA6B,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,cAAO,CAAC,CAAC,EAAA;;oBAApF,SAAoF,CAAA;;;;;;;CAGzF,CAAA;AAzKY,QAAA,2BAA2B,+BAyKvC;AAED,6CAA6C;AAC7C,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;IAC3B,IAAM,KAAG,GAAG,IAAI,aAAO,CAAC,EAAE,IAAI,MAAA,EAAE,CAAC,CAAA;IACjC,IAAM,aAAW,GAAG,IAAI,aAAO,CAAC,EAAE,IAAI,MAAA,EAAE,CAAC,CAAA;IAEzC,IAAM,QAAQ,GAAG;;;wBACf,qBAAM,IAAA,mBAAW,EAAC,KAAG,EAAE,aAAW,CAAC,EAAA;;oBAAnC,SAAmC,CAAA;oBACnC,qBAAM,IAAA,mCAA2B,EAAC,EAAE,GAAG,OAAA,EAAE,WAAW,eAAA,EAAE,CAAC,EAAA;;oBAAvD,SAAuD,CAAA;;;;SACxD,CAAA;IAED,QAAQ,EAAE;SACP,IAAI,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAA;QACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC;SACD,KAAK,CAAC,UAAC,KAAK;QACX,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC,CAAA;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;CACL"}
@@ -0,0 +1,21 @@
1
+ import { Session } from "../../../sdk";
2
+ /**
3
+ * Regression test for the enduser cross-enduser CREATE gating gaps:
4
+ * F-0116 enduser_observations (security-audit/findings/F-0116-*.md)
5
+ * F-0117 enduser_orders (security-audit/findings/F-0117-*.md)
6
+ * F-0119 managed_content_records (security-audit/findings/F-0119-*.md)
7
+ * F-0118 chat_rooms (enduserIds-only gate; staff userIds targeting is by-design)
8
+ *
9
+ * Each model exposed enduserActions.create with an `enduserId`/`enduserIds` field that
10
+ * lacked a write-side gate, letting an authenticated enduser create records bound to a
11
+ * DIFFERENT enduser in the same tenant. The fix adds a `constraints.relationship`
12
+ * evaluator mirroring the canonical `tickets` pattern (schema.ts).
13
+ *
14
+ * Methodology: each section asserts BOTH the exploit-is-blocked case AND that the
15
+ * legitimate path (self-create + staff-create) still works.
16
+ */
17
+ export declare const enduser_cross_create_tests: ({ sdk }: {
18
+ sdk: Session;
19
+ sdkNonAdmin: Session;
20
+ }) => Promise<void>;
21
+ //# sourceMappingURL=F-0116-F-0119-enduser-cross-create.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"F-0116-F-0119-enduser-cross-create.test.d.ts","sourceRoot":"","sources":["../../../../../src/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAkB,MAAM,cAAc,CAAA;AActD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,0BAA0B;SAA2B,OAAO;iBAAe,OAAO;mBAuK9F,CAAA"}