@logopulse/sdk 1.0.1 → 1.1.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/dist/index.d.ts +63 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +84 -16
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export interface LogoPulseConfig {
|
|
2
|
-
apiUrl: string;
|
|
3
2
|
apiKey: string;
|
|
4
3
|
orgId: string;
|
|
5
4
|
timeout?: number;
|
|
@@ -16,24 +15,52 @@ export interface AnalyticsEvent {
|
|
|
16
15
|
traceId?: string;
|
|
17
16
|
}
|
|
18
17
|
/**
|
|
19
|
-
* Customer
|
|
18
|
+
* Customer Account Data (Business/Company)
|
|
19
|
+
* Used when creating a new customer account
|
|
20
20
|
*/
|
|
21
|
-
export interface
|
|
21
|
+
export interface CustomerAccount {
|
|
22
22
|
accountId: string;
|
|
23
|
-
companyName
|
|
23
|
+
companyName: string;
|
|
24
24
|
ownerEmail?: string;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
lastName?: string;
|
|
25
|
+
ownerFirstName?: string;
|
|
26
|
+
ownerLastName?: string;
|
|
28
27
|
phone?: string;
|
|
29
28
|
address?: string;
|
|
30
29
|
city?: string;
|
|
31
30
|
state?: string;
|
|
32
31
|
country?: string;
|
|
33
32
|
postalCode?: string;
|
|
34
|
-
clientSince?: string;
|
|
35
33
|
[key: string]: any;
|
|
36
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* User Data (Individual seat/user)
|
|
37
|
+
* Used when adding users to an existing account
|
|
38
|
+
*/
|
|
39
|
+
export interface User {
|
|
40
|
+
accountId: string;
|
|
41
|
+
userId: string;
|
|
42
|
+
email: string;
|
|
43
|
+
firstName?: string;
|
|
44
|
+
lastName?: string;
|
|
45
|
+
role?: string;
|
|
46
|
+
[key: string]: any;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Reserved Event Types (Standard SaaS Events)
|
|
50
|
+
* These are built into LogoPulse and have special handling
|
|
51
|
+
*/
|
|
52
|
+
export declare enum ReservedEvents {
|
|
53
|
+
ACCOUNT_CREATED = "account.created",
|
|
54
|
+
ACCOUNT_UPDATED = "account.updated",
|
|
55
|
+
USER_INVITED = "user.invited",
|
|
56
|
+
USER_ACCEPTED_INVITE = "user.accepted_invite",
|
|
57
|
+
USER_ADDED = "user.added",
|
|
58
|
+
USER_REMOVED = "user.removed",
|
|
59
|
+
USER_LOGIN = "user.login",
|
|
60
|
+
SUBSCRIPTION_STARTED = "subscription.started",
|
|
61
|
+
SUBSCRIPTION_CANCELLED = "subscription.cancelled",
|
|
62
|
+
SUBSCRIPTION_RENEWED = "subscription.renewed"
|
|
63
|
+
}
|
|
37
64
|
/**
|
|
38
65
|
* LogoPulse SDK
|
|
39
66
|
* Track client analytics events
|
|
@@ -52,22 +79,40 @@ export declare class LogoPulse {
|
|
|
52
79
|
source?: string;
|
|
53
80
|
}): Promise<void>;
|
|
54
81
|
/**
|
|
55
|
-
*
|
|
82
|
+
* Create Customer Account (First-time account creation)
|
|
83
|
+
*
|
|
84
|
+
* Call this when:
|
|
85
|
+
* - New business/company account is created
|
|
86
|
+
* - Owner completes signup flow
|
|
56
87
|
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
* - Account/business is created (from business service)
|
|
60
|
-
* - User updates profile or business info
|
|
88
|
+
* This is the PRIMARY account creation - not additional users.
|
|
89
|
+
* Automatically tracks 'account.created' event.
|
|
61
90
|
*
|
|
62
|
-
*
|
|
91
|
+
* @param account Customer account data
|
|
63
92
|
*/
|
|
64
|
-
|
|
93
|
+
createCustomer(account: CustomerAccount): Promise<void>;
|
|
65
94
|
/**
|
|
66
|
-
*
|
|
95
|
+
* Add User to Existing Account (Additional seat)
|
|
96
|
+
*
|
|
97
|
+
* Call this when:
|
|
98
|
+
* - User accepts invitation to join account
|
|
99
|
+
* - Admin adds user to account
|
|
100
|
+
* - User is assigned to account after signup
|
|
101
|
+
*
|
|
102
|
+
* Automatically tracks 'user.added' event.
|
|
103
|
+
*
|
|
104
|
+
* @param user User data
|
|
105
|
+
*/
|
|
106
|
+
addUser(user: User): Promise<void>;
|
|
107
|
+
/**
|
|
108
|
+
* Update Customer Account Data (Partial update)
|
|
109
|
+
*
|
|
110
|
+
* Use this for updating account information without full re-creation.
|
|
67
111
|
*
|
|
68
|
-
*
|
|
112
|
+
* @param accountId Account ID
|
|
113
|
+
* @param updates Fields to update
|
|
69
114
|
*/
|
|
70
|
-
updateCustomer(accountId: string, updates: Partial<Omit<
|
|
115
|
+
updateCustomer(accountId: string, updates: Partial<Omit<CustomerAccount, 'accountId'>>): Promise<void>;
|
|
71
116
|
}
|
|
72
117
|
export declare function createLogoPulse(config: LogoPulseConfig): LogoPulse;
|
|
73
118
|
export declare function getLogoPulse(): LogoPulse;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -3,10 +3,35 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.LogoPulse = void 0;
|
|
6
|
+
exports.LogoPulse = exports.ReservedEvents = void 0;
|
|
7
7
|
exports.createLogoPulse = createLogoPulse;
|
|
8
8
|
exports.getLogoPulse = getLogoPulse;
|
|
9
9
|
const axios_1 = __importDefault(require("axios"));
|
|
10
|
+
/**
|
|
11
|
+
* LogoPulse API URL - baked into SDK
|
|
12
|
+
* Clients don't need to know backend infrastructure details
|
|
13
|
+
*/
|
|
14
|
+
const LOGOPULSE_API_URL = 'https://8e0caintuk.execute-api.us-east-1.amazonaws.com/production';
|
|
15
|
+
/**
|
|
16
|
+
* Reserved Event Types (Standard SaaS Events)
|
|
17
|
+
* These are built into LogoPulse and have special handling
|
|
18
|
+
*/
|
|
19
|
+
var ReservedEvents;
|
|
20
|
+
(function (ReservedEvents) {
|
|
21
|
+
// Account/Customer lifecycle
|
|
22
|
+
ReservedEvents["ACCOUNT_CREATED"] = "account.created";
|
|
23
|
+
ReservedEvents["ACCOUNT_UPDATED"] = "account.updated";
|
|
24
|
+
// User lifecycle
|
|
25
|
+
ReservedEvents["USER_INVITED"] = "user.invited";
|
|
26
|
+
ReservedEvents["USER_ACCEPTED_INVITE"] = "user.accepted_invite";
|
|
27
|
+
ReservedEvents["USER_ADDED"] = "user.added";
|
|
28
|
+
ReservedEvents["USER_REMOVED"] = "user.removed";
|
|
29
|
+
ReservedEvents["USER_LOGIN"] = "user.login";
|
|
30
|
+
// Subscription lifecycle
|
|
31
|
+
ReservedEvents["SUBSCRIPTION_STARTED"] = "subscription.started";
|
|
32
|
+
ReservedEvents["SUBSCRIPTION_CANCELLED"] = "subscription.cancelled";
|
|
33
|
+
ReservedEvents["SUBSCRIPTION_RENEWED"] = "subscription.renewed";
|
|
34
|
+
})(ReservedEvents || (exports.ReservedEvents = ReservedEvents = {}));
|
|
10
35
|
/**
|
|
11
36
|
* LogoPulse SDK
|
|
12
37
|
* Track client analytics events
|
|
@@ -15,7 +40,7 @@ class LogoPulse {
|
|
|
15
40
|
constructor(config) {
|
|
16
41
|
this.config = config;
|
|
17
42
|
this.client = axios_1.default.create({
|
|
18
|
-
baseURL:
|
|
43
|
+
baseURL: LOGOPULSE_API_URL,
|
|
19
44
|
timeout: config.timeout || 5000,
|
|
20
45
|
headers: {
|
|
21
46
|
'Content-Type': 'application/json',
|
|
@@ -47,41 +72,84 @@ class LogoPulse {
|
|
|
47
72
|
}
|
|
48
73
|
}
|
|
49
74
|
/**
|
|
50
|
-
*
|
|
75
|
+
* Create Customer Account (First-time account creation)
|
|
76
|
+
*
|
|
77
|
+
* Call this when:
|
|
78
|
+
* - New business/company account is created
|
|
79
|
+
* - Owner completes signup flow
|
|
80
|
+
*
|
|
81
|
+
* This is the PRIMARY account creation - not additional users.
|
|
82
|
+
* Automatically tracks 'account.created' event.
|
|
83
|
+
*
|
|
84
|
+
* @param account Customer account data
|
|
85
|
+
*/
|
|
86
|
+
async createCustomer(account) {
|
|
87
|
+
try {
|
|
88
|
+
await this.client.post('/v1/customers', {
|
|
89
|
+
orgId: this.config.orgId,
|
|
90
|
+
...account,
|
|
91
|
+
createdAt: new Date().toISOString(),
|
|
92
|
+
});
|
|
93
|
+
// Automatically track account.created event
|
|
94
|
+
await this.track(ReservedEvents.ACCOUNT_CREATED, account.accountId, {
|
|
95
|
+
companyName: account.companyName,
|
|
96
|
+
ownerEmail: account.ownerEmail,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
console.error(`LogoPulse createCustomer error (${account.accountId}):`, error.message);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Add User to Existing Account (Additional seat)
|
|
105
|
+
*
|
|
106
|
+
* Call this when:
|
|
107
|
+
* - User accepts invitation to join account
|
|
108
|
+
* - Admin adds user to account
|
|
109
|
+
* - User is assigned to account after signup
|
|
51
110
|
*
|
|
52
|
-
*
|
|
53
|
-
* - User signs up (from user service)
|
|
54
|
-
* - Account/business is created (from business service)
|
|
55
|
-
* - User updates profile or business info
|
|
111
|
+
* Automatically tracks 'user.added' event.
|
|
56
112
|
*
|
|
57
|
-
*
|
|
113
|
+
* @param user User data
|
|
58
114
|
*/
|
|
59
|
-
async
|
|
115
|
+
async addUser(user) {
|
|
60
116
|
try {
|
|
61
|
-
await this.client.post('/v1/customers/
|
|
117
|
+
await this.client.post('/v1/customers/users', {
|
|
62
118
|
orgId: this.config.orgId,
|
|
63
|
-
...
|
|
119
|
+
...user,
|
|
120
|
+
addedAt: new Date().toISOString(),
|
|
121
|
+
});
|
|
122
|
+
// Automatically track user.added event
|
|
123
|
+
await this.track(ReservedEvents.USER_ADDED, user.accountId, {
|
|
124
|
+
userId: user.userId,
|
|
125
|
+
email: user.email,
|
|
126
|
+
role: user.role,
|
|
64
127
|
});
|
|
65
128
|
}
|
|
66
129
|
catch (error) {
|
|
67
|
-
console.error(`LogoPulse
|
|
130
|
+
console.error(`LogoPulse addUser error (${user.accountId}):`, error.message);
|
|
68
131
|
}
|
|
69
132
|
}
|
|
70
133
|
/**
|
|
71
|
-
* Update
|
|
134
|
+
* Update Customer Account Data (Partial update)
|
|
135
|
+
*
|
|
136
|
+
* Use this for updating account information without full re-creation.
|
|
72
137
|
*
|
|
73
|
-
*
|
|
138
|
+
* @param accountId Account ID
|
|
139
|
+
* @param updates Fields to update
|
|
74
140
|
*/
|
|
75
141
|
async updateCustomer(accountId, updates) {
|
|
76
142
|
try {
|
|
77
|
-
await this.client.patch('/v1/customers
|
|
143
|
+
await this.client.patch('/v1/customers', {
|
|
78
144
|
orgId: this.config.orgId,
|
|
79
145
|
accountId,
|
|
80
146
|
updates,
|
|
81
147
|
});
|
|
148
|
+
// Automatically track account.updated event
|
|
149
|
+
await this.track(ReservedEvents.ACCOUNT_UPDATED, accountId, updates);
|
|
82
150
|
}
|
|
83
151
|
catch (error) {
|
|
84
|
-
console.error(`LogoPulse
|
|
152
|
+
console.error(`LogoPulse updateCustomer error (${accountId}):`, error.message);
|
|
85
153
|
}
|
|
86
154
|
}
|
|
87
155
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|