@robelest/convex-auth 0.0.4-preview.2 → 0.0.4-preview.21
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 +67 -26
- package/dist/authorization/index.d.ts +63 -0
- package/dist/authorization/index.d.ts.map +1 -0
- package/dist/authorization/index.js +63 -0
- package/dist/authorization/index.js.map +1 -0
- package/dist/bin.js +6185 -0
- package/dist/client/core/types.d.ts +20 -0
- package/dist/client/core/types.d.ts.map +1 -0
- package/dist/client/index.d.ts +2 -299
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +407 -534
- package/dist/client/index.js.map +1 -1
- package/dist/component/_generated/api.d.ts +42 -0
- package/dist/component/_generated/api.d.ts.map +1 -1
- package/dist/component/_generated/api.js.map +1 -1
- package/dist/component/_generated/component.d.ts +2546 -90
- package/dist/component/_generated/component.d.ts.map +1 -1
- package/dist/component/client/core/types.d.ts +2 -0
- package/dist/component/client/index.d.ts +2 -0
- package/dist/component/convex.config.d.ts +2 -2
- package/dist/component/functions.d.ts +11 -9
- package/dist/component/functions.d.ts.map +1 -1
- package/dist/component/functions.js.map +1 -1
- package/dist/component/index.d.ts +7 -11
- package/dist/component/index.js +2 -3
- package/dist/component/model.d.ts +153 -0
- package/dist/component/model.d.ts.map +1 -0
- package/dist/component/model.js +349 -0
- package/dist/component/model.js.map +1 -0
- package/dist/component/providers/anonymous.d.ts +54 -0
- package/dist/component/providers/anonymous.d.ts.map +1 -0
- package/dist/component/providers/credentials.d.ts +5 -5
- package/dist/component/providers/credentials.d.ts.map +1 -1
- package/dist/component/providers/device.d.ts +67 -0
- package/dist/component/providers/device.d.ts.map +1 -0
- package/dist/component/providers/email.d.ts +62 -0
- package/dist/component/providers/email.d.ts.map +1 -0
- package/dist/component/providers/oauth.d.ts.map +1 -1
- package/dist/component/providers/oauth.js.map +1 -1
- package/dist/component/providers/passkey.d.ts +57 -0
- package/dist/component/providers/passkey.d.ts.map +1 -0
- package/dist/component/providers/password.d.ts +88 -0
- package/dist/component/providers/password.d.ts.map +1 -0
- package/dist/component/providers/phone.d.ts +48 -0
- package/dist/component/providers/phone.d.ts.map +1 -0
- package/dist/component/providers/sso.d.ts +50 -0
- package/dist/component/providers/sso.d.ts.map +1 -0
- package/dist/component/providers/totp.d.ts +45 -0
- package/dist/component/providers/totp.d.ts.map +1 -0
- package/dist/component/public/enterprise/audit.d.ts +73 -0
- package/dist/component/public/enterprise/audit.d.ts.map +1 -0
- package/dist/component/public/enterprise/audit.js +108 -0
- package/dist/component/public/enterprise/audit.js.map +1 -0
- package/dist/component/public/enterprise/core.d.ts +176 -0
- package/dist/component/public/enterprise/core.d.ts.map +1 -0
- package/dist/component/public/enterprise/core.js +292 -0
- package/dist/component/public/enterprise/core.js.map +1 -0
- package/dist/component/public/enterprise/domains.d.ts +174 -0
- package/dist/component/public/enterprise/domains.d.ts.map +1 -0
- package/dist/component/public/enterprise/domains.js +271 -0
- package/dist/component/public/enterprise/domains.js.map +1 -0
- package/dist/component/public/enterprise/scim.d.ts +245 -0
- package/dist/component/public/enterprise/scim.d.ts.map +1 -0
- package/dist/component/public/enterprise/scim.js +344 -0
- package/dist/component/public/enterprise/scim.js.map +1 -0
- package/dist/component/public/enterprise/secrets.d.ts +78 -0
- package/dist/component/public/enterprise/secrets.d.ts.map +1 -0
- package/dist/component/public/enterprise/secrets.js +118 -0
- package/dist/component/public/enterprise/secrets.js.map +1 -0
- package/dist/component/public/enterprise/webhooks.d.ts +211 -0
- package/dist/component/public/enterprise/webhooks.d.ts.map +1 -0
- package/dist/component/public/enterprise/webhooks.js +300 -0
- package/dist/component/public/enterprise/webhooks.js.map +1 -0
- package/dist/component/public/factors/devices.d.ts +157 -0
- package/dist/component/public/factors/devices.d.ts.map +1 -0
- package/dist/component/public/factors/devices.js +216 -0
- package/dist/component/public/factors/devices.js.map +1 -0
- package/dist/component/public/factors/passkeys.d.ts +175 -0
- package/dist/component/public/factors/passkeys.d.ts.map +1 -0
- package/dist/component/public/factors/passkeys.js +238 -0
- package/dist/component/public/factors/passkeys.js.map +1 -0
- package/dist/component/public/factors/totp.d.ts +189 -0
- package/dist/component/public/factors/totp.d.ts.map +1 -0
- package/dist/component/public/factors/totp.js +254 -0
- package/dist/component/public/factors/totp.js.map +1 -0
- package/dist/component/public/groups/core.d.ts +137 -0
- package/dist/component/public/groups/core.d.ts.map +1 -0
- package/dist/component/public/groups/core.js +321 -0
- package/dist/component/public/groups/core.js.map +1 -0
- package/dist/component/public/groups/invites.d.ts +217 -0
- package/dist/component/public/groups/invites.d.ts.map +1 -0
- package/dist/component/public/groups/invites.js +457 -0
- package/dist/component/public/groups/invites.js.map +1 -0
- package/dist/component/public/groups/members.d.ts +204 -0
- package/dist/component/public/groups/members.d.ts.map +1 -0
- package/dist/component/public/groups/members.js +355 -0
- package/dist/component/public/groups/members.js.map +1 -0
- package/dist/component/public/identity/accounts.d.ts +147 -0
- package/dist/component/public/identity/accounts.d.ts.map +1 -0
- package/dist/component/public/identity/accounts.js +200 -0
- package/dist/component/public/identity/accounts.js.map +1 -0
- package/dist/component/public/identity/codes.d.ts +104 -0
- package/dist/component/public/identity/codes.d.ts.map +1 -0
- package/dist/component/public/identity/codes.js +140 -0
- package/dist/component/public/identity/codes.js.map +1 -0
- package/dist/component/public/identity/sessions.d.ts +128 -0
- package/dist/component/public/identity/sessions.d.ts.map +1 -0
- package/dist/component/public/identity/sessions.js +192 -0
- package/dist/component/public/identity/sessions.js.map +1 -0
- package/dist/component/public/identity/tokens.d.ts +169 -0
- package/dist/component/public/identity/tokens.d.ts.map +1 -0
- package/dist/component/public/identity/tokens.js +227 -0
- package/dist/component/public/identity/tokens.js.map +1 -0
- package/dist/component/public/identity/users.d.ts +212 -0
- package/dist/component/public/identity/users.d.ts.map +1 -0
- package/dist/component/public/identity/users.js +311 -0
- package/dist/component/public/identity/users.js.map +1 -0
- package/dist/component/public/identity/verifiers.d.ts +116 -0
- package/dist/component/public/identity/verifiers.d.ts.map +1 -0
- package/dist/component/public/identity/verifiers.js +154 -0
- package/dist/component/public/identity/verifiers.js.map +1 -0
- package/dist/component/public/security/keys.d.ts +209 -0
- package/dist/component/public/security/keys.d.ts.map +1 -0
- package/dist/component/public/security/keys.js +319 -0
- package/dist/component/public/security/keys.js.map +1 -0
- package/dist/component/public/security/limits.d.ts +114 -0
- package/dist/component/public/security/limits.d.ts.map +1 -0
- package/dist/component/public/security/limits.js +169 -0
- package/dist/component/public/security/limits.js.map +1 -0
- package/dist/component/public.d.ts +24 -271
- package/dist/component/public.d.ts.map +1 -1
- package/dist/component/public.js +21 -1229
- package/dist/component/schema.d.ts +473 -110
- package/dist/component/schema.js +162 -73
- package/dist/component/schema.js.map +1 -1
- package/dist/component/server/auth.d.ts +318 -373
- package/dist/component/server/auth.d.ts.map +1 -1
- package/dist/component/server/auth.js +204 -123
- package/dist/component/server/auth.js.map +1 -1
- package/dist/component/server/authError.js +34 -0
- package/dist/component/server/authError.js.map +1 -0
- package/dist/component/server/{providers.js → config.js} +43 -12
- package/dist/component/server/config.js.map +1 -0
- package/dist/component/server/cookies.js +3 -0
- package/dist/component/server/cookies.js.map +1 -1
- package/dist/component/server/core.js +713 -0
- package/dist/component/server/core.js.map +1 -0
- package/dist/component/server/crypto.js +38 -0
- package/dist/component/server/crypto.js.map +1 -0
- package/dist/component/server/{implementation/db.js → db.js} +2 -1
- package/dist/component/server/db.js.map +1 -0
- package/dist/component/server/device.js +109 -0
- package/dist/component/server/device.js.map +1 -0
- package/dist/component/server/enterprise/config.js +46 -0
- package/dist/component/server/enterprise/config.js.map +1 -0
- package/dist/component/server/enterprise/domain.js +885 -0
- package/dist/component/server/enterprise/domain.js.map +1 -0
- package/dist/component/server/enterprise/http.js +766 -0
- package/dist/component/server/enterprise/http.js.map +1 -0
- package/dist/component/server/enterprise/oidc.js +248 -0
- package/dist/component/server/enterprise/oidc.js.map +1 -0
- package/dist/component/server/enterprise/policy.js +85 -0
- package/dist/component/server/enterprise/policy.js.map +1 -0
- package/dist/component/server/enterprise/saml.js +338 -0
- package/dist/component/server/enterprise/saml.js.map +1 -0
- package/dist/component/server/enterprise/scim.js +97 -0
- package/dist/component/server/enterprise/scim.js.map +1 -0
- package/dist/component/server/enterprise/shared.js +51 -0
- package/dist/component/server/enterprise/shared.js.map +1 -0
- package/dist/component/server/errors.d.ts +1 -0
- package/dist/component/server/errors.js +24 -16
- package/dist/component/server/errors.js.map +1 -1
- package/dist/component/server/http.js +288 -0
- package/dist/component/server/http.js.map +1 -0
- package/dist/component/server/identity.js +13 -0
- package/dist/component/server/identity.js.map +1 -0
- package/dist/{server/implementation → component/server}/keys.js +9 -31
- package/dist/component/server/keys.js.map +1 -0
- package/dist/component/server/limits.js +61 -0
- package/dist/component/server/limits.js.map +1 -0
- package/dist/component/server/mutations/account.js +44 -0
- package/dist/component/server/mutations/account.js.map +1 -0
- package/dist/component/server/{implementation/mutations → mutations}/code.js +7 -4
- package/dist/component/server/mutations/code.js.map +1 -0
- package/dist/component/server/mutations/invalidate.js +32 -0
- package/dist/component/server/mutations/invalidate.js.map +1 -0
- package/dist/component/server/mutations/oauth.js +110 -0
- package/dist/component/server/mutations/oauth.js.map +1 -0
- package/dist/component/server/mutations/refresh.js +119 -0
- package/dist/component/server/mutations/refresh.js.map +1 -0
- package/dist/component/server/mutations/register.js +83 -0
- package/dist/component/server/mutations/register.js.map +1 -0
- package/dist/component/server/mutations/retrieve.js +65 -0
- package/dist/component/server/mutations/retrieve.js.map +1 -0
- package/dist/component/server/mutations/signature.js +32 -0
- package/dist/component/server/mutations/signature.js.map +1 -0
- package/dist/component/server/{implementation/mutations → mutations}/signin.js +2 -2
- package/dist/component/server/mutations/signin.js.map +1 -0
- package/dist/component/server/mutations/signout.js +27 -0
- package/dist/component/server/mutations/signout.js.map +1 -0
- package/dist/component/server/mutations/store/refs.js +15 -0
- package/dist/component/server/mutations/store/refs.js.map +1 -0
- package/dist/component/server/mutations/store.js +85 -0
- package/dist/component/server/mutations/store.js.map +1 -0
- package/dist/component/server/mutations/verifier.js +18 -0
- package/dist/component/server/mutations/verifier.js.map +1 -0
- package/dist/component/server/mutations/verify.js +98 -0
- package/dist/component/server/mutations/verify.js.map +1 -0
- package/dist/component/server/oauth.js +106 -60
- package/dist/component/server/oauth.js.map +1 -1
- package/dist/component/server/passkey.js +328 -0
- package/dist/component/server/passkey.js.map +1 -0
- package/dist/{server/implementation → component/server}/redirects.js +13 -11
- package/dist/component/server/redirects.js.map +1 -0
- package/dist/component/server/refresh.js +96 -0
- package/dist/component/server/refresh.js.map +1 -0
- package/dist/component/server/runtime.d.ts +136 -0
- package/dist/component/server/runtime.d.ts.map +1 -0
- package/dist/component/server/runtime.js +413 -0
- package/dist/component/server/runtime.js.map +1 -0
- package/dist/{server/implementation → component/server}/sessions.js +14 -8
- package/dist/component/server/sessions.js.map +1 -0
- package/dist/component/server/signin.js +201 -0
- package/dist/component/server/signin.js.map +1 -0
- package/dist/component/server/tokens.js +17 -0
- package/dist/component/server/tokens.js.map +1 -0
- package/dist/component/server/totp.js +148 -0
- package/dist/component/server/totp.js.map +1 -0
- package/dist/component/server/types.d.ts +387 -298
- package/dist/component/server/types.d.ts.map +1 -1
- package/dist/component/server/{implementation/types.js → types.js} +1 -1
- package/dist/component/server/types.js.map +1 -0
- package/dist/component/server/{implementation/users.js → users.js} +54 -35
- package/dist/component/server/users.js.map +1 -0
- package/dist/component/server/utils.js +110 -4
- package/dist/component/server/utils.js.map +1 -1
- package/dist/core/types.d.ts +369 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/factors/device.js +105 -0
- package/dist/factors/device.js.map +1 -0
- package/dist/factors/passkey.js +181 -0
- package/dist/factors/passkey.js.map +1 -0
- package/dist/factors/totp.js +122 -0
- package/dist/factors/totp.js.map +1 -0
- package/dist/providers/anonymous.d.ts +3 -9
- package/dist/providers/anonymous.d.ts.map +1 -1
- package/dist/providers/anonymous.js +1 -18
- package/dist/providers/anonymous.js.map +1 -1
- package/dist/providers/credentials.d.ts +8 -10
- package/dist/providers/credentials.d.ts.map +1 -1
- package/dist/providers/credentials.js +3 -5
- package/dist/providers/credentials.js.map +1 -1
- package/dist/providers/device.d.ts +18 -10
- package/dist/providers/device.d.ts.map +1 -1
- package/dist/providers/device.js +4 -8
- package/dist/providers/device.js.map +1 -1
- package/dist/providers/email.d.ts +50 -23
- package/dist/providers/email.d.ts.map +1 -1
- package/dist/providers/email.js +58 -34
- package/dist/providers/email.js.map +1 -1
- package/dist/providers/index.d.ts +7 -3
- package/dist/providers/index.js +4 -1
- package/dist/providers/oauth.d.ts.map +1 -1
- package/dist/providers/oauth.js.map +1 -1
- package/dist/providers/passkey.d.ts +12 -9
- package/dist/providers/passkey.d.ts.map +1 -1
- package/dist/providers/passkey.js +1 -7
- package/dist/providers/passkey.js.map +1 -1
- package/dist/providers/password.d.ts +6 -12
- package/dist/providers/password.d.ts.map +1 -1
- package/dist/providers/password.js +189 -89
- package/dist/providers/password.js.map +1 -1
- package/dist/providers/phone.d.ts +40 -11
- package/dist/providers/phone.d.ts.map +1 -1
- package/dist/providers/phone.js +52 -21
- package/dist/providers/phone.js.map +1 -1
- package/dist/providers/sso.d.ts +50 -0
- package/dist/providers/sso.d.ts.map +1 -0
- package/dist/providers/sso.js +34 -0
- package/dist/providers/sso.js.map +1 -0
- package/dist/providers/totp.d.ts +12 -9
- package/dist/providers/totp.d.ts.map +1 -1
- package/dist/providers/totp.js +1 -7
- package/dist/providers/totp.js.map +1 -1
- package/dist/runtime/browser.js +68 -0
- package/dist/runtime/browser.js.map +1 -0
- package/dist/runtime/invite.js +51 -0
- package/dist/runtime/invite.js.map +1 -0
- package/dist/runtime/proxy.js +70 -0
- package/dist/runtime/proxy.js.map +1 -0
- package/dist/runtime/storage.js +37 -0
- package/dist/runtime/storage.js.map +1 -0
- package/dist/server/auth.d.ts +335 -370
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +204 -123
- package/dist/server/auth.js.map +1 -1
- package/dist/server/authError.d.ts +46 -0
- package/dist/server/authError.d.ts.map +1 -0
- package/dist/server/authError.js +34 -0
- package/dist/server/authError.js.map +1 -0
- package/dist/server/config.d.ts +1 -0
- package/dist/server/{providers.js → config.js} +43 -12
- package/dist/server/config.js.map +1 -0
- package/dist/server/cookies.d.ts +1 -38
- package/dist/server/cookies.js +3 -0
- package/dist/server/cookies.js.map +1 -1
- package/dist/server/core.d.ts +1436 -0
- package/dist/server/core.d.ts.map +1 -0
- package/dist/server/core.js +713 -0
- package/dist/server/core.js.map +1 -0
- package/dist/server/crypto.d.ts +8 -0
- package/dist/server/crypto.d.ts.map +1 -0
- package/dist/server/crypto.js +38 -0
- package/dist/server/crypto.js.map +1 -0
- package/dist/server/db.d.ts +1 -0
- package/dist/server/{implementation/db.js → db.js} +2 -1
- package/dist/server/db.js.map +1 -0
- package/dist/server/device.d.ts +1 -0
- package/dist/server/device.js +109 -0
- package/dist/server/device.js.map +1 -0
- package/dist/server/enterprise/config.d.ts +1 -0
- package/dist/server/enterprise/config.js +46 -0
- package/dist/server/enterprise/config.js.map +1 -0
- package/dist/server/enterprise/domain.d.ts +409 -0
- package/dist/server/enterprise/domain.d.ts.map +1 -0
- package/dist/server/enterprise/domain.js +885 -0
- package/dist/server/enterprise/domain.js.map +1 -0
- package/dist/server/enterprise/http.d.ts +26 -0
- package/dist/server/enterprise/http.d.ts.map +1 -0
- package/dist/server/enterprise/http.js +766 -0
- package/dist/server/enterprise/http.js.map +1 -0
- package/dist/server/enterprise/oidc.d.ts +1 -0
- package/dist/server/enterprise/oidc.js +248 -0
- package/dist/server/enterprise/oidc.js.map +1 -0
- package/dist/server/enterprise/policy.d.ts +1 -0
- package/dist/server/enterprise/policy.js +85 -0
- package/dist/server/enterprise/policy.js.map +1 -0
- package/dist/server/enterprise/saml.d.ts +1 -0
- package/dist/server/enterprise/saml.js +338 -0
- package/dist/server/enterprise/saml.js.map +1 -0
- package/dist/server/enterprise/scim.d.ts +1 -0
- package/dist/server/enterprise/scim.js +97 -0
- package/dist/server/enterprise/scim.js.map +1 -0
- package/dist/server/enterprise/shared.d.ts +5 -0
- package/dist/server/enterprise/shared.d.ts.map +1 -0
- package/dist/server/enterprise/shared.js +51 -0
- package/dist/server/enterprise/shared.js.map +1 -0
- package/dist/server/enterprise/validators.d.ts +1 -0
- package/dist/server/enterprise/validators.js +60 -0
- package/dist/server/enterprise/validators.js.map +1 -0
- package/dist/server/errors.d.ts +33 -1
- package/dist/server/errors.d.ts.map +1 -1
- package/dist/server/errors.js +44 -1
- package/dist/server/errors.js.map +1 -1
- package/dist/server/http.d.ts +59 -0
- package/dist/server/http.d.ts.map +1 -0
- package/dist/server/http.js +288 -0
- package/dist/server/http.js.map +1 -0
- package/dist/server/identity.d.ts +1 -0
- package/dist/server/identity.js +13 -0
- package/dist/server/identity.js.map +1 -0
- package/dist/server/index.d.ts +4 -182
- package/dist/server/index.js +4 -376
- package/dist/server/keys.d.ts +1 -0
- package/dist/{component/server/implementation → server}/keys.js +9 -31
- package/dist/server/keys.js.map +1 -0
- package/dist/server/limits.d.ts +1 -0
- package/dist/server/limits.js +61 -0
- package/dist/server/limits.js.map +1 -0
- package/dist/server/mounts.d.ts +647 -0
- package/dist/server/mounts.d.ts.map +1 -0
- package/dist/server/mounts.js +643 -0
- package/dist/server/mounts.js.map +1 -0
- package/dist/server/mutations/account.d.ts +30 -0
- package/dist/server/mutations/account.d.ts.map +1 -0
- package/dist/server/mutations/account.js +44 -0
- package/dist/server/mutations/account.js.map +1 -0
- package/dist/server/mutations/code.d.ts +30 -0
- package/dist/server/mutations/code.d.ts.map +1 -0
- package/dist/server/{implementation/mutations → mutations}/code.js +7 -4
- package/dist/server/mutations/code.js.map +1 -0
- package/dist/server/mutations/index.d.ts +14 -0
- package/dist/server/mutations/index.js +15 -0
- package/dist/server/mutations/invalidate.d.ts +20 -0
- package/dist/server/mutations/invalidate.d.ts.map +1 -0
- package/dist/server/mutations/invalidate.js +32 -0
- package/dist/server/mutations/invalidate.js.map +1 -0
- package/dist/server/mutations/oauth.d.ts +28 -0
- package/dist/server/mutations/oauth.d.ts.map +1 -0
- package/dist/server/mutations/oauth.js +110 -0
- package/dist/server/mutations/oauth.js.map +1 -0
- package/dist/server/mutations/refresh.d.ts +21 -0
- package/dist/server/mutations/refresh.d.ts.map +1 -0
- package/dist/server/mutations/refresh.js +119 -0
- package/dist/server/mutations/refresh.js.map +1 -0
- package/dist/server/mutations/register.d.ts +38 -0
- package/dist/server/mutations/register.d.ts.map +1 -0
- package/dist/server/mutations/register.js +83 -0
- package/dist/server/mutations/register.js.map +1 -0
- package/dist/server/mutations/retrieve.d.ts +33 -0
- package/dist/server/mutations/retrieve.d.ts.map +1 -0
- package/dist/server/mutations/retrieve.js +65 -0
- package/dist/server/mutations/retrieve.js.map +1 -0
- package/dist/server/mutations/signature.d.ts +22 -0
- package/dist/server/mutations/signature.d.ts.map +1 -0
- package/dist/server/mutations/signature.js +32 -0
- package/dist/server/mutations/signature.js.map +1 -0
- package/dist/server/mutations/signin.d.ts +22 -0
- package/dist/server/mutations/signin.d.ts.map +1 -0
- package/dist/server/{implementation/mutations → mutations}/signin.js +2 -2
- package/dist/server/mutations/signin.js.map +1 -0
- package/dist/server/mutations/signout.d.ts +16 -0
- package/dist/server/mutations/signout.d.ts.map +1 -0
- package/dist/server/mutations/signout.js +27 -0
- package/dist/server/mutations/signout.js.map +1 -0
- package/dist/server/mutations/store/refs.d.ts +12 -0
- package/dist/server/mutations/store/refs.d.ts.map +1 -0
- package/dist/server/mutations/store/refs.js +15 -0
- package/dist/server/mutations/store/refs.js.map +1 -0
- package/dist/server/mutations/store.d.ts +306 -0
- package/dist/server/mutations/store.d.ts.map +1 -0
- package/dist/server/mutations/store.js +85 -0
- package/dist/server/mutations/store.js.map +1 -0
- package/dist/server/mutations/verifier.d.ts +13 -0
- package/dist/server/mutations/verifier.d.ts.map +1 -0
- package/dist/server/mutations/verifier.js +18 -0
- package/dist/server/mutations/verifier.js.map +1 -0
- package/dist/server/mutations/verify.d.ts +26 -0
- package/dist/server/mutations/verify.d.ts.map +1 -0
- package/dist/server/mutations/verify.js +98 -0
- package/dist/server/mutations/verify.js.map +1 -0
- package/dist/server/oauth.d.ts +1 -48
- package/dist/server/oauth.js +107 -64
- package/dist/server/oauth.js.map +1 -1
- package/dist/server/passkey.d.ts +27 -0
- package/dist/server/passkey.d.ts.map +1 -0
- package/dist/server/passkey.js +328 -0
- package/dist/server/passkey.js.map +1 -0
- package/dist/server/redirects.d.ts +1 -0
- package/dist/{component/server/implementation → server}/redirects.js +13 -11
- package/dist/server/redirects.js.map +1 -0
- package/dist/server/refresh.d.ts +1 -0
- package/dist/server/refresh.js +96 -0
- package/dist/server/refresh.js.map +1 -0
- package/dist/server/runtime.d.ts +136 -0
- package/dist/server/runtime.d.ts.map +1 -0
- package/dist/server/runtime.js +413 -0
- package/dist/server/runtime.js.map +1 -0
- package/dist/server/sessions.d.ts +1 -0
- package/dist/{component/server/implementation → server}/sessions.js +14 -8
- package/dist/server/sessions.js.map +1 -0
- package/dist/server/signin.d.ts +1 -0
- package/dist/server/signin.js +201 -0
- package/dist/server/signin.js.map +1 -0
- package/dist/server/ssr.d.ts +226 -0
- package/dist/server/ssr.d.ts.map +1 -0
- package/dist/server/ssr.js +786 -0
- package/dist/server/ssr.js.map +1 -0
- package/dist/server/templates.d.ts +1 -21
- package/dist/server/templates.js +2 -1
- package/dist/server/templates.js.map +1 -1
- package/dist/server/tokens.d.ts +1 -0
- package/dist/server/tokens.js +17 -0
- package/dist/server/tokens.js.map +1 -0
- package/dist/server/totp.d.ts +1 -0
- package/dist/server/totp.js +148 -0
- package/dist/server/totp.js.map +1 -0
- package/dist/server/types.d.ts +498 -306
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js +108 -1
- package/dist/server/types.js.map +1 -0
- package/dist/server/users.d.ts +1 -0
- package/dist/server/{implementation/users.js → users.js} +54 -35
- package/dist/server/users.js.map +1 -0
- package/dist/server/utils.d.ts +1 -6
- package/dist/server/utils.js +110 -4
- package/dist/server/utils.js.map +1 -1
- package/package.json +49 -46
- package/src/authorization/index.ts +83 -0
- package/src/cli/bin.ts +5 -0
- package/src/cli/command.ts +6 -5
- package/src/cli/index.ts +456 -248
- package/src/cli/keys.ts +3 -0
- package/src/client/core/types.ts +437 -0
- package/src/client/factors/device.ts +160 -0
- package/src/client/factors/passkey.ts +282 -0
- package/src/client/factors/totp.ts +150 -0
- package/src/client/index.ts +745 -989
- package/src/client/runtime/browser.ts +112 -0
- package/src/client/runtime/invite.ts +65 -0
- package/src/client/runtime/proxy.ts +111 -0
- package/src/client/runtime/storage.ts +79 -0
- package/src/component/_generated/api.ts +42 -0
- package/src/component/_generated/component.ts +3123 -102
- package/src/component/functions.ts +38 -22
- package/src/component/index.ts +10 -20
- package/src/component/model.ts +449 -0
- package/src/component/public/enterprise/audit.ts +120 -0
- package/src/component/public/enterprise/core.ts +354 -0
- package/src/component/public/enterprise/domains.ts +323 -0
- package/src/component/public/enterprise/scim.ts +396 -0
- package/src/component/public/enterprise/secrets.ts +132 -0
- package/src/component/public/enterprise/webhooks.ts +306 -0
- package/src/component/public/factors/devices.ts +223 -0
- package/src/component/public/factors/passkeys.ts +242 -0
- package/src/component/public/factors/totp.ts +258 -0
- package/src/component/public/groups/core.ts +481 -0
- package/src/component/public/groups/invites.ts +602 -0
- package/src/component/public/groups/members.ts +409 -0
- package/src/component/public/identity/accounts.ts +206 -0
- package/src/component/public/identity/codes.ts +148 -0
- package/src/component/public/identity/sessions.ts +209 -0
- package/src/component/public/identity/tokens.ts +250 -0
- package/src/component/public/identity/users.ts +354 -0
- package/src/component/public/identity/verifiers.ts +157 -0
- package/src/component/public/security/keys.ts +365 -0
- package/src/component/public/security/limits.ts +173 -0
- package/src/component/public.ts +26 -1766
- package/src/component/schema.ts +273 -100
- package/src/providers/anonymous.ts +10 -20
- package/src/providers/credentials.ts +14 -22
- package/src/providers/device.ts +3 -14
- package/src/providers/email.ts +83 -47
- package/src/providers/index.ts +7 -0
- package/src/providers/oauth.ts +5 -3
- package/src/providers/passkey.ts +0 -13
- package/src/providers/password.ts +307 -130
- package/src/providers/phone.ts +81 -37
- package/src/providers/sso.ts +54 -0
- package/src/providers/totp.ts +0 -13
- package/src/samlify.d.ts +53 -0
- package/src/server/auth.ts +701 -247
- package/src/server/authError.ts +44 -0
- package/src/server/{providers.ts → config.ts} +84 -15
- package/src/server/cookies.ts +8 -1
- package/src/server/core.ts +2095 -0
- package/src/server/crypto.ts +88 -0
- package/src/server/{implementation/db.ts → db.ts} +90 -15
- package/src/server/device.ts +221 -0
- package/src/server/enterprise/config.ts +51 -0
- package/src/server/enterprise/domain.ts +1751 -0
- package/src/server/enterprise/http.ts +1324 -0
- package/src/server/enterprise/oidc.ts +500 -0
- package/src/server/enterprise/policy.ts +128 -0
- package/src/server/enterprise/saml.ts +578 -0
- package/src/server/enterprise/scim.ts +135 -0
- package/src/server/enterprise/shared.ts +134 -0
- package/src/server/enterprise/validators.ts +93 -0
- package/src/server/errors.ts +130 -119
- package/src/server/http.ts +531 -0
- package/src/server/identity.ts +18 -0
- package/src/server/index.ts +32 -650
- package/src/server/{implementation/keys.ts → keys.ts} +16 -44
- package/src/server/limits.ts +134 -0
- package/src/server/mounts.ts +948 -0
- package/src/server/mutations/account.ts +76 -0
- package/src/server/{implementation/mutations → mutations}/code.ts +22 -11
- package/src/server/mutations/index.ts +13 -0
- package/src/server/mutations/invalidate.ts +50 -0
- package/src/server/mutations/oauth.ts +237 -0
- package/src/server/mutations/refresh.ts +298 -0
- package/src/server/mutations/register.ts +200 -0
- package/src/server/mutations/retrieve.ts +109 -0
- package/src/server/mutations/signature.ts +50 -0
- package/src/server/{implementation/mutations → mutations}/signin.ts +9 -7
- package/src/server/mutations/signout.ts +43 -0
- package/src/server/mutations/store/refs.ts +10 -0
- package/src/server/mutations/store.ts +138 -0
- package/src/server/mutations/verifier.ts +34 -0
- package/src/server/mutations/verify.ts +202 -0
- package/src/server/oauth.ts +243 -131
- package/src/server/passkey.ts +784 -0
- package/src/server/{implementation/redirects.ts → redirects.ts} +21 -16
- package/src/server/refresh.ts +222 -0
- package/src/server/runtime.ts +880 -0
- package/src/server/{implementation/sessions.ts → sessions.ts} +33 -25
- package/src/server/signin.ts +438 -0
- package/src/server/ssr.ts +1764 -0
- package/src/server/templates.ts +8 -3
- package/src/server/{implementation/tokens.ts → tokens.ts} +11 -5
- package/src/server/totp.ts +349 -0
- package/src/server/types.ts +972 -207
- package/src/server/{implementation/users.ts → users.ts} +129 -75
- package/src/server/utils.ts +192 -5
- package/src/test.ts +28 -4
- package/dist/bin.cjs +0 -27757
- package/dist/component/providers/email.js +0 -47
- package/dist/component/providers/email.js.map +0 -1
- package/dist/component/public.js.map +0 -1
- package/dist/component/server/implementation/db.js.map +0 -1
- package/dist/component/server/implementation/device.js +0 -135
- package/dist/component/server/implementation/device.js.map +0 -1
- package/dist/component/server/implementation/index.d.ts +0 -870
- package/dist/component/server/implementation/index.d.ts.map +0 -1
- package/dist/component/server/implementation/index.js +0 -610
- package/dist/component/server/implementation/index.js.map +0 -1
- package/dist/component/server/implementation/keys.js.map +0 -1
- package/dist/component/server/implementation/mutations/account.js +0 -39
- package/dist/component/server/implementation/mutations/account.js.map +0 -1
- package/dist/component/server/implementation/mutations/code.js.map +0 -1
- package/dist/component/server/implementation/mutations/index.js +0 -70
- package/dist/component/server/implementation/mutations/index.js.map +0 -1
- package/dist/component/server/implementation/mutations/invalidate.js +0 -29
- package/dist/component/server/implementation/mutations/invalidate.js.map +0 -1
- package/dist/component/server/implementation/mutations/oauth.js +0 -51
- package/dist/component/server/implementation/mutations/oauth.js.map +0 -1
- package/dist/component/server/implementation/mutations/refresh.js +0 -85
- package/dist/component/server/implementation/mutations/refresh.js.map +0 -1
- package/dist/component/server/implementation/mutations/register.js +0 -65
- package/dist/component/server/implementation/mutations/register.js.map +0 -1
- package/dist/component/server/implementation/mutations/retrieve.js +0 -50
- package/dist/component/server/implementation/mutations/retrieve.js.map +0 -1
- package/dist/component/server/implementation/mutations/signature.js +0 -27
- package/dist/component/server/implementation/mutations/signature.js.map +0 -1
- package/dist/component/server/implementation/mutations/signin.js.map +0 -1
- package/dist/component/server/implementation/mutations/signout.js +0 -27
- package/dist/component/server/implementation/mutations/signout.js.map +0 -1
- package/dist/component/server/implementation/mutations/store.js +0 -12
- package/dist/component/server/implementation/mutations/store.js.map +0 -1
- package/dist/component/server/implementation/mutations/verifier.js +0 -16
- package/dist/component/server/implementation/mutations/verifier.js.map +0 -1
- package/dist/component/server/implementation/mutations/verify.js +0 -105
- package/dist/component/server/implementation/mutations/verify.js.map +0 -1
- package/dist/component/server/implementation/passkey.js +0 -307
- package/dist/component/server/implementation/passkey.js.map +0 -1
- package/dist/component/server/implementation/provider.js +0 -19
- package/dist/component/server/implementation/provider.js.map +0 -1
- package/dist/component/server/implementation/ratelimit.js +0 -48
- package/dist/component/server/implementation/ratelimit.js.map +0 -1
- package/dist/component/server/implementation/redirects.js.map +0 -1
- package/dist/component/server/implementation/refresh.js +0 -109
- package/dist/component/server/implementation/refresh.js.map +0 -1
- package/dist/component/server/implementation/sessions.js.map +0 -1
- package/dist/component/server/implementation/signin.js +0 -148
- package/dist/component/server/implementation/signin.js.map +0 -1
- package/dist/component/server/implementation/tokens.js +0 -15
- package/dist/component/server/implementation/tokens.js.map +0 -1
- package/dist/component/server/implementation/totp.js +0 -142
- package/dist/component/server/implementation/totp.js.map +0 -1
- package/dist/component/server/implementation/types.d.ts +0 -42
- package/dist/component/server/implementation/types.d.ts.map +0 -1
- package/dist/component/server/implementation/types.js.map +0 -1
- package/dist/component/server/implementation/users.js.map +0 -1
- package/dist/component/server/implementation/utils.js +0 -56
- package/dist/component/server/implementation/utils.js.map +0 -1
- package/dist/component/server/providers.js.map +0 -1
- package/dist/component/server/templates.js +0 -84
- package/dist/component/server/templates.js.map +0 -1
- package/dist/server/cookies.d.ts.map +0 -1
- package/dist/server/implementation/db.d.ts +0 -86
- package/dist/server/implementation/db.d.ts.map +0 -1
- package/dist/server/implementation/db.js.map +0 -1
- package/dist/server/implementation/device.d.ts +0 -30
- package/dist/server/implementation/device.d.ts.map +0 -1
- package/dist/server/implementation/device.js +0 -135
- package/dist/server/implementation/device.js.map +0 -1
- package/dist/server/implementation/index.d.ts +0 -870
- package/dist/server/implementation/index.d.ts.map +0 -1
- package/dist/server/implementation/index.js +0 -610
- package/dist/server/implementation/index.js.map +0 -1
- package/dist/server/implementation/keys.d.ts +0 -66
- package/dist/server/implementation/keys.d.ts.map +0 -1
- package/dist/server/implementation/keys.js.map +0 -1
- package/dist/server/implementation/mutations/account.d.ts +0 -27
- package/dist/server/implementation/mutations/account.d.ts.map +0 -1
- package/dist/server/implementation/mutations/account.js +0 -39
- package/dist/server/implementation/mutations/account.js.map +0 -1
- package/dist/server/implementation/mutations/code.d.ts +0 -29
- package/dist/server/implementation/mutations/code.d.ts.map +0 -1
- package/dist/server/implementation/mutations/code.js.map +0 -1
- package/dist/server/implementation/mutations/index.d.ts +0 -310
- package/dist/server/implementation/mutations/index.d.ts.map +0 -1
- package/dist/server/implementation/mutations/index.js +0 -70
- package/dist/server/implementation/mutations/index.js.map +0 -1
- package/dist/server/implementation/mutations/invalidate.d.ts +0 -18
- package/dist/server/implementation/mutations/invalidate.d.ts.map +0 -1
- package/dist/server/implementation/mutations/invalidate.js +0 -29
- package/dist/server/implementation/mutations/invalidate.js.map +0 -1
- package/dist/server/implementation/mutations/oauth.d.ts +0 -23
- package/dist/server/implementation/mutations/oauth.d.ts.map +0 -1
- package/dist/server/implementation/mutations/oauth.js +0 -51
- package/dist/server/implementation/mutations/oauth.js.map +0 -1
- package/dist/server/implementation/mutations/refresh.d.ts +0 -20
- package/dist/server/implementation/mutations/refresh.d.ts.map +0 -1
- package/dist/server/implementation/mutations/refresh.js +0 -85
- package/dist/server/implementation/mutations/refresh.js.map +0 -1
- package/dist/server/implementation/mutations/register.d.ts +0 -37
- package/dist/server/implementation/mutations/register.d.ts.map +0 -1
- package/dist/server/implementation/mutations/register.js +0 -65
- package/dist/server/implementation/mutations/register.js.map +0 -1
- package/dist/server/implementation/mutations/retrieve.d.ts +0 -31
- package/dist/server/implementation/mutations/retrieve.d.ts.map +0 -1
- package/dist/server/implementation/mutations/retrieve.js +0 -50
- package/dist/server/implementation/mutations/retrieve.js.map +0 -1
- package/dist/server/implementation/mutations/signature.d.ts +0 -19
- package/dist/server/implementation/mutations/signature.d.ts.map +0 -1
- package/dist/server/implementation/mutations/signature.js +0 -27
- package/dist/server/implementation/mutations/signature.js.map +0 -1
- package/dist/server/implementation/mutations/signin.d.ts +0 -21
- package/dist/server/implementation/mutations/signin.d.ts.map +0 -1
- package/dist/server/implementation/mutations/signin.js.map +0 -1
- package/dist/server/implementation/mutations/signout.d.ts +0 -14
- package/dist/server/implementation/mutations/signout.d.ts.map +0 -1
- package/dist/server/implementation/mutations/signout.js +0 -27
- package/dist/server/implementation/mutations/signout.js.map +0 -1
- package/dist/server/implementation/mutations/store.d.ts +0 -11
- package/dist/server/implementation/mutations/store.d.ts.map +0 -1
- package/dist/server/implementation/mutations/store.js +0 -12
- package/dist/server/implementation/mutations/store.js.map +0 -1
- package/dist/server/implementation/mutations/verifier.d.ts +0 -11
- package/dist/server/implementation/mutations/verifier.d.ts.map +0 -1
- package/dist/server/implementation/mutations/verifier.js +0 -16
- package/dist/server/implementation/mutations/verifier.js.map +0 -1
- package/dist/server/implementation/mutations/verify.d.ts +0 -25
- package/dist/server/implementation/mutations/verify.d.ts.map +0 -1
- package/dist/server/implementation/mutations/verify.js +0 -105
- package/dist/server/implementation/mutations/verify.js.map +0 -1
- package/dist/server/implementation/passkey.d.ts +0 -24
- package/dist/server/implementation/passkey.d.ts.map +0 -1
- package/dist/server/implementation/passkey.js +0 -307
- package/dist/server/implementation/passkey.js.map +0 -1
- package/dist/server/implementation/provider.d.ts +0 -10
- package/dist/server/implementation/provider.d.ts.map +0 -1
- package/dist/server/implementation/provider.js +0 -19
- package/dist/server/implementation/provider.js.map +0 -1
- package/dist/server/implementation/ratelimit.d.ts +0 -10
- package/dist/server/implementation/ratelimit.d.ts.map +0 -1
- package/dist/server/implementation/ratelimit.js +0 -48
- package/dist/server/implementation/ratelimit.js.map +0 -1
- package/dist/server/implementation/redirects.d.ts +0 -10
- package/dist/server/implementation/redirects.d.ts.map +0 -1
- package/dist/server/implementation/redirects.js.map +0 -1
- package/dist/server/implementation/refresh.d.ts +0 -37
- package/dist/server/implementation/refresh.d.ts.map +0 -1
- package/dist/server/implementation/refresh.js +0 -109
- package/dist/server/implementation/refresh.js.map +0 -1
- package/dist/server/implementation/sessions.d.ts +0 -29
- package/dist/server/implementation/sessions.d.ts.map +0 -1
- package/dist/server/implementation/sessions.js.map +0 -1
- package/dist/server/implementation/signin.d.ts +0 -55
- package/dist/server/implementation/signin.d.ts.map +0 -1
- package/dist/server/implementation/signin.js +0 -148
- package/dist/server/implementation/signin.js.map +0 -1
- package/dist/server/implementation/tokens.d.ts +0 -11
- package/dist/server/implementation/tokens.d.ts.map +0 -1
- package/dist/server/implementation/tokens.js +0 -15
- package/dist/server/implementation/tokens.js.map +0 -1
- package/dist/server/implementation/totp.d.ts +0 -31
- package/dist/server/implementation/totp.d.ts.map +0 -1
- package/dist/server/implementation/totp.js +0 -142
- package/dist/server/implementation/totp.js.map +0 -1
- package/dist/server/implementation/types.d.ts +0 -189
- package/dist/server/implementation/types.d.ts.map +0 -1
- package/dist/server/implementation/types.js +0 -97
- package/dist/server/implementation/types.js.map +0 -1
- package/dist/server/implementation/users.d.ts +0 -30
- package/dist/server/implementation/users.d.ts.map +0 -1
- package/dist/server/implementation/users.js.map +0 -1
- package/dist/server/implementation/utils.d.ts +0 -19
- package/dist/server/implementation/utils.d.ts.map +0 -1
- package/dist/server/implementation/utils.js +0 -56
- package/dist/server/implementation/utils.js.map +0 -1
- package/dist/server/index.d.ts.map +0 -1
- package/dist/server/index.js.map +0 -1
- package/dist/server/oauth.d.ts.map +0 -1
- package/dist/server/providers.d.ts +0 -72
- package/dist/server/providers.d.ts.map +0 -1
- package/dist/server/providers.js.map +0 -1
- package/dist/server/templates.d.ts.map +0 -1
- package/dist/server/utils.d.ts.map +0 -1
- package/dist/server/version.d.ts +0 -5
- package/dist/server/version.d.ts.map +0 -1
- package/dist/server/version.js +0 -6
- package/dist/server/version.js.map +0 -1
- package/src/cli/utils.ts +0 -248
- package/src/server/implementation/device.ts +0 -307
- package/src/server/implementation/index.ts +0 -1583
- package/src/server/implementation/mutations/account.ts +0 -50
- package/src/server/implementation/mutations/index.ts +0 -157
- package/src/server/implementation/mutations/invalidate.ts +0 -42
- package/src/server/implementation/mutations/oauth.ts +0 -73
- package/src/server/implementation/mutations/refresh.ts +0 -175
- package/src/server/implementation/mutations/register.ts +0 -100
- package/src/server/implementation/mutations/retrieve.ts +0 -79
- package/src/server/implementation/mutations/signature.ts +0 -39
- package/src/server/implementation/mutations/signout.ts +0 -35
- package/src/server/implementation/mutations/store.ts +0 -7
- package/src/server/implementation/mutations/verifier.ts +0 -24
- package/src/server/implementation/mutations/verify.ts +0 -194
- package/src/server/implementation/passkey.ts +0 -620
- package/src/server/implementation/provider.ts +0 -36
- package/src/server/implementation/ratelimit.ts +0 -79
- package/src/server/implementation/refresh.ts +0 -172
- package/src/server/implementation/signin.ts +0 -296
- package/src/server/implementation/totp.ts +0 -342
- package/src/server/implementation/types.ts +0 -444
- package/src/server/implementation/utils.ts +0 -91
- package/src/server/version.ts +0 -2
package/src/cli/index.ts
CHANGED
|
@@ -1,18 +1,98 @@
|
|
|
1
|
-
|
|
1
|
+
import { execFileSync } from "child_process";
|
|
2
|
+
import {
|
|
3
|
+
existsSync,
|
|
4
|
+
mkdtempSync,
|
|
5
|
+
readFileSync,
|
|
6
|
+
writeFileSync,
|
|
7
|
+
unlinkSync,
|
|
8
|
+
} from "fs";
|
|
9
|
+
import { tmpdir } from "os";
|
|
10
|
+
import path from "path";
|
|
2
11
|
|
|
12
|
+
import * as p from "@clack/prompts";
|
|
3
13
|
import { Command } from "@commander-js/extra-typings";
|
|
4
|
-
import chalk from "chalk";
|
|
5
|
-
import { execSync } from "child_process";
|
|
6
14
|
import { config as loadEnvFile } from "dotenv";
|
|
7
|
-
import { existsSync, readFileSync, writeFileSync } from "fs";
|
|
8
|
-
import inquirer from "inquirer";
|
|
9
|
-
import path from "path";
|
|
10
15
|
import * as v from "valibot";
|
|
16
|
+
|
|
11
17
|
import { actionDescription } from "./command";
|
|
12
18
|
import { generateKeys } from "./keys";
|
|
13
19
|
|
|
14
|
-
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
// Package version
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
|
|
24
|
+
function getPackageVersion(): string {
|
|
25
|
+
// When bundled to dist/bin.cjs the package.json is one level up
|
|
26
|
+
for (const relative of ["..", "../.."]) {
|
|
27
|
+
try {
|
|
28
|
+
const pkgPath = path.resolve(__dirname, relative, "package.json");
|
|
29
|
+
return JSON.parse(readFileSync(pkgPath, "utf-8")).version;
|
|
30
|
+
} catch {
|
|
31
|
+
// try next
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return "unknown";
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const version = getPackageVersion();
|
|
38
|
+
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
// Package-manager detection
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
|
|
43
|
+
type PackageRunner = { cmd: string; args: string[] };
|
|
44
|
+
|
|
45
|
+
function detectPackageRunner(): PackageRunner {
|
|
46
|
+
// Walk up from cwd to find lockfiles or packageManager field
|
|
47
|
+
let dir = process.cwd();
|
|
48
|
+
const root = path.parse(dir).root;
|
|
49
|
+
|
|
50
|
+
while (dir !== root) {
|
|
51
|
+
const pkgPath = path.join(dir, "package.json");
|
|
52
|
+
if (existsSync(pkgPath)) {
|
|
53
|
+
try {
|
|
54
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
55
|
+
if (typeof pkg.packageManager === "string") {
|
|
56
|
+
const name = pkg.packageManager.split("@")[0];
|
|
57
|
+
if (name === "pnpm") return { cmd: "pnpm", args: ["exec"] };
|
|
58
|
+
if (name === "bun") return { cmd: "bunx", args: [] };
|
|
59
|
+
if (name === "yarn") return { cmd: "yarn", args: ["dlx"] };
|
|
60
|
+
}
|
|
61
|
+
} catch {
|
|
62
|
+
// ignore parse errors
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (existsSync(path.join(dir, "pnpm-lock.yaml")))
|
|
67
|
+
return { cmd: "pnpm", args: ["exec"] };
|
|
68
|
+
if (
|
|
69
|
+
existsSync(path.join(dir, "bun.lockb")) ||
|
|
70
|
+
existsSync(path.join(dir, "bun.lock"))
|
|
71
|
+
)
|
|
72
|
+
return { cmd: "bunx", args: [] };
|
|
73
|
+
if (existsSync(path.join(dir, "yarn.lock")))
|
|
74
|
+
return { cmd: "yarn", args: ["dlx"] };
|
|
75
|
+
|
|
76
|
+
dir = path.dirname(dir);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return { cmd: "npx", args: [] };
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const runner = detectPackageRunner();
|
|
83
|
+
|
|
84
|
+
/** Build the full command + args to invoke `convex` via the detected runner. */
|
|
85
|
+
function convexCmd(...subArgs: string[]): { file: string; args: string[] } {
|
|
86
|
+
return { file: runner.cmd, args: [...runner.args, "convex", ...subArgs] };
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// ---------------------------------------------------------------------------
|
|
90
|
+
// Commander program
|
|
91
|
+
// ---------------------------------------------------------------------------
|
|
92
|
+
|
|
93
|
+
export const program = new Command()
|
|
15
94
|
.name("@robelest/convex-auth")
|
|
95
|
+
.version(version)
|
|
16
96
|
.description(
|
|
17
97
|
"Add code and set environment variables for @robelest/convex-auth.\n\n" +
|
|
18
98
|
"Full docs: https://deepwiki.com/robelest/convex-auth",
|
|
@@ -34,6 +114,8 @@ program
|
|
|
34
114
|
actionDescription("Set environment variables on"),
|
|
35
115
|
)
|
|
36
116
|
.action(async (options) => {
|
|
117
|
+
p.intro("@robelest/convex-auth");
|
|
118
|
+
|
|
37
119
|
await checkSourceControl(options);
|
|
38
120
|
|
|
39
121
|
const packageJson = readPackageJson();
|
|
@@ -52,7 +134,7 @@ program
|
|
|
52
134
|
const isExpo = !!(
|
|
53
135
|
packageJson.dependencies?.expo || packageJson.devDependencies?.expo
|
|
54
136
|
);
|
|
55
|
-
const config = {
|
|
137
|
+
const config: ProjectConfig = {
|
|
56
138
|
isNextjs,
|
|
57
139
|
isVite,
|
|
58
140
|
isExpo,
|
|
@@ -63,31 +145,21 @@ program
|
|
|
63
145
|
};
|
|
64
146
|
|
|
65
147
|
// Step 1: Configure SITE_URL
|
|
66
|
-
// We check for existing config.
|
|
67
|
-
// We default to localhost and port depending on framework
|
|
68
148
|
await configureSiteUrl(config, options.siteUrl);
|
|
69
149
|
|
|
70
150
|
// Step 2: Configure private and public key
|
|
71
|
-
// We ask if we would overwrite existing keys
|
|
72
151
|
await configureKeys(config);
|
|
73
152
|
|
|
74
|
-
// Step 3: Change moduleResolution to "bundler"
|
|
75
|
-
// and turn on skipLibCheck
|
|
76
|
-
// Skipped if there's no tsconfig.json
|
|
153
|
+
// Step 3: Change moduleResolution to "bundler" and turn on skipLibCheck
|
|
77
154
|
await modifyTsConfig(config);
|
|
78
155
|
|
|
79
156
|
// Step 4: Configure convex.config.ts
|
|
80
|
-
// Ensure the auth component is registered via app.use(auth).
|
|
81
157
|
await configureConvexConfig(config);
|
|
82
158
|
|
|
83
159
|
// Step 5: Initialize auth.ts
|
|
84
|
-
// We do nothing if the file already contains the code,
|
|
85
|
-
// and give instructions otherwise
|
|
86
160
|
await initializeAuth(config);
|
|
87
161
|
|
|
88
162
|
// Step 6: Configure http.ts
|
|
89
|
-
// We do nothing if the file already contains the code,
|
|
90
|
-
// and give instructions otherwise
|
|
91
163
|
await configureHttp(config);
|
|
92
164
|
|
|
93
165
|
// Extra: Configure providers interactively.
|
|
@@ -96,9 +168,13 @@ program
|
|
|
96
168
|
} else {
|
|
97
169
|
printFinalSuccessMessage(config);
|
|
98
170
|
}
|
|
171
|
+
|
|
172
|
+
p.outro("Done!");
|
|
99
173
|
});
|
|
100
174
|
|
|
101
|
-
|
|
175
|
+
// ---------------------------------------------------------------------------
|
|
176
|
+
// Types
|
|
177
|
+
// ---------------------------------------------------------------------------
|
|
102
178
|
|
|
103
179
|
type ProjectConfig = {
|
|
104
180
|
isExpo: boolean;
|
|
@@ -121,10 +197,14 @@ type ProjectConfig = {
|
|
|
121
197
|
step: number;
|
|
122
198
|
};
|
|
123
199
|
|
|
200
|
+
// ---------------------------------------------------------------------------
|
|
201
|
+
// Step 1: SITE_URL
|
|
202
|
+
// ---------------------------------------------------------------------------
|
|
203
|
+
|
|
124
204
|
async function configureSiteUrl(config: ProjectConfig, forcedValue?: string) {
|
|
125
205
|
logStep(config, "Configure SITE_URL");
|
|
126
206
|
if (config.isExpo) {
|
|
127
|
-
|
|
207
|
+
p.log.info("React Native projects don't require a SITE_URL.");
|
|
128
208
|
return;
|
|
129
209
|
}
|
|
130
210
|
|
|
@@ -157,6 +237,10 @@ async function configureSiteUrl(config: ProjectConfig, forcedValue?: string) {
|
|
|
157
237
|
});
|
|
158
238
|
}
|
|
159
239
|
|
|
240
|
+
// ---------------------------------------------------------------------------
|
|
241
|
+
// Generic env var configuration
|
|
242
|
+
// ---------------------------------------------------------------------------
|
|
243
|
+
|
|
160
244
|
async function configureEnvVar(
|
|
161
245
|
config: ProjectConfig,
|
|
162
246
|
variable: {
|
|
@@ -174,14 +258,13 @@ async function configureEnvVar(
|
|
|
174
258
|
await setEnvVar(config, variable.name, variable.forcedValue);
|
|
175
259
|
return;
|
|
176
260
|
}
|
|
177
|
-
const existing =
|
|
261
|
+
const existing = backendEnvVar(config, variable.name);
|
|
178
262
|
if (existing !== "") {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
) {
|
|
263
|
+
const shouldChange = await promptForConfirmation(
|
|
264
|
+
`The ${printDeployment(config)} already has ${variable.name} configured to "${existing}". Do you want to change it?`,
|
|
265
|
+
{ default: false },
|
|
266
|
+
);
|
|
267
|
+
if (!shouldChange) {
|
|
185
268
|
return;
|
|
186
269
|
}
|
|
187
270
|
}
|
|
@@ -192,41 +275,61 @@ async function configureEnvVar(
|
|
|
192
275
|
await setEnvVar(config, variable.name, chosenValue);
|
|
193
276
|
}
|
|
194
277
|
|
|
278
|
+
// ---------------------------------------------------------------------------
|
|
279
|
+
// Step 2: Keys
|
|
280
|
+
// ---------------------------------------------------------------------------
|
|
281
|
+
|
|
195
282
|
async function configureKeys(config: ProjectConfig) {
|
|
196
|
-
logStep(config, "Configure
|
|
197
|
-
const { JWT_PRIVATE_KEY, JWKS } =
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
const
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
283
|
+
logStep(config, "Configure signing and encryption keys");
|
|
284
|
+
const { JWT_PRIVATE_KEY, JWKS, AUTH_SECRET_ENCRYPTION_KEY } =
|
|
285
|
+
await generateKeys();
|
|
286
|
+
const existingPrivateKey = backendEnvVar(config, "JWT_PRIVATE_KEY");
|
|
287
|
+
const existingJwks = backendEnvVar(config, "JWKS");
|
|
288
|
+
const existingSecretEncryptionKey = backendEnvVar(
|
|
289
|
+
config,
|
|
290
|
+
"AUTH_SECRET_ENCRYPTION_KEY",
|
|
291
|
+
);
|
|
292
|
+
if (
|
|
293
|
+
existingPrivateKey !== "" ||
|
|
294
|
+
existingJwks !== "" ||
|
|
295
|
+
existingSecretEncryptionKey !== ""
|
|
296
|
+
) {
|
|
297
|
+
const shouldOverwrite = await promptForConfirmation(
|
|
298
|
+
`The ${printDeployment(config)} already has JWT_PRIVATE_KEY, JWKS, or AUTH_SECRET_ENCRYPTION_KEY configured. Overwrite them?`,
|
|
299
|
+
{ default: false },
|
|
300
|
+
);
|
|
301
|
+
if (!shouldOverwrite) {
|
|
210
302
|
return;
|
|
211
303
|
}
|
|
212
304
|
}
|
|
213
|
-
//
|
|
214
|
-
|
|
215
|
-
await
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
305
|
+
// Use --from-file to avoid shell quoting issues with multiline values
|
|
306
|
+
await setEnvVarFromFile(config, "JWT_PRIVATE_KEY", JWT_PRIVATE_KEY);
|
|
307
|
+
await setEnvVarFromFile(config, "JWKS", JWKS);
|
|
308
|
+
await setEnvVar(
|
|
309
|
+
config,
|
|
310
|
+
"AUTH_SECRET_ENCRYPTION_KEY",
|
|
311
|
+
AUTH_SECRET_ENCRYPTION_KEY,
|
|
312
|
+
{
|
|
313
|
+
hideValue: true,
|
|
314
|
+
},
|
|
315
|
+
);
|
|
219
316
|
}
|
|
220
317
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
318
|
+
// ---------------------------------------------------------------------------
|
|
319
|
+
// Convex env helpers (no shell injection — argument arrays only)
|
|
320
|
+
// ---------------------------------------------------------------------------
|
|
321
|
+
|
|
322
|
+
function backendEnvVar(config: ProjectConfig, name: string): string {
|
|
323
|
+
const { file, args } = convexCmd(
|
|
324
|
+
"env",
|
|
325
|
+
"get",
|
|
326
|
+
...deploymentArgs(config),
|
|
327
|
+
name,
|
|
229
328
|
);
|
|
329
|
+
return execFileSync(file, args, {
|
|
330
|
+
stdio: "pipe",
|
|
331
|
+
encoding: "utf-8",
|
|
332
|
+
}).slice(0, -1);
|
|
230
333
|
}
|
|
231
334
|
|
|
232
335
|
async function setEnvVar(
|
|
@@ -235,59 +338,91 @@ async function setEnvVar(
|
|
|
235
338
|
value: string,
|
|
236
339
|
options?: { hideValue: boolean },
|
|
237
340
|
) {
|
|
238
|
-
const
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
341
|
+
const { file, args } = convexCmd(
|
|
342
|
+
"env",
|
|
343
|
+
"set",
|
|
344
|
+
...deploymentArgs(config),
|
|
345
|
+
"--",
|
|
346
|
+
name,
|
|
347
|
+
value,
|
|
244
348
|
);
|
|
349
|
+
execFileSync(file, args, {
|
|
350
|
+
stdio: options?.hideValue ? "ignore" : "inherit",
|
|
351
|
+
});
|
|
245
352
|
if (options?.hideValue) {
|
|
246
|
-
|
|
247
|
-
`Successfully set ${chalk.bold(name)} (on ${printDeployment(config)})`,
|
|
248
|
-
);
|
|
353
|
+
p.log.success(`Successfully set ${name} (on ${printDeployment(config)})`);
|
|
249
354
|
}
|
|
250
355
|
}
|
|
251
356
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
357
|
+
/**
|
|
358
|
+
* Write value to a temp file and use `convex env set KEY --from-file tmpfile`.
|
|
359
|
+
* This avoids shell-quoting issues with multiline values like private keys.
|
|
360
|
+
*/
|
|
361
|
+
async function setEnvVarFromFile(
|
|
362
|
+
config: ProjectConfig,
|
|
363
|
+
name: string,
|
|
364
|
+
value: string,
|
|
365
|
+
) {
|
|
366
|
+
const tmpDir = mkdtempSync(path.join(tmpdir(), "convex-auth-"));
|
|
367
|
+
const tmpFile = path.join(tmpDir, `${name}.tmp`);
|
|
368
|
+
try {
|
|
369
|
+
writeFileSync(tmpFile, value, "utf-8");
|
|
370
|
+
const { file, args } = convexCmd(
|
|
371
|
+
"env",
|
|
372
|
+
"set",
|
|
373
|
+
...deploymentArgs(config),
|
|
374
|
+
name,
|
|
375
|
+
"--from-file",
|
|
376
|
+
tmpFile,
|
|
377
|
+
);
|
|
378
|
+
execFileSync(file, args, { stdio: "ignore" });
|
|
379
|
+
p.log.success(`Successfully set ${name} (on ${printDeployment(config)})`);
|
|
380
|
+
} finally {
|
|
381
|
+
try {
|
|
382
|
+
unlinkSync(tmpFile);
|
|
383
|
+
} catch {
|
|
384
|
+
// cleanup is best-effort
|
|
385
|
+
}
|
|
386
|
+
}
|
|
261
387
|
}
|
|
262
388
|
|
|
263
|
-
function
|
|
389
|
+
function deploymentArgs(config: ProjectConfig): string[] {
|
|
264
390
|
const {
|
|
265
391
|
deployment: {
|
|
266
|
-
options: { url, prod, previewName, deploymentName },
|
|
392
|
+
options: { adminKey, url, prod, previewName, deploymentName },
|
|
267
393
|
},
|
|
268
394
|
} = config;
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
} else if (previewName) {
|
|
274
|
-
return `--preview-name ${previewName}`;
|
|
275
|
-
} else if (deploymentName) {
|
|
276
|
-
return `--deployment-name ${deploymentName}`;
|
|
277
|
-
} else {
|
|
278
|
-
return "";
|
|
395
|
+
const args: string[] = [];
|
|
396
|
+
|
|
397
|
+
if (adminKey !== undefined) {
|
|
398
|
+
args.push("--admin-key", adminKey);
|
|
279
399
|
}
|
|
400
|
+
|
|
401
|
+
const selectionArgs =
|
|
402
|
+
[
|
|
403
|
+
url ? ["--url", url] : null,
|
|
404
|
+
prod ? ["--prod"] : null,
|
|
405
|
+
previewName ? ["--preview-name", previewName] : null,
|
|
406
|
+
deploymentName ? ["--deployment-name", deploymentName] : null,
|
|
407
|
+
].find((s): s is string[] => s !== null) ?? [];
|
|
408
|
+
|
|
409
|
+
args.push(...selectionArgs);
|
|
410
|
+
return args;
|
|
280
411
|
}
|
|
281
412
|
|
|
282
|
-
function printDeployment(config: ProjectConfig) {
|
|
413
|
+
function printDeployment(config: ProjectConfig): string {
|
|
283
414
|
const { name, type } = config.deployment;
|
|
284
415
|
return (
|
|
285
|
-
(type !== null ? `${
|
|
416
|
+
(type !== null ? `${type} ` : "") +
|
|
286
417
|
"deployment" +
|
|
287
|
-
(name !== null ? ` ${
|
|
418
|
+
(name !== null ? ` ${name}` : "")
|
|
288
419
|
);
|
|
289
420
|
}
|
|
290
421
|
|
|
422
|
+
// ---------------------------------------------------------------------------
|
|
423
|
+
// Step 3: tsconfig
|
|
424
|
+
// ---------------------------------------------------------------------------
|
|
425
|
+
|
|
291
426
|
// Match `"compilerOptions": {"`
|
|
292
427
|
// ignore comments after the bracket
|
|
293
428
|
// and capture the space between the bracket/last comment
|
|
@@ -331,13 +466,13 @@ async function modifyTsConfig(config: ProjectConfig) {
|
|
|
331
466
|
if (existsSync(projectLevelTsConfigPath)) {
|
|
332
467
|
if (config.isExpo) {
|
|
333
468
|
writeFileSync(tsConfigPath, validTsConfig);
|
|
334
|
-
|
|
469
|
+
p.log.success(`Added ${tsConfigPath}`);
|
|
335
470
|
return;
|
|
336
471
|
}
|
|
337
472
|
// else assume that the project-level tsconfig already
|
|
338
473
|
// has the right settings, which is true for Vite and Next.js
|
|
339
474
|
}
|
|
340
|
-
|
|
475
|
+
p.log.info(`No ${tsConfigPath} found. Skipping.`);
|
|
341
476
|
return;
|
|
342
477
|
}
|
|
343
478
|
const existingTsConfig = readFileSync(tsConfigPath, "utf8");
|
|
@@ -351,14 +486,12 @@ async function modifyTsConfig(config: ProjectConfig) {
|
|
|
351
486
|
/Bundler/i.test(existingModuleResolution) &&
|
|
352
487
|
existingSkipLibCheck === "true"
|
|
353
488
|
) {
|
|
354
|
-
|
|
489
|
+
p.log.success(`The ${tsConfigPath} is already set up.`);
|
|
355
490
|
return;
|
|
356
491
|
}
|
|
357
492
|
|
|
358
493
|
if (!compilerOptionsPattern.test(existingTsConfig)) {
|
|
359
|
-
|
|
360
|
-
`Modify your ${chalk.bold(tsConfigPath)} to include the following:`,
|
|
361
|
-
);
|
|
494
|
+
p.log.info(`Modify your ${tsConfigPath} to include the following:`);
|
|
362
495
|
const source = `\
|
|
363
496
|
{
|
|
364
497
|
"compilerOptions": {
|
|
@@ -367,7 +500,7 @@ async function modifyTsConfig(config: ProjectConfig) {
|
|
|
367
500
|
}
|
|
368
501
|
}
|
|
369
502
|
`;
|
|
370
|
-
|
|
503
|
+
p.log.message(indent(`\n${source}\n`));
|
|
371
504
|
await promptForConfirmationOrExit("Ready to continue?");
|
|
372
505
|
}
|
|
373
506
|
const changedTsConfig = addCompilerOption(
|
|
@@ -382,7 +515,7 @@ async function modifyTsConfig(config: ProjectConfig) {
|
|
|
382
515
|
'"skipLibCheck": true',
|
|
383
516
|
);
|
|
384
517
|
writeFileSync(tsConfigPath, changedTsConfig);
|
|
385
|
-
|
|
518
|
+
p.log.success(`Modified ${tsConfigPath}`);
|
|
386
519
|
}
|
|
387
520
|
|
|
388
521
|
function addCompilerOption(
|
|
@@ -398,6 +531,10 @@ function addCompilerOption(
|
|
|
398
531
|
}
|
|
399
532
|
}
|
|
400
533
|
|
|
534
|
+
// ---------------------------------------------------------------------------
|
|
535
|
+
// Step 4: convex.config
|
|
536
|
+
// ---------------------------------------------------------------------------
|
|
537
|
+
|
|
401
538
|
async function configureConvexConfig(config: ProjectConfig) {
|
|
402
539
|
logStep(config, "Configure convex config file");
|
|
403
540
|
const sourceTemplate = `\
|
|
@@ -412,16 +549,16 @@ export default app;
|
|
|
412
549
|
`;
|
|
413
550
|
const source = templateToSource(sourceTemplate);
|
|
414
551
|
const convexConfigPath = path.join(config.convexFolderPath, "convex.config");
|
|
415
|
-
const existingConfigPath =
|
|
552
|
+
const existingConfigPath = existingNonEmptySourcePath(convexConfigPath);
|
|
416
553
|
if (existingConfigPath !== null) {
|
|
417
554
|
const existingConfig = readFileSync(existingConfigPath, "utf8");
|
|
418
555
|
if (doesAlreadyMatchTemplate(existingConfig, sourceTemplate)) {
|
|
419
|
-
|
|
556
|
+
p.log.success(`The ${existingConfigPath} is already set up.`);
|
|
420
557
|
} else {
|
|
421
|
-
|
|
422
|
-
`You already have a ${
|
|
558
|
+
p.log.info(
|
|
559
|
+
`You already have a ${existingConfigPath}, make sure it registers the auth component like this:`,
|
|
423
560
|
);
|
|
424
|
-
|
|
561
|
+
p.log.message(indent(`\n${source}\n`));
|
|
425
562
|
await promptForConfirmationOrExit("Ready to continue?");
|
|
426
563
|
}
|
|
427
564
|
} else {
|
|
@@ -429,17 +566,21 @@ export default app;
|
|
|
429
566
|
? `${convexConfigPath}.ts`
|
|
430
567
|
: `${convexConfigPath}.js`;
|
|
431
568
|
writeFileSync(newConfigPath, source);
|
|
432
|
-
|
|
569
|
+
p.log.success(`Created ${newConfigPath}`);
|
|
433
570
|
}
|
|
434
571
|
}
|
|
435
572
|
|
|
573
|
+
// ---------------------------------------------------------------------------
|
|
574
|
+
// Step 5: auth.ts
|
|
575
|
+
// ---------------------------------------------------------------------------
|
|
576
|
+
|
|
436
577
|
async function initializeAuth(config: ProjectConfig) {
|
|
437
578
|
logStep(config, "Initialize auth file");
|
|
438
579
|
const sourceTemplate = `\
|
|
439
|
-
import {
|
|
580
|
+
import { createAuth } from "@robelest/convex-auth/component";
|
|
440
581
|
import { components } from "./_generated/api";
|
|
441
582
|
|
|
442
|
-
const auth =
|
|
583
|
+
const auth = createAuth(components.auth, {$$
|
|
443
584
|
providers: [$$],$$
|
|
444
585
|
});
|
|
445
586
|
|
|
@@ -448,16 +589,16 @@ export const { signIn, signOut, store } = auth;
|
|
|
448
589
|
`;
|
|
449
590
|
const source = templateToSource(sourceTemplate);
|
|
450
591
|
const authPath = path.join(config.convexFolderPath, "auth");
|
|
451
|
-
const existingAuthPath =
|
|
592
|
+
const existingAuthPath = existingNonEmptySourcePath(authPath);
|
|
452
593
|
if (existingAuthPath !== null) {
|
|
453
594
|
const existingAuth = readFileSync(existingAuthPath, "utf8");
|
|
454
595
|
if (doesAlreadyMatchTemplate(existingAuth, sourceTemplate)) {
|
|
455
|
-
|
|
596
|
+
p.log.success(`The ${existingAuthPath} is already set up.`);
|
|
456
597
|
} else {
|
|
457
|
-
|
|
458
|
-
`You already have a ${
|
|
598
|
+
p.log.info(
|
|
599
|
+
`You already have a ${existingAuthPath}, make sure it initializes auth with \`createAuth\` like this:`,
|
|
459
600
|
);
|
|
460
|
-
|
|
601
|
+
p.log.message(indent(`\n${source}\n`));
|
|
461
602
|
await promptForConfirmationOrExit("Ready to continue?");
|
|
462
603
|
}
|
|
463
604
|
} else {
|
|
@@ -465,10 +606,14 @@ export const { signIn, signOut, store } = auth;
|
|
|
465
606
|
? `${authPath}.ts`
|
|
466
607
|
: `${authPath}.js`;
|
|
467
608
|
writeFileSync(newAuthPath, source);
|
|
468
|
-
|
|
609
|
+
p.log.success(`Created ${newAuthPath}`);
|
|
469
610
|
}
|
|
470
611
|
}
|
|
471
612
|
|
|
613
|
+
// ---------------------------------------------------------------------------
|
|
614
|
+
// Step 6: http.ts
|
|
615
|
+
// ---------------------------------------------------------------------------
|
|
616
|
+
|
|
472
617
|
async function configureHttp(config: ProjectConfig) {
|
|
473
618
|
logStep(config, "Configure http file");
|
|
474
619
|
const sourceTemplate = `\
|
|
@@ -483,16 +628,16 @@ export default http;
|
|
|
483
628
|
`;
|
|
484
629
|
const source = templateToSource(sourceTemplate);
|
|
485
630
|
const httpPath = path.join(config.convexFolderPath, "http");
|
|
486
|
-
const existingHttpPath =
|
|
631
|
+
const existingHttpPath = existingNonEmptySourcePath(httpPath);
|
|
487
632
|
if (existingHttpPath !== null) {
|
|
488
633
|
const existingHttp = readFileSync(existingHttpPath, "utf8");
|
|
489
634
|
if (doesAlreadyMatchTemplate(existingHttp, sourceTemplate)) {
|
|
490
|
-
|
|
635
|
+
p.log.success(`The ${existingHttpPath} is already set up.`);
|
|
491
636
|
} else {
|
|
492
|
-
|
|
493
|
-
`You already have a ${
|
|
637
|
+
p.log.info(
|
|
638
|
+
`You already have a ${existingHttpPath}, make sure it includes the call to \`auth.http.add\`:`,
|
|
494
639
|
);
|
|
495
|
-
|
|
640
|
+
p.log.message(indent(`\n${source}\n`));
|
|
496
641
|
await promptForConfirmationOrExit("Ready to continue?");
|
|
497
642
|
}
|
|
498
643
|
} else {
|
|
@@ -500,10 +645,14 @@ export default http;
|
|
|
500
645
|
? `${httpPath}.ts`
|
|
501
646
|
: `${httpPath}.js`;
|
|
502
647
|
writeFileSync(newHttpPath, source);
|
|
503
|
-
|
|
648
|
+
p.log.success(`Created ${newHttpPath}`);
|
|
504
649
|
}
|
|
505
650
|
}
|
|
506
651
|
|
|
652
|
+
// ---------------------------------------------------------------------------
|
|
653
|
+
// Extra: --variables
|
|
654
|
+
// ---------------------------------------------------------------------------
|
|
655
|
+
|
|
507
656
|
const VariablesSchema = v.object({
|
|
508
657
|
help: v.optional(v.string()),
|
|
509
658
|
providers: v.array(
|
|
@@ -522,23 +671,30 @@ const VariablesSchema = v.object({
|
|
|
522
671
|
});
|
|
523
672
|
|
|
524
673
|
async function configureOtherVariables(config: ProjectConfig, json: string) {
|
|
525
|
-
|
|
674
|
+
let parsed: unknown;
|
|
675
|
+
try {
|
|
676
|
+
parsed = JSON.parse(json);
|
|
677
|
+
} catch (err) {
|
|
678
|
+
logErrorAndExit(
|
|
679
|
+
"The --variables flag must be valid JSON.",
|
|
680
|
+
err instanceof Error ? err.message : String(err),
|
|
681
|
+
);
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
const variables = v.parse(VariablesSchema, parsed);
|
|
526
685
|
logStep(config, "Configure extra environment variables");
|
|
527
|
-
// Ex: The default setup includes sign-in with GitHub OAuth
|
|
528
|
-
// and sending magic links via Resend.
|
|
529
686
|
if (variables.help !== undefined) {
|
|
530
|
-
|
|
687
|
+
p.log.message(variables.help);
|
|
531
688
|
}
|
|
532
689
|
for (const provider of variables.providers) {
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
) {
|
|
690
|
+
const shouldConfigure = await promptForConfirmation(
|
|
691
|
+
`Do you want to configure ${provider.name}?`,
|
|
692
|
+
);
|
|
693
|
+
if (!shouldConfigure) {
|
|
538
694
|
continue;
|
|
539
695
|
}
|
|
540
696
|
if (provider.help !== undefined) {
|
|
541
|
-
|
|
697
|
+
p.log.message(provider.help);
|
|
542
698
|
}
|
|
543
699
|
for (const variable of provider.variables) {
|
|
544
700
|
await configureEnvVar(config, {
|
|
@@ -548,11 +704,15 @@ async function configureOtherVariables(config: ProjectConfig, json: string) {
|
|
|
548
704
|
}
|
|
549
705
|
}
|
|
550
706
|
if (variables.success !== undefined) {
|
|
551
|
-
|
|
707
|
+
p.log.success(variables.success);
|
|
552
708
|
}
|
|
553
709
|
}
|
|
554
710
|
|
|
555
|
-
|
|
711
|
+
// ---------------------------------------------------------------------------
|
|
712
|
+
// Template helpers
|
|
713
|
+
// ---------------------------------------------------------------------------
|
|
714
|
+
|
|
715
|
+
export function doesAlreadyMatchTemplate(existing: string, template: string) {
|
|
556
716
|
const regex = new RegExp(
|
|
557
717
|
template
|
|
558
718
|
.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")
|
|
@@ -563,29 +723,34 @@ function doesAlreadyMatchTemplate(existing: string, template: string) {
|
|
|
563
723
|
return regex.test(existing);
|
|
564
724
|
}
|
|
565
725
|
|
|
566
|
-
function templateToSource(template: string) {
|
|
726
|
+
export function templateToSource(template: string) {
|
|
567
727
|
return template.replace(/\$\$/g, "");
|
|
568
728
|
}
|
|
569
729
|
|
|
570
|
-
|
|
571
|
-
return
|
|
572
|
-
? `${
|
|
573
|
-
:
|
|
574
|
-
? `${
|
|
730
|
+
function existingNonEmptySourcePath(filePath: string): string | null {
|
|
731
|
+
return existsAndNotEmpty(`${filePath}.ts`)
|
|
732
|
+
? `${filePath}.ts`
|
|
733
|
+
: existsAndNotEmpty(`${filePath}.js`)
|
|
734
|
+
? `${filePath}.js`
|
|
575
735
|
: null;
|
|
576
736
|
}
|
|
577
737
|
|
|
578
|
-
|
|
579
|
-
return existsSync(
|
|
738
|
+
function existsAndNotEmpty(filePath: string): boolean {
|
|
739
|
+
return existsSync(filePath) && readFileSync(filePath, "utf8").trim() !== "";
|
|
580
740
|
}
|
|
581
741
|
|
|
742
|
+
// ---------------------------------------------------------------------------
|
|
743
|
+
// Logging
|
|
744
|
+
// ---------------------------------------------------------------------------
|
|
745
|
+
|
|
582
746
|
function logStep(config: ProjectConfig, message: string) {
|
|
583
|
-
|
|
584
|
-
print();
|
|
585
|
-
}
|
|
586
|
-
logInfo(chalk.bold(`Step ${config.step++}: ${message}`));
|
|
747
|
+
p.log.step(`Step ${config.step++}: ${message}`);
|
|
587
748
|
}
|
|
588
749
|
|
|
750
|
+
// ---------------------------------------------------------------------------
|
|
751
|
+
// Source control check
|
|
752
|
+
// ---------------------------------------------------------------------------
|
|
753
|
+
|
|
589
754
|
async function checkSourceControl(options: {
|
|
590
755
|
skipGitCheck?: boolean;
|
|
591
756
|
allowDirtyGitState?: boolean;
|
|
@@ -595,14 +760,25 @@ async function checkSourceControl(options: {
|
|
|
595
760
|
}
|
|
596
761
|
const isGit = existsSync(".git");
|
|
597
762
|
if (isGit) {
|
|
598
|
-
|
|
763
|
+
let gitStatus: string;
|
|
764
|
+
try {
|
|
765
|
+
gitStatus = execFileSync("git", ["status", "--porcelain"], {
|
|
766
|
+
encoding: "utf-8",
|
|
767
|
+
});
|
|
768
|
+
} catch {
|
|
769
|
+
// git not available — skip check
|
|
770
|
+
return;
|
|
771
|
+
}
|
|
599
772
|
const changedFiles = gitStatus
|
|
600
773
|
.split("\n")
|
|
601
774
|
.filter(
|
|
602
|
-
(line) =>
|
|
775
|
+
(line) =>
|
|
776
|
+
!/\bpackage(-lock)?.json/.test(line) &&
|
|
777
|
+
!/\benv\.d\.ts$/.test(line) &&
|
|
778
|
+
line.length > 0,
|
|
603
779
|
);
|
|
604
780
|
if (changedFiles.length > 0) {
|
|
605
|
-
|
|
781
|
+
p.log.error(
|
|
606
782
|
"There are unstaged or uncommitted changes in the working directory. " +
|
|
607
783
|
"Please commit or stash them before proceeding.",
|
|
608
784
|
);
|
|
@@ -612,13 +788,17 @@ async function checkSourceControl(options: {
|
|
|
612
788
|
if (options.skipGitCheck) {
|
|
613
789
|
return;
|
|
614
790
|
}
|
|
615
|
-
|
|
791
|
+
p.log.warn(
|
|
616
792
|
"No source control detected. We strongly recommend committing the current state of your code before proceeding.",
|
|
617
793
|
);
|
|
618
794
|
await promptForConfirmationOrExit("Continue anyway?");
|
|
619
795
|
}
|
|
620
796
|
}
|
|
621
797
|
|
|
798
|
+
// ---------------------------------------------------------------------------
|
|
799
|
+
// Project file readers
|
|
800
|
+
// ---------------------------------------------------------------------------
|
|
801
|
+
|
|
622
802
|
type PackageJSON = { __isPackageJSON: true; [key: string]: any };
|
|
623
803
|
|
|
624
804
|
function readPackageJson(): PackageJSON {
|
|
@@ -652,7 +832,11 @@ function readConvexJson(): ConvexJSON {
|
|
|
652
832
|
}
|
|
653
833
|
}
|
|
654
834
|
|
|
655
|
-
|
|
835
|
+
// ---------------------------------------------------------------------------
|
|
836
|
+
// Deployment selection
|
|
837
|
+
// ---------------------------------------------------------------------------
|
|
838
|
+
|
|
839
|
+
export function readConvexDeployment(options: {
|
|
656
840
|
url?: string;
|
|
657
841
|
adminKey?: string;
|
|
658
842
|
prod?: boolean;
|
|
@@ -660,30 +844,45 @@ function readConvexDeployment(options: {
|
|
|
660
844
|
deploymentName?: string;
|
|
661
845
|
}) {
|
|
662
846
|
const { adminKey, url, prod, previewName, deploymentName } = options;
|
|
663
|
-
|
|
664
|
-
const adminKeyType = adminKey ? deploymentTypeFromAdminKey(adminKey) : null;
|
|
847
|
+
|
|
665
848
|
if (url) {
|
|
666
|
-
return {
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
return { name: previewName, type: "preview", options };
|
|
672
|
-
}
|
|
673
|
-
if (deploymentName) {
|
|
674
|
-
return { name: deploymentName, type: adminKeyType, options };
|
|
849
|
+
return {
|
|
850
|
+
name: url,
|
|
851
|
+
type: null,
|
|
852
|
+
options,
|
|
853
|
+
};
|
|
675
854
|
}
|
|
676
|
-
|
|
677
|
-
|
|
855
|
+
|
|
856
|
+
const adminKeyName = adminKey ? deploymentNameFromAdminKey(adminKey) : null;
|
|
857
|
+
const adminKeyType = adminKey ? deploymentTypeFromAdminKey(adminKey) : null;
|
|
858
|
+
|
|
859
|
+
const explicitSelection = [
|
|
860
|
+
prod ? { name: adminKeyName, type: "prod" as const } : null,
|
|
861
|
+
previewName ? { name: previewName, type: "preview" as const } : null,
|
|
862
|
+
deploymentName ? { name: deploymentName, type: adminKeyType } : null,
|
|
863
|
+
adminKey ? { name: adminKeyName, type: adminKeyType } : null,
|
|
864
|
+
].find(
|
|
865
|
+
(
|
|
866
|
+
selection,
|
|
867
|
+
): selection is {
|
|
868
|
+
name: string | null;
|
|
869
|
+
type: string | null;
|
|
870
|
+
} => selection !== null,
|
|
871
|
+
);
|
|
872
|
+
|
|
873
|
+
if (explicitSelection !== undefined) {
|
|
874
|
+
return { ...explicitSelection, options };
|
|
678
875
|
}
|
|
876
|
+
|
|
679
877
|
loadEnvFile({ path: ".env.local" });
|
|
680
878
|
loadEnvFile();
|
|
681
879
|
if (process.env.CONVEX_DEPLOYMENT) {
|
|
880
|
+
const type = getDeploymentTypeFromConfiguredDeployment(
|
|
881
|
+
process.env.CONVEX_DEPLOYMENT,
|
|
882
|
+
);
|
|
682
883
|
return {
|
|
683
884
|
name: stripDeploymentTypePrefix(process.env.CONVEX_DEPLOYMENT),
|
|
684
|
-
type
|
|
685
|
-
process.env.CONVEX_DEPLOYMENT,
|
|
686
|
-
),
|
|
885
|
+
type,
|
|
687
886
|
options,
|
|
688
887
|
};
|
|
689
888
|
}
|
|
@@ -696,50 +895,52 @@ function readConvexDeployment(options: {
|
|
|
696
895
|
// NOTE: CONVEX CLI DEP
|
|
697
896
|
// Given a deployment string like "dev:tall-forest-1234"
|
|
698
897
|
// returns only the slug "tall-forest-1234".
|
|
699
|
-
// If there's no prefix returns the original string.
|
|
700
898
|
export function stripDeploymentTypePrefix(deployment: string) {
|
|
701
|
-
|
|
899
|
+
const [type, name] = deployment.split(":");
|
|
900
|
+
if ((type !== "prod" && type !== "dev" && type !== "preview") || !name) {
|
|
901
|
+
logErrorAndExit(
|
|
902
|
+
"Invalid CONVEX_DEPLOYMENT.",
|
|
903
|
+
'Expected a typed deployment like "dev:my-deployment", "prod:my-deployment", or "preview:my-deployment".',
|
|
904
|
+
);
|
|
905
|
+
}
|
|
906
|
+
return name;
|
|
702
907
|
}
|
|
703
908
|
|
|
704
909
|
// NOTE: CONVEX CLI DEP
|
|
705
|
-
// Handling legacy CONVEX_DEPLOYMENT without type prefix as well
|
|
706
910
|
function getDeploymentTypeFromConfiguredDeployment(raw: string) {
|
|
707
911
|
const typeRaw = raw.split(":")[0];
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
912
|
+
if (typeRaw === "prod" || typeRaw === "dev" || typeRaw === "preview") {
|
|
913
|
+
return typeRaw;
|
|
914
|
+
}
|
|
915
|
+
logErrorAndExit(
|
|
916
|
+
"Invalid CONVEX_DEPLOYMENT.",
|
|
917
|
+
'Expected a typed deployment like "dev:my-deployment", "prod:my-deployment", or "preview:my-deployment".',
|
|
918
|
+
);
|
|
713
919
|
}
|
|
714
920
|
|
|
715
921
|
// NOTE: CONVEX CLI DEP
|
|
716
922
|
function deploymentNameFromAdminKey(adminKey: string) {
|
|
717
923
|
const parts = adminKey.split("|");
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
// Preview deploy keys do not contain a deployment name.
|
|
723
|
-
return null;
|
|
724
|
-
}
|
|
725
|
-
return stripDeploymentTypePrefix(parts[0]);
|
|
924
|
+
const hasDeployment = parts.length > 1;
|
|
925
|
+
return hasDeployment && !isPreviewDeployKey(adminKey)
|
|
926
|
+
? stripDeploymentTypePrefix(parts[0])
|
|
927
|
+
: null;
|
|
726
928
|
}
|
|
727
929
|
|
|
728
|
-
// NOTE: CONVEX CLI DEP
|
|
729
|
-
//
|
|
730
|
-
// For current keys returns prod|dev|preview,
|
|
731
|
-
// for legacy keys returns "prod".
|
|
930
|
+
// NOTE: CONVEX CLI DEP
|
|
732
931
|
// Examples:
|
|
733
932
|
// "prod:deploymentName|key" -> "prod"
|
|
734
933
|
// "preview:deploymentName|key" -> "preview"
|
|
735
934
|
// "dev:deploymentName|key" -> "dev"
|
|
736
|
-
// "key" -> "prod"
|
|
737
935
|
export function deploymentTypeFromAdminKey(adminKey: string) {
|
|
738
|
-
const
|
|
739
|
-
if (
|
|
740
|
-
return
|
|
936
|
+
const type = adminKey.split(":")[0];
|
|
937
|
+
if (type === "prod" || type === "dev" || type === "preview") {
|
|
938
|
+
return type;
|
|
741
939
|
}
|
|
742
|
-
|
|
940
|
+
logErrorAndExit(
|
|
941
|
+
"Invalid admin key.",
|
|
942
|
+
'Expected a typed key like "dev:deployment|...", "prod:deployment|...", or "preview:...".',
|
|
943
|
+
);
|
|
743
944
|
}
|
|
744
945
|
|
|
745
946
|
// NOTE: CONVEX CLI DEP
|
|
@@ -757,11 +958,16 @@ export function isPreviewDeployKey(adminKey: string) {
|
|
|
757
958
|
return prefixParts[0] === "preview" && prefixParts.length === 3;
|
|
758
959
|
}
|
|
759
960
|
|
|
961
|
+
// ---------------------------------------------------------------------------
|
|
962
|
+
// Prompts (using @clack/prompts, with TTY detection on stdin)
|
|
963
|
+
// ---------------------------------------------------------------------------
|
|
964
|
+
|
|
760
965
|
async function promptForConfirmationOrExit(
|
|
761
966
|
message: string,
|
|
762
967
|
options: { default?: boolean } = {},
|
|
763
968
|
) {
|
|
764
969
|
if (!(await promptForConfirmation(message, options))) {
|
|
970
|
+
p.cancel("Setup cancelled.");
|
|
765
971
|
process.exit(1);
|
|
766
972
|
}
|
|
767
973
|
}
|
|
@@ -769,17 +975,17 @@ async function promptForConfirmationOrExit(
|
|
|
769
975
|
async function promptForConfirmation(
|
|
770
976
|
message: string,
|
|
771
977
|
options: { default?: boolean } = {},
|
|
772
|
-
) {
|
|
773
|
-
if (process.
|
|
774
|
-
const
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
return
|
|
978
|
+
): Promise<boolean> {
|
|
979
|
+
if (process.stdin.isTTY) {
|
|
980
|
+
const result = await p.confirm({
|
|
981
|
+
message,
|
|
982
|
+
initialValue: options.default ?? true,
|
|
983
|
+
});
|
|
984
|
+
if (p.isCancel(result)) {
|
|
985
|
+
p.cancel("Setup cancelled.");
|
|
986
|
+
process.exit(1);
|
|
987
|
+
}
|
|
988
|
+
return result;
|
|
783
989
|
} else {
|
|
784
990
|
return options.default ?? true;
|
|
785
991
|
}
|
|
@@ -787,19 +993,30 @@ async function promptForConfirmation(
|
|
|
787
993
|
|
|
788
994
|
async function promptForInput(
|
|
789
995
|
message: string,
|
|
790
|
-
options: {
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
996
|
+
options: {
|
|
997
|
+
default?: string;
|
|
998
|
+
validate?: (input: string) => true | string;
|
|
999
|
+
},
|
|
1000
|
+
): Promise<string> {
|
|
1001
|
+
if (process.stdin.isTTY) {
|
|
1002
|
+
const result = await p.text({
|
|
1003
|
+
message,
|
|
1004
|
+
defaultValue: options.default,
|
|
1005
|
+
placeholder: options.default,
|
|
1006
|
+
validate: options.validate
|
|
1007
|
+
? (val: string | undefined) => {
|
|
1008
|
+
if (val === undefined) return "Input is required";
|
|
1009
|
+
const check = options.validate!(val);
|
|
1010
|
+
if (check === true) return undefined;
|
|
1011
|
+
return check;
|
|
1012
|
+
}
|
|
1013
|
+
: undefined,
|
|
1014
|
+
});
|
|
1015
|
+
if (p.isCancel(result)) {
|
|
1016
|
+
p.cancel("Setup cancelled.");
|
|
1017
|
+
process.exit(1);
|
|
1018
|
+
}
|
|
1019
|
+
return result;
|
|
803
1020
|
} else {
|
|
804
1021
|
if (options.default !== undefined) {
|
|
805
1022
|
return options.default;
|
|
@@ -811,56 +1028,47 @@ async function promptForInput(
|
|
|
811
1028
|
}
|
|
812
1029
|
}
|
|
813
1030
|
|
|
1031
|
+
// ---------------------------------------------------------------------------
|
|
1032
|
+
// Final success message
|
|
1033
|
+
// ---------------------------------------------------------------------------
|
|
1034
|
+
|
|
814
1035
|
function printFinalSuccessMessage(config: ProjectConfig) {
|
|
815
1036
|
const isProd = config.deployment.type === "prod";
|
|
816
1037
|
const deploymentName = config.deployment.name ?? "your deployment";
|
|
817
1038
|
|
|
818
1039
|
if (isProd) {
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
print(` Full docs: ${chalk.cyan("https://deepwiki.com/robelest/convex-auth")}`);
|
|
1040
|
+
p.log.success(`Production setup complete for ${deploymentName}.`);
|
|
1041
|
+
p.log.message(" Full docs: https://deepwiki.com/robelest/convex-auth");
|
|
822
1042
|
} else {
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
1043
|
+
p.log.success(`Setup complete for ${deploymentName}.`);
|
|
1044
|
+
p.log.message("");
|
|
1045
|
+
p.log.message(
|
|
1046
|
+
" To set up production, run this command with your production URL:",
|
|
1047
|
+
);
|
|
1048
|
+
p.log.message(
|
|
1049
|
+
' npx @robelest/convex-auth --prod --site-url "https://myapp.com"',
|
|
1050
|
+
);
|
|
1051
|
+
p.log.message("");
|
|
1052
|
+
p.log.message(" Don't forget to set provider secrets on production too:");
|
|
1053
|
+
p.log.message(' npx convex env set --prod AUTH_GITHUB_ID "..."');
|
|
1054
|
+
p.log.message(' npx convex env set --prod AUTH_GITHUB_SECRET "..."');
|
|
1055
|
+
p.log.message("");
|
|
1056
|
+
p.log.message(" Full docs: https://deepwiki.com/robelest/convex-auth");
|
|
833
1057
|
}
|
|
834
1058
|
}
|
|
835
1059
|
|
|
1060
|
+
// ---------------------------------------------------------------------------
|
|
1061
|
+
// Error helpers
|
|
1062
|
+
// ---------------------------------------------------------------------------
|
|
1063
|
+
|
|
836
1064
|
function logErrorAndExit(message: string, error?: string): never {
|
|
837
|
-
|
|
1065
|
+
p.log.error(`${message}${error !== undefined ? `\n Error: ${error}` : ""}`);
|
|
838
1066
|
process.exit(1);
|
|
839
1067
|
}
|
|
840
1068
|
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
error !== undefined ? `\n ${chalk.grey(`Error: ${indent(error)}`)}` : ""
|
|
845
|
-
}`,
|
|
846
|
-
);
|
|
847
|
-
}
|
|
848
|
-
|
|
849
|
-
function logWarning(message: string) {
|
|
850
|
-
print(`${chalk.yellow.bold(`!`)} ${indent(message)}`);
|
|
851
|
-
}
|
|
852
|
-
|
|
853
|
-
function logInfo(message: string) {
|
|
854
|
-
print(`${chalk.blue.bold(`i`)} ${indent(message)}`);
|
|
855
|
-
}
|
|
856
|
-
|
|
857
|
-
function logSuccess(message: string) {
|
|
858
|
-
print(`${chalk.green(`✔`)} ${indent(message)}`);
|
|
859
|
-
}
|
|
860
|
-
|
|
861
|
-
function print(message?: string) {
|
|
862
|
-
process.stderr.write((message ?? "") + "\n");
|
|
863
|
-
}
|
|
1069
|
+
// ---------------------------------------------------------------------------
|
|
1070
|
+
// String helpers
|
|
1071
|
+
// ---------------------------------------------------------------------------
|
|
864
1072
|
|
|
865
1073
|
function indent(string: string) {
|
|
866
1074
|
return string.replace(/^/gm, " ").slice(2);
|