Skip to content

Commit

Permalink
feat(delegated payments): push created/revoked approvals into upload …
Browse files Browse the repository at this point in the history
…response if they exist PE-6754
  • Loading branch information
fedellen committed Oct 24, 2024
1 parent eaabd39 commit 33da73d
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 8 deletions.
5 changes: 3 additions & 2 deletions src/common/turbo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/
import {
Currency,
DelegatedPaymentApproval,
GetDelegatedPaymentApprovalsResponse,
NativeAddress,
TokenType,
Expand Down Expand Up @@ -294,7 +295,7 @@ export class TurboAuthenticatedClient
*/
createDelegatedPaymentApproval(
p: TurboCreateDelegatedPaymentApprovalParams,
): Promise<TurboUploadDataItemResponse> {
): Promise<DelegatedPaymentApproval> {
return this.uploadService.createDelegatedPaymentApproval(p);
}

Expand All @@ -306,7 +307,7 @@ export class TurboAuthenticatedClient
*/
revokeDelegatedPaymentApprovals(
p: TurboRevokeDelegatePaymentApprovalsParams,
): Promise<TurboUploadDataItemResponse> {
): Promise<DelegatedPaymentApproval[]> {
return this.uploadService.revokeDelegatedPaymentApprovals(p);
}
}
25 changes: 21 additions & 4 deletions src/common/upload.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import { pLimit } from 'plimit-lit';
import {
ArweaveManifest,
DataItemOptions,
DelegatedPaymentApproval,
TokenType,
TurboAbortSignal,
TurboAuthenticatedUploadServiceConfiguration,
Expand Down Expand Up @@ -319,7 +320,7 @@ export abstract class TurboAuthenticatedBaseUploadService
approvedAddress,
approvedWincAmount,
expiresBySeconds,
}: TurboCreateDelegatedPaymentApprovalParams): Promise<TurboUploadDataItemResponse> {
}: TurboCreateDelegatedPaymentApprovalParams): Promise<DelegatedPaymentApproval> {
const dataItemOpts = {
tags: [
{ name: createDelegatedPaymentApprovalTagName, value: approvedAddress },
Expand All @@ -336,16 +337,25 @@ export abstract class TurboAuthenticatedBaseUploadService
const nonceData = Buffer.from(
approvedAddress + approvedWincAmount + Date.now(),
);
return this.uploadFile({
const { createdApproval, ...uploadResponse } = await this.uploadFile({
fileStreamFactory: () => Readable.from(nonceData),
fileSizeFactory: () => nonceData.byteLength,
dataItemOpts,
});
if (!createdApproval) {
throw new Error(
'Failed to create delegated payment approval but upload has succeeded\n' +
JSON.stringify(uploadResponse),
);
}
return createdApproval;
}

public async revokeDelegatedPaymentApprovals({
revokedAddress,
}: TurboRevokeDelegatePaymentApprovalsParams): Promise<TurboUploadDataItemResponse> {
}: TurboRevokeDelegatePaymentApprovalsParams): Promise<
DelegatedPaymentApproval[]
> {
const dataItemOpts = {
tags: [
{
Expand All @@ -356,10 +366,17 @@ export abstract class TurboAuthenticatedBaseUploadService
};

const nonceData = Buffer.from(revokedAddress + Date.now());
return this.uploadFile({
const { revokedApprovals, ...uploadResponse } = await this.uploadFile({
fileStreamFactory: () => Readable.from(nonceData),
fileSizeFactory: () => nonceData.byteLength,
dataItemOpts,
});
if (!revokedApprovals) {
throw new Error(
'Failed to revoke delegated payment approvals but upload has succeeded\n' +
JSON.stringify(uploadResponse),
);
}
return revokedApprovals;
}
}
10 changes: 8 additions & 2 deletions src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,8 @@ export type TurboUploadDataItemResponse = {
id: TransactionId;
owner: PublicArweaveAddress;
winc: string;
createdApproval?: DelegatedPaymentApproval;
revokedApprovals?: DelegatedPaymentApproval[];
};

type UploadFolderParams = {
Expand Down Expand Up @@ -599,9 +601,11 @@ export type TurboFundWithTokensParams = {
export interface TurboAuthenticatedPaymentServiceInterface
extends TurboUnauthenticatedPaymentServiceInterface {
getBalance: (userAddress?: UserAddress) => Promise<TurboBalanceResponse>;

getDelegatedPaymentApprovals(
userAddress?: UserAddress,
): Promise<GetDelegatedPaymentApprovalsResponse>;

topUpWithTokens(
p: TurboFundWithTokensParams,
): Promise<TurboCryptoFundResponse>;
Expand All @@ -626,10 +630,11 @@ export interface TurboAuthenticatedUploadServiceInterface

createDelegatedPaymentApproval(
p: TurboCreateDelegatedPaymentApprovalParams,
): Promise<TurboUploadDataItemResponse>;
): Promise<DelegatedPaymentApproval>;

revokeDelegatedPaymentApprovals(
p: TurboRevokeDelegatePaymentApprovalsParams,
): Promise<TurboUploadDataItemResponse>;
): Promise<DelegatedPaymentApproval[]>;
}

export interface TurboUnauthenticatedClientInterface
Expand All @@ -652,6 +657,7 @@ export interface TokenTools {
target: string;
reward?: string;
}>;

pollForTxBeingAvailable: (p: { txId: string }) => Promise<void>;
}

Expand Down

0 comments on commit 33da73d

Please sign in to comment.