@stamn/sdk 0.1.0-alpha.1 → 0.1.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -122,6 +122,29 @@ interface LeaderboardEntry {
122
122
  interface HealthCheckResult {
123
123
  ok: boolean;
124
124
  }
125
+ interface ServiceListing {
126
+ id: string;
127
+ participantId: string;
128
+ serviceTag: string;
129
+ name: string;
130
+ description: string;
131
+ priceCents: number;
132
+ isActive: boolean;
133
+ createdAt: string;
134
+ updatedAt: string;
135
+ }
136
+ interface CreateServiceListingOptions {
137
+ serviceTag: string;
138
+ name: string;
139
+ description: string;
140
+ priceCents: number;
141
+ }
142
+ interface UpdateServiceListingOptions {
143
+ name?: string;
144
+ description?: string;
145
+ priceCents?: number;
146
+ isActive?: boolean;
147
+ }
125
148
 
126
149
  declare abstract class Resource {
127
150
  protected readonly client: Requestable;
@@ -184,6 +207,13 @@ declare class HealthResource extends Resource {
184
207
  check(): Promise<HealthCheckResult>;
185
208
  }
186
209
 
210
+ declare class ServicesResource extends Resource {
211
+ list(participantId: string): Promise<ServiceListing[]>;
212
+ create(participantId: string, options: CreateServiceListingOptions): Promise<ServiceListing>;
213
+ update(participantId: string, serviceId: string, options: UpdateServiceListingOptions): Promise<ServiceListing>;
214
+ delete(participantId: string, serviceId: string): Promise<void>;
215
+ }
216
+
187
217
  declare class StamnApiError extends Error {
188
218
  readonly status: number;
189
219
  constructor(message: string, status: number);
@@ -199,6 +229,7 @@ declare class StamnClient implements Requestable {
199
229
  readonly directory: DirectoryResource;
200
230
  readonly leaderboard: LeaderboardResource;
201
231
  readonly health: HealthResource;
232
+ readonly services: ServicesResource;
202
233
  constructor(options?: StamnClientOptions);
203
234
  setApiKey(apiKey: string): void;
204
235
  request<T>(method: string, path: string, body?: unknown): Promise<T>;
@@ -209,4 +240,4 @@ declare class StamnClient implements Requestable {
209
240
  private parseErrorResponse;
210
241
  }
211
242
 
212
- export { type ApiKeyCreateResponse, type ApiKeySummary, ApiKeysResource, AuthResource, type BalanceResponse, type DeviceFlowData, type DeviceFlowStatus, type DirectoryEntry, DirectoryResource, type DirectoryResponse, type DirectoryServiceEntry, type HealthCheckResult, HealthResource, type LeaderboardEntry, LeaderboardResource, type LedgerEntry, type OnchainBalanceResponse, type Participant, type ParticipantSettings, ParticipantsResource, type Requestable, Resource, type RetryOptions, StamnApiError, StamnClient, type StamnClientOptions };
243
+ export { type ApiKeyCreateResponse, type ApiKeySummary, ApiKeysResource, AuthResource, type BalanceResponse, type CreateServiceListingOptions, type DeviceFlowData, type DeviceFlowStatus, type DirectoryEntry, DirectoryResource, type DirectoryResponse, type DirectoryServiceEntry, type HealthCheckResult, HealthResource, type LeaderboardEntry, LeaderboardResource, type LedgerEntry, type OnchainBalanceResponse, type Participant, type ParticipantSettings, ParticipantsResource, type Requestable, Resource, type RetryOptions, type ServiceListing, ServicesResource, StamnApiError, StamnClient, type StamnClientOptions, type UpdateServiceListingOptions };
package/dist/index.js CHANGED
@@ -186,6 +186,39 @@ var HealthResource = class extends Resource {
186
186
  }
187
187
  };
188
188
 
189
+ // src/resources/services.ts
190
+ var ServicesResource = class extends Resource {
191
+ async list(participantId) {
192
+ const res = await this.client.request(
193
+ "GET",
194
+ `/v1/participants/${participantId}/services`
195
+ );
196
+ return res.data;
197
+ }
198
+ async create(participantId, options) {
199
+ const res = await this.client.request(
200
+ "POST",
201
+ `/v1/participants/${participantId}/services`,
202
+ options
203
+ );
204
+ return res.data;
205
+ }
206
+ async update(participantId, serviceId, options) {
207
+ const res = await this.client.request(
208
+ "PATCH",
209
+ `/v1/participants/${participantId}/services/${serviceId}`,
210
+ options
211
+ );
212
+ return res.data;
213
+ }
214
+ async delete(participantId, serviceId) {
215
+ await this.client.request(
216
+ "DELETE",
217
+ `/v1/participants/${participantId}/services/${serviceId}`
218
+ );
219
+ }
220
+ };
221
+
189
222
  // src/client.ts
190
223
  var StamnApiError = class extends Error {
191
224
  constructor(message, status) {
@@ -212,6 +245,7 @@ var StamnClient = class {
212
245
  directory;
213
246
  leaderboard;
214
247
  health;
248
+ services;
215
249
  constructor(options = {}) {
216
250
  this.apiKey = options.apiKey;
217
251
  this.retryOptions = { ...DEFAULT_RETRY, ...options.retry };
@@ -222,6 +256,7 @@ var StamnClient = class {
222
256
  this.directory = new DirectoryResource(this);
223
257
  this.leaderboard = new LeaderboardResource(this);
224
258
  this.health = new HealthResource(this);
259
+ this.services = new ServicesResource(this);
225
260
  }
226
261
  setApiKey(apiKey) {
227
262
  this.apiKey = apiKey;
@@ -297,6 +332,7 @@ export {
297
332
  LeaderboardResource,
298
333
  ParticipantsResource,
299
334
  Resource,
335
+ ServicesResource,
300
336
  StamnApiError,
301
337
  StamnClient
302
338
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/resources/base.ts","../src/resources/auth.ts","../src/resources/agents.ts","../src/resources/participants.ts","../src/resources/api-keys.ts","../src/resources/directory.ts","../src/resources/leaderboard.ts","../src/resources/health.ts","../src/client.ts"],"sourcesContent":["import type { Requestable } from '@/types';\n\nexport abstract class Resource {\n constructor(protected readonly client: Requestable) {}\n}\n","import { Resource } from '@/resources/base';\nimport type { DeviceFlowData, DeviceFlowStatus } from '@/types';\n\nconst DEFAULT_POLL_INTERVAL_MS = 5_000;\nconst DEFAULT_TIMEOUT_MS = 300_000; // 5 minutes\n\nexport class AuthResource extends Resource {\n\n async initiateDeviceFlow(): Promise<DeviceFlowData> {\n const res = await this.client.request<{ data: DeviceFlowData }>(\n 'POST',\n '/v1/auth/device-codes',\n );\n return res.data;\n }\n\n async getDeviceFlowStatus(deviceCode: string): Promise<DeviceFlowStatus> {\n const res = await this.client.request<{ data: DeviceFlowStatus }>(\n 'GET',\n `/v1/auth/device-codes/${deviceCode}`,\n );\n return res.data;\n }\n\n async pollForApproval(\n deviceCode: string,\n options?: { pollIntervalMs?: number; timeoutMs?: number },\n ): Promise<string> {\n const pollInterval = options?.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;\n const timeout = options?.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const deadline = Date.now() + timeout;\n\n while (Date.now() < deadline) {\n await new Promise((r) => setTimeout(r, pollInterval));\n\n try {\n const status = await this.getDeviceFlowStatus(deviceCode);\n\n if (status.status === 'approved' && status.apiKey) {\n return status.apiKey;\n }\n\n if (status.status === 'expired') {\n throw new Error('Login code expired. Try again.');\n }\n } catch (err) {\n if ((err as Error).message.includes('expired')) throw err;\n }\n }\n\n throw new Error('Login timed out. Try again.');\n }\n}\n","import { Resource } from '@/resources/base';\nimport type { Participant } from '@/types';\n\nexport class AgentsResource extends Resource {\n\n async create(options?: { name?: string; description?: string }): Promise<Participant> {\n const res = await this.client.request<{ data: Participant }>(\n 'POST',\n '/v1/participants',\n {\n name: options?.name,\n description: options?.description,\n },\n );\n return res.data;\n }\n}\n","import { Resource } from '@/resources/base';\nimport type {\n Participant,\n ParticipantSettings,\n BalanceResponse,\n OnchainBalanceResponse,\n LedgerEntry,\n} from '@/types';\n\nexport class ParticipantsResource extends Resource {\n\n async create(options?: { name?: string; description?: string }): Promise<Participant> {\n const res = await this.client.request<{ data: Participant }>(\n 'POST',\n '/v1/participants',\n {\n name: options?.name || undefined,\n description: options?.description || undefined,\n },\n );\n return res.data;\n }\n\n async list(): Promise<Participant[]> {\n const res = await this.client.request<{ data: Participant[] }>(\n 'GET',\n '/v1/participants',\n );\n return res.data;\n }\n\n async get(participantId: string): Promise<Participant> {\n const res = await this.client.request<{ data: Participant }>(\n 'GET',\n `/v1/participants/${participantId}`,\n );\n return res.data;\n }\n\n async update(\n participantId: string,\n data: {\n settings?: Partial<ParticipantSettings>;\n status?: 'active' | 'deleted';\n },\n ): Promise<Participant> {\n const res = await this.client.request<{ data: Participant }>(\n 'PATCH',\n `/v1/participants/${participantId}`,\n data,\n );\n return res.data;\n }\n\n async getBalance(participantId: string): Promise<BalanceResponse> {\n const res = await this.client.request<{ data: BalanceResponse }>(\n 'GET',\n `/v1/participants/${participantId}/balance`,\n );\n return res.data;\n }\n\n async getOnchainBalance(participantId: string): Promise<OnchainBalanceResponse> {\n const res = await this.client.request<{ data: OnchainBalanceResponse }>(\n 'GET',\n `/v1/participants/${participantId}/onchain-balance`,\n );\n return res.data;\n }\n\n async getLedgerEntries(participantId: string): Promise<LedgerEntry[]> {\n const res = await this.client.request<{ data: LedgerEntry[] }>(\n 'GET',\n `/v1/participants/${participantId}/ledger-entries`,\n );\n return res.data;\n }\n\n async deposit(\n participantId: string,\n data: { amountCents: number },\n ): Promise<LedgerEntry> {\n const res = await this.client.request<{ data: LedgerEntry }>(\n 'POST',\n `/v1/participants/${participantId}/deposits`,\n data,\n );\n return res.data;\n }\n}\n","import { Resource } from '@/resources/base';\nimport type { ApiKeyCreateResponse, ApiKeySummary } from '@/types';\n\nexport class ApiKeysResource extends Resource {\n\n async create(): Promise<ApiKeyCreateResponse> {\n const res = await this.client.request<{ data: ApiKeyCreateResponse }>(\n 'POST',\n '/v1/api-keys',\n );\n return res.data;\n }\n\n async list(): Promise<ApiKeySummary[]> {\n const res = await this.client.request<{ data: ApiKeySummary[] }>(\n 'GET',\n '/v1/api-keys',\n );\n return res.data;\n }\n\n async revoke(id: string): Promise<void> {\n await this.client.request('DELETE', `/v1/api-keys/${id}`);\n }\n}\n","import { Resource } from '@/resources/base';\nimport type { DirectoryResponse } from '@/types';\n\nexport class DirectoryResource extends Resource {\n\n async list(options?: { serviceTag?: string; name?: string }): Promise<DirectoryResponse> {\n const params = new URLSearchParams();\n if (options?.serviceTag) params.set('serviceTag', options.serviceTag);\n if (options?.name) params.set('name', options.name);\n const query = params.toString();\n const path = query ? `/v1/directory?${query}` : '/v1/directory';\n\n const res = await this.client.request<{ data: DirectoryResponse }>(\n 'GET',\n path,\n );\n return res.data;\n }\n}\n","import { Resource } from '@/resources/base';\nimport type { LeaderboardEntry } from '@/types';\n\nexport class LeaderboardResource extends Resource {\n\n async get(): Promise<LeaderboardEntry[]> {\n const res = await this.client.request<{ data: LeaderboardEntry[] }>(\n 'GET',\n '/v1/leaderboard',\n );\n return res.data;\n }\n}\n","import { Resource } from '@/resources/base';\nimport type { HealthCheckResult } from '@/types';\n\nexport class HealthResource extends Resource {\n\n async check(): Promise<HealthCheckResult> {\n try {\n await this.client.request('GET', '/v1/health');\n return { ok: true };\n } catch {\n return { ok: false };\n }\n }\n}\n","import type { StamnClientOptions, Requestable } from '@/types';\nimport { AuthResource } from '@/resources/auth';\nimport { AgentsResource } from '@/resources/agents';\nimport { ParticipantsResource } from '@/resources/participants';\nimport { ApiKeysResource } from '@/resources/api-keys';\nimport { DirectoryResource } from '@/resources/directory';\nimport { LeaderboardResource } from '@/resources/leaderboard';\nimport { HealthResource } from '@/resources/health';\n\nexport class StamnApiError extends Error {\n constructor(\n message: string,\n public readonly status: number,\n ) {\n super(message);\n this.name = \"StamnApiError\";\n }\n}\n\ninterface ResolvedRetryOptions {\n maxRetries: number;\n initialDelayMs: number;\n backoffMultiplier: number;\n maxDelayMs: number;\n}\n\nconst DEFAULT_RETRY: ResolvedRetryOptions = {\n maxRetries: 0,\n initialDelayMs: 500,\n backoffMultiplier: 2,\n maxDelayMs: 10_000,\n};\n\nconst SERVER_URL = \"https://api.stamn.com\";\n\nexport class StamnClient implements Requestable {\n private readonly serverUrl = SERVER_URL;\n private apiKey?: string;\n private retryOptions: ResolvedRetryOptions;\n\n public readonly auth: AuthResource;\n public readonly agents: AgentsResource;\n public readonly participants: ParticipantsResource;\n public readonly apiKeys: ApiKeysResource;\n public readonly directory: DirectoryResource;\n public readonly leaderboard: LeaderboardResource;\n public readonly health: HealthResource;\n\n constructor(options: StamnClientOptions = {}) {\n this.apiKey = options.apiKey;\n this.retryOptions = { ...DEFAULT_RETRY, ...options.retry };\n\n this.auth = new AuthResource(this);\n this.agents = new AgentsResource(this);\n this.participants = new ParticipantsResource(this);\n this.apiKeys = new ApiKeysResource(this);\n this.directory = new DirectoryResource(this);\n this.leaderboard = new LeaderboardResource(this);\n this.health = new HealthResource(this);\n }\n\n setApiKey(apiKey: string): void {\n this.apiKey = apiKey;\n }\n\n async request<T>(method: string, path: string, body?: unknown): Promise<T> {\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= this.retryOptions.maxRetries; attempt++) {\n if (attempt > 0) {\n await this.sleep(this.calculateDelay(attempt - 1));\n }\n\n try {\n return await this.executeRequest<T>(method, path, body);\n } catch (error) {\n lastError = error;\n if (\n !this.isRetryable(error) ||\n attempt === this.retryOptions.maxRetries\n ) {\n throw error;\n }\n }\n }\n\n throw lastError;\n }\n\n private async executeRequest<T>(\n method: string,\n path: string,\n body?: unknown,\n ): Promise<T> {\n const headers: Record<string, string> = {};\n\n if (body !== undefined) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n\n if (this.apiKey) {\n headers[\"Authorization\"] = `Bearer ${this.apiKey}`;\n }\n\n const res = await fetch(`${this.serverUrl}${path}`, {\n method,\n headers,\n body: body !== undefined ? JSON.stringify(body) : undefined,\n });\n\n if (!res.ok) {\n const message = await this.parseErrorResponse(res);\n throw new StamnApiError(message, res.status);\n }\n\n const text = await res.text();\n if (!text) return undefined as T;\n\n return JSON.parse(text) as T;\n }\n\n private isRetryable(error: unknown): boolean {\n if (error instanceof TypeError) return true;\n if (error instanceof StamnApiError && error.status >= 500) return true;\n if (error instanceof StamnApiError && error.status === 429) return true;\n return false;\n }\n\n private calculateDelay(attempt: number): number {\n const baseDelay =\n this.retryOptions.initialDelayMs *\n Math.pow(this.retryOptions.backoffMultiplier, attempt);\n const capped = Math.min(baseDelay, this.retryOptions.maxDelayMs);\n return Math.random() * capped;\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n private async parseErrorResponse(res: Response): Promise<string> {\n const body = await res.text();\n try {\n const parsed = JSON.parse(body);\n const msg =\n parsed.error?.message ??\n (Array.isArray(parsed.message)\n ? parsed.message.join(\". \")\n : parsed.message);\n if (msg) return msg;\n } catch {}\n return body || `HTTP ${res.status}`;\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/resources/base.ts","../src/resources/auth.ts","../src/resources/agents.ts","../src/resources/participants.ts","../src/resources/api-keys.ts","../src/resources/directory.ts","../src/resources/leaderboard.ts","../src/resources/health.ts","../src/resources/services.ts","../src/client.ts"],"sourcesContent":["import type { Requestable } from '@/types';\n\nexport abstract class Resource {\n constructor(protected readonly client: Requestable) {}\n}\n","import { Resource } from '@/resources/base';\nimport type { DeviceFlowData, DeviceFlowStatus } from '@/types';\n\nconst DEFAULT_POLL_INTERVAL_MS = 5_000;\nconst DEFAULT_TIMEOUT_MS = 300_000; // 5 minutes\n\nexport class AuthResource extends Resource {\n\n async initiateDeviceFlow(): Promise<DeviceFlowData> {\n const res = await this.client.request<{ data: DeviceFlowData }>(\n 'POST',\n '/v1/auth/device-codes',\n );\n return res.data;\n }\n\n async getDeviceFlowStatus(deviceCode: string): Promise<DeviceFlowStatus> {\n const res = await this.client.request<{ data: DeviceFlowStatus }>(\n 'GET',\n `/v1/auth/device-codes/${deviceCode}`,\n );\n return res.data;\n }\n\n async pollForApproval(\n deviceCode: string,\n options?: { pollIntervalMs?: number; timeoutMs?: number },\n ): Promise<string> {\n const pollInterval = options?.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;\n const timeout = options?.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const deadline = Date.now() + timeout;\n\n while (Date.now() < deadline) {\n await new Promise((r) => setTimeout(r, pollInterval));\n\n try {\n const status = await this.getDeviceFlowStatus(deviceCode);\n\n if (status.status === 'approved' && status.apiKey) {\n return status.apiKey;\n }\n\n if (status.status === 'expired') {\n throw new Error('Login code expired. Try again.');\n }\n } catch (err) {\n if ((err as Error).message.includes('expired')) throw err;\n }\n }\n\n throw new Error('Login timed out. Try again.');\n }\n}\n","import { Resource } from '@/resources/base';\nimport type { Participant } from '@/types';\n\nexport class AgentsResource extends Resource {\n\n async create(options?: { name?: string; description?: string }): Promise<Participant> {\n const res = await this.client.request<{ data: Participant }>(\n 'POST',\n '/v1/participants',\n {\n name: options?.name,\n description: options?.description,\n },\n );\n return res.data;\n }\n}\n","import { Resource } from '@/resources/base';\nimport type {\n Participant,\n ParticipantSettings,\n BalanceResponse,\n OnchainBalanceResponse,\n LedgerEntry,\n} from '@/types';\n\nexport class ParticipantsResource extends Resource {\n\n async create(options?: { name?: string; description?: string }): Promise<Participant> {\n const res = await this.client.request<{ data: Participant }>(\n 'POST',\n '/v1/participants',\n {\n name: options?.name || undefined,\n description: options?.description || undefined,\n },\n );\n return res.data;\n }\n\n async list(): Promise<Participant[]> {\n const res = await this.client.request<{ data: Participant[] }>(\n 'GET',\n '/v1/participants',\n );\n return res.data;\n }\n\n async get(participantId: string): Promise<Participant> {\n const res = await this.client.request<{ data: Participant }>(\n 'GET',\n `/v1/participants/${participantId}`,\n );\n return res.data;\n }\n\n async update(\n participantId: string,\n data: {\n settings?: Partial<ParticipantSettings>;\n status?: 'active' | 'deleted';\n },\n ): Promise<Participant> {\n const res = await this.client.request<{ data: Participant }>(\n 'PATCH',\n `/v1/participants/${participantId}`,\n data,\n );\n return res.data;\n }\n\n async getBalance(participantId: string): Promise<BalanceResponse> {\n const res = await this.client.request<{ data: BalanceResponse }>(\n 'GET',\n `/v1/participants/${participantId}/balance`,\n );\n return res.data;\n }\n\n async getOnchainBalance(participantId: string): Promise<OnchainBalanceResponse> {\n const res = await this.client.request<{ data: OnchainBalanceResponse }>(\n 'GET',\n `/v1/participants/${participantId}/onchain-balance`,\n );\n return res.data;\n }\n\n async getLedgerEntries(participantId: string): Promise<LedgerEntry[]> {\n const res = await this.client.request<{ data: LedgerEntry[] }>(\n 'GET',\n `/v1/participants/${participantId}/ledger-entries`,\n );\n return res.data;\n }\n\n async deposit(\n participantId: string,\n data: { amountCents: number },\n ): Promise<LedgerEntry> {\n const res = await this.client.request<{ data: LedgerEntry }>(\n 'POST',\n `/v1/participants/${participantId}/deposits`,\n data,\n );\n return res.data;\n }\n}\n","import { Resource } from '@/resources/base';\nimport type { ApiKeyCreateResponse, ApiKeySummary } from '@/types';\n\nexport class ApiKeysResource extends Resource {\n\n async create(): Promise<ApiKeyCreateResponse> {\n const res = await this.client.request<{ data: ApiKeyCreateResponse }>(\n 'POST',\n '/v1/api-keys',\n );\n return res.data;\n }\n\n async list(): Promise<ApiKeySummary[]> {\n const res = await this.client.request<{ data: ApiKeySummary[] }>(\n 'GET',\n '/v1/api-keys',\n );\n return res.data;\n }\n\n async revoke(id: string): Promise<void> {\n await this.client.request('DELETE', `/v1/api-keys/${id}`);\n }\n}\n","import { Resource } from '@/resources/base';\nimport type { DirectoryResponse } from '@/types';\n\nexport class DirectoryResource extends Resource {\n\n async list(options?: { serviceTag?: string; name?: string }): Promise<DirectoryResponse> {\n const params = new URLSearchParams();\n if (options?.serviceTag) params.set('serviceTag', options.serviceTag);\n if (options?.name) params.set('name', options.name);\n const query = params.toString();\n const path = query ? `/v1/directory?${query}` : '/v1/directory';\n\n const res = await this.client.request<{ data: DirectoryResponse }>(\n 'GET',\n path,\n );\n return res.data;\n }\n}\n","import { Resource } from '@/resources/base';\nimport type { LeaderboardEntry } from '@/types';\n\nexport class LeaderboardResource extends Resource {\n\n async get(): Promise<LeaderboardEntry[]> {\n const res = await this.client.request<{ data: LeaderboardEntry[] }>(\n 'GET',\n '/v1/leaderboard',\n );\n return res.data;\n }\n}\n","import { Resource } from '@/resources/base';\nimport type { HealthCheckResult } from '@/types';\n\nexport class HealthResource extends Resource {\n\n async check(): Promise<HealthCheckResult> {\n try {\n await this.client.request('GET', '/v1/health');\n return { ok: true };\n } catch {\n return { ok: false };\n }\n }\n}\n","import { Resource } from '@/resources/base';\nimport type {\n ServiceListing,\n CreateServiceListingOptions,\n UpdateServiceListingOptions,\n} from '@/types';\n\nexport class ServicesResource extends Resource {\n async list(participantId: string): Promise<ServiceListing[]> {\n const res = await this.client.request<{ data: ServiceListing[] }>(\n 'GET',\n `/v1/participants/${participantId}/services`,\n );\n return res.data;\n }\n\n async create(\n participantId: string,\n options: CreateServiceListingOptions,\n ): Promise<ServiceListing> {\n const res = await this.client.request<{ data: ServiceListing }>(\n 'POST',\n `/v1/participants/${participantId}/services`,\n options,\n );\n return res.data;\n }\n\n async update(\n participantId: string,\n serviceId: string,\n options: UpdateServiceListingOptions,\n ): Promise<ServiceListing> {\n const res = await this.client.request<{ data: ServiceListing }>(\n 'PATCH',\n `/v1/participants/${participantId}/services/${serviceId}`,\n options,\n );\n return res.data;\n }\n\n async delete(\n participantId: string,\n serviceId: string,\n ): Promise<void> {\n await this.client.request<{ data: { deleted: boolean } }>(\n 'DELETE',\n `/v1/participants/${participantId}/services/${serviceId}`,\n );\n }\n}\n","import type { StamnClientOptions, Requestable } from '@/types';\nimport { AuthResource } from '@/resources/auth';\nimport { AgentsResource } from '@/resources/agents';\nimport { ParticipantsResource } from '@/resources/participants';\nimport { ApiKeysResource } from '@/resources/api-keys';\nimport { DirectoryResource } from '@/resources/directory';\nimport { LeaderboardResource } from '@/resources/leaderboard';\nimport { HealthResource } from '@/resources/health';\nimport { ServicesResource } from '@/resources/services';\n\nexport class StamnApiError extends Error {\n constructor(\n message: string,\n public readonly status: number,\n ) {\n super(message);\n this.name = \"StamnApiError\";\n }\n}\n\ninterface ResolvedRetryOptions {\n maxRetries: number;\n initialDelayMs: number;\n backoffMultiplier: number;\n maxDelayMs: number;\n}\n\nconst DEFAULT_RETRY: ResolvedRetryOptions = {\n maxRetries: 0,\n initialDelayMs: 500,\n backoffMultiplier: 2,\n maxDelayMs: 10_000,\n};\n\nconst SERVER_URL = \"https://api.stamn.com\";\n\nexport class StamnClient implements Requestable {\n private readonly serverUrl = SERVER_URL;\n private apiKey?: string;\n private retryOptions: ResolvedRetryOptions;\n\n public readonly auth: AuthResource;\n public readonly agents: AgentsResource;\n public readonly participants: ParticipantsResource;\n public readonly apiKeys: ApiKeysResource;\n public readonly directory: DirectoryResource;\n public readonly leaderboard: LeaderboardResource;\n public readonly health: HealthResource;\n public readonly services: ServicesResource;\n\n constructor(options: StamnClientOptions = {}) {\n this.apiKey = options.apiKey;\n this.retryOptions = { ...DEFAULT_RETRY, ...options.retry };\n\n this.auth = new AuthResource(this);\n this.agents = new AgentsResource(this);\n this.participants = new ParticipantsResource(this);\n this.apiKeys = new ApiKeysResource(this);\n this.directory = new DirectoryResource(this);\n this.leaderboard = new LeaderboardResource(this);\n this.health = new HealthResource(this);\n this.services = new ServicesResource(this);\n }\n\n setApiKey(apiKey: string): void {\n this.apiKey = apiKey;\n }\n\n async request<T>(method: string, path: string, body?: unknown): Promise<T> {\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= this.retryOptions.maxRetries; attempt++) {\n if (attempt > 0) {\n await this.sleep(this.calculateDelay(attempt - 1));\n }\n\n try {\n return await this.executeRequest<T>(method, path, body);\n } catch (error) {\n lastError = error;\n if (\n !this.isRetryable(error) ||\n attempt === this.retryOptions.maxRetries\n ) {\n throw error;\n }\n }\n }\n\n throw lastError;\n }\n\n private async executeRequest<T>(\n method: string,\n path: string,\n body?: unknown,\n ): Promise<T> {\n const headers: Record<string, string> = {};\n\n if (body !== undefined) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n\n if (this.apiKey) {\n headers[\"Authorization\"] = `Bearer ${this.apiKey}`;\n }\n\n const res = await fetch(`${this.serverUrl}${path}`, {\n method,\n headers,\n body: body !== undefined ? JSON.stringify(body) : undefined,\n });\n\n if (!res.ok) {\n const message = await this.parseErrorResponse(res);\n throw new StamnApiError(message, res.status);\n }\n\n const text = await res.text();\n if (!text) return undefined as T;\n\n return JSON.parse(text) as T;\n }\n\n private isRetryable(error: unknown): boolean {\n if (error instanceof TypeError) return true;\n if (error instanceof StamnApiError && error.status >= 500) return true;\n if (error instanceof StamnApiError && error.status === 429) return true;\n return false;\n }\n\n private calculateDelay(attempt: number): number {\n const baseDelay =\n this.retryOptions.initialDelayMs *\n Math.pow(this.retryOptions.backoffMultiplier, attempt);\n const capped = Math.min(baseDelay, this.retryOptions.maxDelayMs);\n return Math.random() * capped;\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n private async parseErrorResponse(res: Response): Promise<string> {\n const body = await res.text();\n try {\n const parsed = JSON.parse(body);\n const msg =\n parsed.error?.message ??\n (Array.isArray(parsed.message)\n ? parsed.message.join(\". \")\n : parsed.message);\n if (msg) return msg;\n } catch {}\n return body || `HTTP ${res.status}`;\n }\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stamn/sdk",
3
- "version": "0.1.0-alpha.1",
3
+ "version": "0.1.0-alpha.2",
4
4
  "description": "Stamn SDK",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",