@descope/node-sdk 1.6.2 → 1.6.4
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 +201 -62
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/index.d.ts +440 -46
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/package.json +3 -4
package/README.md
CHANGED
|
@@ -70,10 +70,12 @@ Then, you can use that to work with the following functions:
|
|
|
70
70
|
7. [Query SSO Groups](#query-sso-groups)
|
|
71
71
|
8. [Manage Flows](#manage-flows)
|
|
72
72
|
9. [Manage JWTs](#manage-jwts)
|
|
73
|
-
10. [
|
|
74
|
-
11. [
|
|
75
|
-
12. [
|
|
76
|
-
13. [Manage
|
|
73
|
+
10. [Impersonate](#impersonate)
|
|
74
|
+
11. [Embedded Links](#embedded-links)
|
|
75
|
+
12. [Search Audit](#search-audit)
|
|
76
|
+
13. [Manage Authz](#manage-authz)
|
|
77
|
+
14. [Manage Project](#manage-project)
|
|
78
|
+
15. [Manage SSO applications](#manage-sso-applications)
|
|
77
79
|
|
|
78
80
|
If you wish to run any of our code samples and play with them, check out our [Code Examples](#code-examples) section.
|
|
79
81
|
|
|
@@ -430,11 +432,9 @@ For multi-tenant uses:
|
|
|
430
432
|
|
|
431
433
|
```typescript
|
|
432
434
|
// You can validate specific permissions
|
|
433
|
-
const validTenantPermissions = descopeClient.validateTenantPermissions(
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
['Permission to validate'],
|
|
437
|
-
);
|
|
435
|
+
const validTenantPermissions = descopeClient.validateTenantPermissions(authInfo, 'my-tenant-ID', [
|
|
436
|
+
'Permission to validate',
|
|
437
|
+
]);
|
|
438
438
|
if (!validTenantPermissions) {
|
|
439
439
|
// Deny access
|
|
440
440
|
}
|
|
@@ -449,14 +449,14 @@ if (!validTenantRoles) {
|
|
|
449
449
|
|
|
450
450
|
// Or get the matched roles/permissions
|
|
451
451
|
const matchedTenantRoles = descopeClient.getMatchedTenantRoles(authInfo, 'my-tenant-ID', [
|
|
452
|
-
|
|
453
|
-
|
|
452
|
+
'Role to validate',
|
|
453
|
+
'Another role to validate',
|
|
454
454
|
]);
|
|
455
455
|
|
|
456
456
|
const matchedTenantPermissions = descopeClient.getMatchedTenantPermissions(
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
457
|
+
authInfo,
|
|
458
|
+
'my-tenant-ID',
|
|
459
|
+
['Permission to validate', 'Another permission to validate'],
|
|
460
460
|
);
|
|
461
461
|
```
|
|
462
462
|
|
|
@@ -525,7 +525,7 @@ const descopeClient = DescopeClient({
|
|
|
525
525
|
|
|
526
526
|
### Manage Tenants
|
|
527
527
|
|
|
528
|
-
You can create, update, delete or load tenants:
|
|
528
|
+
You can create, update, delete or load tenants, as well as read and update tenant settings:
|
|
529
529
|
|
|
530
530
|
```typescript
|
|
531
531
|
// The self provisioning domains or optional. If given they'll be used to associate
|
|
@@ -564,6 +564,102 @@ const searchRes = await descopeClient.management.tenant.searchAll(['id']);
|
|
|
564
564
|
searchRes.data.forEach((tenant) => {
|
|
565
565
|
// do something
|
|
566
566
|
});
|
|
567
|
+
|
|
568
|
+
// Load tenant settings by id
|
|
569
|
+
const tenantSettings = await descopeClient.management.tenant.getSettings('my-tenant-id');
|
|
570
|
+
|
|
571
|
+
// Update will override all fields as is. Use carefully.
|
|
572
|
+
await descopeClient.management.tenant.configureSettings('my-tenant-id', {
|
|
573
|
+
domains: ['domain1.com'],
|
|
574
|
+
selfProvisioningDomains: ['domain1.com'],
|
|
575
|
+
sessionSettingsEnabled: true,
|
|
576
|
+
refreshTokenExpiration: 12,
|
|
577
|
+
refreshTokenExpirationUnit: 'days',
|
|
578
|
+
sessionTokenExpiration: 10,
|
|
579
|
+
sessionTokenExpirationUnit: 'minutes',
|
|
580
|
+
enableInactivity: true,
|
|
581
|
+
JITDisabled: false,
|
|
582
|
+
InactivityTime: 10,
|
|
583
|
+
InactivityTimeUnit: 'minutes',
|
|
584
|
+
});
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
### Manage Password
|
|
588
|
+
|
|
589
|
+
You can read and update any tenant password settings and policy:
|
|
590
|
+
|
|
591
|
+
```typescript
|
|
592
|
+
// Load tenant password settings by id
|
|
593
|
+
const passwordSettings = await descopeClient.management.password.getSettings('my-tenant-id');
|
|
594
|
+
|
|
595
|
+
// Update will override all fields as is. Use carefully.
|
|
596
|
+
await descopeClient.management.password.configureSettings('my-tenant-id', {
|
|
597
|
+
enabled: true,
|
|
598
|
+
minLength: 8,
|
|
599
|
+
expiration: true,
|
|
600
|
+
expirationWeeks: 4,
|
|
601
|
+
lock: true,
|
|
602
|
+
lockAttempts: 5,
|
|
603
|
+
reuse: true,
|
|
604
|
+
reuseAmount: 6,
|
|
605
|
+
lowercase: true,
|
|
606
|
+
uppercase: false,
|
|
607
|
+
number: true,
|
|
608
|
+
nonAlphaNumeric: false,
|
|
609
|
+
});
|
|
610
|
+
```
|
|
611
|
+
|
|
612
|
+
### Manage SSO applications
|
|
613
|
+
|
|
614
|
+
You can create, update, delete or load SSO applications:
|
|
615
|
+
|
|
616
|
+
```typescript
|
|
617
|
+
// Create OIDC sso application
|
|
618
|
+
await descopeClient.management.ssoApplication.createOidcApplication({
|
|
619
|
+
name: 'My OIDC app name',
|
|
620
|
+
loginPageUrl: 'http://dummy.com/login',
|
|
621
|
+
});
|
|
622
|
+
|
|
623
|
+
// Create SAML sso application
|
|
624
|
+
await descopeClient.management.ssoApplication.createSamlApplication({
|
|
625
|
+
name: 'My SAML app name',
|
|
626
|
+
loginPageUrl: 'http://dummy.com/login',
|
|
627
|
+
useMetadataInfo: true,
|
|
628
|
+
metadataUrl: 'http://dummy.com/metadata',
|
|
629
|
+
});
|
|
630
|
+
|
|
631
|
+
// Update OIDC sso application.
|
|
632
|
+
// Update will override all fields as is. Use carefully.
|
|
633
|
+
await descopeClient.management.ssoApplication.updateOidcApplication({
|
|
634
|
+
id: 'my-app-id',
|
|
635
|
+
name: 'My OIDC app name',
|
|
636
|
+
loginPageUrl: 'http://dummy.com/login',
|
|
637
|
+
});
|
|
638
|
+
|
|
639
|
+
// Update SAML sso application.
|
|
640
|
+
// Update will override all fields as is. Use carefully.
|
|
641
|
+
await descopeClient.management.ssoApplication.updateSamlApplication({
|
|
642
|
+
id: 'my-app-id',
|
|
643
|
+
name: 'My SAML app name',
|
|
644
|
+
loginPageUrl: 'http://dummy.com/login',
|
|
645
|
+
enabled: true,
|
|
646
|
+
useMetadataInfo: false,
|
|
647
|
+
entityId: 'entity1234',
|
|
648
|
+
aceUrl: 'http://dummy.com/acs',
|
|
649
|
+
certificate: 'certificate',
|
|
650
|
+
});
|
|
651
|
+
|
|
652
|
+
// Tenant deletion cannot be undone. Use carefully.
|
|
653
|
+
await descopeClient.management.ssoApplication.delete('my-app-id');
|
|
654
|
+
|
|
655
|
+
// Load sso application by id
|
|
656
|
+
const app = await descopeClient.management.ssoApplication.load('my-app-id');
|
|
657
|
+
|
|
658
|
+
// Load all sso applications
|
|
659
|
+
const appsRes = await descopeClient.management.ssoApplication.loadAll();
|
|
660
|
+
appsRes.data.forEach((app) => {
|
|
661
|
+
// do something
|
|
662
|
+
});
|
|
567
663
|
```
|
|
568
664
|
|
|
569
665
|
### Manage Users
|
|
@@ -574,30 +670,25 @@ You can create, update, delete or load users, as well as search according to fil
|
|
|
574
670
|
// A user must have a login ID, other fields are optional.
|
|
575
671
|
// Roles should be set directly if no tenants exist, otherwise set
|
|
576
672
|
// on a per-tenant basis.
|
|
577
|
-
await descopeClient.management.user.create(
|
|
578
|
-
'desmond@descope.com',
|
|
579
|
-
'
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
null,
|
|
583
|
-
[{ tenantId: 'tenant-ID1', roleNames: ['role-name1'] }],
|
|
584
|
-
);
|
|
673
|
+
await descopeClient.management.user.create('desmond@descope.com', {
|
|
674
|
+
email: 'desmond@descope.com',
|
|
675
|
+
displayName: 'Desmond Copeland',
|
|
676
|
+
userTenants: [{ tenantId: 'tenant-ID1', roleNames: ['role-name1'] }],
|
|
677
|
+
});
|
|
585
678
|
|
|
586
679
|
// Alternatively, a user can be created and invited via an email / text message.
|
|
587
680
|
// Make sure to configure the invite URL in the Descope console prior to using this function,
|
|
588
681
|
// and that an email address / phone number is provided in the information.
|
|
589
|
-
await descopeClient.management.user.invite(
|
|
590
|
-
'desmond@descope.com',
|
|
591
|
-
'
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
null,
|
|
595
|
-
[{ tenantId: 'tenant-ID1', roleNames: ['role-name1'] }],
|
|
596
|
-
);
|
|
682
|
+
await descopeClient.management.user.invite('desmond@descope.com', {
|
|
683
|
+
email: 'desmond@descope.com',
|
|
684
|
+
displayName: 'Desmond Copeland',
|
|
685
|
+
userTenants: [{ tenantId: 'tenant-ID1', roleNames: ['role-name1'] }],
|
|
686
|
+
});
|
|
597
687
|
|
|
598
688
|
// You can invite batch of users via an email / text message.
|
|
599
689
|
// Make sure to configure the invite URL in the Descope console prior to using this function,
|
|
600
|
-
// and that an email address / phone number is provided in the information.
|
|
690
|
+
// and that an email address / phone number is provided in the information. You can also set
|
|
691
|
+
// a cleartext password or import a prehashed one from another service.
|
|
601
692
|
await descopeClient.management.user.inviteBatch(
|
|
602
693
|
[
|
|
603
694
|
{
|
|
@@ -606,6 +697,11 @@ await descopeClient.management.user.inviteBatch(
|
|
|
606
697
|
phone: '+123456789123',
|
|
607
698
|
displayName: 'Desmond Copeland',
|
|
608
699
|
userTenants: [{ tenantId: 'tenant-ID1', roleNames: ['role-name1'] }],
|
|
700
|
+
hashedPassword: {
|
|
701
|
+
bcrypt: {
|
|
702
|
+
hash: '$2a$...',
|
|
703
|
+
},
|
|
704
|
+
},
|
|
609
705
|
},
|
|
610
706
|
],
|
|
611
707
|
'<invite_url>',
|
|
@@ -614,14 +710,11 @@ await descopeClient.management.user.inviteBatch(
|
|
|
614
710
|
);
|
|
615
711
|
|
|
616
712
|
// Update will override all fields as is. Use carefully.
|
|
617
|
-
await descopeClient.management.user.update(
|
|
618
|
-
'desmond@descope.com',
|
|
619
|
-
'
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
null,
|
|
623
|
-
[{ tenantId: 'tenant-ID1', roleNames: ['role-name1', 'role-name2'] }],
|
|
624
|
-
);
|
|
713
|
+
await descopeClient.management.user.update('desmond@descope.com', {
|
|
714
|
+
email: 'desmond@descope.com',
|
|
715
|
+
displayName: 'Desmond Copeland',
|
|
716
|
+
userTenants: [{ tenantId: 'tenant-ID1', roleNames: ['role-name1'] }],
|
|
717
|
+
});
|
|
625
718
|
|
|
626
719
|
// Update explicit data for a user rather than overriding all fields
|
|
627
720
|
await descopeClient.management.user.updatePhone('desmond@descope.com', '+18005551234', true);
|
|
@@ -643,25 +736,35 @@ const userRes = await descopeClient.management.user.loadByUserId('<user-ID>');
|
|
|
643
736
|
|
|
644
737
|
// Search all users, optionally according to tenant and/or role filter
|
|
645
738
|
// Results can be paginated using the limit and page parameters
|
|
646
|
-
const usersRes = await descopeClient.management.user.
|
|
739
|
+
const usersRes = await descopeClient.management.user.search({ tenantIds: ['tenant-ID'] });
|
|
647
740
|
usersRes.data.forEach((user) => {
|
|
648
741
|
// do something
|
|
649
742
|
});
|
|
650
743
|
|
|
651
744
|
await descopeClient.management.user.logoutUser('my-custom-id');
|
|
652
745
|
|
|
653
|
-
await descopeClient.management.
|
|
746
|
+
await descopeClient.management.user.logoutUserByUserId('<user-ID>');
|
|
747
|
+
|
|
748
|
+
// Get users' authentication history
|
|
749
|
+
const userIds = ['user-id-1', 'user-id-2'];
|
|
750
|
+
const usersHistoryRes = await descopeClient.management.user.history(userIds);
|
|
751
|
+
usersHistoryRes.forEach((userHistory) => {
|
|
752
|
+
// do something
|
|
753
|
+
});
|
|
654
754
|
```
|
|
655
755
|
|
|
656
756
|
#### Set or Expire User Password
|
|
657
757
|
|
|
658
|
-
You can set
|
|
659
|
-
|
|
660
|
-
|
|
758
|
+
You can set a new active password for a user that they can sign in with.
|
|
759
|
+
You can also set a temporary password that they user will be forced to change on the next login.
|
|
760
|
+
For a user that already has an active password, you can expire their current password, effectively requiring them to change it on the next login.
|
|
661
761
|
|
|
662
762
|
```typescript
|
|
763
|
+
// Set a user's temporary password
|
|
764
|
+
await descopeClient.management.user.setTemporaryPassword('<login-ID>', '<some-password>');
|
|
765
|
+
|
|
663
766
|
// Set a user's password
|
|
664
|
-
await descopeClient.management.user.
|
|
767
|
+
await descopeClient.management.user.setActivePassword('<login-ID>', '<some-password>');
|
|
665
768
|
|
|
666
769
|
// Or alternatively, expire a user password
|
|
667
770
|
await descopeClient.management.user.expirePassword('<login-ID>');
|
|
@@ -680,6 +783,18 @@ await descopeClient.management.project.updateName('new-project-name');
|
|
|
680
783
|
const cloneRes = await descopeClient.management.project.clone('new-project-name');
|
|
681
784
|
```
|
|
682
785
|
|
|
786
|
+
You can manage your project's settings and configurations by exporting your
|
|
787
|
+
project's environment. You can also import previously exported data into
|
|
788
|
+
the same project or a different one.
|
|
789
|
+
|
|
790
|
+
```typescript
|
|
791
|
+
// Exports the current state of the project
|
|
792
|
+
const files = await descopeClient.management.project.export();
|
|
793
|
+
|
|
794
|
+
// Import the previously exported data into the current project
|
|
795
|
+
await descopeClient.management.project.import(files);
|
|
796
|
+
```
|
|
797
|
+
|
|
683
798
|
### Manage Access Keys
|
|
684
799
|
|
|
685
800
|
You can create, update, delete or load access keys, as well as search according to filters:
|
|
@@ -688,6 +803,7 @@ You can create, update, delete or load access keys, as well as search according
|
|
|
688
803
|
// An access key must have a name and expiration, other fields are optional.
|
|
689
804
|
// Roles should be set directly if no tenants exist, otherwise set
|
|
690
805
|
// on a per-tenant basis.
|
|
806
|
+
// If userId is supplied, then authorization would be ignored, and access key would be bound to the users authorization
|
|
691
807
|
await descopeClient.management.accessKey.create(
|
|
692
808
|
'key-name',
|
|
693
809
|
123456789, // expiration time
|
|
@@ -723,19 +839,25 @@ You can manage SSO settings and map SSO group roles and user attributes.
|
|
|
723
839
|
|
|
724
840
|
```typescript
|
|
725
841
|
// You can get SSO settings for a specific tenant ID
|
|
726
|
-
const ssoSettings = await descopeClient.management.sso.
|
|
842
|
+
const ssoSettings = await descopeClient.management.sso.loadSettings("tenant-id")
|
|
727
843
|
|
|
728
844
|
// You can configure SSO settings manually by setting the required fields directly
|
|
729
845
|
const tenantId = 'tenant-id' // Which tenant this configuration is for
|
|
730
846
|
const idpURL = 'https://idp.com'
|
|
731
847
|
const entityID = 'my-idp-entity-id'
|
|
732
848
|
const idpCert = '<your-cert-here>'
|
|
733
|
-
const redirectURL = 'https://my-app.com/handle-
|
|
849
|
+
const redirectURL = 'https://my-app.com/handle-sso' // Global redirect URL for SSO/SAML
|
|
734
850
|
const domains = ['tenant-users.com'] // Users authentication with this domain will be logged in to this tenant
|
|
735
|
-
await descopeClient.management.sso.
|
|
851
|
+
await descopeClient.management.sso.configureSAMLSettings(tenantID, {idpURL, entityID, idpCert}, redirectURL, domains)
|
|
736
852
|
|
|
737
853
|
// Alternatively, configure using an SSO metadata URL
|
|
738
|
-
await descopeClient.management.sso.
|
|
854
|
+
await descopeClient.management.sso.configureSAMLByMetadata(tenantID, {idpMetadataUrl: 'https://idp.com/my-idp-metadata'}, redirectURL, domains)
|
|
855
|
+
|
|
856
|
+
// In case SSO is configured to work with OIDC use the following
|
|
857
|
+
const name = 'some-name';
|
|
858
|
+
const clientId = 'client id of OIDC';
|
|
859
|
+
const clientSecret = 'client secret';
|
|
860
|
+
await descopeClient.management.sso.configureOIDCSettings(tenantID, {name, clientId, clientSecret, redirectUrl}, domains)
|
|
739
861
|
|
|
740
862
|
// Map IDP groups to Descope roles, or map user attributes.
|
|
741
863
|
// This function overrides any previous mapping (even when empty). Use carefully.
|
|
@@ -788,19 +910,21 @@ You can create, update, delete or load roles:
|
|
|
788
910
|
|
|
789
911
|
```typescript
|
|
790
912
|
// You can optionally set a description and associated permission for a roles.
|
|
913
|
+
// The optional `tenantId` will scope this role for a specific tenant. If left empty, the role will be available to all tenants.
|
|
791
914
|
const name = 'My Role';
|
|
915
|
+
const tenantId = '<tenant id>';
|
|
792
916
|
let description = 'Optional description to briefly explain what this role allows.';
|
|
793
917
|
const permissionNames = ['My Updated Permission'];
|
|
794
|
-
descopeClient.management.role.create(name, description, permissionNames);
|
|
918
|
+
descopeClient.management.role.create(name, description, permissionNames, tenantId);
|
|
795
919
|
|
|
796
920
|
// Update will override all fields as is. Use carefully.
|
|
797
921
|
const newName = 'My Updated Role';
|
|
798
922
|
description = 'A revised description';
|
|
799
923
|
permissionNames.push('Another Permission');
|
|
800
|
-
descopeClient.management.role.update(name, newName, description, permissionNames);
|
|
924
|
+
descopeClient.management.role.update(name, newName, description, permissionNames, tenantId);
|
|
801
925
|
|
|
802
926
|
// Role deletion cannot be undone. Use carefully.
|
|
803
|
-
descopeClient.management.role.delete(newName);
|
|
927
|
+
descopeClient.management.role.delete(newName, tenantId);
|
|
804
928
|
|
|
805
929
|
// Load all roles
|
|
806
930
|
const rolesRes = await descopeClient.management.role.loadAll();
|
|
@@ -849,6 +973,10 @@ console.log('found total flows', res.total);
|
|
|
849
973
|
res.flows.forEach((flowMetadata) => {
|
|
850
974
|
// do something
|
|
851
975
|
});
|
|
976
|
+
|
|
977
|
+
// Delete flows by ids
|
|
978
|
+
await descopeClient.management.flow.delete(['flow-1', 'flow-2']);
|
|
979
|
+
|
|
852
980
|
// Export the flow and it's matching screens based on the given id
|
|
853
981
|
const res = await descopeClient.management.flow.export('sign-up');
|
|
854
982
|
console.log('found flow', res.data.flow);
|
|
@@ -884,6 +1012,20 @@ const updatedJWTRes = await descopeClient.management.jwt.update('original-jwt',
|
|
|
884
1012
|
});
|
|
885
1013
|
```
|
|
886
1014
|
|
|
1015
|
+
### Impersonate
|
|
1016
|
+
|
|
1017
|
+
You can impersonate to another user
|
|
1018
|
+
The impersonator user must have the `impersonation` permission in order for this request to work.
|
|
1019
|
+
The response would be a refresh JWT of the impersonated user
|
|
1020
|
+
|
|
1021
|
+
```typescript
|
|
1022
|
+
const updatedJWTRes = await descopeClient.management.jwt.impersonate(
|
|
1023
|
+
'impersonator-id',
|
|
1024
|
+
'login-id',
|
|
1025
|
+
true,
|
|
1026
|
+
);
|
|
1027
|
+
```
|
|
1028
|
+
|
|
887
1029
|
Note 1: The generate code/link functions, work only for test users, will not work for regular users.
|
|
888
1030
|
Note 2: In case of testing sign-in / sign-up operations with test users, need to make sure to generate the code prior calling the sign-in / sign-up operations.
|
|
889
1031
|
|
|
@@ -1105,14 +1247,11 @@ that way, you don't need to use 3rd party messaging services in order to receive
|
|
|
1105
1247
|
// Test user must have a loginId, other fields are optional.
|
|
1106
1248
|
// Roles should be set directly if no tenants exist, otherwise set
|
|
1107
1249
|
// on a per-tenant basis.
|
|
1108
|
-
await descopeClient.management.user.createTestUser(
|
|
1109
|
-
'desmond@descope.com',
|
|
1110
|
-
'
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
null,
|
|
1114
|
-
[{ tenantId: 'tenant-ID1', roleNames: ['role-name1'] }],
|
|
1115
|
-
);
|
|
1250
|
+
await descopeClient.management.user.createTestUser('desmond@descope.com', {
|
|
1251
|
+
email: 'desmond@descope.com',
|
|
1252
|
+
displayName: 'Desmond Copeland',
|
|
1253
|
+
userTenants: [{ tenantId: 'tenant-ID1', roleNames: ['role-name1'] }],
|
|
1254
|
+
});
|
|
1116
1255
|
|
|
1117
1256
|
// Now test user got created, and this user will be available until you delete it,
|
|
1118
1257
|
// you can use any management operation for test user CRUD.
|
|
@@ -1143,7 +1282,7 @@ const { link, pendingRef } = await descopeClient.management.user.generateEnchant
|
|
|
1143
1282
|
|
|
1144
1283
|
## Code Examples
|
|
1145
1284
|
|
|
1146
|
-
You can find various usage examples in the [examples folder](
|
|
1285
|
+
You can find various usage examples in the [examples folder](/examples).
|
|
1147
1286
|
|
|
1148
1287
|
### Setup
|
|
1149
1288
|
|
package/dist/cjs/index.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("tslib"),t=require("@descope/core-js-sdk"),s=require("jose"),n=require("cross-fetch");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=o(t);const r=t=>async(...s)=>{var n,o,a;const r=await t(...s);if(!r.data)return r;let i=r.data,{refreshJwt:l}=i,m=e.__rest(i,["refreshJwt"]);const d=[];var p;return l?d.push(`${"DSR"}=${l}; Domain=${(null==(p=m)?void 0:p.cookieDomain)||""}; Max-Age=${(null==p?void 0:p.cookieMaxAge)||""}; Path=${(null==p?void 0:p.cookiePath)||"/"}; HttpOnly; SameSite=Strict`):(null===(n=r.response)||void 0===n?void 0:n.headers.get("set-cookie"))&&(l=((e,t)=>{const s=null==e?void 0:e.match(RegExp(`(?:^|;\\s*)${t}=([^;]*)`));return s?s[1]:null})(null===(o=r.response)||void 0===o?void 0:o.headers.get("set-cookie"),"DSR"),d.push(null===(a=r.response)||void 0===a?void 0:a.headers.get("set-cookie"))),Object.assign(Object.assign({},r),{data:Object.assign(Object.assign({},r.data),{refreshJwt:l,cookies:d})})};function i(e,t,s){var n,o;const a=s?null===(o=null===(n=e.token.tenants)||void 0===n?void 0:n[s])||void 0===o?void 0:o[t]:e.token[t];return Array.isArray(a)?a:[]}function l(e,t){var s;return!!(null===(s=e.token.tenants)||void 0===s?void 0:s[t])}var m={create:"/v1/mgmt/user/create",createBatch:"/v1/mgmt/user/create/batch",update:"/v1/mgmt/user/update",delete:"/v1/mgmt/user/delete",deleteAllTestUsers:"/v1/mgmt/user/test/delete/all",load:"/v1/mgmt/user",logout:"/v1/mgmt/user/logout",search:"/v1/mgmt/user/search",getProviderToken:"/v1/mgmt/user/provider/token",updateStatus:"/v1/mgmt/user/update/status",updateLoginId:"/v1/mgmt/user/update/loginid",updateEmail:"/v1/mgmt/user/update/email",updatePhone:"/v1/mgmt/user/update/phone",updateDisplayName:"/v1/mgmt/user/update/name",updatePicture:"/v1/mgmt/user/update/picture",updateCustomAttribute:"/v1/mgmt/user/update/customAttribute",setRole:"/v1/mgmt/user/update/role/set",addRole:"/v1/mgmt/user/update/role/add",removeRole:"/v1/mgmt/user/update/role/remove",addTenant:"/v1/mgmt/user/update/tenant/add",removeTenant:"/v1/mgmt/user/update/tenant/remove",setPassword:"/v1/mgmt/user/password/set",expirePassword:"/v1/mgmt/user/password/expire",generateOTPForTest:"/v1/mgmt/tests/generate/otp",generateMagicLinkForTest:"/v1/mgmt/tests/generate/magiclink",generateEnchantedLinkForTest:"/v1/mgmt/tests/generate/enchantedlink",generateEmbeddedLink:"/v1/mgmt/user/signin/embeddedlink"},d={updateName:"/v1/mgmt/project/update/name",clone:"/v1/mgmt/project/clone"},p={create:"/v1/mgmt/accesskey/create",load:"/v1/mgmt/accesskey",search:"/v1/mgmt/accesskey/search",update:"/v1/mgmt/accesskey/update",deactivate:"/v1/mgmt/accesskey/deactivate",activate:"/v1/mgmt/accesskey/activate",delete:"/v1/mgmt/accesskey/delete"},u={create:"/v1/mgmt/tenant/create",update:"/v1/mgmt/tenant/update",delete:"/v1/mgmt/tenant/delete",load:"/v1/mgmt/tenant",loadAll:"/v1/mgmt/tenant/all",searchAll:"/v1/mgmt/tenant/search"},c={settings:"/v1/mgmt/sso/settings",metadata:"/v1/mgmt/sso/metadata",mapping:"/v1/mgmt/sso/mapping"},g={update:"/v1/mgmt/jwt/update"},h={create:"/v1/mgmt/permission/create",update:"/v1/mgmt/permission/update",delete:"/v1/mgmt/permission/delete",loadAll:"/v1/mgmt/permission/all"},v={create:"/v1/mgmt/role/create",update:"/v1/mgmt/role/update",delete:"/v1/mgmt/role/delete",loadAll:"/v1/mgmt/role/all"},f={list:"/v1/mgmt/flow/list",export:"/v1/mgmt/flow/export",import:"/v1/mgmt/flow/import"},k={export:"/v1/mgmt/theme/export",import:"/v1/mgmt/theme/import"},R={loadAllGroups:"/v1/mgmt/group/all",loadAllGroupsForMember:"/v1/mgmt/group/member/all",loadAllGroupMembers:"/v1/mgmt/group/members"},C={search:"/v1/mgmt/audit/search"},y={schemaSave:"/v1/mgmt/authz/schema/save",schemaDelete:"/v1/mgmt/authz/schema/delete",schemaLoad:"/v1/mgmt/authz/schema/load",nsSave:"/v1/mgmt/authz/ns/save",nsDelete:"/v1/mgmt/authz/ns/delete",rdSave:"/v1/mgmt/authz/rd/save",rdDelete:"/v1/mgmt/authz/rd/delete",reCreate:"/v1/mgmt/authz/re/create",reDelete:"/v1/mgmt/authz/re/delete",reDeleteResources:"/v1/mgmt/authz/re/deleteresources",hasRelations:"/v1/mgmt/authz/re/has",who:"/v1/mgmt/authz/re/who",resource:"/v1/mgmt/authz/re/resource",targets:"/v1/mgmt/authz/re/targets",targetAll:"/v1/mgmt/authz/re/targetall"};const w=(e,s)=>({create:(n,o,a,r,i,l,d,p,u,c,g,h,v,f)=>t.transformResponse(e.httpClient.post(m.create,{loginId:n,email:o,phone:a,displayName:r,givenName:g,middleName:h,familyName:v,roleNames:i,userTenants:l,customAttributes:d,picture:p,verifiedEmail:u,verifiedPhone:c,additionalLoginIds:f},{token:s}),(e=>e.user)),createTestUser:(n,o,a,r,i,l,d,p,u,c,g,h,v,f)=>t.transformResponse(e.httpClient.post(m.create,{loginId:n,email:o,phone:a,displayName:r,givenName:g,middleName:h,familyName:v,roleNames:i,userTenants:l,test:!0,customAttributes:d,picture:p,verifiedEmail:u,verifiedPhone:c,additionalLoginIds:f},{token:s}),(e=>e.user)),invite:(n,o,a,r,i,l,d,p,u,c,g,h,v,f,k,R,C)=>t.transformResponse(e.httpClient.post(m.create,{loginId:n,email:o,phone:a,displayName:r,givenName:f,middleName:k,familyName:R,roleNames:i,userTenants:l,invite:!0,customAttributes:d,picture:p,verifiedEmail:u,verifiedPhone:c,inviteUrl:g,sendMail:h,sendSMS:v,additionalLoginIds:C},{token:s}),(e=>e.user)),inviteBatch:(n,o,a,r)=>t.transformResponse(e.httpClient.post(m.createBatch,{users:n,invite:!0,inviteUrl:o,sendMail:a,sendSMS:r},{token:s}),(e=>e)),update:(n,o,a,r,i,l,d,p,u,c,g,h,v,f)=>t.transformResponse(e.httpClient.post(m.update,{loginId:n,email:o,phone:a,displayName:r,givenName:g,middleName:h,familyName:v,roleNames:i,userTenants:l,customAttributes:d,picture:p,verifiedEmail:u,verifiedPhone:c,additionalLoginIds:f},{token:s}),(e=>e.user)),delete:n=>t.transformResponse(e.httpClient.post(m.delete,{loginId:n},{token:s})),deleteAllTestUsers:()=>t.transformResponse(e.httpClient.delete(m.deleteAllTestUsers,{token:s})),load:n=>t.transformResponse(e.httpClient.get(m.load,{queryParams:{loginId:n},token:s}),(e=>e.user)),loadByUserId:n=>t.transformResponse(e.httpClient.get(m.load,{queryParams:{userId:n},token:s}),(e=>e.user)),logoutUser:n=>t.transformResponse(e.httpClient.post(m.logout,{loginId:n},{token:s})),logoutUserByUserId:n=>t.transformResponse(e.httpClient.post(m.logout,{userId:n},{token:s})),searchAll:(n,o,a,r,i,l,d,p,u,c)=>t.transformResponse(e.httpClient.post(m.search,{tenantIds:n,roleNames:o,limit:a,page:r,testUsersOnly:i,withTestUser:l,customAttributes:d,statuses:p,emails:u,phones:c},{token:s}),(e=>e.users)),getProviderToken:(n,o)=>t.transformResponse(e.httpClient.get(m.getProviderToken,{queryParams:{loginId:n,provider:o},token:s}),(e=>e)),activate:n=>t.transformResponse(e.httpClient.post(m.updateStatus,{loginId:n,status:"enabled"},{token:s}),(e=>e.user)),deactivate:n=>t.transformResponse(e.httpClient.post(m.updateStatus,{loginId:n,status:"disabled"},{token:s}),(e=>e.user)),updateLoginId:(n,o)=>t.transformResponse(e.httpClient.post(m.updateLoginId,{loginId:n,newLoginId:o},{token:s}),(e=>e.user)),updateEmail:(n,o,a)=>t.transformResponse(e.httpClient.post(m.updateEmail,{loginId:n,email:o,verified:a},{token:s}),(e=>e.user)),updatePhone:(n,o,a)=>t.transformResponse(e.httpClient.post(m.updatePhone,{loginId:n,phone:o,verified:a},{token:s}),(e=>e.user)),updateDisplayName:(n,o,a,r,i)=>t.transformResponse(e.httpClient.post(m.updateDisplayName,{loginId:n,displayName:o,givenName:a,middleName:r,familyName:i},{token:s}),(e=>e.user)),updatePicture:(n,o)=>t.transformResponse(e.httpClient.post(m.updatePicture,{loginId:n,picture:o},{token:s}),(e=>e.user)),updateCustomAttribute:(n,o,a)=>t.transformResponse(e.httpClient.post(m.updateCustomAttribute,{loginId:n,attributeKey:o,attributeValue:a},{token:s}),(e=>e.user)),setRoles:(n,o)=>t.transformResponse(e.httpClient.post(m.setRole,{loginId:n,roleNames:o},{token:s}),(e=>e.user)),addRoles:(n,o)=>t.transformResponse(e.httpClient.post(m.addRole,{loginId:n,roleNames:o},{token:s}),(e=>e.user)),removeRoles:(n,o)=>t.transformResponse(e.httpClient.post(m.removeRole,{loginId:n,roleNames:o},{token:s}),(e=>e.user)),addTenant:(n,o)=>t.transformResponse(e.httpClient.post(m.addTenant,{loginId:n,tenantId:o},{token:s}),(e=>e.user)),removeTenant:(n,o)=>t.transformResponse(e.httpClient.post(m.removeTenant,{loginId:n,tenantId:o},{token:s}),(e=>e.user)),setTenantRoles:(n,o,a)=>t.transformResponse(e.httpClient.post(m.setRole,{loginId:n,tenantId:o,roleNames:a},{token:s}),(e=>e.user)),addTenantRoles:(n,o,a)=>t.transformResponse(e.httpClient.post(m.addRole,{loginId:n,tenantId:o,roleNames:a},{token:s}),(e=>e.user)),removeTenantRoles:(n,o,a)=>t.transformResponse(e.httpClient.post(m.removeRole,{loginId:n,tenantId:o,roleNames:a},{token:s}),(e=>e.user)),generateOTPForTestUser:(n,o,a)=>t.transformResponse(e.httpClient.post(m.generateOTPForTest,{deliveryMethod:n,loginId:o,loginOptions:a},{token:s}),(e=>e)),generateMagicLinkForTestUser:(n,o,a,r)=>t.transformResponse(e.httpClient.post(m.generateMagicLinkForTest,{deliveryMethod:n,loginId:o,URI:a,loginOptions:r},{token:s}),(e=>e)),generateEnchantedLinkForTestUser:(n,o,a)=>t.transformResponse(e.httpClient.post(m.generateEnchantedLinkForTest,{loginId:n,URI:o,loginOptions:a},{token:s}),(e=>e)),generateEmbeddedLink:(n,o)=>t.transformResponse(e.httpClient.post(m.generateEmbeddedLink,{loginId:n,customClaims:o},{token:s}),(e=>e)),setPassword:(n,o)=>t.transformResponse(e.httpClient.post(m.setPassword,{loginId:n,password:o},{token:s}),(e=>e)),expirePassword:n=>t.transformResponse(e.httpClient.post(m.expirePassword,{loginId:n},{token:s}),(e=>e))}),I=(e,s)=>({updateName:n=>t.transformResponse(e.httpClient.post(d.updateName,{name:n},{token:s})),clone:(n,o)=>t.transformResponse(e.httpClient.post(d.clone,{name:n,tag:o},{token:s}))}),b=(e,s)=>({create:(n,o,a)=>t.transformResponse(e.httpClient.post(u.create,{name:n,selfProvisioningDomains:o,customAttributes:a},{token:s})),createWithId:(n,o,a,r)=>t.transformResponse(e.httpClient.post(u.create,{id:n,name:o,selfProvisioningDomains:a,customAttributes:r},{token:s})),update:(n,o,a,r)=>t.transformResponse(e.httpClient.post(u.update,{id:n,name:o,selfProvisioningDomains:a,customAttributes:r},{token:s})),delete:n=>t.transformResponse(e.httpClient.post(u.delete,{id:n},{token:s})),load:n=>t.transformResponse(e.httpClient.get(u.load,{queryParams:{id:n},token:s}),(e=>e)),loadAll:()=>t.transformResponse(e.httpClient.get(u.loadAll,{token:s}),(e=>e.tenants)),searchAll:(n,o,a,r)=>t.transformResponse(e.httpClient.post(u.searchAll,{tenantIds:n,tenantNames:o,tenantSelfProvisioningDomains:a,customAttributes:r},{token:s}),(e=>e.tenants))}),N=(e,s)=>({update:(n,o)=>t.transformResponse(e.httpClient.post(g.update,{jwt:n,customClaims:o},{token:s}))}),A=(e,s)=>({create:(n,o)=>t.transformResponse(e.httpClient.post(h.create,{name:n,description:o},{token:s})),update:(n,o,a)=>t.transformResponse(e.httpClient.post(h.update,{name:n,newName:o,description:a},{token:s})),delete:n=>t.transformResponse(e.httpClient.post(h.delete,{name:n},{token:s})),loadAll:()=>t.transformResponse(e.httpClient.get(h.loadAll,{token:s}),(e=>e.permissions))}),T=(e,s)=>({create:(n,o,a)=>t.transformResponse(e.httpClient.post(v.create,{name:n,description:o,permissionNames:a},{token:s})),update:(n,o,a,r)=>t.transformResponse(e.httpClient.post(v.update,{name:n,newName:o,description:a,permissionNames:r},{token:s})),delete:n=>t.transformResponse(e.httpClient.post(v.delete,{name:n},{token:s})),loadAll:()=>t.transformResponse(e.httpClient.get(v.loadAll,{token:s}),(e=>e.roles))}),P=(e,s)=>({loadAllGroups:n=>t.transformResponse(e.httpClient.post(R.loadAllGroups,{tenantId:n},{token:s})),loadAllGroupsForMember:(n,o,a)=>t.transformResponse(e.httpClient.post(R.loadAllGroupsForMember,{tenantId:n,loginIds:a,userIds:o},{token:s})),loadAllGroupMembers:(n,o)=>t.transformResponse(e.httpClient.post(R.loadAllGroupMembers,{tenantId:n,groupId:o},{token:s}))}),E=(e,s)=>({getSettings:n=>t.transformResponse(e.httpClient.get(c.settings,{queryParams:{tenantId:n},token:s}),(e=>e)),deleteSettings:n=>t.transformResponse(e.httpClient.delete(c.settings,{queryParams:{tenantId:n},token:s})),configureSettings:(n,o,a,r,i,l)=>t.transformResponse(e.httpClient.post(c.settings,{tenantId:n,idpURL:o,entityId:r,idpCert:a,redirectURL:i,domains:l},{token:s})),configureMetadata:(n,o,a,r)=>t.transformResponse(e.httpClient.post(c.metadata,{tenantId:n,idpMetadataURL:o,redirectURL:a,domains:r},{token:s})),configureMapping:(n,o,a)=>t.transformResponse(e.httpClient.post(c.mapping,{tenantId:n,roleMappings:o,attributeMapping:a},{token:s}))}),x=(e,s)=>({create:(n,o,a,r)=>t.transformResponse(e.httpClient.post(p.create,{name:n,expireTime:o,roleNames:a,keyTenants:r},{token:s})),load:n=>t.transformResponse(e.httpClient.get(p.load,{queryParams:{id:n},token:s}),(e=>e.key)),searchAll:n=>t.transformResponse(e.httpClient.post(p.search,{tenantIds:n},{token:s}),(e=>e.keys)),update:(n,o)=>t.transformResponse(e.httpClient.post(p.update,{id:n,name:o},{token:s}),(e=>e.key)),deactivate:n=>t.transformResponse(e.httpClient.post(p.deactivate,{id:n},{token:s})),activate:n=>t.transformResponse(e.httpClient.post(p.activate,{id:n},{token:s})),delete:n=>t.transformResponse(e.httpClient.post(p.delete,{id:n},{token:s}))}),S=(e,s)=>({list:()=>t.transformResponse(e.httpClient.post(f.list,{},{token:s})),export:n=>t.transformResponse(e.httpClient.post(f.export,{flowId:n},{token:s})),import:(n,o,a)=>t.transformResponse(e.httpClient.post(f.import,{flowId:n,flow:o,screens:a},{token:s}))}),j=(e,s)=>({export:()=>t.transformResponse(e.httpClient.post(k.export,{},{token:s})),import:n=>t.transformResponse(e.httpClient.post(k.import,{theme:n},{token:s}))}),M=(e,s)=>({search:n=>{const o=Object.assign(Object.assign({},n),{externalIds:n.loginIds});return delete o.loginIds,t.transformResponse(e.httpClient.post(C.search,o,{token:s}),(e=>null==e?void 0:e.audits.map((e=>{const t=Object.assign(Object.assign({},e),{occurred:parseFloat(e.occurred),loginIds:e.externalIds});return delete t.externalIds,t}))))}}),O=(e,s)=>({saveSchema:(n,o)=>t.transformResponse(e.httpClient.post(y.schemaSave,{schema:n,upgrade:o},{token:s})),deleteSchema:()=>t.transformResponse(e.httpClient.post(y.schemaDelete,{},{token:s})),loadSchema:()=>t.transformResponse(e.httpClient.post(y.schemaLoad,{},{token:s}),(e=>e.schema)),saveNamespace:(n,o,a)=>t.transformResponse(e.httpClient.post(y.nsSave,{namespace:n,oldName:o,schemaName:a},{token:s})),deleteNamespace:(n,o)=>t.transformResponse(e.httpClient.post(y.nsDelete,{name:n,schemaName:o},{token:s})),saveRelationDefinition:(n,o,a,r)=>t.transformResponse(e.httpClient.post(y.rdSave,{relationDefinition:n,namespace:o,oldName:a,schemaName:r},{token:s})),deleteRelationDefinition:(n,o,a)=>t.transformResponse(e.httpClient.post(y.rdDelete,{name:n,namespace:o,schemaName:a},{token:s})),createRelations:n=>t.transformResponse(e.httpClient.post(y.reCreate,{relations:n},{token:s})),deleteRelations:n=>t.transformResponse(e.httpClient.post(y.reDelete,{relations:n},{token:s})),deleteRelationsForResources:n=>t.transformResponse(e.httpClient.post(y.reDeleteResources,{resources:n},{token:s})),hasRelations:n=>t.transformResponse(e.httpClient.post(y.hasRelations,{relationQueries:n},{token:s}),(e=>e.relationQueries)),whoCanAccess:(n,o,a)=>t.transformResponse(e.httpClient.post(y.who,{resource:n,relationDefinition:o,namespace:a},{token:s}),(e=>e.targets)),resourceRelations:n=>t.transformResponse(e.httpClient.post(y.resource,{resource:n},{token:s}),(e=>e.relations)),targetsRelations:n=>t.transformResponse(e.httpClient.post(y.targets,{targets:n},{token:s}),(e=>e.relations)),whatCanTargetAccess:n=>t.transformResponse(e.httpClient.post(y.targetAll,{target:n},{token:s}),(e=>e.relations))});var D;null!==(D=globalThis.Headers)&&void 0!==D||(globalThis.Headers=n.Headers);const L=(...e)=>(e.forEach((e=>{var t,s;e&&(null!==(t=(s=e).highWaterMark)&&void 0!==t||(s.highWaterMark=31457280))})),n.fetch(...e)),U=n=>{var o,{managementKey:m,publicKey:d}=n,p=e.__rest(n,["managementKey","publicKey"]);const u=a.default(Object.assign(Object.assign({fetch:L},p),{baseHeaders:Object.assign(Object.assign({},p.baseHeaders),{"x-descope-sdk-name":"nodejs","x-descope-sdk-node-version":(null===(o=null===process||void 0===process?void 0:process.versions)||void 0===o?void 0:o.node)||"","x-descope-sdk-version":"1.6.2"})})),{projectId:c,logger:g}=p,h={},v=((e,t)=>({user:w(e,t),project:I(e,t),accessKey:x(e,t),tenant:b(e,t),sso:E(e,t),jwt:N(e,t),permission:A(e,t),role:T(e,t),group:P(e,t),flow:S(e,t),theme:j(e,t),audit:M(e,t),authz:O(e,t)}))(u,m),f=Object.assign(Object.assign({},u),{management:v,async getKey(e){if(!(null==e?void 0:e.kid))throw Error("header.kid must not be empty");if(h[e.kid])return h[e.kid];if(Object.assign(h,await(async()=>{if(d)try{const e=JSON.parse(d),t=await s.importJWK(e);return{[e.kid]:t}}catch(e){throw null==g||g.error("Failed to parse the provided public key",e),new Error(`Failed to parse public key. Error: ${e}`)}const e=(await u.httpClient.get(`v2/keys/${c}`).then((e=>e.json()))).keys;return Array.isArray(e)?(await Promise.all(e.map((async e=>[e.kid,await s.importJWK(e)])))).reduce(((e,[t,s])=>t?Object.assign(Object.assign({},e),{[t.toString()]:s}):e),{}):{}})()),!h[e.kid])throw Error("failed to fetch matching key");return h[e.kid]},async validateJwt(e){var t;const n=(await s.jwtVerify(e,f.getKey,{clockTolerance:5})).payload;if(n&&(n.iss=null===(t=n.iss)||void 0===t?void 0:t.split("/").pop(),n.iss!==c))throw new s.errors.JWTClaimValidationFailed('unexpected "iss" claim value',"iss","check_failed");return{jwt:e,token:n}},async validateSession(e){if(!e)throw Error("session token is required for validation");try{return await f.validateJwt(e)}catch(e){throw null==g||g.error("session validation failed",e),Error(`session validation failed. Error: ${e}`)}},async refreshSession(e){var t,s;if(!e)throw Error("refresh token is required to refresh a session");try{await f.validateJwt(e);const n=await f.refresh(e);if(n.ok){return await f.validateJwt(null===(t=n.data)||void 0===t?void 0:t.sessionJwt)}throw Error(null===(s=n.error)||void 0===s?void 0:s.errorMessage)}catch(e){throw null==g||g.error("refresh token validation failed",e),Error(`refresh token validation failed, Error: ${e}`)}},async validateAndRefreshSession(e,t){if(!e&&!t)throw Error("both session and refresh tokens are empty");try{return await f.validateSession(e)}catch(e){null==g||g.log(`session validation failed with error ${e} - trying to refresh it`)}return f.refreshSession(t)},async exchangeAccessKey(e){if(!e)throw Error("access key must not be empty");let t;try{t=await f.accessKey.exchange(e)}catch(e){throw null==g||g.error("failed to exchange access key",e),Error(`could not exchange access key - Failed to exchange. Error: ${e}`)}const{sessionJwt:s}=t.data;if(!s)throw null==g||g.error("failed to parse exchange access key response"),Error("could not exchange access key");try{return await f.validateJwt(s)}catch(e){throw null==g||g.error("failed to parse jwt from access key",e),Error(`could not exchange access key - failed to validate jwt. Error: ${e}`)}},validatePermissions:(e,t)=>f.validateTenantPermissions(e,"",t),getMatchedPermissions:(e,t)=>f.getMatchedTenantPermissions(e,"",t),validateTenantPermissions(e,t,s){if(t&&!l(e,t))return!1;const n=i(e,"permissions",t);return s.every((e=>n.includes(e)))},getMatchedTenantPermissions(e,t,s){if(t&&!l(e,t))return[];const n=i(e,"permissions",t);return s.filter((e=>n.includes(e)))},validateRoles:(e,t)=>f.validateTenantRoles(e,"",t),getMatchedRoles:(e,t)=>f.getMatchedTenantRoles(e,"",t),validateTenantRoles(e,t,s){if(t&&!l(e,t))return!1;const n=i(e,"roles",t);return s.every((e=>n.includes(e)))},getMatchedTenantRoles(e,t,s){if(t&&!l(e,t))return[];const n=i(e,"roles",t);return s.filter((e=>n.includes(e)))}});return t.wrapWith(f,["otp.verify.email","otp.verify.sms","otp.verify.whatsapp","magicLink.verify","enchantedLink.signUp","enchantedLink.signIn","oauth.exchange","saml.exchange","totp.verify","webauthn.signIn.finish","webauthn.signUp.finish","refresh"],r)};U.RefreshTokenCookieName="DSR",U.SessionTokenCookieName="DS",exports.default=U,exports.descopeErrors={badRequest:"E011001",missingArguments:"E011002",invalidRequest:"E011003",invalidArguments:"E011004",wrongOTPCode:"E061102",tooManyOTPAttempts:"E061103",enchantedLinkPending:"E062503",userNotFound:"E062108"};
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("tslib"),t=require("@descope/core-js-sdk"),s=require("jose"),n=require("util"),o=require("cross-fetch");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=a(t);const i=t=>async(...s)=>{var n,o,a;const r=await t(...s);if(!r.data)return r;let i=r.data,{refreshJwt:l}=i,p=e.__rest(i,["refreshJwt"]);const d=[];var m;return l?d.push(`${"DSR"}=${l}; Domain=${(null==(m=p)?void 0:m.cookieDomain)||""}; Max-Age=${(null==m?void 0:m.cookieMaxAge)||""}; Path=${(null==m?void 0:m.cookiePath)||"/"}; HttpOnly; SameSite=Strict`):(null===(n=r.response)||void 0===n?void 0:n.headers.get("set-cookie"))&&(l=((e,t)=>{const s=null==e?void 0:e.match(RegExp(`(?:^|;\\s*)${t}=([^;]*)`));return s?s[1]:null})(null===(o=r.response)||void 0===o?void 0:o.headers.get("set-cookie"),"DSR"),d.push(null===(a=r.response)||void 0===a?void 0:a.headers.get("set-cookie"))),Object.assign(Object.assign({},r),{data:Object.assign(Object.assign({},r.data),{refreshJwt:l,cookies:d})})};function l(e,t,s){var n,o;const a=s?null===(o=null===(n=e.token.tenants)||void 0===n?void 0:n[s])||void 0===o?void 0:o[t]:e.token[t];return Array.isArray(a)?a:[]}function p(e,t){var s;return!!(null===(s=e.token.tenants)||void 0===s?void 0:s[t])}var d={create:"/v1/mgmt/user/create",createBatch:"/v1/mgmt/user/create/batch",update:"/v1/mgmt/user/update",delete:"/v1/mgmt/user/delete",deleteAllTestUsers:"/v1/mgmt/user/test/delete/all",load:"/v1/mgmt/user",logout:"/v1/mgmt/user/logout",search:"/v1/mgmt/user/search",getProviderToken:"/v1/mgmt/user/provider/token",updateStatus:"/v1/mgmt/user/update/status",updateLoginId:"/v1/mgmt/user/update/loginid",updateEmail:"/v1/mgmt/user/update/email",updatePhone:"/v1/mgmt/user/update/phone",updateDisplayName:"/v1/mgmt/user/update/name",updatePicture:"/v1/mgmt/user/update/picture",updateCustomAttribute:"/v1/mgmt/user/update/customAttribute",setRole:"/v1/mgmt/user/update/role/set",addRole:"/v1/mgmt/user/update/role/add",removeRole:"/v1/mgmt/user/update/role/remove",setSSOApps:"/v1/mgmt/user/update/ssoapp/set",addSSOApps:"/v1/mgmt/user/update/ssoapp/add",removeSSOApps:"/v1/mgmt/user/update/ssoapp/remove",addTenant:"/v1/mgmt/user/update/tenant/add",removeTenant:"/v1/mgmt/user/update/tenant/remove",setPassword:"/v1/mgmt/user/password/set",setTemporaryPassword:"/v1/mgmt/user/password/set/temporary",setActivePassword:"/v1/mgmt/user/password/set/active",expirePassword:"/v1/mgmt/user/password/expire",removeAllPasskeys:"/v1/mgmt/user/passkeys/delete",generateOTPForTest:"/v1/mgmt/tests/generate/otp",generateMagicLinkForTest:"/v1/mgmt/tests/generate/magiclink",generateEnchantedLinkForTest:"/v1/mgmt/tests/generate/enchantedlink",generateEmbeddedLink:"/v1/mgmt/user/signin/embeddedlink",history:"/v1/mgmt/user/history"},m={updateName:"/v1/mgmt/project/update/name",clone:"/v1/mgmt/project/clone",export:"/v1/mgmt/project/export",import:"/v1/mgmt/project/import"},c={create:"/v1/mgmt/accesskey/create",load:"/v1/mgmt/accesskey",search:"/v1/mgmt/accesskey/search",update:"/v1/mgmt/accesskey/update",deactivate:"/v1/mgmt/accesskey/deactivate",activate:"/v1/mgmt/accesskey/activate",delete:"/v1/mgmt/accesskey/delete"},g={create:"/v1/mgmt/tenant/create",update:"/v1/mgmt/tenant/update",delete:"/v1/mgmt/tenant/delete",load:"/v1/mgmt/tenant",settings:"/v1/mgmt/tenant/settings",loadAll:"/v1/mgmt/tenant/all",searchAll:"/v1/mgmt/tenant/search"},u={oidcCreate:"/v1/mgmt/sso/idp/app/oidc/create",samlCreate:"/v1/mgmt/sso/idp/app/saml/create",oidcUpdate:"/v1/mgmt/sso/idp/app/oidc/update",samlUpdate:"/v1/mgmt/sso/idp/app/saml/update",delete:"/v1/mgmt/sso/idp/app/delete",load:"/v1/mgmt/sso/idp/app/load",loadAll:"/v1/mgmt/sso/idp/apps/load"},h={settings:"/v1/mgmt/sso/settings",metadata:"/v1/mgmt/sso/metadata",mapping:"/v1/mgmt/sso/mapping",settingsv2:"/v2/mgmt/sso/settings",oidc:{configure:"/v1/mgmt/sso/oidc"},saml:{configure:"/v1/mgmt/sso/saml",metadata:"/v1/mgmt/sso/saml/metadata"}},v={update:"/v1/mgmt/jwt/update",impersonate:"/v1/mgmt/impersonate"},f={settings:"/v1/mgmt/password/settings"},k={create:"/v1/mgmt/permission/create",update:"/v1/mgmt/permission/update",delete:"/v1/mgmt/permission/delete",loadAll:"/v1/mgmt/permission/all"},R={create:"/v1/mgmt/role/create",update:"/v1/mgmt/role/update",delete:"/v1/mgmt/role/delete",loadAll:"/v1/mgmt/role/all"},C={list:"/v1/mgmt/flow/list",delete:"/v1/mgmt/flow/delete",export:"/v1/mgmt/flow/export",import:"/v1/mgmt/flow/import"},y={export:"/v1/mgmt/theme/export",import:"/v1/mgmt/theme/import"},I={loadAllGroups:"/v1/mgmt/group/all",loadAllGroupsForMember:"/v1/mgmt/group/member/all",loadAllGroupMembers:"/v1/mgmt/group/members"},b={search:"/v1/mgmt/audit/search"},w={schemaSave:"/v1/mgmt/authz/schema/save",schemaDelete:"/v1/mgmt/authz/schema/delete",schemaLoad:"/v1/mgmt/authz/schema/load",nsSave:"/v1/mgmt/authz/ns/save",nsDelete:"/v1/mgmt/authz/ns/delete",rdSave:"/v1/mgmt/authz/rd/save",rdDelete:"/v1/mgmt/authz/rd/delete",reCreate:"/v1/mgmt/authz/re/create",reDelete:"/v1/mgmt/authz/re/delete",reDeleteResources:"/v1/mgmt/authz/re/deleteresources",hasRelations:"/v1/mgmt/authz/re/has",who:"/v1/mgmt/authz/re/who",resource:"/v1/mgmt/authz/re/resource",targets:"/v1/mgmt/authz/re/targets",targetAll:"/v1/mgmt/authz/re/targetall",getModified:"/v1/mgmt/authz/getmodified"};const A=(e,s)=>({create:function(n,o,a,r,i,l,p,m,c,g,u,h,v,f){const k="string"==typeof o?{loginId:n,email:o,phone:a,displayName:r,givenName:u,middleName:h,familyName:v,roleNames:i,userTenants:l,customAttributes:p,picture:m,verifiedEmail:c,verifiedPhone:g,additionalLoginIds:f}:Object.assign(Object.assign({loginId:n},o),{roleNames:null==o?void 0:o.roles,roles:void 0});return t.transformResponse(e.httpClient.post(d.create,k,{token:s}),(e=>e.user))},createTestUser:function(n,o,a,r,i,l,p,m,c,g,u,h,v,f){const k="string"==typeof o?{loginId:n,email:o,phone:a,displayName:r,givenName:u,middleName:h,familyName:v,roleNames:i,userTenants:l,customAttributes:p,picture:m,verifiedEmail:c,verifiedPhone:g,additionalLoginIds:f,test:!0}:Object.assign(Object.assign({loginId:n},o),{roleNames:null==o?void 0:o.roles,roles:void 0,test:!0});return t.transformResponse(e.httpClient.post(d.create,k,{token:s}),(e=>e.user))},invite:function(n,o,a,r,i,l,p,m,c,g,u,h,v,f,k,R,C){const y="string"==typeof o?{loginId:n,email:o,phone:a,displayName:r,givenName:f,middleName:k,familyName:R,roleNames:i,userTenants:l,invite:!0,customAttributes:p,picture:m,verifiedEmail:c,verifiedPhone:g,inviteUrl:u,sendMail:h,sendSMS:v,additionalLoginIds:C}:Object.assign(Object.assign({loginId:n},o),{roleNames:null==o?void 0:o.roles,roles:void 0,invite:!0});return t.transformResponse(e.httpClient.post(d.create,y,{token:s}),(e=>e.user))},inviteBatch:(n,o,a,r)=>t.transformResponse(e.httpClient.post(d.createBatch,{users:n,invite:!0,inviteUrl:o,sendMail:a,sendSMS:r},{token:s}),(e=>e)),update:function(n,o,a,r,i,l,p,m,c,g,u,h,v,f){const k="string"==typeof o?{loginId:n,email:o,phone:a,displayName:r,givenName:u,middleName:h,familyName:v,roleNames:i,userTenants:l,customAttributes:p,picture:m,verifiedEmail:c,verifiedPhone:g,additionalLoginIds:f}:Object.assign(Object.assign({loginId:n},o),{roleNames:null==o?void 0:o.roles,roles:void 0});return t.transformResponse(e.httpClient.post(d.update,k,{token:s}),(e=>e.user))},delete:n=>t.transformResponse(e.httpClient.post(d.delete,{loginId:n},{token:s})),deleteByUserId:n=>t.transformResponse(e.httpClient.post(d.delete,{userId:n},{token:s})),deleteAllTestUsers:()=>t.transformResponse(e.httpClient.delete(d.deleteAllTestUsers,{token:s})),load:n=>t.transformResponse(e.httpClient.get(d.load,{queryParams:{loginId:n},token:s}),(e=>e.user)),loadByUserId:n=>t.transformResponse(e.httpClient.get(d.load,{queryParams:{userId:n},token:s}),(e=>e.user)),logoutUser:n=>t.transformResponse(e.httpClient.post(d.logout,{loginId:n},{token:s})),logoutUserByUserId:n=>t.transformResponse(e.httpClient.post(d.logout,{userId:n},{token:s})),searchAll:n.deprecate(((n,o,a,r,i,l,p,m,c,g)=>t.transformResponse(e.httpClient.post(d.search,{tenantIds:n,roleNames:o,limit:a,page:r,testUsersOnly:i,withTestUser:l,customAttributes:p,statuses:m,emails:c,phones:g},{token:s}),(e=>e.users))),"searchAll is deprecated please use search() instead"),search:n=>t.transformResponse(e.httpClient.post(d.search,Object.assign(Object.assign({},n),{roleNames:n.roles,roles:void 0}),{token:s}),(e=>e.users)),getProviderToken:(n,o)=>t.transformResponse(e.httpClient.get(d.getProviderToken,{queryParams:{loginId:n,provider:o},token:s}),(e=>e)),activate:n=>t.transformResponse(e.httpClient.post(d.updateStatus,{loginId:n,status:"enabled"},{token:s}),(e=>e.user)),deactivate:n=>t.transformResponse(e.httpClient.post(d.updateStatus,{loginId:n,status:"disabled"},{token:s}),(e=>e.user)),updateLoginId:(n,o)=>t.transformResponse(e.httpClient.post(d.updateLoginId,{loginId:n,newLoginId:o},{token:s}),(e=>e.user)),updateEmail:(n,o,a)=>t.transformResponse(e.httpClient.post(d.updateEmail,{loginId:n,email:o,verified:a},{token:s}),(e=>e.user)),updatePhone:(n,o,a)=>t.transformResponse(e.httpClient.post(d.updatePhone,{loginId:n,phone:o,verified:a},{token:s}),(e=>e.user)),updateDisplayName:(n,o,a,r,i)=>t.transformResponse(e.httpClient.post(d.updateDisplayName,{loginId:n,displayName:o,givenName:a,middleName:r,familyName:i},{token:s}),(e=>e.user)),updatePicture:(n,o)=>t.transformResponse(e.httpClient.post(d.updatePicture,{loginId:n,picture:o},{token:s}),(e=>e.user)),updateCustomAttribute:(n,o,a)=>t.transformResponse(e.httpClient.post(d.updateCustomAttribute,{loginId:n,attributeKey:o,attributeValue:a},{token:s}),(e=>e.user)),setRoles:(n,o)=>t.transformResponse(e.httpClient.post(d.setRole,{loginId:n,roleNames:o},{token:s}),(e=>e.user)),addRoles:(n,o)=>t.transformResponse(e.httpClient.post(d.addRole,{loginId:n,roleNames:o},{token:s}),(e=>e.user)),removeRoles:(n,o)=>t.transformResponse(e.httpClient.post(d.removeRole,{loginId:n,roleNames:o},{token:s}),(e=>e.user)),addTenant:(n,o)=>t.transformResponse(e.httpClient.post(d.addTenant,{loginId:n,tenantId:o},{token:s}),(e=>e.user)),removeTenant:(n,o)=>t.transformResponse(e.httpClient.post(d.removeTenant,{loginId:n,tenantId:o},{token:s}),(e=>e.user)),setTenantRoles:(n,o,a)=>t.transformResponse(e.httpClient.post(d.setRole,{loginId:n,tenantId:o,roleNames:a},{token:s}),(e=>e.user)),addTenantRoles:(n,o,a)=>t.transformResponse(e.httpClient.post(d.addRole,{loginId:n,tenantId:o,roleNames:a},{token:s}),(e=>e.user)),removeTenantRoles:(n,o,a)=>t.transformResponse(e.httpClient.post(d.removeRole,{loginId:n,tenantId:o,roleNames:a},{token:s}),(e=>e.user)),addSSOapps:(n,o)=>t.transformResponse(e.httpClient.post(d.addSSOApps,{loginId:n,ssoAppIds:o},{token:s}),(e=>e.user)),setSSOapps:(n,o)=>t.transformResponse(e.httpClient.post(d.setSSOApps,{loginId:n,ssoAppIds:o},{token:s}),(e=>e.user)),removeSSOapps:(n,o)=>t.transformResponse(e.httpClient.post(d.removeSSOApps,{loginId:n,ssoAppIds:o},{token:s}),(e=>e.user)),generateOTPForTestUser:(n,o,a)=>t.transformResponse(e.httpClient.post(d.generateOTPForTest,{deliveryMethod:n,loginId:o,loginOptions:a},{token:s}),(e=>e)),generateMagicLinkForTestUser:(n,o,a,r)=>t.transformResponse(e.httpClient.post(d.generateMagicLinkForTest,{deliveryMethod:n,loginId:o,URI:a,loginOptions:r},{token:s}),(e=>e)),generateEnchantedLinkForTestUser:(n,o,a)=>t.transformResponse(e.httpClient.post(d.generateEnchantedLinkForTest,{loginId:n,URI:o,loginOptions:a},{token:s}),(e=>e)),generateEmbeddedLink:(n,o)=>t.transformResponse(e.httpClient.post(d.generateEmbeddedLink,{loginId:n,customClaims:o},{token:s}),(e=>e)),setTemporaryPassword:(n,o)=>t.transformResponse(e.httpClient.post(d.setTemporaryPassword,{loginId:n,password:o},{token:s}),(e=>e)),setActivePassword:(n,o)=>t.transformResponse(e.httpClient.post(d.setActivePassword,{loginId:n,password:o},{token:s}),(e=>e)),setPassword:(n,o)=>t.transformResponse(e.httpClient.post(d.setPassword,{loginId:n,password:o},{token:s}),(e=>e)),expirePassword:n=>t.transformResponse(e.httpClient.post(d.expirePassword,{loginId:n},{token:s}),(e=>e)),removeAllPasskeys:n=>t.transformResponse(e.httpClient.post(d.removeAllPasskeys,{loginId:n},{token:s}),(e=>e)),history:n=>t.transformResponse(e.httpClient.post(d.history,n,{token:s}),(e=>e))}),S=(e,s)=>({updateName:n=>t.transformResponse(e.httpClient.post(m.updateName,{name:n},{token:s})),clone:(n,o)=>t.transformResponse(e.httpClient.post(m.clone,{name:n,tag:o},{token:s})),export:()=>t.transformResponse(e.httpClient.post(m.export,{},{token:s}),(e=>e.files)),import:n=>t.transformResponse(e.httpClient.post(m.export,{files:n},{token:s}))}),O=(e,s)=>({create:(n,o,a)=>t.transformResponse(e.httpClient.post(g.create,{name:n,selfProvisioningDomains:o,customAttributes:a},{token:s})),createWithId:(n,o,a,r)=>t.transformResponse(e.httpClient.post(g.create,{id:n,name:o,selfProvisioningDomains:a,customAttributes:r},{token:s})),update:(n,o,a,r)=>t.transformResponse(e.httpClient.post(g.update,{id:n,name:o,selfProvisioningDomains:a,customAttributes:r},{token:s})),delete:n=>t.transformResponse(e.httpClient.post(g.delete,{id:n},{token:s})),load:n=>t.transformResponse(e.httpClient.get(g.load,{queryParams:{id:n},token:s}),(e=>e)),loadAll:()=>t.transformResponse(e.httpClient.get(g.loadAll,{token:s}),(e=>e.tenants)),searchAll:(n,o,a,r)=>t.transformResponse(e.httpClient.post(g.searchAll,{tenantIds:n,tenantNames:o,tenantSelfProvisioningDomains:a,customAttributes:r},{token:s}),(e=>e.tenants)),getSettings:n=>t.transformResponse(e.httpClient.get(g.settings,{queryParams:{id:n},token:s}),(e=>e)),configureSettings:(n,o)=>t.transformResponse(e.httpClient.post(g.settings,Object.assign(Object.assign({},o),{tenantId:n}),{token:s}))}),N=(e,s)=>({update:(n,o)=>t.transformResponse(e.httpClient.post(v.update,{jwt:n,customClaims:o},{token:s})),impersonate:(n,o,a)=>t.transformResponse(e.httpClient.post(v.impersonate,{impersonatorId:n,loginId:o,validateConsent:a},{token:s}))}),j=(e,s)=>({create:(n,o)=>t.transformResponse(e.httpClient.post(k.create,{name:n,description:o},{token:s})),update:(n,o,a)=>t.transformResponse(e.httpClient.post(k.update,{name:n,newName:o,description:a},{token:s})),delete:n=>t.transformResponse(e.httpClient.post(k.delete,{name:n},{token:s})),loadAll:()=>t.transformResponse(e.httpClient.get(k.loadAll,{token:s}),(e=>e.permissions))}),P=(e,s)=>({create:(n,o,a,r)=>t.transformResponse(e.httpClient.post(R.create,{name:n,description:o,permissionNames:a,tenantId:r},{token:s})),update:(n,o,a,r,i)=>t.transformResponse(e.httpClient.post(R.update,{name:n,newName:o,description:a,permissionNames:r,tenantId:i},{token:s})),delete:(n,o)=>t.transformResponse(e.httpClient.post(R.delete,{name:n,tenantId:o},{token:s})),loadAll:()=>t.transformResponse(e.httpClient.get(R.loadAll,{token:s}),(e=>e.roles))}),T=(e,s)=>({loadAllGroups:n=>t.transformResponse(e.httpClient.post(I.loadAllGroups,{tenantId:n},{token:s})),loadAllGroupsForMember:(n,o,a)=>t.transformResponse(e.httpClient.post(I.loadAllGroupsForMember,{tenantId:n,loginIds:a,userIds:o},{token:s})),loadAllGroupMembers:(n,o)=>t.transformResponse(e.httpClient.post(I.loadAllGroupMembers,{tenantId:n,groupId:o},{token:s}))}),M=(e,s)=>({getSettings:n.deprecate((n=>t.transformResponse(e.httpClient.get(h.settings,{queryParams:{tenantId:n},token:s}),(e=>e))),"getSettings is deprecated, please use loadSettings instead"),deleteSettings:n=>t.transformResponse(e.httpClient.delete(h.settings,{queryParams:{tenantId:n},token:s})),configureSettings:n.deprecate(((n,o,a,r,i,l)=>t.transformResponse(e.httpClient.post(h.settings,{tenantId:n,idpURL:o,entityId:r,idpCert:a,redirectURL:i,domains:l},{token:s}))),"configureSettings is deprecated, please use configureSAMLSettings instead "),configureMetadata:n.deprecate(((n,o,a,r)=>t.transformResponse(e.httpClient.post(h.metadata,{tenantId:n,idpMetadataURL:o,redirectURL:a,domains:r},{token:s}))),"configureMetadata is deprecated, please use configureSAMLByMetadata instead"),configureMapping:(n,o,a)=>t.transformResponse(e.httpClient.post(h.mapping,{tenantId:n,roleMappings:o,attributeMapping:a},{token:s})),configureOIDCSettings:(n,o,a)=>{const r=Object.assign(Object.assign({},o),{userAttrMapping:o.attributeMapping});return delete r.attributeMapping,t.transformResponse(e.httpClient.post(h.oidc.configure,{tenantId:n,settings:r,domains:a},{token:s}))},configureSAMLSettings:(n,o,a,r)=>t.transformResponse(e.httpClient.post(h.saml.configure,{tenantId:n,settings:o,redirectUrl:a,domains:r},{token:s})),configureSAMLByMetadata:(n,o,a,r)=>t.transformResponse(e.httpClient.post(h.saml.metadata,{tenantId:n,settings:o,redirectUrl:a,domains:r},{token:s})),loadSettings:n=>t.transformResponse(e.httpClient.get(h.settingsv2,{queryParams:{tenantId:n},token:s}),(e=>{var t,s;const n=e;return n.oidc&&(n.oidc=Object.assign(Object.assign({},n.oidc),{attributeMapping:n.oidc.userAttrMapping}),delete n.oidc.userAttrMapping),(null===(t=n.saml)||void 0===t?void 0:t.groupsMapping)&&(n.saml.groupsMapping=null===(s=n.saml)||void 0===s?void 0:s.groupsMapping.map((e=>{const t=e;return t.roleName=t.role.name,delete t.role,t}))),n}))}),E=(e,s)=>({create:(n,o,a,r,i)=>t.transformResponse(e.httpClient.post(c.create,{name:n,expireTime:o,roleNames:a,keyTenants:r,userId:i},{token:s})),load:n=>t.transformResponse(e.httpClient.get(c.load,{queryParams:{id:n},token:s}),(e=>e.key)),searchAll:n=>t.transformResponse(e.httpClient.post(c.search,{tenantIds:n},{token:s}),(e=>e.keys)),update:(n,o)=>t.transformResponse(e.httpClient.post(c.update,{id:n,name:o},{token:s}),(e=>e.key)),deactivate:n=>t.transformResponse(e.httpClient.post(c.deactivate,{id:n},{token:s})),activate:n=>t.transformResponse(e.httpClient.post(c.activate,{id:n},{token:s})),delete:n=>t.transformResponse(e.httpClient.post(c.delete,{id:n},{token:s}))}),x=(e,s)=>({list:()=>t.transformResponse(e.httpClient.post(C.list,{},{token:s})),delete:n=>t.transformResponse(e.httpClient.post(C.delete,{ids:n},{token:s})),export:n=>t.transformResponse(e.httpClient.post(C.export,{flowId:n},{token:s})),import:(n,o,a)=>t.transformResponse(e.httpClient.post(C.import,{flowId:n,flow:o,screens:a},{token:s}))}),L=(e,s)=>({export:()=>t.transformResponse(e.httpClient.post(y.export,{},{token:s})),import:n=>t.transformResponse(e.httpClient.post(y.import,{theme:n},{token:s}))}),U=(e,s)=>({search:n=>{const o=Object.assign(Object.assign({},n),{externalIds:n.loginIds});return delete o.loginIds,t.transformResponse(e.httpClient.post(b.search,o,{token:s}),(e=>null==e?void 0:e.audits.map((e=>{const t=Object.assign(Object.assign({},e),{occurred:parseFloat(e.occurred),loginIds:e.externalIds});return delete t.externalIds,t}))))}}),D=(e,s)=>({saveSchema:(n,o)=>t.transformResponse(e.httpClient.post(w.schemaSave,{schema:n,upgrade:o},{token:s})),deleteSchema:()=>t.transformResponse(e.httpClient.post(w.schemaDelete,{},{token:s})),loadSchema:()=>t.transformResponse(e.httpClient.post(w.schemaLoad,{},{token:s}),(e=>e.schema)),saveNamespace:(n,o,a)=>t.transformResponse(e.httpClient.post(w.nsSave,{namespace:n,oldName:o,schemaName:a},{token:s})),deleteNamespace:(n,o)=>t.transformResponse(e.httpClient.post(w.nsDelete,{name:n,schemaName:o},{token:s})),saveRelationDefinition:(n,o,a,r)=>t.transformResponse(e.httpClient.post(w.rdSave,{relationDefinition:n,namespace:o,oldName:a,schemaName:r},{token:s})),deleteRelationDefinition:(n,o,a)=>t.transformResponse(e.httpClient.post(w.rdDelete,{name:n,namespace:o,schemaName:a},{token:s})),createRelations:n=>t.transformResponse(e.httpClient.post(w.reCreate,{relations:n},{token:s})),deleteRelations:n=>t.transformResponse(e.httpClient.post(w.reDelete,{relations:n},{token:s})),deleteRelationsForResources:n=>t.transformResponse(e.httpClient.post(w.reDeleteResources,{resources:n},{token:s})),hasRelations:n=>t.transformResponse(e.httpClient.post(w.hasRelations,{relationQueries:n},{token:s}),(e=>e.relationQueries)),whoCanAccess:(n,o,a)=>t.transformResponse(e.httpClient.post(w.who,{resource:n,relationDefinition:o,namespace:a},{token:s}),(e=>e.targets)),resourceRelations:n=>t.transformResponse(e.httpClient.post(w.resource,{resource:n},{token:s}),(e=>e.relations)),targetsRelations:n=>t.transformResponse(e.httpClient.post(w.targets,{targets:n},{token:s}),(e=>e.relations)),whatCanTargetAccess:n=>t.transformResponse(e.httpClient.post(w.targetAll,{target:n},{token:s}),(e=>e.relations)),getModified:n=>t.transformResponse(e.httpClient.post(w.getModified,{since:n?n.getTime():0},{token:s}),(e=>e))}),q=(e,s)=>({createOidcApplication:n=>{var o;return t.transformResponse(e.httpClient.post(u.oidcCreate,Object.assign(Object.assign({},n),{enabled:null===(o=n.enabled)||void 0===o||o}),{token:s}))},createSamlApplication:n=>{var o;return t.transformResponse(e.httpClient.post(u.samlCreate,Object.assign(Object.assign({},n),{enabled:null===(o=n.enabled)||void 0===o||o}),{token:s}))},updateOidcApplication:n=>t.transformResponse(e.httpClient.post(u.oidcUpdate,Object.assign({},n),{token:s})),updateSamlApplication:n=>t.transformResponse(e.httpClient.post(u.samlUpdate,Object.assign({},n),{token:s})),delete:n=>t.transformResponse(e.httpClient.post(u.delete,{id:n},{token:s})),load:n=>t.transformResponse(e.httpClient.get(u.load,{queryParams:{id:n},token:s}),(e=>e)),loadAll:()=>t.transformResponse(e.httpClient.get(u.loadAll,{token:s}),(e=>e.apps))}),F=(e,s)=>({getSettings:n=>t.transformResponse(e.httpClient.get(f.settings,{queryParams:{tenantId:n},token:s}),(e=>e)),configureSettings:(n,o)=>t.transformResponse(e.httpClient.post(f.settings,Object.assign(Object.assign({},o),{tenantId:n}),{token:s}))});var z;null!==(z=globalThis.Headers)&&void 0!==z||(globalThis.Headers=o.Headers);const J=(...e)=>(e.forEach((e=>{var t,s;e&&(null!==(t=(s=e).highWaterMark)&&void 0!==t||(s.highWaterMark=31457280))})),o.fetch(...e)),$=n=>{var o,{managementKey:a,publicKey:d}=n,m=e.__rest(n,["managementKey","publicKey"]);const c=r.default(Object.assign(Object.assign({fetch:J},m),{baseHeaders:Object.assign(Object.assign({},m.baseHeaders),{"x-descope-sdk-name":"nodejs","x-descope-sdk-node-version":(null===(o=null===process||void 0===process?void 0:process.versions)||void 0===o?void 0:o.node)||"","x-descope-sdk-version":"1.6.4"})})),{projectId:g,logger:u}=m,h={},v=((e,t)=>({user:A(e,t),project:S(e,t),accessKey:E(e,t),tenant:O(e,t),ssoApplication:q(e,t),sso:M(e,t),jwt:N(e,t),permission:j(e,t),password:F(e,t),role:P(e,t),group:T(e,t),flow:x(e,t),theme:L(e,t),audit:U(e,t),authz:D(e,t)}))(c,a),f=Object.assign(Object.assign({},c),{management:v,async getKey(e){if(!(null==e?void 0:e.kid))throw Error("header.kid must not be empty");if(h[e.kid])return h[e.kid];if(Object.assign(h,await(async()=>{if(d)try{const e=JSON.parse(d),t=await s.importJWK(e);return{[e.kid]:t}}catch(e){throw null==u||u.error("Failed to parse the provided public key",e),new Error(`Failed to parse public key. Error: ${e}`)}const e=(await c.httpClient.get(`v2/keys/${g}`).then((e=>e.json()))).keys;return Array.isArray(e)?(await Promise.all(e.map((async e=>[e.kid,await s.importJWK(e)])))).reduce(((e,[t,s])=>t?Object.assign(Object.assign({},e),{[t.toString()]:s}):e),{}):{}})()),!h[e.kid])throw Error("failed to fetch matching key");return h[e.kid]},async validateJwt(e){var t;const n=(await s.jwtVerify(e,f.getKey,{clockTolerance:5})).payload;if(n&&(n.iss=null===(t=n.iss)||void 0===t?void 0:t.split("/").pop(),n.iss!==g))throw new s.errors.JWTClaimValidationFailed('unexpected "iss" claim value',"iss","check_failed");return{jwt:e,token:n}},async validateSession(e){if(!e)throw Error("session token is required for validation");try{return await f.validateJwt(e)}catch(e){throw null==u||u.error("session validation failed",e),Error(`session validation failed. Error: ${e}`)}},async refreshSession(e){var t,s;if(!e)throw Error("refresh token is required to refresh a session");try{await f.validateJwt(e);const n=await f.refresh(e);if(n.ok){return await f.validateJwt(null===(t=n.data)||void 0===t?void 0:t.sessionJwt)}throw Error(null===(s=n.error)||void 0===s?void 0:s.errorMessage)}catch(e){throw null==u||u.error("refresh token validation failed",e),Error(`refresh token validation failed, Error: ${e}`)}},async validateAndRefreshSession(e,t){if(!e&&!t)throw Error("both session and refresh tokens are empty");try{return await f.validateSession(e)}catch(e){null==u||u.log(`session validation failed with error ${e} - trying to refresh it`)}return f.refreshSession(t)},async exchangeAccessKey(e,t){if(!e)throw Error("access key must not be empty");let s;try{s=await f.accessKey.exchange(e,t)}catch(e){throw null==u||u.error("failed to exchange access key",e),Error(`could not exchange access key - Failed to exchange. Error: ${e}`)}const{sessionJwt:n}=s.data;if(!n)throw null==u||u.error("failed to parse exchange access key response"),Error("could not exchange access key");try{return await f.validateJwt(n)}catch(e){throw null==u||u.error("failed to parse jwt from access key",e),Error(`could not exchange access key - failed to validate jwt. Error: ${e}`)}},validatePermissions:(e,t)=>f.validateTenantPermissions(e,"",t),getMatchedPermissions:(e,t)=>f.getMatchedTenantPermissions(e,"",t),validateTenantPermissions(e,t,s){if(t&&!p(e,t))return!1;const n=l(e,"permissions",t);return s.every((e=>n.includes(e)))},getMatchedTenantPermissions(e,t,s){if(t&&!p(e,t))return[];const n=l(e,"permissions",t);return s.filter((e=>n.includes(e)))},validateRoles:(e,t)=>f.validateTenantRoles(e,"",t),getMatchedRoles:(e,t)=>f.getMatchedTenantRoles(e,"",t),validateTenantRoles(e,t,s){if(t&&!p(e,t))return!1;const n=l(e,"roles",t);return s.every((e=>n.includes(e)))},getMatchedTenantRoles(e,t,s){if(t&&!p(e,t))return[];const n=l(e,"roles",t);return s.filter((e=>n.includes(e)))}});return t.wrapWith(f,["otp.verify.email","otp.verify.sms","otp.verify.whatsapp","magicLink.verify","enchantedLink.signUp","enchantedLink.signIn","oauth.exchange","saml.exchange","totp.verify","webauthn.signIn.finish","webauthn.signUp.finish","refresh"],i)};$.RefreshTokenCookieName="DSR",$.SessionTokenCookieName="DS",exports.default=$,exports.descopeErrors={badRequest:"E011001",missingArguments:"E011002",invalidRequest:"E011003",invalidArguments:"E011004",wrongOTPCode:"E061102",tooManyOTPAttempts:"E061103",enchantedLinkPending:"E062503",userNotFound:"E062108"};
|
|
2
2
|
//# sourceMappingURL=index.cjs.js.map
|