@splendidlabz/third-party 1.5.3 → 1.6.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/package.json CHANGED
@@ -1,13 +1,19 @@
1
1
  {
2
2
  "name": "@splendidlabz/third-party",
3
3
  "prettier": "@splendidlabz/prettier-config",
4
- "version": "1.5.3",
4
+ "version": "1.6.0",
5
5
  "description": "",
6
6
  "type": "module",
7
7
  "sideEffects": false,
8
8
  "exports": {
9
9
  "./*": "./lib/*.js"
10
10
  },
11
+ "files": [
12
+ "lib",
13
+ "!**/__tests__",
14
+ "!**/*.spec.js",
15
+ "!**/*.test.js"
16
+ ],
11
17
  "scripts": {
12
18
  "lint": "eslint . --fix",
13
19
  "test": "vitest",
@@ -15,12 +21,11 @@
15
21
  },
16
22
  "author": "Zell Liew <zellwk@gmail.com>",
17
23
  "dependencies": {
18
- "@splendidlabz/utils": "1.12.1",
24
+ "@splendidlabz/utils": "1.14.0",
19
25
  "dotenv": "^17.4.2",
20
26
  "googleapis": "^171.4.0",
21
27
  "pino": "^10.3.1",
22
28
  "pino-pretty": "^13.1.3",
23
- "postmark": "^4.0.7",
24
29
  "zl-fetch": "^6.3.1"
25
30
  },
26
31
  "devDependencies": {
package/CHANGELOG.md DELETED
@@ -1,245 +0,0 @@
1
- # @splendidlabz/third-party
2
-
3
- ## 1.5.3
4
-
5
- ### Patch Changes
6
-
7
- - aece0fb: `http-errors` and `vitest` are no longer dependencies. `http-errors` belongs to `@splendidlabz/tracking`, and `vitest` is a test runner that was shipping to every consumer — it is now a devDependency. Neither is imported by shipped code, so this package works exactly as before and installs get smaller. If your own code imports either directly, declare it in your own `package.json`.
8
-
9
- Add the missing `dotenv` dependency. `lib/buttondown.js` imports `dotenv/config`, but `dotenv` was never declared and was not installed at all, so importing `@splendidlabz/third-party/buttondown` failed outright.
10
-
11
- Remove the dead `main` field. This package is subpath-only and exposes no root export, so `main` pointed at a file that does not exist and `exports` already took precedence.
12
-
13
- ## 1.5.2
14
-
15
- ### Patch Changes
16
-
17
- - Updated dependencies [34fc1c5]
18
- - @splendidlabz/utils@1.12.1
19
-
20
- ## 1.5.1
21
-
22
- ### Patch Changes
23
-
24
- - Updated dependencies [19f0f57]
25
- - @splendidlabz/utils@1.12.0
26
-
27
- ## 1.5.0
28
-
29
- ### Minor Changes
30
-
31
- - 3cc70d5: Add social media automation library — format and post content to Twitter, Threads, and Instagram from a single content object. Supports threads, dry-run mode, and cross-platform orchestration.
32
-
33
- ## 1.4.0
34
-
35
- ### Minor Changes
36
-
37
- - Add social media automation library — format and post content to Twitter, Threads, and Instagram from a single content object. Supports threads, dry-run mode, and cross-platform orchestration.
38
-
39
- ## 1.3.18
40
-
41
- ### Patch Changes
42
-
43
- - Updated dependencies [42cd5a2]
44
- - @splendidlabz/utils@1.11.6
45
-
46
- ## 1.3.17
47
-
48
- ### Patch Changes
49
-
50
- - c054af3: Bump production dependencies to latest compatible versions
51
- - Updated dependencies [c054af3]
52
- - @splendidlabz/utils@1.11.5
53
-
54
- ## 1.3.16
55
-
56
- ### Patch Changes
57
-
58
- - Updated dependencies [ae250ef]
59
- - @splendidlabz/utils@1.11.4
60
-
61
- ## 1.3.15
62
-
63
- ### Patch Changes
64
-
65
- - Updated dependencies [7b9b628]
66
- - @splendidlabz/utils@1.11.3
67
-
68
- ## 1.3.14
69
-
70
- ### Patch Changes
71
-
72
- - Updated dependencies
73
- - @splendidlabz/utils@1.11.2
74
-
75
- ## 1.3.13
76
-
77
- ### Patch Changes
78
-
79
- - Updated dependencies
80
- - @splendidlabz/utils@1.11.1
81
-
82
- ## 1.3.12
83
-
84
- ### Patch Changes
85
-
86
- - Updated dependencies
87
- - @splendidlabz/utils@1.11.0
88
-
89
- ## 1.3.11
90
-
91
- ### Patch Changes
92
-
93
- - Updated dependencies
94
- - @splendidlabz/utils@1.10.7
95
-
96
- ## 1.3.10
97
-
98
- ### Patch Changes
99
-
100
- - Prettify logger code
101
- - Updated dependencies
102
- - @splendidlabz/utils@1.10.6
103
-
104
- ## 1.3.11
105
-
106
- ### Patch Changes
107
-
108
- - Updated dependencies
109
- - @splendidlabz/utils@1.10.5
110
-
111
- ## 1.3.10
112
-
113
- ### Patch Changes
114
-
115
- - Updated dependencies
116
- - @splendidlabz/utils@1.10.4
117
-
118
- ## 1.3.9
119
-
120
- ### Patch Changes
121
-
122
- - Updated dependencies
123
- - @splendidlabz/utils@1.10.3
124
-
125
- ## 1.3.8
126
-
127
- ### Patch Changes
128
-
129
- - Updated dependencies
130
- - @splendidlabz/utils@1.10.2
131
-
132
- ## 1.3.7
133
-
134
- ### Patch Changes
135
-
136
- - Updated dependencies
137
- - @splendidlabz/utils@1.10.1
138
-
139
- ## 1.3.6
140
-
141
- ### Patch Changes
142
-
143
- - 96c92cc: Some cleanup and typo fixes
144
- - Updated dependencies [4efacb3]
145
- - @splendidlabz/utils@1.10.0
146
-
147
- ## 1.3.5
148
-
149
- ### Patch Changes
150
-
151
- - Updated dependencies
152
- - @splendidlabz/utils@1.9.1
153
-
154
- ## 1.3.4
155
-
156
- ### Patch Changes
157
-
158
- - Updated dependencies [8f2cb34]
159
- - @splendidlabz/utils@1.9.0
160
-
161
- ## 1.3.3
162
-
163
- ### Patch Changes
164
-
165
- - Updated dependencies
166
- - @splendidlabz/utils@1.8.2
167
-
168
- ## 1.3.2
169
-
170
- ### Patch Changes
171
-
172
- - Updated dependencies
173
- - @splendidlabz/utils@1.8.1
174
-
175
- ## 1.3.0
176
-
177
- ### Minor Changes
178
-
179
- - Many changes! Woo
180
-
181
- ### Patch Changes
182
-
183
- - 5114274: Sendy: Include prettyName option
184
- - Updated dependencies [2c149fc]
185
- - Updated dependencies
186
- - @splendidlabz/utils@1.7.0
187
-
188
- ## 1.2.0
189
-
190
- ### Minor Changes
191
-
192
- - Many many upgrades which I didn't document properly 😅. The details are in Github history, but too many details to talk about now.
193
-
194
- ### Patch Changes
195
-
196
- - Updated dependencies
197
- - @splendidlabz/utils@1.6.0
198
-
199
- ## 1.1.1
200
-
201
- ### Patch Changes
202
-
203
- - Updated dependencies
204
- - @splendidlabz/utils@1.5.1
205
-
206
- ## 1.1.0
207
-
208
- ### Minor Changes
209
-
210
- - 8b17adc: Ready for next release
211
-
212
- ### Patch Changes
213
-
214
- - Updated dependencies [df4f2d6]
215
- - Updated dependencies [859a2b0]
216
- - Updated dependencies [acf9faf]
217
- - Updated dependencies [8b17adc]
218
- - Updated dependencies [5fe7c51]
219
- - Updated dependencies
220
- - Updated dependencies [bb06596]
221
- - @splendidlabz/utils@1.5.0
222
-
223
- ## 1.1.0-beta.1
224
-
225
- ### Patch Changes
226
-
227
- - Updated dependencies
228
- - @splendidlabz/utils@1.5.0-beta.6
229
-
230
- ## 1.1.0-beta.0
231
-
232
- ### Minor Changes
233
-
234
- - Ready for next release
235
-
236
- ### Patch Changes
237
-
238
- - Updated dependencies
239
- - @splendidlabz/utils@1.5.0-beta.5
240
-
241
- ## 1.0.0
242
-
243
- ### Major Changes
244
-
245
- - Added a couple of improvements
package/eslint.config.js DELETED
@@ -1,2 +0,0 @@
1
- import config from '@splendidlabz/eslint-config'
2
- export default config
@@ -1,123 +0,0 @@
1
- import 'dotenv/config'
2
- import { test as base, describe, expect } from 'vitest'
3
- import {
4
- createSubscriber,
5
- deleteSubscriber,
6
- deleteTags,
7
- getSubscriber,
8
- removeTagsFromSubscriber,
9
- updateSubscriber,
10
- } from './buttondown.js'
11
-
12
- // Test email that we'll use for all tests
13
- if (!import.meta.env.BUTTONDOWN_KEY)
14
- throw new Error('BUTTONDOWN_KEY environment variable is required')
15
-
16
- const DEFAULT_DATA = {
17
- tags: ['test', 'test2'],
18
- metadata: { first_name: 'Name' },
19
- }
20
-
21
- // Create test with custom fixtures
22
- const test = base.extend({
23
- // eslint-disable-next-line no-empty-pattern
24
- email: async ({}, use) => {
25
- const email = `test-user-${Date.now()}@example.com`
26
- await use(email)
27
- // Cleanup after test
28
- await deleteSubscriber(email)
29
- await deleteTags([...DEFAULT_DATA.tags, 'test3'])
30
- },
31
- })
32
-
33
- describe('Create Subscriber', () => {
34
- test('Creates a new subscriber', async ({ email }) => {
35
- const result = await createSubscriber(email, DEFAULT_DATA)
36
-
37
- expect(result.email_address).toBe(email)
38
- expect(result.metadata.first_name).toBe(DEFAULT_DATA.metadata.first_name)
39
- expect(result.tags).toContain(DEFAULT_DATA.tags[0])
40
- expect(result.tags).toContain(DEFAULT_DATA.tags[1])
41
- expect(result.type).toBe('unactivated')
42
- })
43
-
44
- test('Bypasses double-opt-in', async ({ email }) => {
45
- const result = await createSubscriber(email, DEFAULT_DATA, {
46
- double_opt_in: true,
47
- })
48
- expect(result.type).toBe('regular')
49
- })
50
- })
51
-
52
- describe('Get Subscriber', () => {
53
- test('Gets a subscriber', async ({ email }) => {
54
- await createSubscriber(email, DEFAULT_DATA)
55
- const result = await getSubscriber(email)
56
- expect(result.email_address).toBe(email)
57
- expect(result.metadata.first_name).toBe(DEFAULT_DATA.metadata.first_name)
58
- expect(result.tags).toContain(DEFAULT_DATA.tags[0])
59
- expect(result.tags).toContain(DEFAULT_DATA.tags[1])
60
- })
61
-
62
- test('Null if no subscriber', async () => {
63
- const result = await getSubscriber('nonexistent@example.com')
64
- expect(result).toBeNull()
65
- })
66
- })
67
-
68
- describe('Update Subscriber', () => {
69
- test('updates subscriber tags and metadata', async ({ email }) => {
70
- await createSubscriber(email, DEFAULT_DATA)
71
-
72
- const result = await updateSubscriber(email, {
73
- tags: ['test3'],
74
- metadata: { last_name: 'Last' },
75
- })
76
-
77
- expect(result.tags).toContain('test')
78
- expect(result.tags).toContain('test2')
79
- expect(result.tags).toContain('test3')
80
- expect(result.metadata.last_name).toBe('Last')
81
- expect(result.metadata.first_name).toBe(DEFAULT_DATA.metadata.first_name)
82
- })
83
-
84
- test('Overwrites tags', async ({ email }) => {
85
- await createSubscriber(email, DEFAULT_DATA)
86
- const result = await updateSubscriber(
87
- email,
88
- { tags: ['test3'] },
89
- { overwrite: true },
90
- )
91
-
92
- expect(result.tags).toContain('test3')
93
- expect(result.tags).not.toContain('test')
94
- expect(result.tags).not.toContain('test2')
95
- expect(result.metadata.first_name).toBe(DEFAULT_DATA.metadata.first_name)
96
- })
97
-
98
- test('Overwrites metadata', async ({ email }) => {
99
- await createSubscriber(email, DEFAULT_DATA)
100
- const result = await updateSubscriber(
101
- email,
102
- { metadata: { last_name: 'Last' } },
103
- { overwrite: true },
104
- )
105
-
106
- expect(result.tags).toContain('test')
107
- expect(result.tags).toContain('test2')
108
- expect(result.metadata.first_name).not.toBe(
109
- DEFAULT_DATA.metadata.first_name,
110
- )
111
- expect(result.metadata.last_name).toBe('Last')
112
- })
113
- })
114
-
115
- describe('Remove Tags from Subscriber', () => {
116
- test('Retains other tags', async ({ email }) => {
117
- await createSubscriber(email, DEFAULT_DATA)
118
- const result = await removeTagsFromSubscriber(email, ['test2'])
119
-
120
- expect(result.tags).toContain('test')
121
- expect(result.tags).not.toContain('test2')
122
- })
123
- })
package/lib/postmark.js DELETED
@@ -1,32 +0,0 @@
1
- import postmark from 'postmark'
2
-
3
- const DEFAULT_OPTIONS = {
4
- MessageStream: 'outbound', // outbound | broadcast
5
- }
6
-
7
- export default function Postmark(API_KEY, options) {
8
- const POSTMARK_KEY = API_KEY || process.env.POSTMARK_KEY
9
- const client = new postmark.ServerClient(POSTMARK_KEY)
10
- const baseOpts = Object.assign({}, DEFAULT_OPTIONS, options)
11
-
12
- return {
13
- constructEmailAddress(name, email) {
14
- return `${name} <${email}>`
15
- },
16
-
17
- sendEmail(options) {
18
- const opts = Object.assign({}, baseOpts, options)
19
- const { from, to, replyTo, subject, html, text, ...rest } = opts
20
-
21
- return client.sendEmail({
22
- From: from,
23
- To: to,
24
- ReplyTo: replyTo,
25
- Subject: subject,
26
- HTMLBody: html,
27
- TextBody: text,
28
- ...rest,
29
- })
30
- },
31
- }
32
- }
package/vitest.config.js DELETED
@@ -1,23 +0,0 @@
1
- import { defineConfig } from 'vitest/config'
2
-
3
- export default defineConfig({
4
- test: {
5
- // Increase timeout for API tests
6
- testTimeout: 10000,
7
-
8
- // Better error output
9
- onConsoleLog(log, type) {
10
- console.log(`[${type}] ${log}`)
11
- return false
12
- },
13
-
14
- // Show test progress
15
- progress: true,
16
-
17
- // Better diff output
18
- diffLimit: 1000,
19
-
20
- // Show test location in output
21
- location: true,
22
- },
23
- })