@gibwork/sdk 0.0.4 → 0.0.6

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.
@@ -369,6 +369,25 @@ var SubmissionsResource = class {
369
369
  ...options ? { options } : {}
370
370
  });
371
371
  }
372
+ async get(taskId, submissionId, options) {
373
+ const path = `/v2/int/tasks/${encodeURIComponent(taskId)}/submissions/${encodeURIComponent(submissionId)}`;
374
+ const headers = await createWalletAuthHeaders(this.signer, {
375
+ operation: "gibwork:view-task-submission",
376
+ method: "GET",
377
+ path,
378
+ resourceFields: [
379
+ ["taskId", taskId],
380
+ ["taskSubmissionId", submissionId]
381
+ ],
382
+ hash: ["queryHash", sha256Json({})]
383
+ });
384
+ return this.transport.request({
385
+ method: "GET",
386
+ path,
387
+ headers,
388
+ ...options ? { options } : {}
389
+ });
390
+ }
372
391
  async approve(taskId, submissionId, input, options) {
373
392
  const prepared = await this.prepareApproval(
374
393
  taskId,
@@ -812,5 +831,5 @@ function assertSigner(signer) {
812
831
  }
813
832
 
814
833
  export { DEFAULT_GIBWORK_API_URL, GibworkAmbiguousSubmitError, GibworkApiError, GibworkClient, GibworkConfigurationError, GibworkError, GibworkNetworkError, GibworkRequestAbortedError, GibworkTimeoutError, signPreparedTransaction };
815
- //# sourceMappingURL=chunk-BNAVP5XZ.js.map
816
- //# sourceMappingURL=chunk-BNAVP5XZ.js.map
834
+ //# sourceMappingURL=chunk-3MLFNEQ5.js.map
835
+ //# sourceMappingURL=chunk-3MLFNEQ5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/config.ts","../src/errors/index.ts","../src/auth/sanitize.ts","../src/auth/normalize.ts","../src/auth/wallet-auth.ts","../src/transactions/sign-prepared-transaction.ts","../src/resources/submissions/submission-comments-resource.ts","../src/resources/submissions/submissions-resource.ts","../src/resources/tasks/tasks-resource.ts","../src/transport/http-transport.ts","../src/client/gibwork-client.ts"],"names":["assertNotAborted"],"mappings":"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","file":"chunk-3MLFNEQ5.js","sourcesContent":["const FALLBACK_GIBWORK_API_URL = 'https://sdk.gib.work';\n\n/** The API origin embedded when this package was built. */\nexport const DEFAULT_GIBWORK_API_URL =\n process.env.GIBWORK_SDK_API_URL?.trim() || FALLBACK_GIBWORK_API_URL;\n","export class GibworkError extends Error {\n override readonly name: string = 'GibworkError';\n}\n\nexport class GibworkConfigurationError extends GibworkError {\n override readonly name: string = 'GibworkConfigurationError';\n}\n\nexport class GibworkApiError extends GibworkError {\n override readonly name: string = 'GibworkApiError';\n\n constructor(\n public readonly status: number,\n public readonly body: unknown,\n public readonly method: string,\n public readonly path: string,\n public readonly requestId?: string,\n ) {\n super(`Gibwork API request failed with HTTP ${status}`);\n }\n}\n\nexport class GibworkNetworkError extends GibworkError {\n override readonly name: string = 'GibworkNetworkError';\n\n constructor(\n message: string,\n public readonly method: string,\n public readonly path: string,\n options?: ErrorOptions,\n ) {\n super(message, options);\n }\n}\n\nexport class GibworkTimeoutError extends GibworkNetworkError {\n override readonly name: string = 'GibworkTimeoutError';\n\n constructor(\n method: string,\n path: string,\n public readonly timeoutMs: number,\n options?: ErrorOptions,\n ) {\n super(\n `Gibwork API request timed out after ${timeoutMs}ms`,\n method,\n path,\n options,\n );\n }\n}\n\nexport class GibworkRequestAbortedError extends GibworkNetworkError {\n override readonly name: string = 'GibworkRequestAbortedError';\n\n constructor(method: string, path: string, options?: ErrorOptions) {\n super('Gibwork API request was aborted', method, path, options);\n }\n}\n\nexport type SubmitOperation =\n 'create-task' | 'refund-task' | 'approve-submission';\n\nexport interface AmbiguousSubmitContext {\n operation: SubmitOperation;\n taskId?: string;\n submissionId?: string;\n intentId: string;\n}\n\nexport class GibworkAmbiguousSubmitError extends GibworkNetworkError {\n override readonly name: string = 'GibworkAmbiguousSubmitError';\n\n constructor(\n method: string,\n path: string,\n public readonly context: AmbiguousSubmitContext,\n options?: ErrorOptions,\n ) {\n super(\n 'The transaction submit outcome is unknown; do not submit the same intent again',\n method,\n path,\n options,\n );\n }\n}\n","import sanitizeHtml from 'sanitize-html';\n\nconst HTML_SANITIZE_OPTIONS: sanitizeHtml.IOptions = {\n allowedTags: sanitizeHtml.defaults.allowedTags.concat(['img']),\n allowedAttributes: {\n ...sanitizeHtml.defaults.allowedAttributes,\n '*': ['class', 'id', 'style', 'data-type'],\n a: ['href', 'name', 'target'],\n img: [\n 'src',\n 'srcset',\n 'alt',\n 'title',\n 'limit',\n 'width',\n 'height',\n 'loading',\n 'maxSize',\n 'fileid',\n ],\n },\n transformTags: {\n a: (tagName, attributes) => {\n if (isAllowedExternalUrl(attributes.href)) {\n return { tagName, attribs: attributes };\n }\n\n const safeAttributes = { ...attributes };\n delete safeAttributes.href;\n return { tagName: 'span', attribs: safeAttributes };\n },\n },\n};\n\nexport function sanitizeContent(content: string): string {\n return sanitizeHtml(content, HTML_SANITIZE_OPTIONS).trim();\n}\n\nfunction isAllowedExternalUrl(value?: string): boolean {\n if (!value) return false;\n const normalized = value.toLowerCase().startsWith('www.')\n ? `https://${value}`\n : value;\n\n try {\n const url = new URL(normalized);\n return (\n (url.protocol === 'http:' || url.protocol === 'https:') &&\n Boolean(url.hostname) &&\n !url.username &&\n !url.password\n );\n } catch {\n return false;\n }\n}\n","import { createHash } from 'node:crypto';\n\nimport type {\n ApproveSubmissionInput,\n CreateTaskInput,\n PaginationQuery,\n SubmissionPaginationQuery,\n UpdateTaskInput,\n} from '../types/index.js';\nimport { sanitizeContent } from './sanitize.js';\n\nexport interface NormalizedCreateTaskBody extends CreateTaskInput {\n walletAddress: string;\n deadline: string | null;\n allowOnlyVerifiedSubmissions: boolean;\n}\n\nexport interface NormalizedUpdateTaskBody extends UpdateTaskInput {\n walletAddress: string;\n}\n\nexport function normalizeCreateTask(\n input: CreateTaskInput,\n walletAddress: string,\n): NormalizedCreateTaskBody {\n const normalized: NormalizedCreateTaskBody = {\n walletAddress: walletAddress.trim(),\n title: input.title.trim(),\n content: sanitizeContent(input.content),\n tags: input.tags.map((tag) => tag.trim()),\n payment: {\n mintAddress: input.payment.mintAddress.trim(),\n amount: input.payment.amount.trim(),\n },\n minSubmissionAmount: input.minSubmissionAmount.trim(),\n deadline: input.deadline ?? null,\n allowOnlyVerifiedSubmissions: input.allowOnlyVerifiedSubmissions ?? false,\n };\n\n const primarySkillSlug = trimOptional(input.primarySkillSlug)?.toLowerCase();\n if (primarySkillSlug !== undefined && primarySkillSlug !== null) {\n normalized.primarySkillSlug = primarySkillSlug;\n }\n\n if (\n input.refundFeeOverride !== undefined &&\n input.refundFeeOverride !== null\n ) {\n normalized.refundFeeOverride = input.refundFeeOverride;\n }\n\n if (input.allowOnlyDiscordGuildSubmissions !== undefined) {\n normalized.allowOnlyDiscordGuildSubmissions =\n input.allowOnlyDiscordGuildSubmissions;\n }\n\n const requiredDiscordGuildId = trimOptional(input.requiredDiscordGuildId);\n if (requiredDiscordGuildId !== undefined) {\n normalized.requiredDiscordGuildId = requiredDiscordGuildId;\n }\n\n const requiredDiscordGuildName = trimOptional(input.requiredDiscordGuildName);\n if (requiredDiscordGuildName !== undefined) {\n normalized.requiredDiscordGuildName = requiredDiscordGuildName;\n }\n\n const discordGuildInvitationUrl = trimOptional(\n input.discordGuildInvitationUrl,\n );\n if (discordGuildInvitationUrl !== undefined) {\n normalized.discordGuildInvitationUrl = discordGuildInvitationUrl;\n }\n\n if (input.requiredDiscordRoleIds !== undefined) {\n const roles = input.requiredDiscordRoleIds\n .map((role) => role.trim())\n .filter(Boolean);\n if (roles.length > 0) normalized.requiredDiscordRoleIds = roles;\n }\n\n return normalized;\n}\n\nexport function normalizeUpdateTask(\n input: UpdateTaskInput,\n walletAddress: string,\n): NormalizedUpdateTaskBody {\n const normalized: NormalizedUpdateTaskBody = {\n walletAddress: walletAddress.trim(),\n };\n\n if (input.content !== undefined) {\n normalized.content = sanitizeContent(input.content);\n }\n if (input.allowOnlyVerifiedSubmissions !== undefined) {\n normalized.allowOnlyVerifiedSubmissions =\n input.allowOnlyVerifiedSubmissions;\n }\n if (input.deadline !== undefined) {\n normalized.deadline = input.deadline.trim();\n }\n\n return normalized;\n}\n\nexport function normalizeTaskPagination(query: PaginationQuery = {}): {\n page: number;\n limit: number;\n pageAll: boolean;\n} {\n return {\n page: query.page ?? 1,\n limit: query.limit ?? 15,\n pageAll: query.pageAll ?? false,\n };\n}\n\nexport function normalizeSubmissionPagination(\n query: SubmissionPaginationQuery = {},\n): {\n page: number;\n limit: number;\n pageAll: boolean;\n status: SubmissionPaginationQuery['status'] | null;\n} {\n return {\n page: query.page ?? 1,\n limit: query.limit ?? 15,\n pageAll: query.pageAll ?? false,\n status: query.status ?? null,\n };\n}\n\nexport function normalizeApproval(\n input: ApproveSubmissionInput,\n walletAddress: string,\n): { walletAddress: string; amount: string; rating?: number } {\n const normalized: {\n walletAddress: string;\n amount: string;\n rating?: number;\n } = {\n walletAddress,\n amount: input.amount.trim(),\n };\n\n if (input.rating !== undefined) normalized.rating = input.rating;\n return normalized;\n}\n\nexport function normalizeRejection(\n reason: string | null | undefined,\n walletAddress: string,\n): { walletAddress: string; rejectReason: string | null } {\n return {\n walletAddress,\n rejectReason: typeof reason === 'string' ? reason.trim() : (reason ?? null),\n };\n}\n\nexport function normalizeComment(\n content: string,\n walletAddress: string,\n): { walletAddress: string; content: string } {\n return {\n walletAddress,\n content: sanitizeContent(content),\n };\n}\n\nexport function sha256Json(value: unknown): string {\n return createHash('sha256')\n .update(JSON.stringify(value), 'utf8')\n .digest('hex');\n}\n\nexport function toQueryString(values: Record<string, unknown>): string {\n const query = new URLSearchParams();\n for (const [key, value] of Object.entries(values)) {\n if (value !== undefined && value !== null) query.set(key, String(value));\n }\n return query.toString();\n}\n\nfunction trimOptional(\n value: string | null | undefined,\n): string | null | undefined {\n if (typeof value !== 'string') return value;\n const trimmed = value.trim();\n return trimmed === '' ? undefined : trimmed;\n}\n","import { randomUUID } from 'node:crypto';\n\nimport { GibworkConfigurationError } from '../errors/index.js';\nimport type { WalletSigner } from '../signers/wallet-signer.js';\n\nexport interface WalletAuthDescriptor {\n operation: string;\n method: 'GET' | 'POST' | 'PATCH';\n path: string;\n resourceFields?: ReadonlyArray<readonly [name: string, value: string]>;\n hash: readonly [name: 'payloadHash' | 'queryHash', value: string];\n}\n\ninterface WalletAuthValues {\n walletAddress: string;\n timestamp: string;\n nonce: string;\n}\n\ninterface WalletAuthDependencies {\n now?: () => number;\n nonce?: () => string;\n}\n\nexport async function createWalletAuthHeaders(\n signer: WalletSigner,\n descriptor: WalletAuthDescriptor,\n dependencies: WalletAuthDependencies = {},\n): Promise<Record<string, string>> {\n const values: WalletAuthValues = {\n walletAddress: signer.publicKey.toBase58(),\n timestamp: Math.floor(\n (dependencies.now?.() ?? Date.now()) / 1000,\n ).toString(),\n nonce: dependencies.nonce?.() ?? randomUUID(),\n };\n const message = buildWalletAuthMessage(descriptor, values);\n const signature = await signer.signMessage(new TextEncoder().encode(message));\n\n if (!(signature instanceof Uint8Array) || signature.length !== 64) {\n throw new GibworkConfigurationError(\n 'WalletSigner.signMessage must return a 64-byte Ed25519 signature',\n );\n }\n\n return {\n 'x-gibwork-wallet-address': values.walletAddress,\n 'x-gibwork-timestamp': values.timestamp,\n 'x-gibwork-nonce': values.nonce,\n 'x-gibwork-signature': Buffer.from(signature).toString('base64'),\n };\n}\n\nexport function buildWalletAuthMessage(\n descriptor: WalletAuthDescriptor,\n values: WalletAuthValues,\n): string {\n return [\n descriptor.operation,\n `method:${descriptor.method}`,\n `path:${descriptor.path}`,\n ...(descriptor.resourceFields ?? []).map(\n ([name, value]) => `${name}:${value}`,\n ),\n `walletAddress:${values.walletAddress}`,\n `timestamp:${values.timestamp}`,\n `nonce:${values.nonce}`,\n `${descriptor.hash[0]}:${descriptor.hash[1]}`,\n ].join('\\n');\n}\n","import { VersionedTransaction } from '@solana/web3.js';\n\nimport { GibworkConfigurationError } from '../errors/index.js';\nimport type { WalletSigner } from '../signers/wallet-signer.js';\n\nexport async function signPreparedTransaction(\n serializedTransaction: string,\n signer: WalletSigner,\n): Promise<string> {\n if (typeof serializedTransaction !== 'string' || !serializedTransaction) {\n throw new GibworkConfigurationError(\n 'serializedTransaction must be a non-empty base64 string',\n );\n }\n\n let transaction: VersionedTransaction;\n try {\n transaction = VersionedTransaction.deserialize(\n Buffer.from(serializedTransaction, 'base64'),\n );\n } catch (cause) {\n throw new GibworkConfigurationError(\n 'serializedTransaction is not a valid Solana VersionedTransaction',\n { cause },\n );\n }\n\n const signed = await signer.signTransaction(transaction);\n if (!(signed instanceof VersionedTransaction)) {\n throw new GibworkConfigurationError(\n 'WalletSigner.signTransaction must return a VersionedTransaction',\n );\n }\n\n return Buffer.from(signed.serialize()).toString('base64');\n}\n","import { normalizeComment, sha256Json } from '../../auth/normalize.js';\nimport { createWalletAuthHeaders } from '../../auth/wallet-auth.js';\nimport type { WalletSigner } from '../../signers/wallet-signer.js';\nimport type { HttpTransport } from '../../transport/http-transport.js';\nimport type { RequestOptions, SubmissionComment } from '../../types/index.js';\n\nexport class SubmissionCommentsResource {\n constructor(\n private readonly transport: HttpTransport,\n private readonly signer: WalletSigner,\n ) {}\n\n async list(\n taskId: string,\n submissionId: string,\n options?: RequestOptions,\n ): Promise<SubmissionComment[]> {\n const path = commentsPath(taskId, submissionId);\n const headers = await createWalletAuthHeaders(this.signer, {\n operation: 'gibwork:view-task-submission-comments',\n method: 'GET',\n path,\n resourceFields: [\n ['taskId', taskId],\n ['taskSubmissionId', submissionId],\n ],\n hash: ['queryHash', sha256Json({})],\n });\n\n return this.transport.request({\n method: 'GET',\n path,\n headers,\n ...(options ? { options } : {}),\n });\n }\n\n async create(\n taskId: string,\n submissionId: string,\n content: string,\n options?: RequestOptions,\n ): Promise<SubmissionComment> {\n const path = commentsPath(taskId, submissionId);\n const body = normalizeComment(content, this.signer.publicKey.toBase58());\n const headers = await createWalletAuthHeaders(this.signer, {\n operation: 'gibwork:create-task-submission-comment',\n method: 'POST',\n path,\n resourceFields: [\n ['taskId', taskId],\n ['taskSubmissionId', submissionId],\n ],\n hash: ['payloadHash', sha256Json(body)],\n });\n\n return this.transport.request({\n method: 'POST',\n path,\n headers,\n body,\n ...(options ? { options } : {}),\n });\n }\n}\n\nfunction commentsPath(taskId: string, submissionId: string): string {\n return `/v2/int/tasks/${encodeURIComponent(taskId)}/submission/${encodeURIComponent(submissionId)}/comments`;\n}\n","import {\n normalizeApproval,\n normalizeRejection,\n normalizeSubmissionPagination,\n sha256Json,\n toQueryString,\n} from '../../auth/normalize.js';\nimport { createWalletAuthHeaders } from '../../auth/wallet-auth.js';\nimport { GibworkRequestAbortedError } from '../../errors/index.js';\nimport type { WalletSigner } from '../../signers/wallet-signer.js';\nimport { signPreparedTransaction } from '../../transactions/sign-prepared-transaction.js';\nimport type { HttpTransport } from '../../transport/http-transport.js';\nimport type {\n ApprovalSubmitResult,\n ApproveSubmissionInput,\n ApproveSubmissionResult,\n Paginated,\n PreparedApprovalIntent,\n RejectSubmissionResult,\n RequestOptions,\n SubmissionPaginationQuery,\n TaskSubmission,\n WalletTaskSubmissionDetails,\n} from '../../types/index.js';\nimport { SubmissionCommentsResource } from './submission-comments-resource.js';\n\nexport class SubmissionsResource {\n readonly comments: SubmissionCommentsResource;\n\n constructor(\n private readonly transport: HttpTransport,\n private readonly signer: WalletSigner,\n ) {\n this.comments = new SubmissionCommentsResource(transport, signer);\n }\n\n async list(\n taskId: string,\n query: SubmissionPaginationQuery = {},\n options?: RequestOptions,\n ): Promise<Paginated<TaskSubmission>> {\n const normalized = normalizeSubmissionPagination(query);\n const path = `/v2/int/tasks/${encodeURIComponent(taskId)}/submissions`;\n const headers = await createWalletAuthHeaders(this.signer, {\n operation: 'gibwork:view-task-submissions',\n method: 'GET',\n path,\n resourceFields: [['taskId', taskId]],\n hash: ['queryHash', sha256Json(normalized)],\n });\n const requestQuery: Record<string, unknown> = { ...normalized };\n if (requestQuery.status === null) delete requestQuery.status;\n\n return this.transport.request({\n method: 'GET',\n path: `${path}?${toQueryString(requestQuery)}`,\n headers,\n ...(options ? { options } : {}),\n });\n }\n\n async get(\n taskId: string,\n submissionId: string,\n options?: RequestOptions,\n ): Promise<WalletTaskSubmissionDetails> {\n const path = `/v2/int/tasks/${encodeURIComponent(taskId)}/submissions/${encodeURIComponent(submissionId)}`;\n const headers = await createWalletAuthHeaders(this.signer, {\n operation: 'gibwork:view-task-submission',\n method: 'GET',\n path,\n resourceFields: [\n ['taskId', taskId],\n ['taskSubmissionId', submissionId],\n ],\n hash: ['queryHash', sha256Json({})],\n });\n\n return this.transport.request({\n method: 'GET',\n path,\n headers,\n ...(options ? { options } : {}),\n });\n }\n\n async approve(\n taskId: string,\n submissionId: string,\n input: ApproveSubmissionInput,\n options?: RequestOptions,\n ): Promise<ApproveSubmissionResult> {\n const prepared = await this.prepareApproval(\n taskId,\n submissionId,\n input,\n options,\n );\n const submitPath = approvalSubmitPath(\n taskId,\n submissionId,\n prepared.intentId,\n );\n assertNotAborted(options, submitPath);\n const signedTransaction = await signPreparedTransaction(\n prepared.serializedTransaction,\n this.signer,\n );\n assertNotAborted(options, submitPath);\n const submitted = await this.submitApproval(\n taskId,\n submissionId,\n prepared.intentId,\n signedTransaction,\n options,\n );\n\n return {\n ...submitted,\n intentId: prepared.intentId,\n lastValidBlockHeight: prepared.lastValidBlockHeight,\n approvalQuote: prepared.approvalQuote,\n };\n }\n\n async reject(\n taskId: string,\n submissionId: string,\n reason?: string | null,\n options?: RequestOptions,\n ): Promise<RejectSubmissionResult> {\n const path = `/v2/int/tasks/${encodeURIComponent(taskId)}/submission/${encodeURIComponent(submissionId)}/reject`;\n const body = normalizeRejection(reason, this.walletAddress);\n const headers = await createWalletAuthHeaders(this.signer, {\n operation: 'gibwork:reject-task-submission',\n method: 'POST',\n path,\n resourceFields: [\n ['taskId', taskId],\n ['taskSubmissionId', submissionId],\n ],\n hash: ['payloadHash', sha256Json(body)],\n });\n\n return this.transport.request({\n method: 'POST',\n path,\n headers,\n body,\n ...(options ? { options } : {}),\n });\n }\n\n async prepareApproval(\n taskId: string,\n submissionId: string,\n input: ApproveSubmissionInput,\n options?: RequestOptions,\n ): Promise<PreparedApprovalIntent> {\n const path = `/v2/int/tasks/${encodeURIComponent(taskId)}/submission/${encodeURIComponent(submissionId)}/pay`;\n const body = normalizeApproval(input, this.walletAddress);\n const headers = await createWalletAuthHeaders(this.signer, {\n operation: 'gibwork:approve-task-submission-intent',\n method: 'POST',\n path,\n resourceFields: [\n ['taskId', taskId],\n ['taskSubmissionId', submissionId],\n ],\n hash: ['payloadHash', sha256Json(body)],\n });\n\n return this.transport.request({\n method: 'POST',\n path,\n headers,\n body,\n ...(options ? { options } : {}),\n });\n }\n\n async submitApproval(\n taskId: string,\n submissionId: string,\n intentId: string,\n signedTransaction: string,\n options?: RequestOptions,\n ): Promise<ApprovalSubmitResult> {\n const path = approvalSubmitPath(taskId, submissionId, intentId);\n return this.transport.request({\n method: 'POST',\n path,\n body: { signedTransaction },\n ...(options ? { options } : {}),\n ambiguousSubmit: {\n operation: 'approve-submission',\n taskId,\n submissionId,\n intentId,\n },\n });\n }\n\n private get walletAddress(): string {\n return this.signer.publicKey.toBase58();\n }\n}\n\nfunction approvalSubmitPath(\n taskId: string,\n submissionId: string,\n intentId: string,\n): string {\n return `/v2/int/tasks/${encodeURIComponent(taskId)}/submission/${encodeURIComponent(submissionId)}/pay/${encodeURIComponent(intentId)}/submit`;\n}\n\nfunction assertNotAborted(\n options: RequestOptions | undefined,\n path: string,\n): void {\n if (options?.signal?.aborted) {\n throw new GibworkRequestAbortedError('POST', path, {\n cause: options.signal.reason,\n });\n }\n}\n","import {\n createWalletAuthHeaders,\n type WalletAuthDescriptor,\n} from '../../auth/wallet-auth.js';\nimport {\n normalizeCreateTask,\n normalizeTaskPagination,\n normalizeUpdateTask,\n sha256Json,\n toQueryString,\n} from '../../auth/normalize.js';\nimport { GibworkRequestAbortedError } from '../../errors/index.js';\nimport type { WalletSigner } from '../../signers/wallet-signer.js';\nimport { signPreparedTransaction } from '../../transactions/sign-prepared-transaction.js';\nimport type { HttpTransport } from '../../transport/http-transport.js';\nimport type {\n CreateTaskInput,\n CreateTaskResult,\n Paginated,\n PaginationQuery,\n PreparedRefundIntent,\n PreparedTaskIntent,\n RefundSubmitResult,\n RefundTaskResult,\n RequestOptions,\n TaskSubmitResult,\n UpdatedTask,\n UpdateTaskInput,\n WalletTaskSummary,\n} from '../../types/index.js';\n\nexport class TasksResource {\n constructor(\n private readonly transport: HttpTransport,\n private readonly signer: WalletSigner,\n ) {}\n\n async create(\n input: CreateTaskInput,\n options?: RequestOptions,\n ): Promise<CreateTaskResult> {\n const prepared = await this.prepareCreate(input, options);\n assertNotAborted(options, '/v2/int/tasks');\n const signedTransaction = await signPreparedTransaction(\n prepared.serializedTransaction,\n this.signer,\n );\n assertNotAborted(\n options,\n `/v2/int/tasks/${encodeURIComponent(prepared.intentId)}/submit`,\n );\n const submitted = await this.submitCreate(\n prepared.intentId,\n signedTransaction,\n options,\n );\n\n return {\n ...submitted,\n intentId: prepared.intentId,\n lastValidBlockHeight: prepared.lastValidBlockHeight,\n paymentQuote: prepared.paymentQuote,\n };\n }\n\n async list(\n query: PaginationQuery = {},\n options?: RequestOptions,\n ): Promise<Paginated<WalletTaskSummary>> {\n const normalized = normalizeTaskPagination(query);\n const path = '/v2/int/tasks';\n const headers = await this.auth({\n operation: 'gibwork:view-created-tasks',\n method: 'GET',\n path,\n hash: ['queryHash', sha256Json(normalized)],\n });\n\n return this.transport.request({\n method: 'GET',\n path: `${path}?${toQueryString(normalized)}`,\n headers,\n ...(options ? { options } : {}),\n });\n }\n\n async update(\n taskId: string,\n input: UpdateTaskInput,\n options?: RequestOptions,\n ): Promise<UpdatedTask> {\n const path = `/v2/int/tasks/${encodeURIComponent(taskId)}`;\n const body = normalizeUpdateTask(input, this.walletAddress);\n if (Object.keys(body).length === 1) {\n throw new Error('At least one bounty field must be provided');\n }\n const headers = await this.auth({\n operation: 'gibwork:update-task',\n method: 'PATCH',\n path,\n resourceFields: [['taskId', taskId]],\n hash: ['payloadHash', sha256Json(body)],\n });\n\n return this.transport.request({\n method: 'PATCH',\n path,\n headers,\n body,\n ...(options ? { options } : {}),\n });\n }\n\n async refund(\n taskId: string,\n options?: RequestOptions,\n ): Promise<RefundTaskResult> {\n const prepared = await this.prepareRefund(taskId, options);\n const submitPath = `/v2/int/tasks/${encodeURIComponent(taskId)}/refund/${encodeURIComponent(prepared.intentId)}/submit`;\n assertNotAborted(options, submitPath);\n const signedTransaction = await signPreparedTransaction(\n prepared.serializedTransaction,\n this.signer,\n );\n assertNotAborted(options, submitPath);\n const submitted = await this.submitRefund(\n taskId,\n prepared.intentId,\n signedTransaction,\n options,\n );\n\n return {\n ...submitted,\n intentId: prepared.intentId,\n lastValidBlockHeight: prepared.lastValidBlockHeight,\n refundQuote: prepared.refundQuote,\n };\n }\n\n async prepareCreate(\n input: CreateTaskInput,\n options?: RequestOptions,\n ): Promise<PreparedTaskIntent> {\n const path = '/v2/int/tasks';\n const body = normalizeCreateTask(input, this.walletAddress);\n const headers = await this.auth({\n operation: 'gibwork:create-task-intent',\n method: 'POST',\n path,\n hash: ['payloadHash', sha256Json(body)],\n });\n\n return this.transport.request({\n method: 'POST',\n path,\n headers,\n body,\n ...(options ? { options } : {}),\n });\n }\n\n async submitCreate(\n intentId: string,\n signedTransaction: string,\n options?: RequestOptions,\n ): Promise<TaskSubmitResult> {\n const path = `/v2/int/tasks/${encodeURIComponent(intentId)}/submit`;\n return this.transport.request({\n method: 'POST',\n path,\n body: { signedTransaction },\n ...(options ? { options } : {}),\n ambiguousSubmit: {\n operation: 'create-task',\n intentId,\n },\n });\n }\n\n async prepareRefund(\n taskId: string,\n options?: RequestOptions,\n ): Promise<PreparedRefundIntent> {\n const path = `/v2/int/tasks/${encodeURIComponent(taskId)}/refund`;\n const body = { walletAddress: this.walletAddress };\n const headers = await this.auth({\n operation: 'gibwork:refund-task-intent',\n method: 'POST',\n path,\n resourceFields: [['taskId', taskId]],\n hash: ['payloadHash', sha256Json(body)],\n });\n\n return this.transport.request({\n method: 'POST',\n path,\n headers,\n body,\n ...(options ? { options } : {}),\n });\n }\n\n async submitRefund(\n taskId: string,\n intentId: string,\n signedTransaction: string,\n options?: RequestOptions,\n ): Promise<RefundSubmitResult> {\n const path = `/v2/int/tasks/${encodeURIComponent(taskId)}/refund/${encodeURIComponent(intentId)}/submit`;\n return this.transport.request({\n method: 'POST',\n path,\n body: { signedTransaction },\n ...(options ? { options } : {}),\n ambiguousSubmit: {\n operation: 'refund-task',\n taskId,\n intentId,\n },\n });\n }\n\n private get walletAddress(): string {\n return this.signer.publicKey.toBase58();\n }\n\n private auth(\n descriptor: WalletAuthDescriptor,\n ): Promise<Record<string, string>> {\n return createWalletAuthHeaders(this.signer, descriptor);\n }\n}\n\nfunction assertNotAborted(\n options: RequestOptions | undefined,\n path: string,\n): void {\n if (options?.signal?.aborted) {\n throw new GibworkRequestAbortedError('POST', path, {\n cause: options.signal.reason,\n });\n }\n}\n","import {\n GibworkAmbiguousSubmitError,\n GibworkApiError,\n GibworkConfigurationError,\n GibworkNetworkError,\n GibworkRequestAbortedError,\n GibworkTimeoutError,\n type AmbiguousSubmitContext,\n} from '../errors/index.js';\nimport type { RequestOptions } from '../types/index.js';\n\nexport type FetchImplementation = typeof fetch;\n\nexport interface HttpTransportOptions {\n baseUrl: string;\n fetch?: FetchImplementation;\n production?: boolean;\n timeoutMs?: number;\n}\n\nexport interface HttpRequest {\n method: 'GET' | 'POST' | 'PATCH';\n path: string;\n headers?: Record<string, string>;\n body?: unknown;\n options?: RequestOptions;\n ambiguousSubmit?: AmbiguousSubmitContext;\n}\n\nexport class HttpTransport {\n private readonly baseUrl: string;\n private readonly fetchImplementation: FetchImplementation;\n private readonly production: boolean;\n private readonly timeoutMs: number;\n\n constructor(options: HttpTransportOptions) {\n this.baseUrl = normalizeBaseUrl(options.baseUrl);\n this.fetchImplementation = options.fetch ?? globalThis.fetch;\n if (\n options.production !== undefined &&\n typeof options.production !== 'boolean'\n ) {\n throw new GibworkConfigurationError('production must be a boolean');\n }\n this.production = options.production ?? false;\n this.timeoutMs = options.timeoutMs ?? 60_000;\n\n if (typeof this.fetchImplementation !== 'function') {\n throw new GibworkConfigurationError(\n 'A fetch implementation is required in this environment',\n );\n }\n if (!Number.isFinite(this.timeoutMs) || this.timeoutMs <= 0) {\n throw new GibworkConfigurationError(\n 'timeoutMs must be a positive number',\n );\n }\n }\n\n async request<T>(request: HttpRequest): Promise<T> {\n const controller = new AbortController();\n const callerSignal = request.options?.signal;\n let timedOut = false;\n\n if (callerSignal?.aborted) {\n throw new GibworkRequestAbortedError(request.method, request.path, {\n cause: callerSignal.reason,\n });\n }\n\n const abortFromCaller = (): void => controller.abort(callerSignal?.reason);\n callerSignal?.addEventListener('abort', abortFromCaller, { once: true });\n\n const timeout = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, this.timeoutMs);\n\n const headers: Record<string, string> = {\n accept: 'application/json',\n ...request.headers,\n ...(this.production ? { 'x-gibwork-environment': 'prod' } : {}),\n };\n const init: RequestInit = {\n method: request.method,\n headers,\n signal: controller.signal,\n };\n if (request.body !== undefined) {\n headers['content-type'] = 'application/json';\n init.body = JSON.stringify(request.body);\n }\n\n let response: Response;\n try {\n response = await this.fetchImplementation(\n `${this.baseUrl}${request.path}`,\n init,\n );\n } catch (cause) {\n if (request.ambiguousSubmit) {\n throw new GibworkAmbiguousSubmitError(\n request.method,\n request.path,\n request.ambiguousSubmit,\n { cause },\n );\n }\n if (timedOut) {\n throw new GibworkTimeoutError(\n request.method,\n request.path,\n this.timeoutMs,\n { cause },\n );\n }\n if (callerSignal?.aborted) {\n throw new GibworkRequestAbortedError(request.method, request.path, {\n cause,\n });\n }\n throw new GibworkNetworkError(\n 'Could not reach the Gibwork API',\n request.method,\n request.path,\n { cause },\n );\n } finally {\n clearTimeout(timeout);\n callerSignal?.removeEventListener('abort', abortFromCaller);\n }\n\n const body = await parseResponseBody(response);\n if (!response.ok) {\n const requestId = response.headers.get('x-request-id') ?? undefined;\n const apiError = new GibworkApiError(\n response.status,\n body,\n request.method,\n request.path,\n requestId,\n );\n if (request.ambiguousSubmit && response.status >= 500) {\n throw new GibworkAmbiguousSubmitError(\n request.method,\n request.path,\n request.ambiguousSubmit,\n { cause: apiError },\n );\n }\n throw apiError;\n }\n\n return body as T;\n }\n}\n\nfunction normalizeBaseUrl(value: string): string {\n if (typeof value !== 'string' || !value.trim()) {\n throw new GibworkConfigurationError('baseUrl is required');\n }\n\n let url: URL;\n try {\n url = new URL(value.trim());\n } catch (cause) {\n throw new GibworkConfigurationError('baseUrl must be a valid URL', {\n cause,\n });\n }\n\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n throw new GibworkConfigurationError('baseUrl must use http or https');\n }\n if (url.search || url.hash) {\n throw new GibworkConfigurationError(\n 'baseUrl must not include a query string or fragment',\n );\n }\n\n return url.toString().replace(/\\/+$/, '');\n}\n\nasync function parseResponseBody(response: Response): Promise<unknown> {\n const text = await response.text();\n if (!text) return undefined;\n\n try {\n return JSON.parse(text) as unknown;\n } catch {\n return text;\n }\n}\n","import { DEFAULT_GIBWORK_API_URL } from '../config.js';\nimport { GibworkConfigurationError } from '../errors/index.js';\nimport { SubmissionsResource } from '../resources/submissions/submissions-resource.js';\nimport { TasksResource } from '../resources/tasks/tasks-resource.js';\nimport type { WalletSigner } from '../signers/wallet-signer.js';\nimport {\n HttpTransport,\n type FetchImplementation,\n} from '../transport/http-transport.js';\n\nexport interface GibworkClientOptions {\n baseUrl?: string;\n signer: WalletSigner;\n fetch?: FetchImplementation;\n /** Routes all client requests to production when true. Defaults to stage. */\n production?: boolean;\n timeoutMs?: number;\n}\n\nexport class GibworkClient {\n readonly tasks: TasksResource;\n readonly submissions: SubmissionsResource;\n\n constructor(options: GibworkClientOptions) {\n assertSigner(options.signer);\n const transport = new HttpTransport({\n baseUrl: options.baseUrl ?? DEFAULT_GIBWORK_API_URL,\n ...(options.fetch ? { fetch: options.fetch } : {}),\n ...(options.production !== undefined\n ? { production: options.production }\n : {}),\n ...(options.timeoutMs !== undefined\n ? { timeoutMs: options.timeoutMs }\n : {}),\n });\n\n this.tasks = new TasksResource(transport, options.signer);\n this.submissions = new SubmissionsResource(transport, options.signer);\n }\n}\n\nfunction assertSigner(signer: WalletSigner): void {\n if (\n !signer ||\n typeof signer.publicKey?.toBase58 !== 'function' ||\n typeof signer.signMessage !== 'function' ||\n typeof signer.signTransaction !== 'function'\n ) {\n throw new GibworkConfigurationError(\n 'signer must provide publicKey, signMessage, and signTransaction',\n );\n }\n}\n"]}
package/dist/index.cjs CHANGED
@@ -375,6 +375,25 @@ var SubmissionsResource = class {
375
375
  ...options ? { options } : {}
376
376
  });
377
377
  }
