moss-partner-sdk 0.1.0 → 0.3.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 (62) hide show
  1. package/README.md +6 -6
  2. package/dist/__tests__/setup.d.ts +2 -13
  3. package/dist/__tests__/setup.d.ts.map +1 -1
  4. package/dist/__tests__/setup.js +3 -16
  5. package/dist/__tests__/setup.js.map +1 -1
  6. package/dist/account.d.ts +27 -0
  7. package/dist/account.d.ts.map +1 -0
  8. package/dist/account.js +24 -0
  9. package/dist/account.js.map +1 -0
  10. package/dist/analytics.d.ts +4 -15
  11. package/dist/analytics.d.ts.map +1 -1
  12. package/dist/analytics.js +1 -38
  13. package/dist/analytics.js.map +1 -1
  14. package/dist/billing.d.ts +13 -0
  15. package/dist/billing.d.ts.map +1 -0
  16. package/dist/billing.js +18 -0
  17. package/dist/billing.js.map +1 -0
  18. package/dist/client.d.ts +13 -3
  19. package/dist/client.d.ts.map +1 -1
  20. package/dist/client.js +14 -14
  21. package/dist/client.js.map +1 -1
  22. package/dist/customers.d.ts +13 -11
  23. package/dist/customers.d.ts.map +1 -1
  24. package/dist/customers.js +123 -101
  25. package/dist/customers.js.map +1 -1
  26. package/dist/http.d.ts +3 -4
  27. package/dist/http.d.ts.map +1 -1
  28. package/dist/http.js +76 -91
  29. package/dist/http.js.map +1 -1
  30. package/dist/index.d.ts +16 -3
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +17 -3
  33. package/dist/index.js.map +1 -1
  34. package/dist/policies.d.ts +46 -0
  35. package/dist/policies.d.ts.map +1 -0
  36. package/dist/policies.js +40 -0
  37. package/dist/policies.js.map +1 -0
  38. package/dist/settings.d.ts +7 -0
  39. package/dist/settings.d.ts.map +1 -0
  40. package/dist/settings.js +18 -0
  41. package/dist/settings.js.map +1 -0
  42. package/dist/tiers.d.ts +8 -0
  43. package/dist/tiers.d.ts.map +1 -0
  44. package/dist/tiers.js +17 -0
  45. package/dist/tiers.js.map +1 -0
  46. package/dist/types.d.ts +358 -129
  47. package/dist/types.d.ts.map +1 -1
  48. package/dist/types.js +8 -1
  49. package/dist/types.js.map +1 -1
  50. package/dist/usage.d.ts +50 -0
  51. package/dist/usage.d.ts.map +1 -0
  52. package/dist/usage.js +34 -0
  53. package/dist/usage.js.map +1 -0
  54. package/dist/webhooks.d.ts +6 -6
  55. package/dist/webhooks.d.ts.map +1 -1
  56. package/dist/webhooks.js +28 -14
  57. package/dist/webhooks.js.map +1 -1
  58. package/package.json +2 -2
  59. package/dist/utils/case.d.ts +0 -5
  60. package/dist/utils/case.d.ts.map +0 -1
  61. package/dist/utils/case.js +0 -47
  62. package/dist/utils/case.js.map +0 -1
