@crvouga/mockingbird-service-firstpromoter 1.0.0 → 1.0.1
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/CHANGELOG.md +7 -4
- package/dist/{chunk-YVYHXK67.js → chunk-B7YWDW5W.js} +97 -25
- package/dist/chunk-B7YWDW5W.js.map +7 -0
- package/dist/{chunk-RM3F6GCN.js → chunk-U767RJZB.js} +5 -3
- package/dist/chunk-U767RJZB.js.map +7 -0
- package/dist/cli.js +2 -2
- package/dist/index.d.ts +117 -89
- package/dist/index.js +1 -1
- package/dist/server.d.ts +221 -165
- package/dist/server.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-RM3F6GCN.js.map +0 -7
- package/dist/chunk-YVYHXK67.js.map +0 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
# Changelog — @crvouga/mockingbird-service-firstpromoter
|
|
2
2
|
|
|
3
|
+
## 1.0.1 (2026-09-26)
|
|
4
|
+
|
|
5
|
+
### Fixes and improvements
|
|
6
|
+
|
|
7
|
+
- take the rejected-request byte count from content-length, never by reading the body ([a0e5fb2](https://github.com/crvouga/mockingbird/commit/a0e5fb2fc80ab725c3552b612f3f091fd6c857fb))
|
|
8
|
+
- reject a present body by media type, and log what a rejected request sent ([12e351a](https://github.com/crvouga/mockingbird/commit/12e351aba53cfb7b41e31a7809419455fc2902eb))
|
|
9
|
+
|
|
3
10
|
## 1.0.0 (2026-09-24)
|
|
4
11
|
|
|
5
12
|
### ⚠️ Breaking changes
|
|
6
13
|
|
|
7
14
|
- vendor branding for every service; purge internal mocks and consumer names ([f689534](https://github.com/crvouga/mockingbird/commit/f6895343543550dafcb7d76b426cae7635e03226))
|
|
8
15
|
|
|
9
|
-
### Dependencies
|
|
10
|
-
|
|
11
|
-
- `@crvouga/mockingbird-service-sqlite`
|
|
12
|
-
|
|
13
16
|
## 0.2.0 (2026-09-23)
|
|
14
17
|
|
|
15
18
|
### Features
|
|
@@ -1347,6 +1347,90 @@ var operationMetadata = (operation) => {
|
|
|
1347
1347
|
|
|
1348
1348
|
// ../core/dist/service.js
|
|
1349
1349
|
import { Hono } from "hono";
|
|
1350
|
+
|
|
1351
|
+
// ../core/dist/validation.js
|
|
1352
|
+
var requestBodyOf = (context) => {
|
|
1353
|
+
const requestBody = context.operation.operation.requestBody;
|
|
1354
|
+
return requestBody ? deref(context.document, requestBody) : void 0;
|
|
1355
|
+
};
|
|
1356
|
+
var mediaTypeMatches = (accepted, actual) => {
|
|
1357
|
+
const pattern = mediaTypeOf(accepted) ?? accepted.toLowerCase();
|
|
1358
|
+
if (pattern === actual || pattern === "*/*")
|
|
1359
|
+
return true;
|
|
1360
|
+
const [type, subtype] = pattern.split("/");
|
|
1361
|
+
const [actualType, actualSubtype] = actual.split("/");
|
|
1362
|
+
if (type !== actualType && type !== "*")
|
|
1363
|
+
return false;
|
|
1364
|
+
if (subtype === void 0 || subtype === "*")
|
|
1365
|
+
return true;
|
|
1366
|
+
if (subtype.startsWith("*+"))
|
|
1367
|
+
return actualSubtype?.endsWith(subtype.slice(1)) === true;
|
|
1368
|
+
return false;
|
|
1369
|
+
};
|
|
1370
|
+
var acceptedKeyFor = (content, mediaType) => {
|
|
1371
|
+
if (!content || mediaType === void 0)
|
|
1372
|
+
return void 0;
|
|
1373
|
+
const keys = Object.keys(content);
|
|
1374
|
+
return keys.find((key) => mediaTypeOf(key) === mediaType) ?? keys.find((key) => mediaTypeMatches(key, mediaType));
|
|
1375
|
+
};
|
|
1376
|
+
var unsupportedMediaType = (context, options = {}) => {
|
|
1377
|
+
if (context.body.kind === "empty" && options.includeEmpty !== true)
|
|
1378
|
+
return void 0;
|
|
1379
|
+
const content = requestBodyOf(context)?.content;
|
|
1380
|
+
if (!content || Object.keys(content).length === 0)
|
|
1381
|
+
return void 0;
|
|
1382
|
+
const mediaType = mediaTypeOf(context.request.headers.get("content-type"));
|
|
1383
|
+
if (acceptedKeyFor(content, mediaType) !== void 0)
|
|
1384
|
+
return void 0;
|
|
1385
|
+
return { mediaType: mediaType ?? null, accepted: Object.keys(content) };
|
|
1386
|
+
};
|
|
1387
|
+
var recorded = /* @__PURE__ */ new WeakMap();
|
|
1388
|
+
var recordedIssues = (request) => recorded.get(request);
|
|
1389
|
+
var bodyIssues = (context, contentType = "application/json") => {
|
|
1390
|
+
const issues = findBodyIssues(context, contentType);
|
|
1391
|
+
if (issues.length > 0)
|
|
1392
|
+
recorded.set(context.request, issues);
|
|
1393
|
+
return issues;
|
|
1394
|
+
};
|
|
1395
|
+
var findBodyIssues = (context, contentType) => {
|
|
1396
|
+
const resolved = requestBodyOf(context);
|
|
1397
|
+
if (!resolved)
|
|
1398
|
+
return [];
|
|
1399
|
+
const unsupported = unsupportedMediaType(context);
|
|
1400
|
+
if (unsupported) {
|
|
1401
|
+
return [
|
|
1402
|
+
{
|
|
1403
|
+
path: "",
|
|
1404
|
+
kind: "media_type",
|
|
1405
|
+
message: unsupported.mediaType === null ? "request body has no content-type" : `request body media type ${unsupported.mediaType} is not supported`
|
|
1406
|
+
}
|
|
1407
|
+
];
|
|
1408
|
+
}
|
|
1409
|
+
const key = acceptedKeyFor(resolved.content, mediaTypeOf(context.request.headers.get("content-type"))) ?? contentType;
|
|
1410
|
+
const schema = resolved.content?.[key]?.schema;
|
|
1411
|
+
if (!schema)
|
|
1412
|
+
return [];
|
|
1413
|
+
if (context.body.kind === "invalid") {
|
|
1414
|
+
return [
|
|
1415
|
+
{
|
|
1416
|
+
path: "",
|
|
1417
|
+
kind: "syntax",
|
|
1418
|
+
message: `request body is not valid ${context.body.mediaType}`
|
|
1419
|
+
}
|
|
1420
|
+
];
|
|
1421
|
+
}
|
|
1422
|
+
const value = context.body.kind === "json" || context.body.kind === "form" || context.body.kind === "text" ? context.body.value : void 0;
|
|
1423
|
+
if (value === void 0) {
|
|
1424
|
+
return resolved.required && context.body.kind === "empty" ? [{ path: "", kind: "required", message: "request body is required" }] : [];
|
|
1425
|
+
}
|
|
1426
|
+
return validateValue(context.document, resolveSchema(context.document, schema), value).map((issue) => ({ path: issue.path.join("."), kind: "schema", message: issue.message }));
|
|
1427
|
+
};
|
|
1428
|
+
|
|
1429
|
+
// ../core/dist/service.js
|
|
1430
|
+
var withIssues = (request, response) => {
|
|
1431
|
+
const issues = response.status >= 400 ? recordedIssues(request) : void 0;
|
|
1432
|
+
return issues && issues.length > 0 ? annotateResponse(response, { issues }) : response;
|
|
1433
|
+
};
|
|
1350
1434
|
var defineOperations = (handlers) => handlers;
|
|
1351
1435
|
var OperationRegistryError = class extends Error {
|
|
1352
1436
|
problems;
|
|
@@ -1432,9 +1516,7 @@ var createService = (options) => {
|
|
|
1432
1516
|
now
|
|
1433
1517
|
};
|
|
1434
1518
|
const short = await options.before?.(context);
|
|
1435
|
-
|
|
1436
|
-
return short;
|
|
1437
|
-
return handler(context);
|
|
1519
|
+
return withIssues(request, short ?? await handler(context));
|
|
1438
1520
|
};
|
|
1439
1521
|
app.on(operation.method.toUpperCase(), honoPath(operation.path), route);
|
|
1440
1522
|
}
|
|
@@ -1471,7 +1553,7 @@ var restoreNamespace = (sqlite, namespace, snapshot) => {
|
|
|
1471
1553
|
};
|
|
1472
1554
|
|
|
1473
1555
|
// ../core/dist/version.js
|
|
1474
|
-
var PACKAGE_VERSION = true ? "1.0.
|
|
1556
|
+
var PACKAGE_VERSION = true ? "1.0.1" : UNRELEASED_VERSION;
|
|
1475
1557
|
|
|
1476
1558
|
// ../core/dist/signing.js
|
|
1477
1559
|
var encoder = new TextEncoder();
|
|
@@ -2231,8 +2313,15 @@ var createRuntime = (options) => {
|
|
|
2231
2313
|
const started = monotonicNow();
|
|
2232
2314
|
const url = new URL(request.url);
|
|
2233
2315
|
const operationId = operationIdFor(request, url.pathname);
|
|
2316
|
+
const contentLength = request.headers.get("content-length");
|
|
2317
|
+
const received = {
|
|
2318
|
+
contentType: request.headers.get("content-type"),
|
|
2319
|
+
bodyBytes: contentLength !== null && /^\d+$/.test(contentLength) ? Number(contentLength) : null,
|
|
2320
|
+
transferEncoding: request.headers.get("transfer-encoding")
|
|
2321
|
+
};
|
|
2234
2322
|
const log = (status, faultId, response2) => {
|
|
2235
2323
|
const noted = response2 ? responseNotes(response2) : void 0;
|
|
2324
|
+
const rejected = status >= 400 && faultId === void 0;
|
|
2236
2325
|
const entry = {
|
|
2237
2326
|
service: options.name,
|
|
2238
2327
|
namespace,
|
|
@@ -2244,7 +2333,9 @@ var createRuntime = (options) => {
|
|
|
2244
2333
|
unmatched: options.document !== void 0 && operationId === void 0,
|
|
2245
2334
|
...faultId !== void 0 ? { faultId } : {},
|
|
2246
2335
|
...noted?.ids && Object.keys(noted.ids).length > 0 ? { ids: noted.ids } : {},
|
|
2247
|
-
...noted?.adopted ? { adopted: true } : {}
|
|
2336
|
+
...noted?.adopted ? { adopted: true } : {},
|
|
2337
|
+
...rejected ? { request: { ...received } } : {},
|
|
2338
|
+
...rejected && noted?.issues && noted.issues.length > 0 ? { issues: noted.issues.map((issue) => ({ ...issue })) } : {}
|
|
2248
2339
|
};
|
|
2249
2340
|
metrics.record(entry);
|
|
2250
2341
|
journal.record({ ...entry, at: new Date(clock.now()).toISOString() });
|
|
@@ -2451,25 +2542,6 @@ var presetRoutes = (presets, runtime) => ({
|
|
|
2451
2542
|
}
|
|
2452
2543
|
});
|
|
2453
2544
|
|
|
2454
|
-
// ../core/dist/validation.js
|
|
2455
|
-
var bodyIssues = (context, contentType = "application/json") => {
|
|
2456
|
-
const requestBody = context.operation.operation.requestBody;
|
|
2457
|
-
if (!requestBody)
|
|
2458
|
-
return [];
|
|
2459
|
-
const resolved = deref(context.document, requestBody);
|
|
2460
|
-
const schema = resolved.content?.[contentType]?.schema;
|
|
2461
|
-
if (!schema)
|
|
2462
|
-
return [];
|
|
2463
|
-
const value = context.body.kind === "json" || context.body.kind === "form" ? context.body.value : void 0;
|
|
2464
|
-
if (context.body.kind === "invalid") {
|
|
2465
|
-
return [{ path: "", message: `request body is not valid ${context.body.mediaType}` }];
|
|
2466
|
-
}
|
|
2467
|
-
if (value === void 0) {
|
|
2468
|
-
return resolved.required ? [{ path: "", message: "request body is required" }] : [];
|
|
2469
|
-
}
|
|
2470
|
-
return validateValue(context.document, resolveSchema(context.document, schema), value).map((issue) => ({ path: issue.path.join("."), message: issue.message }));
|
|
2471
|
-
};
|
|
2472
|
-
|
|
2473
2545
|
// src/generated/openapi.ts
|
|
2474
2546
|
var document = JSON.parse(`{"openapi":"3.1.0","info":{"title":"FirstPromoter API v2 (Mockingbird subset)","description":"Stateful mock subset of FirstPromoter's v2 company API: promoters (create, list, find by\\nid / cust_id / ref_token / email, update, archive), signup tracking, and the dashboard\\niframe login. Hand-authored from the wire shapes our consumer sends and the zod schemas it\\nparses responses with (\`first-promoter.types.ts\`).\\n","version":"2","x-mockingbird-upstream":{"note":"Hand-authored from B/global-services/services/first-promoter/first-promoter.service.ts and first-promoter.types.ts (FirstPromoterV2ResponseSchema, FirstPromoterV2ListResponseSchema, FirstPromoterV2ArchiveResponseSchema, FirstPromoterAccessTokenResponseSchema)."}},"servers":[{"url":"https://api.firstpromoter.com/api"}],"security":[{"bearerAuth":[]}],"paths":{"/v2/track/signup":{"post":{"operationId":"TrackSignup","description":"Record a referred signup, attributed by click \`tid\`, by \`promoter_id\`, or by \`ref_id\`\\n(a promoter's ref token). Attributed signups emit the \`lead_becomes_referral\` webhook.\\n","x-mockingbird":{"supported":true,"parity":{"enabled":true,"safe":false}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string","format":"email","maxLength":120},"uid":{"type":"string","maxLength":64},"tid":{"type":"string","maxLength":64},"ref_id":{"type":"string","maxLength":64},"promoter_id":{"type":"integer","minimum":1},"skip_email_notification":{"type":"boolean"}}}}}},"responses":{"200":{"description":"The referral","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Referral"}}}},"400":{"description":"No attribution given","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing API key or Account-ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tid, promoter or ref token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Invalid or already-tracked email","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}}}},"/v2/company/promoters":{"get":{"operationId":"ListPromoters","x-mockingbird":{"supported":true,"parity":{"enabled":true,"safe":true}},"parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"maximum":5}},{"name":"per_page","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"responses":{"200":{"description":"A page of promoters","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Promoter"}},"meta":{"type":"object","required":["pending_count"],"properties":{"pending_count":{"type":"integer"}}}}}}}},"401":{"description":"Missing API key or Account-ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"CreatePromoter","x-mockingbird":{"supported":true,"parity":{"enabled":true,"safe":false}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string","format":"email","maxLength":120},"cust_id":{"type":"string","minLength":1,"maxLength":64},"profile":{"type":"object","properties":{"first_name":{"type":"string","maxLength":40},"last_name":{"type":"string","maxLength":40}}},"drip_emails":{"type":"boolean"},"initial_campaign_id":{"type":"integer","minimum":1,"maximum":3}}}}}},"responses":{"200":{"description":"The new promoter, enrolled in the default campaign","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Promoter"}}}},"401":{"description":"Missing API key or Account-ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown initial campaign","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Invalid, or email / cust_id already taken","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}}}},"/v2/company/promoters/archive":{"post":{"operationId":"ArchivePromoters","x-mockingbird":{"supported":true,"parity":{"enabled":true,"safe":false}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["ids"],"properties":{"ids":{"type":"array","minItems":1,"maxItems":5,"items":{"type":"integer","minimum":1}}}}}}},"responses":{"200":{"description":"The batch operation that archived them","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchProcess"}}}},"401":{"description":"Missing API key or Account-ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Invalid body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}}}},"/v2/company/promoters/{id}":{"parameters":[{"name":"id","in":"path","required":true,"description":"The promoter id, or the value named by \`find_by\`.","schema":{"type":"string","x-mockingbird-resource-ref":{"type":"ref_token","missing":"nobody404"}}}],"get":{"operationId":"GetPromoter","x-mockingbird":{"supported":true,"parity":{"enabled":true,"safe":true}},"parameters":[{"name":"find_by","in":"query","schema":{"type":"string","enum":["id","cust_id","ref_token","email"]}}],"responses":{"200":{"description":"The promoter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Promoter"}}}},"400":{"description":"Unknown find_by","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing API key or Account-ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such promoter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"operationId":"UpdatePromoter","x-mockingbird":{"supported":true,"parity":{"enabled":true,"safe":false}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","maxLength":120},"cust_id":{"type":"string","minLength":1,"maxLength":64},"note":{"type":"string","maxLength":200},"profile":{"type":"object","properties":{"first_name":{"type":"string","maxLength":40},"last_name":{"type":"string","maxLength":40}}}}}}}},"responses":{"200":{"description":"The updated promoter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Promoter"}}}},"401":{"description":"Missing API key or Account-ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such promoter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Invalid, or email / cust_id already taken","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}}}},"/v2/promoters/iframe_login":{"post":{"operationId":"IframeLogin","x-mockingbird":{"supported":true,"parity":{"enabled":true,"safe":true}},"parameters":[{"name":"promoter_id","in":"query","required":true,"schema":{"type":"string","pattern":"^[0-9]{1,10}$"}}],"responses":{"200":{"description":"A short-lived dashboard token","content":{"application/json":{"schema":{"type":"object","required":["access_token","expires_in"],"properties":{"access_token":{"type":"string","x-mockingbird-volatile":{"kind":"token"}},"expires_in":{"type":"integer"}}}}}},"401":{"description":"Missing API key or Account-ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such promoter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"\`Authorization: Bearer <FIRST_PROMOTER_API_KEY>\` plus \`Account-ID: <FIRST_PROMOTER_ACCOUNT_ID>\`."}},"schemas":{"Error":{"type":"object","required":["message"],"properties":{"message":{"type":"string"},"code":{"type":"string"}}},"ValidationError":{"type":"object","required":["message","errors"],"properties":{"message":{"type":"string"},"errors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}}},"Reward":{"type":"object","required":["apply_on","reward_id"],"properties":{"apply_on":{"type":"string"},"product_ids":{"type":["array","null"],"items":{"type":"integer"}},"reward_id":{"type":"integer"},"reward":{"type":["object","null"],"properties":{"name":{"type":["string","null"]},"promoter_reward_type":{"type":["string","null"]},"hide_reward":{"type":["boolean","null"]},"tier_level":{"type":["integer","null"]},"coupon":{"type":["string","null"]},"amount":{"type":["number","null"]},"unit":{"type":["string","null"]},"reward_value":{"type":["number","null"]},"reward_unit":{"type":["string","null"]}}},"products":{"type":["array","null"]}}},"CampaignStats":{"type":"object","required":["clicks_count","referrals_count","sales_count","customers_count","revenue_amount"],"properties":{"clicks_count":{"type":"integer"},"referrals_count":{"type":"integer"},"sales_count":{"type":"integer"},"customers_count":{"type":"integer"},"revenue_amount":{"type":"number"}}},"PromoterCampaign":{"type":"object","required":["id","campaign_id","promoter_id","state","ref_link"],"properties":{"id":{"type":"integer","x-mockingbird-volatile":{"kind":"id"}},"campaign_id":{"type":"integer"},"promoter_id":{"type":"integer","x-mockingbird-volatile":{"kind":"id"}},"state":{"type":"string"},"created_at":{"type":"string","x-mockingbird-volatile":{"kind":"timestamp"}},"campaign":{"type":"object","required":["id","name","color"],"properties":{"id":{"type":"integer"},"name":{"type":"string"},"color":{"type":"string"}}},"ref_link":{"type":"string","x-mockingbird-volatile":{"kind":"url"}},"ref_token":{"type":"string","x-mockingbird-resource":{"type":"ref_token","identity":true}},"coupon":{"type":["string","null"]},"display_coupon":{"type":["string","null"]},"direct_url":{"type":["string","null"]},"track_ad_traffic":{"type":["string","null"]},"referral_rewards_customized":{"type":"boolean"},"promoter_rewards_customized":{"type":"boolean"},"rewards_for_promoters":{"type":"array","items":{"$ref":"#/components/schemas/Reward"}},"rewards_for_referrals":{"type":"array","items":{"$ref":"#/components/schemas/Reward"}},"stats":{"$ref":"#/components/schemas/CampaignStats"},"promo_codes":{"type":"array"}}},"Promoter":{"type":"object","required":["id","email","promoter_campaigns"],"properties":{"id":{"type":"integer","x-mockingbird-volatile":{"kind":"id"}},"email":{"type":"string"},"name":{"type":"string"},"cust_id":{"type":["string","null"]},"note":{"type":["string","null"]},"state":{"type":"string"},"stats":{"type":"object","required":["clicks_count","referrals_count","sales_count","customers_count","revenue_amount","active_customers_count"],"properties":{"clicks_count":{"type":"integer"},"referrals_count":{"type":"integer"},"sales_count":{"type":"integer"},"customers_count":{"type":"integer"},"revenue_amount":{"type":"number"},"active_customers_count":{"type":"integer"}}},"is_customized":{"type":"boolean"},"fraud_suspicions":{"type":"array","items":{"type":"string"}},"is_confirmed":{"type":"boolean"},"invoice_details_status":{"type":"string"},"profile":{"type":"object","required":["id"],"properties":{"id":{"type":"integer","x-mockingbird-volatile":{"kind":"id"}},"first_name":{"type":["string","null"]},"last_name":{"type":["string","null"]},"website":{"type":["string","null"]},"company_name":{"type":["string","null"]},"company_number":{"type":["string","null"]},"phone_number":{"type":["string","null"]},"vat_id":{"type":["string","null"]},"country":{"type":["string","null"]},"address":{"type":["string","null"]},"avatar":{"type":["string","null"]},"w8_form_url":{"type":["string","null"]},"w9_form_url":{"type":["string","null"]},"description":{"type":["string","null"]}}},"joined_at":{"type":"string","x-mockingbird-volatile":{"kind":"timestamp"}},"last_login_at":{"type":["string","null"]},"archived_at":{"type":["string","null"],"x-mockingbird-volatile":{"kind":"opaque"}},"custom_fields":{"type":["object","null"]},"password_setup_url":{"type":["string","null"],"x-mockingbird-volatile":{"kind":"url"}},"created_at":{"type":"string","x-mockingbird-volatile":{"kind":"timestamp"}},"updated_at":{"type":"string","x-mockingbird-volatile":{"kind":"timestamp"}},"promoter_campaigns":{"type":"array","items":{"$ref":"#/components/schemas/PromoterCampaign"}}}},"Referral":{"type":"object","required":["id","email","state","created_at"],"properties":{"id":{"type":"integer","x-mockingbird-volatile":{"kind":"id"}},"email":{"type":"string"},"uid":{"type":["string","null"]},"state":{"type":"string","enum":["signup","active","cancelled","refunded","denied"]},"created_at":{"type":"string","x-mockingbird-volatile":{"kind":"timestamp"}},"customer_since":{"type":["string","null"]},"promoter_campaign":{"type":["object","null"],"properties":{"id":{"type":"integer","x-mockingbird-volatile":{"kind":"id"}},"campaign_id":{"type":"integer"},"promoter_id":{"type":"integer","x-mockingbird-volatile":{"kind":"id"}},"ref_token":{"type":"string"}}}}},"BatchProcess":{"type":"object","required":["id","status","total","selected_total","processed_count","failed_count","action_label","created_at","updated_at","progress"],"properties":{"id":{"type":"integer","x-mockingbird-volatile":{"kind":"id"}},"status":{"type":"string"},"total":{"type":"integer"},"selected_total":{"type":"integer"},"processed_count":{"type":"integer"},"failed_count":{"type":"integer"},"action_label":{"type":"string"},"created_at":{"type":"string","x-mockingbird-volatile":{"kind":"timestamp"}},"updated_at":{"type":"string","x-mockingbird-volatile":{"kind":"timestamp"}},"meta":{"type":"object"},"progress":{"type":"integer"},"processing_errors":{"type":"array","items":{"type":"string"}}}}}}}`);
|
|
2475
2547
|
var operationIds = ["TrackSignup", "ListPromoters", "CreatePromoter", "ArchivePromoters", "GetPromoter", "UpdatePromoter", "IframeLogin"];
|
|
@@ -3254,4 +3326,4 @@ export {
|
|
|
3254
3326
|
FIRSTPROMOTER_NAMESPACE,
|
|
3255
3327
|
FirstPromoterAPI
|
|
3256
3328
|
};
|
|
3257
|
-
//# sourceMappingURL=chunk-
|
|
3329
|
+
//# sourceMappingURL=chunk-B7YWDW5W.js.map
|