378
+ async get(taskId, submissionId, options) {
379
+ const path = `/v2/int/tasks/${encodeURIComponent(taskId)}/submissions/${encodeURIComponent(submissionId)}`;
380
+ const headers = await createWalletAuthHeaders(this.signer, {
381
+ operation: "gibwork:view-task-submission",
382
+ method: "GET",
383
+ path,
384
+ resourceFields: [
385
+ ["taskId", taskId],
386
+ ["taskSubmissionId", submissionId]
387
+ ],
388
+ hash: ["queryHash", sha256Json({})]
389
+ });
390
+ return this.transport.request({
391
+ method: "GET",
392
+ path,
393
+ headers,
394
+ ...options ? { options } : {}
395
+ });
396
+ }
378
397
  async approve(taskId, submissionId, input, options) {
379
398
  const prepared = await this.prepareApproval(
380
399
  taskId,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/config.ts","../src/errors/index.ts","../src/auth/sanitize.ts","../src/auth/normalize.ts","../src/auth/wallet-auth.ts","../src/transactions/sign-prepared-transaction.ts","../src/resources/submissions/submission-comments-resource.ts","../src/resources/submissions/submissions-resource.ts","../src/resources/tasks/tasks-resource.ts","../src/transport/http-transport.ts","../src/client/gibwork-client.ts"],"names":["sanitizeHtml","createHash","randomUUID","VersionedTransaction","assertNotAborted"],"mappings":"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","file":"index.cjs","sourcesContent":["const FALLBACK_GIBWORK_API_URL = 'https://sdk.gib.work';\n\n/** The API origin embedded when this package was built. */\nexport const DEFAULT_GIBWORK_API_URL =\n process.env.GIBWORK_SDK_API_URL?.trim() || FALLBACK_GIBWORK_API_URL;\n","export class GibworkError extends Error {\n override readonly name: string = 'GibworkError';\n}\n\nexport class GibworkConfigurationError extends GibworkError {\n override readonly name: string = 'GibworkConfigurationError';\n}\n\nexport class GibworkApiError extends GibworkError {\n override readonly name: string = 'GibworkApiError';\n\n constructor(\n public readonly status: number,\n public readonly body: unknown,\n public readonly method: string,\n public readonly path: string,\n public readonly requestId?: string,\n ) {\n super(`Gibwork API request failed with HTTP ${status}`);\n }\n}\n\nexport class GibworkNetworkError extends GibworkError {\n override readonly name: string = 'GibworkNetworkError';\n\n constructor(\n message: string,\n public readonly method: string,\n public readonly path: string,\n options?: ErrorOptions,\n ) {\n super(message, options);\n }\n}\n\nexport class GibworkTimeoutError extends GibworkNetworkError {\n override readonly name: string = 'GibworkTimeoutError';\n\n constructor(\n method: string,\n path: string,\n public readonly timeoutMs: number,\n options?: ErrorOptions,\n ) {\n super(\n `Gibwork API request timed out after ${timeoutMs}ms`,\n method,\n path,\n options,\n );\n }\n}\n\nexport class GibworkRequestAbortedError extends GibworkNetworkError {\n override readonly name: string = 'GibworkRequestAbortedError';\n\n constructor(method: string, path: string, options?: ErrorOptions) {\n super('Gibwork API request was aborted', method, path, options);\n }\n}\n\nexport type SubmitOperation =\n 'create-task' | 'refund-task' | 'approve-submission';\n\nexport interface AmbiguousSubmitContext {\n operation: SubmitOperation;\n taskId?: string;\n submissionId?: string;\n intentId: string;\n}\n\nexport class GibworkAmbiguousSubmitError extends GibworkNetworkError {\n override readonly name: string = 'GibworkAmbiguousSubmitError';\n\n constructor(\n method: string,\n path: string,\n public readonly context: AmbiguousSubmitContext,\n options?: ErrorOptions,\n ) {\n super(\n 'The transaction submit outcome is unknown; do not submit the same intent again',\n method,\n path,\n options,\n );\n }\n}\n","import sanitizeHtml from 'sanitize-html';\n\nconst HTML_SANITIZE_OPTIONS: sanitizeHtml.IOptions = {\n allowedTags: sanitizeHtml.defaults.allowedTags.concat(['img']),\n allowedAttributes: {\n ...sanitizeHtml.defaults.allowedAttributes,\n '*': ['class', 'id', 'style', 'data-type'],\n a: ['href', 'name', 'target'],\n img: [\n 'src',\n 'srcset',\n 'alt',\n 'title',\n 'limit',\n 'width',\n 'height',\n 'loading',\n 'maxSize',\n 'fileid',\n ],\n },\n transformTags: {\n a: (tagName, attributes) => {\n if (isAllowedExternalUrl(attributes.href)) {\n return { tagName, attribs: attributes };\n }\n\n const safeAttributes = { ...attributes };\n delete safeAttributes.href;\n return { tagName: 'span', attribs: safeAttributes };\n },\n },\n};\n\nexport function sanitizeContent(content: string): string {\n return sanitizeHtml(content, HTML_SANITIZE_OPTIONS).trim();\n}\n\nfunction isAllowedExternalUrl(value?: string): boolean {\n if (!value) return false;\n const normalized = value.toLowerCase().startsWith('www.')\n ? `https://${value}`\n : value;\n\n try {\n const url = new URL(normalized);\n return (\n (url.protocol === 'http:' || url.protocol === 'https:') &&\n Boolean(url.hostname) &&\n !url.username &&\n !url.password\n );\n } catch {\n return false;\n }\n}\n","import { createHash } from 'node:crypto';\n\nimport type {\n ApproveSubmissionInput,\n CreateTaskInput,\n PaginationQuery,\n SubmissionPaginationQuery,\n UpdateTaskInput,\n} from '../types/index.js';\nimport { sanitizeContent } from './sanitize.js';\n\nexport interface NormalizedCreateTaskBody extends CreateTaskInput {\n walletAddress: string;\n deadline: string | null;\n allowOnlyVerifiedSubmissions: boolean;\n}\n\nexport interface NormalizedUpdateTaskBody extends UpdateTaskInput {\n walletAddress: string;\n}\n\nexport function normalizeCreateTask(\n input: CreateTaskInput,\n walletAddress: string,\n): NormalizedCreateTaskBody {\n const normalized: NormalizedCreateTaskBody = {\n walletAddress: walletAddress.trim(),\n title: input.title.trim(),\n content: sanitizeContent(input.content),\n tags: input.tags.map((tag) => tag.trim()),\n payment: {\n mintAddress: input.payment.mintAddress.trim(),\n amount: input.payment.amount.trim(),\n },\n minSubmissionAmount: input.minSubmissionAmount.trim(),\n deadline: input.deadline ?? null,\n allowOnlyVerifiedSubmissions: input.allowOnlyVerifiedSubmissions ?? false,\n };\n\n const primarySkillSlug = trimOptional(input.primarySkillSlug)?.toLowerCase();\n if (primarySkillSlug !== undefined && primarySkillSlug !== null) {\n normalized.primarySkillSlug = primarySkillSlug;\n }\n\n if (\n input.refundFeeOverride !== undefined &&\n input.refundFeeOverride !== null\n ) {\n normalized.refundFeeOverride = input.refundFeeOverride;\n }\n\n if (input.allowOnlyDiscordGuildSubmissions !== undefined) {\n normalized.allowOnlyDiscordGuildSubmissions =\n input.allowOnlyDiscordGuildSubmissions;\n }\n\n const requiredDiscordGuildId = trimOptional(input.requiredDiscordGuildId);\n if (requiredDiscordGuildId !== undefined) {\n normalized.requiredDiscordGuildId = requiredDiscordGuildId;\n }\n\n const requiredDiscordGuildName = trimOptional(input.requiredDiscordGuildName);\n if (requiredDiscordGuildName !== undefined) {\n normalized.requiredDiscordGuildName = requiredDiscordGuildName;\n }\n\n const discordGuildInvitationUrl = trimOptional(\n input.discordGuildInvitationUrl,\n );\n if (discordGuildInvitationUrl !== undefined) {\n normalized.discordGuildInvitationUrl = discordGuildInvitationUrl;\n }\n\n if (input.requiredDiscordRoleIds !== undefined) {\n const roles = input.requiredDiscordRoleIds\n .map((role) => role.trim())\n .filter(Boolean);\n if (roles.length > 0) normalized.requiredDiscordRoleIds = roles;\n }\n\n return normalized;\n}\n\nexport function normalizeUpdateTask(\n input: UpdateTaskInput,\n walletAddress: string,\n): NormalizedUpdateTaskBody {\n const normalized: NormalizedUpdateTaskBody = {\n walletAddress: walletAddress.trim(),\n };\n\n if (input.content !== undefined) {\n normalized.content = sanitizeContent(input.content);\n }\n if (input.allowOnlyVerifiedSubmissions !== undefined) {\n normalized.allowOnlyVerifiedSubmissions =\n input.allowOnlyVerifiedSubmissions;\n }\n if (input.deadline !== undefined) {\n normalized.deadline = input.deadline.trim();\n }\n\n return normalized;\n}\n\nexport function normalizeTaskPagination(query: PaginationQuery = {}): {\n page: number;\n limit: number;\n pageAll: boolean;\n} {\n return {\n page: query.page ?? 1,\n limit: query.limit ?? 15,\n pageAll: query.pageAll ?? false,\n };\n}\n\nexport function normalizeSubmissionPagination(\n query: SubmissionPaginationQuery = {},\n): {\n page: number;\n limit: number;\n pageAll: boolean;\n status: SubmissionPaginationQuery['status'] | null;\n} {\n return {\n page: query.page ?? 1,\n limit: query.limit ?? 15,\n pageAll: query.pageAll ?? false,\n status: query.status ?? null,\n };\n}\n\nexport function normalizeApproval(\n input: ApproveSubmissionInput,\n walletAddress: string,\n): { walletAddress: string; amount: string; rating?: number } {\n const normalized: {\n walletAddress: string;\n amount: string;\n rating?: number;\n } = {\n walletAddress,\n amount: input.amount.trim(),\n };\n\n if (input.rating !== undefined) normalized.rating = input.rating;\n return normalized;\n}\n\nexport function normalizeRejection(\n reason: string | null | undefined,\n walletAddress: string,\n): { walletAddress: string; rejectReason: string | null } {\n return {\n walletAddress,\n rejectReason: typeof reason === 'string' ? reason.trim() : (reason ?? null),\n };\n}\n\nexport function normalizeComment(\n content: string,\n walletAddress: string,\n): { walletAddress: string; content: string } {\n return {\n walletAddress,\n content: sanitizeContent(content),\n };\n}\n\nexport function sha256Json(value: unknown): string {\n return createHash('sha256')\n .update(JSON.stringify(value), 'utf8')\n .digest('hex');\n}\n\nexport function toQueryString(values: Record<string, unknown>): string {\n const query = new URLSearchParams();\n for (const [key, value] of Object.entries(values)) {\n if (value !== undefined && value !== null) query.set(key, String(value));\n }\n return query.toString();\n}\n\nfunction trimOptional(\n value: string | null | undefined,\n): string | null | undefined {\n if (typeof value !== 'string') return value;\n const trimmed = value.trim();\n return trimmed === '' ? undefined : trimmed;\n}\n","import { randomUUID } from 'node:crypto';\n\nimport { GibworkConfigurationError } from '../errors/index.js';\nimport type { WalletSigner } from '../signers/wallet-signer.js';\n\nexport interface WalletAuthDescriptor {\n operation: string;\n method: 'GET' | 'POST' | 'PATCH';\n path: string;\n resourceFields?: ReadonlyArray<readonly [name: string, value: string]>;\n hash: readonly [name: 'payloadHash' | 'queryHash', value: string];\n}\n\ninterface WalletAuthValues {\n walletAddress: string;\n timestamp: string;\n nonce: string;\n}\n\ninterface WalletAuthDependencies {\n now?: () => number;\n nonce?: () => string;\n}\n\nexport async function createWalletAuthHeaders(\n signer: WalletSigner,\n descriptor: WalletAuthDescriptor,\n dependencies: WalletAuthDependencies = {},\n): Promise<Record<string, string>> {\n const values: WalletAuthValues = {\n walletAddress: signer.publicKey.toBase58(),\n timestamp: Math.floor(\n (dependencies.now?.() ?? Date.now()) / 1000,\n ).toString(),\n nonce: dependencies.nonce?.() ?? randomUUID(),\n };\n const message = buildWalletAuthMessage(descriptor, values);\n const signature = await signer.signMessage(new TextEncoder().encode(message));\n\n if (!(signature instanceof Uint8Array) || signature.length !== 64) {\n throw new GibworkConfigurationError(\n 'WalletSigner.signMessage must return a 64-byte Ed25519 signature',\n );\n }\n\n return {\n 'x-gibwork-wallet-address': values.walletAddress,\n 'x-gibwork-timestamp': values.timestamp,\n 'x-gibwork-nonce': values.nonce,\n 'x-gibwork-signature': Buffer.from(signature).toString('base64'),\n };\n}\n\nexport function buildWalletAuthMessage(\n descriptor: WalletAuthDescriptor,\n values: WalletAuthValues,\n): string {\n return [\n descriptor.operation,\n `method:${descriptor.method}`,\n `path:${descriptor.path}`,\n ...(descriptor.resourceFields ?? []).map(\n ([name, value]) => `${name}:${value}`,\n ),\n `walletAddress:${values.walletAddress}`,\n `timestamp:${values.timestamp}`,\n `nonce:${values.nonce}`,\n `${descriptor.hash[0]}:${descriptor.hash[1]}`,\n ].join('\\n');\n}\n","import { VersionedTransaction } from '@solana/web3.js';\n\nimport { GibworkConfigurationError } from '../errors/index.js';\nimport type { WalletSigner } from '../signers/wallet-signer.js';\n\nexport async function signPreparedTransaction(\n serializedTransaction: string,\n signer: WalletSigner,\n): Promise<string> {\n if (typeof serializedTransaction !== 'string' || !serializedTransaction) {\n throw new GibworkConfigurationError(\n 'serializedTransaction must be a non-empty base64 string',\n );\n }\n\n let transaction: VersionedTransaction;\n try {\n transaction = VersionedTransaction.deserialize(\n Buffer.from(serializedTransaction, 'base64'),\n );\n } catch (cause) {\n throw new GibworkConfigurationError(\n 'serializedTransaction is not a valid Solana VersionedTransaction',\n { cause },\n );\n }\n\n const signed = await signer.signTransaction(transaction);\n if (!(signed instanceof VersionedTransaction)) {\n throw new GibworkConfigurationError(\n 'WalletSigner.signTransaction must return a VersionedTransaction',\n );\n }\n\n return Buffer.from(signed.serialize()).toString('base64');\n}\n","import { normalizeComment, sha256Json } from '../../auth/normalize.js';\nimport { createWalletAuthHeaders } from '../../auth/wallet-auth.js';\nimport type { WalletSigner } from '../../signers/wallet-signer.js';\nimport type { HttpTransport } from '../../transport/http-transport.js';\nimport type { RequestOptions, SubmissionComment } from '../../types/index.js';\n\nexport class SubmissionCommentsResource {\n constructor(\n private readonly transport: HttpTransport,\n private readonly signer: WalletSigner,\n ) {}\n\n async list(\n taskId: string,\n submissionId: string,\n options?: RequestOptions,\n ): Promise<SubmissionComment[]> {\n const path = commentsPath(taskId, submissionId);\n const headers = await createWalletAuthHeaders(this.signer, {\n operation: 'gibwork:view-task-submission-comments',\n method: 'GET',\n path,\n resourceFields: [\n ['taskId', taskId],\n ['taskSubmissionId', submissionId],\n ],\n hash: ['queryHash', sha256Json({})],\n });\n\n return this.transport.request({\n method: 'GET',\n path,\n headers,\n ...(options ? { options } : {}),\n });\n }\n\n async create(\n taskId: string,\n submissionId: string,\n content: string,\n options?: RequestOptions,\n ): Promise<SubmissionComment> {\n const path = commentsPath(taskId, submissionId);\n const body = normalizeComment(content, this.signer.publicKey.toBase58());\n const headers = await createWalletAuthHeaders(this.signer, {\n operation: 'gibwork:create-task-submission-comment',\n method: 'POST',\n path,\n resourceFields: [\n ['taskId', taskId],\n ['taskSubmissionId', submissionId],\n ],\n hash: ['payloadHash', sha256Json(body)],\n });\n\n return this.transport.request({\n method: 'POST',\n path,\n headers,\n body,\n ...(options ? { options } : {}),\n });\n }\n}\n\nfunction commentsPath(taskId: string, submissionId: string): string {\n return `/v2/int/tasks/${encodeURIComponent(taskId)}/submission/${encodeURIComponent(submissionId)}/comments`;\n}\n","import {\n normalizeApproval,\n normalizeRejection,\n normalizeSubmissionPagination,\n sha256Json,\n toQueryString,\n} from '../../auth/normalize.js';\nimport { createWalletAuthHeaders } from '../../auth/wallet-auth.js';\nimport { GibworkRequestAbortedError } from '../../errors/index.js';\nimport type { WalletSigner } from '../../signers/wallet-signer.js';\nimport { signPreparedTransaction } from '../../transactions/sign-prepared-transaction.js';\nimport type { HttpTransport } from '../../transport/http-transport.js';\nimport type {\n ApprovalSubmitResult,\n ApproveSubmissionInput,\n ApproveSubmissionResult,\n Paginated,\n PreparedApprovalIntent,\n RejectSubmissionResult,\n RequestOptions,\n SubmissionPaginationQuery,\n TaskSubmission,\n} from '../../types/index.js';\nimport { SubmissionCommentsResource } from './submission-comments-resource.js';\n\nexport class SubmissionsResource {\n readonly comments: SubmissionCommentsResource;\n\n constructor(\n private readonly transport: HttpTransport,\n private readonly signer: WalletSigner,\n ) {\n this.comments = new SubmissionCommentsResource(transport, signer);\n }\n\n async list(\n taskId: string,\n query: SubmissionPaginationQuery = {},\n options?: RequestOptions,\n ): Promise<Paginated<TaskSubmission>> {\n const normalized = normalizeSubmissionPagination(query);\n const path = `/v2/int/tasks/${encodeURIComponent(taskId)}/submissions`;\n const headers = await createWalletAuthHeaders(this.signer, {\n operation: 'gibwork:view-task-submissions',\n method: 'GET',\n path,\n resourceFields: [['taskId', taskId]],\n hash: ['queryHash', sha256Json(normalized)],\n });\n const requestQuery: Record<string, unknown> = { ...normalized };\n if (requestQuery.status === null) delete requestQuery.status;\n\n return this.transport.request({\n method: 'GET',\n path: `${path}?${toQueryString(requestQuery)}`,\n headers,\n ...(options ? { options } : {}),\n });\n }\n\n async approve(\n taskId: string,\n submissionId: string,\n input: ApproveSubmissionInput,\n options?: RequestOptions,\n ): Promise<ApproveSubmissionResult> {\n const prepared = await this.prepareApproval(\n taskId,\n submissionId,\n input,\n options,\n );\n const submitPath = approvalSubmitPath(\n taskId,\n submissionId,\n prepared.intentId,\n );\n assertNotAborted(options, submitPath);\n const signedTransaction = await signPreparedTransaction(\n prepared.serializedTransaction,\n this.signer,\n );\n assertNotAborted(options, submitPath);\n const submitted = await this.submitApproval(\n taskId,\n submissionId,\n prepared.intentId,\n signedTransaction,\n options,\n );\n\n return {\n ...submitted,\n intentId: prepared.intentId,\n lastValidBlockHeight: prepared.lastValidBlockHeight,\n approvalQuote: prepared.approvalQuote,\n };\n }\n\n async reject(\n taskId: string,\n submissionId: string,\n reason?: string | null,\n options?: RequestOptions,\n ): Promise<RejectSubmissionResult> {\n const path = `/v2/int/tasks/${encodeURIComponent(taskId)}/submission/${encodeURIComponent(submissionId)}/reject`;\n const body = normalizeRejection(reason, this.walletAddress);\n const headers = await createWalletAuthHeaders(this.signer, {\n operation: 'gibwork:reject-task-submission',\n method: 'POST',\n path,\n resourceFields: [\n ['taskId', taskId],\n ['taskSubmissionId', submissionId],\n ],\n hash: ['payloadHash', sha256Json(body)],\n });\n\n return this.transport.request({\n method: 'POST',\n path,\n headers,\n body,\n ...(options ? { options } : {}),\n });\n }\n\n async prepareApproval(\n taskId: string,\n submissionId: string,\n input: ApproveSubmissionInput,\n options?: RequestOptions,\n ): Promise<PreparedApprovalIntent> {\n const path = `/v2/int/tasks/${encodeURIComponent(taskId)}/submission/${encodeURIComponent(submissionId)}/pay`;\n const body = normalizeApproval(input, this.walletAddress);\n const headers = await createWalletAuthHeaders(this.signer, {\n operation: 'gibwork:approve-task-submission-intent',\n method: 'POST',\n path,\n resourceFields: [\n ['taskId', taskId],\n ['taskSubmissionId', submissionId],\n ],\n hash: ['payloadHash', sha256Json(body)],\n });\n\n return this.transport.request({\n method: 'POST',\n path,\n headers,\n body,\n ...(options ? { options } : {}),\n });\n }\n\n async submitApproval(\n taskId: string,\n submissionId: string,\n intentId: string,\n signedTransaction: string,\n options?: RequestOptions,\n ): Promise<ApprovalSubmitResult> {\n const path = approvalSubmitPath(taskId, submissionId, intentId);\n return this.transport.request({\n method: 'POST',\n path,\n body: { signedTransaction },\n ...(options ? { options } : {}),\n ambiguousSubmit: {\n operation: 'approve-submission',\n taskId,\n submissionId,\n intentId,\n },\n });\n }\n\n private get walletAddress(): string {\n return this.signer.publicKey.toBase58();\n }\n}\n\nfunction approvalSubmitPath(\n taskId: string,\n submissionId: string,\n intentId: string,\n): string {\n return `/v2/int/tasks/${encodeURIComponent(taskId)}/submission/${encodeURIComponent(submissionId)}/pay/${encodeURIComponent(intentId)}/submit`;\n}\n\nfunction assertNotAborted(\n options: RequestOptions | undefined,\n path: string,\n): void {\n if (options?.signal?.aborted) {\n throw new GibworkRequestAbortedError('POST', path, {\n cause: options.signal.reason,\n });\n }\n}\n","import {\n createWalletAuthHeaders,\n type WalletAuthDescriptor,\n} from '../../auth/wallet-auth.js';\nimport {\n normalizeCreateTask,\n normalizeTaskPagination,\n normalizeUpdateTask,\n sha256Json,\n toQueryString,\n} from '../../auth/normalize.js';\nimport { GibworkRequestAbortedError } from '../../errors/index.js';\nimport type { WalletSigner } from '../../signers/wallet-signer.js';\nimport { signPreparedTransaction } from '../../transactions/sign-prepared-transaction.js';\nimport type { HttpTransport } from '../../transport/http-transport.js';\nimport type {\n CreateTaskInput,\n CreateTaskResult,\n Paginated,\n PaginationQuery,\n PreparedRefundIntent,\n PreparedTaskIntent,\n RefundSubmitResult,\n RefundTaskResult,\n RequestOptions,\n TaskSubmitResult,\n UpdatedTask,\n UpdateTaskInput,\n WalletTaskSummary,\n} from '../../types/index.js';\n\nexport class TasksResource {\n constructor(\n private readonly transport: HttpTransport,\n private readonly signer: WalletSigner,\n ) {}\n\n async create(\n input: CreateTaskInput,\n options?: RequestOptions,\n ): Promise<CreateTaskResult> {\n const prepared = await this.prepareCreate(input, options);\n assertNotAborted(options, '/v2/int/tasks');\n const signedTransaction = await signPreparedTransaction(\n prepared.serializedTransaction,\n this.signer,\n );\n assertNotAborted(\n options,\n `/v2/int/tasks/${encodeURIComponent(prepared.intentId)}/submit`,\n );\n const submitted = await this.submitCreate(\n prepared.intentId,\n signedTransaction,\n options,\n );\n\n return {\n ...submitted,\n intentId: prepared.intentId,\n lastValidBlockHeight: prepared.lastValidBlockHeight,\n paymentQuote: prepared.paymentQuote,\n };\n }\n\n async list(\n query: PaginationQuery = {},\n options?: RequestOptions,\n ): Promise<Paginated<WalletTaskSummary>> {\n const normalized = normalizeTaskPagination(query);\n const path = '/v2/int/tasks';\n const headers = await this.auth({\n operation: 'gibwork:view-created-tasks',\n method: 'GET',\n path,\n hash: ['queryHash', sha256Json(normalized)],\n });\n\n return this.transport.request({\n method: 'GET',\n path: `${path}?${toQueryString(normalized)}`,\n headers,\n ...(options ? { options } : {}),\n });\n }\n\n async update(\n taskId: string,\n input: UpdateTaskInput,\n options?: RequestOptions,\n ): Promise<UpdatedTask> {\n const path = `/v2/int/tasks/${encodeURIComponent(taskId)}`;\n const body = normalizeUpdateTask(input, this.walletAddress);\n if (Object.keys(body).length === 1) {\n throw new Error('At least one bounty field must be provided');\n }\n const headers = await this.auth({\n operation: 'gibwork:update-task',\n method: 'PATCH',\n path,\n resourceFields: [['taskId', taskId]],\n hash: ['payloadHash', sha256Json(body)],\n });\n\n return this.transport.request({\n method: 'PATCH',\n path,\n headers,\n body,\n ...(options ? { options } : {}),\n });\n }\n\n async refund(\n taskId: string,\n options?: RequestOptions,\n ): Promise<RefundTaskResult> {\n const prepared = await this.prepareRefund(taskId, options);\n const submitPath = `/v2/int/tasks/${encodeURIComponent(taskId)}/refund/${encodeURIComponent(prepared.intentId)}/submit`;\n assertNotAborted(options, submitPath);\n const signedTransaction = await signPreparedTransaction(\n prepared.serializedTransaction,\n this.signer,\n );\n assertNotAborted(options, submitPath);\n const submitted = await this.submitRefund(\n taskId,\n prepared.intentId,\n signedTransaction,\n options,\n );\n\n return {\n ...submitted,\n intentId: prepared.intentId,\n lastValidBlockHeight: prepared.lastValidBlockHeight,\n refundQuote: prepared.refundQuote,\n };\n }\n\n async prepareCreate(\n input: CreateTaskInput,\n options?: RequestOptions,\n ): Promise<PreparedTaskIntent> {\n const path = '/v2/int/tasks';\n const body = normalizeCreateTask(input, this.walletAddress);\n const headers = await this.auth({\n operation: 'gibwork:create-task-intent',\n method: 'POST',\n path,\n hash: ['payloadHash', sha256Json(body)],\n });\n\n return this.transport.request({\n method: 'POST',\n path,\n headers,\n body,\n ...(options ? { options } : {}),\n });\n }\n\n async submitCreate(\n intentId: string,\n signedTransaction: string,\n options?: RequestOptions,\n ): Promise<TaskSubmitResult> {\n const path = `/v2/int/tasks/${encodeURIComponent(intentId)}/submit`;\n return this.transport.request({\n method: 'POST',\n path,\n body: { signedTransaction },\n ...(options ? { options } : {}),\n ambiguousSubmit: {\n operation: 'create-task',\n intentId,\n },\n });\n }\n\n async prepareRefund(\n taskId: string,\n options?: RequestOptions,\n ): Promise<PreparedRefundIntent> {\n const path = `/v2/int/tasks/${encodeURIComponent(taskId)}/refund`;\n const body = { walletAddress: this.walletAddress };\n const headers = await this.auth({\n operation: 'gibwork:refund-task-intent',\n method: 'POST',\n path,\n resourceFields: [['taskId', taskId]],\n hash: ['payloadHash', sha256Json(body)],\n });\n\n return this.transport.request({\n method: 'POST',\n path,\n headers,\n body,\n ...(options ? { options } : {}),\n });\n }\n\n async submitRefund(\n taskId: string,\n intentId: string,\n signedTransaction: string,\n options?: RequestOptions,\n ): Promise<RefundSubmitResult> {\n const path = `/v2/int/tasks/${encodeURIComponent(taskId)}/refund/${encodeURIComponent(intentId)}/submit`;\n return this.transport.request({\n method: 'POST',\n path,\n body: { signedTransaction },\n ...(options ? { options } : {}),\n ambiguousSubmit: {\n operation: 'refund-task',\n taskId,\n intentId,\n },\n });\n }\n\n private get walletAddress(): string {\n return this.signer.publicKey.toBase58();\n }\n\n private auth(\n descriptor: WalletAuthDescriptor,\n ): Promise<Record<string, string>> {\n return createWalletAuthHeaders(this.signer, descriptor);\n }\n}\n\nfunction assertNotAborted(\n options: RequestOptions | undefined,\n path: string,\n): void {\n if (options?.signal?.aborted) {\n throw new GibworkRequestAbortedError('POST', path, {\n cause: options.signal.reason,\n });\n }\n}\n","import {\n GibworkAmbiguousSubmitError,\n GibworkApiError,\n GibworkConfigurationError,\n GibworkNetworkError,\n GibworkRequestAbortedError,\n GibworkTimeoutError,\n type AmbiguousSubmitContext,\n} from '../errors/index.js';\nimport type { RequestOptions } from '../types/index.js';\n\nexport type FetchImplementation = typeof fetch;\n\nexport interface HttpTransportOptions {\n baseUrl: string;\n fetch?: FetchImplementation;\n production?: boolean;\n timeoutMs?: number;\n}\n\nexport interface HttpRequest {\n method: 'GET' | 'POST' | 'PATCH';\n path: string;\n headers?: Record<string, string>;\n body?: unknown;\n options?: RequestOptions;\n ambiguousSubmit?: AmbiguousSubmitContext;\n}\n\nexport class HttpTransport {\n private readonly baseUrl: string;\n private readonly fetchImplementation: FetchImplementation;\n private readonly production: boolean;\n private readonly timeoutMs: number;\n\n constructor(options: HttpTransportOptions) {\n this.baseUrl = normalizeBaseUrl(options.baseUrl);\n this.fetchImplementation = options.fetch ?? globalThis.fetch;\n if (\n options.production !== undefined &&\n typeof options.production !== 'boolean'\n ) {\n throw new GibworkConfigurationError('production must be a boolean');\n }\n this.production = options.production ?? false;\n this.timeoutMs = options.timeoutMs ?? 60_000;\n\n if (typeof this.fetchImplementation !== 'function') {\n throw new GibworkConfigurationError(\n 'A fetch implementation is required in this environment',\n );\n }\n if (!Number.isFinite(this.timeoutMs) || this.timeoutMs <= 0) {\n throw new GibworkConfigurationError(\n 'timeoutMs must be a positive number',\n );\n }\n }\n\n async request<T>(request: HttpRequest): Promise<T> {\n const controller = new AbortController();\n const callerSignal = request.options?.signal;\n let timedOut = false;\n\n if (callerSignal?.aborted) {\n throw new GibworkRequestAbortedError(request.method, request.path, {\n cause: callerSignal.reason,\n });\n }\n\n const abortFromCaller = (): void => controller.abort(callerSignal?.reason);\n callerSignal?.addEventListener('abort', abortFromCaller, { once: true });\n\n const timeout = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, this.timeoutMs);\n\n const headers: Record<string, string> = {\n accept: 'application/json',\n ...request.headers,\n ...(this.production ? { 'x-gibwork-environment': 'prod' } : {}),\n };\n const init: RequestInit = {\n method: request.method,\n headers,\n signal: controller.signal,\n };\n if (request.body !== undefined) {\n headers['content-type'] = 'application/json';\n init.body = JSON.stringify(request.body);\n }\n\n let response: Response;\n try {\n response = await this.fetchImplementation(\n `${this.baseUrl}${request.path}`,\n init,\n );\n } catch (cause) {\n if (request.ambiguousSubmit) {\n throw new GibworkAmbiguousSubmitError(\n request.method,\n request.path,\n request.ambiguousSubmit,\n { cause },\n );\n }\n if (timedOut) {\n throw new GibworkTimeoutError(\n request.method,\n request.path,\n this.timeoutMs,\n { cause },\n );\n }\n if (callerSignal?.aborted) {\n throw new GibworkRequestAbortedError(request.method, request.path, {\n cause,\n });\n }\n throw new GibworkNetworkError(\n 'Could not reach the Gibwork API',\n request.method,\n request.path,\n { cause },\n );\n } finally {\n clearTimeout(timeout);\n callerSignal?.removeEventListener('abort', abortFromCaller);\n }\n\n const body = await parseResponseBody(response);\n if (!response.ok) {\n const requestId = response.headers.get('x-request-id') ?? undefined;\n const apiError = new GibworkApiError(\n response.status,\n body,\n request.method,\n request.path,\n requestId,\n );\n if (request.ambiguousSubmit && response.status >= 500) {\n throw new GibworkAmbiguousSubmitError(\n request.method,\n request.path,\n request.ambiguousSubmit,\n { cause: apiError },\n );\n }\n throw apiError;\n }\n\n return body as T;\n }\n}\n\nfunction normalizeBaseUrl(value: string): string {\n if (typeof value !== 'string' || !value.trim()) {\n throw new GibworkConfigurationError('baseUrl is required');\n }\n\n let url: URL;\n try {\n url = new URL(value.trim());\n } catch (cause) {\n throw new GibworkConfigurationError('baseUrl must be a valid URL', {\n cause,\n });\n }\n\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n throw new GibworkConfigurationError('baseUrl must use http or https');\n }\n if (url.search || url.hash) {\n throw new GibworkConfigurationError(\n 'baseUrl must not include a query string or fragment',\n );\n }\n\n return url.toString().replace(/\\/+$/, '');\n}\n\nasync function parseResponseBody(response: Response): Promise<unknown> {\n const text = await response.text();\n if (!text) return undefined;\n\n try {\n return JSON.parse(text) as unknown;\n } catch {\n return text;\n }\n}\n","import { DEFAULT_GIBWORK_API_URL } from '../config.js';\nimport { GibworkConfigurationError } from '../errors/index.js';\nimport { SubmissionsResource } from '../resources/submissions/submissions-resource.js';\nimport { TasksResource } from '../resources/tasks/tasks-resource.js';\nimport type { WalletSigner } from '../signers/wallet-signer.js';\nimport {\n HttpTransport,\n type FetchImplementation,\n} from '../transport/http-transport.js';\n\nexport interface GibworkClientOptions {\n baseUrl?: string;\n signer: WalletSigner;\n fetch?: FetchImplementation;\n /** Routes all client requests to production when true. Defaults to stage. */\n production?: boolean;\n timeoutMs?: number;\n}\n\nexport class GibworkClient {\n readonly tasks: TasksResource;\n readonly submissions: SubmissionsResource;\n\n constructor(options: GibworkClientOptions) {\n assertSigner(options.signer);\n const transport = new HttpTransport({\n baseUrl: options.baseUrl ?? DEFAULT_GIBWORK_API_URL,\n ...(options.fetch ? { fetch: options.fetch } : {}),\n ...(options.production !== undefined\n ? { production: options.production }\n : {}),\n ...(options.timeoutMs !== undefined\n ? { timeoutMs: options.timeoutMs }\n : {}),\n });\n\n this.tasks = new TasksResource(transport, options.signer);\n this.submissions = new SubmissionsResource(transport, options.signer);\n }\n}\n\nfunction assertSigner(signer: WalletSigner): void {\n if (\n !signer ||\n typeof signer.publicKey?.toBase58 !== 'function' ||\n typeof signer.signMessage !== 'function' ||\n typeof signer.signTransaction !== 'function'\n ) {\n throw new GibworkConfigurationError(\n 'signer must provide publicKey, signMessage, and signTransaction',\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/config.ts","../src/errors/index.ts","../src/auth/sanitize.ts","../src/auth/normalize.ts","../src/auth/wallet-auth.ts","../src/transactions/sign-prepared-transaction.ts","../src/resources/submissions/submission-comments-resource.ts","../src/resources/submissions/submissions-resource.ts","../src/resources/tasks/tasks-resource.ts","../src/transport/http-transport.ts","../src/client/gibwork-client.ts"],"names":["sanitizeHtml","createHash","randomUUID","VersionedTransaction","assertNotAborted"],"mappings":"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","file":"index.cjs","sourcesContent":["const FALLBACK_GIBWORK_API_URL = 'https://sdk.gib.work';\n\n/** The API origin embedded when this package was built. */\nexport const DEFAULT_GIBWORK_API_URL =\n process.env.GIBWORK_SDK_API_URL?.trim() || FALLBACK_GIBWORK_API_URL;\n","export class GibworkError extends Error {\n override readonly name: string = 'GibworkError';\n}\n\nexport class GibworkConfigurationError extends GibworkError {\n override readonly name: string = 'GibworkConfigurationError';\n}\n\nexport class GibworkApiError extends GibworkError {\n override readonly name: string = 'GibworkApiError';\n\n constructor(\n public readonly status: number,\n public readonly body: unknown,\n public readonly method: string,\n public readonly path: string,\n public readonly requestId?: string,\n ) {\n super(`Gibwork API request failed with HTTP ${status}`);\n }\n}\n\nexport class GibworkNetworkError extends GibworkError {\n override readonly name: string = 'GibworkNetworkError';\n\n constructor(\n message: string,\n public readonly method: string,\n public readonly path: string,\n options?: ErrorOptions,\n ) {\n super(message, options);\n }\n}\n\nexport class GibworkTimeoutError extends GibworkNetworkError {\n override readonly name: string = 'GibworkTimeoutError';\n\n constructor(\n method: string,\n path: string,\n public readonly timeoutMs: number,\n options?: ErrorOptions,\n ) {\n super(\n `Gibwork API request timed out after ${timeoutMs}ms`,\n method,\n path,\n options,\n );\n }\n}\n\nexport class GibworkRequestAbortedError extends GibworkNetworkError {\n override readonly name: string = 'GibworkRequestAbortedError';\n\n constructor(method: string, path: string, options?: ErrorOptions) {\n super('Gibwork API request was aborted', method, path, options);\n }\n}\n\nexport type SubmitOperation =\n 'create-task' | 'refund-task' | 'approve-submission';\n\nexport interface AmbiguousSubmitContext {\n operation: SubmitOperation;\n taskId?: string;\n submissionId?: string;\n intentId: string;\n}\n\nexport class GibworkAmbiguousSubmitError extends GibworkNetworkError {\n override readonly name: string = 'GibworkAmbiguousSubmitError';\n\n constructor(\n method: string,\n path: string,\n public readonly context: AmbiguousSubmitContext,\n options?: ErrorOptions,\n ) {\n super(\n 'The transaction submit outcome is unknown; do not submit the same intent again',\n method,\n path,\n options,\n );\n }\n}\n","import sanitizeHtml from 'sanitize-html';\n\nconst HTML_SANITIZE_OPTIONS: sanitizeHtml.IOptions = {\n allowedTags: sanitizeHtml.defaults.allowedTags.concat(['img']),\n allowedAttributes: {\n ...sanitizeHtml.defaults.allowedAttributes,\n '*': ['class', 'id', 'style', 'data-type'],\n a: ['href', 'name', 'target'],\n img: [\n 'src',\n 'srcset',\n 'alt',\n 'title',\n 'limit',\n 'width',\n 'height',\n 'loading',\n 'maxSize',\n 'fileid',\n ],\n },\n transformTags: {\n a: (tagName, attributes) => {\n if (isAllowedExternalUrl(attributes.href)) {\n return { tagName, attribs: attributes };\n }\n\n const safeAttributes = { ...attributes };\n delete safeAttributes.href;\n return { tagName: 'span', attribs: safeAttributes };\n },\n },\n};\n\nexport function sanitizeContent(content: string): string {\n return sanitizeHtml(content, HTML_SANITIZE_OPTIONS).trim();\n}\n\nfunction isAllowedExternalUrl(value?: string): boolean {\n if (!value) return false;\n const normalized = value.toLowerCase().startsWith('www.')\n ? `https://${value}`\n : value;\n\n try {\n const url = new URL(normalized);\n return (\n (url.protocol === 'http:' || url.protocol === 'https:') &&\n Boolean(url.hostname) &&\n !url.username &&\n !url.password\n );\n } catch {\n return false;\n }\n}\n","import { createHash } from 'node:crypto';\n\nimport type {\n ApproveSubmissionInput,\n CreateTaskInput,\n PaginationQuery,\n SubmissionPaginationQuery,\n UpdateTaskInput,\n} from '../types/index.js';\nimport { sanitizeContent } from './sanitize.js';\n\nexport interface NormalizedCreateTaskBody extends CreateTaskInput {\n walletAddress: string;\n deadline: string | null;\n allowOnlyVerifiedSubmissions: boolean;\n}\n\nexport interface NormalizedUpdateTaskBody extends UpdateTaskInput {\n walletAddress: string;\n}\n\nexport function normalizeCreateTask(\n input: CreateTaskInput,\n walletAddress: string,\n): NormalizedCreateTaskBody {\n const normalized: NormalizedCreateTaskBody = {\n walletAddress: walletAddress.trim(),\n title: input.title.trim(),\n content: sanitizeContent(input.content),\n tags: input.tags.map((tag) => tag.trim()),\n payment: {\n mintAddress: input.payment.mintAddress.trim(),\n amount: input.payment.amount.trim(),\n },\n minSubmissionAmount: input.minSubmissionAmount.trim(),\n deadline: input.deadline ?? null,\n allowOnlyVerifiedSubmissions: input.allowOnlyVerifiedSubmissions ?? false,\n };\n\n const primarySkillSlug = trimOptional(input.primarySkillSlug)?.toLowerCase();\n if (primarySkillSlug !== undefined && primarySkillSlug !== null) {\n normalized.primarySkillSlug = primarySkillSlug;\n }\n\n if (\n input.refundFeeOverride !== undefined &&\n input.refundFeeOverride !== null\n ) {\n normalized.refundFeeOverride = input.refundFeeOverride;\n }\n\n if (input.allowOnlyDiscordGuildSubmissions !== undefined) {\n normalized.allowOnlyDiscordGuildSubmissions =\n input.allowOnlyDiscordGuildSubmissions;\n }\n\n const requiredDiscordGuildId = trimOptional(input.requiredDiscordGuildId);\n if (requiredDiscordGuildId !== undefined) {\n normalized.requiredDiscordGuildId = requiredDiscordGuildId;\n }\n\n const requiredDiscordGuildName = trimOptional(input.requiredDiscordGuildName);\n if (requiredDiscordGuildName !== undefined) {\n normalized.requiredDiscordGuildName = requiredDiscordGuildName;\n }\n\n const discordGuildInvitationUrl = trimOptional(\n input.discordGuildInvitationUrl,\n );\n if (discordGuildInvitationUrl !== undefined) {\n normalized.discordGuildInvitationUrl = discordGuildInvitationUrl;\n }\n\n if (input.requiredDiscordRoleIds !== undefined) {\n const roles = input.requiredDiscordRoleIds\n .map((role) => role.trim())\n .filter(Boolean);\n if (roles.length > 0) normalized.requiredDiscordRoleIds = roles;\n }\n\n return normalized;\n}\n\nexport function normalizeUpdateTask(\n input: UpdateTaskInput,\n walletAddress: string,\n): NormalizedUpdateTaskBody {\n const normalized: NormalizedUpdateTaskBody = {\n walletAddress: walletAddress.trim(),\n };\n\n if (input.content !== undefined) {\n normalized.content = sanitizeContent(input.content);\n }\n if (input.allowOnlyVerifiedSubmissions !== undefined) {\n normalized.allowOnlyVerifiedSubmissions =\n input.allowOnlyVerifiedSubmissions;\n }\n if (input.deadline !== undefined) {\n normalized.deadline = input.deadline.trim();\n }\n\n return normalized;\n}\n\nexport function normalizeTaskPagination(query: PaginationQuery = {}): {\n page: number;\n limit: number;\n pageAll: boolean;\n} {\n return {\n page: query.page ?? 1,\n limit: query.limit ?? 15,\n pageAll: query.pageAll ?? false,\n };\n}\n\nexport function normalizeSubmissionPagination(\n query: SubmissionPaginationQuery = {},\n): {\n page: number;\n limit: number;\n pageAll: boolean;\n status: SubmissionPaginationQuery['status'] | null;\n} {\n return {\n page: query.page ?? 1,\n limit: query.limit ?? 15,\n pageAll: query.pageAll ?? false,\n status: query.status ?? null,\n };\n}\n\nexport function normalizeApproval(\n input: ApproveSubmissionInput,\n walletAddress: string,\n): { walletAddress: string; amount: string; rating?: number } {\n const normalized: {\n walletAddress: string;\n amount: string;\n rating?: number;\n } = {\n walletAddress,\n amount: input.amount.trim(),\n };\n\n if (input.rating !== undefined) normalized.rating = input.rating;\n return normalized;\n}\n\nexport function normalizeRejection(\n reason: string | null | undefined,\n walletAddress: string,\n): { walletAddress: string; rejectReason: string | null } {\n return {\n walletAddress,\n rejectReason: typeof reason === 'string' ? reason.trim() : (reason ?? null),\n };\n}\n\nexport function normalizeComment(\n content: string,\n walletAddress: string,\n): { walletAddress: string; content: string } {\n return {\n walletAddress,\n content: sanitizeContent(content),\n };\n}\n\nexport function sha256Json(value: unknown): string {\n return createHash('sha256')\n .update(JSON.stringify(value), 'utf8')\n .digest('hex');\n}\n\nexport function toQueryString(values: Record<string, unknown>): string {\n const query = new URLSearchParams();\n for (const [key, value] of Object.entries(values)) {\n if (value !== undefined && value !== null) query.set(key, String(value));\n }\n return query.toString();\n}\n\nfunction trimOptional(\n value: string | null | undefined,\n): string | null | undefined {\n if (typeof value !== 'string') return value;\n const trimmed = value.trim();\n return trimmed === '' ? undefined : trimmed;\n}\n","import { randomUUID } from 'node:crypto';\n\nimport { GibworkConfigurationError } from '../errors/index.js';\nimport type { WalletSigner } from '../signers/wallet-signer.js';\n\nexport interface WalletAuthDescriptor {\n operation: string;\n method: 'GET' | 'POST' | 'PATCH';\n path: string;\n resourceFields?: ReadonlyArray<readonly [name: string, value: string]>;\n hash: readonly [name: 'payloadHash' | 'queryHash', value: string];\n}\n\ninterface WalletAuthValues {\n walletAddress: string;\n timestamp: string;\n nonce: string;\n}\n\ninterface WalletAuthDependencies {\n now?: () => number;\n nonce?: () => string;\n}\n\nexport async function createWalletAuthHeaders(\n signer: WalletSigner,\n descriptor: WalletAuthDescriptor,\n dependencies: WalletAuthDependencies = {},\n): Promise<Record<string, string>> {\n const values: WalletAuthValues = {\n walletAddress: signer.publicKey.toBase58(),\n timestamp: Math.floor(\n (dependencies.now?.() ?? Date.now()) / 1000,\n ).toString(),\n nonce: dependencies.nonce?.() ?? randomUUID(),\n };\n const message = buildWalletAuthMessage(descriptor, values);\n const signature = await signer.signMessage(new TextEncoder().encode(message));\n\n if (!(signature instanceof Uint8Array) || signature.length !== 64) {\n throw new GibworkConfigurationError(\n 'WalletSigner.signMessage must return a 64-byte Ed25519 signature',\n );\n }\n\n return {\n 'x-gibwork-wallet-address': values.walletAddress,\n 'x-gibwork-timestamp': values.timestamp,\n 'x-gibwork-nonce': values.nonce,\n 'x-gibwork-signature': Buffer.from(signature).toString('base64'),\n };\n}\n\nexport function buildWalletAuthMessage(\n descriptor: WalletAuthDescriptor,\n values: WalletAuthValues,\n): string {\n return [\n descriptor.operation,\n `method:${descriptor.method}`,\n `path:${descriptor.path}`,\n ...(descriptor.resourceFields ?? []).map(\n ([name, value]) => `${name}:${value}`,\n ),\n `walletAddress:${values.walletAddress}`,\n `timestamp:${values.timestamp}`,\n `nonce:${values.nonce}`,\n `${descriptor.hash[0]}:${descriptor.hash[1]}`,\n ].join('\\n');\n}\n","import { VersionedTransaction } from '@solana/web3.js';\n\nimport { GibworkConfigurationError } from '../errors/index.js';\nimport type { WalletSigner } from '../signers/wallet-signer.js';\n\nexport async function signPreparedTransaction(\n serializedTransaction: string,\n signer: WalletSigner,\n): Promise<string> {\n if (typeof serializedTransaction !== 'string' || !serializedTransaction) {\n throw new GibworkConfigurationError(\n 'serializedTransaction must be a non-empty base64 string',\n );\n }\n\n let transaction: VersionedTransaction;\n try {\n transaction = VersionedTransaction.deserialize(\n Buffer.from(serializedTransaction, 'base64'),\n );\n } catch (cause) {\n throw new GibworkConfigurationError(\n 'serializedTransaction is not a valid Solana VersionedTransaction',\n { cause },\n );\n }\n\n const signed = await signer.signTransaction(transaction);\n if (!(signed instanceof VersionedTransaction)) {\n throw new GibworkConfigurationError(\n 'WalletSigner.signTransaction must return a VersionedTransaction',\n );\n }\n\n return Buffer.from(signed.serialize()).toString('base64');\n}\n","import { normalizeComment, sha256Json } from '../../auth/normalize.js';\nimport { createWalletAuthHeaders } from '../../auth/wallet-auth.js';\nimport type { WalletSigner } from '../../signers/wallet-signer.js';\nimport type { HttpTransport } from '../../transport/http-transport.js';\nimport type { RequestOptions, SubmissionComment } from '../../types/index.js';\n\nexport class SubmissionCommentsResource {\n constructor(\n private readonly transport: HttpTransport,\n private readonly signer: WalletSigner,\n ) {}\n\n async list(\n taskId: string,\n submissionId: string,\n options?: RequestOptions,\n ): Promise<SubmissionComment[]> {\n const path = commentsPath(taskId, submissionId);\n const headers = await createWalletAuthHeaders(this.signer, {\n operation: 'gibwork:view-task-submission-comments',\n method: 'GET',\n path,\n resourceFields: [\n ['taskId', taskId],\n ['taskSubmissionId', submissionId],\n ],\n hash: ['queryHash', sha256Json({})],\n });\n\n return this.transport.request({\n method: 'GET',\n path,\n headers,\n ...(options ? { options } : {}),\n });\n }\n\n async create(\n taskId: string,\n submissionId: string,\n content: string,\n options?: RequestOptions,\n ): Promise<SubmissionComment> {\n const path = commentsPath(taskId, submissionId);\n const body = normalizeComment(content, this.signer.publicKey.toBase58());\n const headers = await createWalletAuthHeaders(this.signer, {\n operation: 'gibwork:create-task-submission-comment',\n method: 'POST',\n path,\n resourceFields: [\n ['taskId', taskId],\n ['taskSubmissionId', submissionId],\n ],\n hash: ['payloadHash', sha256Json(body)],\n });\n\n return this.transport.request({\n method: 'POST',\n path,\n headers,\n body,\n ...(options ? { options } : {}),\n });\n }\n}\n\nfunction commentsPath(taskId: string, submissionId: string): string {\n return `/v2/int/tasks/${encodeURIComponent(taskId)}/submission/${encodeURIComponent(submissionId)}/comments`;\n}\n","import {\n normalizeApproval,\n normalizeRejection,\n normalizeSubmissionPagination,\n sha256Json,\n toQueryString,\n} from '../../auth/normalize.js';\nimport { createWalletAuthHeaders } from '../../auth/wallet-auth.js';\nimport { GibworkRequestAbortedError } from '../../errors/index.js';\nimport type { WalletSigner } from '../../signers/wallet-signer.js';\nimport { signPreparedTransaction } from '../../transactions/sign-prepared-transaction.js';\nimport type { HttpTransport } from '../../transport/http-transport.js';\nimport type {\n ApprovalSubmitResult,\n ApproveSubmissionInput,\n ApproveSubmissionResult,\n Paginated,\n PreparedApprovalIntent,\n RejectSubmissionResult,\n RequestOptions,\n SubmissionPaginationQuery,\n TaskSubmission,\n WalletTaskSubmissionDetails,\n} from '../../types/index.js';\nimport { SubmissionCommentsResource } from './submission-comments-resource.js';\n\nexport class SubmissionsResource {\n readonly comments: SubmissionCommentsResource;\n\n constructor(\n private readonly transport: HttpTransport,\n private readonly signer: WalletSigner,\n ) {\n this.comments = new SubmissionCommentsResource(transport, signer);\n }\n\n async list(\n taskId: string,\n query: SubmissionPaginationQuery = {},\n options?: RequestOptions,\n ): Promise<Paginated<TaskSubmission>> {\n const normalized = normalizeSubmissionPagination(query);\n const path = `/v2/int/tasks/${encodeURIComponent(taskId)}/submissions`;\n const headers = await createWalletAuthHeaders(this.signer, {\n operation: 'gibwork:view-task-submissions',\n method: 'GET',\n path,\n resourceFields: [['taskId', taskId]],\n hash: ['queryHash', sha256Json(normalized)],\n });\n const requestQuery: Record<string, unknown> = { ...normalized };\n if (requestQuery.status === null) delete requestQuery.status;\n\n return this.transport.request({\n method: 'GET',\n path: `${path}?${toQueryString(requestQuery)}`,\n headers,\n ...(options ? { options } : {}),\n });\n }\n\n async get(\n taskId: string,\n submissionId: string,\n options?: RequestOptions,\n ): Promise<WalletTaskSubmissionDetails> {\n const path = `/v2/int/tasks/${encodeURIComponent(taskId)}/submissions/${encodeURIComponent(submissionId)}`;\n const headers = await createWalletAuthHeaders(this.signer, {\n operation: 'gibwork:view-task-submission',\n method: 'GET',\n path,\n resourceFields: [\n ['taskId', taskId],\n ['taskSubmissionId', submissionId],\n ],\n hash: ['queryHash', sha256Json({})],\n });\n\n return this.transport.request({\n method: 'GET',\n path,\n headers,\n ...(options ? { options } : {}),\n });\n }\n\n async approve(\n taskId: string,\n submissionId: string,\n input: ApproveSubmissionInput,\n options?: RequestOptions,\n ): Promise<ApproveSubmissionResult> {\n const prepared = await this.prepareApproval(\n taskId,\n submissionId,\n input,\n options,\n );\n const submitPath = approvalSubmitPath(\n taskId,\n submissionId,\n prepared.intentId,\n );\n assertNotAborted(options, submitPath);\n const signedTransaction = await signPreparedTransaction(\n prepared.serializedTransaction,\n this.signer,\n );\n assertNotAborted(options, submitPath);\n const submitted = await this.submitApproval(\n taskId,\n submissionId,\n prepared.intentId,\n signedTransaction,\n options,\n );\n\n return {\n ...submitted,\n intentId: prepared.intentId,\n lastValidBlockHeight: prepared.lastValidBlockHeight,\n approvalQuote: prepared.approvalQuote,\n };\n }\n\n async reject(\n taskId: string,\n submissionId: string,\n reason?: string | null,\n options?: RequestOptions,\n ): Promise<RejectSubmissionResult> {\n const path = `/v2/int/tasks/${encodeURIComponent(taskId)}/submission/${encodeURIComponent(submissionId)}/reject`;\n const body = normalizeRejection(reason, this.walletAddress);\n const headers = await createWalletAuthHeaders(this.signer, {\n operation: 'gibwork:reject-task-submission',\n method: 'POST',\n path,\n resourceFields: [\n ['taskId', taskId],\n ['taskSubmissionId', submissionId],\n ],\n hash: ['payloadHash', sha256Json(body)],\n });\n\n return this.transport.request({\n method: 'POST',\n path,\n headers,\n body,\n ...(options ? { options } : {}),\n });\n }\n\n async prepareApproval(\n taskId: string,\n submissionId: string,\n input: ApproveSubmissionInput,\n options?: RequestOptions,\n ): Promise<PreparedApprovalIntent> {\n const path = `/v2/int/tasks/${encodeURIComponent(taskId)}/submission/${encodeURIComponent(submissionId)}/pay`;\n const body = normalizeApproval(input, this.walletAddress);\n const headers = await createWalletAuthHeaders(this.signer, {\n operation: 'gibwork:approve-task-submission-intent',\n method: 'POST',\n path,\n resourceFields: [\n ['taskId', taskId],\n ['taskSubmissionId', submissionId],\n ],\n hash: ['payloadHash', sha256Json(body)],\n });\n\n return this.transport.request({\n method: 'POST',\n path,\n headers,\n body,\n ...(options ? { options } : {}),\n });\n }\n\n async submitApproval(\n taskId: string,\n submissionId: string,\n intentId: string,\n signedTransaction: string,\n options?: RequestOptions,\n ): Promise<ApprovalSubmitResult> {\n const path = approvalSubmitPath(taskId, submissionId, intentId);\n return this.transport.request({\n method: 'POST',\n path,\n body: { signedTransaction },\n ...(options ? { options } : {}),\n ambiguousSubmit: {\n operation: 'approve-submission',\n taskId,\n submissionId,\n intentId,\n },\n });\n }\n\n private get walletAddress(): string {\n return this.signer.publicKey.toBase58();\n }\n}\n\nfunction approvalSubmitPath(\n taskId: string,\n submissionId: string,\n intentId: string,\n): string {\n return `/v2/int/tasks/${encodeURIComponent(taskId)}/submission/${encodeURIComponent(submissionId)}/pay/${encodeURIComponent(intentId)}/submit`;\n}\n\nfunction assertNotAborted(\n options: RequestOptions | undefined,\n path: string,\n): void {\n if (options?.signal?.aborted) {\n throw new GibworkRequestAbortedError('POST', path, {\n cause: options.signal.reason,\n });\n }\n}\n","import {\n createWalletAuthHeaders,\n type WalletAuthDescriptor,\n} from '../../auth/wallet-auth.js';\nimport {\n normalizeCreateTask,\n normalizeTaskPagination,\n normalizeUpdateTask,\n sha256Json,\n toQueryString,\n} from '../../auth/normalize.js';\nimport { GibworkRequestAbortedError } from '../../errors/index.js';\nimport type { WalletSigner } from '../../signers/wallet-signer.js';\nimport { signPreparedTransaction } from '../../transactions/sign-prepared-transaction.js';\nimport type { HttpTransport } from '../../transport/http-transport.js';\nimport type {\n CreateTaskInput,\n CreateTaskResult,\n Paginated,\n PaginationQuery,\n PreparedRefundIntent,\n PreparedTaskIntent,\n RefundSubmitResult,\n RefundTaskResult,\n RequestOptions,\n TaskSubmitResult,\n UpdatedTask,\n UpdateTaskInput,\n WalletTaskSummary,\n} from '../../types/index.js';\n\nexport class TasksResource {\n constructor(\n private readonly transport: HttpTransport,\n private readonly signer: WalletSigner,\n ) {}\n\n async create(\n input: CreateTaskInput,\n options?: RequestOptions,\n ): Promise<CreateTaskResult> {\n const prepared = await this.prepareCreate(input, options);\n assertNotAborted(options, '/v2/int/tasks');\n const signedTransaction = await signPreparedTransaction(\n prepared.serializedTransaction,\n this.signer,\n );\n assertNotAborted(\n options,\n `/v2/int/tasks/${encodeURIComponent(prepared.intentId)}/submit`,\n );\n const submitted = await this.submitCreate(\n prepared.intentId,\n signedTransaction,\n options,\n );\n\n return {\n ...submitted,\n intentId: prepared.intentId,\n lastValidBlockHeight: prepared.lastValidBlockHeight,\n paymentQuote: prepared.paymentQuote,\n };\n }\n\n async list(\n query: PaginationQuery = {},\n options?: RequestOptions,\n ): Promise<Paginated<WalletTaskSummary>> {\n const normalized = normalizeTaskPagination(query);\n const path = '/v2/int/tasks';\n const headers = await this.auth({\n operation: 'gibwork:view-created-tasks',\n method: 'GET',\n path,\n hash: ['queryHash', sha256Json(normalized)],\n });\n\n return this.transport.request({\n method: 'GET',\n path: `${path}?${toQueryString(normalized)}`,\n headers,\n ...(options ? { options } : {}),\n });\n }\n\n async update(\n taskId: string,\n input: UpdateTaskInput,\n options?: RequestOptions,\n ): Promise<UpdatedTask> {\n const path = `/v2/int/tasks/${encodeURIComponent(taskId)}`;\n const body = normalizeUpdateTask(input, this.walletAddress);\n if (Object.keys(body).length === 1) {\n throw new Error('At least one bounty field must be provided');\n }\n const headers = await this.auth({\n operation: 'gibwork:update-task',\n method: 'PATCH',\n path,\n resourceFields: [['taskId', taskId]],\n hash: ['payloadHash', sha256Json(body)],\n });\n\n return this.transport.request({\n method: 'PATCH',\n path,\n headers,\n body,\n ...(options ? { options } : {}),\n });\n }\n\n async refund(\n taskId: string,\n options?: RequestOptions,\n ): Promise<RefundTaskResult> {\n const prepared = await this.prepareRefund(taskId, options);\n const submitPath = `/v2/int/tasks/${encodeURIComponent(taskId)}/refund/${encodeURIComponent(prepared.intentId)}/submit`;\n assertNotAborted(options, submitPath);\n const signedTransaction = await signPreparedTransaction(\n prepared.serializedTransaction,\n this.signer,\n );\n assertNotAborted(options, submitPath);\n const submitted = await this.submitRefund(\n taskId,\n prepared.intentId,\n signedTransaction,\n options,\n );\n\n return {\n ...submitted,\n intentId: prepared.intentId,\n lastValidBlockHeight: prepared.lastValidBlockHeight,\n refundQuote: prepared.refundQuote,\n };\n }\n\n async prepareCreate(\n input: CreateTaskInput,\n options?: RequestOptions,\n ): Promise<PreparedTaskIntent> {\n const path = '/v2/int/tasks';\n const body = normalizeCreateTask(input, this.walletAddress);\n const headers = await this.auth({\n operation: 'gibwork:create-task-intent',\n method: 'POST',\n path,\n hash: ['payloadHash', sha256Json(body)],\n });\n\n return this.transport.request({\n method: 'POST',\n path,\n headers,\n body,\n ...(options ? { options } : {}),\n });\n }\n\n async submitCreate(\n intentId: string,\n signedTransaction: string,\n options?: RequestOptions,\n ): Promise<TaskSubmitResult> {\n const path = `/v2/int/tasks/${encodeURIComponent(intentId)}/submit`;\n return this.transport.request({\n method: 'POST',\n path,\n body: { signedTransaction },\n ...(options ? { options } : {}),\n ambiguousSubmit: {\n operation: 'create-task',\n intentId,\n },\n });\n }\n\n async prepareRefund(\n taskId: string,\n options?: RequestOptions,\n ): Promise<PreparedRefundIntent> {\n const path = `/v2/int/tasks/${encodeURIComponent(taskId)}/refund`;\n const body = { walletAddress: this.walletAddress };\n const headers = await this.auth({\n operation: 'gibwork:refund-task-intent',\n method: 'POST',\n path,\n resourceFields: [['taskId', taskId]],\n hash: ['payloadHash', sha256Json(body)],\n });\n\n return this.transport.request({\n method: 'POST',\n path,\n headers,\n body,\n ...(options ? { options } : {}),\n });\n }\n\n async submitRefund(\n taskId: string,\n intentId: string,\n signedTransaction: string,\n options?: RequestOptions,\n ): Promise<RefundSubmitResult> {\n const path = `/v2/int/tasks/${encodeURIComponent(taskId)}/refund/${encodeURIComponent(intentId)}/submit`;\n return this.transport.request({\n method: 'POST',\n path,\n body: { signedTransaction },\n ...(options ? { options } : {}),\n ambiguousSubmit: {\n operation: 'refund-task',\n taskId,\n intentId,\n },\n });\n }\n\n private get walletAddress(): string {\n return this.signer.publicKey.toBase58();\n }\n\n private auth(\n descriptor: WalletAuthDescriptor,\n ): Promise<Record<string, string>> {\n return createWalletAuthHeaders(this.signer, descriptor);\n }\n}\n\nfunction assertNotAborted(\n options: RequestOptions | undefined,\n path: string,\n): void {\n if (options?.signal?.aborted) {\n throw new GibworkRequestAbortedError('POST', path, {\n cause: options.signal.reason,\n });\n }\n}\n","import {\n GibworkAmbiguousSubmitError,\n GibworkApiError,\n GibworkConfigurationError,\n GibworkNetworkError,\n GibworkRequestAbortedError,\n GibworkTimeoutError,\n type AmbiguousSubmitContext,\n} from '../errors/index.js';\nimport type { RequestOptions } from '../types/index.js';\n\nexport type FetchImplementation = typeof fetch;\n\nexport interface HttpTransportOptions {\n baseUrl: string;\n fetch?: FetchImplementation;\n production?: boolean;\n timeoutMs?: number;\n}\n\nexport interface HttpRequest {\n method: 'GET' | 'POST' | 'PATCH';\n path: string;\n headers?: Record<string, string>;\n body?: unknown;\n options?: RequestOptions;\n ambiguousSubmit?: AmbiguousSubmitContext;\n}\n\nexport class HttpTransport {\n private readonly baseUrl: string;\n private readonly fetchImplementation: FetchImplementation;\n private readonly production: boolean;\n private readonly timeoutMs: number;\n\n constructor(options: HttpTransportOptions) {\n this.baseUrl = normalizeBaseUrl(options.baseUrl);\n this.fetchImplementation = options.fetch ?? globalThis.fetch;\n if (\n options.production !== undefined &&\n typeof options.production !== 'boolean'\n ) {\n throw new GibworkConfigurationError('production must be a boolean');\n }\n this.production = options.production ?? false;\n this.timeoutMs = options.timeoutMs ?? 60_000;\n\n if (typeof this.fetchImplementation !== 'function') {\n throw new GibworkConfigurationError(\n 'A fetch implementation is required in this environment',\n );\n }\n if (!Number.isFinite(this.timeoutMs) || this.timeoutMs <= 0) {\n throw new GibworkConfigurationError(\n 'timeoutMs must be a positive number',\n );\n }\n }\n\n async request<T>(request: HttpRequest): Promise<T> {\n const controller = new AbortController();\n const callerSignal = request.options?.signal;\n let timedOut = false;\n\n if (callerSignal?.aborted) {\n throw new GibworkRequestAbortedError(request.method, request.path, {\n cause: callerSignal.reason,\n });\n }\n\n const abortFromCaller = (): void => controller.abort(callerSignal?.reason);\n callerSignal?.addEventListener('abort', abortFromCaller, { once: true });\n\n const timeout = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, this.timeoutMs);\n\n const headers: Record<string, string> = {\n accept: 'application/json',\n ...request.headers,\n ...(this.production ? { 'x-gibwork-environment': 'prod' } : {}),\n };\n const init: RequestInit = {\n method: request.method,\n headers,\n signal: controller.signal,\n };\n if (request.body !== undefined) {\n headers['content-type'] = 'application/json';\n init.body = JSON.stringify(request.body);\n }\n\n let response: Response;\n try {\n response = await this.fetchImplementation(\n `${this.baseUrl}${request.path}`,\n init,\n );\n } catch (cause) {\n if (request.ambiguousSubmit) {\n throw new GibworkAmbiguousSubmitError(\n request.method,\n request.path,\n request.ambiguousSubmit,\n { cause },\n );\n }\n if (timedOut) {\n throw new GibworkTimeoutError(\n request.method,\n request.path,\n this.timeoutMs,\n { cause },\n );\n }\n if (callerSignal?.aborted) {\n throw new GibworkRequestAbortedError(request.method, request.path, {\n cause,\n });\n }\n throw new GibworkNetworkError(\n 'Could not reach the Gibwork API',\n request.method,\n request.path,\n { cause },\n );\n } finally {\n clearTimeout(timeout);\n callerSignal?.removeEventListener('abort', abortFromCaller);\n }\n\n const body = await parseResponseBody(response);\n if (!response.ok) {\n const requestId = response.headers.get('x-request-id') ?? undefined;\n const apiError = new GibworkApiError(\n response.status,\n body,\n request.method,\n request.path,\n requestId,\n );\n if (request.ambiguousSubmit && response.status >= 500) {\n throw new GibworkAmbiguousSubmitError(\n request.method,\n request.path,\n request.ambiguousSubmit,\n { cause: apiError },\n );\n }\n throw apiError;\n }\n\n return body as T;\n }\n}\n\nfunction normalizeBaseUrl(value: string): string {\n if (typeof value !== 'string' || !value.trim()) {\n throw new GibworkConfigurationError('baseUrl is required');\n }\n\n let url: URL;\n try {\n url = new URL(value.trim());\n } catch (cause) {\n throw new GibworkConfigurationError('baseUrl must be a valid URL', {\n cause,\n });\n }\n\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n throw new GibworkConfigurationError('baseUrl must use http or https');\n }\n if (url.search || url.hash) {\n throw new GibworkConfigurationError(\n 'baseUrl must not include a query string or fragment',\n );\n }\n\n return url.toString().replace(/\\/+$/, '');\n}\n\nasync function parseResponseBody(response: Response): Promise<unknown> {\n const text = await response.text();\n if (!text) return undefined;\n\n try {\n return JSON.parse(text) as unknown;\n } catch {\n return text;\n }\n}\n","import { DEFAULT_GIBWORK_API_URL } from '../config.js';\nimport { GibworkConfigurationError } from '../errors/index.js';\nimport { SubmissionsResource } from '../resources/submissions/submissions-resource.js';\nimport { TasksResource } from '../resources/tasks/tasks-resource.js';\nimport type { WalletSigner } from '../signers/wallet-signer.js';\nimport {\n HttpTransport,\n type FetchImplementation,\n} from '../transport/http-transport.js';\n\nexport interface GibworkClientOptions {\n baseUrl?: string;\n signer: WalletSigner;\n fetch?: FetchImplementation;\n /** Routes all client requests to production when true. Defaults to stage. */\n production?: boolean;\n timeoutMs?: number;\n}\n\nexport class GibworkClient {\n readonly tasks: TasksResource;\n readonly submissions: SubmissionsResource;\n\n constructor(options: GibworkClientOptions) {\n assertSigner(options.signer);\n const transport = new HttpTransport({\n baseUrl: options.baseUrl ?? DEFAULT_GIBWORK_API_URL,\n ...(options.fetch ? { fetch: options.fetch } : {}),\n ...(options.production !== undefined\n ? { production: options.production }\n : {}),\n ...(options.timeoutMs !== undefined\n ? { timeoutMs: options.timeoutMs }\n : {}),\n });\n\n this.tasks = new TasksResource(transport, options.signer);\n this.submissions = new SubmissionsResource(transport, options.signer);\n }\n}\n\nfunction assertSigner(signer: WalletSigner): void {\n if (\n !signer ||\n typeof signer.publicKey?.toBase58 !== 'function' ||\n typeof signer.signMessage !== 'function' ||\n typeof signer.signTransaction !== 'function'\n ) {\n throw new GibworkConfigurationError(\n 'signer must provide publicKey, signMessage, and signTransaction',\n );\n }\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -209,6 +209,14 @@ interface WalletTaskSummary {
209
209
  totalSubmissions: number;
210
210
  title: string;
211
211
  isOpen: boolean;
212
+ /** Whether the signing wallet may edit the task. */
213
+ canEdit: boolean;
214
+ /** Whether the signing wallet may approve and pay a submission. */
215
+ canApprove: boolean;
216
+ /** Whether the signing wallet may reject a submission. */
217
+ canReject: boolean;
218
+ /** Whether the signing wallet may refund the task escrow. */
219
+ canRefund: boolean;
212
220
  asset: WalletTaskAsset;
213
221
  rewardedAmount: number;
214
222
  rewardedPrice: string;
@@ -231,6 +239,13 @@ interface UserSummary {
231
239
  rejectedTaskSubmissions: number;
232
240
  rating: number;
233
241
  }
242
+ interface PublicProfileReference {
243
+ id: string;
244
+ routeKey: string;
245
+ }
246
+ type WalletSubmissionUser = Omit<UserSummary, 'externalId' | 'membership'> & {
247
+ publicProfile: PublicProfileReference | null;
248
+ };
234
249
  interface MediaItem {
235
250
  id: string;
236
251
  provider: string;
@@ -254,6 +269,14 @@ interface SubmissionComment {
254
269
  user: UserSummary;
255
270
  media: MediaItem[];
256
271
  }
272
+ interface WalletSubmissionComment {
273
+ id: string;
274
+ taskSubmissionId: string;
275
+ content: string;
276
+ createdAt: string;
277
+ user: WalletSubmissionUser;
278
+ media: MediaItem[];
279
+ }
257
280
  interface SubmissionAsset extends Record<string, unknown> {
258
281
  id?: string;
259
282
  mintAddress?: string;
@@ -264,6 +287,19 @@ interface SubmissionAsset extends Record<string, unknown> {
264
287
  decimals?: number;
265
288
  }
266
289
  type TaskSubmissionStatus = 'OPEN' | 'REJECTED' | 'CLAIMING' | 'WAITING_CLAIM' | 'CLOSED' | 'CLAIMED' | 'PROCESSING';
290
+ interface WalletTaskSubmissionDetails {
291
+ id: string;
292
+ taskId: string;
293
+ content: string;
294
+ status: TaskSubmissionStatus;
295
+ createdAt: string;
296
+ rejectReason?: string | null;
297
+ rating: number | null;
298
+ user: WalletSubmissionUser;
299
+ comments: WalletSubmissionComment[];
300
+ media: MediaItem[];
301
+ asset?: SubmissionAsset | null;
302
+ }
267
303
  interface TaskSubmission extends Record<string, unknown> {
268
304
  id: string;
269
305
  taskId: string;
@@ -328,6 +364,7 @@ declare class SubmissionsResource {
328
364
  readonly comments: SubmissionCommentsResource;
329
365
  constructor(transport: HttpTransport, signer: WalletSigner);
330
366
  list(taskId: string, query?: SubmissionPaginationQuery, options?: RequestOptions): Promise<Paginated<TaskSubmission>>;
367
+ get(taskId: string, submissionId: string, options?: RequestOptions): Promise<WalletTaskSubmissionDetails>;
331
368
  approve(taskId: string, submissionId: string, input: ApproveSubmissionInput, options?: RequestOptions): Promise<ApproveSubmissionResult>;
332
369
  reject(taskId: string, submissionId: string, reason?: string | null, options?: RequestOptions): Promise<RejectSubmissionResult>;
333
370
  prepareApproval(taskId: string, submissionId: string, input: ApproveSubmissionInput, options?: RequestOptions): Promise<PreparedApprovalIntent>;
@@ -370,4 +407,4 @@ declare const DEFAULT_GIBWORK_API_URL: string;
370
407
 
371
408
  declare function signPreparedTransaction(serializedTransaction: string, signer: WalletSigner): Promise<string>;
372
409
 
373
- export { type AmbiguousSubmitContext, type ApprovalQuote, type ApprovalSubmitResult, type ApproveSubmissionInput, type ApproveSubmissionResult, type CreateTaskInput, type CreateTaskResult, DEFAULT_GIBWORK_API_URL, type FeeQuote, type FetchImplementation, GibworkAmbiguousSubmitError, GibworkApiError, type GibworkApiErrorBody, GibworkClient, type GibworkClientOptions, GibworkConfigurationError, GibworkError, GibworkNetworkError, GibworkRequestAbortedError, GibworkTimeoutError, type MediaItem, type Membership, type Paginated, type PaginationQuery, type PaymentQuote, type PreparedApprovalIntent, type PreparedRefundIntent, type PreparedTaskIntent, type RefundQuote, type RefundSubmitResult, type RefundTaskResult, type RejectSubmissionResult, type RequestOptions, type SubmissionAsset, type SubmissionComment, type SubmissionPaginationQuery, type SubmissionStatus, type SubmitOperation, type TaskSubmission, type TaskSubmissionStatus, type TaskSubmitResult, type TokenQuote, type UpdateTaskInput, type UpdatedTask, type UserSummary, type WalletSigner, type WalletTaskAsset, type WalletTaskSummary, signPreparedTransaction };
410
+ export { type AmbiguousSubmitContext, type ApprovalQuote, type ApprovalSubmitResult, type ApproveSubmissionInput, type ApproveSubmissionResult, type CreateTaskInput, type CreateTaskResult, DEFAULT_GIBWORK_API_URL, type FeeQuote, type FetchImplementation, GibworkAmbiguousSubmitError, GibworkApiError, type GibworkApiErrorBody, GibworkClient, type GibworkClientOptions, GibworkConfigurationError, GibworkError, GibworkNetworkError, GibworkRequestAbortedError, GibworkTimeoutError, type MediaItem, type Membership, type Paginated, type PaginationQuery, type PaymentQuote, type PreparedApprovalIntent, type PreparedRefundIntent, type PreparedTaskIntent, type PublicProfileReference, type RefundQuote, type RefundSubmitResult, type RefundTaskResult, type RejectSubmissionResult, type RequestOptions, type SubmissionAsset, type SubmissionComment, type SubmissionPaginationQuery, type SubmissionStatus, type SubmitOperation, type TaskSubmission, type TaskSubmissionStatus, type TaskSubmitResult, type TokenQuote, type UpdateTaskInput, type UpdatedTask, type UserSummary, type WalletSigner, type WalletSubmissionComment, type WalletSubmissionUser, type WalletTaskAsset, type WalletTaskSubmissionDetails, type WalletTaskSummary, signPreparedTransaction };