@learncard/learn-cloud-client 1.4.19 → 1.5.0
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/CHANGELOG.md +11 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/learn-cloud-client.cjs.development.js +14 -0
- package/dist/learn-cloud-client.cjs.development.js.map +2 -2
- package/dist/learn-cloud-client.cjs.production.min.js +1 -1
- package/dist/learn-cloud-client.cjs.production.min.js.map +3 -3
- package/dist/learn-cloud-client.esm.js +14 -0
- package/dist/learn-cloud-client.esm.js.map +2 -2
- package/package.json +2 -2
- package/src/index.ts +16 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# @learncard/network-brain-client
|
|
2
2
|
|
|
3
|
+
## 1.5.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#807](https://github.com/learningeconomy/LearnCard/pull/807) [`cfabf6686a0233ed89de6201a70c01598c5ab298`](https://github.com/learningeconomy/LearnCard/commit/cfabf6686a0233ed89de6201a70c01598c5ab298) Thanks [@TaylorBeeston](https://github.com/TaylorBeeston)! - Add initFromApiKey support
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies []:
|
|
12
|
+
- @learncard/learn-cloud-service@2.3.19
|
|
13
|
+
|
|
3
14
|
## 1.4.19
|
|
4
15
|
|
|
5
16
|
### Patch Changes
|
package/dist/index.d.ts
CHANGED
|
@@ -3,5 +3,6 @@ import type { AppRouter } from '@learncard/learn-cloud-service';
|
|
|
3
3
|
type Client = TRPCClient<AppRouter>;
|
|
4
4
|
export type LearnCloudClient = Client;
|
|
5
5
|
export declare const getClient: (url: string, didAuthFunction: (challenge?: string) => Promise<string>) => Promise<Client>;
|
|
6
|
+
export declare const getApiTokenClient: (url: string, apiToken: string) => Promise<Client>;
|
|
6
7
|
export default getClient;
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,UAAU,EAAiB,MAAM,cAAc,CAAC;AAC3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAIhE,KAAK,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;AAEpC,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEtC,eAAO,MAAM,SAAS,QACb,MAAM,mBACM,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,KACzD,OAAO,CAAC,MAAM,CA2ChB,CAAC;AAEF,eAAe,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,UAAU,EAAiB,MAAM,cAAc,CAAC;AAC3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAIhE,KAAK,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;AAEpC,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEtC,eAAO,MAAM,SAAS,QACb,MAAM,mBACM,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,KACzD,OAAO,CAAC,MAAM,CA2ChB,CAAC;AAGF,eAAO,MAAM,iBAAiB,QAAe,MAAM,YAAY,MAAM,KAAG,OAAO,CAAC,MAAM,CAarF,CAAC;AAEF,eAAe,SAAS,CAAC"}
|
|
@@ -21,6 +21,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
21
21
|
var src_exports = {};
|
|
22
22
|
__export(src_exports, {
|
|
23
23
|
default: () => src_default,
|
|
24
|
+
getApiTokenClient: () => getApiTokenClient,
|
|
24
25
|
getClient: () => getClient
|
|
25
26
|
});
|
|
26
27
|
module.exports = __toCommonJS(src_exports);
|
|
@@ -101,4 +102,17 @@ var getClient = /* @__PURE__ */ __name(async (url, didAuthFunction) => {
|
|
|
101
102
|
});
|
|
102
103
|
return trpc;
|
|
103
104
|
}, "getClient");
|
|
105
|
+
var getApiTokenClient = /* @__PURE__ */ __name(async (url, apiToken) => {
|
|
106
|
+
const trpc = (0, import_client.createTRPCClient)({
|
|
107
|
+
links: [
|
|
108
|
+
(0, import_client.httpBatchLink)({
|
|
109
|
+
methodOverride: "POST",
|
|
110
|
+
url,
|
|
111
|
+
maxURLLength: 3072,
|
|
112
|
+
headers: { Authorization: `Bearer ${apiToken}` }
|
|
113
|
+
})
|
|
114
|
+
]
|
|
115
|
+
});
|
|
116
|
+
return trpc;
|
|
117
|
+
}, "getApiTokenClient");
|
|
104
118
|
var src_default = getClient;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts", "../src/callbackLink.ts"],
|
|
4
|
-
"sourcesContent": ["import { createTRPCClient, TRPCClient, httpBatchLink } from '@trpc/client';\nimport type { AppRouter } from '@learncard/learn-cloud-service';\n\nimport { callbackLink } from './callbackLink';\n\ntype Client = TRPCClient<AppRouter>;\n\nexport type LearnCloudClient = Client;\n\nexport const getClient = async (\n url: string,\n didAuthFunction: (challenge?: string) => Promise<string>\n): Promise<Client> => {\n let challenges: string[] = [];\n\n const challengeRequester = createTRPCClient<AppRouter>({\n links: [\n httpBatchLink({\n methodOverride: 'POST',\n url,\n maxURLLength: 3072,\n maxItems: 50,\n headers: { Authorization: `Bearer ${await didAuthFunction()}` },\n }),\n ],\n });\n\n const getChallenges = async (\n amount = 95 + Math.round((Math.random() - 0.5) * 5)\n ): Promise<string[]> => {\n return challengeRequester.utilities.getChallenges.query({ amount });\n };\n\n getChallenges().then(result => (challenges = result));\n\n const trpc = createTRPCClient<AppRouter>({\n links: [\n callbackLink(async () => {\n challenges = await getChallenges();\n }),\n httpBatchLink({\n methodOverride: 'POST',\n url,\n maxItems: 50,\n maxURLLength: 3072,\n headers: async () => {\n if (challenges.length === 0) challenges.push(...(await getChallenges()));\n\n return { Authorization: `Bearer ${await didAuthFunction(challenges.pop())}` };\n },\n }),\n ],\n });\n\n return trpc;\n};\n\nexport default getClient;\n", "import { TRPCLink } from '@trpc/client';\nimport { observable, Unsubscribable } from '@trpc/server/observable';\nimport type { AppRouter } from '@learncard/learn-cloud-service';\n\nexport const callbackLink = (callback: () => Promise<void>): TRPCLink<AppRouter> => {\n return () => {\n return ({ next, op }) => {\n return observable(observer => {\n let request: Unsubscribable | null = null;\n let attempts = 0;\n let isDone = false;\n\n const attempt = () => {\n attempts += 1;\n request?.unsubscribe();\n request = next(op).subscribe({\n error: async error => {\n if (attempts > 5 || error.data?.httpStatus !== 401) {\n return observer.error(error);\n }\n\n await callback();\n\n attempt();\n },\n next: result => observer.next(result),\n complete: () => {\n if (isDone) observer.complete();\n },\n });\n };\n\n attempt();\n\n return () => {\n isDone = true;\n request?.unsubscribe();\n };\n });\n };\n };\n};\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA4D;;;ACC5D,wBAA2C;AAGpC,IAAM,eAAe,wBAAC,aAAuD;AAChF,SAAO,MAAM;AACT,WAAO,CAAC,EAAE,MAAM,GAAG,MAAM;AACrB,iBAAO,8BAAW,cAAY;AAC1B,YAAI,UAAiC;AACrC,YAAI,WAAW;AACf,YAAI,SAAS;AAEb,cAAM,UAAU,6BAAM;AAClB,sBAAY;AACZ,mBAAS,YAAY;AACrB,oBAAU,KAAK,EAAE,EAAE,UAAU;AAAA,YACzB,OAAO,OAAM,UAAS;AAClB,kBAAI,WAAW,KAAK,MAAM,MAAM,eAAe,KAAK;AAChD,uBAAO,SAAS,MAAM,KAAK;AAAA,cAC/B;AAEA,oBAAM,SAAS;AAEf,sBAAQ;AAAA,YACZ;AAAA,YACA,MAAM,YAAU,SAAS,KAAK,MAAM;AAAA,YACpC,UAAU,MAAM;AACZ,kBAAI;AAAQ,yBAAS,SAAS;AAAA,YAClC;AAAA,UACJ,CAAC;AAAA,QACL,GAlBgB;AAoBhB,gBAAQ;AAER,eAAO,MAAM;AACT,mBAAS;AACT,mBAAS,YAAY;AAAA,QACzB;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AACJ,GArC4B;;;ADKrB,IAAM,YAAY,8BACrB,KACA,oBACkB;AAClB,MAAI,aAAuB,CAAC;AAE5B,QAAM,yBAAqB,gCAA4B;AAAA,IACnD,OAAO;AAAA,UACH,6BAAc;AAAA,QACV,gBAAgB;AAAA,QAChB;AAAA,QACA,cAAc;AAAA,QACd,UAAU;AAAA,QACV,SAAS,EAAE,eAAe,UAAU,MAAM,gBAAgB,IAAI;AAAA,MAClE,CAAC;AAAA,IACL;AAAA,EACJ,CAAC;AAED,QAAM,gBAAgB,8BAClB,SAAS,KAAK,KAAK,OAAO,KAAK,OAAO,IAAI,OAAO,CAAC,MAC9B;AACpB,WAAO,mBAAmB,UAAU,cAAc,MAAM,EAAE,OAAO,CAAC;AAAA,EACtE,GAJsB;AAMtB,gBAAc,EAAE,KAAK,YAAW,aAAa,MAAO;AAEpD,QAAM,WAAO,gCAA4B;AAAA,IACrC,OAAO;AAAA,MACH,aAAa,YAAY;AACrB,qBAAa,MAAM,cAAc;AAAA,MACrC,CAAC;AAAA,UACD,6BAAc;AAAA,QACV,gBAAgB;AAAA,QAChB;AAAA,QACA,UAAU;AAAA,QACV,cAAc;AAAA,QACd,SAAS,YAAY;AACjB,cAAI,WAAW,WAAW;AAAG,uBAAW,KAAK,GAAI,MAAM,cAAc,CAAE;AAEvE,iBAAO,EAAE,eAAe,UAAU,MAAM,gBAAgB,WAAW,IAAI,CAAC,IAAI;AAAA,QAChF;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ,CAAC;AAED,SAAO;AACX,GA9CyB;
|
|
4
|
+
"sourcesContent": ["import { createTRPCClient, TRPCClient, httpBatchLink } from '@trpc/client';\nimport type { AppRouter } from '@learncard/learn-cloud-service';\n\nimport { callbackLink } from './callbackLink';\n\ntype Client = TRPCClient<AppRouter>;\n\nexport type LearnCloudClient = Client;\n\nexport const getClient = async (\n url: string,\n didAuthFunction: (challenge?: string) => Promise<string>\n): Promise<Client> => {\n let challenges: string[] = [];\n\n const challengeRequester = createTRPCClient<AppRouter>({\n links: [\n httpBatchLink({\n methodOverride: 'POST',\n url,\n maxURLLength: 3072,\n maxItems: 50,\n headers: { Authorization: `Bearer ${await didAuthFunction()}` },\n }),\n ],\n });\n\n const getChallenges = async (\n amount = 95 + Math.round((Math.random() - 0.5) * 5)\n ): Promise<string[]> => {\n return challengeRequester.utilities.getChallenges.query({ amount });\n };\n\n getChallenges().then(result => (challenges = result));\n\n const trpc = createTRPCClient<AppRouter>({\n links: [\n callbackLink(async () => {\n challenges = await getChallenges();\n }),\n httpBatchLink({\n methodOverride: 'POST',\n url,\n maxItems: 50,\n maxURLLength: 3072,\n headers: async () => {\n if (challenges.length === 0) challenges.push(...(await getChallenges()));\n\n return { Authorization: `Bearer ${await didAuthFunction(challenges.pop())}` };\n },\n }),\n ],\n });\n\n return trpc;\n};\n\n// Create a client that always uses a provided API token and never fetches challenges\nexport const getApiTokenClient = async (url: string, apiToken: string): Promise<Client> => {\n const trpc = createTRPCClient<AppRouter>({\n links: [\n httpBatchLink({\n methodOverride: 'POST',\n url,\n maxURLLength: 3072,\n headers: { Authorization: `Bearer ${apiToken}` },\n }),\n ],\n });\n\n return trpc;\n};\n\nexport default getClient;\n", "import { TRPCLink } from '@trpc/client';\nimport { observable, Unsubscribable } from '@trpc/server/observable';\nimport type { AppRouter } from '@learncard/learn-cloud-service';\n\nexport const callbackLink = (callback: () => Promise<void>): TRPCLink<AppRouter> => {\n return () => {\n return ({ next, op }) => {\n return observable(observer => {\n let request: Unsubscribable | null = null;\n let attempts = 0;\n let isDone = false;\n\n const attempt = () => {\n attempts += 1;\n request?.unsubscribe();\n request = next(op).subscribe({\n error: async error => {\n if (attempts > 5 || error.data?.httpStatus !== 401) {\n return observer.error(error);\n }\n\n await callback();\n\n attempt();\n },\n next: result => observer.next(result),\n complete: () => {\n if (isDone) observer.complete();\n },\n });\n };\n\n attempt();\n\n return () => {\n isDone = true;\n request?.unsubscribe();\n };\n });\n };\n };\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA4D;;;ACC5D,wBAA2C;AAGpC,IAAM,eAAe,wBAAC,aAAuD;AAChF,SAAO,MAAM;AACT,WAAO,CAAC,EAAE,MAAM,GAAG,MAAM;AACrB,iBAAO,8BAAW,cAAY;AAC1B,YAAI,UAAiC;AACrC,YAAI,WAAW;AACf,YAAI,SAAS;AAEb,cAAM,UAAU,6BAAM;AAClB,sBAAY;AACZ,mBAAS,YAAY;AACrB,oBAAU,KAAK,EAAE,EAAE,UAAU;AAAA,YACzB,OAAO,OAAM,UAAS;AAClB,kBAAI,WAAW,KAAK,MAAM,MAAM,eAAe,KAAK;AAChD,uBAAO,SAAS,MAAM,KAAK;AAAA,cAC/B;AAEA,oBAAM,SAAS;AAEf,sBAAQ;AAAA,YACZ;AAAA,YACA,MAAM,YAAU,SAAS,KAAK,MAAM;AAAA,YACpC,UAAU,MAAM;AACZ,kBAAI;AAAQ,yBAAS,SAAS;AAAA,YAClC;AAAA,UACJ,CAAC;AAAA,QACL,GAlBgB;AAoBhB,gBAAQ;AAER,eAAO,MAAM;AACT,mBAAS;AACT,mBAAS,YAAY;AAAA,QACzB;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AACJ,GArC4B;;;ADKrB,IAAM,YAAY,8BACrB,KACA,oBACkB;AAClB,MAAI,aAAuB,CAAC;AAE5B,QAAM,yBAAqB,gCAA4B;AAAA,IACnD,OAAO;AAAA,UACH,6BAAc;AAAA,QACV,gBAAgB;AAAA,QAChB;AAAA,QACA,cAAc;AAAA,QACd,UAAU;AAAA,QACV,SAAS,EAAE,eAAe,UAAU,MAAM,gBAAgB,IAAI;AAAA,MAClE,CAAC;AAAA,IACL;AAAA,EACJ,CAAC;AAED,QAAM,gBAAgB,8BAClB,SAAS,KAAK,KAAK,OAAO,KAAK,OAAO,IAAI,OAAO,CAAC,MAC9B;AACpB,WAAO,mBAAmB,UAAU,cAAc,MAAM,EAAE,OAAO,CAAC;AAAA,EACtE,GAJsB;AAMtB,gBAAc,EAAE,KAAK,YAAW,aAAa,MAAO;AAEpD,QAAM,WAAO,gCAA4B;AAAA,IACrC,OAAO;AAAA,MACH,aAAa,YAAY;AACrB,qBAAa,MAAM,cAAc;AAAA,MACrC,CAAC;AAAA,UACD,6BAAc;AAAA,QACV,gBAAgB;AAAA,QAChB;AAAA,QACA,UAAU;AAAA,QACV,cAAc;AAAA,QACd,SAAS,YAAY;AACjB,cAAI,WAAW,WAAW;AAAG,uBAAW,KAAK,GAAI,MAAM,cAAc,CAAE;AAEvE,iBAAO,EAAE,eAAe,UAAU,MAAM,gBAAgB,WAAW,IAAI,CAAC,IAAI;AAAA,QAChF;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ,CAAC;AAED,SAAO;AACX,GA9CyB;AAiDlB,IAAM,oBAAoB,8BAAO,KAAa,aAAsC;AACvF,QAAM,WAAO,gCAA4B;AAAA,IACrC,OAAO;AAAA,UACH,6BAAc;AAAA,QACV,gBAAgB;AAAA,QAChB;AAAA,QACA,cAAc;AAAA,QACd,SAAS,EAAE,eAAe,UAAU,WAAW;AAAA,MACnD,CAAC;AAAA,IACL;AAAA,EACJ,CAAC;AAED,SAAO;AACX,GAbiC;AAejC,IAAO,cAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var p=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var
|
|
1
|
+
var p=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var R=Object.prototype.hasOwnProperty;var o=(t,e)=>p(t,"name",{value:e,configurable:!0});var b=(t,e)=>{for(var r in e)p(t,r,{get:e[r],enumerable:!0})},P=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of d(e))!R.call(t,n)&&n!==r&&p(t,n,{get:()=>e[n],enumerable:!(i=C(e,n))||i.enumerable});return t};var x=t=>P(p({},"__esModule",{value:!0}),t);var k={};b(k,{default:()=>f,getApiTokenClient:()=>L,getClient:()=>g});module.exports=x(k);var a=require("@trpc/client");var m=require("@trpc/server/observable");var h=o(t=>()=>({next:e,op:r})=>(0,m.observable)(i=>{let n=null,c=0,s=!1,u=o(()=>{c+=1,n?.unsubscribe(),n=e(r).subscribe({error:async l=>{if(c>5||l.data?.httpStatus!==401)return i.error(l);await t(),u()},next:l=>i.next(l),complete:()=>{s&&i.complete()}})},"attempt");return u(),()=>{s=!0,n?.unsubscribe()}}),"callbackLink");var g=o(async(t,e)=>{let r=[],i=(0,a.createTRPCClient)({links:[(0,a.httpBatchLink)({methodOverride:"POST",url:t,maxURLLength:3072,maxItems:50,headers:{Authorization:`Bearer ${await e()}`}})]}),n=o(async(s=95+Math.round((Math.random()-.5)*5))=>i.utilities.getChallenges.query({amount:s}),"getChallenges");return n().then(s=>r=s),(0,a.createTRPCClient)({links:[h(async()=>{r=await n()}),(0,a.httpBatchLink)({methodOverride:"POST",url:t,maxItems:50,maxURLLength:3072,headers:async()=>(r.length===0&&r.push(...await n()),{Authorization:`Bearer ${await e(r.pop())}`})})]})},"getClient"),L=o(async(t,e)=>(0,a.createTRPCClient)({links:[(0,a.httpBatchLink)({methodOverride:"POST",url:t,maxURLLength:3072,headers:{Authorization:`Bearer ${e}`}})]}),"getApiTokenClient"),f=g;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts", "../src/callbackLink.ts"],
|
|
4
|
-
"sourcesContent": ["import { createTRPCClient, TRPCClient, httpBatchLink } from '@trpc/client';\nimport type { AppRouter } from '@learncard/learn-cloud-service';\n\nimport { callbackLink } from './callbackLink';\n\ntype Client = TRPCClient<AppRouter>;\n\nexport type LearnCloudClient = Client;\n\nexport const getClient = async (\n url: string,\n didAuthFunction: (challenge?: string) => Promise<string>\n): Promise<Client> => {\n let challenges: string[] = [];\n\n const challengeRequester = createTRPCClient<AppRouter>({\n links: [\n httpBatchLink({\n methodOverride: 'POST',\n url,\n maxURLLength: 3072,\n maxItems: 50,\n headers: { Authorization: `Bearer ${await didAuthFunction()}` },\n }),\n ],\n });\n\n const getChallenges = async (\n amount = 95 + Math.round((Math.random() - 0.5) * 5)\n ): Promise<string[]> => {\n return challengeRequester.utilities.getChallenges.query({ amount });\n };\n\n getChallenges().then(result => (challenges = result));\n\n const trpc = createTRPCClient<AppRouter>({\n links: [\n callbackLink(async () => {\n challenges = await getChallenges();\n }),\n httpBatchLink({\n methodOverride: 'POST',\n url,\n maxItems: 50,\n maxURLLength: 3072,\n headers: async () => {\n if (challenges.length === 0) challenges.push(...(await getChallenges()));\n\n return { Authorization: `Bearer ${await didAuthFunction(challenges.pop())}` };\n },\n }),\n ],\n });\n\n return trpc;\n};\n\nexport default getClient;\n", "import { TRPCLink } from '@trpc/client';\nimport { observable, Unsubscribable } from '@trpc/server/observable';\nimport type { AppRouter } from '@learncard/learn-cloud-service';\n\nexport const callbackLink = (callback: () => Promise<void>): TRPCLink<AppRouter> => {\n return () => {\n return ({ next, op }) => {\n return observable(observer => {\n let request: Unsubscribable | null = null;\n let attempts = 0;\n let isDone = false;\n\n const attempt = () => {\n attempts += 1;\n request?.unsubscribe();\n request = next(op).subscribe({\n error: async error => {\n if (attempts > 5 || error.data?.httpStatus !== 401) {\n return observer.error(error);\n }\n\n await callback();\n\n attempt();\n },\n next: result => observer.next(result),\n complete: () => {\n if (isDone) observer.complete();\n },\n });\n };\n\n attempt();\n\n return () => {\n isDone = true;\n request?.unsubscribe();\n };\n });\n };\n };\n};\n"],
|
|
5
|
-
"mappings": "+cAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,cAAAC,IAAA,eAAAC,
|
|
6
|
-
"names": ["src_exports", "__export", "src_default", "getClient", "__toCommonJS", "import_client", "import_observable", "callbackLink", "__name", "callback", "next", "op", "observer", "request", "attempts", "isDone", "attempt", "error", "result", "getClient", "__name", "url", "didAuthFunction", "challenges", "challengeRequester", "getChallenges", "amount", "result", "callbackLink", "src_default"]
|
|
4
|
+
"sourcesContent": ["import { createTRPCClient, TRPCClient, httpBatchLink } from '@trpc/client';\nimport type { AppRouter } from '@learncard/learn-cloud-service';\n\nimport { callbackLink } from './callbackLink';\n\ntype Client = TRPCClient<AppRouter>;\n\nexport type LearnCloudClient = Client;\n\nexport const getClient = async (\n url: string,\n didAuthFunction: (challenge?: string) => Promise<string>\n): Promise<Client> => {\n let challenges: string[] = [];\n\n const challengeRequester = createTRPCClient<AppRouter>({\n links: [\n httpBatchLink({\n methodOverride: 'POST',\n url,\n maxURLLength: 3072,\n maxItems: 50,\n headers: { Authorization: `Bearer ${await didAuthFunction()}` },\n }),\n ],\n });\n\n const getChallenges = async (\n amount = 95 + Math.round((Math.random() - 0.5) * 5)\n ): Promise<string[]> => {\n return challengeRequester.utilities.getChallenges.query({ amount });\n };\n\n getChallenges().then(result => (challenges = result));\n\n const trpc = createTRPCClient<AppRouter>({\n links: [\n callbackLink(async () => {\n challenges = await getChallenges();\n }),\n httpBatchLink({\n methodOverride: 'POST',\n url,\n maxItems: 50,\n maxURLLength: 3072,\n headers: async () => {\n if (challenges.length === 0) challenges.push(...(await getChallenges()));\n\n return { Authorization: `Bearer ${await didAuthFunction(challenges.pop())}` };\n },\n }),\n ],\n });\n\n return trpc;\n};\n\n// Create a client that always uses a provided API token and never fetches challenges\nexport const getApiTokenClient = async (url: string, apiToken: string): Promise<Client> => {\n const trpc = createTRPCClient<AppRouter>({\n links: [\n httpBatchLink({\n methodOverride: 'POST',\n url,\n maxURLLength: 3072,\n headers: { Authorization: `Bearer ${apiToken}` },\n }),\n ],\n });\n\n return trpc;\n};\n\nexport default getClient;\n", "import { TRPCLink } from '@trpc/client';\nimport { observable, Unsubscribable } from '@trpc/server/observable';\nimport type { AppRouter } from '@learncard/learn-cloud-service';\n\nexport const callbackLink = (callback: () => Promise<void>): TRPCLink<AppRouter> => {\n return () => {\n return ({ next, op }) => {\n return observable(observer => {\n let request: Unsubscribable | null = null;\n let attempts = 0;\n let isDone = false;\n\n const attempt = () => {\n attempts += 1;\n request?.unsubscribe();\n request = next(op).subscribe({\n error: async error => {\n if (attempts > 5 || error.data?.httpStatus !== 401) {\n return observer.error(error);\n }\n\n await callback();\n\n attempt();\n },\n next: result => observer.next(result),\n complete: () => {\n if (isDone) observer.complete();\n },\n });\n };\n\n attempt();\n\n return () => {\n isDone = true;\n request?.unsubscribe();\n };\n });\n };\n };\n};\n"],
|
|
5
|
+
"mappings": "+cAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,sBAAAC,EAAA,cAAAC,IAAA,eAAAC,EAAAL,GAAA,IAAAM,EAA4D,wBCC5D,IAAAC,EAA2C,mCAGpC,IAAMC,EAAeC,EAACC,GAClB,IACI,CAAC,CAAE,KAAAC,EAAM,GAAAC,CAAG,OACR,cAAWC,GAAY,CAC1B,IAAIC,EAAiC,KACjCC,EAAW,EACXC,EAAS,GAEPC,EAAUR,EAAA,IAAM,CAClBM,GAAY,EACZD,GAAS,YAAY,EACrBA,EAAUH,EAAKC,CAAE,EAAE,UAAU,CACzB,MAAO,MAAMM,GAAS,CAClB,GAAIH,EAAW,GAAKG,EAAM,MAAM,aAAe,IAC3C,OAAOL,EAAS,MAAMK,CAAK,EAG/B,MAAMR,EAAS,EAEfO,EAAQ,CACZ,EACA,KAAME,GAAUN,EAAS,KAAKM,CAAM,EACpC,SAAU,IAAM,CACRH,GAAQH,EAAS,SAAS,CAClC,CACJ,CAAC,CACL,EAlBgB,WAoBhB,OAAAI,EAAQ,EAED,IAAM,CACTD,EAAS,GACTF,GAAS,YAAY,CACzB,CACJ,CAAC,EAlCe,gBDKrB,IAAMM,EAAYC,EAAA,MACrBC,EACAC,IACkB,CAClB,IAAIC,EAAuB,CAAC,EAEtBC,KAAqB,oBAA4B,CACnD,MAAO,IACH,iBAAc,CACV,eAAgB,OAChB,IAAAH,EACA,aAAc,KACd,SAAU,GACV,QAAS,CAAE,cAAe,UAAU,MAAMC,EAAgB,GAAI,CAClE,CAAC,CACL,CACJ,CAAC,EAEKG,EAAgBL,EAAA,MAClBM,EAAS,GAAK,KAAK,OAAO,KAAK,OAAO,EAAI,IAAO,CAAC,IAE3CF,EAAmB,UAAU,cAAc,MAAM,CAAE,OAAAE,CAAO,CAAC,EAHhD,iBAMtB,OAAAD,EAAc,EAAE,KAAKE,GAAWJ,EAAaI,CAAO,KAEvC,oBAA4B,CACrC,MAAO,CACHC,EAAa,SAAY,CACrBL,EAAa,MAAME,EAAc,CACrC,CAAC,KACD,iBAAc,CACV,eAAgB,OAChB,IAAAJ,EACA,SAAU,GACV,aAAc,KACd,QAAS,UACDE,EAAW,SAAW,GAAGA,EAAW,KAAK,GAAI,MAAME,EAAc,CAAE,EAEhE,CAAE,cAAe,UAAU,MAAMH,EAAgBC,EAAW,IAAI,CAAC,GAAI,EAEpF,CAAC,CACL,CACJ,CAAC,CAGL,EA9CyB,aAiDZM,EAAoBT,EAAA,MAAOC,EAAaS,OACpC,oBAA4B,CACrC,MAAO,IACH,iBAAc,CACV,eAAgB,OAChB,IAAAT,EACA,aAAc,KACd,QAAS,CAAE,cAAe,UAAUS,GAAW,CACnD,CAAC,CACL,CACJ,CAAC,EAV4B,qBAe1BC,EAAQZ",
|
|
6
|
+
"names": ["src_exports", "__export", "src_default", "getApiTokenClient", "getClient", "__toCommonJS", "import_client", "import_observable", "callbackLink", "__name", "callback", "next", "op", "observer", "request", "attempts", "isDone", "attempt", "error", "result", "getClient", "__name", "url", "didAuthFunction", "challenges", "challengeRequester", "getChallenges", "amount", "result", "callbackLink", "getApiTokenClient", "apiToken", "src_default"]
|
|
7
7
|
}
|
|
@@ -79,8 +79,22 @@ var getClient = /* @__PURE__ */ __name(async (url, didAuthFunction) => {
|
|
|
79
79
|
});
|
|
80
80
|
return trpc;
|
|
81
81
|
}, "getClient");
|
|
82
|
+
var getApiTokenClient = /* @__PURE__ */ __name(async (url, apiToken) => {
|
|
83
|
+
const trpc = createTRPCClient({
|
|
84
|
+
links: [
|
|
85
|
+
httpBatchLink({
|
|
86
|
+
methodOverride: "POST",
|
|
87
|
+
url,
|
|
88
|
+
maxURLLength: 3072,
|
|
89
|
+
headers: { Authorization: `Bearer ${apiToken}` }
|
|
90
|
+
})
|
|
91
|
+
]
|
|
92
|
+
});
|
|
93
|
+
return trpc;
|
|
94
|
+
}, "getApiTokenClient");
|
|
82
95
|
var src_default = getClient;
|
|
83
96
|
export {
|
|
84
97
|
src_default as default,
|
|
98
|
+
getApiTokenClient,
|
|
85
99
|
getClient
|
|
86
100
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts", "../src/callbackLink.ts"],
|
|
4
|
-
"sourcesContent": ["import { createTRPCClient, TRPCClient, httpBatchLink } from '@trpc/client';\nimport type { AppRouter } from '@learncard/learn-cloud-service';\n\nimport { callbackLink } from './callbackLink';\n\ntype Client = TRPCClient<AppRouter>;\n\nexport type LearnCloudClient = Client;\n\nexport const getClient = async (\n url: string,\n didAuthFunction: (challenge?: string) => Promise<string>\n): Promise<Client> => {\n let challenges: string[] = [];\n\n const challengeRequester = createTRPCClient<AppRouter>({\n links: [\n httpBatchLink({\n methodOverride: 'POST',\n url,\n maxURLLength: 3072,\n maxItems: 50,\n headers: { Authorization: `Bearer ${await didAuthFunction()}` },\n }),\n ],\n });\n\n const getChallenges = async (\n amount = 95 + Math.round((Math.random() - 0.5) * 5)\n ): Promise<string[]> => {\n return challengeRequester.utilities.getChallenges.query({ amount });\n };\n\n getChallenges().then(result => (challenges = result));\n\n const trpc = createTRPCClient<AppRouter>({\n links: [\n callbackLink(async () => {\n challenges = await getChallenges();\n }),\n httpBatchLink({\n methodOverride: 'POST',\n url,\n maxItems: 50,\n maxURLLength: 3072,\n headers: async () => {\n if (challenges.length === 0) challenges.push(...(await getChallenges()));\n\n return { Authorization: `Bearer ${await didAuthFunction(challenges.pop())}` };\n },\n }),\n ],\n });\n\n return trpc;\n};\n\nexport default getClient;\n", "import { TRPCLink } from '@trpc/client';\nimport { observable, Unsubscribable } from '@trpc/server/observable';\nimport type { AppRouter } from '@learncard/learn-cloud-service';\n\nexport const callbackLink = (callback: () => Promise<void>): TRPCLink<AppRouter> => {\n return () => {\n return ({ next, op }) => {\n return observable(observer => {\n let request: Unsubscribable | null = null;\n let attempts = 0;\n let isDone = false;\n\n const attempt = () => {\n attempts += 1;\n request?.unsubscribe();\n request = next(op).subscribe({\n error: async error => {\n if (attempts > 5 || error.data?.httpStatus !== 401) {\n return observer.error(error);\n }\n\n await callback();\n\n attempt();\n },\n next: result => observer.next(result),\n complete: () => {\n if (isDone) observer.complete();\n },\n });\n };\n\n attempt();\n\n return () => {\n isDone = true;\n request?.unsubscribe();\n };\n });\n };\n };\n};\n"],
|
|
5
|
-
"mappings": ";;;;AAAA,SAAS,kBAA8B,qBAAqB;;;ACC5D,SAAS,kBAAkC;AAGpC,IAAM,eAAe,wBAAC,aAAuD;AAChF,SAAO,MAAM;AACT,WAAO,CAAC,EAAE,MAAM,GAAG,MAAM;AACrB,aAAO,WAAW,cAAY;AAC1B,YAAI,UAAiC;AACrC,YAAI,WAAW;AACf,YAAI,SAAS;AAEb,cAAM,UAAU,6BAAM;AAClB,sBAAY;AACZ,mBAAS,YAAY;AACrB,oBAAU,KAAK,EAAE,EAAE,UAAU;AAAA,YACzB,OAAO,OAAM,UAAS;AAClB,kBAAI,WAAW,KAAK,MAAM,MAAM,eAAe,KAAK;AAChD,uBAAO,SAAS,MAAM,KAAK;AAAA,cAC/B;AAEA,oBAAM,SAAS;AAEf,sBAAQ;AAAA,YACZ;AAAA,YACA,MAAM,YAAU,SAAS,KAAK,MAAM;AAAA,YACpC,UAAU,MAAM;AACZ,kBAAI;AAAQ,yBAAS,SAAS;AAAA,YAClC;AAAA,UACJ,CAAC;AAAA,QACL,GAlBgB;AAoBhB,gBAAQ;AAER,eAAO,MAAM;AACT,mBAAS;AACT,mBAAS,YAAY;AAAA,QACzB;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AACJ,GArC4B;;;ADKrB,IAAM,YAAY,8BACrB,KACA,oBACkB;AAClB,MAAI,aAAuB,CAAC;AAE5B,QAAM,qBAAqB,iBAA4B;AAAA,IACnD,OAAO;AAAA,MACH,cAAc;AAAA,QACV,gBAAgB;AAAA,QAChB;AAAA,QACA,cAAc;AAAA,QACd,UAAU;AAAA,QACV,SAAS,EAAE,eAAe,UAAU,MAAM,gBAAgB,IAAI;AAAA,MAClE,CAAC;AAAA,IACL;AAAA,EACJ,CAAC;AAED,QAAM,gBAAgB,8BAClB,SAAS,KAAK,KAAK,OAAO,KAAK,OAAO,IAAI,OAAO,CAAC,MAC9B;AACpB,WAAO,mBAAmB,UAAU,cAAc,MAAM,EAAE,OAAO,CAAC;AAAA,EACtE,GAJsB;AAMtB,gBAAc,EAAE,KAAK,YAAW,aAAa,MAAO;AAEpD,QAAM,OAAO,iBAA4B;AAAA,IACrC,OAAO;AAAA,MACH,aAAa,YAAY;AACrB,qBAAa,MAAM,cAAc;AAAA,MACrC,CAAC;AAAA,MACD,cAAc;AAAA,QACV,gBAAgB;AAAA,QAChB;AAAA,QACA,UAAU;AAAA,QACV,cAAc;AAAA,QACd,SAAS,YAAY;AACjB,cAAI,WAAW,WAAW;AAAG,uBAAW,KAAK,GAAI,MAAM,cAAc,CAAE;AAEvE,iBAAO,EAAE,eAAe,UAAU,MAAM,gBAAgB,WAAW,IAAI,CAAC,IAAI;AAAA,QAChF;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ,CAAC;AAED,SAAO;AACX,GA9CyB;
|
|
4
|
+
"sourcesContent": ["import { createTRPCClient, TRPCClient, httpBatchLink } from '@trpc/client';\nimport type { AppRouter } from '@learncard/learn-cloud-service';\n\nimport { callbackLink } from './callbackLink';\n\ntype Client = TRPCClient<AppRouter>;\n\nexport type LearnCloudClient = Client;\n\nexport const getClient = async (\n url: string,\n didAuthFunction: (challenge?: string) => Promise<string>\n): Promise<Client> => {\n let challenges: string[] = [];\n\n const challengeRequester = createTRPCClient<AppRouter>({\n links: [\n httpBatchLink({\n methodOverride: 'POST',\n url,\n maxURLLength: 3072,\n maxItems: 50,\n headers: { Authorization: `Bearer ${await didAuthFunction()}` },\n }),\n ],\n });\n\n const getChallenges = async (\n amount = 95 + Math.round((Math.random() - 0.5) * 5)\n ): Promise<string[]> => {\n return challengeRequester.utilities.getChallenges.query({ amount });\n };\n\n getChallenges().then(result => (challenges = result));\n\n const trpc = createTRPCClient<AppRouter>({\n links: [\n callbackLink(async () => {\n challenges = await getChallenges();\n }),\n httpBatchLink({\n methodOverride: 'POST',\n url,\n maxItems: 50,\n maxURLLength: 3072,\n headers: async () => {\n if (challenges.length === 0) challenges.push(...(await getChallenges()));\n\n return { Authorization: `Bearer ${await didAuthFunction(challenges.pop())}` };\n },\n }),\n ],\n });\n\n return trpc;\n};\n\n// Create a client that always uses a provided API token and never fetches challenges\nexport const getApiTokenClient = async (url: string, apiToken: string): Promise<Client> => {\n const trpc = createTRPCClient<AppRouter>({\n links: [\n httpBatchLink({\n methodOverride: 'POST',\n url,\n maxURLLength: 3072,\n headers: { Authorization: `Bearer ${apiToken}` },\n }),\n ],\n });\n\n return trpc;\n};\n\nexport default getClient;\n", "import { TRPCLink } from '@trpc/client';\nimport { observable, Unsubscribable } from '@trpc/server/observable';\nimport type { AppRouter } from '@learncard/learn-cloud-service';\n\nexport const callbackLink = (callback: () => Promise<void>): TRPCLink<AppRouter> => {\n return () => {\n return ({ next, op }) => {\n return observable(observer => {\n let request: Unsubscribable | null = null;\n let attempts = 0;\n let isDone = false;\n\n const attempt = () => {\n attempts += 1;\n request?.unsubscribe();\n request = next(op).subscribe({\n error: async error => {\n if (attempts > 5 || error.data?.httpStatus !== 401) {\n return observer.error(error);\n }\n\n await callback();\n\n attempt();\n },\n next: result => observer.next(result),\n complete: () => {\n if (isDone) observer.complete();\n },\n });\n };\n\n attempt();\n\n return () => {\n isDone = true;\n request?.unsubscribe();\n };\n });\n };\n };\n};\n"],
|
|
5
|
+
"mappings": ";;;;AAAA,SAAS,kBAA8B,qBAAqB;;;ACC5D,SAAS,kBAAkC;AAGpC,IAAM,eAAe,wBAAC,aAAuD;AAChF,SAAO,MAAM;AACT,WAAO,CAAC,EAAE,MAAM,GAAG,MAAM;AACrB,aAAO,WAAW,cAAY;AAC1B,YAAI,UAAiC;AACrC,YAAI,WAAW;AACf,YAAI,SAAS;AAEb,cAAM,UAAU,6BAAM;AAClB,sBAAY;AACZ,mBAAS,YAAY;AACrB,oBAAU,KAAK,EAAE,EAAE,UAAU;AAAA,YACzB,OAAO,OAAM,UAAS;AAClB,kBAAI,WAAW,KAAK,MAAM,MAAM,eAAe,KAAK;AAChD,uBAAO,SAAS,MAAM,KAAK;AAAA,cAC/B;AAEA,oBAAM,SAAS;AAEf,sBAAQ;AAAA,YACZ;AAAA,YACA,MAAM,YAAU,SAAS,KAAK,MAAM;AAAA,YACpC,UAAU,MAAM;AACZ,kBAAI;AAAQ,yBAAS,SAAS;AAAA,YAClC;AAAA,UACJ,CAAC;AAAA,QACL,GAlBgB;AAoBhB,gBAAQ;AAER,eAAO,MAAM;AACT,mBAAS;AACT,mBAAS,YAAY;AAAA,QACzB;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AACJ,GArC4B;;;ADKrB,IAAM,YAAY,8BACrB,KACA,oBACkB;AAClB,MAAI,aAAuB,CAAC;AAE5B,QAAM,qBAAqB,iBAA4B;AAAA,IACnD,OAAO;AAAA,MACH,cAAc;AAAA,QACV,gBAAgB;AAAA,QAChB;AAAA,QACA,cAAc;AAAA,QACd,UAAU;AAAA,QACV,SAAS,EAAE,eAAe,UAAU,MAAM,gBAAgB,IAAI;AAAA,MAClE,CAAC;AAAA,IACL;AAAA,EACJ,CAAC;AAED,QAAM,gBAAgB,8BAClB,SAAS,KAAK,KAAK,OAAO,KAAK,OAAO,IAAI,OAAO,CAAC,MAC9B;AACpB,WAAO,mBAAmB,UAAU,cAAc,MAAM,EAAE,OAAO,CAAC;AAAA,EACtE,GAJsB;AAMtB,gBAAc,EAAE,KAAK,YAAW,aAAa,MAAO;AAEpD,QAAM,OAAO,iBAA4B;AAAA,IACrC,OAAO;AAAA,MACH,aAAa,YAAY;AACrB,qBAAa,MAAM,cAAc;AAAA,MACrC,CAAC;AAAA,MACD,cAAc;AAAA,QACV,gBAAgB;AAAA,QAChB;AAAA,QACA,UAAU;AAAA,QACV,cAAc;AAAA,QACd,SAAS,YAAY;AACjB,cAAI,WAAW,WAAW;AAAG,uBAAW,KAAK,GAAI,MAAM,cAAc,CAAE;AAEvE,iBAAO,EAAE,eAAe,UAAU,MAAM,gBAAgB,WAAW,IAAI,CAAC,IAAI;AAAA,QAChF;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ,CAAC;AAED,SAAO;AACX,GA9CyB;AAiDlB,IAAM,oBAAoB,8BAAO,KAAa,aAAsC;AACvF,QAAM,OAAO,iBAA4B;AAAA,IACrC,OAAO;AAAA,MACH,cAAc;AAAA,QACV,gBAAgB;AAAA,QAChB;AAAA,QACA,cAAc;AAAA,QACd,SAAS,EAAE,eAAe,UAAU,WAAW;AAAA,MACnD,CAAC;AAAA,IACL;AAAA,EACJ,CAAC;AAED,SAAO;AACX,GAbiC;AAejC,IAAO,cAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@learncard/learn-cloud-client",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "./dist/learn-cloud-client.esm.js",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"@trpc/client": "^11.3.0",
|
|
18
|
-
"@learncard/learn-cloud-service": "2.3.
|
|
18
|
+
"@learncard/learn-cloud-service": "2.3.19"
|
|
19
19
|
},
|
|
20
20
|
"scripts": {
|
|
21
21
|
"build": "node ./scripts/build.mjs && shx cp ./scripts/mixedEntypoint.js ./dist/index.js && tsc --p tsconfig.json"
|
package/src/index.ts
CHANGED
|
@@ -55,4 +55,20 @@ export const getClient = async (
|
|
|
55
55
|
return trpc;
|
|
56
56
|
};
|
|
57
57
|
|
|
58
|
+
// Create a client that always uses a provided API token and never fetches challenges
|
|
59
|
+
export const getApiTokenClient = async (url: string, apiToken: string): Promise<Client> => {
|
|
60
|
+
const trpc = createTRPCClient<AppRouter>({
|
|
61
|
+
links: [
|
|
62
|
+
httpBatchLink({
|
|
63
|
+
methodOverride: 'POST',
|
|
64
|
+
url,
|
|
65
|
+
maxURLLength: 3072,
|
|
66
|
+
headers: { Authorization: `Bearer ${apiToken}` },
|
|
67
|
+
}),
|
|
68
|
+
],
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
return trpc;
|
|
72
|
+
};
|
|
73
|
+
|
|
58
74
|
export default getClient;
|