package/dist/customers.js CHANGED
@@ -1,74 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CustomersResource = void 0;
4
+ const types_1 = require("./types");
4
5
  class CustomersResource {
5
6
  constructor(http) {
6
7
  this.http = http;
7
8
  }
8
- mapCustomer(apiResponse) {
9
- return {
10
- id: apiResponse.customerId,
11
- externalId: apiResponse.externalId,
12
- name: apiResponse.name,
13
- email: apiResponse.email || '',
14
- status: apiResponse.status,
15
- sandboxToken: apiResponse.credentials?.customerToken?.token,
16
- productionToken: apiResponse.credentials?.productionToken?.token,
17
- governance: apiResponse.governance || { jurisdictions: [], frameworks: [] },
18
- limits: apiResponse.limits || { agents: 0 },
19
- compliance: apiResponse.compliance || {
20
- score: 0,
21
- status: 'unknown',
22
- issues: [],
23
- lastAssessment: new Date().toISOString()
24
- },
25
- createdAt: apiResponse.createdAt,
26
- updatedAt: apiResponse.updatedAt,
27
- };
28
- }
29
- mapSessionResponse(apiResponse) {
30
- return {
31
- sessionToken: apiResponse.token || apiResponse.sessionToken,
32
- expiresAt: apiResponse.expiresAt,
33
- metadata: apiResponse.metadata,
34
- };
35
- }
36
- parsePdfSignatureTrailer(pdfBuffer) {
37
- const decoder = new TextDecoder('utf-8');
38
- const pdfText = decoder.decode(pdfBuffer);
39
- const endMarker = '%%MOSS-SIGNATURE-V1-END';
40
- const endIndex = pdfText.lastIndexOf(endMarker);
41
- if (endIndex === -1) {
42
- throw new Error('PDF does not contain MOSS signature trailer');
43
- }
44
- const jsonEndIndex = pdfText.lastIndexOf('}', endIndex);
45
- if (jsonEndIndex === -1) {
46
- throw new Error('Invalid MOSS signature trailer format: no closing brace found');
9
+ async create(request, idempotencyKey) {
10
+ const headers = {};
11
+ if (idempotencyKey) {
12
+ headers['Idempotency-Key'] = idempotencyKey;
47
13
  }
48
- const jsonStartPattern = '{"algorithm":';
49
- const jsonStartIndex = pdfText.lastIndexOf(jsonStartPattern, endIndex);
50
- if (jsonStartIndex === -1) {
51
- throw new Error('Invalid MOSS signature trailer format: algorithm marker not found');
52
- }
53
- const jsonText = pdfText.substring(jsonStartIndex, jsonEndIndex + 1).trim();
54
- const trailerMetadata = JSON.parse(jsonText);
55
- const signedPayload = JSON.parse(trailerMetadata.signed_payload);
56
- return {
57
- reportId: signedPayload.report_id,
58
- signature: trailerMetadata.signature_hex,
59
- keyId: signedPayload.key_id || trailerMetadata.key_id || 'moss_prod_2026_Q1',
60
- generatedAt: signedPayload.generated_at,
61
- downloadUrl: trailerMetadata.verify_url,
62
- data: signedPayload,
63
- };
64
- }
65
- async create(request) {
66
14
  const response = await this.http.request({
67
15
  method: 'POST',
68
16
  path: '/v1/partner/customers',
69
17
  body: request,
18
+ headers,
70
19
  });
71
- return this.mapCustomer(response.data);
20
+ return response.data;
72
21
  }
73
22
  async list(params) {
74
23
  const response = await this.http.request({
@@ -76,19 +25,18 @@ class CustomersResource {
76
25
  path: '/v1/partner/customers',
77
26
  query: params,
78
27
  });
79
- let customers = [];
80
- if (response.data.data && Array.isArray(response.data.data)) {
81
- customers = response.data.data.map((customer) => this.mapCustomer(customer));
82
- }
83
- else if (response.data.customers && Array.isArray(response.data.customers)) {
84
- customers = response.data.customers.map((customer) => this.mapCustomer(customer));
85
- }
86
- else if (Array.isArray(response.data)) {
87
- customers = response.data.map((customer) => this.mapCustomer(customer));
88
- }
28
+ const customers = response.data.customers || [];
29
+ const limit = params?.limit || 100;
30
+ const offset = params?.offset || 0;
31
+ const total = customers.length;
89
32
  return {
90
- data: customers,
91
- pagination: response.data.pagination || { hasMore: false },
33
+ customers,
34
+ pagination: {
35
+ total,
36
+ limit,
37
+ offset,
38
+ has_more: total === limit,
39
+ },
92
40
  };
93
41
  }
94
42
  async get(customerId) {
@@ -96,7 +44,7 @@ class CustomersResource {
96
44
  method: 'GET',
97
45
  path: `/v1/partner/customers/${customerId}`,
98
46
  });
99
- return this.mapCustomer(response.data);
47
+ return response.data;
100
48
  }
101
49
  async update(customerId, request) {
102
50
  const response = await this.http.request({
@@ -104,68 +52,142 @@ class CustomersResource {
104
52
  path: `/v1/partner/customers/${customerId}`,
105
53
  body: request,
106
54
  });
107
- return this.mapCustomer(response.data);
55
+ return response.data;
108
56
  }
109
- async promote(customerId, request) {
57
+ async promote(customerId, request, idempotencyKey) {
58
+ const headers = {};
59
+ if (idempotencyKey) {
60
+ headers['Idempotency-Key'] = idempotencyKey;
61
+ }
110
62
  const response = await this.http.request({
111
63
  method: 'POST',
112
64
  path: `/v1/partner/customers/${customerId}/promote`,
113
65
  body: request,
66
+ headers,
114
67
  });
115
- return this.mapCustomer(response.data);
68
+ return response.data;
116
69
  }
117
- async suspend(customerId, request) {
70
+ async suspend(customerId, request, idempotencyKey) {
71
+ const headers = {};
72
+ if (idempotencyKey) {
73
+ headers['Idempotency-Key'] = idempotencyKey;
74
+ }
118
75
  const response = await this.http.request({
119
76
  method: 'POST',
120
77
  path: `/v1/partner/customers/${customerId}/suspend`,
121
78
  body: request,
79
+ headers,
122
80
  });
123
- return this.mapCustomer(response.data);
81
+ return response.data;
124
82
  }
125
- async reactivate(customerId, request) {
83
+ async reactivate(customerId, request, idempotencyKey) {
84
+ const headers = {};
85
+ if (idempotencyKey) {
86
+ headers['Idempotency-Key'] = idempotencyKey;
87
+ }
126
88
  const response = await this.http.request({
127
89
  method: 'POST',
128
90
  path: `/v1/partner/customers/${customerId}/reactivate`,
129
91
  body: request,
92
+ headers,
93
+ });
94
+ return response.data;
95
+ }
96
+ async delete(customerId) {
97
+ const response = await this.http.request({
98
+ method: 'DELETE',
99
+ path: `/v1/partner/customers/${customerId}`,
130
100
  });
131
- return this.mapCustomer(response.data);
101
+ return response.data;
132
102
  }
133
- async createSession(customerId, request) {
103
+ async createSession(customerId, idempotencyKey) {
104
+ const headers = {};
105
+ if (idempotencyKey) {
106
+ headers['Idempotency-Key'] = idempotencyKey;
107
+ }
134
108
  const response = await this.http.request({
135
109
  method: 'POST',
136
110
  path: `/v1/partner/customers/${customerId}/session`,
137
- body: request,
111
+ headers,
138
112
  });
139
- return this.mapSessionResponse(response.data);
113
+ return response.data;
140
114
  }
141
- async revokeSession(customerId, sessionToken) {
115
+ async revokeSession(customerId, sessionId) {
116
+ const body = {};
117
+ if (sessionId) {
118
+ body.session_id = sessionId;
119
+ }
142
120
  await this.http.request({
143
121
  method: 'DELETE',
144
122
  path: `/v1/partner/customers/${customerId}/session`,
145
- body: { sessionToken },
123
+ body,
146
124
  });
147
125
  }
148
- async complianceReport(customerId, request) {
149
- const params = new URLSearchParams();
150
- if (request?.format)
151
- params.append('format', request.format);
152
- if (request?.frameworks)
153
- params.append('frameworks', request.frameworks.join(','));
154
- const path = `/v1/partner/customers/${customerId}/compliance-report`;
155
- const queryString = params.toString();
156
- const url = `${this.http.baseUrl}${path}${queryString ? `?${queryString}` : ''}`;
157
- const response = await fetch(url, {
158
- headers: {
159
- 'Authorization': `Bearer ${this.http.apiKey}`,
160
- 'User-Agent': 'moss-partner-sdk-ts/0.1.0',
161
- },
126
+ async invite(customerId, request) {
127
+ const response = await this.http.request({
128
+ method: 'POST',
129
+ path: `/v1/partner/customers/${customerId}/invite`,
130
+ body: request,
162
131
  });
163
- if (!response.ok) {
164
- throw new Error(`Failed to fetch compliance report: ${response.status} ${response.statusText}`);
165
- }
166
- const pdfBuffer = await response.arrayBuffer();
132
+ return response.data;
133
+ }
134
+ async promotionReadiness(customerId) {
135
+ const response = await this.http.request({
136
+ method: 'GET',
137
+ path: `/v1/partner/customers/${customerId}/promotion-readiness`,
138
+ });
139
+ return response.data;
140
+ }
141
+ async mgi(customerId) {
142
+ const response = await this.http.request({
143
+ method: 'GET',
144
+ path: `/v1/partner/customers/${customerId}/mgi`,
145
+ });
146
+ return response.data;
147
+ }
148
+ async complianceReport(customerId) {
149
+ const pdfBuffer = await this.http.requestBytes('GET', `/v1/partner/customers/${customerId}/compliance-report`);
167
150
  return this.parsePdfSignatureTrailer(pdfBuffer);
168
151
  }
152
+ parsePdfSignatureTrailer(pdfBuffer) {
153
+ const decoder = new TextDecoder('utf-8');
154
+ const pdfText = decoder.decode(pdfBuffer);
155
+ const endMarker = '%%MOSS-SIGNATURE-V1-END';
156
+ const endIndex = pdfText.lastIndexOf(endMarker);
157
+ if (endIndex === -1) {
158
+ throw new types_1.MossParseError('PDF does not contain MOSS signature trailer');
159
+ }
160
+ const beginMarker = '%%MOSS-SIGNATURE-V1-BEGIN';
161
+ const beginIndex = pdfText.lastIndexOf(beginMarker, endIndex);
162
+ if (beginIndex === -1) {
163
+ throw new types_1.MossParseError('Invalid MOSS signature trailer: begin marker not found');
164
+ }
165
+ const jsonStart = beginIndex + beginMarker.length;
166
+ const jsonEnd = endIndex;
167
+ const jsonText = pdfText.substring(jsonStart, jsonEnd).trim();
168
+ let trailer;
169
+ try {
170
+ trailer = JSON.parse(jsonText);
171
+ }
172
+ catch (e) {
173
+ throw new types_1.MossParseError(`Invalid MOSS signature trailer JSON: ${e}`);
174
+ }
175
+ let signedPayload;
176
+ try {
177
+ signedPayload = JSON.parse(trailer.signed_payload);
178
+ }
179
+ catch (e) {
180
+ throw new types_1.MossParseError(`Invalid signed_payload in trailer: ${e}`);
181
+ }
182
+ return {
183
+ report_id: signedPayload.report_id,
184
+ signature: trailer.signature_hex,
185
+ key_id: signedPayload.key_id || trailer.key_id || 'moss_prod_2026_Q1',
186
+ generated_at: signedPayload.generated_at,
187
+ download_url: trailer.verify_url,
188
+ data: signedPayload,
189
+ };
190
+ }
169
191
  }
170
192
  exports.CustomersResource = CustomersResource;
171
193
  //# sourceMappingURL=customers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"customers.js","sourceRoot":"","sources":["../src/customers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"customers.js","sourceRoot":"","sources":["../src/customers.ts"],"names":[],"mappings":"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"}
package/dist/http.d.ts CHANGED
@@ -3,7 +3,7 @@ export interface HTTPRequestOptions {
3
3
  method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
4
4
  path: string;
5
5
  body?: any;
6
- query?: Record<string, string | number | boolean | undefined>;
6
+ query?: Record<string, any>;
7
7
  headers?: Record<string, string>;
8
8
  }
9
9
  export interface HTTPResponse<T = any> {
@@ -11,21 +11,20 @@ export interface HTTPResponse<T = any> {
11
11
  status: number;
12
12
  headers: Record<string, string>;
13
13
  }
14
+ export declare const SDK_VERSION = "0.2.0";
14
15
  export declare class HTTPClient {
15
16
  private baseUrl;
16
17
  private apiKey;
17
18
  private timeout;
18
19
  private retries;
19
- private logger?;
20
- private testMode;
21
20
  constructor(config: MossPartnerConfig);
22
21
  request<T = any>(options: HTTPRequestOptions): Promise<HTTPResponse<T>>;
22
+ requestBytes(method: 'GET' | 'POST', path: string, query?: Record<string, string | number | boolean | undefined>): Promise<ArrayBuffer>;
23
23
  private executeRequest;
24
24
  private buildURL;
25
25
  private buildHeaders;
26
26
  private extractHeaders;
27
27
  private getRetryDelay;
28
28
  private sleep;
29
- private mockRequest;
30
29
  }
31
30
  //# sourceMappingURL=http.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iBAAiB,EAA0C,MAAM,SAAS,CAAC;AAGpF,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,GAAG;IACnC,IAAI,EAAE,CAAC,CAAC;IACR,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAU;gBAEd,MAAM,EAAE,iBAAiB;IAY/B,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YA6D/D,cAAc;IAoE5B,OAAO,CAAC,QAAQ;IAoBhB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,WAAW;CAqDpB"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,iBAAiB,EAAkC,MAAM,SAAS,CAAC;AAE5E,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,GAAG;IACnC,IAAI,EAAE,CAAC,CAAC;IACR,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,eAAO,MAAM,WAAW,UAAU,CAAC;AAEnC,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,iBAAiB;IAa/B,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAiCvE,YAAY,CAChB,MAAM,EAAE,KAAK,GAAG,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GAC5D,OAAO,CAAC,WAAW,CAAC;YA2DT,cAAc;IAyF5B,OAAO,CAAC,QAAQ;IAoBhB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,KAAK;CAGd"}
package/dist/http.js CHANGED
@@ -1,42 +1,24 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.HTTPClient = void 0;
3
+ exports.HTTPClient = exports.SDK_VERSION = void 0;
4
4
  const types_1 = require("./types");
5
- const case_1 = require("./utils/case");
5
+ exports.SDK_VERSION = '0.2.0';
6
6
  class HTTPClient {
7
7
  constructor(config) {
8
- this.baseUrl = config.baseUrl || 'https://api.mosscomputing.com';
8
+ this.baseUrl = (config.baseUrl || 'https://api.mosscomputing.com').replace(/\/$/, '');
9
9
  this.apiKey = config.apiKey;
10
10
  this.timeout = config.timeout || 30000;
11
11
  this.retries = config.retries || 3;
12
- this.logger = config.logger;
13
- this.testMode = config.testMode || false;
14
- this.baseUrl = this.baseUrl.replace(/\/$/, '');
15
12
  }
16
13
  async request(options) {
17
- if (this.testMode) {
18
- return this.mockRequest(options);
19
- }
20
14
  let lastError = null;
21
- const startTime = Date.now();
22
15
  for (let attempt = 0; attempt <= this.retries; attempt++) {
23
16
  try {
24
17
  if (attempt > 0) {
25
18
  const delay = this.getRetryDelay(attempt);
26
- this.logger?.debug(`Retrying request (attempt ${attempt + 1}/${this.retries + 1}) after ${delay}ms`, {
27
- path: options.path,
28
- });
29
19
  await this.sleep(delay);
30
20
  }
31
21
  const response = await this.executeRequest(options);
32
- const duration = Date.now() - startTime;
33
- this.logger?.debug(`Request successful`, {
34
- path: options.path,
35
- method: options.method,
36
- status: response.status,
37
- duration,
38
- attempt: attempt + 1,
39
- });
40
22
  return response;
41
23
  }
42
24
  catch (error) {
@@ -47,49 +29,103 @@ class HTTPClient {
47
29
  if (attempt === this.retries) {
48
30
  break;
49
31
  }
50
- this.logger?.warn(`Request failed, will retry`, {
51
- path: options.path,
52
- attempt: attempt + 1,
53
- error: error.message,
54
- });
55
32
  }
56
33
  }
57
- const duration = Date.now() - startTime;
58
- this.logger?.error(`Request failed after ${this.retries + 1} attempts`, {
59
- path: options.path,
60
- duration,
61
- error: lastError?.message,
62
- });
63
34
  throw lastError;
64
35
  }
36
+ async requestBytes(method, path, query) {
37
+ const url = this.buildURL(path, query);
38
+ const headers = this.buildHeaders();
39
+ const controller = new AbortController();
40
+ const timeoutId = setTimeout(() => controller.abort(), this.timeout);
41
+ try {
42
+ const response = await fetch(url, {
43
+ method,
44
+ headers,
45
+ signal: controller.signal,
46
+ });
47
+ clearTimeout(timeoutId);
48
+ if (!response.ok) {
49
+ let errorMessage = `HTTP ${response.status}`;
50
+ let errorCode = 'api_error';
51
+ let errorDetails;
52
+ const contentType = response.headers.get('content-type');
53
+ if (contentType?.includes('application/json')) {
54
+ try {
55
+ const errorData = await response.json();
56
+ errorCode = errorData.error || errorCode;
57
+ errorMessage = errorData.message || errorData.error || errorMessage;
58
+ errorDetails = errorData;
59
+ }
60
+ catch {
61
+ }
62
+ }
63
+ throw new types_1.MossAPIError(errorMessage, response.status, errorCode, errorDetails);
64
+ }
65
+ return await response.arrayBuffer();
66
+ }
67
+ catch (error) {
68
+ clearTimeout(timeoutId);
69
+ if (error instanceof types_1.MossAPIError) {
70
+ throw error;
71
+ }
72
+ if (error.name === 'AbortError') {
73
+ throw new types_1.MossNetworkError(`Request timeout after ${this.timeout}ms`, error);
74
+ }
75
+ throw new types_1.MossNetworkError(`Network error: ${error.message}`, error);
76
+ }
77
+ }
65
78
  async executeRequest(options) {
66
79
  const url = this.buildURL(options.path, options.query);
67
80
  const headers = this.buildHeaders(options.headers);
68
81
  const controller = new AbortController();
69
82
  const timeoutId = setTimeout(() => controller.abort(), this.timeout);
70
83
  try {
71
- const requestBody = options.body ? (0, case_1.keysToSnakeCase)(options.body) : undefined;
72
84
  const response = await fetch(url, {
73
85
  method: options.method,
74
86
  headers,
75
- body: requestBody ? JSON.stringify(requestBody) : undefined,
87
+ body: options.body ? JSON.stringify(options.body) : undefined,
76
88
  signal: controller.signal,
77
89
  });
78
90
  clearTimeout(timeoutId);
79
91
  const responseHeaders = this.extractHeaders(response.headers);
92
+ if (!response.ok) {
93
+ let errorMessage = `HTTP ${response.status}`;
94
+ let errorCode = 'api_error';
95
+ let errorDetails;
96
+ const contentType = response.headers.get('content-type');
97
+ if (contentType?.includes('application/json')) {
98
+ let data;
99
+ try {
100
+ data = await response.json();
101
+ }
102
+ catch {
103
+ data = null;
104
+ }
105
+ if (data) {
106
+ errorCode = data.error || errorCode;
107
+ errorMessage = data.message || data.error || errorMessage;
108
+ errorDetails = data;
109
+ }
110
+ }
111
+ throw new types_1.MossAPIError(errorMessage, response.status, errorCode, errorDetails);
112
+ }
113
+ if (response.status === 204) {
114
+ return {
115
+ data: {},
116
+ status: 204,
117
+ headers: responseHeaders,
118
+ };
119
+ }
80
120
  const contentType = response.headers.get('content-type');
81
121
  const isJson = contentType?.includes('application/json');
82
122
  let data;
83
123
  if (isJson) {
84
124
  data = await response.json();
85
- data = (0, case_1.keysToCamelCase)(data);
86
125
  }
87
126
  else {
88
127
  data = await response.text();
89
128
  }
90
- if (!response.ok) {
91
- throw new types_1.MossAPIError(data?.message || data?.error?.message || `HTTP ${response.status}`, response.status, data?.error || data?.error?.code || 'api_error', data?.details || data?.error?.details);
92
- }
93
129
  return {
94
130
  data: data,
95
131
  status: response.status,
@@ -112,7 +148,7 @@ class HTTPClient {
112
148
  if (query) {
113
149
  const params = new URLSearchParams();
114
150
  for (const [key, value] of Object.entries(query)) {
115
- if (value !== undefined) {
151
+ if (value !== undefined && value !== null) {
116
152
  params.append(key, String(value));
117
153
  }
118
154
  }
@@ -127,7 +163,7 @@ class HTTPClient {
127
163
  return {
128
164
  'Content-Type': 'application/json',
129
165
  'Authorization': `Bearer ${this.apiKey}`,
130
- 'User-Agent': 'moss-partner-sdk-ts/0.1.0',
166
+ 'User-Agent': `moss-partner-sdk-ts/${exports.SDK_VERSION}`,
131
167
  ...customHeaders,
132
168
  };
133
169
  }
@@ -144,57 +180,6 @@ class HTTPClient {
144
180
  sleep(ms) {
145
181
  return new Promise((resolve) => setTimeout(resolve, ms));
146
182
  }
147
- mockRequest(options) {
148
- this.logger?.debug(`Mock request (test mode)`, {
149
- path: options.path,
150
- method: options.method,
151
- });
152
- let mockData = { success: true };
153
- if (options.path.includes('/customers')) {
154
- if (options.method === 'POST') {
155
- mockData = {
156
- id: 'cust_test_' + Date.now(),
157
- externalId: options.body?.externalId || 'test_ext',
158
- name: options.body?.name || 'Test Corp',
159
- email: options.body?.email || 'test@example.com',
160
- status: 'sandbox_active',
161
- sandboxToken: 'cust_test_token_' + Date.now(),
162
- governance: options.body?.governance || { jurisdictions: [], frameworks: [] },
163
- limits: { agents: 10 },
164
- compliance: { score: 85, status: 'compliant', issues: [], lastAssessment: new Date().toISOString() },
165
- createdAt: new Date().toISOString(),
166
- updatedAt: new Date().toISOString(),
167
- };
168
- }
169
- else if (options.method === 'GET' && options.path.match(/\/customers\/[^/]+$/)) {
170
- mockData = {
171
- id: 'cust_test_123',
172
- externalId: 'test_ext',
173
- name: 'Test Corp',
174
- email: 'test@example.com',
175
- status: 'production_active',
176
- sandboxToken: 'cust_test_token',
177
- productionToken: 'cust_prod_token',
178
- governance: { jurisdictions: ['US'], frameworks: ['nist_ai_rmf'] },
179
- limits: { agents: 50 },
180
- compliance: { score: 90, status: 'compliant', issues: [], lastAssessment: new Date().toISOString() },
181
- createdAt: new Date().toISOString(),
182
- updatedAt: new Date().toISOString(),
183
- };
184
- }
185
- else if (options.method === 'GET') {
186
- mockData = {
187
- data: [],
188
- pagination: { hasMore: false },
189
- };
190
- }
191
- }
192
- return Promise.resolve({
193
- data: mockData,
194
- status: 200,
195
- headers: { 'content-type': 'application/json' },
196
- });
197
- }
198
183
  }
199
184
  exports.HTTPClient = HTTPClient;
200
185
  //# sourceMappingURL=http.js.map