@asymmetric-effort/specifyjs 0.0.6
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/LICENSE +21 -0
- package/dist/specifyjs-client.cjs.js +2 -0
- package/dist/specifyjs-client.cjs.js.map +1 -0
- package/dist/specifyjs-client.d.ts +159 -0
- package/dist/specifyjs-client.esm.js +2 -0
- package/dist/specifyjs-client.esm.js.map +1 -0
- package/dist/specifyjs-components.cjs.js +2 -0
- package/dist/specifyjs-components.cjs.js.map +1 -0
- package/dist/specifyjs-components.d.ts +2094 -0
- package/dist/specifyjs-components.esm.js +2 -0
- package/dist/specifyjs-components.esm.js.map +1 -0
- package/dist/specifyjs-dom.cjs.js +2 -0
- package/dist/specifyjs-dom.cjs.js.map +1 -0
- package/dist/specifyjs-dom.d.ts +103 -0
- package/dist/specifyjs-dom.esm.js +2 -0
- package/dist/specifyjs-dom.esm.js.map +1 -0
- package/dist/specifyjs-jsx-dev-runtime.cjs.js +2 -0
- package/dist/specifyjs-jsx-dev-runtime.cjs.js.map +1 -0
- package/dist/specifyjs-jsx-dev-runtime.esm.js +2 -0
- package/dist/specifyjs-jsx-dev-runtime.esm.js.map +1 -0
- package/dist/specifyjs-jsx-runtime.cjs.js +2 -0
- package/dist/specifyjs-jsx-runtime.cjs.js.map +1 -0
- package/dist/specifyjs-jsx-runtime.esm.js +2 -0
- package/dist/specifyjs-jsx-runtime.esm.js.map +1 -0
- package/dist/specifyjs-server.cjs.js +2 -0
- package/dist/specifyjs-server.cjs.js.map +1 -0
- package/dist/specifyjs-server.d.ts +132 -0
- package/dist/specifyjs-server.esm.js +2 -0
- package/dist/specifyjs-server.esm.js.map +1 -0
- package/dist/specifyjs-telemetry.cjs.js +2 -0
- package/dist/specifyjs-telemetry.cjs.js.map +1 -0
- package/dist/specifyjs-telemetry.d.ts +165 -0
- package/dist/specifyjs-telemetry.esm.js +2 -0
- package/dist/specifyjs-telemetry.esm.js.map +1 -0
- package/dist/specifyjs.cjs.js +2 -0
- package/dist/specifyjs.cjs.js.map +1 -0
- package/dist/specifyjs.d.ts +577 -0
- package/dist/specifyjs.esm.js +2 -0
- package/dist/specifyjs.esm.js.map +1 -0
- package/package.json +113 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
(c) 2025-2026 Asymmetric Effort, LLC. MIT LICENSE
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";function e(){throw new Error("Invalid hook call. Hooks can only be called inside the body of a function component.")}function t(t){return e().useState(t)}function r(t,r){return e().useEffect(t,r)}function n(t,r){return e().useCallback(t,r)}function o(t){return e().useRef(t)}function s(e){if(e.startsWith("//"))throw new Error(`[SpecifyJS] Protocol-relative URL rejected: "${e}". Use an explicit https:// prefix.`);if(e.startsWith("/")||e.startsWith("./")||e.startsWith("../"))return;if(e.startsWith("data:"))return;let t;try{t=new URL(e,"undefined"!=typeof window?window.location.href:void 0)}catch{return}if("https:"!==t.protocol&&"localhost"!==t.hostname&&"127.0.0.1"!==t.hostname)throw new Error(`[SpecifyJS] Insecure URL rejected: "${e}". SpecifyJS enforces HTTPS-only for all network requests. Use https:// or a relative URL. Localhost URLs are allowed for development.`)}class a extends Error{constructor(e,t,r,n,o){super(e),this.name="RestError",this.status=t,this.statusText=r,this.data=n,this.config=o}}function c(e,t){return(e.endsWith("/")?e.slice(0,-1):e)+(t.startsWith("/")?t:"/"+t)}function i(e){const t=[];let r=e>>>0;for(;r>127;)t.push(127&r|128),r>>>=7;return t.push(127&r),t}function u(e,t){let r=0,n=0,o=t;for(;o<e.length;){const t=e[o];if(r|=(127&t)<<n,o++,!(128&t))return[r>>>0,o];if(n+=7,n>=35)throw new Error("Varint too long")}throw new Error("Unexpected end of data while decoding varint")}function l(e){switch(e){case"int32":case"uint32":case"bool":case"enum":return 0;case"float64":return 1;case"string":case"bytes":return 2}}function f(e,t){return i(e<<3|t)}function d(e,t){switch(e){case"int32":return i(0|t);case"uint32":case"enum":return i(t>>>0);case"bool":return i(t?1:0);case"float64":{const e=new ArrayBuffer(8);return new DataView(e).setFloat64(0,t,!0),Array.from(new Uint8Array(e))}case"string":{const e=(new TextEncoder).encode(t);return[...i(e.length),...e]}case"bytes":{const e=t;return[...i(e.length),...e]}}}function h(e,t,r,n){switch(t){case 0:{const[t,o]=u(r,n);switch(e){case"bool":return[0!==t,o];case"int32":return[0|t,o];case"uint32":case"enum":return[t>>>0,o];default:return[t,o]}}case 1:{if(n+8>r.length)throw new Error("Unexpected end of data while decoding 64-bit value");const e=new ArrayBuffer(8),t=new Uint8Array(e);for(let e=0;e<8;e++)t[e]=r[n+e]??0;return[new DataView(e).getFloat64(0,!0),n+8]}case 2:{const[t,o]=u(r,n);if(o+t>r.length)throw new Error("Unexpected end of data while decoding length-delimited value");const s=r.slice(o,o+t);return"string"===e?[(new TextDecoder).decode(s),o+t]:[s,o+t]}default:throw new Error(`Unknown wire type: ${t}`)}}function p(e,t,r){switch(e){case 0:{const[,e]=u(t,r);return e}case 1:return r+8;case 2:{const[e,n]=u(t,r);return n+e}default:throw new Error(`Cannot skip unknown wire type: ${e}`)}}function w(e){if(e.length<5)throw new Error("gRPC-Web frame too short");const t=e[0]??0,r=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(1,!1);if(e.length<5+r)throw new Error("gRPC-Web frame data incomplete");return[t,e.slice(5,5+r),5+r]}exports.RestError=a,exports.createGraphQLClient=function(e){const{url:t,headers:r,credentials:n,cache:o=!1}=e,a=new Map;async function c(e,o){const a={"Content-Type":"application/json",...r},c=JSON.stringify({query:e,variables:o});s(t);const i=await fetch(t,{method:"POST",headers:a,credentials:n,body:c});if(!i.ok)throw new Error(`GraphQL request failed with status ${i.status}`);const u=await i.json();return{data:u.data??null,errors:u.errors??null,...void 0!==u.extensions?{extensions:u.extensions}:{}}}return{async query(e,t){if(o){const r=function(e,t){return JSON.stringify({query:e,variables:t})}(e,t),n=a.get(r);if(n)return n;const o=await c(e,t);if(a.size>=100){const e=a.keys().next().value;void 0!==e&&a.delete(e)}return a.set(r,o),o}return c(e,t)},mutate:async(e,t)=>c(e,t),clearCache(){a.clear()},invalidate(e){for(const t of a.keys())try{JSON.parse(t).query===e&&a.delete(t)}catch{}}}},exports.createGrpcWebClient=function(e){const{baseURL:t,headers:r}=e;return{unary:async function(e,n,o,a,c){const i=function(e,t=0){const r=new Uint8Array(5+e.length);return r[0]=t,new DataView(r.buffer,r.byteOffset,r.byteLength).setUint32(1,e.length,!1),r.set(e,5),r}(o.encode(c)),u=`${t.replace(/\/+$/,"")}/${e}/${n}`,l={"Content-Type":"application/grpc-web+proto",Accept:"application/grpc-web+proto","X-Grpc-Web":"1",...r};s(u);const f=await fetch(u,{method:"POST",headers:l,body:i.buffer});if(!f.ok)throw new Error(`gRPC-Web request failed: ${f.status} ${f.statusText}`);const d=new Uint8Array(await f.arrayBuffer());let h=0;for(;h<d.length;){const[e,t,r]=w(d.subarray(h));if(h+=r,!(128&e))return a.decode(t)}throw new Error("No data frame found in gRPC-Web response")}}},exports.createRestClient=function(e){const{baseURL:t,headers:r={},timeout:n,interceptors:o={}}=e,i=o.request??[],u=o.response??[],l=o.error??[];async function f(e,o,f,d){let h,p,w={url:c(t,o),method:e,headers:{...r,...d?.headers??{}},body:f,signal:d?.signal,timeout:d?.timeout??n};null==f||w.headers["Content-Type"]||(w.headers["Content-Type"]="application/json");for(const e of i)w=await e(w);if(w.timeout&&w.timeout>0&&(p=new AbortController,h=setTimeout(()=>{p.abort()},w.timeout),w.signal)){const e=w.signal;e.aborted?p.abort():e.addEventListener("abort",()=>{p.abort()})}const g=p?p.signal:w.signal,y={method:w.method,headers:w.headers,signal:g};let b,m;null!=f&&(y.body=JSON.stringify(f));try{s(w.url),b=await fetch(w.url,y)}catch(e){void 0!==h&&clearTimeout(h);const t=e instanceof DOMException&&"AbortError"===e.name?`Request timeout after ${w.timeout}ms`:e instanceof Error?e.message:"Network error";let r=new a(t,0,"",null,w);for(const e of l)r=await e(r);throw r}if(void 0!==h&&clearTimeout(h),(b.headers.get("content-type")??"").includes("application/json"))m=await b.json();else{const e=await b.text();try{m=JSON.parse(e)}catch{m=e}}const E=function(e){const t={};return e.forEach((e,r)=>{t[r]=e}),t}(b.headers);if(!b.ok){let e=new a(`Request failed with status ${b.status}`,b.status,b.statusText,m,w);for(const t of l)e=await t(e);throw e}let x={data:m,status:b.status,headers:E,ok:b.ok};for(const e of u)x=e(x);return x}return{get:(e,t)=>f("GET",e,void 0,t),post:(e,t,r)=>f("POST",e,t,r),put:(e,t,r)=>f("PUT",e,t,r),patch:(e,t,r)=>f("PATCH",e,t,r),delete:(e,t)=>f("DELETE",e,void 0,t)}},exports.defineMessage=function(e,t){const r=new Map;for(const[e,n]of Object.entries(t))r.set(n.tag,{fieldName:e,descriptor:n});return{name:e,fields:t,encode:function(e){const r=[],n=e;for(const[e,o]of Object.entries(t)){const t=n[e];if(null==t)continue;const s=l(o.type);if(o.repeated){const e=t;for(const t of e)r.push(...f(o.tag,s)),r.push(...d(o.type,t))}else r.push(...f(o.tag,s)),r.push(...d(o.type,t))}return new Uint8Array(r)},decode:function(e){const n={};for(const[e,r]of Object.entries(t))r.repeated&&(n[e]=[]);let o=0;for(;o<e.length;){const[t,s]=u(e,o),a=t>>>3,c=7&t;o=s;const i=r.get(a);if(!i){o=p(c,e,o);continue}const[l,f]=h(i.descriptor.type,c,e,o);o=f,i.descriptor.repeated?n[i.fieldName].push(l):n[i.fieldName]=l}return n}}},exports.gql=function(e,...t){let r="";for(let n=0;n<e.length;n++)if(r+=e[n],n<t.length){const e=String(t[n]);/[{}():]/.test(e)&&"undefined"!=typeof console&&console.warn("[SpecifyJS] gql: Interpolated value contains GraphQL metacharacters. Use variables parameter instead of string interpolation to prevent injection."),r+=e}return r.replace(/\s+/g," ").trim()},exports.useMutation=function(e,r){const[o,s]=t(null),[a,c]=t(!1),[i,u]=t(null);return[n((...t)=>(async t=>{c(!0),u(null);try{const n=await e.mutate(r,t);return s(n.data),u(n.errors),c(!1),n}catch(e){const t=[{message:e instanceof Error?e.message:String(e)}];return u(t),c(!1),{data:null,errors:t,extensions:void 0}}})(t[0]),[e,r]),{data:o,loading:a,error:i}]},exports.useProto=function(e,s,a,c,i,u,l){const[f,d]=t(null),[h,p]=t(!1),[w,g]=t(null),y=o(!0),b=o(u);b.current=u;const m=!1!==l?.enabled,E=n(()=>{m&&(p(!0),g(null),e.unary(s,a,c,i,b.current).then(e=>{y.current&&(d(e),p(!1))}).catch(e=>{y.current&&(g(e instanceof Error?e:new Error(String(e))),p(!1))}))},[e,s,a,c,i,m]);return r(()=>(y.current=!0,E(),()=>{y.current=!1}),[E]),{data:f,loading:h,error:w,refetch:E}},exports.useQuery=function(e,s,a){const c=a?.variables,i=a?.deps,u=a?.enabled??!0,[l,f]=t(null),[d,h]=t(u),[p,w]=t(null),g=o(0),y=n(()=>{if(!u)return;const t=++g.current;h(!0),w(null),e.query(s,c).then(e=>{g.current===t&&(f(e.data),w(e.errors),h(!1))}).catch(e=>{g.current===t&&(w([{message:e instanceof Error?e.message:String(e)}]),h(!1))})},[e,s,c,u]);return r(()=>{y()},i?[y,...i]:[y]),{data:l,loading:d,error:p,refetch:y}},exports.useRest=function(e,s,c){const i=c?.method??"GET",u=c?.body,l=c?.deps??[],f=c?.enabled??!0,[d,h]=t(null),[p,w]=t(f),[g,y]=t(null),b=o(null),m=o(!0),E=n(()=>{if(!f)return void w(!1);b.current&&b.current.abort();const t=new AbortController;b.current=t,w(!0),y(null);const r={signal:t.signal};let n;const o=i.toUpperCase();n="POST"===o?e.post(s,u,r):"PUT"===o?e.put(s,u,r):"PATCH"===o?e.patch(s,u,r):"DELETE"===o?e.delete(s,r):e.get(s,r),n.then(e=>{m.current&&!t.signal.aborted&&(h(e.data),w(!1))}).catch(e=>{m.current&&!t.signal.aborted&&(y(e instanceof a?e:new a(e instanceof Error?e.message:"Unknown error",0,"",null,{url:s,method:o,headers:{}})),w(!1))})},[e,s,i,u,f,...l]);return r(()=>(m.current=!0,E(),()=>{m.current=!1,b.current&&b.current.abort()}),[E]),{data:d,loading:p,error:g,refetch:n(()=>{E()},[E])}};
|
|
2
|
+
//# sourceMappingURL=specifyjs-client.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"specifyjs-client.cjs.js","sources":["../../src/hooks/index.ts","../../src/shared/secure-fetch.ts","../../src/client/rest.ts","../../src/client/protobuf.ts","../../src/client/graphql.ts"],"sourcesContent":[null,null,null,null,null],"names":["resolveDispatcher","Error","useState","initialState","useEffect","create","deps","useCallback","callback","useRef","initialValue","assertSecureUrl","url","startsWith","parsed","URL","window","location","href","undefined","protocol","hostname","RestError","constructor","message","status","statusText","data","config","super","this","name","buildURL","baseURL","path","endsWith","slice","encodeVarint","value","bytes","v","push","decodeVarint","offset","result","shift","pos","length","b","wireTypeFor","type","encodeFieldKey","tag","wireType","encodeFieldValue","buf","ArrayBuffer","DataView","setFloat64","Array","from","Uint8Array","encoded","TextEncoder","encode","decodeFieldValue","val","newOffset","view","i","getFloat64","len","dataStart","TextDecoder","decode","skipField","next","decodeGrpcWebFrame","flags","buffer","byteOffset","byteLength","getUint32","headers","configHeaders","credentials","cache","cacheEnabled","responseCache","Map","async","execute","query","variables","reqHeaders","body","JSON","stringify","response","fetch","method","ok","json","errors","extensions","key","buildCacheKey","cached","get","size","oldest","keys","delete","set","mutation","clearCache","clear","invalidate","parse","extraHeaders","unary","service","reqType","resType","request","frame","setUint32","encodeGrpcWebFrame","replace","hdrs","Accept","responseBytes","arrayBuffer","consumed","subarray","defaultHeaders","timeout","defaultTimeout","interceptors","requestInterceptors","responseInterceptors","errorInterceptors","error","opts","timeoutId","controller","reqConfig","signal","interceptor","AbortController","setTimeout","abort","externalSignal","aborted","addEventListener","fetchSignal","fetchInit","err","clearTimeout","DOMException","restError","includes","text","parsedHeaders","forEach","parseResponseHeaders","restResponse","post","put","patch","fields","tagToField","fieldName","descriptor","Object","entries","obj","out","record","wt","repeated","arr","item","keyVarint","entry","nextOffset","strings","values","String","test","console","warn","trim","client","setData","loading","setLoading","setError","args","mutate","mutateFn","mountedRef","requestRef","current","enabled","refetch","then","res","catch","fetchIdRef","fetchData","id","controllerRef","requestOpts","promise","upperMethod","toUpperCase"],"mappings":"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"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
interface RestClientConfig {
|
|
2
|
+
baseURL: string;
|
|
3
|
+
headers?: Record<string, string>;
|
|
4
|
+
timeout?: number;
|
|
5
|
+
interceptors?: {
|
|
6
|
+
request?: RequestInterceptor[];
|
|
7
|
+
response?: ResponseInterceptor[];
|
|
8
|
+
error?: ErrorInterceptor[];
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
interface RequestConfig {
|
|
12
|
+
url: string;
|
|
13
|
+
method: string;
|
|
14
|
+
headers: Record<string, string>;
|
|
15
|
+
body?: unknown;
|
|
16
|
+
signal?: AbortSignal;
|
|
17
|
+
timeout?: number;
|
|
18
|
+
}
|
|
19
|
+
interface RestResponse<T> {
|
|
20
|
+
data: T;
|
|
21
|
+
status: number;
|
|
22
|
+
headers: Record<string, string>;
|
|
23
|
+
ok: boolean;
|
|
24
|
+
}
|
|
25
|
+
type RequestInterceptor = (config: RequestConfig) => RequestConfig | Promise<RequestConfig>;
|
|
26
|
+
type ResponseInterceptor = (response: RestResponse<unknown>) => RestResponse<unknown>;
|
|
27
|
+
type ErrorInterceptor = (error: RestError) => RestError | Promise<RestError>;
|
|
28
|
+
interface RequestOptions {
|
|
29
|
+
headers?: Record<string, string>;
|
|
30
|
+
signal?: AbortSignal;
|
|
31
|
+
timeout?: number;
|
|
32
|
+
}
|
|
33
|
+
interface RestClient {
|
|
34
|
+
get<T>(path: string, opts?: RequestOptions): Promise<RestResponse<T>>;
|
|
35
|
+
post<T>(path: string, body?: unknown, opts?: RequestOptions): Promise<RestResponse<T>>;
|
|
36
|
+
put<T>(path: string, body?: unknown, opts?: RequestOptions): Promise<RestResponse<T>>;
|
|
37
|
+
patch<T>(path: string, body?: unknown, opts?: RequestOptions): Promise<RestResponse<T>>;
|
|
38
|
+
delete<T>(path: string, opts?: RequestOptions): Promise<RestResponse<T>>;
|
|
39
|
+
}
|
|
40
|
+
declare class RestError extends Error {
|
|
41
|
+
readonly status: number;
|
|
42
|
+
readonly statusText: string;
|
|
43
|
+
readonly data: unknown;
|
|
44
|
+
readonly config: RequestConfig;
|
|
45
|
+
constructor(message: string, status: number, statusText: string, data: unknown, config: RequestConfig);
|
|
46
|
+
}
|
|
47
|
+
declare function createRestClient(config: RestClientConfig): RestClient;
|
|
48
|
+
interface UseRestOptions {
|
|
49
|
+
method?: string;
|
|
50
|
+
body?: unknown;
|
|
51
|
+
deps?: readonly unknown[];
|
|
52
|
+
enabled?: boolean;
|
|
53
|
+
}
|
|
54
|
+
interface UseRestResult<T> {
|
|
55
|
+
data: T | null;
|
|
56
|
+
loading: boolean;
|
|
57
|
+
error: RestError | null;
|
|
58
|
+
refetch: () => void;
|
|
59
|
+
}
|
|
60
|
+
declare function useRest<T>(client: RestClient, path: string, opts?: UseRestOptions): UseRestResult<T>;
|
|
61
|
+
|
|
62
|
+
type FieldType = 'int32' | 'uint32' | 'string' | 'bool' | 'bytes' | 'float64' | 'enum';
|
|
63
|
+
interface FieldDescriptor {
|
|
64
|
+
tag: number;
|
|
65
|
+
type: FieldType;
|
|
66
|
+
repeated?: boolean;
|
|
67
|
+
}
|
|
68
|
+
type FieldMap = Record<string, FieldDescriptor>;
|
|
69
|
+
interface MessageType<T> {
|
|
70
|
+
name: string;
|
|
71
|
+
fields: FieldMap;
|
|
72
|
+
encode(obj: T): Uint8Array;
|
|
73
|
+
decode(bytes: Uint8Array): T;
|
|
74
|
+
}
|
|
75
|
+
interface GrpcWebClientConfig {
|
|
76
|
+
baseURL: string;
|
|
77
|
+
headers?: Record<string, string>;
|
|
78
|
+
}
|
|
79
|
+
interface GrpcWebClient {
|
|
80
|
+
unary<Req, Res>(service: string, method: string, reqType: MessageType<Req>, resType: MessageType<Res>, request: Req): Promise<Res>;
|
|
81
|
+
}
|
|
82
|
+
interface UseProtoResult<T> {
|
|
83
|
+
data: T | null;
|
|
84
|
+
loading: boolean;
|
|
85
|
+
error: Error | null;
|
|
86
|
+
refetch: () => void;
|
|
87
|
+
}
|
|
88
|
+
declare function defineMessage<T>(name: string, fields: FieldMap): MessageType<T>;
|
|
89
|
+
declare function createGrpcWebClient(config: GrpcWebClientConfig): GrpcWebClient;
|
|
90
|
+
declare function useProto<Req, Res>(client: GrpcWebClient, service: string, method: string, reqType: MessageType<Req>, resType: MessageType<Res>, request: Req, opts?: {
|
|
91
|
+
enabled?: boolean;
|
|
92
|
+
}): UseProtoResult<Res>;
|
|
93
|
+
|
|
94
|
+
interface GraphQLError {
|
|
95
|
+
message: string;
|
|
96
|
+
locations?: {
|
|
97
|
+
line: number;
|
|
98
|
+
column: number;
|
|
99
|
+
}[];
|
|
100
|
+
path?: (string | number)[];
|
|
101
|
+
}
|
|
102
|
+
interface GraphQLResponse<T> {
|
|
103
|
+
data: T | null;
|
|
104
|
+
errors: GraphQLError[] | null;
|
|
105
|
+
extensions?: Record<string, unknown>;
|
|
106
|
+
}
|
|
107
|
+
interface GraphQLClientConfig {
|
|
108
|
+
url: string;
|
|
109
|
+
headers?: Record<string, string>;
|
|
110
|
+
credentials?: RequestCredentials;
|
|
111
|
+
cache?: boolean;
|
|
112
|
+
}
|
|
113
|
+
interface GraphQLClient {
|
|
114
|
+
query<T>(query: string, variables?: Record<string, unknown>): Promise<GraphQLResponse<T>>;
|
|
115
|
+
mutate<T>(mutation: string, variables?: Record<string, unknown>): Promise<GraphQLResponse<T>>;
|
|
116
|
+
clearCache(): void;
|
|
117
|
+
invalidate(query: string): void;
|
|
118
|
+
}
|
|
119
|
+
interface UseQueryOptions {
|
|
120
|
+
variables?: Record<string, unknown>;
|
|
121
|
+
deps?: readonly unknown[];
|
|
122
|
+
enabled?: boolean;
|
|
123
|
+
cache?: boolean;
|
|
124
|
+
}
|
|
125
|
+
interface UseQueryResult<T> {
|
|
126
|
+
data: T | null;
|
|
127
|
+
loading: boolean;
|
|
128
|
+
error: GraphQLError[] | null;
|
|
129
|
+
refetch: () => void;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Tagged template literal for GraphQL queries.
|
|
133
|
+
* Returns the query string as-is. Provides editor syntax highlighting support.
|
|
134
|
+
*/
|
|
135
|
+
declare function gql(strings: TemplateStringsArray, ...values: unknown[]): string;
|
|
136
|
+
/**
|
|
137
|
+
* Factory function that creates a GraphQL client instance.
|
|
138
|
+
*/
|
|
139
|
+
declare function createGraphQLClient(config: GraphQLClientConfig): GraphQLClient;
|
|
140
|
+
/**
|
|
141
|
+
* Hook for executing GraphQL queries with automatic fetching.
|
|
142
|
+
* Auto-fetches on mount and when deps change.
|
|
143
|
+
*/
|
|
144
|
+
declare function useQuery<T>(client: GraphQLClient, query: string, opts?: UseQueryOptions): UseQueryResult<T>;
|
|
145
|
+
/**
|
|
146
|
+
* Hook for executing GraphQL mutations.
|
|
147
|
+
* Does not auto-fire; only executes on explicit call.
|
|
148
|
+
*/
|
|
149
|
+
declare function useMutation<T>(client: GraphQLClient, mutation: string): [
|
|
150
|
+
(variables?: Record<string, unknown>) => Promise<GraphQLResponse<T>>,
|
|
151
|
+
{
|
|
152
|
+
data: T | null;
|
|
153
|
+
loading: boolean;
|
|
154
|
+
error: GraphQLError[] | null;
|
|
155
|
+
}
|
|
156
|
+
];
|
|
157
|
+
|
|
158
|
+
export { RestError, createGraphQLClient, createGrpcWebClient, createRestClient, defineMessage, gql, useMutation, useProto, useQuery, useRest };
|
|
159
|
+
export type { GraphQLClient, GraphQLClientConfig, GraphQLError, GraphQLResponse, GrpcWebClient, MessageType, RequestConfig, RequestInterceptor, ResponseInterceptor, RestClient, RestClientConfig, RestResponse };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(){throw new Error("Invalid hook call. Hooks can only be called inside the body of a function component.")}function t(t){return e().useState(t)}function n(t,n){return e().useEffect(t,n)}function r(t,n){return e().useCallback(t,n)}function o(t){return e().useRef(t)}function s(e){if(e.startsWith("//"))throw new Error(`[SpecifyJS] Protocol-relative URL rejected: "${e}". Use an explicit https:// prefix.`);if(e.startsWith("/")||e.startsWith("./")||e.startsWith("../"))return;if(e.startsWith("data:"))return;let t;try{t=new URL(e,"undefined"!=typeof window?window.location.href:void 0)}catch{return}if("https:"!==t.protocol&&"localhost"!==t.hostname&&"127.0.0.1"!==t.hostname)throw new Error(`[SpecifyJS] Insecure URL rejected: "${e}". SpecifyJS enforces HTTPS-only for all network requests. Use https:// or a relative URL. Localhost URLs are allowed for development.`)}class a extends Error{constructor(e,t,n,r,o){super(e),this.name="RestError",this.status=t,this.statusText=n,this.data=r,this.config=o}}function c(e,t){return(e.endsWith("/")?e.slice(0,-1):e)+(t.startsWith("/")?t:"/"+t)}function i(e){const{baseURL:t,headers:n={},timeout:r,interceptors:o={}}=e,i=o.request??[],u=o.response??[],l=o.error??[];async function f(e,o,f,d){let h,w,p={url:c(t,o),method:e,headers:{...n,...d?.headers??{}},body:f,signal:d?.signal,timeout:d?.timeout??r};null==f||p.headers["Content-Type"]||(p.headers["Content-Type"]="application/json");for(const e of i)p=await e(p);if(p.timeout&&p.timeout>0&&(w=new AbortController,h=setTimeout(()=>{w.abort()},p.timeout),p.signal)){const e=p.signal;e.aborted?w.abort():e.addEventListener("abort",()=>{w.abort()})}const g=w?w.signal:p.signal,y={method:p.method,headers:p.headers,signal:g};let b,m;null!=f&&(y.body=JSON.stringify(f));try{s(p.url),b=await fetch(p.url,y)}catch(e){void 0!==h&&clearTimeout(h);const t=e instanceof DOMException&&"AbortError"===e.name?`Request timeout after ${p.timeout}ms`:e instanceof Error?e.message:"Network error";let n=new a(t,0,"",null,p);for(const e of l)n=await e(n);throw n}if(void 0!==h&&clearTimeout(h),(b.headers.get("content-type")??"").includes("application/json"))m=await b.json();else{const e=await b.text();try{m=JSON.parse(e)}catch{m=e}}const E=function(e){const t={};return e.forEach((e,n)=>{t[n]=e}),t}(b.headers);if(!b.ok){let e=new a(`Request failed with status ${b.status}`,b.status,b.statusText,m,p);for(const t of l)e=await t(e);throw e}let T={data:m,status:b.status,headers:E,ok:b.ok};for(const e of u)T=e(T);return T}return{get:(e,t)=>f("GET",e,void 0,t),post:(e,t,n)=>f("POST",e,t,n),put:(e,t,n)=>f("PUT",e,t,n),patch:(e,t,n)=>f("PATCH",e,t,n),delete:(e,t)=>f("DELETE",e,void 0,t)}}function u(e,s,c){const i=c?.method??"GET",u=c?.body,l=c?.deps??[],f=c?.enabled??!0,[d,h]=t(null),[w,p]=t(f),[g,y]=t(null),b=o(null),m=o(!0),E=r(()=>{if(!f)return void p(!1);b.current&&b.current.abort();const t=new AbortController;b.current=t,p(!0),y(null);const n={signal:t.signal};let r;const o=i.toUpperCase();r="POST"===o?e.post(s,u,n):"PUT"===o?e.put(s,u,n):"PATCH"===o?e.patch(s,u,n):"DELETE"===o?e.delete(s,n):e.get(s,n),r.then(e=>{m.current&&!t.signal.aborted&&(h(e.data),p(!1))}).catch(e=>{m.current&&!t.signal.aborted&&(y(e instanceof a?e:new a(e instanceof Error?e.message:"Unknown error",0,"",null,{url:s,method:o,headers:{}})),p(!1))})},[e,s,i,u,f,...l]);return n(()=>(m.current=!0,E(),()=>{m.current=!1,b.current&&b.current.abort()}),[E]),{data:d,loading:w,error:g,refetch:r(()=>{E()},[E])}}function l(e){const t=[];let n=e>>>0;for(;n>127;)t.push(127&n|128),n>>>=7;return t.push(127&n),t}function f(e,t){let n=0,r=0,o=t;for(;o<e.length;){const t=e[o];if(n|=(127&t)<<r,o++,!(128&t))return[n>>>0,o];if(r+=7,r>=35)throw new Error("Varint too long")}throw new Error("Unexpected end of data while decoding varint")}function d(e){switch(e){case"int32":case"uint32":case"bool":case"enum":return 0;case"float64":return 1;case"string":case"bytes":return 2}}function h(e,t){return l(e<<3|t)}function w(e,t){switch(e){case"int32":return l(0|t);case"uint32":case"enum":return l(t>>>0);case"bool":return l(t?1:0);case"float64":{const e=new ArrayBuffer(8);return new DataView(e).setFloat64(0,t,!0),Array.from(new Uint8Array(e))}case"string":{const e=(new TextEncoder).encode(t);return[...l(e.length),...e]}case"bytes":{const e=t;return[...l(e.length),...e]}}}function p(e,t,n,r){switch(t){case 0:{const[t,o]=f(n,r);switch(e){case"bool":return[0!==t,o];case"int32":return[0|t,o];case"uint32":case"enum":return[t>>>0,o];default:return[t,o]}}case 1:{if(r+8>n.length)throw new Error("Unexpected end of data while decoding 64-bit value");const e=new ArrayBuffer(8),t=new Uint8Array(e);for(let e=0;e<8;e++)t[e]=n[r+e]??0;return[new DataView(e).getFloat64(0,!0),r+8]}case 2:{const[t,o]=f(n,r);if(o+t>n.length)throw new Error("Unexpected end of data while decoding length-delimited value");const s=n.slice(o,o+t);return"string"===e?[(new TextDecoder).decode(s),o+t]:[s,o+t]}default:throw new Error(`Unknown wire type: ${t}`)}}function g(e,t){const n=new Map;for(const[e,r]of Object.entries(t))n.set(r.tag,{fieldName:e,descriptor:r});return{name:e,fields:t,encode:function(e){const n=[],r=e;for(const[e,o]of Object.entries(t)){const t=r[e];if(null==t)continue;const s=d(o.type);if(o.repeated){const e=t;for(const t of e)n.push(...h(o.tag,s)),n.push(...w(o.type,t))}else n.push(...h(o.tag,s)),n.push(...w(o.type,t))}return new Uint8Array(n)},decode:function(e){const r={};for(const[e,n]of Object.entries(t))n.repeated&&(r[e]=[]);let o=0;for(;o<e.length;){const[t,s]=f(e,o),a=t>>>3,c=7&t;o=s;const i=n.get(a);if(!i){o=y(c,e,o);continue}const[u,l]=p(i.descriptor.type,c,e,o);o=l,i.descriptor.repeated?r[i.fieldName].push(u):r[i.fieldName]=u}return r}}}function y(e,t,n){switch(e){case 0:{const[,e]=f(t,n);return e}case 1:return n+8;case 2:{const[e,r]=f(t,n);return r+e}default:throw new Error(`Cannot skip unknown wire type: ${e}`)}}function b(e){if(e.length<5)throw new Error("gRPC-Web frame too short");const t=e[0]??0,n=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(1,!1);if(e.length<5+n)throw new Error("gRPC-Web frame data incomplete");return[t,e.slice(5,5+n),5+n]}function m(e){const{baseURL:t,headers:n}=e;return{unary:async function(e,r,o,a,c){const i=function(e,t=0){const n=new Uint8Array(5+e.length);return n[0]=t,new DataView(n.buffer,n.byteOffset,n.byteLength).setUint32(1,e.length,!1),n.set(e,5),n}(o.encode(c)),u=`${t.replace(/\/+$/,"")}/${e}/${r}`,l={"Content-Type":"application/grpc-web+proto",Accept:"application/grpc-web+proto","X-Grpc-Web":"1",...n};s(u);const f=await fetch(u,{method:"POST",headers:l,body:i.buffer});if(!f.ok)throw new Error(`gRPC-Web request failed: ${f.status} ${f.statusText}`);const d=new Uint8Array(await f.arrayBuffer());let h=0;for(;h<d.length;){const[e,t,n]=b(d.subarray(h));if(h+=n,!(128&e))return a.decode(t)}throw new Error("No data frame found in gRPC-Web response")}}}function E(e,s,a,c,i,u,l){const[f,d]=t(null),[h,w]=t(!1),[p,g]=t(null),y=o(!0),b=o(u);b.current=u;const m=!1!==l?.enabled,E=r(()=>{m&&(w(!0),g(null),e.unary(s,a,c,i,b.current).then(e=>{y.current&&(d(e),w(!1))}).catch(e=>{y.current&&(g(e instanceof Error?e:new Error(String(e))),w(!1))}))},[e,s,a,c,i,m]);return n(()=>(y.current=!0,E(),()=>{y.current=!1}),[E]),{data:f,loading:h,error:p,refetch:E}}function T(e,...t){let n="";for(let r=0;r<e.length;r++)if(n+=e[r],r<t.length){const e=String(t[r]);/[{}():]/.test(e)&&"undefined"!=typeof console&&console.warn("[SpecifyJS] gql: Interpolated value contains GraphQL metacharacters. Use variables parameter instead of string interpolation to prevent injection."),n+=e}return n.replace(/\s+/g," ").trim()}function v(e){const{url:t,headers:n,credentials:r,cache:o=!1}=e,a=new Map;async function c(e,o){const a={"Content-Type":"application/json",...n},c=JSON.stringify({query:e,variables:o});s(t);const i=await fetch(t,{method:"POST",headers:a,credentials:r,body:c});if(!i.ok)throw new Error(`GraphQL request failed with status ${i.status}`);const u=await i.json();return{data:u.data??null,errors:u.errors??null,...void 0!==u.extensions?{extensions:u.extensions}:{}}}return{async query(e,t){if(o){const n=function(e,t){return JSON.stringify({query:e,variables:t})}(e,t),r=a.get(n);if(r)return r;const o=await c(e,t);if(a.size>=100){const e=a.keys().next().value;void 0!==e&&a.delete(e)}return a.set(n,o),o}return c(e,t)},mutate:async(e,t)=>c(e,t),clearCache(){a.clear()},invalidate(e){for(const t of a.keys())try{JSON.parse(t).query===e&&a.delete(t)}catch{}}}}function U(e,s,a){const c=a?.variables,i=a?.deps,u=a?.enabled??!0,[l,f]=t(null),[d,h]=t(u),[w,p]=t(null),g=o(0),y=r(()=>{if(!u)return;const t=++g.current;h(!0),p(null),e.query(s,c).then(e=>{g.current===t&&(f(e.data),p(e.errors),h(!1))}).catch(e=>{g.current===t&&(p([{message:e instanceof Error?e.message:String(e)}]),h(!1))})},[e,s,c,u]);return n(()=>{y()},i?[y,...i]:[y]),{data:l,loading:d,error:w,refetch:y}}function S(e,n){const[o,s]=t(null),[a,c]=t(!1),[i,u]=t(null);return[r((...t)=>(async t=>{c(!0),u(null);try{const r=await e.mutate(n,t);return s(r.data),u(r.errors),c(!1),r}catch(e){const t=[{message:e instanceof Error?e.message:String(e)}];return u(t),c(!1),{data:null,errors:t,extensions:void 0}}})(t[0]),[e,n]),{data:o,loading:a,error:i}]}export{a as RestError,v as createGraphQLClient,m as createGrpcWebClient,i as createRestClient,g as defineMessage,T as gql,S as useMutation,E as useProto,U as useQuery,u as useRest};
|
|
2
|
+
//# sourceMappingURL=specifyjs-client.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"specifyjs-client.esm.js","sources":["../../src/hooks/index.ts","../../src/shared/secure-fetch.ts","../../src/client/rest.ts","../../src/client/protobuf.ts","../../src/client/graphql.ts"],"sourcesContent":[null,null,null,null,null],"names":["resolveDispatcher","Error","useState","initialState","useEffect","create","deps","useCallback","callback","useRef","initialValue","assertSecureUrl","url","startsWith","parsed","URL","window","location","href","undefined","protocol","hostname","RestError","constructor","message","status","statusText","data","config","super","this","name","buildURL","baseURL","path","endsWith","slice","createRestClient","headers","defaultHeaders","timeout","defaultTimeout","interceptors","requestInterceptors","request","responseInterceptors","response","errorInterceptors","error","async","method","body","opts","timeoutId","controller","reqConfig","signal","interceptor","AbortController","setTimeout","abort","externalSignal","aborted","addEventListener","fetchSignal","fetchInit","JSON","stringify","fetch","err","clearTimeout","DOMException","restError","get","includes","json","text","parse","parsedHeaders","result","forEach","value","key","parseResponseHeaders","ok","restResponse","post","put","patch","delete","useRest","client","enabled","setData","loading","setLoading","setError","controllerRef","mountedRef","fetchData","current","requestOpts","promise","upperMethod","toUpperCase","then","catch","refetch","encodeVarint","bytes","v","push","decodeVarint","offset","shift","pos","length","b","wireTypeFor","type","encodeFieldKey","tag","wireType","encodeFieldValue","buf","ArrayBuffer","DataView","setFloat64","Array","from","Uint8Array","encoded","TextEncoder","encode","decodeFieldValue","val","newOffset","view","i","getFloat64","len","dataStart","TextDecoder","decode","defineMessage","fields","tagToField","Map","fieldName","descriptor","Object","entries","set","obj","out","record","wt","repeated","arr","item","keyVarint","entry","skipField","nextOffset","next","decodeGrpcWebFrame","flags","buffer","byteOffset","byteLength","getUint32","createGrpcWebClient","extraHeaders","unary","service","reqType","resType","frame","setUint32","encodeGrpcWebFrame","replace","hdrs","Accept","responseBytes","arrayBuffer","consumed","subarray","useProto","requestRef","res","String","gql","strings","values","test","console","warn","trim","createGraphQLClient","configHeaders","credentials","cache","cacheEnabled","responseCache","execute","query","variables","reqHeaders","errors","extensions","buildCacheKey","cached","size","oldest","keys","mutation","clearCache","clear","invalidate","useQuery","fetchIdRef","id","useMutation","args","mutate","mutateFn"],"mappings":"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"}
|