diff --git a/go.mod b/go.mod
index c61424704c1f6df5042eb768b9b256c1326cc26f..40d7479339035c070c7325eeb8b8f9420fa8c5e2 100644
--- a/go.mod
+++ b/go.mod
@@ -10,7 +10,7 @@ require (
 	github.com/pkg/errors v0.9.1
 	github.com/spf13/cobra v1.5.0
 	github.com/spf13/jwalterweatherman v1.1.0
-	gitlab.com/elixxir/client/v4 v4.3.12-0.20230307194033-15078a6a49d0
+	gitlab.com/elixxir/client/v4 v4.3.12-0.20230306215020-e4b1c0ae13fd
 	gitlab.com/elixxir/crypto v0.0.7-0.20230216203124-0c064fe2e78f
 	gitlab.com/elixxir/primitives v0.0.3-0.20230214180039-9a25e2d3969c
 	gitlab.com/xx_network/crypto v0.0.5-0.20230214003943-8a09396e95dd
diff --git a/go.sum b/go.sum
index ef30d0f90d3882ab7f8653a8d46b025631dfabde..6dd5edd1294dfe644c81db539d2ee2ac8419208b 100644
--- a/go.sum
+++ b/go.sum
@@ -401,8 +401,8 @@ github.com/zeebo/pcg v1.0.1 h1:lyqfGeWiv4ahac6ttHs+I5hwtH/+1mrhlCtVNQM2kHo=
 github.com/zeebo/pcg v1.0.1/go.mod h1:09F0S9iiKrwn9rlI5yjLkmrug154/YRW6KnnXVDM/l4=
 gitlab.com/elixxir/bloomfilter v0.0.0-20211222005329-7d931ceead6f h1:yXGvNBqzZwAhDYlSnxPRbgor6JWoOt1Z7s3z1O9JR40=
 gitlab.com/elixxir/bloomfilter v0.0.0-20211222005329-7d931ceead6f/go.mod h1:H6jztdm0k+wEV2QGK/KYA+MY9nj9Zzatux/qIvDDv3k=
-gitlab.com/elixxir/client/v4 v4.3.12-0.20230307194033-15078a6a49d0 h1:3YawABe4MiVLxP+VA2IBVkp8ud26DNYmkeuaK2pjwnI=
-gitlab.com/elixxir/client/v4 v4.3.12-0.20230307194033-15078a6a49d0/go.mod h1:4FWaMf01ZLBExwU1TWWTy2WhyzXzicTqZSDNSqKp3pA=
+gitlab.com/elixxir/client/v4 v4.3.12-0.20230306215020-e4b1c0ae13fd h1:yZxRtcy051JlOgT37UhO80B+cw8/OnO6gZtM6uafFfY=
+gitlab.com/elixxir/client/v4 v4.3.12-0.20230306215020-e4b1c0ae13fd/go.mod h1:Hjx99EdI86q67mHzZVR2Dw37fuTCzDaChM/NVX3CcPU=
 gitlab.com/elixxir/comms v0.0.4-0.20230214180204-3aba2e6795af h1:Eye4+gZEUbOfz4j51WplYD9d7Gnr1s3wKYkEnCfhPaw=
 gitlab.com/elixxir/comms v0.0.4-0.20230214180204-3aba2e6795af/go.mod h1:ud3s2aHx5zu7lJhBpUMUXxjLwl8PH8z8cl64Om9U7q8=
 gitlab.com/elixxir/crypto v0.0.7-0.20230216203124-0c064fe2e78f h1:GPUuaSKaDULcw/obfTHYEV2In2CAchnYEvknYWwDw+4=
diff --git a/main.go b/main.go
index 4b82dc9d57049692efe581592402543256b0bce1..f170f646edcf51e454d6f419f8b8144748d8d85d 100644
--- a/main.go
+++ b/main.go
@@ -94,10 +94,6 @@ func main() {
 	js.Global().Set("NewChannelsDatabaseCipher",
 		js.FuncOf(wasm.NewChannelsDatabaseCipher))
 
-	// wasm/dm.go
-	js.Global().Set("InitChannelsFileTransfer",
-		js.FuncOf(wasm.InitChannelsFileTransfer))
-
 	// wasm/dm.go
 	js.Global().Set("NewDMClient", js.FuncOf(wasm.NewDMClient))
 	js.Global().Set("NewDMClientWithIndexedDb",
diff --git a/wasm/channelsFileTransfer.go b/wasm/channelsFileTransfer.go
deleted file mode 100644
index 95fa8fc3841261d4cab71f81cde4e2bb428da5a7..0000000000000000000000000000000000000000
--- a/wasm/channelsFileTransfer.go
+++ /dev/null
@@ -1,558 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-// Copyright © 2022 xx foundation                                             //
-//                                                                            //
-// Use of this source code is governed by a license that can be found in the  //
-// LICENSE file.                                                              //
-////////////////////////////////////////////////////////////////////////////////
-
-//go:build js && wasm
-
-package wasm
-
-import (
-	"gitlab.com/elixxir/client/v4/bindings"
-	"gitlab.com/elixxir/xxdk-wasm/utils"
-	"syscall/js"
-)
-
-// ChannelsFileTransfer wraps the [bindings.ChannelsFileTransfer] object so its
-// methods can be wrapped to be Javascript compatible.
-type ChannelsFileTransfer struct {
-	api *bindings.ChannelsFileTransfer
-}
-
-// newChannelsFileTransferJS creates a new Javascript compatible object
-// (map[string]any) that matches the [ChannelsFileTransfer] structure.
-func newChannelsFileTransferJS(api *bindings.ChannelsFileTransfer) map[string]any {
-	cft := ChannelsFileTransfer{api}
-	channelsFileTransferMap := map[string]any{
-		"MaxFileNameLen": js.FuncOf(cft.MaxFileNameLen),
-		"MaxFileTypeLen": js.FuncOf(cft.MaxFileTypeLen),
-		"MaxFileSize":    js.FuncOf(cft.MaxFileSize),
-		"MaxPreviewSize": js.FuncOf(cft.MaxPreviewSize),
-
-		// Uploading/Sending
-		"Upload":                       js.FuncOf(cft.Upload),
-		"Send":                         js.FuncOf(cft.Send),
-		"RegisterSentProgressCallback": js.FuncOf(cft.RegisterSentProgressCallback),
-		"RetryUpload":                  js.FuncOf(cft.RetryUpload),
-		"CloseSend":                    js.FuncOf(cft.CloseSend),
-
-		// Downloading
-		"Download":                         js.FuncOf(cft.Download),
-		"RegisterReceivedProgressCallback": js.FuncOf(cft.RegisterReceivedProgressCallback),
-	}
-
-	return channelsFileTransferMap
-}
-
-// InitChannelsFileTransfer creates a file transfer manager for channels.
-//
-// Parameters:
-//   - args[0] - ID of [E2e] object in tracker (int).
-//   - args[1] - JSON of [channelsFileTransfer.Params] (Uint8Array).
-//
-// Returns:
-//   - New [ChannelsFileTransfer] object.
-//
-// Returns a promise:
-//   - Resolves to a Javascript representation of the [ChannelsFileTransfer]
-//     object.
-//   - Rejected with an error if creating the file transfer object fails.
-func InitChannelsFileTransfer(_ js.Value, args []js.Value) any {
-	e2eID := args[0].Int()
-	paramsJson := utils.CopyBytesToGo(args[1])
-
-	promiseFn := func(resolve, reject func(args ...any) js.Value) {
-		cft, err := bindings.InitChannelsFileTransfer(e2eID, paramsJson)
-		if err != nil {
-			reject(utils.JsTrace(err))
-		} else {
-			resolve(newChannelsFileTransferJS(cft))
-		}
-	}
-
-	return utils.CreatePromise(promiseFn)
-}
-
-// MaxFileNameLen returns the max number of bytes allowed for a file name.
-//
-// Returns:
-//   - Max number of bytes (int).
-func (cft *ChannelsFileTransfer) MaxFileNameLen(js.Value, []js.Value) any {
-	return cft.api.MaxFileNameLen()
-}
-
-// MaxFileTypeLen returns the max number of bytes allowed for a file type.
-//
-// Returns:
-//   - Max number of bytes (int).
-func (cft *ChannelsFileTransfer) MaxFileTypeLen(js.Value, []js.Value) any {
-	return cft.api.MaxFileNameLen()
-}
-
-// MaxFileSize returns the max number of bytes allowed for a file.
-//
-// Returns:
-//   - Max number of bytes (int).
-func (cft *ChannelsFileTransfer) MaxFileSize(js.Value, []js.Value) any {
-	return cft.api.MaxFileSize()
-}
-
-// MaxPreviewSize returns the max number of bytes allowed for a file preview.
-//
-// Returns:
-//   - Max number of bytes (int).
-func (cft *ChannelsFileTransfer) MaxPreviewSize(js.Value, []js.Value) any {
-	return cft.api.MaxFileSize()
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Uploading/Sending                                                          //
-////////////////////////////////////////////////////////////////////////////////
-
-// Upload starts uploading the file to a new ID that can be sent to the
-// specified channel when complete. To get progress information about the
-// upload, a [bindings.FtSentProgressCallback] must be registered. All errors
-// returned on the callback are fatal and the user must take action to either
-// [ChannelsFileTransfer.RetryUpload] or [ChannelsFileTransfer.CloseSend].
-//
-// The file is added to the event model at the returned file ID with the status
-// [channelsFileTransfer.Uploading]. Once the upload is complete, the file link
-// is added to the event model with the status [channelsFileTransfer.Complete].
-//
-// The [bindings.FtSentProgressCallback] only indicates the progress of the file
-// upload, not the status of the file in the event model. You must rely on
-// updates from the event model to know when it can be retrieved.
-//
-// Parameters:
-//   - args[0] - File contents. Max size defined by
-//     [ChannelsFileTransfer.MaxFileSize] (Uint8Array).
-//   - args[1] - The number of sending retries allowed on send failure (e.g. a
-//     retry of 2.0 with 6 parts means 12 total possible sends) (float).
-//   - args[2] - The progress callback, which is a callback that reports the
-//     progress of the file upload. The callback is called once on
-//     initialization, on every progress update (or less if restricted by the
-//     period), or on fatal error. It must be a Javascript object that
-//     implements the [bindings.FtSentProgressCallback] interface.
-//   - args[3] - Progress callback period. A progress callback will be limited
-//     from triggering only once per period, in milliseconds (int).
-//
-// Returns a promise:
-//   - Resolves to the marshalled bytes of [fileTransfer.ID] that uniquely
-//     identifies the file (Uint8Array).
-//   - Rejected with an error if initiating the upload fails.
-func (cft *ChannelsFileTransfer) Upload(_ js.Value, args []js.Value) any {
-	var (
-		fileData   = utils.CopyBytesToGo(args[0])
-		retry      = float32(args[1].Float())
-		progressCB = &ftSentCallback{utils.WrapCB(args[2], "Callback")}
-		period     = args[3].Int()
-	)
-
-	promiseFn := func(resolve, reject func(args ...any) js.Value) {
-		fileID, err := cft.api.Upload(fileData, retry, progressCB, period)
-		if err != nil {
-			reject(utils.JsTrace(err))
-		} else {
-			resolve(utils.CopyBytesToJS(fileID))
-		}
-	}
-
-	return utils.CreatePromise(promiseFn)
-}
-
-// Send sends the specified file info to the channel. Once a file is uploaded
-// via [ChannelsFileTransfer.Upload], its file info (found in the event model)
-// can be sent to any channel.
-//
-// Parameters:
-//   - args[0] - Marshalled bytes of the channel's [id.ID] to send the file to
-//     (Uint8Array).
-//   - args[1] - JSON of [channelsFileTransfer.FileLink] stored in the event
-//     model (Uint8Array).
-//   - args[2] - Human-readable file name. Max length defined by
-//     [ChannelsFileTransfer.MaxFileNameLen] (string).
-//   - args[3] - Shorthand that identifies the type of file. Max length defined
-//     by [ChannelsFileTransfer.MaxFileTypeLen] (string).
-//   - args[4] - A preview of the file data (e.g. a thumbnail). Max size defined
-//     by [ChannelsFileTransfer.MaxPreviewSize] (Uint8Array).
-//   - args[5] - The duration, in milliseconds, that the file is available in
-//     the channel (int). For the maximum amount of time, use [ValidForever].
-//   - args[6] - JSON of [xxdk.CMIXParams] (Uint8Array). If left empty,
-//     [GetDefaultCMixParams] will be used internally.
-//
-// Returns a promise:
-//   - Resolves to the JSON of [bindings.ChannelSendReport] (Uint8Array).
-//   - Rejected with an error if sending fails.
-func (cft *ChannelsFileTransfer) Send(_ js.Value, args []js.Value) any {
-	var (
-		channelIdBytes = utils.CopyBytesToGo(args[0])
-		fileLinkJSON   = utils.CopyBytesToGo(args[1])
-		fileName       = args[2].String()
-		fileType       = args[3].String()
-		preview        = utils.CopyBytesToGo(args[4])
-		validUntilMS   = args[5].Int()
-		cmixParamsJSON = utils.CopyBytesToGo(args[6])
-	)
-
-	promiseFn := func(resolve, reject func(args ...any) js.Value) {
-		fileID, err := cft.api.Send(channelIdBytes, fileLinkJSON, fileName,
-			fileType, preview, validUntilMS, cmixParamsJSON)
-		if err != nil {
-			reject(utils.JsTrace(err))
-		} else {
-			resolve(utils.CopyBytesToJS(fileID))
-		}
-	}
-
-	return utils.CreatePromise(promiseFn)
-}
-
-// RegisterSentProgressCallback allows for the registration of a callback to
-// track the progress of an individual file upload. A
-// [bindings.FtSentProgressCallback] is auto registered on
-// [ChannelsFileTransfer.Send]; this function should be called when resuming
-// clients or registering extra callbacks.
-//
-// The callback will be called immediately when added to report the current
-// progress of the transfer. It will then call every time a file part arrives,
-// the transfer completes, or a fatal error occurs. It is called at most once
-// every period regardless of the number of progress updates.
-//
-// In the event that the client is closed and resumed, this function must be
-// used to re-register any callbacks previously registered with this function or
-// [ChannelsFileTransfer.Send].
-//
-// The [bindings.FtSentProgressCallback] only indicates the progress of the file
-// upload, not the status of the file in the event model. You must rely on
-// updates from the event model to know when it can be retrieved.
-//
-// Parameters:
-//   - args[0] - Marshalled bytes of the file's [fileTransfer.ID] (Uint8Array).
-//   - args[1] - The progress callback, which is a callback that reports the
-//     progress of the file upload. The callback is called once on
-//     initialization, on every progress update (or less if restricted by the
-//     period), or on fatal error. It must be a Javascript object that
-//     implements the [bindings.FtSentProgressCallback] interface.
-//   - args[2] - Progress callback period. A progress callback will be limited
-//     from triggering only once per period, in milliseconds (int).
-//
-// Returns a promise:
-//   - Resolves on success (void).
-//   - Rejected with an error if registering the callback fails.
-func (cft *ChannelsFileTransfer) RegisterSentProgressCallback(
-	_ js.Value, args []js.Value) any {
-	var (
-		fileIDBytes = utils.CopyBytesToGo(args[0])
-		progressCB  = &ftSentCallback{utils.WrapCB(args[1], "Callback")}
-		periodMS    = args[2].Int()
-	)
-
-	promiseFn := func(resolve, reject func(args ...any) js.Value) {
-		err := cft.api.RegisterSentProgressCallback(
-			fileIDBytes, progressCB, periodMS)
-		if err != nil {
-			reject(utils.JsTrace(err))
-		} else {
-			resolve()
-		}
-	}
-
-	return utils.CreatePromise(promiseFn)
-}
-
-// RetryUpload retries uploading a failed file upload. Returns an error if the
-// transfer has not failed.
-//
-// This function should be called once a transfer errors out (as reported by the
-// progress callback).
-//
-// A new progress callback must be registered on retry. Any previously
-// registered callbacks are defunct when the upload fails.
-//
-// Parameters:
-//   - args[0] - Marshalled bytes of the file's [fileTransfer.ID] (Uint8Array).
-//   - args[1] - The progress callback, which is a callback that reports the
-//     progress of the file upload. The callback is called once on
-//     initialization, on every progress update (or less if restricted by the
-//     period), or on fatal error. It must be a Javascript object that
-//     implements the [bindings.FtSentProgressCallback] interface.
-//   - args[2] - Progress callback period. A progress callback will be limited
-//     from triggering only once per period, in milliseconds (int).
-//
-// Returns a promise:
-//   - Resolves on success (void).
-//   - Rejected with an error if registering retrying the upload fails.
-func (cft *ChannelsFileTransfer) RetryUpload(_ js.Value, args []js.Value) any {
-	var (
-		fileIDBytes = utils.CopyBytesToGo(args[0])
-		progressCB  = &ftSentCallback{utils.WrapCB(args[1], "Callback")}
-		periodMS    = args[2].Int()
-	)
-
-	promiseFn := func(resolve, reject func(args ...any) js.Value) {
-		err := cft.api.RetryUpload(fileIDBytes, progressCB, periodMS)
-		if err != nil {
-			reject(utils.JsTrace(err))
-		} else {
-			resolve()
-		}
-	}
-
-	return utils.CreatePromise(promiseFn)
-}
-
-// CloseSend deletes a file from the internal storage once a transfer has
-// completed or reached the retry limit. If neither of those condition are met,
-// an error is returned.
-//
-// This function should be called once a transfer completes or errors out (as
-// reported by the progress callback).
-//
-// Parameters:
-//   - args[0] - Marshalled bytes of the file's [fileTransfer.ID] (Uint8Array).
-//
-// Returns a promise:
-//   - Resolves on success (void).
-//   - Rejected with an error if the file has not failed or completed or if
-//     closing failed.
-func (cft *ChannelsFileTransfer) CloseSend(_ js.Value, args []js.Value) any {
-	fileIDBytes := utils.CopyBytesToGo(args[0])
-
-	promiseFn := func(resolve, reject func(args ...any) js.Value) {
-		err := cft.api.CloseSend(fileIDBytes)
-		if err != nil {
-			reject(utils.JsTrace(err))
-		} else {
-			resolve()
-		}
-	}
-
-	return utils.CreatePromise(promiseFn)
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Download                                                                   //
-////////////////////////////////////////////////////////////////////////////////
-
-// Download begins the download of the file described in the marshalled
-// [channelsFileTransfer.FileInfo]. The progress of the download is reported on
-// the [bindings.FtReceivedProgressCallback].
-//
-// Once the download completes, the file will be stored in the event model with
-// the given file ID and with the status [channels.ReceptionProcessingComplete].
-//
-// The [bindings.FtReceivedProgressCallback] only indicates the progress of the
-// file download, not the status of the file in the event model. You must rely
-// on updates from the event model to know when it can be retrieved.
-//
-// Parameters:
-//   - args[0] - The JSON of [channelsFileTransfer.FileInfo] received on a
-//     channel (Uint8Array).
-//   - args[1] - The progress callback, which is a callback that reports the
-//     progress of the file download. The callback is called once on
-//     initialization, on every progress update (or less if restricted by the
-//     period), or on fatal error. It must be a Javascript object that
-//     implements the [bindings.FtReceivedProgressCallback] interface.
-//   - args[2] - Progress callback period. A progress callback will be limited
-//     from triggering only once per period, in milliseconds (int).
-//
-// Returns:
-//   - Marshalled bytes of [fileTransfer.ID] that uniquely identifies the file.
-//
-// Returns a promise:
-//   - Resolves to the marshalled bytes of [fileTransfer.ID] that uniquely
-//     identifies the file. (Uint8Array).
-//   - Rejected with an error if downloading fails.
-func (cft *ChannelsFileTransfer) Download(_ js.Value, args []js.Value) any {
-	var (
-		fileInfoJSON = utils.CopyBytesToGo(args[0])
-		progressCB   = &ftReceivedCallback{utils.WrapCB(args[1], "Callback")}
-		periodMS     = args[2].Int()
-	)
-
-	promiseFn := func(resolve, reject func(args ...any) js.Value) {
-		fileID, err := cft.api.Download(fileInfoJSON, progressCB, periodMS)
-		if err != nil {
-			reject(utils.JsTrace(err))
-		} else {
-			resolve(utils.CopyBytesToJS(fileID))
-		}
-	}
-
-	return utils.CreatePromise(promiseFn)
-}
-
-// RegisterReceivedProgressCallback allows for the registration of a callback to
-// track the progress of an individual received file transfer.
-//
-// The callback will be called immediately when added to report the current
-// progress of the transfer. It will then call every time a file part is
-// received, the transfer completes, or a fatal error occurs. It is called at
-// most once every period regardless of the number of progress updates.
-//
-// In the event that the client is closed and resumed, this function must be
-// used to re-register any callbacks previously registered.
-//
-// Once the download completes, the file will be stored in the event model with
-// the given file ID and with the status [channels.ReceptionProcessingComplete].
-//
-// The [bindings.FtReceivedProgressCallback] only indicates the progress of the
-// file download, not the status of the file in the event model. You must rely
-// on updates from the event model to know when it can be retrieved.
-//
-// Parameters:
-//   - args[0] - Marshalled bytes of the file's [fileTransfer.ID] (Uint8Array).
-//   - args[1] - The progress callback, which is a callback that reports the
-//     progress of the file download. The callback is called once on
-//     initialization, on every progress update (or less if restricted by the
-//     period), or on fatal error. It must be a Javascript object that
-//     implements the [bindings.FtReceivedProgressCallback] interface.
-//   - args[2] - Progress callback period. A progress callback will be limited
-//     from triggering only once per period, in milliseconds (int).
-//
-// Returns a promise:
-//   - Resolves on success (void).
-//   - Rejected with an error if registering the callback fails.
-func (cft *ChannelsFileTransfer) RegisterReceivedProgressCallback(
-	_ js.Value, args []js.Value) any {
-	var (
-		fileIDBytes = utils.CopyBytesToGo(args[0])
-		progressCB  = &ftReceivedCallback{utils.WrapCB(args[1], "Callback")}
-		periodMS    = args[2].Int()
-	)
-
-	promiseFn := func(resolve, reject func(args ...any) js.Value) {
-		err := cft.api.RegisterReceivedProgressCallback(
-			fileIDBytes, progressCB, periodMS)
-		if err != nil {
-			reject(utils.JsTrace(err))
-		} else {
-			resolve()
-		}
-	}
-
-	return utils.CreatePromise(promiseFn)
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Callbacks                                                                  //
-////////////////////////////////////////////////////////////////////////////////
-
-// ftSentCallback wraps Javascript callbacks to adhere to the
-// [bindings.FtSentProgressCallback] interface.
-type ftSentCallback struct {
-	callback func(args ...any) js.Value
-}
-
-// Callback is called when the status of the sent file changes.
-//
-// Parameters:
-//   - payload - Returns the contents of the message. JSON of
-//     [bindings.Progress] (Uint8Array).
-//   - t - Returns a tracker that allows the lookup of the status of any file
-//     part. It is a Javascript object that matches the functions on
-//     [FilePartTracker].
-//   - err - Returns an error on failure (Error).
-
-// Callback is called when the progress on a sent file changes or an error
-// occurs in the transfer.
-//
-// The [ChFilePartTracker] can be used to look up the status of individual file
-// parts. Note, when completed == true, the [ChFilePartTracker] may be nil.
-//
-// Any error returned is fatal and the file must either be retried with
-// [ChannelsFileTransfer.RetryUpload] or canceled with
-// [ChannelsFileTransfer.CloseSend].
-//
-// This callback only indicates the status of the file transfer, not the status
-// of the file in the event model. Do NOT use this callback as an indicator of
-// when the file is available in the event model.
-//
-// Parameters:
-//   - payload - JSON of [bindings.FtSentProgress], which describes the progress
-//     of the current sent transfer.
-//   - fpt - File part tracker that allows the lookup of the status of
-//     individual file parts.
-//   - err - Fatal errors during sending.
-func (fsc *ftSentCallback) Callback(
-	payload []byte, t *bindings.ChFilePartTracker, err error) {
-	fsc.callback(utils.CopyBytesToJS(payload), newChFilePartTrackerJS(t),
-		utils.JsTrace(err))
-}
-
-// ftReceivedCallback wraps Javascript callbacks to adhere to the
-// [bindings.FtReceivedProgressCallback] interface.
-type ftReceivedCallback struct {
-	callback func(args ...any) js.Value
-}
-
-// Callback is called when
-// the progress on a received file changes or an error occurs in the transfer.
-//
-// The [ChFilePartTracker] can be used to look up the status of individual file
-// parts. Note, when completed == true, the [ChFilePartTracker] may be nil.
-//
-// This callback only indicates the status of the file transfer, not the status
-// of the file in the event model. Do NOT use this callback as an indicator of
-// when the file is available in the event model.
-//
-// Parameters:
-//   - payload - JSON of [bindings.FtReceivedProgress], which describes the
-//     progress of the current received transfer.
-//   - fpt - File part tracker that allows the lookup of the status of
-//     individual file parts.
-//   - err - Fatal errors during receiving.
-func (frc *ftReceivedCallback) Callback(
-	payload []byte, t *bindings.ChFilePartTracker, err error) {
-	frc.callback(utils.CopyBytesToJS(payload), newChFilePartTrackerJS(t),
-		utils.JsTrace(err))
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// File Part Tracker                                                          //
-////////////////////////////////////////////////////////////////////////////////
-
-// ChFilePartTracker wraps the [bindings.ChFilePartTracker] object so its
-// methods can be wrapped to be Javascript compatible.
-type ChFilePartTracker struct {
-	api *bindings.ChFilePartTracker
-}
-
-// newChFilePartTrackerJS creates a new Javascript compatible object
-// (map[string]any) that matches the [FilePartTracker] structure.
-func newChFilePartTrackerJS(api *bindings.ChFilePartTracker) map[string]any {
-	fpt := ChFilePartTracker{api}
-	ftMap := map[string]any{
-		"GetPartStatus": js.FuncOf(fpt.GetPartStatus),
-		"GetNumParts":   js.FuncOf(fpt.GetNumParts),
-	}
-
-	return ftMap
-}
-
-// GetPartStatus returns the status of the file part with the given part number.
-//
-// The possible values for the status are:
-//   - 0 < Part does not exist
-//   - 0 = unsent
-//   - 1 = arrived (sender has sent a part, and it has arrived)
-//   - 2 = received (receiver has received a part)
-//
-// Parameters:
-//   - args[0] - Index of part (int).
-//
-// Returns:
-//   - Part status (int).
-func (fpt *ChFilePartTracker) GetPartStatus(_ js.Value, args []js.Value) any {
-	return fpt.api.GetPartStatus(args[0].Int())
-}
-
-// GetNumParts returns the total number of file parts in the transfer.
-//
-// Returns:
-//   - Number of parts (int).
-func (fpt *ChFilePartTracker) GetNumParts(js.Value, []js.Value) any {
-	return fpt.api.GetNumParts()
-}
diff --git a/wasm/channelsFileTransfer_test.go b/wasm/channelsFileTransfer_test.go
deleted file mode 100644
index d697de63b3bb23049b7e933355a09eeb749955c1..0000000000000000000000000000000000000000
--- a/wasm/channelsFileTransfer_test.go
+++ /dev/null
@@ -1,98 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-// Copyright © 2022 xx foundation                                             //
-//                                                                            //
-// Use of this source code is governed by a license that can be found in the  //
-// LICENSE file.                                                              //
-////////////////////////////////////////////////////////////////////////////////
-
-//go:build js && wasm
-
-package wasm
-
-import (
-	"gitlab.com/elixxir/client/v4/bindings"
-	"reflect"
-	"testing"
-)
-
-// Tests that the map representing ChannelsFileTransfer returned by
-// newChannelsFileTransferJS contains all of the methods on ChannelsFileTransfer.
-func Test_newChannelsFileTransferJS(t *testing.T) {
-	cftType := reflect.TypeOf(&ChannelsFileTransfer{})
-
-	ft := newChannelsFileTransferJS(&bindings.ChannelsFileTransfer{})
-	if len(ft) != cftType.NumMethod() {
-		t.Errorf("ChannelsFileTransfer JS object does not have all methods."+
-			"\nexpected: %d\nreceived: %d", cftType.NumMethod(), len(ft))
-	}
-
-	for i := 0; i < cftType.NumMethod(); i++ {
-		method := cftType.Method(i)
-
-		if _, exists := ft[method.Name]; !exists {
-			t.Errorf("Method %s does not exist.", method.Name)
-		}
-	}
-}
-
-// Tests that ChannelsFileTransfer has all the methods that
-// [bindings.ChannelsFileTransfer] has.
-func Test_ChannelsFileTransferMethods(t *testing.T) {
-	cftType := reflect.TypeOf(&ChannelsFileTransfer{})
-	binCftType := reflect.TypeOf(&bindings.ChannelsFileTransfer{})
-
-	if binCftType.NumMethod() != cftType.NumMethod() {
-		t.Errorf("WASM ChannelsFileTransfer object does not have all methods "+
-			"from bindings.\nexpected: %d\nreceived: %d",
-			binCftType.NumMethod(), cftType.NumMethod())
-	}
-
-	for i := 0; i < binCftType.NumMethod(); i++ {
-		method := binCftType.Method(i)
-
-		if _, exists := cftType.MethodByName(method.Name); !exists {
-			t.Errorf("Method %s does not exist.", method.Name)
-		}
-	}
-}
-
-// Tests that the map representing ChFilePartTracker returned by
-// newChFilePartTrackerJS contains all of the methods on ChFilePartTracker.
-func Test_newChFilePartTrackerJS(t *testing.T) {
-	fptType := reflect.TypeOf(&FilePartTracker{})
-
-	fpt := newChFilePartTrackerJS(&bindings.ChFilePartTracker{})
-	if len(fpt) != fptType.NumMethod() {
-		t.Errorf("ChFilePartTracker JS object does not have all methods."+
-			"\nexpected: %d\nreceived: %d", fptType.NumMethod(), len(fpt))
-	}
-
-	for i := 0; i < fptType.NumMethod(); i++ {
-		method := fptType.Method(i)
-
-		if _, exists := fpt[method.Name]; !exists {
-			t.Errorf("Method %s does not exist.", method.Name)
-		}
-	}
-}
-
-// Tests that ChFilePartTracker has all the methods that
-// [bindings.ChFilePartTracker] has.
-func Test_ChFilePartTrackerMethods(t *testing.T) {
-	fptType := reflect.TypeOf(&ChFilePartTracker{})
-	binFptType := reflect.TypeOf(&bindings.ChFilePartTracker{})
-
-	if binFptType.NumMethod() != fptType.NumMethod() {
-		t.Errorf("WASM ChFilePartTracker object does not have all methods from "+
-			"bindings.\nexpected: %d\nreceived: %d",
-			binFptType.NumMethod(), fptType.NumMethod())
-	}
-
-	for i := 0; i < binFptType.NumMethod(); i++ {
-		method := binFptType.Method(i)
-
-		if _, exists := fptType.MethodByName(method.Name); !exists {
-			t.Errorf("Method %s does not exist.", method.Name)
-		}
-	}
-}
diff --git a/wasm/docs.go b/wasm/docs.go
index 5b8e7a6dced810bb861c14c45bc41e55fc2385ae..b2d6f4894014b15873b2649118e2af09a8cd7091 100644
--- a/wasm/docs.go
+++ b/wasm/docs.go
@@ -15,7 +15,6 @@ import (
 	"gitlab.com/elixxir/client/v4/auth"
 	"gitlab.com/elixxir/client/v4/catalog"
 	"gitlab.com/elixxir/client/v4/channels"
-	"gitlab.com/elixxir/client/v4/channelsFileTransfer"
 	"gitlab.com/elixxir/client/v4/cmix"
 	"gitlab.com/elixxir/client/v4/cmix/message"
 	"gitlab.com/elixxir/client/v4/connect"
@@ -70,6 +69,4 @@ var (
 	_ = broadcast.Channel{}
 	_ = netTime.Now
 	_ = ed25519.PublicKey{}
-	_ = channelsFileTransfer.Params{}
-	_ = fileTransfer.ID{}
 )