-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.ts
74 lines (68 loc) · 2.22 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import * as functions from 'firebase-functions'
import * as Stripe from 'stripe'
import { nullFilter } from '../../helper'
import config from '../../config'
import { Product } from '../../models/Product'
import * as Plan from './Plan'
import * as SKU from './SKU'
export const plan = { ...Plan }
export const sku = { ...SKU }
export const onCreate = functions.firestore
.document('/commerce/{version}/products/{productID}')
.onCreate(async (snapshot, context) => {
console.info(context)
const STRIPE_API_KEY = config.stripe.api_key || functions.config().stripe.api_key
if (!STRIPE_API_KEY) {
throw new functions.https.HttpsError('invalid-argument', 'The functions requires STRIPE_API_KEY.')
}
const product: Product = Product.fromSnapshot(snapshot)
const stripe = new Stripe(STRIPE_API_KEY)
const data: Stripe.products.IProductCreationOptions = {
id: product.id,
type: product.type,
name: product.name,
caption: product.caption,
description: product.description,
active: product.isAvailable,
metadata: {
product_path: product.path
}
}
try {
await stripe.products.create(nullFilter(data))
} catch (error) {
console.error(error)
product.isAvailable = false
await product.update()
}
})
export const onUpdate = functions.firestore
.document('/commerce/{version}/products/{productID}')
.onUpdate(async (snapshot, context) => {
console.info(context)
const product: Product = Product.fromSnapshot(snapshot.after)
if (!product.isAvailable) {
return
}
const STRIPE_API_KEY = config.stripe.api_key || functions.config().stripe.api_key
if (!STRIPE_API_KEY) {
throw new functions.https.HttpsError('invalid-argument', 'The functions requires STRIPE_API_KEY.')
}
const stripe = new Stripe(STRIPE_API_KEY)
const data: Stripe.products.IProductUpdateOptions = {
name: product.name,
caption: product.caption,
description: product.description,
active: product.isAvailable,
metadata: {
product_path: product.path
}
}
try {
await stripe.products.update(product.id, nullFilter(data))
} catch (error) {
console.error(error)
product.isAvailable = false
await product.update()
}
})