0
Get customers search
One script reply has been approved by the moderators Verified

Search for customers you’ve previously created using Stripe’s Search Query Language. Don’t use search in read-after-write flows where strict consistency is necessary. Under normal operating conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up to an hour behind during outages. Search functionality is not available to merchants in India.

Created by hugo697 188 days ago Viewed 5634 times
0
Submitted by hugo697 Typescript (fetch-only)
Verified 188 days ago
1
type Stripe = {
2
  token: string;
3
};
4
/**
5
 * Get customers search
6
 * Search for customers you’ve previously created using Stripe’s Search Query Language.
7
Don’t use search in read-after-write flows where strict consistency is necessary. Under normal operating
8
conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up
9
to an hour behind during outages. Search functionality is not available to merchants in India.
10
 */
11
export async function main(
12
  auth: Stripe,
13
  expand: any,
14
  limit: string | undefined,
15
  page: string | undefined,
16
  query: string | undefined
17
) {
18
  const url = new URL(`https://api.stripe.com/v1/customers/search`);
19
  for (const [k, v] of [
20
    ["limit", limit],
21
    ["page", page],
22
    ["query", query],
23
  ]) {
24
    if (v !== undefined && v !== "") {
25
      url.searchParams.append(k, v);
26
    }
27
  }
28
  encodeParams({ expand }).forEach((v, k) => {
29
    if (v !== undefined && v !== "") {
30
      url.searchParams.append(k, v);
31
    }
32
  });
33
  const response = await fetch(url, {
34
    method: "GET",
35
    headers: {
36
      "Content-Type": "application/x-www-form-urlencoded",
37
      Authorization: "Bearer " + auth.token,
38
    },
39
    body: undefined,
40
  });
41
  if (!response.ok) {
42
    const text = await response.text();
43
    throw new Error(`${response.status} ${text}`);
44
  }
45
  return await response.json();
46
}
47

48
function encodeParams(o: any) {
49
  function iter(o: any, path: string) {
50
    if (Array.isArray(o)) {
51
      o.forEach(function (a) {
52
        iter(a, path + "[]");
53
      });
54
      return;
55
    }
56
    if (o !== null && typeof o === "object") {
57
      Object.keys(o).forEach(function (k) {
58
        iter(o[k], path + "[" + k + "]");
59
      });
60
      return;
61
    }
62
    data.push(path + "=" + o);
63
  }
64
  const data: string[] = [];
65
  Object.keys(o).forEach(function (k) {
66
    if (o[k] !== undefined) {
67
      iter(o[k], k);
68
    }
69
  });
70
  return new URLSearchParams(data.join("&"));
71
}
72

Other submissions