base-idp 1.0.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 (62) hide show
  1. package/README.md +162 -0
  2. package/dist/base64url.d.ts +6 -0
  3. package/dist/base64url.d.ts.map +1 -0
  4. package/dist/base64url.js +39 -0
  5. package/dist/base64url.js.map +1 -0
  6. package/dist/bootstrap.d.ts +10 -0
  7. package/dist/bootstrap.d.ts.map +1 -0
  8. package/dist/bootstrap.js +18 -0
  9. package/dist/bootstrap.js.map +1 -0
  10. package/dist/cli.d.ts +3 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +206 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/client.d.ts +20 -0
  15. package/dist/client.d.ts.map +1 -0
  16. package/dist/client.js +169 -0
  17. package/dist/client.js.map +1 -0
  18. package/dist/errors.d.ts +12 -0
  19. package/dist/errors.d.ts.map +1 -0
  20. package/dist/errors.js +17 -0
  21. package/dist/errors.js.map +1 -0
  22. package/dist/index.d.ts +10 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +9 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/next.d.ts +19 -0
  27. package/dist/next.d.ts.map +1 -0
  28. package/dist/next.js +39 -0
  29. package/dist/next.js.map +1 -0
  30. package/dist/node.d.ts +60 -0
  31. package/dist/node.d.ts.map +1 -0
  32. package/dist/node.js +148 -0
  33. package/dist/node.js.map +1 -0
  34. package/dist/paseto.d.ts +15 -0
  35. package/dist/paseto.d.ts.map +1 -0
  36. package/dist/paseto.js +103 -0
  37. package/dist/paseto.js.map +1 -0
  38. package/dist/pkce.d.ts +3 -0
  39. package/dist/pkce.d.ts.map +1 -0
  40. package/dist/pkce.js +18 -0
  41. package/dist/pkce.js.map +1 -0
  42. package/dist/react.d.ts +12 -0
  43. package/dist/react.d.ts.map +1 -0
  44. package/dist/react.js +21 -0
  45. package/dist/react.js.map +1 -0
  46. package/dist/server.d.ts +13 -0
  47. package/dist/server.d.ts.map +1 -0
  48. package/dist/server.js +25 -0
  49. package/dist/server.js.map +1 -0
  50. package/dist/sveltekit.d.ts +17 -0
  51. package/dist/sveltekit.d.ts.map +1 -0
  52. package/dist/sveltekit.js +21 -0
  53. package/dist/sveltekit.js.map +1 -0
  54. package/dist/types.d.ts +138 -0
  55. package/dist/types.d.ts.map +1 -0
  56. package/dist/types.js +2 -0
  57. package/dist/types.js.map +1 -0
  58. package/dist/vite.d.ts +6 -0
  59. package/dist/vite.d.ts.map +1 -0
  60. package/dist/vite.js +24 -0
  61. package/dist/vite.js.map +1 -0
  62. package/package.json +60 -0
