@the_ro_show/agent-ads-sdk 0.17.0 → 0.18.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/README.md +30 -14
- package/dist/index.d.mts +741 -2
- package/dist/index.d.ts +741 -2
- package/dist/index.js +594 -10
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +591 -10
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -1
package/dist/index.js
CHANGED
|
@@ -21,10 +21,13 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
21
21
|
var index_exports = {};
|
|
22
22
|
__export(index_exports, {
|
|
23
23
|
APIRequestError: () => APIRequestError,
|
|
24
|
+
AdvertiserClient: () => AdvertiserClient,
|
|
24
25
|
AttentionMarketClient: () => AttentionMarketClient,
|
|
25
26
|
AttentionMarketError: () => AttentionMarketError,
|
|
27
|
+
DeveloperClient: () => DeveloperClient,
|
|
26
28
|
MockAttentionMarketClient: () => MockAttentionMarketClient,
|
|
27
29
|
NetworkError: () => NetworkError,
|
|
30
|
+
SessionClient: () => SessionClient,
|
|
28
31
|
TimeoutError: () => TimeoutError,
|
|
29
32
|
buildTaxonomy: () => buildTaxonomy,
|
|
30
33
|
createImpressionEvent: () => createImpressionEvent,
|
|
@@ -98,6 +101,10 @@ var HTTPClient = class {
|
|
|
98
101
|
constructor(config) {
|
|
99
102
|
this.config = config;
|
|
100
103
|
}
|
|
104
|
+
/** Expose the API key so sub-clients can re-use it in different headers */
|
|
105
|
+
get apiKey() {
|
|
106
|
+
return this.config.apiKey;
|
|
107
|
+
}
|
|
101
108
|
async request(method, path, options = {}) {
|
|
102
109
|
const url = `${this.config.baseUrl}${path}`;
|
|
103
110
|
let lastError;
|
|
@@ -125,21 +132,26 @@ var HTTPClient = class {
|
|
|
125
132
|
"Content-Type": "application/json",
|
|
126
133
|
...options.headers
|
|
127
134
|
};
|
|
128
|
-
if (
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
135
|
+
if (!options.skipDefaultAuth) {
|
|
136
|
+
if (this.config.supabaseAnonKey) {
|
|
137
|
+
headers["Authorization"] = `Bearer ${this.config.supabaseAnonKey}`;
|
|
138
|
+
}
|
|
139
|
+
if (this.config.apiKey) {
|
|
140
|
+
headers["X-AM-API-Key"] = this.config.apiKey;
|
|
141
|
+
}
|
|
133
142
|
}
|
|
134
143
|
if (options.idempotencyKey) {
|
|
135
144
|
headers["Idempotency-Key"] = options.idempotencyKey;
|
|
136
145
|
}
|
|
137
|
-
const
|
|
146
|
+
const fetchInit = {
|
|
138
147
|
method,
|
|
139
148
|
headers,
|
|
140
|
-
body: options.body ? JSON.stringify(options.body) : void 0,
|
|
141
149
|
signal: controller.signal
|
|
142
|
-
}
|
|
150
|
+
};
|
|
151
|
+
if (options.body) {
|
|
152
|
+
fetchInit.body = JSON.stringify(options.body);
|
|
153
|
+
}
|
|
154
|
+
const response = await fetch(url, fetchInit);
|
|
143
155
|
clearTimeout(timeoutId);
|
|
144
156
|
if (!response.ok) {
|
|
145
157
|
const errorBody = await response.json().catch(() => ({
|
|
@@ -493,6 +505,432 @@ function calculateMessageCount(conversationHistory) {
|
|
|
493
505
|
return (conversationHistory?.length || 0) + 1;
|
|
494
506
|
}
|
|
495
507
|
|
|
508
|
+
// src/session-client.ts
|
|
509
|
+
var SessionClient = class {
|
|
510
|
+
constructor(http) {
|
|
511
|
+
this.http = http;
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* Initiate a new capability session.
|
|
515
|
+
*
|
|
516
|
+
* @example
|
|
517
|
+
* ```typescript
|
|
518
|
+
* const session = await client.sessions.initiate({
|
|
519
|
+
* capability_type: 'code_review',
|
|
520
|
+
* config: { language: 'typescript' }
|
|
521
|
+
* });
|
|
522
|
+
* console.log(session.session_id);
|
|
523
|
+
* ```
|
|
524
|
+
*/
|
|
525
|
+
async initiate(request) {
|
|
526
|
+
return this.http.request(
|
|
527
|
+
"POST",
|
|
528
|
+
"/capability-session",
|
|
529
|
+
{ body: { action: "initiate", ...request } }
|
|
530
|
+
);
|
|
531
|
+
}
|
|
532
|
+
/**
|
|
533
|
+
* Send a message within an existing capability session.
|
|
534
|
+
*
|
|
535
|
+
* @example
|
|
536
|
+
* ```typescript
|
|
537
|
+
* const response = await client.sessions.sendMessage({
|
|
538
|
+
* session_id: 'sess_abc123',
|
|
539
|
+
* message: 'Review this function for bugs'
|
|
540
|
+
* });
|
|
541
|
+
* console.log(response.response);
|
|
542
|
+
* ```
|
|
543
|
+
*/
|
|
544
|
+
async sendMessage(request) {
|
|
545
|
+
if (!request.session_id) {
|
|
546
|
+
throw new Error("session_id is required");
|
|
547
|
+
}
|
|
548
|
+
if (!request.message) {
|
|
549
|
+
throw new Error("message is required");
|
|
550
|
+
}
|
|
551
|
+
return this.http.request(
|
|
552
|
+
"POST",
|
|
553
|
+
"/capability-session",
|
|
554
|
+
{ body: { action: "message", ...request } }
|
|
555
|
+
);
|
|
556
|
+
}
|
|
557
|
+
/**
|
|
558
|
+
* End a capability session.
|
|
559
|
+
*
|
|
560
|
+
* @example
|
|
561
|
+
* ```typescript
|
|
562
|
+
* const result = await client.sessions.end({
|
|
563
|
+
* session_id: 'sess_abc123',
|
|
564
|
+
* reason: 'task_completed'
|
|
565
|
+
* });
|
|
566
|
+
* ```
|
|
567
|
+
*/
|
|
568
|
+
async end(request) {
|
|
569
|
+
if (!request.session_id) {
|
|
570
|
+
throw new Error("session_id is required");
|
|
571
|
+
}
|
|
572
|
+
return this.http.request(
|
|
573
|
+
"POST",
|
|
574
|
+
"/capability-session",
|
|
575
|
+
{ body: { action: "end", ...request } }
|
|
576
|
+
);
|
|
577
|
+
}
|
|
578
|
+
/**
|
|
579
|
+
* Connect a GitHub repository to the capability session.
|
|
580
|
+
*
|
|
581
|
+
* @example
|
|
582
|
+
* ```typescript
|
|
583
|
+
* const result = await client.sessions.connectGitHub({
|
|
584
|
+
* session_id: 'sess_abc123',
|
|
585
|
+
* repository: 'owner/repo',
|
|
586
|
+
* branch: 'main'
|
|
587
|
+
* });
|
|
588
|
+
* ```
|
|
589
|
+
*/
|
|
590
|
+
async connectGitHub(request) {
|
|
591
|
+
if (!request.session_id) {
|
|
592
|
+
throw new Error("session_id is required");
|
|
593
|
+
}
|
|
594
|
+
if (!request.repository) {
|
|
595
|
+
throw new Error("repository is required");
|
|
596
|
+
}
|
|
597
|
+
return this.http.request(
|
|
598
|
+
"POST",
|
|
599
|
+
"/capability-session",
|
|
600
|
+
{ body: { action: "connect-github", ...request } }
|
|
601
|
+
);
|
|
602
|
+
}
|
|
603
|
+
};
|
|
604
|
+
|
|
605
|
+
// src/developer-client.ts
|
|
606
|
+
var DeveloperClient = class {
|
|
607
|
+
constructor(http) {
|
|
608
|
+
this.http = http;
|
|
609
|
+
}
|
|
610
|
+
/**
|
|
611
|
+
* Log in as a developer. Returns a session token for subsequent calls.
|
|
612
|
+
* No API key auth needed for this endpoint.
|
|
613
|
+
*
|
|
614
|
+
* @example
|
|
615
|
+
* ```typescript
|
|
616
|
+
* const session = await client.developer.login({
|
|
617
|
+
* email: 'dev@example.com',
|
|
618
|
+
* password: 'secret'
|
|
619
|
+
* });
|
|
620
|
+
* console.log(session.session_token);
|
|
621
|
+
* ```
|
|
622
|
+
*/
|
|
623
|
+
async login(request) {
|
|
624
|
+
if (!request.email) {
|
|
625
|
+
throw new Error("email is required");
|
|
626
|
+
}
|
|
627
|
+
if (!request.password) {
|
|
628
|
+
throw new Error("password is required");
|
|
629
|
+
}
|
|
630
|
+
return this.http.request(
|
|
631
|
+
"POST",
|
|
632
|
+
"/developer-login",
|
|
633
|
+
{ body: request, skipDefaultAuth: true }
|
|
634
|
+
);
|
|
635
|
+
}
|
|
636
|
+
/**
|
|
637
|
+
* Get developer account data using a session token.
|
|
638
|
+
* No default API key auth — uses session token in body.
|
|
639
|
+
*
|
|
640
|
+
* @example
|
|
641
|
+
* ```typescript
|
|
642
|
+
* const data = await client.developer.getData('session_token_here');
|
|
643
|
+
* console.log(data.agent_name);
|
|
644
|
+
* ```
|
|
645
|
+
*/
|
|
646
|
+
async getData(sessionToken) {
|
|
647
|
+
if (!sessionToken) {
|
|
648
|
+
throw new Error("sessionToken is required");
|
|
649
|
+
}
|
|
650
|
+
return this.http.request(
|
|
651
|
+
"POST",
|
|
652
|
+
"/developer-data",
|
|
653
|
+
{ body: { session_token: sessionToken }, skipDefaultAuth: true }
|
|
654
|
+
);
|
|
655
|
+
}
|
|
656
|
+
/**
|
|
657
|
+
* Get developer earnings. Uses X-API-Key header (not X-AM-API-Key).
|
|
658
|
+
*
|
|
659
|
+
* @example
|
|
660
|
+
* ```typescript
|
|
661
|
+
* const earnings = await client.developer.getEarnings();
|
|
662
|
+
* console.log(earnings.balances.available);
|
|
663
|
+
* ```
|
|
664
|
+
*/
|
|
665
|
+
async getEarnings() {
|
|
666
|
+
const apiKey = this.http.apiKey;
|
|
667
|
+
if (!apiKey) {
|
|
668
|
+
throw new Error("API key is required for getEarnings()");
|
|
669
|
+
}
|
|
670
|
+
return this.http.request(
|
|
671
|
+
"GET",
|
|
672
|
+
"/developer-earnings",
|
|
673
|
+
{
|
|
674
|
+
skipDefaultAuth: true,
|
|
675
|
+
headers: { "X-API-Key": apiKey }
|
|
676
|
+
}
|
|
677
|
+
);
|
|
678
|
+
}
|
|
679
|
+
/**
|
|
680
|
+
* Get developer stats. Uses standard X-AM-API-Key auth.
|
|
681
|
+
*
|
|
682
|
+
* @example
|
|
683
|
+
* ```typescript
|
|
684
|
+
* const stats = await client.developer.getStats({ period: '30d' });
|
|
685
|
+
* console.log(stats.impressions, stats.clicks);
|
|
686
|
+
* ```
|
|
687
|
+
*/
|
|
688
|
+
async getStats(params) {
|
|
689
|
+
const queryParams = new URLSearchParams();
|
|
690
|
+
if (params?.period) {
|
|
691
|
+
queryParams.append("period", params.period);
|
|
692
|
+
}
|
|
693
|
+
const qs = queryParams.toString();
|
|
694
|
+
const url = `/developer-stats${qs ? "?" + qs : ""}`;
|
|
695
|
+
return this.http.request("GET", url);
|
|
696
|
+
}
|
|
697
|
+
/**
|
|
698
|
+
* Get developer analytics. Uses session token in body (no default auth).
|
|
699
|
+
*
|
|
700
|
+
* @example
|
|
701
|
+
* ```typescript
|
|
702
|
+
* const analytics = await client.developer.getAnalytics('session_token', {
|
|
703
|
+
* start_date: '2026-01-01',
|
|
704
|
+
* group_by: 'week'
|
|
705
|
+
* });
|
|
706
|
+
* ```
|
|
707
|
+
*/
|
|
708
|
+
async getAnalytics(sessionToken, params) {
|
|
709
|
+
if (!sessionToken) {
|
|
710
|
+
throw new Error("sessionToken is required");
|
|
711
|
+
}
|
|
712
|
+
return this.http.request(
|
|
713
|
+
"POST",
|
|
714
|
+
"/developer-analytics",
|
|
715
|
+
{
|
|
716
|
+
body: { session_token: sessionToken, ...params },
|
|
717
|
+
skipDefaultAuth: true
|
|
718
|
+
}
|
|
719
|
+
);
|
|
720
|
+
}
|
|
721
|
+
/**
|
|
722
|
+
* Regenerate API keys. Uses session token in body (no default auth).
|
|
723
|
+
*
|
|
724
|
+
* @example
|
|
725
|
+
* ```typescript
|
|
726
|
+
* const newKeys = await client.developer.regenerateKeys({
|
|
727
|
+
* session_token: 'session_token_here',
|
|
728
|
+
* key_type: 'test'
|
|
729
|
+
* });
|
|
730
|
+
* console.log(newKeys.api_key_test);
|
|
731
|
+
* ```
|
|
732
|
+
*/
|
|
733
|
+
async regenerateKeys(request) {
|
|
734
|
+
if (!request.session_token) {
|
|
735
|
+
throw new Error("session_token is required");
|
|
736
|
+
}
|
|
737
|
+
if (!request.key_type) {
|
|
738
|
+
throw new Error("key_type is required");
|
|
739
|
+
}
|
|
740
|
+
return this.http.request(
|
|
741
|
+
"POST",
|
|
742
|
+
"/regenerate-keys",
|
|
743
|
+
{ body: request, skipDefaultAuth: true }
|
|
744
|
+
);
|
|
745
|
+
}
|
|
746
|
+
};
|
|
747
|
+
|
|
748
|
+
// src/advertiser-client.ts
|
|
749
|
+
var AdvertiserClient = class {
|
|
750
|
+
constructor(http) {
|
|
751
|
+
this.http = http;
|
|
752
|
+
}
|
|
753
|
+
/**
|
|
754
|
+
* Sign up as a new advertiser. No API key auth needed.
|
|
755
|
+
*
|
|
756
|
+
* @example
|
|
757
|
+
* ```typescript
|
|
758
|
+
* const account = await client.advertiser.signup({
|
|
759
|
+
* email: 'ads@company.com',
|
|
760
|
+
* password: 'secure123',
|
|
761
|
+
* company_name: 'Acme Corp'
|
|
762
|
+
* });
|
|
763
|
+
* console.log(account.advertiser_id);
|
|
764
|
+
* ```
|
|
765
|
+
*/
|
|
766
|
+
async signup(request) {
|
|
767
|
+
if (!request.email) {
|
|
768
|
+
throw new Error("email is required");
|
|
769
|
+
}
|
|
770
|
+
if (!request.password) {
|
|
771
|
+
throw new Error("password is required");
|
|
772
|
+
}
|
|
773
|
+
if (!request.company_name) {
|
|
774
|
+
throw new Error("company_name is required");
|
|
775
|
+
}
|
|
776
|
+
return this.http.request(
|
|
777
|
+
"POST",
|
|
778
|
+
"/advertiser-signup",
|
|
779
|
+
{ body: request, skipDefaultAuth: true }
|
|
780
|
+
);
|
|
781
|
+
}
|
|
782
|
+
/**
|
|
783
|
+
* Log in as an advertiser. Returns a session token.
|
|
784
|
+
* No API key auth needed.
|
|
785
|
+
*
|
|
786
|
+
* @example
|
|
787
|
+
* ```typescript
|
|
788
|
+
* const session = await client.advertiser.login({
|
|
789
|
+
* email: 'ads@company.com',
|
|
790
|
+
* password: 'secure123'
|
|
791
|
+
* });
|
|
792
|
+
* console.log(session.session_token);
|
|
793
|
+
* ```
|
|
794
|
+
*/
|
|
795
|
+
async login(request) {
|
|
796
|
+
if (!request.email) {
|
|
797
|
+
throw new Error("email is required");
|
|
798
|
+
}
|
|
799
|
+
if (!request.password) {
|
|
800
|
+
throw new Error("password is required");
|
|
801
|
+
}
|
|
802
|
+
return this.http.request(
|
|
803
|
+
"POST",
|
|
804
|
+
"/advertiser-login",
|
|
805
|
+
{ body: request, skipDefaultAuth: true }
|
|
806
|
+
);
|
|
807
|
+
}
|
|
808
|
+
/**
|
|
809
|
+
* Get advertiser stats. Uses X-Advertiser-Key header or query param.
|
|
810
|
+
*
|
|
811
|
+
* @example
|
|
812
|
+
* ```typescript
|
|
813
|
+
* const stats = await client.advertiser.getStats({
|
|
814
|
+
* advertiser_key: 'adv_key_123',
|
|
815
|
+
* period: '30d'
|
|
816
|
+
* });
|
|
817
|
+
* console.log(stats.budget.remaining);
|
|
818
|
+
* ```
|
|
819
|
+
*/
|
|
820
|
+
async getStats(params) {
|
|
821
|
+
const queryParams = new URLSearchParams();
|
|
822
|
+
if (params?.advertiser_key) {
|
|
823
|
+
queryParams.append("advertiser_key", params.advertiser_key);
|
|
824
|
+
}
|
|
825
|
+
if (params?.period) {
|
|
826
|
+
queryParams.append("period", params.period);
|
|
827
|
+
}
|
|
828
|
+
const qs = queryParams.toString();
|
|
829
|
+
const url = `/advertiser-stats${qs ? "?" + qs : ""}`;
|
|
830
|
+
const headers = {};
|
|
831
|
+
if (params?.advertiser_key) {
|
|
832
|
+
headers["X-Advertiser-Key"] = params.advertiser_key;
|
|
833
|
+
}
|
|
834
|
+
return this.http.request(
|
|
835
|
+
"GET",
|
|
836
|
+
url,
|
|
837
|
+
{ skipDefaultAuth: true, headers }
|
|
838
|
+
);
|
|
839
|
+
}
|
|
840
|
+
/**
|
|
841
|
+
* Get advertiser analytics. Uses session token in body (no default auth).
|
|
842
|
+
*
|
|
843
|
+
* @example
|
|
844
|
+
* ```typescript
|
|
845
|
+
* const analytics = await client.advertiser.getAnalytics('session_token', {
|
|
846
|
+
* start_date: '2026-01-01',
|
|
847
|
+
* group_by: 'week'
|
|
848
|
+
* });
|
|
849
|
+
* ```
|
|
850
|
+
*/
|
|
851
|
+
async getAnalytics(sessionToken, params) {
|
|
852
|
+
if (!sessionToken) {
|
|
853
|
+
throw new Error("sessionToken is required");
|
|
854
|
+
}
|
|
855
|
+
return this.http.request(
|
|
856
|
+
"POST",
|
|
857
|
+
"/advertiser-analytics",
|
|
858
|
+
{
|
|
859
|
+
body: { session_token: sessionToken, ...params },
|
|
860
|
+
skipDefaultAuth: true
|
|
861
|
+
}
|
|
862
|
+
);
|
|
863
|
+
}
|
|
864
|
+
/**
|
|
865
|
+
* Create a new campaign. Uses JWT bearer token for auth.
|
|
866
|
+
*
|
|
867
|
+
* @example
|
|
868
|
+
* ```typescript
|
|
869
|
+
* const campaign = await client.advertiser.createCampaign('jwt_token', {
|
|
870
|
+
* name: 'Summer Sale',
|
|
871
|
+
* ad_type: 'link',
|
|
872
|
+
* daily_budget: 5000,
|
|
873
|
+
* bid_amount: 100,
|
|
874
|
+
* creative: {
|
|
875
|
+
* title: 'Summer Sale - 50% Off',
|
|
876
|
+
* body: 'Limited time offer',
|
|
877
|
+
* cta: 'Shop Now',
|
|
878
|
+
* landing_url: 'https://example.com/sale'
|
|
879
|
+
* }
|
|
880
|
+
* });
|
|
881
|
+
* ```
|
|
882
|
+
*/
|
|
883
|
+
async createCampaign(jwt, request) {
|
|
884
|
+
if (!jwt) {
|
|
885
|
+
throw new Error("jwt is required for campaign creation");
|
|
886
|
+
}
|
|
887
|
+
if (!request.name) {
|
|
888
|
+
throw new Error("name is required");
|
|
889
|
+
}
|
|
890
|
+
if (!request.ad_type) {
|
|
891
|
+
throw new Error("ad_type is required");
|
|
892
|
+
}
|
|
893
|
+
if (!request.creative) {
|
|
894
|
+
throw new Error("creative is required");
|
|
895
|
+
}
|
|
896
|
+
return this.http.request(
|
|
897
|
+
"POST",
|
|
898
|
+
"/campaign-create",
|
|
899
|
+
{
|
|
900
|
+
body: request,
|
|
901
|
+
skipDefaultAuth: true,
|
|
902
|
+
headers: { "Authorization": `Bearer ${jwt}` }
|
|
903
|
+
}
|
|
904
|
+
);
|
|
905
|
+
}
|
|
906
|
+
/**
|
|
907
|
+
* Update an existing campaign. Uses session token in body (no default auth).
|
|
908
|
+
*
|
|
909
|
+
* @example
|
|
910
|
+
* ```typescript
|
|
911
|
+
* const result = await client.advertiser.updateCampaign({
|
|
912
|
+
* campaign_id: 'camp_123',
|
|
913
|
+
* session_token: 'session_token',
|
|
914
|
+
* updates: { name: 'Updated Campaign Name' },
|
|
915
|
+
* status: 'paused'
|
|
916
|
+
* });
|
|
917
|
+
* ```
|
|
918
|
+
*/
|
|
919
|
+
async updateCampaign(request) {
|
|
920
|
+
if (!request.campaign_id) {
|
|
921
|
+
throw new Error("campaign_id is required");
|
|
922
|
+
}
|
|
923
|
+
if (!request.session_token) {
|
|
924
|
+
throw new Error("session_token is required");
|
|
925
|
+
}
|
|
926
|
+
return this.http.request(
|
|
927
|
+
"POST",
|
|
928
|
+
"/campaign-update",
|
|
929
|
+
{ body: request, skipDefaultAuth: true }
|
|
930
|
+
);
|
|
931
|
+
}
|
|
932
|
+
};
|
|
933
|
+
|
|
496
934
|
// src/client.ts
|
|
497
935
|
var DEFAULT_BASE_URL = "https://peruwnbrqkvmrldhpoom.supabase.co/functions/v1";
|
|
498
936
|
var DEFAULT_TIMEOUT_MS = 4e3;
|
|
@@ -501,6 +939,12 @@ var AttentionMarketClient = class {
|
|
|
501
939
|
http;
|
|
502
940
|
agentId;
|
|
503
941
|
appId;
|
|
942
|
+
/** Capability session management (multi-turn AI sessions) */
|
|
943
|
+
sessions;
|
|
944
|
+
/** Developer portal (login, earnings, stats, analytics) */
|
|
945
|
+
developer;
|
|
946
|
+
/** Advertiser portal (signup, login, campaigns, stats) */
|
|
947
|
+
advertiser;
|
|
504
948
|
constructor(config) {
|
|
505
949
|
this.agentId = config.agentId;
|
|
506
950
|
this.appId = config.appId;
|
|
@@ -515,6 +959,9 @@ var AttentionMarketClient = class {
|
|
|
515
959
|
httpConfig.supabaseAnonKey = config.supabaseAnonKey;
|
|
516
960
|
}
|
|
517
961
|
this.http = new HTTPClient(httpConfig);
|
|
962
|
+
this.sessions = new SessionClient(this.http);
|
|
963
|
+
this.developer = new DeveloperClient(this.http);
|
|
964
|
+
this.advertiser = new AdvertiserClient(this.http);
|
|
518
965
|
}
|
|
519
966
|
/**
|
|
520
967
|
* Validate SDK configuration for security
|
|
@@ -713,7 +1160,8 @@ var AttentionMarketClient = class {
|
|
|
713
1160
|
// Developer controls (Phase 2: Revenue Optimization)
|
|
714
1161
|
...params.minCPC !== void 0 && { minCPC: params.minCPC },
|
|
715
1162
|
...params.minRelevanceScore !== void 0 && { minRelevanceScore: params.minRelevanceScore },
|
|
716
|
-
...params.optimizeFor && { optimizeFor: params.optimizeFor }
|
|
1163
|
+
...params.optimizeFor && { optimizeFor: params.optimizeFor },
|
|
1164
|
+
...params.maxWaitMs !== void 0 && { max_wait_ms: params.maxWaitMs }
|
|
717
1165
|
};
|
|
718
1166
|
const response = await this.decideRaw(request, options);
|
|
719
1167
|
if (response && response.creative) {
|
|
@@ -865,6 +1313,24 @@ var AttentionMarketClient = class {
|
|
|
865
1313
|
async sendFeedback(request) {
|
|
866
1314
|
return await this.http.request("POST", "/feedback", { body: request });
|
|
867
1315
|
}
|
|
1316
|
+
/**
|
|
1317
|
+
* Rate the delivery quality of an ad after a verified click.
|
|
1318
|
+
* Requires a prior click event for the tracking_token. Ratings feed
|
|
1319
|
+
* into quality scores (minimum 5 unique raters per campaign).
|
|
1320
|
+
*
|
|
1321
|
+
* @example
|
|
1322
|
+
* ```typescript
|
|
1323
|
+
* await client.rateBusinessDelivery({
|
|
1324
|
+
* tracking_token: ad.tracking_token,
|
|
1325
|
+
* ad_unit_id: ad._ad.unit_id,
|
|
1326
|
+
* rating: 4,
|
|
1327
|
+
* context: 'Relevant product, good landing page'
|
|
1328
|
+
* });
|
|
1329
|
+
* ```
|
|
1330
|
+
*/
|
|
1331
|
+
async rateBusinessDelivery(request) {
|
|
1332
|
+
return await this.http.request("POST", "/rate-business", { body: request });
|
|
1333
|
+
}
|
|
868
1334
|
/**
|
|
869
1335
|
* Fetch default policy constraints and formatting requirements.
|
|
870
1336
|
*/
|
|
@@ -1393,7 +1859,122 @@ var AttentionMarketClient = class {
|
|
|
1393
1859
|
url
|
|
1394
1860
|
);
|
|
1395
1861
|
}
|
|
1396
|
-
//
|
|
1862
|
+
// ==========================================================================
|
|
1863
|
+
// New Methods (v0.18.0)
|
|
1864
|
+
// ==========================================================================
|
|
1865
|
+
/**
|
|
1866
|
+
* Sign up a new agent using the v2 endpoint.
|
|
1867
|
+
* Static method — no API key needed.
|
|
1868
|
+
*
|
|
1869
|
+
* @example
|
|
1870
|
+
* ```typescript
|
|
1871
|
+
* const agent = await AttentionMarketClient.signupAgentV2({
|
|
1872
|
+
* owner_email: 'dev@example.com',
|
|
1873
|
+
* agent_name: 'My Agent',
|
|
1874
|
+
* sdk: 'typescript'
|
|
1875
|
+
* });
|
|
1876
|
+
* console.log(agent.api_key_live);
|
|
1877
|
+
* ```
|
|
1878
|
+
*/
|
|
1879
|
+
static async signupAgentV2(request, baseUrl) {
|
|
1880
|
+
if (!request.owner_email) {
|
|
1881
|
+
throw new Error("owner_email is required");
|
|
1882
|
+
}
|
|
1883
|
+
if (!request.agent_name) {
|
|
1884
|
+
throw new Error("agent_name is required");
|
|
1885
|
+
}
|
|
1886
|
+
const http = new HTTPClient({
|
|
1887
|
+
baseUrl: baseUrl ?? DEFAULT_BASE_URL,
|
|
1888
|
+
timeoutMs: DEFAULT_TIMEOUT_MS,
|
|
1889
|
+
maxRetries: DEFAULT_MAX_RETRIES
|
|
1890
|
+
});
|
|
1891
|
+
return http.request(
|
|
1892
|
+
"POST",
|
|
1893
|
+
"/agent-signup",
|
|
1894
|
+
{ body: request, skipDefaultAuth: true }
|
|
1895
|
+
);
|
|
1896
|
+
}
|
|
1897
|
+
/**
|
|
1898
|
+
* Track an agent-to-agent call using a tracking token.
|
|
1899
|
+
*
|
|
1900
|
+
* @example
|
|
1901
|
+
* ```typescript
|
|
1902
|
+
* await client.trackCall('trk_abc123', { model: 'gpt-4' });
|
|
1903
|
+
* ```
|
|
1904
|
+
*/
|
|
1905
|
+
async trackCall(token, metadata) {
|
|
1906
|
+
if (!token) {
|
|
1907
|
+
throw new Error("token is required for trackCall()");
|
|
1908
|
+
}
|
|
1909
|
+
return this.http.request(
|
|
1910
|
+
"POST",
|
|
1911
|
+
`/track-call/${encodeURIComponent(token)}`,
|
|
1912
|
+
{ body: metadata ? { metadata } : void 0 }
|
|
1913
|
+
);
|
|
1914
|
+
}
|
|
1915
|
+
/**
|
|
1916
|
+
* Scrape a website for knowledge base content.
|
|
1917
|
+
* Requires Bearer JWT and an OpenAI API key header.
|
|
1918
|
+
*
|
|
1919
|
+
* @example
|
|
1920
|
+
* ```typescript
|
|
1921
|
+
* const result = await client.scrapeSite(
|
|
1922
|
+
* { url: 'https://example.com', max_pages: 10 },
|
|
1923
|
+
* 'jwt_token',
|
|
1924
|
+
* 'sk-openai-key'
|
|
1925
|
+
* );
|
|
1926
|
+
* ```
|
|
1927
|
+
*/
|
|
1928
|
+
async scrapeSite(request, jwt, openaiKey) {
|
|
1929
|
+
if (!request.url) {
|
|
1930
|
+
throw new Error("url is required");
|
|
1931
|
+
}
|
|
1932
|
+
if (!jwt) {
|
|
1933
|
+
throw new Error("jwt is required for scrapeSite()");
|
|
1934
|
+
}
|
|
1935
|
+
if (!openaiKey) {
|
|
1936
|
+
throw new Error("openaiKey is required for scrapeSite()");
|
|
1937
|
+
}
|
|
1938
|
+
return this.http.request(
|
|
1939
|
+
"POST",
|
|
1940
|
+
"/scrape-site",
|
|
1941
|
+
{
|
|
1942
|
+
body: request,
|
|
1943
|
+
skipDefaultAuth: true,
|
|
1944
|
+
headers: {
|
|
1945
|
+
"Authorization": `Bearer ${jwt}`,
|
|
1946
|
+
"x-openai-key": openaiKey
|
|
1947
|
+
}
|
|
1948
|
+
}
|
|
1949
|
+
);
|
|
1950
|
+
}
|
|
1951
|
+
/**
|
|
1952
|
+
* Train an agent with custom knowledge.
|
|
1953
|
+
* No default auth — agent ID is in the request body.
|
|
1954
|
+
*
|
|
1955
|
+
* @example
|
|
1956
|
+
* ```typescript
|
|
1957
|
+
* const result = await client.trainAgent({
|
|
1958
|
+
* agent_id: 'agt_123',
|
|
1959
|
+
* training_data: [
|
|
1960
|
+
* { type: 'document', content: 'Product FAQ...' }
|
|
1961
|
+
* ]
|
|
1962
|
+
* });
|
|
1963
|
+
* ```
|
|
1964
|
+
*/
|
|
1965
|
+
async trainAgent(request) {
|
|
1966
|
+
if (!request.agent_id) {
|
|
1967
|
+
throw new Error("agent_id is required");
|
|
1968
|
+
}
|
|
1969
|
+
if (!request.training_data || request.training_data.length === 0) {
|
|
1970
|
+
throw new Error("training_data is required and must not be empty");
|
|
1971
|
+
}
|
|
1972
|
+
return this.http.request(
|
|
1973
|
+
"POST",
|
|
1974
|
+
"/train-agent",
|
|
1975
|
+
{ body: request, skipDefaultAuth: true }
|
|
1976
|
+
);
|
|
1977
|
+
}
|
|
1397
1978
|
};
|
|
1398
1979
|
|
|
1399
1980
|
// src/mock-client.ts
|
|
@@ -1940,10 +2521,13 @@ function suggestTaxonomies(query) {
|
|
|
1940
2521
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1941
2522
|
0 && (module.exports = {
|
|
1942
2523
|
APIRequestError,
|
|
2524
|
+
AdvertiserClient,
|
|
1943
2525
|
AttentionMarketClient,
|
|
1944
2526
|
AttentionMarketError,
|
|
2527
|
+
DeveloperClient,
|
|
1945
2528
|
MockAttentionMarketClient,
|
|
1946
2529
|
NetworkError,
|
|
2530
|
+
SessionClient,
|
|
1947
2531
|
TimeoutError,
|
|
1948
2532
|
buildTaxonomy,
|
|
1949
2533
|
createImpressionEvent,
|