@osdk/oauth 1.1.0-beta.7 → 1.1.0-beta.8

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.
Files changed (44) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/build/browser/common.d.ts +4 -3
  3. package/build/browser/common.d.ts.map +1 -1
  4. package/build/browser/common.js +13 -9
  5. package/build/browser/common.js.map +1 -1
  6. package/build/browser/common.test.d.ts +2 -0
  7. package/build/browser/common.test.d.ts.map +1 -0
  8. package/build/browser/common.test.js +64 -0
  9. package/build/browser/common.test.js.map +1 -0
  10. package/build/browser/createConfidentialOauthClient.d.ts.map +1 -1
  11. package/build/browser/createConfidentialOauthClient.js +1 -1
  12. package/build/browser/createConfidentialOauthClient.js.map +1 -1
  13. package/build/browser/createPublicOauthClient.d.ts +4 -0
  14. package/build/browser/createPublicOauthClient.d.ts.map +1 -1
  15. package/build/browser/createPublicOauthClient.js +7 -4
  16. package/build/browser/createPublicOauthClient.js.map +1 -1
  17. package/build/browser/publicOauth.test.js +79 -21
  18. package/build/browser/publicOauth.test.js.map +1 -1
  19. package/build/browser/utils.d.ts +4 -2
  20. package/build/browser/utils.d.ts.map +1 -1
  21. package/build/browser/utils.js +2 -1
  22. package/build/browser/utils.js.map +1 -1
  23. package/build/esm/common.d.ts +4 -3
  24. package/build/esm/common.d.ts.map +1 -1
  25. package/build/esm/common.js +13 -9
  26. package/build/esm/common.js.map +1 -1
  27. package/build/esm/common.test.d.ts +2 -0
  28. package/build/esm/common.test.d.ts.map +1 -0
  29. package/build/esm/common.test.js +64 -0
  30. package/build/esm/common.test.js.map +1 -0
  31. package/build/esm/createConfidentialOauthClient.d.ts.map +1 -1
  32. package/build/esm/createConfidentialOauthClient.js +1 -1
  33. package/build/esm/createConfidentialOauthClient.js.map +1 -1
  34. package/build/esm/createPublicOauthClient.d.ts +4 -0
  35. package/build/esm/createPublicOauthClient.d.ts.map +1 -1
  36. package/build/esm/createPublicOauthClient.js +7 -4
  37. package/build/esm/createPublicOauthClient.js.map +1 -1
  38. package/build/esm/publicOauth.test.js +79 -21
  39. package/build/esm/publicOauth.test.js.map +1 -1
  40. package/build/esm/utils.d.ts +4 -2
  41. package/build/esm/utils.d.ts.map +1 -1
  42. package/build/esm/utils.js +2 -1
  43. package/build/esm/utils.js.map +1 -1
  44. package/package.json +4 -3