package/README.md ADDED
@@ -0,0 +1,162 @@
1
+ # @squareexp/base-idp
2
+
3
+ TypeScript SDK for integrating web apps and Node services with Base IDP.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @squareexp/base-idp
9
+ ```
10
+
11
+ ## Credential Source
12
+
13
+ Get credentials from Base client registration (admin flow), not from local guesses.
14
+ Use the registered:
15
+ - `client_id`
16
+ - optional `client_secret` (server-side only)
17
+ - exact redirect URI
18
+ - scope list
19
+ - `allowed_auth_methods`
20
+ - `requested_claims`
21
+
22
+ ## Fast Init
23
+
24
+ The SDK ships with a bootstrap command that prints the env block and registration payload for a client, and can optionally POST the registration to Base:
25
+
26
+ ```bash
27
+ npx base-idp init \
28
+ --client-id console-gateway \
29
+ --display-name "Base Console" \
30
+ --product console \
31
+ --app-domain console.cloud.squareexp.com \
32
+ --redirect-uri http://localhost:3010/api/auth/callback \
33
+ --allowed-redirect-uris http://localhost:3010/api/auth/callback \
34
+ --allowed-origins http://localhost:3010 \
35
+ --allowed-scopes "openid profile console:manage" \
36
+ --allowed-auth-methods password,magic_link \
37
+ --requested-claims email,profile
38
+ ```
39
+
40
+ Add `--post --admin-token <token>` to register directly through the Base admin API.
41
+
42
+ ## Cloud Releases
43
+
44
+ This package is also emitted as a release artifact when we cut an SDK release.
45
+ The release bundle contains the packed npm tarball plus matching Go, Rust, and Laravel artifacts for the same Base IdP version.
46
+
47
+ To generate the local release bundle:
48
+
49
+ ```bash
50
+ ./scripts/release-base-idp-sdks.sh sdk-v1.0.0
51
+ ```
52
+
53
+ To download a published bundle:
54
+
55
+ ```bash
56
+ gh release download sdk-v1.0.0 --repo <owner>/<repo>
57
+ ```
58
+
59
+ ## Environment
60
+
61
+ Server-side:
62
+
63
+ ```env
64
+ BASE_IDP_ISSUER=https://authlayer.squareexp.com
65
+ BASE_IDP_CLIENT_ID=<your-client-id>
66
+ BASE_IDP_CLIENT_SECRET=<your-client-secret-if-confidential>
67
+ BASE_IDP_REDIRECT_URI=<exact-registered-callback-url>
68
+ BASE_IDP_SCOPES="openid profile <product>:read <product>:write"
69
+ BASE_IDP_REQUIRED_SCOPE=<product>:read
70
+ BASE_IDP_AUDIENCE=square-experience
71
+ ```
72
+
73
+ `BASE_IDP_SECRET` is still accepted by the runtime as a legacy alias, but `BASE_IDP_CLIENT_SECRET` is the preferred env name.
74
+
75
+ Vite/browser-safe:
76
+
77
+ ```env
78
+ VITE_BASE_IDP_ISSUER=https://authlayer.squareexp.com
79
+ VITE_BASE_IDP_CLIENT_ID=<public-client-id>
80
+ VITE_BASE_IDP_REDIRECT_URI=<exact-registered-callback-url>
81
+ VITE_BASE_IDP_SCOPES="openid profile <product>:read"
82
+ ```
83
+
84
+ Never expose `BASE_IDP_CLIENT_SECRET` in browser bundles.
85
+
86
+ ## Server-Side Backend Wiring
87
+
88
+ Use these surfaces when your app server talks to Base:
89
+
90
+ - `createNextBaseIdpAuth(...)` for Next.js App Router login and callback handlers
91
+ - `BaseIdpServerClient` for direct token exchange, refresh, and verification
92
+ - `createExpressMiddleware(...)` for Express / raw `http` route protection
93
+ - `createNestBaseIdpGuard(...)` for NestJS guards
94
+
95
+ If your service only needs to validate a bearer token, use the server client’s `verifyAccessToken(...)` method and keep the Base key + issuer in env. If the service also exchanges codes or refreshes tokens, provide the client secret too.
96
+
97
+ ## React Login Button
98
+
99
+ ```tsx
100
+ import { createReactBaseIdpAuth } from "@squareexp/base-idp/react";
101
+
102
+ const auth = createReactBaseIdpAuth({
103
+ issuer: "https://authlayer.squareexp.com",
104
+ clientId: "crm-web",
105
+ redirectUri: "https://crm.squareexp.com/auth/square/callback",
106
+ scopes: "openid profile crm:read crm:write",
107
+ });
108
+
109
+ export function LoginButton() {
110
+ return <button {...auth.buttonProps({ state: "/dashboard" })}>Continue with Base IdP</button>;
111
+ }
112
+ ```
113
+
114
+ ## Next.js App Router
115
+
116
+ ```ts
117
+ import { createNextBaseIdpAuth } from "@squareexp/base-idp/next";
118
+
119
+ const baseIdp = createNextBaseIdpAuth({
120
+ issuer: process.env.BASE_IDP_ISSUER!,
121
+ clientId: process.env.BASE_IDP_CLIENT_ID!,
122
+ clientSecret: process.env.BASE_IDP_CLIENT_SECRET!,
123
+ redirectUri: process.env.BASE_IDP_REDIRECT_URI!,
124
+ scopes: process.env.BASE_IDP_SCOPES!,
125
+ requiredScope: "crm:read",
126
+ });
127
+
128
+ export const GET = baseIdp.login;
129
+ ```
130
+
131
+ Callback route:
132
+
133
+ ```ts
134
+ export const GET = baseIdp.callback;
135
+ ```
136
+
137
+ ## Express/Nest Route Protection
138
+
139
+ ```ts
140
+ import { createExpressMiddleware, baseIdpConfigFromNodeEnv } from "@squareexp/base-idp/node";
141
+
142
+ const requireBaseIdpAuth = createExpressMiddleware(baseIdpConfigFromNodeEnv(), {
143
+ requiredScope: "crm:read",
144
+ attachUser: true,
145
+ });
146
+ ```
147
+
148
+ ## Server Token Verification
149
+
150
+ ```ts
151
+ import { BaseIdpServerClient } from "@squareexp/base-idp/server";
152
+
153
+ const baseIdp = new BaseIdpServerClient({
154
+ issuer: process.env.BASE_IDP_ISSUER!,
155
+ clientId: process.env.BASE_IDP_CLIENT_ID!,
156
+ redirectUri: process.env.BASE_IDP_REDIRECT_URI!,
157
+ scopes: process.env.BASE_IDP_SCOPES!,
158
+ requiredScope: "crm:read",
159
+ });
160
+
161
+ const principal = await baseIdp.verifyAccessToken(accessToken);
162
+ ```
@@ -0,0 +1,6 @@
1
+ export declare function base64UrlEncode(bytes: Uint8Array): string;
2
+ export declare function base64UrlDecode(value: string): Uint8Array;
3
+ export declare function utf8Encode(value: string): Uint8Array;
4
+ export declare function utf8Decode(value: Uint8Array): string;
5
+ export declare function concatBytes(parts: Uint8Array[]): Uint8Array;
6
+ //# sourceMappingURL=base64url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64url.d.ts","sourceRoot":"","sources":["../src/base64url.ts"],"names":[],"mappings":"AAAA,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CASzD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAWzD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAEpD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEpD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,UAAU,CAS3D"}
@@ -0,0 +1,39 @@
1
+ export function base64UrlEncode(bytes) {
2
+ if (typeof Buffer !== "undefined") {
3
+ return Buffer.from(bytes).toString("base64url");
4
+ }
5
+ let binary = "";
6
+ for (const byte of bytes) {
7
+ binary += String.fromCharCode(byte);
8
+ }
9
+ return btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/g, "");
10
+ }
11
+ export function base64UrlDecode(value) {
12
+ if (typeof Buffer !== "undefined") {
13
+ return new Uint8Array(Buffer.from(value, "base64url"));
14
+ }
15
+ const padded = value.replace(/-/g, "+").replace(/_/g, "/").padEnd(value.length + ((4 - (value.length % 4)) % 4), "=");
16
+ const binary = atob(padded);
17
+ const out = new Uint8Array(binary.length);
18
+ for (let i = 0; i < binary.length; i++) {
19
+ out[i] = binary.charCodeAt(i);
20
+ }
21
+ return out;
22
+ }
23
+ export function utf8Encode(value) {
24
+ return new TextEncoder().encode(value);
25
+ }
26
+ export function utf8Decode(value) {
27
+ return new TextDecoder().decode(value);
28
+ }
29
+ export function concatBytes(parts) {
30
+ const size = parts.reduce((sum, part) => sum + part.length, 0);
31
+ const out = new Uint8Array(size);
32
+ let offset = 0;
33
+ for (const part of parts) {
34
+ out.set(part, offset);
35
+ offset += part.length;
36
+ }
37
+ return out;
38
+ }
39
+ //# sourceMappingURL=base64url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64url.js","sourceRoot":"","sources":["../src/base64url.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe,CAAC,KAAiB;IAC/C,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtH,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAiB;IAC1C,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAmB;IAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACtB,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;IACxB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { BaseIdPClient } from "./client.js";
2
+ import type { BaseIdPConfig } from "./types.js";
3
+ export declare function createClientBootstrap(config: BaseIdPConfig): {
4
+ client: BaseIdPClient;
5
+ init(): Promise<{
6
+ env: string;
7
+ config: import("./types.js").ResolvedConfig;
8
+ }>;
9
+ };
10
+ //# sourceMappingURL=bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa;;;;;;EAc1D"}
@@ -0,0 +1,18 @@
1
+ import { BaseIdPClient } from "./client.js";
2
+ export function createClientBootstrap(config) {
3
+ const client = new BaseIdPClient(config);
4
+ return {
5
+ client,
6
+ async init() {
7
+ const resolved = await client.resolveConfig();
8
+ const env = [
9
+ `BASE_IDP_KEY=${config.key}`,
10
+ `BASE_IDP_ISSUER=${resolved.issuer}`,
11
+ ];
12
+ if (config.secret)
13
+ env.push(`BASE_IDP_CLIENT_SECRET=${config.secret}`);
14
+ return { env: env.join("\n"), config: resolved };
15
+ },
16
+ };
17
+ }
18
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,UAAU,qBAAqB,CAAC,MAAqB;IACzD,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,OAAO;QACL,MAAM;QACN,KAAK,CAAC,IAAI;YACR,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;YAC9C,MAAM,GAAG,GAAG;gBACV,gBAAgB,MAAM,CAAC,GAAG,EAAE;gBAC5B,mBAAmB,QAAQ,CAAC,MAAM,EAAE;aACrC,CAAC;YACF,IAAI,MAAM,CAAC,MAAM;gBAAE,GAAG,CAAC,IAAI,CAAC,0BAA0B,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACvE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QACnD,CAAC;KACF,CAAC;AACJ,CAAC"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,206 @@
1
+ #!/usr/bin/env node
2
+ async function main() {
3
+ const [, , command = "help", ...argv] = process.argv;
4
+ if (command !== "init" && command !== "test" && command !== "token" && command !== "help") {
5
+ printUsageAndExit(`Unknown command: ${command}`);
6
+ }
7
+ if (command === "help")
8
+ printUsageAndExit();
9
+ const args = parseArgs(argv);
10
+ if (command === "init") {
11
+ await initCommand(args);
12
+ }
13
+ else if (command === "test") {
14
+ await testCommand(args);
15
+ }
16
+ else if (command === "token") {
17
+ await tokenCommand(args);
18
+ }
19
+ }
20
+ async function initCommand(args) {
21
+ const key = stringArg(args, "key") || process.env.BASE_IDP_KEY;
22
+ const issuer = stringArg(args, "issuer") || process.env.BASE_IDP_ISSUER || "https://authlayer.squareexp.com";
23
+ const secret = stringArg(args, "client-secret") ||
24
+ stringArg(args, "secret") ||
25
+ process.env.BASE_IDP_CLIENT_SECRET ||
26
+ process.env.BASE_IDP_SECRET;
27
+ if (!key) {
28
+ printUsageAndExit("Missing --key (set BASE_IDP_KEY in your env or pass --key)");
29
+ }
30
+ const env = [
31
+ `BASE_IDP_KEY=${key}`,
32
+ `BASE_IDP_ISSUER=${issuer}`,
33
+ ];
34
+ if (secret)
35
+ env.push(`BASE_IDP_CLIENT_SECRET=${secret}`);
36
+ if (boolArg(args, "post", false)) {
37
+ const adminUrl = stringArg(args, "admin-url") || `${trimSlash(issuer)}/admin/v1/clients`;
38
+ const adminToken = stringArg(args, "admin-token");
39
+ if (!adminToken)
40
+ printUsageAndExit("--post requires --admin-token");
41
+ const response = await fetch(adminUrl, {
42
+ method: "POST",
43
+ headers: {
44
+ Accept: "application/json",
45
+ Authorization: `Bearer ${adminToken}`,
46
+ "Content-Type": "application/json",
47
+ },
48
+ body: JSON.stringify({
49
+ client_id: stringArg(args, "client-id") || undefined,
50
+ product: stringArg(args, "product") || "square",
51
+ display_name: stringArg(args, "display-name") || "My App",
52
+ app_domain: stringArg(args, "app-domain") || "",
53
+ allowed_redirect_uris: splitList(stringArg(args, "allowed-redirect-uris") || "").filter(Boolean),
54
+ allowed_scopes: splitList(stringArg(args, "allowed-scopes") || "openid profile"),
55
+ allowed_auth_methods: splitList(stringArg(args, "allowed-auth-methods") || "password,magic_link"),
56
+ confidential: boolArg(args, "confidential", true),
57
+ }),
58
+ });
59
+ const payload = await response.json().catch(() => ({}));
60
+ if (response.ok) {
61
+ console.log(JSON.stringify({ ok: true, payload }, null, 2));
62
+ console.log();
63
+ }
64
+ else {
65
+ console.error(JSON.stringify({ ok: false, status: response.status, payload }, null, 2));
66
+ process.exitCode = 1;
67
+ }
68
+ }
69
+ console.log(env.join("\n"));
70
+ }
71
+ async function testCommand(args) {
72
+ const issuer = stringArg(args, "issuer") || process.env.BASE_IDP_ISSUER || "https://authlayer.squareexp.com";
73
+ const key = stringArg(args, "key") || process.env.BASE_IDP_KEY;
74
+ console.log(`Testing Base IdP connection to ${issuer}...`);
75
+ try {
76
+ const health = await fetch(`${trimSlash(issuer)}/healthz`);
77
+ console.log(` healthz: ${health.status} ${health.ok ? "OK" : "FAIL"}`);
78
+ const discovery = await fetch(`${trimSlash(issuer)}/.well-known/square-identity`);
79
+ console.log(` discovery: ${discovery.status} ${discovery.ok ? "OK" : "FAIL"}`);
80
+ if (key) {
81
+ const config = await fetch(`${trimSlash(issuer)}/v1/client-config?key=${encodeURIComponent(key)}`);
82
+ console.log(` client-config: ${config.status} ${config.ok ? "OK" : "FAIL"}`);
83
+ }
84
+ console.log("\nIdP is reachable.");
85
+ }
86
+ catch (err) {
87
+ console.error(`Connection failed: ${err}`);
88
+ process.exitCode = 1;
89
+ }
90
+ }
91
+ async function tokenCommand(args) {
92
+ const token = stringArg(args, "token") || args._[0];
93
+ if (!token)
94
+ printUsageAndExit("Missing token argument");
95
+ const parts = token.split(".");
96
+ if (parts.length !== 4 || parts[0] !== "v4" || parts[1] !== "public") {
97
+ console.error("Not a PASETO v4.public token");
98
+ process.exit(1);
99
+ return;
100
+ }
101
+ const header = { version: parts[0], purpose: parts[1] };
102
+ const payload = decodeBase64Url(parts[2]);
103
+ const footer = decodeBase64Url(parts[3]);
104
+ try {
105
+ const claims = JSON.parse(new TextDecoder().decode(payload));
106
+ const footerObj = JSON.parse(new TextDecoder().decode(footer));
107
+ console.log("=== PASETO v4.public Token ===");
108
+ console.log(JSON.stringify({
109
+ header,
110
+ footer: footerObj,
111
+ claims: {
112
+ ...claims,
113
+ exp: claims.exp ? new Date(Date.parse(claims.exp)).toISOString() : undefined,
114
+ nbf: claims.nbf ? new Date(Date.parse(claims.nbf)).toISOString() : undefined,
115
+ iat: claims.iat ? new Date(Date.parse(claims.iat)).toISOString() : undefined,
116
+ },
117
+ }, null, 2));
118
+ const now = Date.now();
119
+ if (claims.exp && Date.parse(claims.exp) <= now) {
120
+ console.log("\n⚠ Token is EXPIRED");
121
+ }
122
+ }
123
+ catch {
124
+ console.log(JSON.stringify({ header, payload: "[binary]",
125
+ footer: new TextDecoder().decode(footer) }, null, 2));
126
+ }
127
+ }
128
+ function decodeBase64Url(value) {
129
+ const padded = value.replace(/-/g, "+").replace(/_/g, "/");
130
+ const binary = atob(padded);
131
+ const out = new Uint8Array(binary.length);
132
+ for (let i = 0; i < binary.length; i++)
133
+ out[i] = binary.charCodeAt(i);
134
+ return out;
135
+ }
136
+ function splitList(value) {
137
+ return value.split(/[,\s]+/).map((item) => item.trim()).filter(Boolean);
138
+ }
139
+ function stringArg(args, key) {
140
+ const value = args[key];
141
+ return typeof value === "string" ? value : "";
142
+ }
143
+ function boolArg(args, key, fallback) {
144
+ const value = args[key];
145
+ if (typeof value === "boolean")
146
+ return value;
147
+ if (typeof value === "string")
148
+ return !["0", "false", "no", "off"].includes(value.toLowerCase());
149
+ return fallback;
150
+ }
151
+ function parseArgs(argv) {
152
+ const args = { _: [] };
153
+ for (let i = 0; i < argv.length; i += 1) {
154
+ const raw = argv[i];
155
+ if (!raw.startsWith("--")) {
156
+ args._.push(raw);
157
+ continue;
158
+ }
159
+ const trimmed = raw.slice(2);
160
+ const equals = trimmed.indexOf("=");
161
+ if (equals >= 0) {
162
+ args[trimmed.slice(0, equals)] = trimmed.slice(equals + 1);
163
+ continue;
164
+ }
165
+ const key = trimmed;
166
+ const next = argv[i + 1];
167
+ if (!next || next.startsWith("--")) {
168
+ args[key] = true;
169
+ continue;
170
+ }
171
+ args[key] = next;
172
+ i += 1;
173
+ }
174
+ return args;
175
+ }
176
+ function trimSlash(value) {
177
+ return value.replace(/\/+$/, "");
178
+ }
179
+ function printUsageAndExit(reason) {
180
+ if (reason) {
181
+ console.error(reason);
182
+ console.error();
183
+ }
184
+ console.error(`Usage:
185
+ base-idp init [--key <key>] [--issuer <url>] Generate env config from a base key
186
+ base-idp test [--issuer <url>] [--key <key>] Test IdP connectivity
187
+ base-idp token <token> Decode and inspect a PASETO token
188
+
189
+ Init options:
190
+ --key <key> Base key (anon_key from Console)
191
+ --issuer <url> Base IdP issuer URL
192
+ --client-secret <secret> Client secret (confidential clients only)
193
+ --secret <secret> Legacy alias for --client-secret
194
+ --post Register client + output env
195
+ --admin-token <token> Admin token for --post
196
+
197
+ Test options:
198
+ --issuer <url> Base IdP issuer URL
199
+ --key <key> Base key to test client-config endpoint
200
+ `);
201
+ process.exit(1);
202
+ throw new Error(reason ?? "usage requested");
203
+ }
204
+ await main();
205
+ export {};
206
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { AuthorizeUrlOptions, BaseIdPConfig, BaseIdpIdentityMetadata, RefreshOptions, ResolvedConfig, BaseIdpPublicKeySet, TokenExchangeOptions, TokenPair } from "./types.js";
2
+ export declare class BaseIdPClient {
3
+ private readonly rawConfig;
4
+ protected readonly cfg: Required<ResolvedConfig>;
5
+ private metadataCache?;
6
+ private keyCache?;
7
+ constructor(rawConfig: BaseIdPConfig);
8
+ get issuer(): string;
9
+ get clientId(): string;
10
+ scopes(value?: string | string[]): string[];
11
+ resolveConfig(): Promise<ResolvedConfig>;
12
+ discovery(force?: boolean): Promise<BaseIdpIdentityMetadata>;
13
+ publicKeys(force?: boolean): Promise<BaseIdpPublicKeySet>;
14
+ authorizeUrl(options?: AuthorizeUrlOptions): string;
15
+ exchangeCode(options: TokenExchangeOptions): Promise<TokenPair>;
16
+ refresh(options: RefreshOptions): Promise<TokenPair>;
17
+ private postToken;
18
+ }
19
+ export { BaseIdPClient as BaseIdpClient };
20
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EAGb,uBAAuB,EACvB,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,SAAS,EACV,MAAM,YAAY,CAAC;AAEpB,qBAAa,aAAa;IAMZ,OAAO,CAAC,QAAQ,CAAC,SAAS;IALtC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IAEjD,OAAO,CAAC,aAAa,CAAC,CAA0B;IAChD,OAAO,CAAC,QAAQ,CAAC,CAAsB;gBAEV,SAAS,EAAE,aAAa;IA2BrD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,MAAM,CAAC,KAAK,GAAE,MAAM,GAAG,MAAM,EAAoB,GAAG,MAAM,EAAE;IAItD,aAAa,IAAI,OAAO,CAAC,cAAc,CAAC;IA0BxC,SAAS,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAa1D,UAAU,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAc7D,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,MAAM;IAsBjD,YAAY,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,SAAS,CAAC;IAiB/D,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC;YAgB5C,SAAS;CAexB;AAED,OAAO,EAAE,aAAa,IAAI,aAAa,EAAE,CAAC"}