@chaosinsight/postoffice-portalclient 2.0.1 → 2.0.2-beta.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.
@@ -0,0 +1,8 @@
1
+ import { Extension, IServiceCall, IExtension, IExtensionConstructor } from "@chaosinsight/portalclient";
2
+ import { ISession, ITokens } from "../index";
3
+ export default abstract class AuthenticationExtension extends Extension {
4
+ protected setTokensFromSessionCall(call: IServiceCall<ISession>, authenticationType: string): IServiceCall<ISession>;
5
+ protected setTokensFromCall(call: IServiceCall<ITokens>, authenticationType: string): IServiceCall<ITokens>;
6
+ protected setTokens(tokens: ITokens, authenticationType: string): void;
7
+ static add<T extends IExtension>(extensionConstructor: IExtensionConstructor<T>, extensionName: string): void;
8
+ }
@@ -0,0 +1,19 @@
1
+ import { Extension } from "@chaosinsight/portalclient";
2
+ import { RefreshTokenCreatedEvent } from "../index";
3
+ export default class AuthenticationExtension extends Extension {
4
+ setTokensFromSessionCall(call, authenticationType) {
5
+ return this.onSuccess(call, r => this.setTokens(r.Tokens, authenticationType));
6
+ }
7
+ setTokensFromCall(call, authenticationType) {
8
+ return this.onSuccess(call, r => this.setTokens(r, authenticationType));
9
+ }
10
+ setTokens(tokens, authenticationType) {
11
+ this.setAccessToken(tokens.Access, authenticationType);
12
+ if (tokens.Refresh)
13
+ RefreshTokenCreatedEvent.dispatch(tokens.Refresh, this.client);
14
+ }
15
+ static add(extensionConstructor, extensionName) {
16
+ Extension.add(extensionConstructor, extensionName);
17
+ }
18
+ }
19
+ //# sourceMappingURL=authenticationExtension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authenticationExtension.js","sourceRoot":"","sources":["../../src/extensions/authenticationExtension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAkD,MAAM,4BAA4B,CAAA;AACrG,OAAO,EAAoB,wBAAwB,EAAC,MAAM,UAAU,CAAA;AAEpE,MAAM,CAAC,OAAO,OAAgB,uBAAwB,SAAQ,SAAS;IAC5D,wBAAwB,CAAC,IAA4B,EAAE,kBAA0B;QAC1F,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAA;IAC/E,CAAC;IAES,iBAAiB,CAAC,IAA2B,EAAE,kBAA0B;QAClF,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAA;IACxE,CAAC;IAES,SAAS,CAAC,MAAe,EAAE,kBAA0B;QAC9D,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;QAEtD,IAAI,MAAM,CAAC,OAAO;YACjB,wBAAwB,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IAChE,CAAC;IAEM,MAAM,CAAC,GAAG,CAAuB,oBAA8C,EAAE,aAAqB;QAC5G,SAAS,CAAC,GAAG,CAAC,oBAAoB,EAAE,aAAa,CAAC,CAAA;IACnD,CAAC;CACD"}
@@ -0,0 +1,34 @@
1
+ import { IServiceCall } from "@chaosinsight/portalclient";
2
+ import AuthenticationExtension from "./authenticationExtension";
3
+ import { ITokens } from "../index";
4
+ export default class Passkey extends AuthenticationExtension {
5
+ readonly refreshAuthenticationType = "Passkey";
6
+ protected extensionName: string;
7
+ Assertion(assertion: IPasskeyAssertion): IServiceCall<ITokens>;
8
+ AssertionOptions(): IServiceCall<string>;
9
+ Credentials(deviceName: string, credential: IPasskeyCredential): IServiceCall<void>;
10
+ CredentialsOptions(password: string): IServiceCall<string>;
11
+ }
12
+ export interface IPasskeyCredential {
13
+ Id: string;
14
+ RawId: string;
15
+ Response: {
16
+ AttestationObject: string;
17
+ ClientDataJSON: string;
18
+ };
19
+ }
20
+ export interface IPasskeyAssertion {
21
+ Id: string;
22
+ RawId: string;
23
+ Response: {
24
+ AuthenticatorData: string;
25
+ Signature: string;
26
+ ClientDataJson: string;
27
+ UserHandle: string;
28
+ };
29
+ }
30
+ declare module "@chaosinsight/portalclient" {
31
+ interface ExtensionHandler {
32
+ passkey: Passkey;
33
+ }
34
+ }
@@ -0,0 +1,20 @@
1
+ import { HttpMethod } from "@chaosinsight/portalclient";
2
+ import AuthenticationExtension from "./authenticationExtension";
3
+ export default class Passkey extends AuthenticationExtension {
4
+ refreshAuthenticationType = "Passkey";
5
+ extensionName = "Passkey";
6
+ Assertion(assertion) {
7
+ return this.setTokensFromCall(this.call("Assertion", assertion, HttpMethod.Post), this.refreshAuthenticationType);
8
+ }
9
+ AssertionOptions() {
10
+ return this.call("AssertionOptions", null, HttpMethod.Post);
11
+ }
12
+ Credentials(deviceName, credential) {
13
+ return this.call("Credentials", { DeviceName: deviceName, Credential: credential }, HttpMethod.Post);
14
+ }
15
+ CredentialsOptions(password) {
16
+ return this.call("CredentialsOptions", { password }, HttpMethod.Post);
17
+ }
18
+ }
19
+ AuthenticationExtension.add(Passkey, "passkey");
20
+ //# sourceMappingURL=passkey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passkey.js","sourceRoot":"","sources":["../../src/extensions/passkey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAe,MAAM,4BAA4B,CAAA;AACnE,OAAO,uBAAuB,MAAM,2BAA2B,CAAA;AAG/D,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,uBAAuB;IAC3C,yBAAyB,GAAG,SAAS,CAAA;IAE3C,aAAa,GAAW,SAAS,CAAA;IAEpC,SAAS,CAAC,SAA4B;QAC5C,OAAO,IAAI,CAAC,iBAAiB,CAC5B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,EAClD,IAAI,CAAC,yBAAyB,CAC9B,CAAA;IACF,CAAC;IAEM,gBAAgB;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,CAAA;IAC5D,CAAC;IAEM,WAAW,CAAC,UAAkB,EAAE,UAA8B;QACpE,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAA;IACnG,CAAC;IAEM,kBAAkB,CAAC,QAAgB;QACzC,OAAO,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAC,QAAQ,EAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAA;IACpE,CAAC;CACD;AAsBD,uBAAuB,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA"}
@@ -1,11 +1,10 @@
1
- import { Extension, IServiceCall } from "@chaosinsight/portalclient";
1
+ import { IServiceCall } from "@chaosinsight/portalclient";
2
2
  import { ITokens } from "../index";
