@gibwork/sdk 0.0.5 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/README.md +85 -1
- package/dist/{chunk-BNAVP5XZ.js → chunk-HJ5D5SOE.js} +329 -37
- package/dist/chunk-HJ5D5SOE.js.map +1 -0
- package/dist/index.cjs +329 -34
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +159 -3
- package/dist/index.d.ts +159 -3
- package/dist/index.js +1 -1
- package/dist/node.cjs +329 -34
- package/dist/node.cjs.map +1 -1
- package/dist/node.d.cts +1 -1
- package/dist/node.d.ts +1 -1
- package/dist/node.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-BNAVP5XZ.js.map +0 -1
package/dist/index.cjs.map
CHANGED
|
@@ -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/validation.ts","../src/auth/sanitize.ts","../src/auth/normalize.ts","../src/auth/wallet-auth.ts","../src/resources/submissions/submission-intent.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 public readonly retryAfter?: 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' | 'create-submission';\n\nexport interface AmbiguousSubmitContext {\n operation: SubmitOperation;\n taskId?: string;\n submissionId?: string;\n intentId: string;\n paymentAttemptId?: string;\n idempotencyKey?: string;\n walletAddress?: string;\n environment?: 'stage' | 'prod';\n apiUrl?: 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\nexport class GibworkValidationError extends GibworkError {\n override readonly name: string = 'GibworkValidationError';\n}\n\nexport class GibworkProtocolError extends GibworkError {\n override readonly name: string = 'GibworkProtocolError';\n}\n\nexport interface SubmissionRecoveryContext {\n taskId: string;\n idempotencyKey: string;\n walletAddress: string;\n environment: 'stage' | 'prod';\n apiUrl: string;\n phase: 'prepare' | 'sign' | 'submit';\n intentId?: string;\n paymentAttemptId?: string;\n submissionId?: string;\n}\n\n/** Retains identifiers when creation stops, including before any payment is sent. */\nexport class GibworkSubmissionOperationError extends GibworkError {\n override readonly name: string = 'GibworkSubmissionOperationError';\n\n constructor(\n public readonly context: SubmissionRecoveryContext,\n options?: ErrorOptions,\n ) {\n super(\n 'Submission creation interrupted; recover using the original input/key or intent',\n options,\n );\n }\n}\n","import { GibworkValidationError } from '../errors/index.js';\n\nconst UUID =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\nconst UUID_V4 =\n /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport function assertObjectKeys(value: unknown, keys: string[]): void {\n if (\n !isRecord(value) ||\n Object.keys(value).some((key) => !keys.includes(key))\n ) {\n throw new GibworkValidationError(\n `Expected an object containing only: ${keys.join(', ')}`,\n );\n }\n}\n\nexport function isUuid(value: unknown, v4 = false): value is string {\n return typeof value === 'string' && (v4 ? UUID_V4 : UUID).test(value);\n}\n\nexport function assertUuid(\n value: unknown,\n name: string,\n v4 = false,\n): asserts value is string {\n if (!isUuid(value, v4))\n throw new GibworkValidationError(`${name} must be a UUID${v4 ? 'v4' : ''}`);\n}\n\nexport function assertText(\n value: unknown,\n name: string,\n min: number,\n max: number,\n): asserts value is string {\n if (\n typeof value !== 'string' ||\n Array.from(value).length < min ||\n Array.from(value).length > max\n ) {\n throw new GibworkValidationError(\n `${name} must contain ${min}–${max} characters`,\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 AvailableTasksQuery,\n CreateSubmissionInput,\n CreateTaskInput,\n PaginationQuery,\n SubmissionPaginationQuery,\n UpdateTaskInput,\n} from '../types/index.js';\nimport { GibworkValidationError } from '../errors/index.js';\nimport { assertObjectKeys, assertUuid, assertText } from './validation.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\nexport function normalizeAvailableTasksQuery(\n query: AvailableTasksQuery = {},\n): Required<AvailableTasksQuery> {\n assertObjectKeys(query, ['page', 'limit']);\n const page = query.page === undefined ? 1 : query.page;\n const limit = query.limit === undefined ? 15 : query.limit;\n if (\n !Number.isSafeInteger(page) ||\n page < 1 ||\n !Number.isSafeInteger(limit) ||\n limit < 1 ||\n limit > 100 ||\n !Number.isSafeInteger((page - 1) * limit)\n ) {\n throw new GibworkValidationError(\n 'page must be a positive safe integer, limit must be 1–100, and the offset must be safe',\n );\n }\n return { page, limit };\n}\n\nexport function normalizeCreateSubmission(\n input: CreateSubmissionInput,\n walletAddress: string,\n) {\n assertObjectKeys(input, [\n 'content',\n 'referral',\n 'mediaIds',\n 'idempotencyKey',\n ]);\n assertText(input.content, 'content', 1, 50000);\n if (input.referral != null) assertText(input.referral, 'referral', 0, 200);\n assertUuid(input.idempotencyKey, 'idempotencyKey', true);\n const mediaIds = input.mediaIds ?? [];\n if (\n !Array.isArray(mediaIds) ||\n mediaIds.length > 10 ||\n new Set(mediaIds).size !== mediaIds.length\n ) {\n throw new GibworkValidationError(\n 'mediaIds must contain at most ten distinct UUIDv4 values',\n );\n }\n for (const id of mediaIds) assertUuid(id, 'mediaIds', true);\n // Insertion order and raw content are part of the signed contract.\n return {\n walletAddress,\n content: input.content,\n referral: input.referral ?? null,\n mediaIds: [...mediaIds],\n idempotencyKey: input.idempotencyKey,\n };\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 { assertUuid, isRecord, isUuid } from '../../auth/validation.js';\nimport { GibworkProtocolError } from '../../errors/index.js';\n\nexport function submissionIntentPath(\n taskId: string,\n intentId?: string,\n): string {\n assertUuid(taskId, 'taskId');\n if (intentId !== undefined) assertUuid(intentId, 'intentId');\n return `/v2/int/tasks/${taskId}/submission-intents${intentId === undefined ? '' : `/${intentId}`}`;\n}\n\nconst statuses = [\n 'pending',\n 'submitted',\n 'fulfilled',\n 'failed',\n 'expired',\n 'requires_review',\n];\nconst nonempty = (value: unknown): value is string =>\n typeof value === 'string' && value.length > 0;\nconst decimal = (value: unknown): boolean =>\n typeof value === 'string' && /^\\d+(\\.\\d+)?$/.test(value);\nconst natural = (value: unknown): boolean =>\n typeof value === 'number' && Number.isSafeInteger(value) && value >= 0;\nconst sameId = (value: string, expected: string): boolean =>\n value.toLowerCase() === expected.toLowerCase();\n\n/** Validate before a response can drive signing or be reported as fulfillment. */\nexport function validateSubmissionIntent(\n value: unknown,\n taskId: string,\n intentId?: string,\n paymentAttemptId?: string,\n): void {\n if (\n !isRecord(value) ||\n !isUuid(value.intentId) ||\n !isUuid(value.taskId) ||\n !isUuid(value.taskSubmissionId) ||\n !isUuid(value.paymentAttemptId, true) ||\n !sameId(value.taskId, taskId) ||\n (intentId !== undefined && !sameId(value.intentId, intentId)) ||\n (paymentAttemptId !== undefined &&\n !sameId(value.paymentAttemptId, paymentAttemptId)) ||\n typeof value.status !== 'string' ||\n !statuses.includes(value.status) ||\n !(value.txHash === null || nonempty(value.txHash)) ||\n !nonempty(value.expiresAt) ||\n !Number.isFinite(Date.parse(value.expiresAt)) ||\n !natural(value.lastValidBlockHeight) ||\n (value.reviewReason !== undefined &&\n typeof value.reviewReason !== 'string') ||\n (value.serializedTransaction !== undefined &&\n !nonempty(value.serializedTransaction)) ||\n !isRecord(value.fee) ||\n !decimal(value.fee.amount) ||\n !decimal(value.fee.totalDebit) ||\n typeof value.fee.amountBaseUnits !== 'string' ||\n !/^\\d+$/.test(value.fee.amountBaseUnits) ||\n value.fee.symbol !== 'USDC' ||\n !natural(value.fee.decimals) ||\n !nonempty(value.fee.mintAddress) ||\n !nonempty(value.fee.destinationAddress)\n ) {\n // Never put a response/transaction in the error message.\n throw new GibworkProtocolError('Invalid submission intent response');\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 normalizeCreateSubmission,\n normalizeRejection,\n normalizeSubmissionPagination,\n sha256Json,\n toQueryString,\n} from '../../auth/normalize.js';\nimport { createWalletAuthHeaders } from '../../auth/wallet-auth.js';\nimport {\n GibworkRequestAbortedError,\n GibworkAmbiguousSubmitError,\n GibworkProtocolError,\n GibworkSubmissionOperationError,\n type SubmissionRecoveryContext,\n} from '../../errors/index.js';\nimport {\n assertObjectKeys,\n assertText,\n assertUuid,\n} from '../../auth/validation.js';\nimport {\n submissionIntentPath,\n validateSubmissionIntent,\n} from './submission-intent.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 CreateSubmissionInput,\n SubmitSubmissionInput,\n TaskSubmissionIntent,\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 /** Creates work through a participation fee; only fulfilled confirms creation. */\n async create(\n taskId: string,\n input: CreateSubmissionInput,\n options?: RequestOptions,\n ): Promise<TaskSubmissionIntent> {\n // Snapshot input before any await and fail invalid input without an operation wrapper.\n const path = submissionIntentPath(taskId);\n const { walletAddress, ...snapshot } = normalizeCreateSubmission(\n input,\n this.walletAddress,\n );\n let context: SubmissionRecoveryContext = {\n taskId,\n idempotencyKey: snapshot.idempotencyKey,\n walletAddress,\n ...this.transport.recoveryLocation,\n phase: 'prepare',\n };\n try {\n assertNotAborted(options, path);\n const prepared = await this.prepareCreate(taskId, snapshot, options);\n context = {\n ...context,\n intentId: prepared.intentId,\n paymentAttemptId: prepared.paymentAttemptId,\n submissionId: prepared.taskSubmissionId,\n phase: 'sign',\n };\n if (prepared.status !== 'pending') return prepared;\n if (!prepared.serializedTransaction)\n throw new GibworkProtocolError(\n 'Pending prepare response is missing its transaction',\n );\n assertNotAborted(options, path);\n const signedTransaction = await signPreparedTransaction(\n prepared.serializedTransaction,\n this.signer,\n );\n assertNotAborted(options, path);\n context = { ...context, phase: 'submit' };\n return await this.submitCreate(\n taskId,\n prepared.intentId,\n { paymentAttemptId: prepared.paymentAttemptId, signedTransaction },\n options,\n );\n } catch (cause) {\n if (cause instanceof GibworkAmbiguousSubmitError) {\n throw new GibworkAmbiguousSubmitError(\n cause.method,\n cause.path,\n {\n ...cause.context,\n ...context,\n operation: 'create-submission',\n intentId: cause.context.intentId,\n },\n { cause },\n );\n }\n throw new GibworkSubmissionOperationError(context, { cause });\n }\n }\n\n /** Reuse the exact input and idempotency key after an interrupted prepare. */\n async prepareCreate(\n taskId: string,\n input: CreateSubmissionInput,\n options?: RequestOptions,\n ): Promise<TaskSubmissionIntent> {\n const path = submissionIntentPath(taskId);\n const body = normalizeCreateSubmission(input, this.walletAddress);\n assertNotAborted(options, path);\n const headers = await createWalletAuthHeaders(this.signer, {\n operation: 'gibwork:create-task-submission-intent',\n method: 'POST',\n path,\n resourceFields: [['taskId', taskId]],\n hash: ['payloadHash', sha256Json(body)],\n });\n return this.transport.request({\n method: 'POST',\n path,\n headers,\n body,\n ...(options ? { options } : {}),\n validateResponse: (value) => validateSubmissionIntent(value, taskId),\n });\n }\n\n /** Never automatically retries. Recover an uncertain payment with getIntent. */\n async submitCreate(\n taskId: string,\n intentId: string,\n input: SubmitSubmissionInput,\n options?: RequestOptions,\n ): Promise<TaskSubmissionIntent> {\n const path = `${submissionIntentPath(taskId, intentId)}/submit`;\n assertObjectKeys(input, ['paymentAttemptId', 'signedTransaction']);\n assertUuid(input.paymentAttemptId, 'paymentAttemptId', true);\n assertText(input.signedTransaction, 'signedTransaction', 1, 10000);\n const body = {\n paymentAttemptId: input.paymentAttemptId,\n signedTransaction: input.signedTransaction,\n };\n return this.transport.request({\n method: 'POST',\n path,\n body,\n ...(options ? { options } : {}),\n ambiguousSubmit: {\n operation: 'create-submission',\n taskId,\n intentId,\n paymentAttemptId: body.paymentAttemptId,\n walletAddress: this.walletAddress,\n ...this.transport.recoveryLocation,\n },\n validateResponse: (value) =>\n validateSubmissionIntent(\n value,\n taskId,\n intentId,\n body.paymentAttemptId,\n ),\n });\n }\n\n /** Reads/reconciles creation using the original wallet; does not report review/payout. */\n async getIntent(\n taskId: string,\n intentId: string,\n options?: RequestOptions,\n ): Promise<TaskSubmissionIntent> {\n const path = submissionIntentPath(taskId, intentId);\n if (options?.signal?.aborted)\n throw new GibworkRequestAbortedError('GET', path, {\n cause: options.signal.reason,\n });\n const headers = await createWalletAuthHeaders(this.signer, {\n operation: 'gibwork:view-task-submission-intent',\n method: 'GET',\n path,\n resourceFields: [\n ['taskId', taskId],\n ['intentId', intentId],\n ],\n hash: ['queryHash', sha256Json({})],\n });\n return this.transport.request({\n method: 'GET',\n path,\n headers,\n ...(options ? { options } : {}),\n validateResponse: (value) =>\n validateSubmissionIntent(value, taskId, intentId),\n });\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 normalizeAvailableTasksQuery,\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 AvailableTasksQuery,\n AvailableTaskPage,\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 /** Discover tasks across creators. Eligibility is checked when preparing work. */\n async listAvailable(\n query: AvailableTasksQuery = {},\n options?: RequestOptions,\n ): Promise<AvailableTaskPage> {\n const normalized = normalizeAvailableTasksQuery(query);\n const path = '/v2/int/tasks/available';\n const headers = await this.auth({\n operation: 'gibwork:view-available-tasks',\n method: 'GET',\n path,\n hash: ['queryHash', sha256Json(normalized)],\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 GibworkProtocolError,\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 validateResponse?: (body: unknown) => void;\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 /** Recovery location without URL credentials. Retains reverse-proxy path prefixes. */\n get recoveryLocation(): { apiUrl: string; environment: 'stage' | 'prod' } {\n const url = new URL(this.baseUrl);\n url.username = '';\n url.password = '';\n return {\n apiUrl: url.toString().replace(/\\/+$/, ''),\n environment: this.production ? 'prod' : 'stage',\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 // Serialize before dispatch: local serialization errors cannot be ambiguous.\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 const abortFromCaller = (): void => controller.abort(callerSignal?.reason);\n callerSignal?.addEventListener('abort', abortFromCaller, { once: true });\n let rejectOnAbort: () => void = () => {};\n // Also bound injected fetch implementations/streams that ignore AbortSignal.\n const aborted = new Promise<never>((_, reject) => {\n rejectOnAbort = () => reject(controller.signal.reason);\n controller.signal.addEventListener('abort', rejectOnAbort, {\n once: true,\n });\n });\n const timeout = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, this.timeoutMs);\n\n try {\n const response = await Promise.race([\n this.fetchImplementation(`${this.baseUrl}${request.path}`, init),\n aborted,\n ]);\n const body = await Promise.race([parseResponseBody(response), aborted]);\n if (!response.ok) {\n throw new GibworkApiError(\n response.status,\n body,\n request.method,\n request.path,\n response.headers.get('x-request-id') ?? undefined,\n response.headers.get('retry-after') ?? undefined,\n );\n }\n request.validateResponse?.(body);\n return body as T;\n } catch (cause) {\n if (cause instanceof GibworkApiError && cause.status < 500) throw cause;\n if (request.ambiguousSubmit) {\n throw new GibworkAmbiguousSubmitError(\n request.method,\n request.path,\n request.ambiguousSubmit,\n { cause },\n );\n }\n if (\n cause instanceof GibworkApiError ||\n cause instanceof GibworkProtocolError\n )\n throw cause;\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 read the Gibwork API response',\n request.method,\n request.path,\n { cause },\n );\n } finally {\n clearTimeout(timeout);\n callerSignal?.removeEventListener('abort', abortFromCaller);\n controller.signal.removeEventListener('abort', rejectOnAbort);\n }\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
|
@@ -18,8 +18,9 @@ declare class GibworkApiError extends GibworkError {
|
|
|
18
18
|
readonly method: string;
|
|
19
19
|
readonly path: string;
|
|
20
20
|
readonly requestId?: string | undefined;
|
|
21
|
+
readonly retryAfter?: string | undefined;
|
|
21
22
|
readonly name: string;
|
|
22
|
-
constructor(status: number, body: unknown, method: string, path: string, requestId?: string | undefined);
|
|
23
|
+
constructor(status: number, body: unknown, method: string, path: string, requestId?: string | undefined, retryAfter?: string | undefined);
|
|
23
24
|
}
|
|
24
25
|
declare class GibworkNetworkError extends GibworkError {
|
|
25
26
|
readonly method: string;
|
|
@@ -36,18 +37,46 @@ declare class GibworkRequestAbortedError extends GibworkNetworkError {
|
|
|
36
37
|
readonly name: string;
|
|
37
38
|
constructor(method: string, path: string, options?: ErrorOptions);
|
|
38
39
|
}
|
|
39
|
-
type SubmitOperation = 'create-task' | 'refund-task' | 'approve-submission';
|
|
40
|
+
type SubmitOperation = 'create-task' | 'refund-task' | 'approve-submission' | 'create-submission';
|
|
40
41
|
interface AmbiguousSubmitContext {
|
|
41
42
|
operation: SubmitOperation;
|
|
42
43
|
taskId?: string;
|
|
43
44
|
submissionId?: string;
|
|
44
45
|
intentId: string;
|
|
46
|
+
paymentAttemptId?: string;
|
|
47
|
+
idempotencyKey?: string;
|
|
48
|
+
walletAddress?: string;
|
|
49
|
+
environment?: 'stage' | 'prod';
|
|
50
|
+
apiUrl?: string;
|
|
45
51
|
}
|
|
46
52
|
declare class GibworkAmbiguousSubmitError extends GibworkNetworkError {
|
|
47
53
|
readonly context: AmbiguousSubmitContext;
|
|
48
54
|
readonly name: string;
|
|
49
55
|
constructor(method: string, path: string, context: AmbiguousSubmitContext, options?: ErrorOptions);
|
|
50
56
|
}
|
|
57
|
+
declare class GibworkValidationError extends GibworkError {
|
|
58
|
+
readonly name: string;
|
|
59
|
+
}
|
|
60
|
+
declare class GibworkProtocolError extends GibworkError {
|
|
61
|
+
readonly name: string;
|
|
62
|
+
}
|
|
63
|
+
interface SubmissionRecoveryContext {
|
|
64
|
+
taskId: string;
|
|
65
|
+
idempotencyKey: string;
|
|
66
|
+
walletAddress: string;
|
|
67
|
+
environment: 'stage' | 'prod';
|
|
68
|
+
apiUrl: string;
|
|
69
|
+
phase: 'prepare' | 'sign' | 'submit';
|
|
70
|
+
intentId?: string;
|
|
71
|
+
paymentAttemptId?: string;
|
|
72
|
+
submissionId?: string;
|
|
73
|
+
}
|
|
74
|
+
/** Retains identifiers when creation stops, including before any payment is sent. */
|
|
75
|
+
declare class GibworkSubmissionOperationError extends GibworkError {
|
|
76
|
+
readonly context: SubmissionRecoveryContext;
|
|
77
|
+
readonly name: string;
|
|
78
|
+
constructor(context: SubmissionRecoveryContext, options?: ErrorOptions);
|
|
79
|
+
}
|
|
51
80
|
|
|
52
81
|
interface RequestOptions {
|
|
53
82
|
signal?: AbortSignal;
|
|
@@ -239,6 +268,13 @@ interface UserSummary {
|
|
|
239
268
|
rejectedTaskSubmissions: number;
|
|
240
269
|
rating: number;
|
|
241
270
|
}
|
|
271
|
+
interface PublicProfileReference {
|
|
272
|
+
id: string;
|
|
273
|
+
routeKey: string;
|
|
274
|
+
}
|
|
275
|
+
type WalletSubmissionUser = Omit<UserSummary, 'externalId' | 'membership'> & {
|
|
276
|
+
publicProfile: PublicProfileReference | null;
|
|
277
|
+
};
|
|
242
278
|
interface MediaItem {
|
|
243
279
|
id: string;
|
|
244
280
|
provider: string;
|
|
@@ -262,6 +298,14 @@ interface SubmissionComment {
|
|
|
262
298
|
user: UserSummary;
|
|
263
299
|
media: MediaItem[];
|
|
264
300
|
}
|
|
301
|
+
interface WalletSubmissionComment {
|
|
302
|
+
id: string;
|
|
303
|
+
taskSubmissionId: string;
|
|
304
|
+
content: string;
|
|
305
|
+
createdAt: string;
|
|
306
|
+
user: WalletSubmissionUser;
|
|
307
|
+
media: MediaItem[];
|
|
308
|
+
}
|
|
265
309
|
interface SubmissionAsset extends Record<string, unknown> {
|
|
266
310
|
id?: string;
|
|
267
311
|
mintAddress?: string;
|
|
@@ -272,6 +316,19 @@ interface SubmissionAsset extends Record<string, unknown> {
|
|
|
272
316
|
decimals?: number;
|
|
273
317
|
}
|
|
274
318
|
type TaskSubmissionStatus = 'OPEN' | 'REJECTED' | 'CLAIMING' | 'WAITING_CLAIM' | 'CLOSED' | 'CLAIMED' | 'PROCESSING';
|
|
319
|
+
interface WalletTaskSubmissionDetails {
|
|
320
|
+
id: string;
|
|
321
|
+
taskId: string;
|
|
322
|
+
content: string;
|
|
323
|
+
status: TaskSubmissionStatus;
|
|
324
|
+
createdAt: string;
|
|
325
|
+
rejectReason?: string | null;
|
|
326
|
+
rating: number | null;
|
|
327
|
+
user: WalletSubmissionUser;
|
|
328
|
+
comments: WalletSubmissionComment[];
|
|
329
|
+
media: MediaItem[];
|
|
330
|
+
asset?: SubmissionAsset | null;
|
|
331
|
+
}
|
|
275
332
|
interface TaskSubmission extends Record<string, unknown> {
|
|
276
333
|
id: string;
|
|
277
334
|
taskId: string;
|
|
@@ -297,6 +354,88 @@ interface GibworkApiErrorBody {
|
|
|
297
354
|
error?: string;
|
|
298
355
|
[key: string]: unknown;
|
|
299
356
|
}
|
|
357
|
+
interface AvailableTasksQuery {
|
|
358
|
+
page?: number;
|
|
359
|
+
limit?: number;
|
|
360
|
+
}
|
|
361
|
+
interface AvailableTask {
|
|
362
|
+
id: string;
|
|
363
|
+
slug: string;
|
|
364
|
+
title: string;
|
|
365
|
+
content: string;
|
|
366
|
+
requirements: string | null;
|
|
367
|
+
tags: string[];
|
|
368
|
+
primarySkillId: string | null;
|
|
369
|
+
createdAt: string;
|
|
370
|
+
deadline: string | null;
|
|
371
|
+
status: 'CREATED';
|
|
372
|
+
isOpen: boolean;
|
|
373
|
+
asset: AvailableTaskAsset | null;
|
|
374
|
+
minSubmissionAmount: string | null;
|
|
375
|
+
totalSubmissions: number;
|
|
376
|
+
maxSubmissions: number | null;
|
|
377
|
+
standardSubmissionSlotsRemaining: number | null;
|
|
378
|
+
requiresPremium: boolean;
|
|
379
|
+
participationRequirements: AvailableTaskParticipationRequirements;
|
|
380
|
+
}
|
|
381
|
+
type AvailableTaskPage = Paginated<AvailableTask>;
|
|
382
|
+
interface CreateSubmissionInput {
|
|
383
|
+
content: string;
|
|
384
|
+
referral?: string | null;
|
|
385
|
+
mediaIds?: string[] | null;
|
|
386
|
+
/** Reuse for retries of this exact task and submission payload. */
|
|
387
|
+
idempotencyKey: string;
|
|
388
|
+
}
|
|
389
|
+
interface SubmitSubmissionInput {
|
|
390
|
+
paymentAttemptId: string;
|
|
391
|
+
signedTransaction: string;
|
|
392
|
+
}
|
|
393
|
+
type TaskSubmissionIntentStatus = 'pending' | 'submitted' | 'fulfilled' | 'failed' | 'expired' | 'requires_review';
|
|
394
|
+
interface TaskSubmissionIntent {
|
|
395
|
+
intentId: string;
|
|
396
|
+
taskId: string;
|
|
397
|
+
/** Allocated in advance; exists as a submission only when fulfilled. */
|
|
398
|
+
taskSubmissionId: string;
|
|
399
|
+
paymentAttemptId: string;
|
|
400
|
+
status: TaskSubmissionIntentStatus;
|
|
401
|
+
txHash: string | null;
|
|
402
|
+
expiresAt: string;
|
|
403
|
+
lastValidBlockHeight: number;
|
|
404
|
+
fee: TaskSubmissionFee;
|
|
405
|
+
reviewReason?: string;
|
|
406
|
+
/** Only returned by prepare for a pending intent, including pending retries. */
|
|
407
|
+
serializedTransaction?: string;
|
|
408
|
+
}
|
|
409
|
+
interface TaskSubmissionFee {
|
|
410
|
+
amount: string;
|
|
411
|
+
amountBaseUnits: string;
|
|
412
|
+
totalDebit: string;
|
|
413
|
+
symbol: 'USDC';
|
|
414
|
+
mintAddress: string;
|
|
415
|
+
decimals: number;
|
|
416
|
+
destinationAddress: string;
|
|
417
|
+
}
|
|
418
|
+
interface AvailableTaskAsset {
|
|
419
|
+
mintAddress: string;
|
|
420
|
+
symbol: string;
|
|
421
|
+
imageUrl: string;
|
|
422
|
+
decimals: number;
|
|
423
|
+
/** Original reward pool in base units, not the remaining balance. */
|
|
424
|
+
amount: string;
|
|
425
|
+
}
|
|
426
|
+
interface AvailableTaskParticipationRequirements {
|
|
427
|
+
allowOnlyVerifiedSubmissions: boolean;
|
|
428
|
+
allowOnlyVerifiedTwitterAccountSubmissions: boolean;
|
|
429
|
+
minTwitterFollowers: number;
|
|
430
|
+
minTweetLikes: number;
|
|
431
|
+
minTweetViews: number;
|
|
432
|
+
isTwitterTask: boolean;
|
|
433
|
+
allowOnlyDiscordGuildSubmissions: boolean;
|
|
434
|
+
requiredDiscordGuildId: string | null;
|
|
435
|
+
requiredDiscordGuildName: string | null;
|
|
436
|
+
discordGuildInvitationUrl: string | null;
|
|
437
|
+
requiredDiscordRoleIds: string[];
|
|
438
|
+
}
|
|
300
439
|
|
|
301
440
|
type FetchImplementation = typeof fetch;
|
|
302
441
|
interface HttpTransportOptions {
|
|
@@ -312,6 +451,7 @@ interface HttpRequest {
|
|
|
312
451
|
body?: unknown;
|
|
313
452
|
options?: RequestOptions;
|
|
314
453
|
ambiguousSubmit?: AmbiguousSubmitContext;
|
|
454
|
+
validateResponse?: (body: unknown) => void;
|
|
315
455
|
}
|
|
316
456
|
declare class HttpTransport {
|
|
317
457
|
private readonly baseUrl;
|
|
@@ -319,6 +459,11 @@ declare class HttpTransport {
|
|
|
319
459
|
private readonly production;
|
|
320
460
|
private readonly timeoutMs;
|
|
321
461
|
constructor(options: HttpTransportOptions);
|
|
462
|
+
/** Recovery location without URL credentials. Retains reverse-proxy path prefixes. */
|
|
463
|
+
get recoveryLocation(): {
|
|
464
|
+
apiUrl: string;
|
|
465
|
+
environment: 'stage' | 'prod';
|
|
466
|
+
};
|
|
322
467
|
request<T>(request: HttpRequest): Promise<T>;
|
|
323
468
|
}
|
|
324
469
|
|
|
@@ -335,7 +480,16 @@ declare class SubmissionsResource {
|
|
|
335
480
|
private readonly signer;
|
|
336
481
|
readonly comments: SubmissionCommentsResource;
|
|
337
482
|
constructor(transport: HttpTransport, signer: WalletSigner);
|
|
483
|
+
/** Creates work through a participation fee; only fulfilled confirms creation. */
|
|
484
|
+
create(taskId: string, input: CreateSubmissionInput, options?: RequestOptions): Promise<TaskSubmissionIntent>;
|
|
485
|
+
/** Reuse the exact input and idempotency key after an interrupted prepare. */
|
|
486
|
+
prepareCreate(taskId: string, input: CreateSubmissionInput, options?: RequestOptions): Promise<TaskSubmissionIntent>;
|
|
487
|
+
/** Never automatically retries. Recover an uncertain payment with getIntent. */
|
|
488
|
+
submitCreate(taskId: string, intentId: string, input: SubmitSubmissionInput, options?: RequestOptions): Promise<TaskSubmissionIntent>;
|
|
489
|
+
/** Reads/reconciles creation using the original wallet; does not report review/payout. */
|
|
490
|
+
getIntent(taskId: string, intentId: string, options?: RequestOptions): Promise<TaskSubmissionIntent>;
|
|
338
491
|
list(taskId: string, query?: SubmissionPaginationQuery, options?: RequestOptions): Promise<Paginated<TaskSubmission>>;
|
|
492
|
+
get(taskId: string, submissionId: string, options?: RequestOptions): Promise<WalletTaskSubmissionDetails>;
|
|
339
493
|
approve(taskId: string, submissionId: string, input: ApproveSubmissionInput, options?: RequestOptions): Promise<ApproveSubmissionResult>;
|
|
340
494
|
reject(taskId: string, submissionId: string, reason?: string | null, options?: RequestOptions): Promise<RejectSubmissionResult>;
|
|
341
495
|
prepareApproval(taskId: string, submissionId: string, input: ApproveSubmissionInput, options?: RequestOptions): Promise<PreparedApprovalIntent>;
|
|
@@ -349,6 +503,8 @@ declare class TasksResource {
|
|
|
349
503
|
constructor(transport: HttpTransport, signer: WalletSigner);
|
|
350
504
|
create(input: CreateTaskInput, options?: RequestOptions): Promise<CreateTaskResult>;
|
|
351
505
|
list(query?: PaginationQuery, options?: RequestOptions): Promise<Paginated<WalletTaskSummary>>;
|
|
506
|
+
/** Discover tasks across creators. Eligibility is checked when preparing work. */
|
|
507
|
+
listAvailable(query?: AvailableTasksQuery, options?: RequestOptions): Promise<AvailableTaskPage>;
|
|
352
508
|
update(taskId: string, input: UpdateTaskInput, options?: RequestOptions): Promise<UpdatedTask>;
|
|
353
509
|
refund(taskId: string, options?: RequestOptions): Promise<RefundTaskResult>;
|
|
354
510
|
prepareCreate(input: CreateTaskInput, options?: RequestOptions): Promise<PreparedTaskIntent>;
|
|
@@ -378,4 +534,4 @@ declare const DEFAULT_GIBWORK_API_URL: string;
|
|
|
378
534
|
|
|
379
535
|
declare function signPreparedTransaction(serializedTransaction: string, signer: WalletSigner): Promise<string>;
|
|
380
536
|
|
|
381
|
-
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 };
|
|
537
|
+
export { type AmbiguousSubmitContext, type ApprovalQuote, type ApprovalSubmitResult, type ApproveSubmissionInput, type ApproveSubmissionResult, type AvailableTask, type AvailableTaskAsset, type AvailableTaskPage, type AvailableTaskParticipationRequirements, type AvailableTasksQuery, type CreateSubmissionInput, type CreateTaskInput, type CreateTaskResult, DEFAULT_GIBWORK_API_URL, type FeeQuote, type FetchImplementation, GibworkAmbiguousSubmitError, GibworkApiError, type GibworkApiErrorBody, GibworkClient, type GibworkClientOptions, GibworkConfigurationError, GibworkError, GibworkNetworkError, GibworkProtocolError, GibworkRequestAbortedError, GibworkSubmissionOperationError, GibworkTimeoutError, GibworkValidationError, 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 SubmissionRecoveryContext, type SubmissionStatus, type SubmitOperation, type SubmitSubmissionInput, type TaskSubmission, type TaskSubmissionFee, type TaskSubmissionIntent, type TaskSubmissionIntentStatus, 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 };
|