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.
- package/README.md +162 -0
- package/dist/base64url.d.ts +6 -0
- package/dist/base64url.d.ts.map +1 -0
- package/dist/base64url.js +39 -0
- package/dist/base64url.js.map +1 -0
- package/dist/bootstrap.d.ts +10 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +18 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +206 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +20 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +169 -0
- package/dist/client.js.map +1 -0
- package/dist/errors.d.ts +12 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +17 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/next.d.ts +19 -0
- package/dist/next.d.ts.map +1 -0
- package/dist/next.js +39 -0
- package/dist/next.js.map +1 -0
- package/dist/node.d.ts +60 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +148 -0
- package/dist/node.js.map +1 -0
- package/dist/paseto.d.ts +15 -0
- package/dist/paseto.d.ts.map +1 -0
- package/dist/paseto.js +103 -0
- package/dist/paseto.js.map +1 -0
- package/dist/pkce.d.ts +3 -0
- package/dist/pkce.d.ts.map +1 -0
- package/dist/pkce.js +18 -0
- package/dist/pkce.js.map +1 -0
- package/dist/react.d.ts +12 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +21 -0
- package/dist/react.js.map +1 -0
- package/dist/server.d.ts +13 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +25 -0
- package/dist/server.js.map +1 -0
- package/dist/sveltekit.d.ts +17 -0
- package/dist/sveltekit.d.ts.map +1 -0
- package/dist/sveltekit.js +21 -0
- package/dist/sveltekit.js.map +1 -0
- package/dist/types.d.ts +138 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/vite.d.ts +6 -0
- package/dist/vite.d.ts.map +1 -0
- package/dist/vite.js +24 -0
- package/dist/vite.js.map +1 -0
- 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 @@
|
|
|
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
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
ADDED
|
@@ -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"}
|