@alwaysmeticulous/client 2.305.0 → 2.307.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.
Files changed (46) hide show
  1. package/dist/__tests__/create-client-with-oauth.spec.js +2 -4
  2. package/dist/__tests__/create-client-with-oauth.spec.js.map +1 -1
  3. package/dist/api/__tests__/agent.api.spec.js +51 -4
  4. package/dist/api/__tests__/agent.api.spec.js.map +1 -1
  5. package/dist/api/__tests__/project-deployments.api.spec.js +5 -5
  6. package/dist/api/__tests__/project-deployments.api.spec.js.map +1 -1
  7. package/dist/api/agent.api.d.ts +31 -12
  8. package/dist/api/agent.api.d.ts.map +1 -1
  9. package/dist/api/agent.api.js +16 -11
  10. package/dist/api/agent.api.js.map +1 -1
  11. package/dist/api/oauth.api.d.ts +32 -0
  12. package/dist/api/oauth.api.d.ts.map +1 -1
  13. package/dist/api/oauth.api.js +40 -3
  14. package/dist/api/oauth.api.js.map +1 -1
  15. package/dist/api/project-deployments.api.d.ts +34 -9
  16. package/dist/api/project-deployments.api.d.ts.map +1 -1
  17. package/dist/api/project-deployments.api.js +32 -10
  18. package/dist/api/project-deployments.api.js.map +1 -1
  19. package/dist/client.d.ts.map +1 -1
  20. package/dist/client.js +17 -28
  21. package/dist/client.js.map +1 -1
  22. package/dist/index.d.ts +5 -3
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +11 -8
  25. package/dist/index.js.map +1 -1
  26. package/dist/oauth/default-project.d.ts +11 -0
  27. package/dist/oauth/default-project.d.ts.map +1 -0
  28. package/dist/oauth/default-project.js +23 -0
  29. package/dist/oauth/default-project.js.map +1 -0
  30. package/dist/oauth/legacy-project-migration.d.ts +19 -0
  31. package/dist/oauth/legacy-project-migration.d.ts.map +1 -0
  32. package/dist/oauth/legacy-project-migration.js +80 -0
  33. package/dist/oauth/legacy-project-migration.js.map +1 -0
  34. package/dist/oauth/legacy-project-migration.spec.d.ts +2 -0
  35. package/dist/oauth/legacy-project-migration.spec.d.ts.map +1 -0
  36. package/dist/oauth/legacy-project-migration.spec.js +81 -0
  37. package/dist/oauth/legacy-project-migration.spec.js.map +1 -0
  38. package/dist/oauth/oauth-token-store.d.ts +0 -7
  39. package/dist/oauth/oauth-token-store.d.ts.map +1 -1
  40. package/dist/oauth/oauth-token-store.js +3 -42
  41. package/dist/oauth/oauth-token-store.js.map +1 -1
  42. package/dist/types/client.types.d.ts +1 -0
  43. package/dist/types/client.types.d.ts.map +1 -1
  44. package/dist/version.d.ts +1 -1
  45. package/dist/version.js +1 -1
  46. package/package.json +2 -2
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="c7e49da8-9122-5869-b62c-7de95f9953a3")}catch(e){}}();
3
+
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.migrateLegacySelectedProjectIfPresent = void 0;
6
+ const fs_1 = require("fs");
7
+ const path_1 = require("path");
8
+ const common_1 = require("@alwaysmeticulous/common");
9
+ const oauth_api_1 = require("../api/oauth.api");
10
+ const client_1 = require("../client");
11
+ // Where the pre-backend CLI stored the selected project.
12
+ const getLegacySelectedProjectFilePath = () => (0, path_1.join)((0, common_1.getMeticulousLocalDataDir)(), "selected-project.json");
13
+ /**
14
+ * One-time migration for CLIs upgrading from the local-file default project
15
+ * (`selected-project.json`) to the backend-persisted per-user setting.
16
+ *
17
+ * When the legacy file is present and the account has no *stored* default
18
+ * server-side (checked with `includeAutoPick: false`, so a transient
19
+ * sole-project auto-pick does not count — see the inline note below), its
20
+ * project is pushed up as the new default. A stored default set on another
21
+ * machine / the web takes precedence. The file is then removed so this runs at
22
+ * most once per machine.
23
+ *
24
+ * Entirely best-effort: any failure (unreadable file, network, older backend)
25
+ * is swallowed and the file left in place to retry — a missed migration just
26
+ * means the user re-runs `auth set-project`, which is the pre-migration status
27
+ * quo. A corrupt file is discarded.
28
+ */
29
+ const migrateLegacySelectedProjectIfPresent = async (apiToken, logger, appInfo) => {
30
+ const filePath = getLegacySelectedProjectFilePath();
31
+ if (!(0, fs_1.existsSync)(filePath)) {
32
+ return;
33
+ }
34
+ let legacyProjectId;
35
+ try {
36
+ const raw = (0, fs_1.readFileSync)(filePath, "utf-8");
37
+ legacyProjectId = JSON.parse(raw).projectId;
38
+ }
39
+ catch {
40
+ // Corrupt/unreadable legacy file — discard it and move on.
41
+ removeLegacyFile(filePath);
42
+ return;
43
+ }
44
+ try {
45
+ if (legacyProjectId) {
46
+ const client = (0, client_1.buildClient)(apiToken, logger, appInfo);
47
+ // Check the *stored* default only (`includeAutoPick: false`): the backend
48
+ // would otherwise transiently auto-pick the sole accessible project, which
49
+ // we'd mistake for a real stored default — skip the migration, delete the
50
+ // file, and silently lose the user's selection once they gain a second
51
+ // project. A stored default (set on another machine / web) still takes
52
+ // precedence and is preserved.
53
+ const { projectId: storedDefault } = await (0, oauth_api_1.getOAuthDefaultProject)(client, {
54
+ includeAutoPick: false,
55
+ });
56
+ if (!storedDefault) {
57
+ await (0, oauth_api_1.setOAuthDefaultProject)(client, legacyProjectId);
58
+ logger.debug(`Migrated local default project ${legacyProjectId} to your Meticulous account settings.`);
59
+ }
60
+ }
61
+ }
62
+ catch {
63
+ // Leave the file in place so a later invocation can retry.
64
+ return;
65
+ }
66
+ removeLegacyFile(filePath);
67
+ };
68
+ exports.migrateLegacySelectedProjectIfPresent = migrateLegacySelectedProjectIfPresent;
69
+ const removeLegacyFile = (filePath) => {
70
+ try {
71
+ if ((0, fs_1.existsSync)(filePath)) {
72
+ (0, fs_1.unlinkSync)(filePath);
73
+ }
74
+ }
75
+ catch {
76
+ // Ignore cleanup errors.
77
+ }
78
+ };
79
+ //# sourceMappingURL=legacy-project-migration.js.map
80
+ //# debugId=c7e49da8-9122-5869-b62c-7de95f9953a3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy-project-migration.js","sources":["../../src/oauth/legacy-project-migration.ts"],"sourceRoot":"","names":[],"mappings":";;;;;AAAA,2BAA0D;AAC1D,+BAA4B;AAC5B,qDAAqE;AAErE,gDAG0B;AAC1B,sCAAwC;AAExC,yDAAyD;AACzD,MAAM,gCAAgC,GAAG,GAAW,EAAE,CACpD,IAAA,WAAI,EAAC,IAAA,kCAAyB,GAAE,EAAE,uBAAuB,CAAC,CAAC;AAE7D;;;;;;;;;;;;;;;GAeG;AACI,MAAM,qCAAqC,GAAG,KAAK,EACxD,QAAgB,EAChB,MAAkB,EAClB,OAAgB,EACD,EAAE;IACjB,MAAM,QAAQ,GAAG,gCAAgC,EAAE,CAAC;IACpD,IAAI,CAAC,IAAA,eAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,IAAI,eAAmC,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAA,iBAAY,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5C,eAAe,GAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC,SAAS,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,2DAA2D;QAC3D,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,IAAA,oBAAW,EAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACtD,0EAA0E;YAC1E,2EAA2E;YAC3E,0EAA0E;YAC1E,uEAAuE;YACvE,uEAAuE;YACvE,+BAA+B;YAC/B,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,MAAM,IAAA,kCAAsB,EAC/D,MAAM,EACN;gBACE,eAAe,EAAE,KAAK;aACvB,CACF,CAAC;YACF,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,IAAA,kCAAsB,EAAC,MAAM,EAAE,eAAe,CAAC,CAAC;gBACtD,MAAM,CAAC,KAAK,CACV,kCAAkC,eAAe,uCAAuC,CACzF,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,2DAA2D;QAC3D,OAAO;IACT,CAAC;IAED,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC,CAAC;AAhDW,QAAA,qCAAqC,yCAgDhD;AAEF,MAAM,gBAAgB,GAAG,CAAC,QAAgB,EAAQ,EAAE;IAClD,IAAI,CAAC;QACH,IAAI,IAAA,eAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,IAAA,eAAU,EAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,yBAAyB;IAC3B,CAAC;AACH,CAAC,CAAC","debugId":"c7e49da8-9122-5869-b62c-7de95f9953a3"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=legacy-project-migration.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy-project-migration.spec.d.ts","sourceRoot":"","sources":["../../src/oauth/legacy-project-migration.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="d956af87-c406-588e-9b08-52ff2ffe5067")}catch(e){}}();
3
+
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ const vitest_1 = require("vitest");
6
+ const legacy_project_migration_1 = require("./legacy-project-migration");
7
+ const mocks = vitest_1.vi.hoisted(() => ({
8
+ existsSync: vitest_1.vi.fn(),
9
+ readFileSync: vitest_1.vi.fn(),
10
+ unlinkSync: vitest_1.vi.fn(),
11
+ getOAuthDefaultProject: vitest_1.vi.fn(),
12
+ setOAuthDefaultProject: vitest_1.vi.fn(),
13
+ buildClient: vitest_1.vi.fn(),
14
+ }));
15
+ vitest_1.vi.mock("fs", () => ({
16
+ existsSync: mocks.existsSync,
17
+ readFileSync: mocks.readFileSync,
18
+ unlinkSync: mocks.unlinkSync,
19
+ }));
20
+ vitest_1.vi.mock("@alwaysmeticulous/common", () => ({
21
+ getMeticulousLocalDataDir: () => "/tmp/meticulous",
22
+ }));
23
+ vitest_1.vi.mock("../api/oauth.api", () => ({
24
+ getOAuthDefaultProject: mocks.getOAuthDefaultProject,
25
+ setOAuthDefaultProject: mocks.setOAuthDefaultProject,
26
+ }));
27
+ vitest_1.vi.mock("../client", () => ({
28
+ buildClient: mocks.buildClient,
29
+ }));
30
+ const logger = { debug: vitest_1.vi.fn() };
31
+ (0, vitest_1.describe)("migrateLegacySelectedProjectIfPresent", () => {
32
+ (0, vitest_1.beforeEach)(() => {
33
+ vitest_1.vi.clearAllMocks();
34
+ mocks.buildClient.mockReturnValue({});
35
+ });
36
+ (0, vitest_1.it)("does nothing when there is no legacy file", async () => {
37
+ mocks.existsSync.mockReturnValue(false);
38
+ await (0, legacy_project_migration_1.migrateLegacySelectedProjectIfPresent)("jwt", logger);
39
+ (0, vitest_1.expect)(mocks.getOAuthDefaultProject).not.toHaveBeenCalled();
40
+ (0, vitest_1.expect)(mocks.setOAuthDefaultProject).not.toHaveBeenCalled();
41
+ });
42
+ (0, vitest_1.it)("migrates the legacy project when no default is stored, checking stored-only state (not the auto-pick)", async () => {
43
+ mocks.existsSync.mockReturnValue(true);
44
+ mocks.readFileSync.mockReturnValue(JSON.stringify({ projectId: "proj-1" }));
45
+ mocks.getOAuthDefaultProject.mockResolvedValue({ projectId: null });
46
+ await (0, legacy_project_migration_1.migrateLegacySelectedProjectIfPresent)("jwt", logger);
47
+ // Regression (item 4): the migration must read the *stored* default only —
48
+ // otherwise a transient sole-project auto-pick reads as a stored default and
49
+ // the legacy file is dropped without migrating.
50
+ (0, vitest_1.expect)(mocks.getOAuthDefaultProject).toHaveBeenCalledWith({}, { includeAutoPick: false });
51
+ (0, vitest_1.expect)(mocks.setOAuthDefaultProject).toHaveBeenCalledWith({}, "proj-1");
52
+ (0, vitest_1.expect)(mocks.unlinkSync).toHaveBeenCalled();
53
+ });
54
+ (0, vitest_1.it)("preserves an existing stored default and does not overwrite it", async () => {
55
+ mocks.existsSync.mockReturnValue(true);
56
+ mocks.readFileSync.mockReturnValue(JSON.stringify({ projectId: "proj-1" }));
57
+ mocks.getOAuthDefaultProject.mockResolvedValue({ projectId: "proj-other" });
58
+ await (0, legacy_project_migration_1.migrateLegacySelectedProjectIfPresent)("jwt", logger);
59
+ (0, vitest_1.expect)(mocks.setOAuthDefaultProject).not.toHaveBeenCalled();
60
+ // File is still removed — a stored default already exists, so there's
61
+ // nothing left to migrate.
62
+ (0, vitest_1.expect)(mocks.unlinkSync).toHaveBeenCalled();
63
+ });
64
+ (0, vitest_1.it)("leaves the file in place when persisting the default fails", async () => {
65
+ mocks.existsSync.mockReturnValue(true);
66
+ mocks.readFileSync.mockReturnValue(JSON.stringify({ projectId: "proj-1" }));
67
+ mocks.getOAuthDefaultProject.mockResolvedValue({ projectId: null });
68
+ mocks.setOAuthDefaultProject.mockRejectedValue(new Error("network"));
69
+ await (0, legacy_project_migration_1.migrateLegacySelectedProjectIfPresent)("jwt", logger);
70
+ (0, vitest_1.expect)(mocks.unlinkSync).not.toHaveBeenCalled();
71
+ });
72
+ (0, vitest_1.it)("discards a corrupt legacy file without calling the backend", async () => {
73
+ mocks.existsSync.mockReturnValue(true);
74
+ mocks.readFileSync.mockReturnValue("not json");
75
+ await (0, legacy_project_migration_1.migrateLegacySelectedProjectIfPresent)("jwt", logger);
76
+ (0, vitest_1.expect)(mocks.getOAuthDefaultProject).not.toHaveBeenCalled();
77
+ (0, vitest_1.expect)(mocks.unlinkSync).toHaveBeenCalled();
78
+ });
79
+ });
80
+ //# sourceMappingURL=legacy-project-migration.spec.js.map
81
+ //# debugId=d956af87-c406-588e-9b08-52ff2ffe5067
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy-project-migration.spec.js","sources":["../../src/oauth/legacy-project-migration.spec.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"d956af87-c406-588e-9b08-52ff2ffe5067"}
@@ -7,11 +7,4 @@ export interface StoredOAuthTokens {
7
7
  export declare const getStoredOAuthTokens: () => StoredOAuthTokens | null;
8
8
  export declare const storeOAuthTokens: (tokens: StoredOAuthTokens) => void;
9
9
  export declare const clearOAuthTokens: () => void;
10
- export declare const getStoredProjectId: () => string | null;
11
- export declare const getStoredProject: () => string | null;
12
- export declare const setStoredProject: ({ project, projectId, }: {
13
- project: string;
14
- projectId: string;
15
- }) => void;
16
- export declare const clearStoredProject: () => void;
17
10
  //# sourceMappingURL=oauth-token-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-token-store.d.ts","sourceRoot":"","sources":["../../src/oauth/oauth-token-store.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AA0BD,eAAO,MAAM,oBAAoB,QAAO,iBAAiB,GAAG,IAU3D,CAAC;AAEF,eAAO,MAAM,gBAAgB,WAAY,iBAAiB,KAAG,IAO5D,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO,IAQnC,CAAC;AAcF,eAAO,MAAM,kBAAkB,QAAO,MAAM,GAAG,IAE9C,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO,MAAM,GAAG,IAE5C,CAAC;AAEF,eAAO,MAAM,gBAAgB,4BAG1B;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB,KAAG,IASH,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAO,IAQrC,CAAC"}
1
+ {"version":3,"file":"oauth-token-store.d.ts","sourceRoot":"","sources":["../../src/oauth/oauth-token-store.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AASD,eAAO,MAAM,oBAAoB,QAAO,iBAAiB,GAAG,IAU3D,CAAC;AAEF,eAAO,MAAM,gBAAgB,WAAY,iBAAiB,KAAG,IAO5D,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO,IAQnC,CAAC"}
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="fb13c44f-d1ea-56a2-9e42-6d8425992f7a")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="0b35ec95-17a4-51ad-8fc0-e555a2a57c7f")}catch(e){}}();
3
3
 
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.clearStoredProject = exports.setStoredProject = exports.getStoredProject = exports.getStoredProjectId = exports.clearOAuthTokens = exports.storeOAuthTokens = exports.getStoredOAuthTokens = void 0;
5
+ exports.clearOAuthTokens = exports.storeOAuthTokens = exports.getStoredOAuthTokens = void 0;
6
6
  const fs_1 = require("fs");