3
- export default class Sessions extends Extension {
3
+ import AuthenticationExtension from "./authenticationExtension";
4
+ export default class Sessions extends AuthenticationExtension {
4
5
  readonly passwordAuthenticationType = "Password";
5
6
  protected extensionName: string;
6
7
  passwordLogin(username: string, password: string): IServiceCall<ISession>;
7
- private setTokensFromCall;
8
- private setTokens;
9
8
  }
10
9
  export interface ISession {
11
10
  Id: string;
@@ -1,19 +1,11 @@
1
- import { Extension, HttpMethod, Encoding } from "@chaosinsight/portalclient";
2
- import { RefreshTokenCreatedEvent } from "../index";
3
- export default class Sessions extends Extension {
1
+ import { HttpMethod, Encoding } from "@chaosinsight/portalclient";
2
+ import AuthenticationExtension from "./authenticationExtension";
3
+ export default class Sessions extends AuthenticationExtension {
4
4
  passwordAuthenticationType = "Password";
5
5
  extensionName = "Sessions";
6
6
  passwordLogin(username, password) {
7
- return this.setTokensFromCall(this.call("PasswordLogin", { username, password }, HttpMethod.Post, false, Encoding.FormData), this.passwordAuthenticationType);
8
- }
9
- setTokensFromCall(call, authenticationType) {
10
- return this.onSuccess(call, r => this.setTokens(r, authenticationType));
11
- }
12
- setTokens(session, authenticationType) {
13
- this.setAccessToken(session.Tokens.Access, authenticationType);
14
- if (session.Tokens.Refresh)
15
- RefreshTokenCreatedEvent.dispatch(session.Tokens.Refresh, this.client);
7
+ return this.setTokensFromSessionCall(this.call("PasswordLogin", { username, password }, HttpMethod.Post, false, Encoding.FormData), this.passwordAuthenticationType);
16
8
  }
17
9
  }
18
- Extension.add(Sessions, "sessions");
10
+ AuthenticationExtension.add(Sessions, "sessions");
19
11
  //# sourceMappingURL=sessions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/extensions/sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAe,MAAM,4BAA4B,CAAA;AACxF,OAAO,EAAU,wBAAwB,EAAC,MAAM,UAAU,CAAA;AAE1D,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,SAAS;IAC9B,0BAA0B,GAAG,UAAU,CAAA;IAE7C,aAAa,GAAW,UAAU,CAAA;IAErC,aAAa,CAAC,QAAgB,EAAE,QAAgB;QACtD,OAAO,IAAI,CAAC,iBAAiB,CAC5B,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAC,QAAQ,EAAE,QAAQ,EAAC,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAC3F,IAAI,CAAC,0BAA0B,CAC/B,CAAA;IACF,CAAC;IAEO,iBAAiB,CAAC,IAA4B,EAAE,kBAA0B;QACjF,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAA;IACxE,CAAC;IAEO,SAAS,CAAC,OAAiB,EAAE,kBAA0B;QAC9D,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;QAC9D,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO;YACzB,wBAAwB,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACxE,CAAC;CACD;AAUD,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA"}
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/extensions/sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,QAAQ,EAAe,MAAM,4BAA4B,CAAA;AAE7E,OAAO,uBAAuB,MAAM,2BAA2B,CAAA;AAE/D,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,uBAAuB;IAC5C,0BAA0B,GAAG,UAAU,CAAA;IAE7C,aAAa,GAAW,UAAU,CAAA;IAErC,aAAa,CAAC,QAAgB,EAAE,QAAgB;QACtD,OAAO,IAAI,CAAC,wBAAwB,CACnC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAC,QAAQ,EAAE,QAAQ,EAAC,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAC3F,IAAI,CAAC,0BAA0B,CAC/B,CAAA;IACF,CAAC;CACD;AAUD,uBAAuB,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA"}
@@ -1,5 +1,6 @@
1
- import { Extension, IServiceCall } from "@chaosinsight/portalclient";
2
- export default class Tokens extends Extension {
1
+ import { IServiceCall } from "@chaosinsight/portalclient";
2
+ import AuthenticationExtension from "./authenticationExtension";
3
+ export default class Tokens extends AuthenticationExtension {
3
4
  readonly refreshAuthenticationType = "RefreshToken";
4
5
  protected extensionName: string;
5
6
  post(refreshToken: string): IServiceCall<ITokens>;
@@ -1,17 +1,14 @@
1
- import { Extension, HttpMethod } from "@chaosinsight/portalclient";
2
- import { RefreshTokenCreatedEvent } from "../index";
3
- export default class Tokens extends Extension {
1
+ import { HttpMethod } from "@chaosinsight/portalclient";
2
+ import AuthenticationExtension from "./authenticationExtension";
3
+ export default class Tokens extends AuthenticationExtension {
4
4
  refreshAuthenticationType = "RefreshToken";
5
5
  extensionName = "Tokens";
6
6
  post(refreshToken) {
7
- return this.onSuccess(this.call(null, null, HttpMethod.Post, refreshToken), r => {
8
- this.setAccessToken(r.Access, this.refreshAuthenticationType);
9
- RefreshTokenCreatedEvent.dispatch(r.Refresh, this.client);
10
- });
7
+ return this.setTokensFromCall(this.call(null, null, HttpMethod.Post, refreshToken), this.refreshAuthenticationType);
11
8
  }
12
9
  refreshDelete(refreshToken) {
13
10
  return this.call("Refresh", null, HttpMethod.Delete, refreshToken);
14
11
  }
15
12
  }
16
- Extension.add(Tokens, "tokens");
13
+ AuthenticationExtension.add(Tokens, "tokens");
17
14
  //# sourceMappingURL=tokens.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/extensions/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,UAAU,EAAe,MAAM,4BAA4B,CAAA;AAC9E,OAAO,EAAC,wBAAwB,EAAC,MAAM,UAAU,CAAA;AAEjD,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,SAAS;IAC5B,yBAAyB,GAAG,cAAc,CAAA;IAChD,aAAa,GAAW,QAAQ,CAAA;IAEnC,IAAI,CAAC,YAAoB;QAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,EACzE,CAAC,CAAC,EAAE;YACH,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAA;YAC7D,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAC3D,CAAC,CAAC,CAAA;IACH,CAAC;IAEM,aAAa,CAAC,YAAoB;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACnE,CAAC;CACD;AAOD,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA"}
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/extensions/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAe,MAAM,4BAA4B,CAAA;AACnE,OAAO,uBAAuB,MAAM,2BAA2B,CAAA;AAE/D,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,uBAAuB;IAC1C,yBAAyB,GAAG,cAAc,CAAA;IAEhD,aAAa,GAAW,QAAQ,CAAA;IAEnC,IAAI,CAAC,YAAoB;QAC/B,OAAO,IAAI,CAAC,iBAAiB,CAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,EACpD,IAAI,CAAC,yBAAyB,CAC9B,CAAA;IACF,CAAC;IAEM,aAAa,CAAC,YAAoB;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACnE,CAAC;CACD;AAOD,uBAAuB,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA"}
@@ -1,6 +1,7 @@
1
- import { Extension, IServiceCall } from "@chaosinsight/portalclient";
1
+ import { IServiceCall } from "@chaosinsight/portalclient";
2
2
  import { ISession } from "../index";
3
- export default class Users extends Extension {
3
+ import AuthenticationExtension from "./authenticationExtension";
4
+ export default class Users extends AuthenticationExtension {
4
5
  readonly authenticationType = "UserCreation";
5
6
  protected extensionName: string;
6
7
  get(role: UserRole, lastSeenGreaterThan: Date): IServiceCall<IPublicUser[]>;
@@ -1,16 +1,13 @@
1
- import { Extension, HttpMethod } from "@chaosinsight/portalclient";
2
- import { RefreshTokenCreatedEvent } from "../index";
3
- export default class Users extends Extension {
1
+ import { HttpMethod } from "@chaosinsight/portalclient";
2
+ import AuthenticationExtension from "./authenticationExtension";
3
+ export default class Users extends AuthenticationExtension {
4
4
  authenticationType = "UserCreation";
5
5
  extensionName = "Users";
6
6
  get(role, lastSeenGreaterThan) {
7
7
  return this.call(null, { role, lastSeenGreaterThan }, HttpMethod.Get);
8
8
  }
9
9
  post(name, email, password, language, consentToTermsOfUse, consentToMarketing, consentToNotifications, token) {
10
- return this.onSuccess(this.call(null, { name, email, password, language, consentToTermsOfUse, consentToMarketing, consentToNotifications }, HttpMethod.Post, token), session => {
11
- this.setAccessToken(session.Tokens.Access, this.authenticationType);
12
- RefreshTokenCreatedEvent.dispatch(session.Tokens.Refresh, this.client);
13
- });
10
+ return this.setTokensFromSessionCall(this.call(null, { name, email, password, language, consentToTermsOfUse, consentToMarketing, consentToNotifications }, HttpMethod.Post, token), this.authenticationType);
14
11
  }
15
12
  put(name, language, consentToTermsOfUse, consentToMarketing, consentToNotifications, uiVersion) {
16
13
  return this.call(null, { name, language, consentToTermsOfUse, consentToMarketing, consentToNotifications, uiVersion }, HttpMethod.Put);
@@ -36,5 +33,5 @@ export var UserRole;
36
33
  UserRole[UserRole["administrator"] = 0] = "administrator";
37
34
  UserRole[UserRole["member"] = 1] = "member";
38
35
  })(UserRole || (UserRole = {}));
39
- Extension.add(Users, "users");
36
+ AuthenticationExtension.add(Users, "users");
40
37
  //# sourceMappingURL=users.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/extensions/users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,UAAU,EAAe,MAAM,4BAA4B,CAAA;AAC9E,OAAO,EAAW,wBAAwB,EAAC,MAAM,UAAU,CAAA;AAE3D,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,SAAS;IAC3B,kBAAkB,GAAG,cAAc,CAAA;IACzC,aAAa,GAAW,OAAO,CAAA;IAElC,GAAG,CAAC,IAAc,EAAE,mBAAyB;QACnD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAC,IAAI,EAAE,mBAAmB,EAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAA;IACpE,CAAC;IAEM,IAAI,CAAC,IAAY,EAAE,KAAa,EAAE,QAAgB,EAAE,QAAgB,EAAE,mBAA4B,EAAE,kBAA2B,EAAE,sBAA+B,EAAE,KAAa;QACrL,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,sBAAsB,EAAC,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,EAChK,OAAO,CAAC,EAAE;YACT,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;YACnE,wBAAwB,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QACvE,CAAC,CACD,CAAA;IACF,CAAC;IAEM,GAAG,CAAC,IAAa,EAAE,QAAiB,EAAE,mBAA6B,EAAE,kBAA4B,EAAE,sBAAgC,EAAE,SAAkB;QAC7J,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,SAAS,EAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAA;IACrI,CAAC;IAEM,MAAM;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;IAChD,CAAC;IAEM,EAAE;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,CAAA;IAC7C,CAAC;IAEM,OAAO,CAAC,KAAa,EAAE,eAAuB;QACpD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAC,KAAK,EAAE,eAAe,EAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAA;IACnE,CAAC;IAEM,cAAc,CAAC,QAAuB,EAAE,WAA0B,EAAE,eAA8B;QACxG,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAC,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAA;IAC3F,CAAC;IAEM,cAAc;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC7D,CAAC;CACD;AAED,MAAM,CAAN,IAAY,QAGX;AAHD,WAAY,QAAQ;IACnB,yDAAiB,CAAA;IACjB,2CAAU,CAAA;AACX,CAAC,EAHW,QAAQ,KAAR,QAAQ,QAGnB;AAmCD,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA"}
1
+ {"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/extensions/users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAe,MAAM,4BAA4B,CAAA;AAEnE,OAAO,uBAAuB,MAAM,2BAA2B,CAAA;AAE/D,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,uBAAuB;IACzC,kBAAkB,GAAG,cAAc,CAAA;IAEzC,aAAa,GAAW,OAAO,CAAA;IAElC,GAAG,CAAC,IAAc,EAAE,mBAAyB;QACnD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAC,IAAI,EAAE,mBAAmB,EAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAA;IACpE,CAAC;IAEM,IAAI,CAAC,IAAY,EAAE,KAAa,EAAE,QAAgB,EAAE,QAAgB,EAAE,mBAA4B,EAAE,kBAA2B,EAAE,sBAA+B,EAAE,KAAa;QACrL,OAAO,IAAI,CAAC,wBAAwB,CACnC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,sBAAsB,EAAC,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,EAC3I,IAAI,CAAC,kBAAkB,CACvB,CAAA;IACF,CAAC;IAEM,GAAG,CAAC,IAAa,EAAE,QAAiB,EAAE,mBAA6B,EAAE,kBAA4B,EAAE,sBAAgC,EAAE,SAAkB;QAC7J,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,SAAS,EAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAA;IACrI,CAAC;IAEM,MAAM;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;IAChD,CAAC;IAEM,EAAE;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,CAAA;IAC7C,CAAC;IAEM,OAAO,CAAC,KAAa,EAAE,eAAuB;QACpD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAC,KAAK,EAAE,eAAe,EAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAA;IACnE,CAAC;IAEM,cAAc,CAAC,QAAuB,EAAE,WAA0B,EAAE,eAA8B;QACxG,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAC,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAA;IAC3F,CAAC;IAEM,cAAc;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC7D,CAAC;CACD;AAED,MAAM,CAAN,IAAY,QAGX;AAHD,WAAY,QAAQ;IACnB,yDAAiB,CAAA;IACjB,2CAAU,CAAA;AACX,CAAC,EAHW,QAAQ,KAAR,QAAQ,QAGnB;AAmCD,uBAAuB,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA"}
package/dist/index.d.ts CHANGED
@@ -6,6 +6,7 @@ import "./extensions/liveDeals";
6
6
  import "./extensions/locations";
7
7
  import "./extensions/orders";
8
8
  import "./extensions/organizations";
9
+ import "./extensions/passkey";
9
10
  import "./extensions/passwords";
10
11
  import "./extensions/posts";
11
12
  import "./extensions/publicDeals";
@@ -33,6 +34,7 @@ export type { IFilter } from "./extensions/filters";
33
34
  export type { ILocation, ILocationInvitation, ILocationWithServices, ILocationDealConfiguration, ILocationStatisticsConfiguration, ILocationFeatures, IPostSuggestion, IExternalLocation } from "./extensions/locations";
34
35
  export type { IOrder, IOrderLine } from "./extensions/orders";
35
36
  export type { IDatedPostStatistics, IOrganization, IOrganizationInvitation, IOrganizationMembership, IOrganizationPermission, IPostStatistics, IDetailedPostStatistics, ISummaryStatistics, ISummeryLocationStatistics, ISummeryPostStatistics, IFeatureFlags, ILocationCreationData, IOrganizationReviewConfiguration, IOrganizationNotificationConfiguration, IOrganizationDealsConfiguration, IOrganizationStatisticsConfiguration, IExternalOrganization } from "./extensions/organizations";
37
+ export type { IPasskeyAssertion, IPasskeyCredential } from "./extensions/passkey";
36
38
  export type { IDated, IDeleted, IPost, IPostWithStatisticsAndDeal, IPostWithStatisticsAndLocation, IPostFromTemplate, IPostData, IPostingFailure, IPostingSuccess, IPostError, IServicePostError, IPostLocation, IPostTypeData, IPostTypeDataDeal, IPostTypeDataFacebookCarousel, IPostTypeDataFacebookLive, IPostTypeDataFacebookReel, ICarouselItem } from "./extensions/posts";
37
39
  export type { IPublicDeal } from "./extensions/publicDeals";
38
40
  export type { IPublicLocation } from "./extensions/publicLocations";
package/dist/index.js CHANGED
@@ -6,6 +6,7 @@ import "./extensions/liveDeals";
6
6
  import "./extensions/locations";
7
7
  import "./extensions/orders";
8
8
  import "./extensions/organizations";
9
+ import "./extensions/passkey";
9
10
  import "./extensions/passwords";
10
11
  import "./extensions/posts";
11
12
  import "./extensions/publicDeals";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,4BAA4B,CAAA;AACnC,OAAO,oBAAoB,CAAA;AAC3B,OAAO,sBAAsB,CAAA;AAC7B,OAAO,yBAAyB,CAAA;AAChC,OAAO,wBAAwB,CAAA;AAC/B,OAAO,wBAAwB,CAAA;AAC/B,OAAO,qBAAqB,CAAA;AAC5B,OAAO,4BAA4B,CAAA;AACnC,OAAO,wBAAwB,CAAA;AAC/B,OAAO,oBAAoB,CAAA;AAC3B,OAAO,0BAA0B,CAAA;AACjC,OAAO,8BAA8B,CAAA;AACrC,OAAO,iCAAiC,CAAA;AACxC,OAAO,iCAAiC,CAAA;AACxC,OAAO,uBAAuB,CAAA;AAC9B,OAAO,wBAAwB,CAAA;AAC/B,OAAO,kCAAkC,CAAA;AACzC,OAAO,qBAAqB,CAAA;AAC5B,OAAO,oBAAoB,CAAA;AAE3B,OAAO,EAAC,OAAO,IAAI,mBAAmB,EAAC,MAAM,uBAAuB,CAAA;AACpE,OAAO,EAAC,OAAO,IAAI,wBAAwB,EAAC,MAAM,mCAAmC,CAAA;AAErF,OAAO,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAC,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,EAAE,gCAAgC,EAAC,MAAM,4BAA4B,CAAA;AAC5I,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAC,MAAM,oBAAoB,CAAA;AACnH,OAAO,EAAC,oBAAoB,EAAE,2BAA2B,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,sBAAsB,EAAC,MAAM,iCAAiC,CAAA;AACvK,OAAO,EAAC,qBAAqB,EAAC,MAAM,iCAAiC,CAAA;AACrE,OAAO,EAAC,QAAQ,EAAC,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAC,UAAU,EAAE,UAAU,EAAE,WAAW,EAAC,MAAM,SAAS,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,4BAA4B,CAAA;AACnC,OAAO,oBAAoB,CAAA;AAC3B,OAAO,sBAAsB,CAAA;AAC7B,OAAO,yBAAyB,CAAA;AAChC,OAAO,wBAAwB,CAAA;AAC/B,OAAO,wBAAwB,CAAA;AAC/B,OAAO,qBAAqB,CAAA;AAC5B,OAAO,4BAA4B,CAAA;AACnC,OAAO,sBAAsB,CAAA;AAC7B,OAAO,wBAAwB,CAAA;AAC/B,OAAO,oBAAoB,CAAA;AAC3B,OAAO,0BAA0B,CAAA;AACjC,OAAO,8BAA8B,CAAA;AACrC,OAAO,iCAAiC,CAAA;AACxC,OAAO,iCAAiC,CAAA;AACxC,OAAO,uBAAuB,CAAA;AAC9B,OAAO,wBAAwB,CAAA;AAC/B,OAAO,kCAAkC,CAAA;AACzC,OAAO,qBAAqB,CAAA;AAC5B,OAAO,oBAAoB,CAAA;AAE3B,OAAO,EAAC,OAAO,IAAI,mBAAmB,EAAC,MAAM,uBAAuB,CAAA;AACpE,OAAO,EAAC,OAAO,IAAI,wBAAwB,EAAC,MAAM,mCAAmC,CAAA;AAErF,OAAO,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAC,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,EAAE,gCAAgC,EAAC,MAAM,4BAA4B,CAAA;AAC5I,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAC,MAAM,oBAAoB,CAAA;AACnH,OAAO,EAAC,oBAAoB,EAAE,2BAA2B,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,sBAAsB,EAAC,MAAM,iCAAiC,CAAA;AACvK,OAAO,EAAC,qBAAqB,EAAC,MAAM,iCAAiC,CAAA;AACrE,OAAO,EAAC,QAAQ,EAAC,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAC,UAAU,EAAE,UAAU,EAAE,WAAW,EAAC,MAAM,SAAS,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chaosinsight/postoffice-portalclient",
3
- "version": "2.0.1",
3
+ "version": "2.0.2-beta.0",
4
4
  "license": "UNLICENSED",
5
5
  "private": false,
6
6
  "main": "./src/index.ts",
@@ -21,7 +21,7 @@
21
21
  "@chaosinsight/portalclient": "^4.0.0"
22
22
  },
23
23
  "devDependencies": {
24
- "@chaosinsight/portalclient": "4.0.0x",
25
- "typescript": "5.9.2"
24
+ "@chaosinsight/portalclient": "4.0.0",
25
+ "typescript": "^5.9.2"
26
26
  }
27
27
  }
@@ -0,0 +1,23 @@
1
+ import {Extension, IServiceCall, IExtension, IExtensionConstructor} from "@chaosinsight/portalclient"
2
+ import {ISession, ITokens, RefreshTokenCreatedEvent} from "../index"
3
+
4
+ export default abstract class AuthenticationExtension extends Extension {
5
+ protected setTokensFromSessionCall(call: IServiceCall<ISession>, authenticationType: string): IServiceCall<ISession> {
6
+ return this.onSuccess(call, r => this.setTokens(r.Tokens, authenticationType))
7
+ }
8
+
9
+ protected setTokensFromCall(call: IServiceCall<ITokens>, authenticationType: string): IServiceCall<ITokens> {
10
+ return this.onSuccess(call, r => this.setTokens(r, authenticationType))
11
+ }
12
+
13
+ protected setTokens(tokens: ITokens, authenticationType: string): void {
14
+ this.setAccessToken(tokens.Access, authenticationType)
15
+
16
+ if (tokens.Refresh)
17
+ RefreshTokenCreatedEvent.dispatch(tokens.Refresh, this.client)
18
+ }
19
+
20
+ public static add<T extends IExtension>(extensionConstructor: IExtensionConstructor<T>, extensionName: string): void {
21
+ Extension.add(extensionConstructor, extensionName)
22
+ }
23
+ }
@@ -0,0 +1,57 @@
1
+ import {HttpMethod, IServiceCall} from "@chaosinsight/portalclient"
2
+ import AuthenticationExtension from "./authenticationExtension"
3
+ import {ITokens} from "../index"
4
+
5
+ export default class Passkey extends AuthenticationExtension {
6
+ public readonly refreshAuthenticationType = "Passkey"
7
+
8
+ protected extensionName: string = "Passkey"
9
+
10
+ public Assertion(assertion: IPasskeyAssertion): IServiceCall<ITokens> {
11
+ return this.setTokensFromCall(
12
+ this.call("Assertion", assertion, HttpMethod.Post),
13
+ this.refreshAuthenticationType
14
+ )
15
+ }
16
+
17
+ public AssertionOptions(): IServiceCall<string> {
18
+ return this.call("AssertionOptions", null, HttpMethod.Post)
19
+ }
20
+
21
+ public Credentials(deviceName: string, credential: IPasskeyCredential): IServiceCall<void> {
22
+ return this.call("Credentials", {DeviceName: deviceName, Credential: credential}, HttpMethod.Post)
23
+ }
24
+
25
+ public CredentialsOptions(password: string): IServiceCall<string> {
26
+ return this.call("CredentialsOptions", {password}, HttpMethod.Post)
27
+ }
28
+ }
29
+
30
+ export interface IPasskeyCredential {
31
+ Id: string,
32
+ RawId: string,
33
+ Response: {
34
+ AttestationObject: string,
35
+ ClientDataJSON: string
36
+ }
37
+ }
38
+
39
+ export interface IPasskeyAssertion {
40
+ Id: string,
41
+ RawId: string,
42
+ Response: {
43
+ AuthenticatorData: string,
44
+ Signature: string,
45
+ ClientDataJson: string,
46
+ UserHandle: string
47
+ }
48
+ }
49
+
50
+ AuthenticationExtension.add(Passkey, "passkey")
51
+
52
+ declare module "@chaosinsight/portalclient" {
53
+ // tslint:disable-next-line
54
+ interface ExtensionHandler {
55
+ passkey: Passkey
56
+ }
57
+ }
@@ -1,27 +1,18 @@
1
- import {Extension, HttpMethod, Encoding, IServiceCall} from "@chaosinsight/portalclient"
2
- import {ITokens, RefreshTokenCreatedEvent} from "../index"
1
+ import {HttpMethod, Encoding, IServiceCall} from "@chaosinsight/portalclient"
2
+ import {ITokens} from "../index"
3
+ import AuthenticationExtension from "./authenticationExtension"
3
4
 
4
- export default class Sessions extends Extension {
5
+ export default class Sessions extends AuthenticationExtension {
5
6
  public readonly passwordAuthenticationType = "Password"
6
7
 
7
8
  protected extensionName: string = "Sessions"
8
9
 
9
10
  public passwordLogin(username: string, password: string): IServiceCall<ISession> {
10
- return this.setTokensFromCall(
11
+ return this.setTokensFromSessionCall(
11
12
  this.call("PasswordLogin", {username, password}, HttpMethod.Post, false, Encoding.FormData),
12
13
  this.passwordAuthenticationType
13
14
  )
14
15
  }
15
-
16
- private setTokensFromCall(call: IServiceCall<ISession>, authenticationType: string): IServiceCall<ISession> {
17
- return this.onSuccess(call, r => this.setTokens(r, authenticationType))
18
- }
19
-
20
- private setTokens(session: ISession, authenticationType: string): void {
21
- this.setAccessToken(session.Tokens.Access, authenticationType)
22
- if (session.Tokens.Refresh)
23
- RefreshTokenCreatedEvent.dispatch(session.Tokens.Refresh, this.client)
24
- }
25
16
  }
26
17
 
27
18
  export interface ISession {
@@ -32,7 +23,7 @@ export interface ISession {
32
23
  Tokens: ITokens
33
24
  }
34
25
 
35
- Extension.add(Sessions, "sessions")
26
+ AuthenticationExtension.add(Sessions, "sessions")
36
27
 
37
28
  declare module "@chaosinsight/portalclient" {
38
29
  // tslint:disable-next-line
@@ -1,16 +1,16 @@
1
- import {Extension, HttpMethod, IServiceCall} from "@chaosinsight/portalclient"
2
- import {RefreshTokenCreatedEvent} from "../index"
1
+ import {HttpMethod, IServiceCall} from "@chaosinsight/portalclient"
2
+ import AuthenticationExtension from "./authenticationExtension"
3
3
 
4
- export default class Tokens extends Extension {
4
+ export default class Tokens extends AuthenticationExtension {
5
5
  public readonly refreshAuthenticationType = "RefreshToken"
6
+
6
7
  protected extensionName: string = "Tokens"
7
8
 
8
9
  public post(refreshToken: string): IServiceCall<ITokens> {
9
- return this.onSuccess(this.call(null, null, HttpMethod.Post, refreshToken),
10
- r => {
11
- this.setAccessToken(r.Access, this.refreshAuthenticationType)
12
- RefreshTokenCreatedEvent.dispatch(r.Refresh, this.client)
13
- })
10
+ return this.setTokensFromCall(
11
+ this.call(null, null, HttpMethod.Post, refreshToken),
12
+ this.refreshAuthenticationType
13
+ )
14
14
  }
15
15
 
16
16
  public refreshDelete(refreshToken: string): IServiceCall<void> {
@@ -23,7 +23,7 @@ export interface ITokens {
23
23
  Refresh: string
24
24
  }
25
25
 
26
- Extension.add(Tokens, "tokens")
26
+ AuthenticationExtension.add(Tokens, "tokens")
27
27
 
28
28
  declare module "@chaosinsight/portalclient" {
29
29
  // tslint:disable-next-line
@@ -1,8 +1,10 @@
1
- import {Extension, HttpMethod, IServiceCall} from "@chaosinsight/portalclient"
2
- import {ISession, RefreshTokenCreatedEvent} from "../index"
1
+ import {HttpMethod, IServiceCall} from "@chaosinsight/portalclient"
2
+ import {ISession} from "../index"
3
+ import AuthenticationExtension from "./authenticationExtension"
3
4
 
4
- export default class Users extends Extension {
5
+ export default class Users extends AuthenticationExtension {
5
6
  public readonly authenticationType = "UserCreation"
7
+
6
8
  protected extensionName: string = "Users"
7
9
 
8
10
  public get(role: UserRole, lastSeenGreaterThan: Date): IServiceCall<IPublicUser[]> {
@@ -10,11 +12,9 @@ export default class Users extends Extension {
10
12
  }
11
13
 
12
14
  public post(name: string, email: string, password: string, language: string, consentToTermsOfUse: boolean, consentToMarketing: boolean, consentToNotifications: boolean, token: string): IServiceCall<ISession> {
13
- return this.onSuccess(this.call(null, {name, email, password, language, consentToTermsOfUse, consentToMarketing, consentToNotifications}, HttpMethod.Post, token),
14
- session => {
15
- this.setAccessToken(session.Tokens.Access, this.authenticationType)
16
- RefreshTokenCreatedEvent.dispatch(session.Tokens.Refresh, this.client)
17
- }
15
+ return this.setTokensFromSessionCall(
16
+ this.call(null, {name, email, password, language, consentToTermsOfUse, consentToMarketing, consentToNotifications}, HttpMethod.Post, token),
17
+ this.authenticationType
18
18
  )
19
19
  }
20
20
 
@@ -81,7 +81,7 @@ export interface ISignUpToken {
81
81
  Token: string
82
82
  }
83
83
 
84
- Extension.add(Users, "users")
84
+ AuthenticationExtension.add(Users, "users")
85
85
 
86
86
  declare module "@chaosinsight/portalclient" {
87
87
  // tslint:disable-next-line
package/src/index.ts CHANGED
@@ -6,6 +6,7 @@ import "./extensions/liveDeals"
6
6
  import "./extensions/locations"
7
7
  import "./extensions/orders"
8
8
  import "./extensions/organizations"
9
+ import "./extensions/passkey"
9
10
  import "./extensions/passwords"
10
11
  import "./extensions/posts"
11
12
  import "./extensions/publicDeals"
@@ -36,6 +37,7 @@ export type {IFilter} from "./extensions/filters"
36
37
  export type {ILocation, ILocationInvitation, ILocationWithServices, ILocationDealConfiguration, ILocationStatisticsConfiguration, ILocationFeatures, IPostSuggestion, IExternalLocation} from "./extensions/locations"
37
38
  export type {IOrder, IOrderLine} from "./extensions/orders"
38
39
  export type {IDatedPostStatistics, IOrganization, IOrganizationInvitation, IOrganizationMembership, IOrganizationPermission, IPostStatistics, IDetailedPostStatistics, ISummaryStatistics, ISummeryLocationStatistics, ISummeryPostStatistics, IFeatureFlags, ILocationCreationData, IOrganizationReviewConfiguration, IOrganizationNotificationConfiguration, IOrganizationDealsConfiguration, IOrganizationStatisticsConfiguration, IExternalOrganization} from "./extensions/organizations"
40
+ export type {IPasskeyAssertion, IPasskeyCredential} from "./extensions/passkey"
39
41
  export type {IDated, IDeleted, IPost, IPostWithStatisticsAndDeal, IPostWithStatisticsAndLocation, IPostFromTemplate, IPostData, IPostingFailure, IPostingSuccess, IPostError, IServicePostError, IPostLocation, IPostTypeData, IPostTypeDataDeal, IPostTypeDataFacebookCarousel, IPostTypeDataFacebookLive, IPostTypeDataFacebookReel, ICarouselItem} from "./extensions/posts"
40
42
  export type {IPublicDeal} from "./extensions/publicDeals"
41
43
  export type {IPublicLocation} from "./extensions/publicLocations"