@proofgeist/fmdapi
Version:
FileMaker Data API client
82 lines • 2.52 kB
JavaScript
import { fmFetch } from '@proofgeist/fm-webviewer-fetch';
import { CreateResponse, DeleteResponse, GetResponse, LayoutMetadataResponse, RawFMResponse, UpdateResponse, } from '../client-types.js';
import { FileMakerError } from '../index.js';
import { Adapter, BaseRequest, CreateOptions, DeleteOptions, FindOptions, GetOptions, LayoutMetadataOptions, ListOptions, UpdateOptions, } from './core.js';
export class WebViewerAdapter {
scriptName;
constructor(options) {
this.scriptName = options.scriptName;
}
request = async (params) => {
const { action = 'read', layout, body } = params;
const resp = await fmFetch(this.scriptName, {
...body,
layouts: layout,
action,
version: 'vLatest',
});
if (resp.messages?.[0].code !== '0') {
throw new FileMakerError(resp?.messages?.[0].code ?? '500', `Filemaker Data API failed with (${resp.messages?.[0].code}): ${JSON.stringify(resp, null, 2)}`);
}
return resp.response;
};
list = async (opts) => {
const { data, layout } = opts;
const resp = await this.request({
body: data,
layout,
});
return resp;
};
get = async (opts) => {
const { data, layout } = opts;
const resp = await this.request({
body: data,
layout,
});
return resp;
};
find = async (opts) => {
const { data, layout } = opts;
const resp = await this.request({
body: data,
layout,
});
return resp;
};
create = async (opts) => {
const { data, layout } = opts;
const resp = await this.request({
action: 'create',
body: data,
layout,
});
return resp;
};
update = async (opts) => {
const { data, layout } = opts;
const resp = await this.request({
action: 'update',
layout,
body: data,
});
return resp;
};
delete = async (opts) => {
const { data, layout } = opts;
const resp = await this.request({
action: 'delete',
body: data,
layout,
});
return resp;
};
layoutMetadata = async (opts) => {
return (await this.request({
action: 'metaData',
layout: opts.layout,
body: {},
}));
};
}
//# sourceMappingURL=wv.js.map