@@ -95,6 +95,81 @@ describe(createPublicOauthClient, () => {
95
95
  fetchFn
96
96
  };
97
97
  const fullLoginUrl = new URL("/loginPage", DEFAULT_CUR_URL);
98
+ function setupWindowLocation(currentUrl) {
99
+ mockWindow.location.href = new URL(currentUrl).href;
100
+ mockWindow.location.pathname = new URL(currentUrl).pathname;
101
+ }
102
+ function setupLocalState(initialLocalState) {
103
+ vi.mocked(commonJs.readLocal).mockImplementation(() => initialLocalState);
104
+ }
105
+ let client;
106
+ let clientArgs;
107
+ function setupClient(clientArgs_) {
108
+ clientArgs = clientArgs_;
109
+ if (clientArgs.refreshTokenMarker) {
110
+ client = createPublicOauthClient(clientArgs.clientId, clientArgs.foundryUrl, clientArgs.redirectUrl, clientArgs);
111
+ } else {
112
+ client = createPublicOauthClient(clientArgs.clientId, clientArgs.foundryUrl, clientArgs.redirectUrl, clientArgs.useHistory, clientArgs.loginPage, clientArgs.postLoginPage, clientArgs.scopes, clientArgs.fetchFn, clientArgs.ctxPath);
113
+ }
114
+ }
115
+ beforeEach(() => {
116
+ // prevents mistakes like forgetting to initialize the client with an
117
+ // old value around
118
+ client = undefined;
119
+ clientArgs = undefined;
120
+ });
121
+ async function expectRedirectToMultipass(tokenPromise) {
122
+ // we assume window.location.assign will take you away therefore we
123
+ // also have to expect in this scenario that the thrown error happens
124
+ await expect(tokenPromise).rejects.toThrowError(new Error("Unable to redirect"));
125
+ expect(mockWindow.location.assign).toHaveBeenCalledOnce();
126
+ const url = new URL(mockWindow.location.assign.mock.calls[0][0]);
127
+ expect(url.origin).toEqual(clientArgs.foundryUrl);
128
+ expect(url.pathname).toEqual("/multipass/api/oauth2/authorize");
129
+ expect(Object.fromEntries(url.searchParams.entries())).toEqual(expect.objectContaining({
130
+ client_id: clientArgs.clientId,
131
+ code_challenge: expect.any(String),
132
+ redirect_uri: clientArgs.redirectUrl,
133
+ response_type: "code",
134
+ code_challenge_method: "S256",
135
+ scope: "offline_access api:read-data api:write-data",
136
+ state: expect.any(String)
137
+ }));
138
+ }
139
+ describe("refresh token marker", () => {
140
+ beforeEach(() => {
141
+ setupWindowLocation("https://foundry.local");
142
+ });
143
+ it("should not allow refresh if the refresh markers do not match", async () => {
144
+ setupLocalState({
145
+ refresh_token: "refreshToken",
146
+ refreshTokenMarker: "not-the-right-marker"
147
+ });
148
+ setupClient({
149
+ ...BASE_CLIENT_ARGS,
150
+ refreshTokenMarker: "marker"
151
+ });
152
+ await expectRedirectToMultipass(client());
153
+ });
154
+ it("should try to refresh if refresh tokens do match", async () => {
155
+ setupLocalState({
156
+ refresh_token: "refreshToken",
157
+ refreshTokenMarker: "marker"
158
+ });
159
+ setupClient({
160
+ ...BASE_CLIENT_ARGS,
161
+ refreshTokenMarker: "marker"
162
+ });
163
+ hoistedMocks.makeTokenAndSaveRefresh.mockImplementationOnce(() => ({
164
+ access_token: "some token",
165
+ expires_at: Date.now(),
166
+ expires_in: 10000
167
+ }));
168
+ const tokenPromise = client();
169
+ await expect(tokenPromise).resolves.toEqual("some token");
170
+ expect(hoistedMocks.makeTokenAndSaveRefresh).toBeCalledTimes(1);
171
+ });
172
+ });
98
173
  describe.each([{
99
174
  name: "Basic Usage",
100
175
  currentUrl: DEFAULT_CUR_URL,
@@ -149,17 +224,15 @@ describe(createPublicOauthClient, () => {
149
224
  currentUrl,
150
225
  should
151
226
  }) => {
152
- let client;
153
227
  beforeEach(() => {
154
- client = createPublicOauthClient(clientArgs.clientId, clientArgs.foundryUrl, clientArgs.redirectUrl, clientArgs.useHistory, clientArgs.loginPage, clientArgs.postLoginPage, clientArgs.scopes, clientArgs.fetchFn, clientArgs.ctxPath);
155
- mockWindow.location.href = new URL(currentUrl).href;
156
- mockWindow.location.pathname = new URL(currentUrl).pathname;
228
+ setupClient(clientArgs);
229
+ setupWindowLocation(currentUrl.toString());
157
230
  });
158
231
  it("calls common with expected values", () => {
159
232
  expect(vi.mocked(commonJs.common)).toHaveBeenCalledWith(expect.objectContaining({
160
233
  client_id: clientArgs.clientId,
161
234
  token_endpoint_auth_method: "none"
162
- }), commonJs.createAuthorizationServer(clientArgs.ctxPath ?? "/multipass", clientArgs.foundryUrl), expect.any(Function), expect.anything(), expect.any(Function));
235
+ }), commonJs.createAuthorizationServer(clientArgs.ctxPath ?? "/multipass", clientArgs.foundryUrl), expect.any(Function), expect.anything(), expect.any(Function), undefined);
163
236
  });
164
237
  describe.each([{
165
238
  localStorage: {
@@ -214,22 +287,7 @@ describe(createPublicOauthClient, () => {
214
287
  expect(mockWindow.history.replaceState).toHaveBeenCalledWith({}, "", clientArgs.loginPage);
215
288
  return;
216
289
  }
217
- // we assume window.location.assign will take you away therefore we
218
- // also have to expect in this scenario that the thrown error happens
219
- await expect(tokenPromise).rejects.toThrowError(new Error("Unable to redirect"));
220
- expect(mockWindow.location.assign).toHaveBeenCalledOnce();
221
- const url = new URL(mockWindow.location.assign.mock.calls[0][0]);
222
- expect(url.origin).toEqual(clientArgs.foundryUrl);
223
- expect(url.pathname).toEqual("/multipass/api/oauth2/authorize");
224
- expect(Object.fromEntries(url.searchParams.entries())).toEqual(expect.objectContaining({
225
- client_id: clientArgs.clientId,
226
- code_challenge: expect.any(String),
227
- redirect_uri: clientArgs.redirectUrl,
228
- response_type: "code",
229
- code_challenge_method: "S256",
230
- scope: "offline_access api:read-data api:write-data",
231
- state: expect.any(String)
232
- }));
290
+ await expectRedirectToMultipass(tokenPromise);
233
291
  });
234
292
  }
235
293
  }
@@ -1 +1 @@
1
- {"version":3,"file":"publicOauth.test.js","names":["afterAll","afterEach","beforeAll","beforeEach","describe","expect","it","vi","commonJs","createPublicOauthClient","hoistedMocks","hoisted","makeTokenAndSaveRefresh","fn","mock","importOriginal","original","default","ms","opts","common","args","result","readLocal","spyOn","readSession","DEFAULT_CUR_URL","URL","fetchFn","mockWindow","location","toString","assign","href","pathname","history","replaceState","mockLocalStorage","setItem","getItem","removeItem","mockSessionStorage","restoreAllMocks","mockRestore","clearAllMocks","mockReset","stubGlobal","unstubAllGlobals","BASE_CLIENT_ARGS","clientId","foundryUrl","redirectUrl","fullLoginUrl","each","name","currentUrl","clientArgs","should","redirectToLoginPage","loginPage","client","useHistory","postLoginPage","scopes","ctxPath","mocked","toHaveBeenCalledWith","objectContaining","client_id","token_endpoint_auth_method","createAuthorizationServer","any","Function","anything","localStorage","refresh_token","sessionStorage","codeVerifier","state","oldUrl","initialState","ACCESS_TOKEN","Math","random","substring","mockImplementation","access_token","expires_at","Date","now","expires_in","Object","keys","length","tokenPromise","toBeCalledTimes","resolves","toBeUndefined","toBeCalledWith","JSON","stringify","window","rejects","toThrowError","Error","toHaveBeenCalledOnce","url","calls","origin","toEqual","fromEntries","searchParams","entries","code_challenge","String","redirect_uri","response_type","code_challenge_method","scope","toHaveBeenCalledTimes","undefined"],"sources":["publicOauth.test.js"],"sourcesContent":["/*\n * Copyright 2024 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* eslint-disable @typescript-eslint/consistent-type-imports */\nimport { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi, } from \"vitest\";\nimport * as commonJs from \"./common.js\";\nimport { createPublicOauthClient } from \"./createPublicOauthClient.js\";\nconst hoistedMocks = vi.hoisted(() => {\n return {\n makeTokenAndSaveRefresh: vi.fn(),\n };\n});\nvi.mock(\"delay\", async (importOriginal) => {\n const original = await importOriginal();\n return {\n default: vi.fn((ms, opts) => {\n // speed up the tests\n return original.default(ms / 100, opts);\n }),\n };\n});\nvi.mock(\"./common.js\", async (importOriginal) => {\n const original = await importOriginal();\n return {\n ...original,\n common: vi.fn((...args) => {\n const result = original.common(...args);\n return {\n ...result,\n makeTokenAndSaveRefresh: hoistedMocks.makeTokenAndSaveRefresh,\n };\n }),\n readLocal: vi.spyOn(original, \"readLocal\"),\n readSession: vi.spyOn(original, \"readSession\"),\n // vi.fn(original.readLocal),\n };\n});\nvi.mock(\"oauth4webapi\");\ndescribe(createPublicOauthClient, () => {\n const DEFAULT_CUR_URL = new URL(\"https://fauxurl\");\n const fetchFn = vi.fn();\n const mockWindow = {\n location: {\n toString: vi.fn(() => DEFAULT_CUR_URL),\n assign: vi.fn(),\n href: DEFAULT_CUR_URL.href,\n pathname: DEFAULT_CUR_URL.pathname,\n },\n history: {\n replaceState: vi.fn(),\n },\n };\n const mockLocalStorage = {\n setItem: vi.fn(),\n getItem: vi.fn(),\n removeItem: vi.fn(),\n };\n const mockSessionStorage = {\n setItem: vi.fn(),\n getItem: vi.fn(),\n removeItem: vi.fn(),\n };\n beforeEach((context) => {\n vi.restoreAllMocks();\n fetchFn.mockRestore();\n });\n afterEach((context) => {\n vi.clearAllMocks();\n fetchFn.mockReset();\n });\n beforeAll(() => {\n vi.stubGlobal(\"window\", mockWindow);\n vi.stubGlobal(\"localStorage\", mockLocalStorage);\n vi.stubGlobal(\"sessionStorage\", mockSessionStorage);\n });\n afterAll(() => {\n vi.unstubAllGlobals();\n });\n const BASE_CLIENT_ARGS = {\n clientId: \"this-would-be-client-id\",\n foundryUrl: \"https://a.foundry.url.local\",\n redirectUrl: \"https://my.redirect.url.local\",\n fetchFn,\n };\n const fullLoginUrl = new URL(\"/loginPage\", DEFAULT_CUR_URL);\n describe.each([\n {\n name: \"Basic Usage\",\n currentUrl: DEFAULT_CUR_URL,\n clientArgs: {\n ...BASE_CLIENT_ARGS,\n },\n should: {\n redirectToLoginPage: false,\n },\n },\n {\n name: \"Base w/ full loginPage and curUrl is root\",\n currentUrl: DEFAULT_CUR_URL,\n clientArgs: {\n ...BASE_CLIENT_ARGS,\n loginPage: fullLoginUrl.toString(),\n },\n should: {\n redirectToLoginPage: true,\n },\n },\n {\n name: \"Base w/ full loginPage and curUrl is login page\",\n currentUrl: fullLoginUrl,\n clientArgs: {\n ...BASE_CLIENT_ARGS,\n loginPage: fullLoginUrl.toString(),\n },\n should: {\n redirectToLoginPage: false,\n },\n },\n {\n name: \"Base w/ short loginPage and curUrl is root\",\n currentUrl: DEFAULT_CUR_URL,\n clientArgs: {\n ...BASE_CLIENT_ARGS,\n loginPage: \"/loginPage\",\n },\n should: {\n redirectToLoginPage: true,\n },\n },\n {\n name: \"Base w/ short loginPage and curUrl is loginPage\",\n currentUrl: new URL(\"/loginPage\", DEFAULT_CUR_URL),\n clientArgs: {\n ...BASE_CLIENT_ARGS,\n loginPage: \"/loginPage\",\n },\n should: {\n redirectToLoginPage: false,\n },\n },\n ])(\"$name\", ({ clientArgs, currentUrl, should }) => {\n let client;\n beforeEach(() => {\n client = createPublicOauthClient(clientArgs.clientId, clientArgs.foundryUrl, clientArgs.redirectUrl, clientArgs.useHistory, clientArgs.loginPage, clientArgs.postLoginPage, clientArgs.scopes, clientArgs.fetchFn, clientArgs.ctxPath);\n mockWindow.location.href = new URL(currentUrl).href;\n mockWindow.location.pathname = new URL(currentUrl).pathname;\n });\n it(\"calls common with expected values\", () => {\n expect(vi.mocked(commonJs.common)).toHaveBeenCalledWith(expect.objectContaining({\n client_id: clientArgs.clientId,\n token_endpoint_auth_method: \"none\",\n }), commonJs.createAuthorizationServer(clientArgs.ctxPath ?? \"/multipass\", clientArgs.foundryUrl), expect.any(Function), expect.anything(), expect.any(Function));\n });\n describe.each([\n {\n localStorage: {\n refresh_token: \"a-refresh-token\",\n },\n sessionStorage: {},\n },\n {\n localStorage: {},\n sessionStorage: {\n codeVerifier: \"hi\",\n state: \"mom\",\n oldUrl: \"https://someoldurl.local\",\n },\n },\n { localStorage: {}, sessionStorage: {} },\n ])(\"Initial Local State: %s\", (initialState) => {\n const ACCESS_TOKEN = (Math.random() + 1).toString(36).substring(7);\n beforeEach(() => {\n vi.mocked(commonJs.readLocal).mockImplementation(() => initialState.localStorage);\n vi.mocked(commonJs.readSession).mockImplementation(() => initialState.sessionStorage);\n hoistedMocks.makeTokenAndSaveRefresh.mockImplementation(() => ({\n access_token: ACCESS_TOKEN,\n expires_at: Date.now(),\n expires_in: 10000,\n }));\n });\n if (Object.keys(initialState.localStorage).length === 0\n && Object.keys(initialState.sessionStorage).length === 0) {\n if (should.redirectToLoginPage) {\n it(\"redirects to login page\", async () => {\n const tokenPromise = client();\n expect(vi.mocked(commonJs.common)).toBeCalledTimes(1);\n if (should.redirectToLoginPage) {\n // expect save local\n await expect(tokenPromise).resolves.toBeUndefined();\n expect(mockSessionStorage.setItem).toBeCalledWith(`@osdk/oauth : refresh : ${clientArgs.clientId}`, JSON.stringify({ oldUrl: window.location.toString() }));\n expect(mockWindow.history.replaceState).toHaveBeenCalledWith({}, \"\", clientArgs.loginPage);\n return;\n }\n });\n }\n else {\n it(\"redirects to multipass\", async () => {\n const tokenPromise = client();\n expect(vi.mocked(commonJs.common)).toBeCalledTimes(1);\n if (should.redirectToLoginPage) {\n // expect save local\n await expect(tokenPromise).resolves.toBeUndefined();\n expect(mockSessionStorage.setItem).toBeCalledWith(`@osdk/oauth : refresh : ${clientArgs.clientId}`, JSON.stringify({ oldUrl: window.location.toString() }));\n expect(mockWindow.history.replaceState).toHaveBeenCalledWith({}, \"\", clientArgs.loginPage);\n return;\n }\n // we assume window.location.assign will take you away therefore we\n // also have to expect in this scenario that the thrown error happens\n await expect(tokenPromise)\n .rejects.toThrowError(new Error(\"Unable to redirect\"));\n expect(mockWindow.location.assign).toHaveBeenCalledOnce();\n const url = new URL(mockWindow.location.assign.mock.calls[0][0]);\n expect(url.origin).toEqual(clientArgs.foundryUrl);\n expect(url.pathname).toEqual(\"/multipass/api/oauth2/authorize\");\n expect(Object.fromEntries(url.searchParams.entries())).toEqual(expect.objectContaining({\n client_id: clientArgs.clientId,\n code_challenge: expect.any(String),\n redirect_uri: clientArgs.redirectUrl,\n response_type: \"code\",\n code_challenge_method: \"S256\",\n scope: \"offline_access api:read-data api:write-data\",\n state: expect.any(String),\n }));\n });\n }\n }\n if (initialState.sessionStorage.codeVerifier) {\n it(\"tries to auth with return results\", async () => {\n await expect(client()).resolves.toEqual(ACCESS_TOKEN);\n expect(hoistedMocks.makeTokenAndSaveRefresh).toHaveBeenCalledTimes(1);\n expect(hoistedMocks.makeTokenAndSaveRefresh).toHaveBeenCalledWith(undefined, // this is only because we didn't mock out the internals\n \"signIn\");\n expect(mockWindow.history.replaceState).toHaveBeenCalledTimes(1);\n expect(mockWindow.history.replaceState).toBeCalledWith(expect.anything(), expect.anything(), initialState.sessionStorage.oldUrl);\n });\n }\n if (initialState.localStorage.refresh_token) {\n it(\"refreshes\", async () => {\n await expect(client()).resolves.toEqual(ACCESS_TOKEN);\n expect(hoistedMocks.makeTokenAndSaveRefresh).toHaveBeenCalledTimes(1);\n expect(hoistedMocks.makeTokenAndSaveRefresh).toHaveBeenCalledWith(undefined, // this is only because we didn't mock out the internals\n \"refresh\");\n });\n }\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"publicOauth.test.js","names":["afterAll","afterEach","beforeAll","beforeEach","describe","expect","it","vi","commonJs","createPublicOauthClient","hoistedMocks","hoisted","makeTokenAndSaveRefresh","fn","mock","importOriginal","original","default","ms","opts","common","args","result","readLocal","spyOn","readSession","DEFAULT_CUR_URL","URL","fetchFn","mockWindow","location","toString","assign","href","pathname","history","replaceState","mockLocalStorage","setItem","getItem","removeItem","mockSessionStorage","restoreAllMocks","mockRestore","clearAllMocks","mockReset","stubGlobal","unstubAllGlobals","BASE_CLIENT_ARGS","clientId","foundryUrl","redirectUrl","fullLoginUrl","setupWindowLocation","currentUrl","setupLocalState","initialLocalState","mocked","mockImplementation","client","clientArgs","setupClient","clientArgs_","refreshTokenMarker","useHistory","loginPage","postLoginPage","scopes","ctxPath","undefined","expectRedirectToMultipass","tokenPromise","rejects","toThrowError","Error","toHaveBeenCalledOnce","url","calls","origin","toEqual","Object","fromEntries","searchParams","entries","objectContaining","client_id","code_challenge","any","String","redirect_uri","response_type","code_challenge_method","scope","state","refresh_token","mockImplementationOnce","access_token","expires_at","Date","now","expires_in","resolves","toBeCalledTimes","each","name","should","redirectToLoginPage","toHaveBeenCalledWith","token_endpoint_auth_method","createAuthorizationServer","Function","anything","localStorage","sessionStorage","codeVerifier","oldUrl","initialState","ACCESS_TOKEN","Math","random","substring","keys","length","toBeUndefined","toBeCalledWith","JSON","stringify","window","toHaveBeenCalledTimes"],"sources":["publicOauth.test.js"],"sourcesContent":["/*\n * Copyright 2024 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* eslint-disable @typescript-eslint/consistent-type-imports */\nimport { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi, } from \"vitest\";\nimport * as commonJs from \"./common.js\";\nimport { createPublicOauthClient } from \"./createPublicOauthClient.js\";\nconst hoistedMocks = vi.hoisted(() => {\n return {\n makeTokenAndSaveRefresh: vi.fn(),\n };\n});\nvi.mock(\"delay\", async (importOriginal) => {\n const original = await importOriginal();\n return {\n default: vi.fn((ms, opts) => {\n // speed up the tests\n return original.default(ms / 100, opts);\n }),\n };\n});\nvi.mock(\"./common.js\", async (importOriginal) => {\n const original = await importOriginal();\n return {\n ...original,\n common: vi.fn((...args) => {\n const result = original.common(...args);\n return {\n ...result,\n makeTokenAndSaveRefresh: hoistedMocks.makeTokenAndSaveRefresh,\n };\n }),\n readLocal: vi.spyOn(original, \"readLocal\"),\n readSession: vi.spyOn(original, \"readSession\"),\n // vi.fn(original.readLocal),\n };\n});\nvi.mock(\"oauth4webapi\");\ndescribe(createPublicOauthClient, () => {\n const DEFAULT_CUR_URL = new URL(\"https://fauxurl\");\n const fetchFn = vi.fn();\n const mockWindow = {\n location: {\n toString: vi.fn(() => DEFAULT_CUR_URL),\n assign: vi.fn(),\n href: DEFAULT_CUR_URL.href,\n pathname: DEFAULT_CUR_URL.pathname,\n },\n history: {\n replaceState: vi.fn(),\n },\n };\n const mockLocalStorage = {\n setItem: vi.fn(),\n getItem: vi.fn(),\n removeItem: vi.fn(),\n };\n const mockSessionStorage = {\n setItem: vi.fn(),\n getItem: vi.fn(),\n removeItem: vi.fn(),\n };\n beforeEach((context) => {\n vi.restoreAllMocks();\n fetchFn.mockRestore();\n });\n afterEach((context) => {\n vi.clearAllMocks();\n fetchFn.mockReset();\n });\n beforeAll(() => {\n vi.stubGlobal(\"window\", mockWindow);\n vi.stubGlobal(\"localStorage\", mockLocalStorage);\n vi.stubGlobal(\"sessionStorage\", mockSessionStorage);\n });\n afterAll(() => {\n vi.unstubAllGlobals();\n });\n const BASE_CLIENT_ARGS = {\n clientId: \"this-would-be-client-id\",\n foundryUrl: \"https://a.foundry.url.local\",\n redirectUrl: \"https://my.redirect.url.local\",\n fetchFn,\n };\n const fullLoginUrl = new URL(\"/loginPage\", DEFAULT_CUR_URL);\n function setupWindowLocation(currentUrl) {\n mockWindow.location.href = new URL(currentUrl).href;\n mockWindow.location.pathname = new URL(currentUrl).pathname;\n }\n function setupLocalState(initialLocalState) {\n vi.mocked(commonJs.readLocal).mockImplementation(() => initialLocalState);\n }\n let client;\n let clientArgs;\n function setupClient(clientArgs_) {\n clientArgs = clientArgs_;\n if (clientArgs.refreshTokenMarker) {\n client = createPublicOauthClient(clientArgs.clientId, clientArgs.foundryUrl, clientArgs.redirectUrl, clientArgs);\n }\n else {\n client = createPublicOauthClient(clientArgs.clientId, clientArgs.foundryUrl, clientArgs.redirectUrl, clientArgs.useHistory, clientArgs.loginPage, clientArgs.postLoginPage, clientArgs.scopes, clientArgs.fetchFn, clientArgs.ctxPath);\n }\n }\n beforeEach((context) => {\n // prevents mistakes like forgetting to initialize the client with an\n // old value around\n client = undefined;\n clientArgs = undefined;\n });\n async function expectRedirectToMultipass(tokenPromise) {\n // we assume window.location.assign will take you away therefore we\n // also have to expect in this scenario that the thrown error happens\n await expect(tokenPromise)\n .rejects.toThrowError(new Error(\"Unable to redirect\"));\n expect(mockWindow.location.assign).toHaveBeenCalledOnce();\n const url = new URL(mockWindow.location.assign.mock.calls[0][0]);\n expect(url.origin).toEqual(clientArgs.foundryUrl);\n expect(url.pathname).toEqual(\"/multipass/api/oauth2/authorize\");\n expect(Object.fromEntries(url.searchParams.entries())).toEqual(expect.objectContaining({\n client_id: clientArgs.clientId,\n code_challenge: expect.any(String),\n redirect_uri: clientArgs.redirectUrl,\n response_type: \"code\",\n code_challenge_method: \"S256\",\n scope: \"offline_access api:read-data api:write-data\",\n state: expect.any(String),\n }));\n }\n describe(\"refresh token marker\", () => {\n beforeEach(() => {\n setupWindowLocation(\"https://foundry.local\");\n });\n it(\"should not allow refresh if the refresh markers do not match\", async () => {\n setupLocalState({\n refresh_token: \"refreshToken\",\n refreshTokenMarker: \"not-the-right-marker\",\n });\n setupClient({\n ...BASE_CLIENT_ARGS,\n refreshTokenMarker: \"marker\",\n });\n await expectRedirectToMultipass(client());\n });\n it(\"should try to refresh if refresh tokens do match\", async () => {\n setupLocalState({\n refresh_token: \"refreshToken\",\n refreshTokenMarker: \"marker\",\n });\n setupClient({\n ...BASE_CLIENT_ARGS,\n refreshTokenMarker: \"marker\",\n });\n hoistedMocks.makeTokenAndSaveRefresh.mockImplementationOnce(() => ({\n access_token: \"some token\",\n expires_at: Date.now(),\n expires_in: 10000,\n }));\n const tokenPromise = client();\n await expect(tokenPromise).resolves.toEqual(\"some token\");\n expect(hoistedMocks.makeTokenAndSaveRefresh).toBeCalledTimes(1);\n });\n });\n describe.each([\n {\n name: \"Basic Usage\",\n currentUrl: DEFAULT_CUR_URL,\n clientArgs: {\n ...BASE_CLIENT_ARGS,\n },\n should: {\n redirectToLoginPage: false,\n },\n },\n {\n name: \"Base w/ full loginPage and curUrl is root\",\n currentUrl: DEFAULT_CUR_URL,\n clientArgs: {\n ...BASE_CLIENT_ARGS,\n loginPage: fullLoginUrl.toString(),\n },\n should: {\n redirectToLoginPage: true,\n },\n },\n {\n name: \"Base w/ full loginPage and curUrl is login page\",\n currentUrl: fullLoginUrl,\n clientArgs: {\n ...BASE_CLIENT_ARGS,\n loginPage: fullLoginUrl.toString(),\n },\n should: {\n redirectToLoginPage: false,\n },\n },\n {\n name: \"Base w/ short loginPage and curUrl is root\",\n currentUrl: DEFAULT_CUR_URL,\n clientArgs: {\n ...BASE_CLIENT_ARGS,\n loginPage: \"/loginPage\",\n },\n should: {\n redirectToLoginPage: true,\n },\n },\n {\n name: \"Base w/ short loginPage and curUrl is loginPage\",\n currentUrl: new URL(\"/loginPage\", DEFAULT_CUR_URL),\n clientArgs: {\n ...BASE_CLIENT_ARGS,\n loginPage: \"/loginPage\",\n },\n should: {\n redirectToLoginPage: false,\n },\n },\n ])(\"$name\", ({ clientArgs, currentUrl, should }) => {\n beforeEach(() => {\n setupClient(clientArgs);\n setupWindowLocation(currentUrl.toString());\n });\n it(\"calls common with expected values\", () => {\n expect(vi.mocked(commonJs.common)).toHaveBeenCalledWith(expect.objectContaining({\n client_id: clientArgs.clientId,\n token_endpoint_auth_method: \"none\",\n }), commonJs.createAuthorizationServer(clientArgs.ctxPath ?? \"/multipass\", clientArgs.foundryUrl), expect.any(Function), expect.anything(), expect.any(Function), undefined);\n });\n describe.each([\n {\n localStorage: {\n refresh_token: \"a-refresh-token\",\n },\n sessionStorage: {},\n },\n {\n localStorage: {},\n sessionStorage: {\n codeVerifier: \"hi\",\n state: \"mom\",\n oldUrl: \"https://someoldurl.local\",\n },\n },\n { localStorage: {}, sessionStorage: {} },\n ])(\"Initial Local State: %s\", (initialState) => {\n const ACCESS_TOKEN = (Math.random() + 1).toString(36).substring(7);\n beforeEach(() => {\n vi.mocked(commonJs.readLocal).mockImplementation(() => initialState.localStorage);\n vi.mocked(commonJs.readSession).mockImplementation(() => initialState.sessionStorage);\n hoistedMocks.makeTokenAndSaveRefresh.mockImplementation(() => ({\n access_token: ACCESS_TOKEN,\n expires_at: Date.now(),\n expires_in: 10000,\n }));\n });\n if (Object.keys(initialState.localStorage).length === 0\n && Object.keys(initialState.sessionStorage).length === 0) {\n if (should.redirectToLoginPage) {\n it(\"redirects to login page\", async () => {\n const tokenPromise = client();\n expect(vi.mocked(commonJs.common)).toBeCalledTimes(1);\n if (should.redirectToLoginPage) {\n // expect save local\n await expect(tokenPromise).resolves.toBeUndefined();\n expect(mockSessionStorage.setItem).toBeCalledWith(`@osdk/oauth : refresh : ${clientArgs.clientId}`, JSON.stringify({ oldUrl: window.location.toString() }));\n expect(mockWindow.history.replaceState).toHaveBeenCalledWith({}, \"\", clientArgs.loginPage);\n return;\n }\n });\n }\n else {\n it(\"redirects to multipass\", async () => {\n const tokenPromise = client();\n expect(vi.mocked(commonJs.common)).toBeCalledTimes(1);\n if (should.redirectToLoginPage) {\n // expect save local\n await expect(tokenPromise).resolves.toBeUndefined();\n expect(mockSessionStorage.setItem).toBeCalledWith(`@osdk/oauth : refresh : ${clientArgs.clientId}`, JSON.stringify({ oldUrl: window.location.toString() }));\n expect(mockWindow.history.replaceState).toHaveBeenCalledWith({}, \"\", clientArgs.loginPage);\n return;\n }\n await expectRedirectToMultipass(tokenPromise);\n });\n }\n }\n if (initialState.sessionStorage.codeVerifier) {\n it(\"tries to auth with return results\", async () => {\n await expect(client()).resolves.toEqual(ACCESS_TOKEN);\n expect(hoistedMocks.makeTokenAndSaveRefresh).toHaveBeenCalledTimes(1);\n expect(hoistedMocks.makeTokenAndSaveRefresh).toHaveBeenCalledWith(undefined, // this is only because we didn't mock out the internals\n \"signIn\");\n expect(mockWindow.history.replaceState).toHaveBeenCalledTimes(1);\n expect(mockWindow.history.replaceState).toBeCalledWith(expect.anything(), expect.anything(), initialState.sessionStorage.oldUrl);\n });\n }\n if (initialState.localStorage.refresh_token) {\n it(\"refreshes\", async () => {\n await expect(client()).resolves.toEqual(ACCESS_TOKEN);\n expect(hoistedMocks.makeTokenAndSaveRefresh).toHaveBeenCalledTimes(1);\n expect(hoistedMocks.makeTokenAndSaveRefresh).toHaveBeenCalledWith(undefined, // this is only because we didn't mock out the internals\n \"refresh\");\n });\n }\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,8 @@
1
1
  import type { PublicOauthClientOptions } from "./createPublicOauthClient.js";
2
- export type ProcessedPublicOauthClientOptions = Omit<Required<PublicOauthClientOptions>, "loginPage"> & {
2
+ interface ProcessedPublicOauthClientOptions extends Omit<Required<PublicOauthClientOptions>, "loginPage" | "refreshTokenMarker"> {
3
3
  loginPage?: string;
4
- };
4
+ refreshTokenMarker?: string;
5
+ }
5
6
  export declare function processOptionsAndAssignDefaults(url: string, redirect_uri: string, useHistory?: boolean | PublicOauthClientOptions, loginPage?: string, postLoginPage?: string, scopes?: string[], fetchFn?: typeof globalThis.fetch, ctxPath?: string): ProcessedPublicOauthClientOptions;
7
+ export {};
6
8
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAE7E,MAAM,MAAM,iCAAiC,GACzC,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,WAAW,CAAC,GACrD;IACA,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEJ,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,OAAO,GAAG,wBAAwB,EAC/C,SAAS,CAAC,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,MAAM,EACtB,MAAM,CAAC,EAAE,MAAM,EAAE,EACjB,OAAO,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,EACjC,OAAO,CAAC,EAAE,MAAM,GACf,iCAAiC,CAgCnC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAE7E,UAAU,iCACR,SACE,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,WAAW,GAAG,oBAAoB,CAAC;IAE9E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,OAAO,GAAG,wBAAwB,EAC/C,SAAS,CAAC,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,MAAM,EACtB,MAAM,CAAC,EAAE,MAAM,EAAE,EACjB,OAAO,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,EACjC,OAAO,CAAC,EAAE,MAAM,GACf,iCAAiC,CAiCnC"}
@@ -38,7 +38,8 @@ export function processOptionsAndAssignDefaults(url, redirect_uri, useHistory, l
38
38
  postLoginPage: options.postLoginPage || window.location.toString(),
39
39
  scopes: options.scopes ?? ["api:read-data", "api:write-data"],
40
40
  fetchFn: options.fetchFn ?? globalThis.fetch,
41
- ctxPath: options.ctxPath ?? "multipass"
41
+ ctxPath: options.ctxPath ?? "multipass",
42
+ refreshTokenMarker: options.refreshTokenMarker
42
43
  };
43
44
  }
44
45
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["invariant","processOptionsAndAssignDefaults","url","redirect_uri","useHistory","loginPage","postLoginPage","scopes","fetchFn","ctxPath","options","process","env","NODE_ENV","window","location","toString","globalThis","fetch"],"sources":["utils.js"],"sourcesContent":["/*\n * Copyright 2024 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport invariant from \"tiny-invariant\";\nexport function processOptionsAndAssignDefaults(url, redirect_uri, useHistory, loginPage, postLoginPage, scopes, fetchFn, ctxPath) {\n let options = {};\n if (typeof useHistory === \"object\") {\n invariant(!loginPage && !postLoginPage && !scopes && !fetchFn && !ctxPath, \"If useHistory is an object, other options should not be provided\");\n options = useHistory;\n }\n else {\n options = {\n useHistory,\n loginPage,\n postLoginPage,\n scopes,\n fetchFn,\n ctxPath,\n };\n }\n invariant(url, \"url is required\");\n invariant(redirect_uri, \"redirectUrl is required\");\n // Assign defaults\n return {\n useHistory: options.useHistory ?? true,\n loginPage: options.loginPage,\n postLoginPage: options.postLoginPage || window.location.toString(),\n scopes: options.scopes ?? [\"api:read-data\", \"api:write-data\"],\n fetchFn: options.fetchFn ?? globalThis.fetch,\n ctxPath: options.ctxPath ?? \"multipass\",\n };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAOA,SAAS,MAAM,gBAAgB;AACtC,OAAO,SAASC,+BAA+BA,CAACC,GAAG,EAAEC,YAAY,EAAEC,UAAU,EAAEC,SAAS,EAAEC,aAAa,EAAEC,MAAM,EAAEC,OAAO,EAAEC,OAAO,EAAE;EAC/H,IAAIC,OAAO,GAAG,CAAC,CAAC;EAChB,IAAI,OAAON,UAAU,KAAK,QAAQ,EAAE;IAChC,EAAU,CAACC,SAAS,IAAI,CAACC,aAAa,IAAI,CAACC,MAAM,IAAI,CAACC,OAAO,IAAI,CAACC,OAAO,IAAAE,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAAzEb,SAAS,QAAkE,kEAAkE,IAA7IA,SAAS;IACTU,OAAO,GAAGN,UAAU;EACxB,CAAC,MACI;IACDM,OAAO,GAAG;MACNN,UAAU;MACVC,SAAS;MACTC,aAAa;MACbC,MAAM;MACNC,OAAO;MACPC;IACJ,CAAC;EACL;EACA,CAAUP,GAAG,GAAAS,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAAbb,SAAS,QAAM,iBAAiB,IAAhCA,SAAS;EACT,CAAUG,YAAY,GAAAQ,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAAtBb,SAAS,QAAe,yBAAyB,IAAjDA,SAAS;EACT;EACA,OAAO;IACHI,UAAU,EAAEM,OAAO,CAACN,UAAU,IAAI,IAAI;IACtCC,SAAS,EAAEK,OAAO,CAACL,SAAS;IAC5BC,aAAa,EAAEI,OAAO,CAACJ,aAAa,IAAIQ,MAAM,CAACC,QAAQ,CAACC,QAAQ,CAAC,CAAC;IAClET,MAAM,EAAEG,OAAO,CAACH,MAAM,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC;IAC7DC,OAAO,EAAEE,OAAO,CAACF,OAAO,IAAIS,UAAU,CAACC,KAAK;IAC5CT,OAAO,EAAEC,OAAO,CAACD,OAAO,IAAI;EAChC,CAAC;AACL","ignoreList":[]}
1
+ {"version":3,"file":"utils.js","names":["invariant","processOptionsAndAssignDefaults","url","redirect_uri","useHistory","loginPage","postLoginPage","scopes","fetchFn","ctxPath","options","process","env","NODE_ENV","window","location","toString","globalThis","fetch","refreshTokenMarker"],"sources":["utils.js"],"sourcesContent":["/*\n * Copyright 2024 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport invariant from \"tiny-invariant\";\nexport function processOptionsAndAssignDefaults(url, redirect_uri, useHistory, loginPage, postLoginPage, scopes, fetchFn, ctxPath) {\n let options = {};\n if (typeof useHistory === \"object\") {\n invariant(!loginPage && !postLoginPage && !scopes && !fetchFn && !ctxPath, \"If useHistory is an object, other options should not be provided\");\n options = useHistory;\n }\n else {\n options = {\n useHistory,\n loginPage,\n postLoginPage,\n scopes,\n fetchFn,\n ctxPath,\n };\n }\n invariant(url, \"url is required\");\n invariant(redirect_uri, \"redirectUrl is required\");\n // Assign defaults\n return {\n useHistory: options.useHistory ?? true,\n loginPage: options.loginPage,\n postLoginPage: options.postLoginPage || window.location.toString(),\n scopes: options.scopes ?? [\"api:read-data\", \"api:write-data\"],\n fetchFn: options.fetchFn ?? globalThis.fetch,\n ctxPath: options.ctxPath ?? \"multipass\",\n refreshTokenMarker: options.refreshTokenMarker,\n };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAOA,SAAS,MAAM,gBAAgB;AACtC,OAAO,SAASC,+BAA+BA,CAACC,GAAG,EAAEC,YAAY,EAAEC,UAAU,EAAEC,SAAS,EAAEC,aAAa,EAAEC,MAAM,EAAEC,OAAO,EAAEC,OAAO,EAAE;EAC/H,IAAIC,OAAO,GAAG,CAAC,CAAC;EAChB,IAAI,OAAON,UAAU,KAAK,QAAQ,EAAE;IAChC,EAAU,CAACC,SAAS,IAAI,CAACC,aAAa,IAAI,CAACC,MAAM,IAAI,CAACC,OAAO,IAAI,CAACC,OAAO,IAAAE,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAAzEb,SAAS,QAAkE,kEAAkE,IAA7IA,SAAS;IACTU,OAAO,GAAGN,UAAU;EACxB,CAAC,MACI;IACDM,OAAO,GAAG;MACNN,UAAU;MACVC,SAAS;MACTC,aAAa;MACbC,MAAM;MACNC,OAAO;MACPC;IACJ,CAAC;EACL;EACA,CAAUP,GAAG,GAAAS,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAAbb,SAAS,QAAM,iBAAiB,IAAhCA,SAAS;EACT,CAAUG,YAAY,GAAAQ,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAAtBb,SAAS,QAAe,yBAAyB,IAAjDA,SAAS;EACT;EACA,OAAO;IACHI,UAAU,EAAEM,OAAO,CAACN,UAAU,IAAI,IAAI;IACtCC,SAAS,EAAEK,OAAO,CAACL,SAAS;IAC5BC,aAAa,EAAEI,OAAO,CAACJ,aAAa,IAAIQ,MAAM,CAACC,QAAQ,CAACC,QAAQ,CAAC,CAAC;IAClET,MAAM,EAAEG,OAAO,CAACH,MAAM,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC;IAC7DC,OAAO,EAAEE,OAAO,CAACF,OAAO,IAAIS,UAAU,CAACC,KAAK;IAC5CT,OAAO,EAAEC,OAAO,CAACD,OAAO,IAAI,WAAW;IACvCU,kBAAkB,EAAET,OAAO,CAACS;EAChC,CAAC;AACL","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@osdk/oauth",
3
- "version": "1.1.0-beta.7",
3
+ "version": "1.1.0-beta.8",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -28,8 +28,8 @@
28
28
  "jest-extended": "^4.0.2",
29
29
  "typescript": "~5.5.4",
30
30
  "@osdk/monorepo.api-extractor": "~0.0.0",
31
- "@osdk/monorepo.tsconfig": "~0.0.0",
32
- "@osdk/monorepo.tsup": "~0.0.0"
31
+ "@osdk/monorepo.tsup": "~0.0.0",
32
+ "@osdk/monorepo.tsconfig": "~0.0.0"
33
33
  },
34
34
  "publishConfig": {
35
35
  "access": "public"
@@ -52,6 +52,7 @@
52
52
  "clean": "rm -rf lib dist types build tsconfig.tsbuildinfo",
53
53
  "fix-lint": "eslint . --fix && dprint fmt --config $(find-up dprint.json)",
54
54
  "lint": "eslint . && dprint check --config $(find-up dprint.json)",
55
+ "test": "vitest run --pool=forks",
55
56
  "transpile": "monorepo.tool.transpile"
56
57
  }
57
58
  }