allsquare 0.1.1
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 +16 -0
- package/LICENSE +21 -0
- package/README.md +234 -0
- package/dist/api/client.d.ts +46 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +162 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/contract.d.ts +549 -0
- package/dist/api/contract.d.ts.map +1 -0
- package/dist/api/contract.js +49 -0
- package/dist/api/contract.js.map +1 -0
- package/dist/api/model.d.ts +627 -0
- package/dist/api/model.d.ts.map +1 -0
- package/dist/api/model.js +378 -0
- package/dist/api/model.js.map +1 -0
- package/dist/auth/auth-service.d.ts +34 -0
- package/dist/auth/auth-service.d.ts.map +1 -0
- package/dist/auth/auth-service.js +221 -0
- package/dist/auth/auth-service.js.map +1 -0
- package/dist/auth/browser.d.ts +12 -0
- package/dist/auth/browser.d.ts.map +1 -0
- package/dist/auth/browser.js +50 -0
- package/dist/auth/browser.js.map +1 -0
- package/dist/auth/credential-store.d.ts +28 -0
- package/dist/auth/credential-store.d.ts.map +1 -0
- package/dist/auth/credential-store.js +75 -0
- package/dist/auth/credential-store.js.map +1 -0
- package/dist/auth/installation-store.d.ts +14 -0
- package/dist/auth/installation-store.d.ts.map +1 -0
- package/dist/auth/installation-store.js +122 -0
- package/dist/auth/installation-store.js.map +1 -0
- package/dist/auth/model.d.ts +54 -0
- package/dist/auth/model.d.ts.map +1 -0
- package/dist/auth/model.js +24 -0
- package/dist/auth/model.js.map +1 -0
- package/dist/auth/oauth-callback.d.ts +17 -0
- package/dist/auth/oauth-callback.d.ts.map +1 -0
- package/dist/auth/oauth-callback.js +94 -0
- package/dist/auth/oauth-callback.js.map +1 -0
- package/dist/auth/oauth-client.d.ts +43 -0
- package/dist/auth/oauth-client.d.ts.map +1 -0
- package/dist/auth/oauth-client.js +191 -0
- package/dist/auth/oauth-client.js.map +1 -0
- package/dist/auth/pkce.d.ts +9 -0
- package/dist/auth/pkce.d.ts.map +1 -0
- package/dist/auth/pkce.js +12 -0
- package/dist/auth/pkce.js.map +1 -0
- package/dist/command.d.ts +3 -0
- package/dist/command.d.ts.map +1 -0
- package/dist/command.js +24 -0
- package/dist/command.js.map +1 -0
- package/dist/commands/agent-guide.d.ts +5 -0
- package/dist/commands/agent-guide.d.ts.map +1 -0
- package/dist/commands/agent-guide.js +226 -0
- package/dist/commands/agent-guide.js.map +1 -0
- package/dist/commands/auth.d.ts +5 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +68 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/balances.d.ts +5 -0
- package/dist/commands/balances.d.ts.map +1 -0
- package/dist/commands/balances.js +106 -0
- package/dist/commands/balances.js.map +1 -0
- package/dist/commands/config.d.ts +4 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +16 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/expense-input.d.ts +17 -0
- package/dist/commands/expense-input.d.ts.map +1 -0
- package/dist/commands/expense-input.js +78 -0
- package/dist/commands/expense-input.js.map +1 -0
- package/dist/commands/expenses.d.ts +5 -0
- package/dist/commands/expenses.d.ts.map +1 -0
- package/dist/commands/expenses.js +419 -0
- package/dist/commands/expenses.js.map +1 -0
- package/dist/commands/groups.d.ts +5 -0
- package/dist/commands/groups.d.ts.map +1 -0
- package/dist/commands/groups.js +149 -0
- package/dist/commands/groups.js.map +1 -0
- package/dist/commands/recurring-expenses.d.ts +5 -0
- package/dist/commands/recurring-expenses.d.ts.map +1 -0
- package/dist/commands/recurring-expenses.js +416 -0
- package/dist/commands/recurring-expenses.js.map +1 -0
- package/dist/commands/settlements.d.ts +5 -0
- package/dist/commands/settlements.d.ts.map +1 -0
- package/dist/commands/settlements.js +225 -0
- package/dist/commands/settlements.js.map +1 -0
- package/dist/commands/shared.d.ts +6 -0
- package/dist/commands/shared.d.ts.map +1 -0
- package/dist/commands/shared.js +35 -0
- package/dist/commands/shared.js.map +1 -0
- package/dist/commands/spend-summary.d.ts +5 -0
- package/dist/commands/spend-summary.d.ts.map +1 -0
- package/dist/commands/spend-summary.js +107 -0
- package/dist/commands/spend-summary.js.map +1 -0
- package/dist/commands/update.d.ts +9 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +78 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/config.d.ts +14 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +52 -0
- package/dist/config.js.map +1 -0
- package/dist/errors.d.ts +87 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +183 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/interaction.d.ts +16 -0
- package/dist/interaction.d.ts.map +1 -0
- package/dist/interaction.js +14 -0
- package/dist/interaction.js.map +1 -0
- package/dist/layers.d.ts +13 -0
- package/dist/layers.d.ts.map +1 -0
- package/dist/layers.js +17 -0
- package/dist/layers.js.map +1 -0
- package/dist/output.d.ts +31 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +26 -0
- package/dist/output.js.map +1 -0
- package/dist/update/update-service.d.ts +41 -0
- package/dist/update/update-service.d.ts.map +1 -0
- package/dist/update/update-service.js +231 -0
- package/dist/update/update-service.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-service.js","sourceRoot":"","sources":["../../src/auth/auth-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Context, Effect, Layer } from "effect";
|
|
2
|
+
import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process";
|
|
3
|
+
import { BrowserOpenError } from "../errors.js";
|
|
4
|
+
export declare const browserCommand: (platform: NodeJS.Platform, url: string) => ChildProcess.Command | undefined;
|
|
5
|
+
declare const BrowserLauncher_base: Context.ServiceClass<BrowserLauncher, "@allsquare/cli/BrowserLauncher", {
|
|
6
|
+
readonly open: (url: string) => Effect.Effect<void, BrowserOpenError>;
|
|
7
|
+
}>;
|
|
8
|
+
export declare class BrowserLauncher extends BrowserLauncher_base {
|
|
9
|
+
static readonly layer: Layer.Layer<BrowserLauncher, never, ChildProcessSpawner.ChildProcessSpawner>;
|
|
10
|
+
}
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/auth/browser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAE3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAE/C,eAAO,MAAM,cAAc,GACzB,UAAU,MAAM,CAAC,QAAQ,EACzB,KAAK,MAAM,KACV,YAAY,CAAC,OAAO,GAAG,SAoBzB,CAAA;;mBAGgB,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC;;AADvE,qBAAa,eAAgB,SAAQ,oBAEC;IACpC,MAAM,CAAC,QAAQ,CAAC,KAAK,+EAmCpB;CACF"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import process from "node:process";
|
|
2
|
+
import { Context, Effect, Layer } from "effect";
|
|
3
|
+
import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process";
|
|
4
|
+
import { BrowserOpenError } from "../errors.js";
|
|
5
|
+
export const browserCommand = (platform, url) => {
|
|
6
|
+
switch (platform) {
|
|
7
|
+
case "darwin":
|
|
8
|
+
return ChildProcess.make("open", [url], {
|
|
9
|
+
stdout: "ignore",
|
|
10
|
+
stderr: "ignore"
|
|
11
|
+
});
|
|
12
|
+
case "linux":
|
|
13
|
+
return ChildProcess.make("xdg-open", [url], {
|
|
14
|
+
stdout: "ignore",
|
|
15
|
+
stderr: "ignore"
|
|
16
|
+
});
|
|
17
|
+
case "win32":
|
|
18
|
+
return ChildProcess.make("rundll32.exe", ["url.dll,FileProtocolHandler", url], {
|
|
19
|
+
stdout: "ignore",
|
|
20
|
+
stderr: "ignore"
|
|
21
|
+
});
|
|
22
|
+
default:
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
export class BrowserLauncher extends Context.Service()("@allsquare/cli/BrowserLauncher") {
|
|
27
|
+
static layer = Layer.effect(BrowserLauncher, Effect.gen(function* () {
|
|
28
|
+
const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
|
|
29
|
+
return BrowserLauncher.of({
|
|
30
|
+
open: (url) => {
|
|
31
|
+
const command = browserCommand(process.platform, url);
|
|
32
|
+
if (!command) {
|
|
33
|
+
return Effect.fail(new BrowserOpenError({
|
|
34
|
+
message: `Opening a browser is not supported on ${process.platform}`
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
37
|
+
return spawner.exitCode(command).pipe(Effect.flatMap((exitCode) => exitCode === ChildProcessSpawner.ExitCode(0)
|
|
38
|
+
? Effect.void
|
|
39
|
+
: Effect.fail(new BrowserOpenError({
|
|
40
|
+
message: `The browser command exited with status ${exitCode}`
|
|
41
|
+
}))), Effect.mapError((cause) => cause instanceof BrowserOpenError
|
|
42
|
+
? cause
|
|
43
|
+
: new BrowserOpenError({
|
|
44
|
+
message: `Could not open the default browser: ${cause.message}`
|
|
45
|
+
})));
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}));
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/auth/browser.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAA;AAElC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAE3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAE/C,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,QAAyB,EACzB,GAAW,EACuB,EAAE;IACpC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE;gBACtC,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,QAAQ;aACjB,CAAC,CAAA;QACJ,KAAK,OAAO;YACV,OAAO,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE;gBAC1C,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,QAAQ;aACjB,CAAC,CAAA;QACJ,KAAK,OAAO;YACV,OAAO,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,6BAA6B,EAAE,GAAG,CAAC,EAAE;gBAC7E,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,QAAQ;aACjB,CAAC,CAAA;QACJ;YACE,OAAO,SAAS,CAAA;IACpB,CAAC;AACH,CAAC,CAAA;AAED,MAAM,OAAO,eAAgB,SAAQ,OAAO,CAAC,OAAO,EAEhD,CAAC,gCAAgC,CAAC;IACpC,MAAM,CAAU,KAAK,GAAG,KAAK,CAAC,MAAM,CAClC,eAAe,EACf,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC,mBAAmB,CAAA;QAE9D,OAAO,eAAe,CAAC,EAAE,CAAC;YACxB,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;gBACZ,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;gBACrD,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,MAAM,CAAC,IAAI,CAChB,IAAI,gBAAgB,CAAC;wBACnB,OAAO,EAAE,yCAAyC,OAAO,CAAC,QAAQ,EAAE;qBACrE,CAAC,CACH,CAAA;gBACH,CAAC;gBAED,OAAO,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CACnC,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC1B,QAAQ,KAAK,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAC1C,CAAC,CAAC,MAAM,CAAC,IAAI;oBACb,CAAC,CAAC,MAAM,CAAC,IAAI,CACT,IAAI,gBAAgB,CAAC;wBACnB,OAAO,EAAE,0CAA0C,QAAQ,EAAE;qBAC9D,CAAC,CACH,CAAC,EACR,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,KAAK,YAAY,gBAAgB;oBAC/B,CAAC,CAAC,KAAK;oBACP,CAAC,CAAC,IAAI,gBAAgB,CAAC;wBACnB,OAAO,EAAE,uCAAuC,KAAK,CAAC,OAAO,EAAE;qBAChE,CAAC,CAAC,CACV,CAAA;YACH,CAAC;SACF,CAAC,CAAA;IACJ,CAAC,CAAC,CACH,CAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Context, Effect, Layer } from "effect";
|
|
2
|
+
import { CliStorageError } from "../errors.js";
|
|
3
|
+
import { Credentials } from "./model.js";
|
|
4
|
+
type KeyringEntry = {
|
|
5
|
+
readonly getPassword: (signal?: AbortSignal) => Promise<string | null | undefined>;
|
|
6
|
+
readonly setPassword: (password: string, signal?: AbortSignal) => Promise<void>;
|
|
7
|
+
readonly deleteCredential: (signal?: AbortSignal) => Promise<boolean>;
|
|
8
|
+
};
|
|
9
|
+
type EntryFactory = (account: string) => KeyringEntry;
|
|
10
|
+
export declare const credentialAccount: (resource: string, customDirectory?: string) => string;
|
|
11
|
+
declare const CredentialStore_base: Context.ServiceClass<CredentialStore, "@allsquare/cli/CredentialStore", {
|
|
12
|
+
readonly load: (resource: string) => Effect.Effect<Credentials | undefined, CliStorageError>;
|
|
13
|
+
readonly save: (resource: string, credentials: Credentials) => Effect.Effect<void, CliStorageError>;
|
|
14
|
+
readonly remove: (resource: string) => Effect.Effect<boolean, CliStorageError>;
|
|
15
|
+
}>;
|
|
16
|
+
export declare class CredentialStore extends CredentialStore_base {
|
|
17
|
+
static readonly layer: Layer.Layer<CredentialStore, import("effect/Config").ConfigError, never>;
|
|
18
|
+
}
|
|
19
|
+
export declare const makeCredentialStore: (options: {
|
|
20
|
+
readonly customDirectory: string | undefined;
|
|
21
|
+
readonly entryFactory: EntryFactory;
|
|
22
|
+
}) => {
|
|
23
|
+
readonly load: (resource: string) => Effect.Effect<Credentials | undefined, CliStorageError>;
|
|
24
|
+
readonly save: (resource: string, credentials: Credentials) => Effect.Effect<void, CliStorageError>;
|
|
25
|
+
readonly remove: (resource: string) => Effect.Effect<boolean, CliStorageError>;
|
|
26
|
+
};
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=credential-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-store.d.ts","sourceRoot":"","sources":["../../src/auth/credential-store.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAkB,MAAM,QAAQ,CAAA;AAG/D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAUxC,KAAK,YAAY,GAAG;IAClB,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAA;IAClF,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/E,QAAQ,CAAC,gBAAgB,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CACtE,CAAA;AACD,KAAK,YAAY,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,YAAY,CAAA;AAIrD,eAAO,MAAM,iBAAiB,GAC5B,UAAU,MAAM,EAChB,kBAAkB,MAAM,KACvB,MAMF,CAAA;;mBA2BgB,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,SAAS,EAAE,eAAe,CAAC;mBAC7E,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC;qBAClF,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC;;AAHhF,qBAAa,eAAgB,SAAQ,oBAIC;IACpC,MAAM,CAAC,QAAQ,CAAC,KAAK,2EAQpB;CACF;AAED,eAAO,MAAM,mBAAmB,GAAI,SAAS;IAC3C,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5C,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;CACpC;mBAlBgB,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,SAAS,EAAE,eAAe,CAAC;mBAC7E,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC;qBAClF,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC;CAwD/E,CAAA"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { AsyncEntry } from "@napi-rs/keyring";
|
|
4
|
+
import { Context, Effect, Layer, Option, Schema } from "effect";
|
|
5
|
+
import { customConfigDirectory } from "../config.js";
|
|
6
|
+
import { CliStorageError } from "../errors.js";
|
|
7
|
+
import { Credentials } from "./model.js";
|
|
8
|
+
const SERVICE_NAME = "com.allsquare.cli";
|
|
9
|
+
const credentialsCodec = Schema.fromJsonString(Credentials);
|
|
10
|
+
const asStorageError = (operation, cause) => new CliStorageError({
|
|
11
|
+
message: `Could not ${operation} credentials in the system credential store: ${cause instanceof Error ? cause.message : String(cause)}`
|
|
12
|
+
});
|
|
13
|
+
// The default account name must stay byte-for-byte compatible with existing
|
|
14
|
+
// installations. Explicit config folders have independent credential accounts.
|
|
15
|
+
export const credentialAccount = (resource, customDirectory) => {
|
|
16
|
+
if (customDirectory === undefined)
|
|
17
|
+
return resource;
|
|
18
|
+
const directoryHash = createHash("sha256")
|
|
19
|
+
.update(resolve(customDirectory))
|
|
20
|
+
.digest("hex");
|
|
21
|
+
return `${resource}#config=${directoryHash}`;
|
|
22
|
+
};
|
|
23
|
+
const nativeEntry = (account) => {
|
|
24
|
+
// Subprocess tests set this before launching the CLI. This guard prevents a
|
|
25
|
+
// future auth test from reaching the operator's actual OS credential vault.
|
|
26
|
+
if (process.env.ALLSQUARE_TEST_DISABLE_KEYCHAIN === "1") {
|
|
27
|
+
throw new Error("The system credential store is disabled for this test");
|
|
28
|
+
}
|
|
29
|
+
return new AsyncEntry(SERVICE_NAME, account, process.platform === "linux"
|
|
30
|
+
? { linux: { store: "secret-service" } }
|
|
31
|
+
: undefined);
|
|
32
|
+
};
|
|
33
|
+
const makeEntry = (account, entryFactory) => Effect.try({
|
|
34
|
+
try: () => entryFactory(account),
|
|
35
|
+
catch: (cause) => asStorageError("open", cause)
|
|
36
|
+
});
|
|
37
|
+
export class CredentialStore extends Context.Service()("@allsquare/cli/CredentialStore") {
|
|
38
|
+
static layer = Layer.effect(CredentialStore, customConfigDirectory.pipe(Effect.map((explicit) => makeCredentialStore({
|
|
39
|
+
customDirectory: Option.isSome(explicit) ? explicit.value : undefined,
|
|
40
|
+
entryFactory: nativeEntry
|
|
41
|
+
}))));
|
|
42
|
+
}
|
|
43
|
+
export const makeCredentialStore = (options) => {
|
|
44
|
+
const accountFor = (resource) => credentialAccount(resource, options.customDirectory);
|
|
45
|
+
return CredentialStore.of({
|
|
46
|
+
load: (resource) => Effect.gen(function* () {
|
|
47
|
+
const entry = yield* makeEntry(accountFor(resource), options.entryFactory);
|
|
48
|
+
const encoded = yield* Effect.tryPromise({
|
|
49
|
+
try: (signal) => entry.getPassword(signal),
|
|
50
|
+
catch: (cause) => asStorageError("read", cause)
|
|
51
|
+
});
|
|
52
|
+
// Some native keyring backends return null for a missing entry even
|
|
53
|
+
// though the package declaration says undefined.
|
|
54
|
+
if (encoded == null)
|
|
55
|
+
return undefined;
|
|
56
|
+
return yield* Schema.decodeEffect(credentialsCodec)(encoded).pipe(Effect.mapError((cause) => asStorageError("decode", cause)));
|
|
57
|
+
}),
|
|
58
|
+
save: (resource, credentials) => Effect.gen(function* () {
|
|
59
|
+
const entry = yield* makeEntry(accountFor(resource), options.entryFactory);
|
|
60
|
+
const encoded = yield* Schema.encodeEffect(credentialsCodec)(credentials).pipe(Effect.mapError((cause) => asStorageError("encode", cause)));
|
|
61
|
+
yield* Effect.tryPromise({
|
|
62
|
+
try: (signal) => entry.setPassword(encoded, signal),
|
|
63
|
+
catch: (cause) => asStorageError("save", cause)
|
|
64
|
+
});
|
|
65
|
+
}),
|
|
66
|
+
remove: (resource) => Effect.gen(function* () {
|
|
67
|
+
const entry = yield* makeEntry(accountFor(resource), options.entryFactory);
|
|
68
|
+
return yield* Effect.tryPromise({
|
|
69
|
+
try: (signal) => entry.deleteCredential(signal),
|
|
70
|
+
catch: (cause) => asStorageError("remove", cause)
|
|
71
|
+
});
|
|
72
|
+
})
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=credential-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-store.js","sourceRoot":"","sources":["../../src/auth/credential-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Context, Crypto, Effect, FileSystem, Layer, Path, Scope } from "effect";
|
|
2
|
+
import { CliConfig } from "../config.js";
|
|
3
|
+
import { CliStorageError, RefreshLockError } from "../errors.js";
|
|
4
|
+
import { Installation } from "./model.js";
|
|
5
|
+
declare const InstallationStore_base: Context.ServiceClass<InstallationStore, "@allsquare/cli/InstallationStore", {
|
|
6
|
+
readonly load: (resource: string) => Effect.Effect<Installation | undefined, CliStorageError>;
|
|
7
|
+
readonly save: (installation: Installation) => Effect.Effect<void, CliStorageError>;
|
|
8
|
+
readonly withAuthLock: <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E | CliStorageError | RefreshLockError, Exclude<R, Scope.Scope>>;
|
|
9
|
+
}>;
|
|
10
|
+
export declare class InstallationStore extends InstallationStore_base {
|
|
11
|
+
static readonly layer: Layer.Layer<InstallationStore, never, FileSystem.FileSystem | Path.Path | CliConfig | Crypto.Crypto>;
|
|
12
|
+
}
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=installation-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installation-store.d.ts","sourceRoot":"","sources":["../../src/auth/installation-store.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,MAAM,EACN,MAAM,EACN,UAAU,EACV,KAAK,EAEL,IAAI,EAEJ,KAAK,EACN,MAAM,QAAQ,CAAA;AAEf,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAChE,OAAO,EACL,YAAY,EAEb,MAAM,YAAY,CAAA;;mBAcF,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,SAAS,EAAE,eAAe,CAAC;mBAC9E,CAAC,YAAY,EAAE,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC;2BAC5D,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,GAAG,gBAAgB,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;;AALxF,qBAAa,iBAAkB,SAAQ,sBAMC;IACtC,MAAM,CAAC,QAAQ,CAAC,KAAK,uGA6JpB;CACF"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { Context, Crypto, Effect, FileSystem, Layer, Option, Path, Schema, Scope } from "effect";
|
|
2
|
+
import { CliConfig } from "../config.js";
|
|
3
|
+
import { CliStorageError, RefreshLockError } from "../errors.js";
|
|
4
|
+
import { Installation, InstallationRegistry } from "./model.js";
|
|
5
|
+
const registryCodec = Schema.fromJsonString(InstallationRegistry, { space: 2 });
|
|
6
|
+
const emptyRegistry = {
|
|
7
|
+
schemaVersion: 1,
|
|
8
|
+
installations: {}
|
|
9
|
+
};
|
|
10
|
+
const asStorageError = (operation, cause) => new CliStorageError({
|
|
11
|
+
message: `Could not ${operation} CLI configuration: ${cause instanceof Error ? cause.message : String(cause)}`
|
|
12
|
+
});
|
|
13
|
+
export class InstallationStore extends Context.Service()("@allsquare/cli/InstallationStore") {
|
|
14
|
+
static layer = Layer.effect(InstallationStore, Effect.gen(function* () {
|
|
15
|
+
const config = yield* CliConfig;
|
|
16
|
+
const fs = yield* FileSystem.FileSystem;
|
|
17
|
+
const path = yield* Path.Path;
|
|
18
|
+
const crypto = yield* Crypto.Crypto;
|
|
19
|
+
const paths = Effect.gen(function* () {
|
|
20
|
+
const directory = yield* config.configDirectory;
|
|
21
|
+
return {
|
|
22
|
+
directory,
|
|
23
|
+
registry: path.join(directory, "config.json"),
|
|
24
|
+
lock: path.join(directory, "auth.lock")
|
|
25
|
+
};
|
|
26
|
+
}).pipe(Effect.mapError((cause) => asStorageError("resolve", cause)));
|
|
27
|
+
const ensureDirectory = Effect.gen(function* () {
|
|
28
|
+
const resolved = yield* paths;
|
|
29
|
+
yield* fs.makeDirectory(resolved.directory, {
|
|
30
|
+
recursive: true,
|
|
31
|
+
mode: 0o700
|
|
32
|
+
});
|
|
33
|
+
yield* fs.chmod(resolved.directory, 0o700);
|
|
34
|
+
return resolved;
|
|
35
|
+
}).pipe(Effect.mapError((cause) => cause instanceof CliStorageError
|
|
36
|
+
? cause
|
|
37
|
+
: asStorageError("create", cause)));
|
|
38
|
+
const readRegistry = Effect.gen(function* () {
|
|
39
|
+
const resolved = yield* paths;
|
|
40
|
+
const exists = yield* fs.exists(resolved.registry);
|
|
41
|
+
if (!exists)
|
|
42
|
+
return emptyRegistry;
|
|
43
|
+
const contents = yield* fs.readFileString(resolved.registry);
|
|
44
|
+
return yield* Schema.decodeEffect(registryCodec)(contents);
|
|
45
|
+
}).pipe(Effect.mapError((cause) => cause instanceof CliStorageError
|
|
46
|
+
? cause
|
|
47
|
+
: asStorageError("read", cause)));
|
|
48
|
+
const writeRegistry = (registry) => Effect.gen(function* () {
|
|
49
|
+
const resolved = yield* ensureDirectory;
|
|
50
|
+
const suffix = yield* crypto.randomUUIDv4;
|
|
51
|
+
const temporary = path.join(resolved.directory, `config.${suffix}.tmp`);
|
|
52
|
+
const contents = yield* Schema.encodeEffect(registryCodec)(registry);
|
|
53
|
+
yield* Effect.gen(function* () {
|
|
54
|
+
yield* fs.writeFileString(temporary, contents, {
|
|
55
|
+
flag: "wx",
|
|
56
|
+
mode: 0o600
|
|
57
|
+
});
|
|
58
|
+
yield* fs.rename(temporary, resolved.registry);
|
|
59
|
+
yield* fs.chmod(resolved.registry, 0o600);
|
|
60
|
+
}).pipe(Effect.ensuring(fs.remove(temporary).pipe(Effect.ignore)));
|
|
61
|
+
}).pipe(Effect.mapError((cause) => cause instanceof CliStorageError
|
|
62
|
+
? cause
|
|
63
|
+
: asStorageError("save", cause)));
|
|
64
|
+
const acquireLock = (lockPath, owner, attempt = 0) => fs.writeFileString(lockPath, owner, {
|
|
65
|
+
flag: "wx",
|
|
66
|
+
mode: 0o600
|
|
67
|
+
}).pipe(Effect.catchTag("PlatformError", (cause) => {
|
|
68
|
+
if (cause.reason._tag !== "AlreadyExists") {
|
|
69
|
+
return Effect.fail(asStorageError("acquire the authentication lock", cause));
|
|
70
|
+
}
|
|
71
|
+
return Effect.gen(function* () {
|
|
72
|
+
const info = yield* fs.stat(lockPath).pipe(Effect.catchTag("PlatformError", (statError) => statError.reason._tag === "NotFound"
|
|
73
|
+
? Effect.succeed(undefined)
|
|
74
|
+
: Effect.fail(statError)));
|
|
75
|
+
if (info === undefined)
|
|
76
|
+
return yield* acquireLock(lockPath, owner, attempt);
|
|
77
|
+
const modifiedAt = Option.getOrElse(info.mtime, () => new Date());
|
|
78
|
+
if (Date.now() - modifiedAt.getTime() > 120_000) {
|
|
79
|
+
yield* fs.remove(lockPath);
|
|
80
|
+
return yield* acquireLock(lockPath, owner, attempt);
|
|
81
|
+
}
|
|
82
|
+
if (attempt >= 100) {
|
|
83
|
+
return yield* new RefreshLockError({
|
|
84
|
+
message: "Another AllSquare command is updating the session. Try again shortly."
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
yield* Effect.sleep("100 millis");
|
|
88
|
+
return yield* acquireLock(lockPath, owner, attempt + 1);
|
|
89
|
+
}).pipe(Effect.mapError((lockError) => lockError instanceof RefreshLockError || lockError instanceof CliStorageError
|
|
90
|
+
? lockError
|
|
91
|
+
: asStorageError("inspect the authentication lock", lockError)));
|
|
92
|
+
}));
|
|
93
|
+
const releaseLock = (lockPath, owner) => Effect.gen(function* () {
|
|
94
|
+
const exists = yield* fs.exists(lockPath);
|
|
95
|
+
if (!exists)
|
|
96
|
+
return;
|
|
97
|
+
const currentOwner = yield* fs.readFileString(lockPath);
|
|
98
|
+
if (currentOwner === owner)
|
|
99
|
+
yield* fs.remove(lockPath);
|
|
100
|
+
}).pipe(Effect.ignore);
|
|
101
|
+
return InstallationStore.of({
|
|
102
|
+
load: (resource) => readRegistry.pipe(Effect.map((registry) => registry.installations[resource])),
|
|
103
|
+
save: (installation) => Effect.gen(function* () {
|
|
104
|
+
const registry = yield* readRegistry;
|
|
105
|
+
yield* writeRegistry({
|
|
106
|
+
...registry,
|
|
107
|
+
installations: {
|
|
108
|
+
...registry.installations,
|
|
109
|
+
[installation.resource]: installation
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
}),
|
|
113
|
+
withAuthLock: (effect) => Effect.scoped(Effect.gen(function* () {
|
|
114
|
+
const resolved = yield* ensureDirectory;
|
|
115
|
+
const owner = yield* crypto.randomUUIDv4.pipe(Effect.mapError((cause) => asStorageError("create the authentication lock", cause)));
|
|
116
|
+
yield* Effect.acquireRelease(acquireLock(resolved.lock, owner), () => releaseLock(resolved.lock, owner));
|
|
117
|
+
return yield* effect;
|
|
118
|
+
}))
|
|
119
|
+
});
|
|
120
|
+
}));
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=installation-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installation-store.js","sourceRoot":"","sources":["../../src/auth/installation-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
export declare const API_READ_SCOPE = "allsquare:api:read";
|
|
3
|
+
export declare const API_WRITE_SCOPE = "allsquare:api:write";
|
|
4
|
+
export declare const REGISTERED_REDIRECT_URI = "http://127.0.0.1/oauth/callback";
|
|
5
|
+
export declare const CALLBACK_PATH = "/oauth/callback";
|
|
6
|
+
export declare const Installation: Schema.Struct<{
|
|
7
|
+
readonly installationId: Schema.String;
|
|
8
|
+
readonly clientId: Schema.String;
|
|
9
|
+
readonly resource: Schema.String;
|
|
10
|
+
readonly registeredRedirectUri: Schema.String;
|
|
11
|
+
readonly registeredAt: Schema.String;
|
|
12
|
+
}>;
|
|
13
|
+
export type Installation = typeof Installation.Type;
|
|
14
|
+
export declare const InstallationRegistry: Schema.Struct<{
|
|
15
|
+
readonly schemaVersion: Schema.Literal<1>;
|
|
16
|
+
readonly installations: Schema.$Record<Schema.String, Schema.Struct<{
|
|
17
|
+
readonly installationId: Schema.String;
|
|
18
|
+
readonly clientId: Schema.String;
|
|
19
|
+
readonly resource: Schema.String;
|
|
20
|
+
readonly registeredRedirectUri: Schema.String;
|
|
21
|
+
readonly registeredAt: Schema.String;
|
|
22
|
+
}>>;
|
|
23
|
+
}>;
|
|
24
|
+
export type InstallationRegistry = typeof InstallationRegistry.Type;
|
|
25
|
+
export declare const Credentials: Schema.Struct<{
|
|
26
|
+
readonly accessToken: Schema.String;
|
|
27
|
+
readonly refreshToken: Schema.String;
|
|
28
|
+
readonly tokenType: Schema.Literal<"Bearer">;
|
|
29
|
+
readonly expiresAt: Schema.Number;
|
|
30
|
+
readonly scopes: Schema.$Array<Schema.String>;
|
|
31
|
+
}>;
|
|
32
|
+
export type Credentials = typeof Credentials.Type;
|
|
33
|
+
export interface AuthStatus {
|
|
34
|
+
readonly authenticated: boolean;
|
|
35
|
+
readonly apiUrl: string;
|
|
36
|
+
readonly clientId?: string;
|
|
37
|
+
readonly scopes?: ReadonlyArray<string>;
|
|
38
|
+
readonly expiresAt?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface OAuthEndpoints {
|
|
41
|
+
readonly resource: string;
|
|
42
|
+
readonly authorizationEndpoint: string;
|
|
43
|
+
readonly tokenEndpoint: string;
|
|
44
|
+
readonly registrationEndpoint: string;
|
|
45
|
+
readonly revocationEndpoint: string;
|
|
46
|
+
}
|
|
47
|
+
export interface TokenResponse {
|
|
48
|
+
readonly accessToken: string;
|
|
49
|
+
readonly refreshToken: string;
|
|
50
|
+
readonly tokenType: "Bearer";
|
|
51
|
+
readonly expiresIn: number;
|
|
52
|
+
readonly scopes: ReadonlyArray<string>;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/auth/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,eAAO,MAAM,cAAc,uBAAuB,CAAA;AAClD,eAAO,MAAM,eAAe,wBAAwB,CAAA;AACpD,eAAO,MAAM,uBAAuB,oCAAoC,CAAA;AACxE,eAAO,MAAM,aAAa,oBAAoB,CAAA;AAE9C,eAAO,MAAM,YAAY;;;;;;EAMvB,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;AAEnD,eAAO,MAAM,oBAAoB;;;;;;;;;EAG/B,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAC,IAAI,CAAA;AAEnE,eAAO,MAAM,WAAW;;;;;;EAMtB,CAAA;AACF,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAA;AAEjD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAA;IACtC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAA;IACrC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAA;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CACvC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
export const API_READ_SCOPE = "allsquare:api:read";
|
|
3
|
+
export const API_WRITE_SCOPE = "allsquare:api:write";
|
|
4
|
+
export const REGISTERED_REDIRECT_URI = "http://127.0.0.1/oauth/callback";
|
|
5
|
+
export const CALLBACK_PATH = "/oauth/callback";
|
|
6
|
+
export const Installation = Schema.Struct({
|
|
7
|
+
installationId: Schema.String,
|
|
8
|
+
clientId: Schema.String,
|
|
9
|
+
resource: Schema.String,
|
|
10
|
+
registeredRedirectUri: Schema.String,
|
|
11
|
+
registeredAt: Schema.String
|
|
12
|
+
});
|
|
13
|
+
export const InstallationRegistry = Schema.Struct({
|
|
14
|
+
schemaVersion: Schema.Literal(1),
|
|
15
|
+
installations: Schema.Record(Schema.String, Installation)
|
|
16
|
+
});
|
|
17
|
+
export const Credentials = Schema.Struct({
|
|
18
|
+
accessToken: Schema.String,
|
|
19
|
+
refreshToken: Schema.String,
|
|
20
|
+
tokenType: Schema.Literal("Bearer"),
|
|
21
|
+
expiresAt: Schema.Number,
|
|
22
|
+
scopes: Schema.Array(Schema.String)
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/auth/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,MAAM,CAAC,MAAM,cAAc,GAAG,oBAAoB,CAAA;AAClD,MAAM,CAAC,MAAM,eAAe,GAAG,qBAAqB,CAAA;AACpD,MAAM,CAAC,MAAM,uBAAuB,GAAG,iCAAiC,CAAA;AACxE,MAAM,CAAC,MAAM,aAAa,GAAG,iBAAiB,CAAA;AAE9C,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;IACxC,cAAc,EAAE,MAAM,CAAC,MAAM;IAC7B,QAAQ,EAAE,MAAM,CAAC,MAAM;IACvB,QAAQ,EAAE,MAAM,CAAC,MAAM;IACvB,qBAAqB,EAAE,MAAM,CAAC,MAAM;IACpC,YAAY,EAAE,MAAM,CAAC,MAAM;CAC5B,CAAC,CAAA;AAGF,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC;IAChD,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;CAC1D,CAAC,CAAA;AAGF,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC,MAAM;IAC1B,YAAY,EAAE,MAAM,CAAC,MAAM;IAC3B,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;CACpC,CAAC,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Context, Effect, Layer, Scope } from "effect";
|
|
2
|
+
import { OAuthCallbackError } from "../errors.js";
|
|
3
|
+
export declare const receiveAuthorizationCode: <E, R>(options: {
|
|
4
|
+
readonly state: string;
|
|
5
|
+
readonly onReady: (redirectUri: string) => Effect.Effect<void, E, R>;
|
|
6
|
+
}) => Effect.Effect<string, E | OAuthCallbackError, Exclude<R, Scope.Scope>>;
|
|
7
|
+
declare const AuthorizationCallback_base: Context.ServiceClass<AuthorizationCallback, "@allsquare/cli/AuthorizationCallback", {
|
|
8
|
+
readonly receive: (options: {
|
|
9
|
+
readonly state: string;
|
|
10
|
+
readonly onReady: (redirectUri: string) => Effect.Effect<void>;
|
|
11
|
+
}) => Effect.Effect<string, OAuthCallbackError>;
|
|
12
|
+
}>;
|
|
13
|
+
export declare class AuthorizationCallback extends AuthorizationCallback_base {
|
|
14
|
+
static readonly layer: Layer.Layer<AuthorizationCallback, never, never>;
|
|
15
|
+
}
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=oauth-callback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-callback.d.ts","sourceRoot":"","sources":["../../src/auth/oauth-callback.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAY,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAShE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAiFjD,eAAO,MAAM,wBAAwB,GAAI,CAAC,EAAE,CAAC,EAAE,SAAS;IACtD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;CACrE,KAAG,MAAM,CAAC,MAAM,CACf,MAAM,EACN,CAAC,GAAG,kBAAkB,EACtB,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CA4CxB,CAAA;;sBAGmB,CAAC,OAAO,EAAE;QAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;QACtB,QAAQ,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;KAC/D,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC;;AAJjD,qBAAa,qBAAsB,SAAQ,0BAKC;IAC1C,MAAM,CAAC,QAAQ,CAAC,KAAK,mDAGpB;CACF"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { createServer } from "node:http";
|
|
2
|
+
import { Context, Deferred, Effect, Layer, Scope } from "effect";
|
|
3
|
+
import { NodeHttpServer } from "@effect/platform-node";
|
|
4
|
+
import { HttpServer, HttpServerRequest, HttpServerResponse } from "effect/unstable/http";
|
|
5
|
+
import { NetAddress } from "effect/unstable/net";
|
|
6
|
+
import { OAuthCallbackError } from "../errors.js";
|
|
7
|
+
import { CALLBACK_PATH } from "./model.js";
|
|
8
|
+
const successPage = HttpServerResponse.html(`<!doctype html>
|
|
9
|
+
<html lang="en">
|
|
10
|
+
<head><meta charset="utf-8"><title>AllSquare CLI authorized</title></head>
|
|
11
|
+
<body><main><h1>AllSquare CLI is connected</h1><p>You can close this window and return to your terminal.</p></main></body>
|
|
12
|
+
</html>`).pipe(HttpServerResponse.setHeader("connection", "close"));
|
|
13
|
+
const errorPage = HttpServerResponse.html(`<!doctype html>
|
|
14
|
+
<html lang="en">
|
|
15
|
+
<head><meta charset="utf-8"><title>AllSquare CLI authorization failed</title></head>
|
|
16
|
+
<body><main><h1>Authorization could not be completed</h1><p>Return to your terminal for details.</p></main></body>
|
|
17
|
+
</html>`).pipe(HttpServerResponse.setHeader("connection", "close"));
|
|
18
|
+
const describeCause = (cause) => {
|
|
19
|
+
if (cause instanceof Error && cause.message)
|
|
20
|
+
return cause.message;
|
|
21
|
+
if (typeof cause === "object" &&
|
|
22
|
+
cause !== null &&
|
|
23
|
+
"cause" in cause &&
|
|
24
|
+
cause.cause instanceof Error) {
|
|
25
|
+
return cause.cause.message;
|
|
26
|
+
}
|
|
27
|
+
return String(cause);
|
|
28
|
+
};
|
|
29
|
+
const callbackHandler = (expectedState, result) => Effect.gen(function* () {
|
|
30
|
+
const request = yield* HttpServerRequest.HttpServerRequest;
|
|
31
|
+
const url = new URL(request.url, "http://127.0.0.1");
|
|
32
|
+
if (url.pathname !== CALLBACK_PATH) {
|
|
33
|
+
return HttpServerResponse.text("Not found", {
|
|
34
|
+
status: 404
|
|
35
|
+
}).pipe(HttpServerResponse.setHeader("connection", "close"));
|
|
36
|
+
}
|
|
37
|
+
const state = url.searchParams.get("state");
|
|
38
|
+
if (state !== expectedState) {
|
|
39
|
+
yield* Deferred.fail(result, new OAuthCallbackError({
|
|
40
|
+
message: "OAuth callback state did not match. Run login again."
|
|
41
|
+
}));
|
|
42
|
+
return errorPage;
|
|
43
|
+
}
|
|
44
|
+
const oauthError = url.searchParams.get("error");
|
|
45
|
+
if (oauthError) {
|
|
46
|
+
yield* Deferred.fail(result, new OAuthCallbackError({
|
|
47
|
+
message: oauthError === "access_denied"
|
|
48
|
+
? "Authorization was denied."
|
|
49
|
+
: `Authorization failed: ${oauthError}`
|
|
50
|
+
}));
|
|
51
|
+
return errorPage;
|
|
52
|
+
}
|
|
53
|
+
const code = url.searchParams.get("code");
|
|
54
|
+
if (!code) {
|
|
55
|
+
yield* Deferred.fail(result, new OAuthCallbackError({
|
|
56
|
+
message: "OAuth callback did not include an authorization code."
|
|
57
|
+
}));
|
|
58
|
+
return errorPage;
|
|
59
|
+
}
|
|
60
|
+
yield* Deferred.succeed(result, code);
|
|
61
|
+
return successPage;
|
|
62
|
+
});
|
|
63
|
+
export const receiveAuthorizationCode = (options) => {
|
|
64
|
+
const program = Effect.gen(function* () {
|
|
65
|
+
const result = yield* Deferred.make();
|
|
66
|
+
const server = yield* HttpServer.HttpServer;
|
|
67
|
+
if (!NetAddress.isInetAddress(server.address)) {
|
|
68
|
+
return yield* new OAuthCallbackError({
|
|
69
|
+
message: "OAuth callback server did not bind to a TCP port."
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
const redirectUri = `http://127.0.0.1:${server.address.port}${CALLBACK_PATH}`;
|
|
73
|
+
yield* server.serve(callbackHandler(options.state, result));
|
|
74
|
+
yield* options.onReady(redirectUri);
|
|
75
|
+
return yield* Deferred.await(result).pipe(Effect.timeoutOrElse({
|
|
76
|
+
duration: "5 minutes",
|
|
77
|
+
orElse: () => Effect.fail(new OAuthCallbackError({
|
|
78
|
+
message: "Authorization timed out after five minutes. Run login again."
|
|
79
|
+
}))
|
|
80
|
+
}));
|
|
81
|
+
});
|
|
82
|
+
return Effect.scoped(program.pipe(Effect.provide(NodeHttpServer.layer(createServer, {
|
|
83
|
+
host: "127.0.0.1",
|
|
84
|
+
port: 0
|
|
85
|
+
})), Effect.mapError((cause) => cause instanceof OAuthCallbackError
|
|
86
|
+
? cause
|
|
87
|
+
: new OAuthCallbackError({
|
|
88
|
+
message: `Could not run the OAuth callback server: ${describeCause(cause)}`
|
|
89
|
+
}))));
|
|
90
|
+
};
|
|
91
|
+
export class AuthorizationCallback extends Context.Service()("@allsquare/cli/AuthorizationCallback") {
|
|
92
|
+
static layer = Layer.succeed(AuthorizationCallback, AuthorizationCallback.of({ receive: receiveAuthorizationCode }));
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=oauth-callback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-callback.js","sourceRoot":"","sources":["../../src/auth/oauth-callback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAExC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1C,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC;;;;QAIpC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAA;AAEnE,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC;;;;QAIlC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAA;AAEnE,MAAM,aAAa,GAAG,CAAC,KAAc,EAAU,EAAE;IAC/C,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC,OAAO,CAAA;IACjE,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,OAAO,IAAI,KAAK;QAChB,KAAK,CAAC,KAAK,YAAY,KAAK,EAC5B,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,CAAA;IAC5B,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;AACtB,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,CACtB,aAAqB,EACrB,MAAqD,EACrD,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC,iBAAiB,CAAA;IAC1D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAA;IAEpD,IAAI,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;QACnC,OAAO,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE;YAC1C,MAAM,EAAE,GAAG;SACZ,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAA;IAC9D,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAC3C,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;QAC5B,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAClB,MAAM,EACN,IAAI,kBAAkB,CAAC;YACrB,OAAO,EAAE,sDAAsD;SAChE,CAAC,CACH,CAAA;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAChD,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAClB,MAAM,EACN,IAAI,kBAAkB,CAAC;YACrB,OAAO,EAAE,UAAU,KAAK,eAAe;gBACrC,CAAC,CAAC,2BAA2B;gBAC7B,CAAC,CAAC,yBAAyB,UAAU,EAAE;SAC1C,CAAC,CACH,CAAA;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACzC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAClB,MAAM,EACN,IAAI,kBAAkB,CAAC;YACrB,OAAO,EAAE,uDAAuD;SACjE,CAAC,CACH,CAAA;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IACrC,OAAO,WAAW,CAAA;AACpB,CAAC,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAO,OAG9C,EAIC,EAAE;IACF,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAA8B,CAAA;QACjE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAA;QAC3C,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9C,OAAO,KAAK,CAAC,CAAC,IAAI,kBAAkB,CAAC;gBACnC,OAAO,EAAE,mDAAmD;aAC7D,CAAC,CAAA;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,oBAAoB,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,aAAa,EAAE,CAAA;QAC7E,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;QAC3D,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QAEnC,OAAO,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CACvC,MAAM,CAAC,aAAa,CAAC;YACnB,QAAQ,EAAE,WAAW;YACrB,MAAM,EAAE,GAAG,EAAE,CACX,MAAM,CAAC,IAAI,CACT,IAAI,kBAAkB,CAAC;gBACrB,OAAO,EAAE,8DAA8D;aACxE,CAAC,CACH;SACJ,CAAC,CACH,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,MAAM,CAAC,MAAM,CAClB,OAAO,CAAC,IAAI,CACV,MAAM,CAAC,OAAO,CACZ,cAAc,CAAC,KAAK,CAAC,YAAY,EAAE;QACjC,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,CAAC;KACR,CAAC,CACH,EACD,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,KAAK,YAAY,kBAAkB;QACjC,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,IAAI,kBAAkB,CAAC;YACrB,OAAO,EAAE,4CAA4C,aAAa,CAAC,KAAK,CAAC,EAAE;SAC5E,CAAC,CAAC,CACV,CACwE,CAAA;AAC7E,CAAC,CAAA;AAED,MAAM,OAAO,qBAAsB,SAAQ,OAAO,CAAC,OAAO,EAKtD,CAAC,sCAAsC,CAAC;IAC1C,MAAM,CAAU,KAAK,GAAG,KAAK,CAAC,OAAO,CACnC,qBAAqB,EACrB,qBAAqB,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAChE,CAAA"}
|