@idp.global/sdk 17.1.0 → 18.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/changelog.md +15 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts_server/classes.account-doc.d.ts +2 -2
- package/dist_ts_server/classes.account-doc.js +15 -15
- package/dist_ts_server/classes.account-store.d.ts +1 -1
- package/dist_ts_server/classes.account-store.js +1 -1
- package/dist_ts_server/plugins.d.ts +2 -2
- package/dist_ts_server/plugins.js +3 -3
- package/package.json +10 -7
- package/readme.md +24 -13
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts_server/classes.account-doc.ts +17 -17
- package/ts_server/classes.account-store.ts +1 -1
- package/ts_server/plugins.ts +2 -2
package/changelog.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026-09-19 - 18.0.0
|
|
4
|
+
|
|
5
|
+
### Breaking Changes
|
|
6
|
+
|
|
7
|
+
- move the server account store from `@push.rocks/smartdata` to `@lossless.org/client/nosqldb` (persistence)
|
|
8
|
+
- Removes the `@push.rocks/smartdata` dependency and adds a required peer dependency `@lossless.org/client` (`>=1.0.0 <2.0.0`). Consumers of `@idp.global/sdk/server` must install it themselves; the subpath imports it statically, so every `./server` import fails without it.
|
|
9
|
+
- `SmartdataAccountStore({ smartdataDb })` and `setAccountDocSmartdataDb()` now take the `SmartdataDb` exported by `@lossless.org/client/nosqldb`. A `SmartdataDb` built by `@push.rocks/smartdata` is no longer accepted: it is a different class identity and both the type check and the model's runtime db resolution reject it.
|
|
10
|
+
- The store, the document class and the scrypt password hasher are otherwise unchanged. Stored accounts are not transformed: the collection stays `IdpSdkAccountDoc`, `_id` stays a mongo ObjectId distinct from the application `id`, the `_id_` and unique `id_1` indexes are unchanged, and the persisted field set, field types and `scrypt:v1` hash format are asserted verbatim in `test/test.account-store-persistence.node.ts`.
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Fixes
|
|
14
|
+
|
|
15
|
+
- upgrade release tooling to the current published versions (deps-dev)
|
|
16
|
+
- pnpm 12.3.4 -> 12.4.1, `@git.zone/tsbuild` ^4.4.2 -> ^4.5.0, `@git.zone/tstest` ^6.0.0 -> ^6.1.1, `@types/node` 26.4.1 -> 26.5.1.
|
|
17
|
+
|
|
3
18
|
## 2026-09-13 - 17.1.0
|
|
4
19
|
|
|
5
20
|
### Fixes
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@idp.global/sdk',
|
|
6
|
-
version: '
|
|
6
|
+
version: '18.0.0',
|
|
7
7
|
description: 'Reusable browser and server SDK for idp.global authentication.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxpQkFBaUI7SUFDdkIsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLGdFQUFnRTtDQUM5RSxDQUFBIn0=
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
2
|
import type { IIdpSdkAccount, TIdpAccountAuthSource, TIdpAccountRole, TIdpAccountStatus } from './interfaces.js';
|
|
3
|
-
export declare const setAccountDocSmartdataDb: (smartdataDbArg: plugins.
|
|
4
|
-
export declare class IdpSdkAccountDoc extends plugins.
|
|
3
|
+
export declare const setAccountDocSmartdataDb: (smartdataDbArg: plugins.nosqldb.SmartdataDb) => void;
|
|
4
|
+
export declare class IdpSdkAccountDoc extends plugins.nosqldb.SmartDataDbDoc<IdpSdkAccountDoc, IdpSdkAccountDoc> {
|
|
5
5
|
id: string;
|
|
6
6
|
email: string;
|
|
7
7
|
emailNormalized: string;
|
|
@@ -44,11 +44,11 @@ const getDb = () => {
|
|
|
44
44
|
return activeSmartdataDb;
|
|
45
45
|
};
|
|
46
46
|
let IdpSdkAccountDoc = (() => {
|
|
47
|
-
let _classDecorators = [plugins.
|
|
47
|
+
let _classDecorators = [plugins.nosqldb.Collection(() => getDb())];
|
|
48
48
|
let _classDescriptor;
|
|
49
49
|
let _classExtraInitializers = [];
|
|
50
50
|
let _classThis;
|
|
51
|
-
let _classSuper = plugins.
|
|
51
|
+
let _classSuper = plugins.nosqldb.SmartDataDbDoc;
|
|
52
52
|
let _id_decorators;
|
|
53
53
|
let _id_initializers = [];
|
|
54
54
|
let _id_extraInitializers = [];
|
|
@@ -89,18 +89,18 @@ let IdpSdkAccountDoc = (() => {
|
|
|
89
89
|
static { _classThis = this; }
|
|
90
90
|
static {
|
|
91
91
|
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
92
|
-
_id_decorators = [plugins.
|
|
93
|
-
_email_decorators = [plugins.
|
|
94
|
-
_emailNormalized_decorators = [plugins.
|
|
95
|
-
_name_decorators = [plugins.
|
|
96
|
-
_role_decorators = [plugins.
|
|
97
|
-
_status_decorators = [plugins.
|
|
98
|
-
_authSources_decorators = [plugins.
|
|
99
|
-
_passwordHash_decorators = [plugins.
|
|
100
|
-
_idpSubject_decorators = [plugins.
|
|
101
|
-
_createdAt_decorators = [plugins.
|
|
102
|
-
_updatedAt_decorators = [plugins.
|
|
103
|
-
_lastLoginAt_decorators = [plugins.
|
|
92
|
+
_id_decorators = [plugins.nosqldb.unI(), plugins.nosqldb.svDb()];
|
|
93
|
+
_email_decorators = [plugins.nosqldb.svDb()];
|
|
94
|
+
_emailNormalized_decorators = [plugins.nosqldb.svDb()];
|
|
95
|
+
_name_decorators = [plugins.nosqldb.svDb()];
|
|
96
|
+
_role_decorators = [plugins.nosqldb.svDb()];
|
|
97
|
+
_status_decorators = [plugins.nosqldb.svDb()];
|
|
98
|
+
_authSources_decorators = [plugins.nosqldb.svDb()];
|
|
99
|
+
_passwordHash_decorators = [plugins.nosqldb.svDb()];
|
|
100
|
+
_idpSubject_decorators = [plugins.nosqldb.svDb()];
|
|
101
|
+
_createdAt_decorators = [plugins.nosqldb.svDb()];
|
|
102
|
+
_updatedAt_decorators = [plugins.nosqldb.svDb()];
|
|
103
|
+
_lastLoginAt_decorators = [plugins.nosqldb.svDb()];
|
|
104
104
|
__esDecorate(null, null, _id_decorators, { kind: "field", name: "id", static: false, private: false, access: { has: obj => "id" in obj, get: obj => obj.id, set: (obj, value) => { obj.id = value; } }, metadata: _metadata }, _id_initializers, _id_extraInitializers);
|
|
105
105
|
__esDecorate(null, null, _email_decorators, { kind: "field", name: "email", static: false, private: false, access: { has: obj => "email" in obj, get: obj => obj.email, set: (obj, value) => { obj.email = value; } }, metadata: _metadata }, _email_initializers, _email_extraInitializers);
|
|
106
106
|
__esDecorate(null, null, _emailNormalized_decorators, { kind: "field", name: "emailNormalized", static: false, private: false, access: { has: obj => "emailNormalized" in obj, get: obj => obj.emailNormalized, set: (obj, value) => { obj.emailNormalized = value; } }, metadata: _metadata }, _emailNormalized_initializers, _emailNormalized_extraInitializers);
|
|
@@ -163,4 +163,4 @@ let IdpSdkAccountDoc = (() => {
|
|
|
163
163
|
return IdpSdkAccountDoc = _classThis;
|
|
164
164
|
})();
|
|
165
165
|
export { IdpSdkAccountDoc };
|
|
166
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
166
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5hY2NvdW50LWRvYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX3NlcnZlci9jbGFzc2VzLmFjY291bnQtZG9jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUd4QyxJQUFJLGlCQUFpQixHQUF1QyxJQUFJLENBQUM7QUFFakUsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxjQUEyQyxFQUFFLEVBQUU7SUFDdEYsaUJBQWlCLEdBQUcsY0FBYyxDQUFDO0FBQ3JDLENBQUMsQ0FBQztBQUVGLE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRTtJQUNqQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNELE9BQU8saUJBQWlCLENBQUM7QUFDM0IsQ0FBQyxDQUFDO0lBR1csZ0JBQWdCOzRCQUQ1QixPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs7OztzQkFDSixPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Z0NBQXRDLFNBQVEsV0FBa0U7Ozs7OEJBQ3JHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQ3JCLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO2lDQUd0QixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTsyQ0FHdEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7Z0NBR3RCLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO2dDQUd0QixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtrQ0FHdEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7dUNBR3RCLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO3dDQUd0QixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtzQ0FHdEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7cUNBR3RCLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO3FDQUd0QixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTt1Q0FHdEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFoQ3ZCLHdKQUFPLEVBQUUsNkJBQUYsRUFBRSwrRUFBVTtZQUduQixpS0FBTyxLQUFLLDZCQUFMLEtBQUsscUZBQVU7WUFHdEIsK0xBQU8sZUFBZSw2QkFBZixlQUFlLHlHQUFVO1lBR2hDLDhKQUFPLElBQUksNkJBQUosSUFBSSxtRkFBYztZQUd6Qiw4SkFBTyxJQUFJLDZCQUFKLElBQUksbUZBQW1CO1lBRzlCLG9LQUFPLE1BQU0sNkJBQU4sTUFBTSx1RkFBcUI7WUFHbEMsbUxBQU8sV0FBVyw2QkFBWCxXQUFXLGlHQUEyQjtZQUc3QyxzTEFBTyxZQUFZLDZCQUFaLFlBQVksbUdBQVU7WUFHN0IsZ0xBQU8sVUFBVSw2QkFBVixVQUFVLCtGQUFVO1lBRzNCLDZLQUFPLFNBQVMsNkJBQVQsU0FBUyw2RkFBVTtZQUcxQiw2S0FBTyxTQUFTLDZCQUFULFNBQVMsNkZBQVU7WUFHMUIsbUxBQU8sV0FBVyw2QkFBWCxXQUFXLGlHQUFVO1lBcEM5Qiw2S0FrRUM7OztZQWxFWSx1REFBZ0I7O1FBR3BCLEVBQUUscURBQVU7UUFHWixLQUFLLDBHQUFVO1FBR2YsZUFBZSx1SEFBVTtRQUd6QixJQUFJLDZHQUFXLEVBQUUsR0FBQztRQUdsQixJQUFJLDJHQUFtQjtRQUd2QixNQUFNLDZHQUFxQjtRQUczQixXQUFXLG9IQUEyQjtRQUd0QyxZQUFZLDBIQUFVO1FBR3RCLFVBQVUseUhBQVU7UUFHcEIsU0FBUyxzSEFBVTtRQUduQixTQUFTLHFIQUFVO1FBR25CLFdBQVcsdUhBQVU7UUFFckIsU0FBUztZQUNkLE9BQU87Z0JBQ0wsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNYLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO2dCQUNyQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRTtnQkFDbkMsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO2dCQUMvQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7Z0JBQzNCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztnQkFDekIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUN6QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7YUFDOUIsQ0FBQztRQUNKLENBQUM7UUFFTSxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFhO1lBQ3hDLE9BQU8sZ0JBQWdCLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsa0JBQTBCO1lBQ2xFLE9BQU8sZ0JBQWdCLENBQUMsV0FBVyxDQUFDLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVO1lBQzVCLE9BQU8sZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM1RSxDQUFDOzs7Ozs7OztTQWpFVSxnQkFBZ0IifQ==
|
|
@@ -3,7 +3,7 @@ import type { ICreateIdpSdkAccountOptions, IIdpSdkAccount } from './interfaces.j
|
|
|
3
3
|
export declare class SmartdataAccountStore {
|
|
4
4
|
private optionsArg;
|
|
5
5
|
constructor(optionsArg: {
|
|
6
|
-
smartdataDb: plugins.
|
|
6
|
+
smartdataDb: plugins.nosqldb.SmartdataDb;
|
|
7
7
|
});
|
|
8
8
|
normalizeEmail(emailArg: string): string;
|
|
9
9
|
createAccount(optionsArg: ICreateIdpSdkAccountOptions): Promise<IIdpSdkAccount>;
|
|
@@ -81,4 +81,4 @@ export class SmartdataAccountStore {
|
|
|
81
81
|
return [...new Set(authSourcesArg.filter((sourceArg) => sourceArg === 'local' || sourceArg === 'idp.global'))];
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5hY2NvdW50LXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfc2VydmVyL2NsYXNzZXMuYWNjb3VudC1zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHOUQsTUFBTSxPQUFPLHFCQUFxQjtJQUNaO0lBQXBCLFlBQW9CLFVBQXdEO1FBQXhELGVBQVUsR0FBVixVQUFVLENBQThDO1FBQzFFLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRU0sY0FBYyxDQUFDLFFBQWdCO1FBQ3BDLE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYSxDQUFDLFVBQXVDO1FBQ2hFLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkQsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQy9FLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMs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
|
|
@@ -5,6 +5,6 @@ export { idpInterfaces };
|
|
|
5
5
|
import * as typedrequest from '@api.global/typedrequest';
|
|
6
6
|
import * as typedsocket from '@api.global/typedsocket';
|
|
7
7
|
export { typedrequest, typedsocket };
|
|
8
|
-
import * as
|
|
8
|
+
import * as nosqldb from '@lossless.org/client/nosqldb';
|
|
9
9
|
import * as smartpromise from '@push.rocks/smartpromise';
|
|
10
|
-
export {
|
|
10
|
+
export { nosqldb, smartpromise };
|
|
@@ -5,7 +5,7 @@ export { idpInterfaces };
|
|
|
5
5
|
import * as typedrequest from '@api.global/typedrequest';
|
|
6
6
|
import * as typedsocket from '@api.global/typedsocket';
|
|
7
7
|
export { typedrequest, typedsocket };
|
|
8
|
-
import * as
|
|
8
|
+
import * as nosqldb from '@lossless.org/client/nosqldb';
|
|
9
9
|
import * as smartpromise from '@push.rocks/smartpromise';
|
|
10
|
-
export {
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
10
|
+
export { nosqldb, smartpromise };
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX3NlcnZlci9wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRWpDLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUVsQixPQUFPLEtBQUssYUFBYSxNQUFNLHdCQUF3QixDQUFDO0FBRXhELE9BQU8sRUFBRSxhQUFhLEVBQUUsQ0FBQztBQUV6QixPQUFPLEtBQUssWUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxXQUFXLE1BQU0seUJBQXlCLENBQUM7QUFFdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQztBQUVyQyxPQUFPLEtBQUssT0FBTyxNQUFNLDhCQUE4QixDQUFDO0FBQ3hELE9BQU8sS0FBSyxZQUFZLE1BQU0sMEJBQTBCLENBQUM7QUFFekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsQ0FBQyJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@idp.global/sdk",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "18.0.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Reusable browser and server SDK for idp.global authentication.",
|
|
6
6
|
"type": "module",
|
|
@@ -18,7 +18,6 @@
|
|
|
18
18
|
"@api.global/typedrequest-interfaces": "^7.1.0",
|
|
19
19
|
"@api.global/typedsocket": "^8.1.0",
|
|
20
20
|
"@idp.global/interfaces": "^29.1.0",
|
|
21
|
-
"@push.rocks/smartdata": "^11.7.0",
|
|
22
21
|
"@push.rocks/smartjson": "^6.0.1",
|
|
23
22
|
"@push.rocks/smartpromise": "^4.2.4",
|
|
24
23
|
"@push.rocks/smartrx": "^3.0.12",
|
|
@@ -28,14 +27,18 @@
|
|
|
28
27
|
"@push.rocks/webjwt": "^1.0.10",
|
|
29
28
|
"@push.rocks/webstore": "^2.1.0"
|
|
30
29
|
},
|
|
30
|
+
"peerDependencies": {
|
|
31
|
+
"@lossless.org/client": ">=1.0.0 <2.0.0"
|
|
32
|
+
},
|
|
31
33
|
"devDependencies": {
|
|
32
34
|
"@api.global/typedserver": "^11.4.0",
|
|
33
|
-
"@git.zone/tsbuild": "^4.
|
|
35
|
+
"@git.zone/tsbuild": "^4.5.0",
|
|
34
36
|
"@git.zone/tsdoc": "^2.2.0",
|
|
35
37
|
"@git.zone/tsrun": "^2.0.6",
|
|
36
|
-
"@git.zone/tstest": "^6.
|
|
37
|
-
"@
|
|
38
|
-
"@lossless.org/nosqldb": "10.2.0"
|
|
38
|
+
"@git.zone/tstest": "^6.1.1",
|
|
39
|
+
"@lossless.org/client": "^1.0.0",
|
|
40
|
+
"@lossless.org/nosqldb": "10.2.0",
|
|
41
|
+
"@types/node": "26.5.1"
|
|
39
42
|
},
|
|
40
43
|
"files": [
|
|
41
44
|
"ts/**/*",
|
|
@@ -60,7 +63,7 @@
|
|
|
60
63
|
"sdk",
|
|
61
64
|
"authentication",
|
|
62
65
|
"oidc",
|
|
63
|
-
"
|
|
66
|
+
"nosqldb"
|
|
64
67
|
],
|
|
65
68
|
"browserslist": [
|
|
66
69
|
"last 1 Chrome versions"
|
package/readme.md
CHANGED
|
@@ -13,7 +13,7 @@ For reporting bugs, issues, or security vulnerabilities, please visit [community
|
|
|
13
13
|
| Runtime | Import | What it does |
|
|
14
14
|
| --- | --- | --- |
|
|
15
15
|
| Browser | `@idp.global/sdk/browser` | SSO client, JWT and refresh-token storage, login redirects, logout, transfer-token exchange, and typed request shortcuts for user, organization, billing, OIDC, and admin flows. |
|
|
16
|
-
| Server | `@idp.global/sdk/server` |
|
|
16
|
+
| Server | `@idp.global/sdk/server` | NoSQL-backed account store, scrypt password hashing, local/idp.global account authentication, a server-side typed-socket client for idp.global password login, and confidential OIDC introspection. |
|
|
17
17
|
|
|
18
18
|
## Install
|
|
19
19
|
|
|
@@ -21,6 +21,13 @@ For reporting bugs, issues, or security vulnerabilities, please visit [community
|
|
|
21
21
|
pnpm add @idp.global/sdk
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
+
The server subpath additionally requires the peer dependency `@lossless.org/client`,
|
|
25
|
+
which provides the `SmartdataDb` the account store persists through:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
pnpm add @lossless.org/client
|
|
29
|
+
```
|
|
30
|
+
|
|
24
31
|
This is an ESM TypeScript package. Published builds expose declaration files and runtime JavaScript through package exports.
|
|
25
32
|
|
|
26
33
|
Version 17 requires an IdP listener using TypedSocket 8 and TypedRequest 8
|
|
@@ -186,20 +193,24 @@ import {
|
|
|
186
193
|
|
|
187
194
|
The server SDK is deliberately explicit: it never auto-creates accounts during authentication. Your application decides when an account exists, which auth sources it may use, and whether it is an `admin` or `user`.
|
|
188
195
|
|
|
189
|
-
###
|
|
196
|
+
### Account Store
|
|
190
197
|
|
|
191
|
-
`SmartdataAccountStore` persists accounts through `@
|
|
198
|
+
`SmartdataAccountStore` persists accounts through `@lossless.org/client/nosqldb`
|
|
199
|
+
and the exported `IdpSdkAccountDoc` collection.
|
|
192
200
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
201
|
+
`@lossless.org/client` is a required peer dependency within major 1. The
|
|
202
|
+
`SmartdataDb` you pass must come from that package: the account document is
|
|
203
|
+
decorated by the very same module, so a `SmartdataDb` from any other package is
|
|
204
|
+
rejected at compile time and cannot resolve the model at runtime. Existing SDK
|
|
205
|
+
account documents, their `id_1` identity index and their `scrypt:v1` password
|
|
206
|
+
hashes retain their exact stored shape; this dependency migration does not
|
|
207
|
+
transform stored accounts.
|
|
197
208
|
|
|
198
209
|
```ts
|
|
199
|
-
import * as
|
|
210
|
+
import * as nosqldb from '@lossless.org/client/nosqldb';
|
|
200
211
|
import { SmartdataAccountStore } from '@idp.global/sdk/server';
|
|
201
212
|
|
|
202
|
-
const smartdataDb = new
|
|
213
|
+
const smartdataDb = new nosqldb.SmartdataDb({
|
|
203
214
|
mongoDbUrl: process.env.MONGODB_URL!,
|
|
204
215
|
mongoDbName: 'my-app',
|
|
205
216
|
});
|
|
@@ -377,7 +388,7 @@ server-held token is no longer accepted. Errors omit token and provider content.
|
|
|
377
388
|
|
|
378
389
|
| API | Description |
|
|
379
390
|
| --- | --- |
|
|
380
|
-
| `SmartdataAccountStore` |
|
|
391
|
+
| `SmartdataAccountStore` | NoSQL-backed account persistence and local password verification. |
|
|
381
392
|
| `AccountAuthService` | Existing-account authentication orchestration for `local`, `idp.global`, and `auto`. |
|
|
382
393
|
| `IdpGlobalServerClient` | Typed-socket client for idp.global password login, JWT refresh, `whoIs` lookup, backend JWT validation fetches, and JWT key/blocklist pushes. |
|
|
383
394
|
| `OidcIntrospectionClient` | Confidential server client for an exact live organization authority observation. |
|
|
@@ -387,8 +398,8 @@ server-held token is no longer accepted. Errors omit token and provider content.
|
|
|
387
398
|
| `IdpMfaRequiredError` | Password-login error carrying the MFA challenge token and available factor methods. |
|
|
388
399
|
| `defaultIdpGlobalBaseUrl` | Default hosted server origin: `https://app.idp.global`. |
|
|
389
400
|
| `PasswordHasher` | Static `hashPassword()` and `verifyPassword()` helpers using `scrypt:v1`. |
|
|
390
|
-
| `IdpSdkAccountDoc` |
|
|
391
|
-
| `setAccountDocSmartdataDb()` | Configure the active
|
|
401
|
+
| `IdpSdkAccountDoc` | `@lossless.org/client/nosqldb` document class backing persisted SDK accounts. |
|
|
402
|
+
| `setAccountDocSmartdataDb()` | Configure the active `SmartdataDb` for `IdpSdkAccountDoc`. Usually handled by `SmartdataAccountStore`. |
|
|
392
403
|
|
|
393
404
|
### Types
|
|
394
405
|
|
|
@@ -419,7 +430,7 @@ import { IdpClient } from '@idp.global/sdk/browser';
|
|
|
419
430
|
import { AccountAuthService } from '@idp.global/sdk/server';
|
|
420
431
|
```
|
|
421
432
|
|
|
422
|
-
The SDK uses typed sockets and typed requests from `@api.global/*`, shared idp.global request contracts from `@idp.global/interfaces`, and focused Push Rocks utilities for URL handling, JSON/base64 encoding, observables, JWT decoding, browser storage,
|
|
433
|
+
The SDK uses typed sockets and typed requests from `@api.global/*`, shared idp.global request contracts from `@idp.global/interfaces`, NoSQL persistence from `@lossless.org/client/nosqldb`, and focused Push Rocks utilities for URL handling, JSON/base64 encoding, observables, JWT decoding, browser storage, and promise coordination.
|
|
423
434
|
|
|
424
435
|
## Testing
|
|
425
436
|
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
2
|
import type { IIdpSdkAccount, TIdpAccountAuthSource, TIdpAccountRole, TIdpAccountStatus } from './interfaces.js';
|
|
3
3
|
|
|
4
|
-
let activeSmartdataDb: plugins.
|
|
4
|
+
let activeSmartdataDb: plugins.nosqldb.SmartdataDb | null = null;
|
|
5
5
|
|
|
6
|
-
export const setAccountDocSmartdataDb = (smartdataDbArg: plugins.
|
|
6
|
+
export const setAccountDocSmartdataDb = (smartdataDbArg: plugins.nosqldb.SmartdataDb) => {
|
|
7
7
|
activeSmartdataDb = smartdataDbArg;
|
|
8
8
|
};
|
|
9
9
|
|
|
@@ -14,43 +14,43 @@ const getDb = () => {
|
|
|
14
14
|
return activeSmartdataDb;
|
|
15
15
|
};
|
|
16
16
|
|
|
17
|
-
@plugins.
|
|
18
|
-
export class IdpSdkAccountDoc extends plugins.
|
|
19
|
-
@plugins.
|
|
20
|
-
@plugins.
|
|
17
|
+
@plugins.nosqldb.Collection(() => getDb())
|
|
18
|
+
export class IdpSdkAccountDoc extends plugins.nosqldb.SmartDataDbDoc<IdpSdkAccountDoc, IdpSdkAccountDoc> {
|
|
19
|
+
@plugins.nosqldb.unI()
|
|
20
|
+
@plugins.nosqldb.svDb()
|
|
21
21
|
public id!: string;
|
|
22
22
|
|
|
23
|
-
@plugins.
|
|
23
|
+
@plugins.nosqldb.svDb()
|
|
24
24
|
public email!: string;
|
|
25
25
|
|
|
26
|
-
@plugins.
|
|
26
|
+
@plugins.nosqldb.svDb()
|
|
27
27
|
public emailNormalized!: string;
|
|
28
28
|
|
|
29
|
-
@plugins.
|
|
29
|
+
@plugins.nosqldb.svDb()
|
|
30
30
|
public name: string = '';
|
|
31
31
|
|
|
32
|
-
@plugins.
|
|
32
|
+
@plugins.nosqldb.svDb()
|
|
33
33
|
public role!: TIdpAccountRole;
|
|
34
34
|
|
|
35
|
-
@plugins.
|
|
35
|
+
@plugins.nosqldb.svDb()
|
|
36
36
|
public status!: TIdpAccountStatus;
|
|
37
37
|
|
|
38
|
-
@plugins.
|
|
38
|
+
@plugins.nosqldb.svDb()
|
|
39
39
|
public authSources!: TIdpAccountAuthSource[];
|
|
40
40
|
|
|
41
|
-
@plugins.
|
|
41
|
+
@plugins.nosqldb.svDb()
|
|
42
42
|
public passwordHash?: string;
|
|
43
43
|
|
|
44
|
-
@plugins.
|
|
44
|
+
@plugins.nosqldb.svDb()
|
|
45
45
|
public idpSubject?: string;
|
|
46
46
|
|
|
47
|
-
@plugins.
|
|
47
|
+
@plugins.nosqldb.svDb()
|
|
48
48
|
public createdAt!: number;
|
|
49
49
|
|
|
50
|
-
@plugins.
|
|
50
|
+
@plugins.nosqldb.svDb()
|
|
51
51
|
public updatedAt!: number;
|
|
52
52
|
|
|
53
|
-
@plugins.
|
|
53
|
+
@plugins.nosqldb.svDb()
|
|
54
54
|
public lastLoginAt?: number;
|
|
55
55
|
|
|
56
56
|
public toAccount(): IIdpSdkAccount {
|
|
@@ -4,7 +4,7 @@ import { PasswordHasher } from './classes.password-hasher.js';
|
|
|
4
4
|
import type { ICreateIdpSdkAccountOptions, IIdpSdkAccount, TIdpAccountAuthSource } from './interfaces.js';
|
|
5
5
|
|
|
6
6
|
export class SmartdataAccountStore {
|
|
7
|
-
constructor(private optionsArg: { smartdataDb: plugins.
|
|
7
|
+
constructor(private optionsArg: { smartdataDb: plugins.nosqldb.SmartdataDb }) {
|
|
8
8
|
setAccountDocSmartdataDb(optionsArg.smartdataDb);
|
|
9
9
|
}
|
|
10
10
|
|
package/ts_server/plugins.ts
CHANGED
|
@@ -11,7 +11,7 @@ import * as typedsocket from '@api.global/typedsocket';
|
|
|
11
11
|
|
|
12
12
|
export { typedrequest, typedsocket };
|
|
13
13
|
|
|
14
|
-
import * as
|
|
14
|
+
import * as nosqldb from '@lossless.org/client/nosqldb';
|
|
15
15
|
import * as smartpromise from '@push.rocks/smartpromise';
|
|
16
16
|
|
|
17
|
-
export {
|
|
17
|
+
export { nosqldb, smartpromise };
|