@cfxlabsinc/b2b-services
    Preparing search index...

    The global asset set templates reference by path: pdf_asset rows over the versioned asset bucket. The renderer caches bytes by (s3_key, updated_at), so a replaced file must bump updated_at; the audit row is the action's.

    Index
    • Records an uploaded object: HEADs it, then upserts the live row, bumping updated_at.

      Parameters

      • __namedParameters: { key: string } & Admin

      Returns Promise<
          | { ok: true; value: PdfAssetNode }
          | {
              error:
                  | NoFolder
                  | ServiceError<"PDF_ASSET_KEY_INVALID">
                  | ServiceError<"PDF_ASSET_OBJECT_NOT_FOUND">;
              ok: false;
          },
      >

    • Parameters

      • __namedParameters: { folder: string; name: string } & Admin

      Returns Promise<
          | { ok: true; value: PdfAssetNode }
          | {
              error: BadName | NoFolder | ServiceError<"PDF_ASSET_PATH_TAKEN">;
              ok: false;
          },
      >

    • A 15-minute download link for the file at path; null when there is none.

      Parameters

      • __namedParameters: { path: string }

      Returns Promise<string | null>

    • The live nodes directly under folder, folders first, then by orderBy (name A–Z).

      Parameters

      • __namedParameters: {
            folder?: string;
            orderBy?: {
                direction: "ASC" | "DESC";
                field: "name" | "size" | "updatedAt";
            };
        } = {}

      Returns Promise<{ ok: true; value: { items: PdfAssetNode[] } }>

    • Upserts the live file row at folder/name, creating missing parent folders and bumping updated_at. For a writer that put the bytes itself (scripts/upload-assets.ts); null when a folder holds the path.

      Parameters

      • __namedParameters: { contentType: string | null; folder: string; name: string; size: number } & Admin

      Returns Promise<
          | {
              contentType: string
              | null;
              createdAt: Date;
              deletedAt: Date | null;
              externalId: string;
              folder: string;
              id: number;
              kind: "FILE" | "FOLDER";
              name: string;
              s3Key: string | null;
              size: number | null;
              status: "ACTIVE" | "DELETED";
              type: "ASSET";
              updatedAt: Date;
              updatedByAdminExternalId: string | null;
          }
          | null,
      >

    • Soft-deletes a node and everything under it; the S3 object stays, versioned.

      Parameters

      • __namedParameters: { path: string } & Admin

      Returns Promise<
          | { ok: true; value: { removed: number } }
          | { error: ServiceError; ok: false },
      >

    • A 5-minute presigned PUT for assets/<folder>/<name>; confirm with completeUpload.

      Parameters

      • __namedParameters: { contentType: string; folder: string; name: string; size: number } & Admin

      Returns Promise<
          | {
              ok: true;
              value: { headers: Record<string, string>; s3_key: string; url: string };
          }
          | {
              error: | BadName
              | NoFolder
              | ServiceError<"PDF_ASSET_TYPE_NOT_ALLOWED">
              | ServiceError<"PDF_ASSET_TOO_LARGE">;
              ok: false;
          },
      >

    • The object key a file at folder/name lives under.

      Parameters

      • path: { folder: string; name: string }

      Returns string