7
7
  const path_1 = require("path");
8
8
  const common_1 = require("@alwaysmeticulous/common");
@@ -11,7 +11,6 @@ const common_1 = require("@alwaysmeticulous/common");
11
11
  // `getMeticulousLocalDataDir`.
12
12
  const getMeticulousDir = () => (0, common_1.getMeticulousLocalDataDir)();
13
13
  const getTokenFilePath = () => (0, path_1.join)(getMeticulousDir(), "oauth-tokens.json");
14
- const getSelectedProjectFilePath = () => (0, path_1.join)(getMeticulousDir(), "selected-project.json");
15
14
  const getStoredOAuthTokens = () => {
16
15
  try {
17
16
  if (!(0, fs_1.existsSync)(getTokenFilePath())) {
@@ -45,43 +44,5 @@ const clearOAuthTokens = () => {
45
44
  }
46
45
  };
47
46
  exports.clearOAuthTokens = clearOAuthTokens;
48
- const getStoredSelectedProject = () => {
49
- try {
50
- if (!(0, fs_1.existsSync)(getSelectedProjectFilePath())) {
51
- return null;
52
- }
53
- const data = (0, fs_1.readFileSync)(getSelectedProjectFilePath(), "utf-8");
54
- return JSON.parse(data);
55
- }
56
- catch {
57
- return null;
58
- }
59
- };
60
- const getStoredProjectId = () => {
61
- return getStoredSelectedProject()?.projectId ?? null;
62
- };
63
- exports.getStoredProjectId = getStoredProjectId;
64
- const getStoredProject = () => {
65
- return getStoredSelectedProject()?.project ?? null;
66
- };
67
- exports.getStoredProject = getStoredProject;
68
- const setStoredProject = ({ project, projectId, }) => {
69
- if (!(0, fs_1.existsSync)(getMeticulousDir())) {
70
- (0, fs_1.mkdirSync)(getMeticulousDir(), { recursive: true });
71
- }
72
- (0, fs_1.writeFileSync)(getSelectedProjectFilePath(), JSON.stringify({ project, projectId }, null, 2), { mode: 0o600 });
73
- };
74
- exports.setStoredProject = setStoredProject;
75
- const clearStoredProject = () => {
76
- try {
77
- if ((0, fs_1.existsSync)(getSelectedProjectFilePath())) {
78
- (0, fs_1.unlinkSync)(getSelectedProjectFilePath());
79
- }
80
- }
81
- catch {
82
- // Ignore errors during cleanup
83
- }
84
- };
85
- exports.clearStoredProject = clearStoredProject;
86
47
  //# sourceMappingURL=oauth-token-store.js.map
87
- //# debugId=fb13c44f-d1ea-56a2-9e42-6d8425992f7a
48
+ //# debugId=0b35ec95-17a4-51ad-8fc0-e555a2a57c7f
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-token-store.js","sources":["../../src/oauth/oauth-token-store.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"fb13c44f-d1ea-56a2-9e42-6d8425992f7a"}
1
+ {"version":3,"file":"oauth-token-store.js","sources":["../../src/oauth/oauth-token-store.ts"],"sourceRoot":"","names":[],"mappings":";;;;;AAAA,2BAMY;AACZ,+BAA4B;AAC5B,qDAAqE;AASrE,0EAA0E;AAC1E,2EAA2E;AAC3E,+BAA+B;AAC/B,MAAM,gBAAgB,GAAG,GAAW,EAAE,CAAC,IAAA,kCAAyB,GAAE,CAAC;AACnE,MAAM,gBAAgB,GAAG,GAAW,EAAE,CACpC,IAAA,WAAI,EAAC,gBAAgB,EAAE,EAAE,mBAAmB,CAAC,CAAC;AAEzC,MAAM,oBAAoB,GAAG,GAA6B,EAAE;IACjE,IAAI,CAAC;QACH,IAAI,CAAC,IAAA,eAAU,EAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,IAAI,GAAG,IAAA,iBAAY,EAAC,gBAAgB,EAAE,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAsB,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAVW,QAAA,oBAAoB,wBAU/B;AAEK,MAAM,gBAAgB,GAAG,CAAC,MAAyB,EAAQ,EAAE;IAClE,IAAI,CAAC,IAAA,eAAU,EAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC;QACpC,IAAA,cAAS,EAAC,gBAAgB,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,IAAA,kBAAa,EAAC,gBAAgB,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;QACjE,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;AACL,CAAC,CAAC;AAPW,QAAA,gBAAgB,oBAO3B;AAEK,MAAM,gBAAgB,GAAG,GAAS,EAAE;IACzC,IAAI,CAAC;QACH,IAAI,IAAA,eAAU,EAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC;YACnC,IAAA,eAAU,EAAC,gBAAgB,EAAE,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;IACjC,CAAC;AACH,CAAC,CAAC;AARW,QAAA,gBAAgB,oBAQ3B","debugId":"0b35ec95-17a4-51ad-8fc0-e555a2a57c7f"}
@@ -15,5 +15,6 @@ export interface MeticulousClient {
15
15
  get<T = any, R = Response<T>>(url: string, config?: RequestConfig<any>): Promise<R>;
16
16
  post<T = any, R = Response<any>>(url: string, data?: T, config?: RequestConfig<any>): Promise<R>;
17
17
  put<T = any, R = Response<any>>(url: string, data?: T, config?: RequestConfig<any>): Promise<R>;
18
+ delete<T = any, R = Response<T>>(url: string, config?: RequestConfig<any>): Promise<R>;
18
19
  }
19
20
  //# sourceMappingURL=client.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.types.d.ts","sourceRoot":"","sources":["../../src/types/client.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,IAAI,CAAC,EAAE,CAAC,CAAC;CACV;AAED,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,GAAG;IAC/B,IAAI,EAAE,CAAC,CAAC;IACR,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EAC1B,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,GAC1B,OAAO,CAAC,CAAC,CAAC,CAAC;IAEd,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,EAC7B,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,CAAC,EACR,MAAM,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,GAC1B,OAAO,CAAC,CAAC,CAAC,CAAC;IAEd,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,EAC5B,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,CAAC,EACR,MAAM,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,GAC1B,OAAO,CAAC,CAAC,CAAC,CAAC;CACf"}
1
+ {"version":3,"file":"client.types.d.ts","sourceRoot":"","sources":["../../src/types/client.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,IAAI,CAAC,EAAE,CAAC,CAAC;CACV;AAED,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,GAAG;IAC/B,IAAI,EAAE,CAAC,CAAC;IACR,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EAC1B,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,GAC1B,OAAO,CAAC,CAAC,CAAC,CAAC;IAEd,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,EAC7B,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,CAAC,EACR,MAAM,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,GAC1B,OAAO,CAAC,CAAC,CAAC,CAAC;IAEd,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,EAC5B,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,CAAC,EACR,MAAM,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,GAC1B,OAAO,CAAC,CAAC,CAAC,CAAC;IAEd,MAAM,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EAC7B,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,GAC1B,OAAO,CAAC,CAAC,CAAC,CAAC;CACf"}
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "2.305.0";
1
+ export declare const VERSION = "2.307.0";
2
2
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -5,6 +5,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.VERSION = void 0;
6
6
  // AUTO-GENERATED by scripts/generate-version.mjs — do not edit by hand.
7
7
  // Regenerated from package.json on every build.
8
- exports.VERSION = "2.305.0";
8
+ exports.VERSION = "2.307.0";
9
9
  //# sourceMappingURL=version.js.map
10
10
  //# debugId=ac10f4cc-7a38-5615-8b9d-956b50ad79da
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alwaysmeticulous/client",
3
- "version": "2.305.0",
3
+ "version": "2.307.0",
4
4
  "description": "Helper methods for using the Meticulous backend API",
5
5
  "license": "ISC",
6
6
  "main": "dist/index.js",
@@ -12,7 +12,7 @@
12
12
  "loglevel": "^1.8.0",
13
13
  "proxy-agent": "^6.4.0",
14
14
  "undici": "^6.24.1",
15
- "@alwaysmeticulous/api": "2.301.0",
15
+ "@alwaysmeticulous/api": "2.307.0",
16
16
  "@alwaysmeticulous/common": "2.301.0"
17
17
  },
18
18
  "author": {